Merge pull request #1069 from GriffinRichards/doc-link
Document linking
This commit is contained in:
101 files changed
+7130
-6206
No files matched your search
@@ -3,15 +3,15 @@ gLinkDebugSeed
|
||||
gLocalLinkPlayerBlock
|
||||
gLinkErrorOccurred
|
||||
gLinkDebugFlags
|
||||
gFiller_03003074
|
||||
gLinkFiller1
|
||||
gRemoteLinkPlayersNotReceived
|
||||
gBlockReceivedStatus
|
||||
gFiller_03003080
|
||||
gLinkFiller2
|
||||
gLinkHeldKeys
|
||||
gRecvCmds
|
||||
gLinkStatus
|
||||
gUnknown_030030E4
|
||||
gUnknown_030030E8
|
||||
gLinkDummy1
|
||||
gLinkDummy2
|
||||
gUnknown_030030EC
|
||||
gUnknown_030030F0
|
||||
gUnknown_030030F4
|
||||
@@ -26,12 +26,10 @@ gLinkCallback
|
||||
gShouldAdvanceLinkState
|
||||
gLinkTestBlockChecksums
|
||||
gBlockRequestType
|
||||
gFiller_03003154
|
||||
gFiller_03003158
|
||||
gFiller_0300315c
|
||||
gLinkFiller3
|
||||
gLinkFiller4
|
||||
gLinkFiller5
|
||||
gLastSendQueueCount
|
||||
gLink
|
||||
gLastRecvQueueCount
|
||||
gLinkSavedIme
|
||||
gFiller_03004138
|
||||
gFiller_0300413C
|
||||
@@ -786,19 +786,19 @@ BattleFrontier_BattleTowerLobby_EventScript_TryCableLink:: @ 823F2C5
|
||||
setvar VAR_0x8005, 0
|
||||
special TryBattleLinkup
|
||||
waitstate
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful
|
||||
compare VAR_RESULT, 2
|
||||
compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
|
||||
goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady
|
||||
compare VAR_RESULT, 3
|
||||
compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
|
||||
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
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
|
||||
compare VAR_RESULT, 6
|
||||
compare VAR_RESULT, LINKUP_CONNECTION_ERROR
|
||||
goto_if_eq CableClub_EventScript_AbortLinkConnectionError
|
||||
compare VAR_RESULT, 11
|
||||
compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER
|
||||
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink
|
||||
end
|
||||
|
||||
@@ -853,7 +853,7 @@ BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful:: @ 823F3AF
|
||||
message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn
|
||||
waitmessage
|
||||
tower_save CHALLENGE_STATUS_SAVING
|
||||
special sub_80A08CC
|
||||
special SaveForBattleTowerLink
|
||||
waitstate
|
||||
playse SE_SAVE
|
||||
waitse
|
||||
@@ -884,26 +884,26 @@ BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader:: @ 823F3F3
|
||||
|
||||
BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader:: @ 823F430
|
||||
call CableClub_EventScript_TryBecomeLinkLeader
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
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
|
||||
compare VAR_RESULT, 11
|
||||
compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER
|
||||
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink
|
||||
release
|
||||
return
|
||||
|
||||
BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup:: @ 823F463
|
||||
call CableClub_EventScript_TryJoinLinkGroup
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
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
|
||||
compare VAR_RESULT, 11
|
||||
compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER
|
||||
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink
|
||||
release
|
||||
return
|
||||
@@ -914,7 +914,7 @@ BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful:: @ 823F496
|
||||
message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn
|
||||
waitmessage
|
||||
tower_save CHALLENGE_STATUS_SAVING
|
||||
special sub_80A08CC
|
||||
special SaveForBattleTowerLink
|
||||
waitstate
|
||||
playse SE_SAVE
|
||||
waitse
|
||||
|
||||
@@ -767,15 +767,15 @@ LilycoveCity_ContestLobby_EventScript_TrySetUpLinkContest:: @ 821AA15
|
||||
call_if_eq LilycoveCity_ContestLobby_EventScript_TryLinkGMode
|
||||
compare VAR_TEMP_C, 2
|
||||
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
|
||||
compare VAR_RESULT, 3
|
||||
compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
|
||||
goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkContest
|
||||
compare VAR_RESULT, 6
|
||||
compare VAR_RESULT, LINKUP_CONNECTION_ERROR
|
||||
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
|
||||
message3 LilycoveCity_ContestLobby_Text_Transmitting
|
||||
contestlinktransfer
|
||||
@@ -889,22 +889,22 @@ LilycoveCity_ContestLobby_EventScript_DecideLinkLeader:: @ 821ABA6
|
||||
|
||||
LilycoveCity_ContestLobby_EventScript_TryLeadGroup:: @ 821ABE3
|
||||
call LilycoveCity_ContestLobby_EventScript_TryBecomeLinkLeader
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
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
|
||||
release
|
||||
end
|
||||
|
||||
LilycoveCity_ContestLobby_EventScript_TryJoinGroup:: @ 821AC0B
|
||||
call LilycoveCity_ContestLobby_EventScript_TryJoinLinkGroup
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
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
|
||||
release
|
||||
end
|
||||
|
||||
@@ -20,7 +20,7 @@ UnionRoom_OnResume: @ 823D1B1
|
||||
removeobject 5
|
||||
removeobject 4
|
||||
removeobject 3
|
||||
special UnionRoomSpecial
|
||||
special RunUnionRoom
|
||||
end
|
||||
|
||||
UnionRoom_OnTransition: @ 823D1E5
|
||||
@@ -29,7 +29,7 @@ UnionRoom_OnTransition: @ 823D1E5
|
||||
UnionRoom_EventScript_Player1:: @ 823D1E6
|
||||
lock
|
||||
faceplayer
|
||||
setvar VAR_RESULT, 1
|
||||
setvar VAR_RESULT, UR_INTERACT_PLAYER_1
|
||||
waitstate
|
||||
release
|
||||
end
|
||||
@@ -37,7 +37,7 @@ UnionRoom_EventScript_Player1:: @ 823D1E6
|
||||
UnionRoom_EventScript_Player2:: @ 823D1F0
|
||||
lock
|
||||
faceplayer
|
||||
setvar VAR_RESULT, 2
|
||||
setvar VAR_RESULT, UR_INTERACT_PLAYER_2
|
||||
waitstate
|
||||
release
|
||||
end
|
||||
@@ -45,7 +45,7 @@ UnionRoom_EventScript_Player2:: @ 823D1F0
|
||||
UnionRoom_EventScript_Player3:: @ 823D1FA
|
||||
lock
|
||||
faceplayer
|
||||
setvar VAR_RESULT, 3
|
||||
setvar VAR_RESULT, UR_INTERACT_PLAYER_3
|
||||
waitstate
|
||||
release
|
||||
end
|
||||
@@ -53,7 +53,7 @@ UnionRoom_EventScript_Player3:: @ 823D1FA
|
||||
UnionRoom_EventScript_Player4:: @ 823D204
|
||||
lock
|
||||
faceplayer
|
||||
setvar VAR_RESULT, 4
|
||||
setvar VAR_RESULT, UR_INTERACT_PLAYER_4
|
||||
waitstate
|
||||
release
|
||||
end
|
||||
@@ -61,7 +61,7 @@ UnionRoom_EventScript_Player4:: @ 823D204
|
||||
UnionRoom_EventScript_Player5:: @ 823D20E
|
||||
lock
|
||||
faceplayer
|
||||
setvar VAR_RESULT, 5
|
||||
setvar VAR_RESULT, UR_INTERACT_PLAYER_5
|
||||
waitstate
|
||||
release
|
||||
end
|
||||
@@ -69,7 +69,7 @@ UnionRoom_EventScript_Player5:: @ 823D20E
|
||||
UnionRoom_EventScript_Player6:: @ 823D218
|
||||
lock
|
||||
faceplayer
|
||||
setvar VAR_RESULT, 6
|
||||
setvar VAR_RESULT, UR_INTERACT_PLAYER_6
|
||||
waitstate
|
||||
release
|
||||
end
|
||||
@@ -77,7 +77,7 @@ UnionRoom_EventScript_Player6:: @ 823D218
|
||||
UnionRoom_EventScript_Player7:: @ 823D222
|
||||
lock
|
||||
faceplayer
|
||||
setvar VAR_RESULT, 7
|
||||
setvar VAR_RESULT, UR_INTERACT_PLAYER_7
|
||||
waitstate
|
||||
release
|
||||
end
|
||||
@@ -85,7 +85,7 @@ UnionRoom_EventScript_Player7:: @ 823D222
|
||||
UnionRoom_EventScript_Player8:: @ 823D22C
|
||||
lock
|
||||
faceplayer
|
||||
setvar VAR_RESULT, 8
|
||||
setvar VAR_RESULT, UR_INTERACT_PLAYER_8
|
||||
waitstate
|
||||
release
|
||||
end
|
||||
@@ -93,14 +93,14 @@ UnionRoom_EventScript_Player8:: @ 823D22C
|
||||
UnionRoom_EventScript_Attendant:: @ 823D236
|
||||
lock
|
||||
faceplayer
|
||||
setvar VAR_RESULT, 9
|
||||
setvar VAR_RESULT, UR_INTERACT_ATTENDANT
|
||||
waitstate
|
||||
release
|
||||
end
|
||||
|
||||
UnionRoom_EventScript_Unused:: @ 823D240
|
||||
lockall
|
||||
setvar VAR_RESULT, 10
|
||||
setvar VAR_RESULT, UR_INTERACT_UNUSED
|
||||
waitstate
|
||||
releaseall
|
||||
end
|
||||
|
||||
@@ -600,15 +600,15 @@ BerryBlender_EventScript_TryDoLinkBlender: @ 82940BB
|
||||
waitmessage
|
||||
special TryBerryBlenderLinkup
|
||||
waitstate
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq BerryBlender_EventScript_SpawnLinkPartners
|
||||
compare VAR_RESULT, 2
|
||||
compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
|
||||
goto_if_eq BerryBlender_EventScript_CloseLinkNotReady
|
||||
compare VAR_RESULT, 3
|
||||
compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
|
||||
goto_if_eq BerryBlender_EventScript_CloseLinkDifferentSelections
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq BerryBlender_EventScript_CloseLink
|
||||
compare VAR_RESULT, 6
|
||||
compare VAR_RESULT, LINKUP_CONNECTION_ERROR
|
||||
goto_if_eq BerryBlender_EventScript_LinkError
|
||||
end
|
||||
|
||||
@@ -712,22 +712,22 @@ BerryBlender_EventScript_DecideLinkLeader: @ 82941F8
|
||||
|
||||
BerryBlender_EventScript_TryLeadGroup: @ 8294235
|
||||
call BerryBlender_EventScript_TryBecomeLinkLeader
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq BerryBlender_EventScript_LinkLeaderDecided
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq BerryBlender_EventScript_DecideLinkLeader
|
||||
compare VAR_RESULT, 8
|
||||
compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
|
||||
goto_if_eq BerryBlender_EventScript_TryLeadGroup
|
||||
release
|
||||
end
|
||||
|
||||
BerryBlender_EventScript_TryJoinGroup: @ 829425D
|
||||
call BerryBlender_EventScript_TryJoinLinkGroup
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq BerryBlender_EventScript_LinkLeaderDecided
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq BerryBlender_EventScript_DecideLinkLeader
|
||||
compare VAR_RESULT, 8
|
||||
compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
|
||||
goto_if_eq BerryBlender_EventScript_TryJoinGroup
|
||||
release
|
||||
end
|
||||
|
||||
+48
-48
@@ -349,17 +349,17 @@ CableClub_EventScript_TryEnterColosseum:: @ 8276F60
|
||||
waitmessage
|
||||
special TryBattleLinkup
|
||||
waitstate
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq CableClub_EventScript_EnterColosseum
|
||||
compare VAR_RESULT, 2
|
||||
compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
|
||||
goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady
|
||||
compare VAR_RESULT, 3
|
||||
compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
|
||||
goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections
|
||||
compare VAR_RESULT, 4
|
||||
compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS
|
||||
goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfBattlers
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq CableClub_EventScript_AbortLink
|
||||
compare VAR_RESULT, 6
|
||||
compare VAR_RESULT, LINKUP_CONNECTION_ERROR
|
||||
goto_if_eq CableClub_EventScript_AbortLinkConnectionError
|
||||
end
|
||||
|
||||
@@ -452,21 +452,21 @@ CableClub_EventScript_TradeCenter:: @ 82770B2
|
||||
waitmessage
|
||||
special TryTradeLinkup
|
||||
waitstate
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq CableClub_EventScript_EnterTradeCenter
|
||||
compare VAR_RESULT, 2
|
||||
compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
|
||||
goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady
|
||||
compare VAR_RESULT, 3
|
||||
compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
|
||||
goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections
|
||||
compare VAR_RESULT, 4
|
||||
compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS
|
||||
goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq CableClub_EventScript_AbortLink
|
||||
compare VAR_RESULT, 6
|
||||
compare VAR_RESULT, LINKUP_CONNECTION_ERROR
|
||||
goto_if_eq CableClub_EventScript_AbortLinkConnectionError
|
||||
compare VAR_RESULT, 7
|
||||
compare VAR_RESULT, LINKUP_PLAYER_NOT_READY
|
||||
goto_if_eq CableClub_EventScript_AbortLinkPlayerNotReady
|
||||
compare VAR_RESULT, 9
|
||||
compare VAR_RESULT, LINKUP_PARTNER_NOT_READY
|
||||
goto_if_eq CableClub_EventScript_AbortLinkOtherTrainerNotReady
|
||||
end
|
||||
|
||||
@@ -527,21 +527,21 @@ CableClub_EventScript_RecordCorner:: @ 82771DB
|
||||
waitmessage
|
||||
special TryRecordMixLinkup
|
||||
waitstate
|
||||
special sub_80B2EA8
|
||||
special ValidateMixingGameLanguage
|
||||
waitstate
|
||||
compare VAR_RESULT, 12
|
||||
compare VAR_RESULT, LINKUP_FOREIGN_GAME
|
||||
goto_if_eq CableClub_EventScript_AbortLinkForeignGame
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq CableClub_EventScript_EnterRecordCorner
|
||||
compare VAR_RESULT, 2
|
||||
compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
|
||||
goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady
|
||||
compare VAR_RESULT, 3
|
||||
compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
|
||||
goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections
|
||||
compare VAR_RESULT, 4
|
||||
compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS
|
||||
goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq CableClub_EventScript_AbortLink
|
||||
compare VAR_RESULT, 6
|
||||
compare VAR_RESULT, LINKUP_CONNECTION_ERROR
|
||||
goto_if_eq CableClub_EventScript_AbortLinkConnectionError
|
||||
end
|
||||
|
||||
@@ -972,7 +972,7 @@ CableClub_EventScript_EnterUnionRoom:: @ 827759F
|
||||
special SetCableClubWarp
|
||||
warpteleport2 MAP_UNION_ROOM, 255, 7, 11
|
||||
waitstate
|
||||
special UnionRoomSpecial
|
||||
special RunUnionRoom
|
||||
waitstate
|
||||
end
|
||||
|
||||
@@ -1181,22 +1181,22 @@ CableClub_EventScript_ChooseLinkLeaderFrom2:: @ 8277989
|
||||
|
||||
CableClub_EventScript_TryLeadGroup2Players:: @ 82779C6
|
||||
call CableClub_EventScript_TryBecomeLinkLeader
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2
|
||||
compare VAR_RESULT, 8
|
||||
compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
|
||||
goto_if_eq CableClub_EventScript_TryLeadGroup2Players
|
||||
release
|
||||
return
|
||||
|
||||
CableClub_EventScript_TryJoinGroup2Players:: @ 82779EE
|
||||
call CableClub_EventScript_TryJoinLinkGroup
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2
|
||||
compare VAR_RESULT, 8
|
||||
compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
|
||||
goto_if_eq CableClub_EventScript_TryJoinGroup2Players
|
||||
release
|
||||
return
|
||||
@@ -1214,22 +1214,22 @@ CableClub_EventScript_ChooseLinkLeaderFrom4:: @ 8277A16
|
||||
|
||||
CableClub_EventScript_TryLeadGroup4Players:: @ 8277A53
|
||||
call CableClub_EventScript_TryBecomeLinkLeader
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4
|
||||
compare VAR_RESULT, 8
|
||||
compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
|
||||
goto_if_eq CableClub_EventScript_TryLeadGroup4Players
|
||||
release
|
||||
return
|
||||
|
||||
CableClub_EventScript_TryJoinGroup4Players:: @ 8277A7B
|
||||
call CableClub_EventScript_TryJoinLinkGroup
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4
|
||||
compare VAR_RESULT, 8
|
||||
compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
|
||||
goto_if_eq CableClub_EventScript_TryJoinGroup4Players
|
||||
release
|
||||
return
|
||||
@@ -1247,22 +1247,22 @@ CableClub_EventScript_ChooseLinkLeader:: @ 8277AA3
|
||||
|
||||
CableClub_EventScript_TryLeadGroupXPlayers:: @ 8277AE0
|
||||
call CableClub_EventScript_TryBecomeLinkLeader
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq CableClub_EventScript_ChooseLinkLeader
|
||||
compare VAR_RESULT, 8
|
||||
compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
|
||||
goto_if_eq CableClub_EventScript_TryLeadGroupXPlayers
|
||||
release
|
||||
return
|
||||
|
||||
CableClub_EventScript_TryJoinGroupXPlayers:: @ 8277B08
|
||||
call CableClub_EventScript_TryJoinLinkGroup
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
|
||||
compare VAR_RESULT, 5
|
||||
compare VAR_RESULT, LINKUP_FAILED
|
||||
goto_if_eq CableClub_EventScript_ChooseLinkLeader
|
||||
compare VAR_RESULT, 8
|
||||
compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
|
||||
goto_if_eq CableClub_EventScript_TryJoinGroupXPlayers
|
||||
release
|
||||
return
|
||||
@@ -1310,7 +1310,7 @@ EventScript_WirelessBoxResults:: @ 8277B8A
|
||||
compare VAR_RESULT, FALSE
|
||||
goto_if_eq CableClub_EventScript_AdapterNotConnected
|
||||
fadescreen FADE_TO_BLACK
|
||||
special sub_801A42C
|
||||
special ShowWirelessCommunicationScreen
|
||||
waitstate
|
||||
msgbox CableClub_Text_ParticipantsStepUpToCounter, MSGBOX_DEFAULT
|
||||
releaseall
|
||||
@@ -1453,22 +1453,22 @@ MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader:: @ 8277D81
|
||||
|
||||
MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader:: @ 8277DBE
|
||||
call CableClub_EventScript_TryBecomeLinkLeader
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
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
|
||||
compare VAR_RESULT, 8
|
||||
compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
|
||||
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader
|
||||
release
|
||||
return
|
||||
|
||||
MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup:: @ 8277DE6
|
||||
call CableClub_EventScript_TryJoinLinkGroup
|
||||
compare VAR_RESULT, 1
|
||||
compare VAR_RESULT, LINKUP_SUCCESS
|
||||
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
|
||||
compare VAR_RESULT, 8
|
||||
compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
|
||||
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup
|
||||
release
|
||||
return
|
||||
|
||||
+4
-4
@@ -39,7 +39,7 @@ gSpecials:: @ 81DBA64
|
||||
def_special TryBattleLinkup
|
||||
def_special TryTradeLinkup
|
||||
def_special TryRecordMixLinkup
|
||||
def_special sub_80B2EA8
|
||||
def_special ValidateMixingGameLanguage
|
||||
def_special CloseLink
|
||||
def_special ColosseumPlayerSpotTriggered
|
||||
def_special PlayerEnteredTradeSeat
|
||||
@@ -426,8 +426,8 @@ gSpecials:: @ 81DBA64
|
||||
def_special IsWirelessAdapterConnected
|
||||
def_special TryBecomeLinkLeader
|
||||
def_special TryJoinLinkGroup
|
||||
def_special UnionRoomSpecial
|
||||
def_special sub_801A42C
|
||||
def_special RunUnionRoom
|
||||
def_special ShowWirelessCommunicationScreen
|
||||
def_special InitUnionRoom
|
||||
def_special BufferUnionRoomPlayerName
|
||||
def_special sub_801DC20
|
||||
@@ -502,7 +502,7 @@ gSpecials:: @ 81DBA64
|
||||
def_special CreateAbnormalWeatherEvent
|
||||
def_special GetAbnormalWeatherMapNameAndType
|
||||
def_special GetMartEmployeeObjectEventId
|
||||
def_special sub_80A08CC
|
||||
def_special SaveForBattleTowerLink
|
||||
def_special Unused_SetWeatherSunny
|
||||
def_special SetUnlockedPokedexFlags
|
||||
def_special IsTrainerRegistered
|
||||
|
||||
+89
-1
@@ -2,7 +2,87 @@
|
||||
#define GUARD_TEXT_H
|
||||
|
||||
#define CHAR_SPACE 0x00
|
||||
#define CHAR_A_GRAVE 0x01
|
||||
#define CHAR_A_ACUTE 0x02
|
||||
#define CHAR_A_CIRCUMFLEX 0x03
|
||||
#define CHAR_C_CEDILLA 0x04
|
||||
#define CHAR_E_GRAVE 0x05
|
||||
#define CHAR_E_ACUTE 0x06
|
||||
#define CHAR_E_CIRCUMFLEX 0x07
|
||||
#define CHAR_E_DIAERESIS 0x08
|
||||
#define CHAR_I_GRAVE 0x09
|
||||
//#define CHAR_I_ACUTE 0x0A // Is 0x5A instead
|
||||
#define CHAR_I_CIRCUMFLEX 0x0B
|
||||
#define CHAR_I_DIAERESIS 0x0C
|
||||
#define CHAR_O_GRAVE 0x0D
|
||||
#define CHAR_O_ACUTE 0x0E
|
||||
#define CHAR_O_CIRCUMFLEX 0x0F
|
||||
#define CHAR_OE 0x10
|
||||
#define CHAR_U_GRAVE 0x11
|
||||
#define CHAR_U_ACUTE 0x12
|
||||
#define CHAR_U_CIRCUMFLEX 0x13
|
||||
#define CHAR_N_TILDE 0x14
|
||||
#define CHAR_ESZETT 0x15
|
||||
#define CHAR_a_GRAVE 0x16
|
||||
#define CHAR_a_ACUTE 0x17
|
||||
//#define CHAR_a_CIRCUMFLEX 0x18 // Is 0x68 instead
|
||||
#define CHAR_c_CEDILLA 0x19
|
||||
#define CHAR_e_GRAVE 0x1A
|
||||
#define CHAR_e_ACUTE 0x1B
|
||||
#define CHAR_e_CIRCUMFLEX 0x1C
|
||||
#define CHAR_e_DIAERESIS 0x1D
|
||||
#define CHAR_i_GRAVE 0x1E
|
||||
//#define CHAR_i_ACUTE 0x1F // Is 0x6F instead
|
||||
#define CHAR_i_CIRCUMFLEX 0x20
|
||||
#define CHAR_i_DIAERESIS 0x21
|
||||
#define CHAR_o_GRAVE 0x22
|
||||
#define CHAR_o_ACUTE 0x23
|
||||
#define CHAR_o_CIRCUMFLEX 0x24
|
||||
#define CHAR_oe 0x25
|
||||
#define CHAR_u_GRAVE 0x26
|
||||
#define CHAR_u_ACUTE 0x27
|
||||
#define CHAR_u_CIRCUMFLEX 0x28
|
||||
#define CHAR_n_TILDE 0x29
|
||||
#define CHAR_MASCULINE_ORDINAL 0x2A
|
||||
#define CHAR_FEMININE_ORDINAL 0x2B
|
||||
#define CHAR_SUPER_ER 0x2C
|
||||
#define CHAR_AMPERSAND 0x2D
|
||||
#define CHAR_PLUS 0x2E
|
||||
//
|
||||
#define CHAR_LV 0x34
|
||||
#define CHAR_EQUALS 0x35
|
||||
#define CHAR_SEMICOLON 0x36
|
||||
//
|
||||
#define CHAR_INV_QUESTION_MARK 0x51
|
||||
#define CHAR_INV_EXCL_MARK 0x52
|
||||
#define CHAR_PK 0x53
|
||||
#define CHAR_MN 0x54
|
||||
#define CHAR_PO 0x55
|
||||
#define CHAR_KE 0x56
|
||||
#define CHAR_BLOCK_1 0x57 // Each of these 3
|
||||
#define CHAR_BLOCK_2 0x58 // chars contains 1/3
|
||||
#define CHAR_BLOCK_3 0x59 // of the word BLOCK
|
||||
#define CHAR_I_ACUTE 0x5A
|
||||
#define CHAR_PERCENT 0x5B
|
||||
#define CHAR_LEFT_PAREN 0x5C
|
||||
#define CHAR_RIGHT_PAREN 0x5D
|
||||
//
|
||||
#define CHAR_a_CIRCUMFLEX 0x68
|
||||
//
|
||||
#define CHAR_i_ACUTE 0x6F
|
||||
//
|
||||
#define CHAR_UNK_SPACER 0x77
|
||||
//
|
||||
#define CHAR_UP_ARROW 0x79
|
||||
#define CHAR_DOWN_ARROW 0x7A
|
||||
#define CHAR_LEFT_ARROW 0x7B
|
||||
#define CHAR_RIGHT_ARROW 0x7C
|
||||
//
|
||||
#define CHAR_SUPER_E 0x84
|
||||
#define CHAR_LESS_THAN 0x85
|
||||
#define CHAR_GREATER_THAN 0x86
|
||||
//
|
||||
#define CHAR_SUPER_RE 0xA0
|
||||
#define CHAR_0 0xA1
|
||||
#define CHAR_1 0xA2
|
||||
#define CHAR_2 0xA3
|
||||
@@ -17,6 +97,7 @@
|
||||
#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
|
||||
@@ -80,10 +161,17 @@
|
||||
#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_COLON 0xF0
|
||||
#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
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -3,6 +3,6 @@
|
||||
|
||||
#include "main.h"
|
||||
|
||||
void sub_8020C70(MainCallback callback);
|
||||
void StartBerryCrush(MainCallback callback);
|
||||
|
||||
#endif // GUARD_BERRY_CRUSH_H
|
||||
+5
-11
@@ -3,18 +3,12 @@
|
||||
|
||||
#include "task.h"
|
||||
|
||||
// Exported type declarations
|
||||
|
||||
// Exported RAM declarations
|
||||
|
||||
// Exported ROM declarations
|
||||
|
||||
void sub_80B37D4(TaskFunc taskFunc);
|
||||
u8 sub_80B3050(void);
|
||||
void sub_80B360C(void);
|
||||
bool32 sub_80B2AF4(u16 *arg0, u16 *arg1);
|
||||
void CreateTask_EnterCableClubSeat(TaskFunc taskFunc);
|
||||
u8 CreateTask_ReestablishCableClubLink(void);
|
||||
void CB2_ReturnFromCableClubBattle(void);
|
||||
bool32 AreBattleTowerLinkSpeciesSame(u16 *speciesList1, u16 *speciesList2);
|
||||
void sub_80B3AF8(u8 taskId);
|
||||
void task00_08081A90(u8 taskId);
|
||||
void Task_WaitForLinkPlayerConnection(u8 taskId);
|
||||
bool32 GetLinkTrainerCardColor(u8 linkPlayerIndex);
|
||||
|
||||
#endif //GUARD_CABLE_CLUB_H
|
||||
@@ -12,4 +12,20 @@
|
||||
#define USING_MINIGAME 8
|
||||
#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
|
||||
@@ -52,6 +52,7 @@
|
||||
#define APPRENTICE_COUNT 4
|
||||
#define APPRENTICE_MAX_QUESTIONS 9
|
||||
#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 HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode.
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#define TRAINER_PLAYER 1023
|
||||
#define TRAINER_SECRET_BASE 1024
|
||||
#define TRAINER_LINK_OPPONENT 2048
|
||||
#define TRAINER_OPPONENT_C00 3072
|
||||
#define TRAINER_UNION_ROOM 3072
|
||||
#define TRAINER_STEVEN_PARTNER 3075
|
||||
|
||||
#define TRAINER_PIC_HIKER 0
|
||||
|
||||
@@ -1,6 +1,60 @@
|
||||
#ifndef 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_DOUBLE_BATTLE 1
|
||||
#define LINK_GROUP_MULTI_BATTLE 2
|
||||
@@ -10,8 +64,8 @@
|
||||
#define LINK_GROUP_BERRY_PICKING 6
|
||||
#define LINK_GROUP_WONDER_CARD 7
|
||||
#define LINK_GROUP_WONDER_NEWS 8
|
||||
#define LINK_GROUP_UNK_9 9
|
||||
#define LINK_GROUP_UNK_10 10
|
||||
#define LINK_GROUP_UNION_ROOM_RESUME 9
|
||||
#define LINK_GROUP_UNION_ROOM_INIT 10
|
||||
#define LINK_GROUP_UNK_11 11
|
||||
#define LINK_GROUP_RECORD_CORNER 12
|
||||
#define LINK_GROUP_BERRY_BLENDER 13
|
||||
@@ -25,4 +79,24 @@
|
||||
#define LINK_GROUP_BATTLE_TOWER_OPEN 21
|
||||
#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
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef 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 ShowDodrioBerryPickingRecords(void);
|
||||
|
||||
|
||||
@@ -8,6 +8,6 @@ void LockSelectedObjectEvent(void);
|
||||
void sub_8098630(void);
|
||||
bool8 sub_8098734(void);
|
||||
void ScriptUnfreezeObjectEvents(void);
|
||||
void sub_8098524(void);
|
||||
void UnionRoom_UnlockPlayerAndChatPartner(void);
|
||||
|
||||
#endif // GUARD_EVENT_OBJECT_LOCK_H
|
||||
@@ -81,11 +81,11 @@ void sub_808E16C(s16, s16);
|
||||
void OverrideSecretBaseDecorationSpriteScript(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat);
|
||||
void sub_8092FF0(s16, s16, s16 *, s16 *);
|
||||
u8 GetFaceDirectionAnimNum(u8);
|
||||
void sub_80930E0(s16 *, s16 *, s16, s16);
|
||||
void SetSpritePosToOffsetMapCoords(s16 *, s16 *, s16, s16);
|
||||
void ObjectEventClearHeldMovement(struct ObjectEvent *);
|
||||
void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *);
|
||||
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 TrySpawnObjectEvent(u8, u8, u8);
|
||||
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 UnfreezeObjectEvents(void);
|
||||
void FreezeObjectEventsExceptOne(u8 objectEventId);
|
||||
void sub_8097B78(u8, u8);
|
||||
void TurnObjectEventSprite(u8, u8);
|
||||
void sub_8098074(u8 var1, u8 var2);
|
||||
void FreezeObjectEvents(void);
|
||||
bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent);
|
||||
@@ -194,7 +194,7 @@ void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible);
|
||||
s16 sub_809773C(s16 a1);
|
||||
s16 sub_8097728(s16 a1);
|
||||
void CameraObjectReset2(void);
|
||||
u8 ObjectEventGetBerryTreeId(u8 objectEventId);
|
||||
u8 GetObjectEventBerryTreeId(u8 objectEventId);
|
||||
void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup);
|
||||
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_Step1(struct ObjectEvent *, struct Sprite *);
|
||||
u8 MovementType_Invisible_Step2(struct ObjectEvent *, struct Sprite *);
|
||||
void sub_8097C44(u8 var, bool32 var2);
|
||||
bool32 sub_8097C8C(u8 var);
|
||||
void sub_8097BB4(u8 var1, u8 graphicsId);
|
||||
void sub_8097CC4(u8 var1, u8 var2);
|
||||
bool32 sub_8097D9C(u8 var);
|
||||
void SetObjectEventSpriteInvisibility(u8 var, bool32 var2);
|
||||
bool32 IsObjectEventSpriteInvisible(u8 var);
|
||||
void SetObjectEventSpriteGraphics(u8 var1, u8 graphicsId);
|
||||
void SetObjectEventSpriteAnim(u8 var1, u8 var2);
|
||||
bool32 IsObjectEventSpriteAnimating(u8 var);
|
||||
|
||||
#endif //GUARD_EVENT_OBJECT_MOVEMENT_H
|
||||
+1
-1
@@ -43,6 +43,7 @@ void copy_map_tileset1_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 MapConnection *GetConnectionAtCoords(s16 x, s16 y);
|
||||
void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable);
|
||||
|
||||
void SpriteCB_PokeballGlow(struct Sprite *);
|
||||
void SpriteCB_PokecenterMonitor(struct Sprite *);
|
||||
@@ -50,6 +51,5 @@ void SpriteCB_HallOfFameMonitor(struct Sprite *);
|
||||
|
||||
// field_region_map.c
|
||||
void FieldInitRegionMap(MainCallback callback);
|
||||
void sub_8088B94(int x, int y, int a2);
|
||||
|
||||
#endif //GUARD_FIELDMAP_H
|
||||
@@ -27,6 +27,9 @@ typedef double f64;
|
||||
typedef u8 bool8;
|
||||
typedef u16 bool16;
|
||||
typedef u32 bool32;
|
||||
typedef vu8 vbool8;
|
||||
typedef vu16 vbool16;
|
||||
typedef vu32 vbool32;
|
||||
|
||||
struct BgCnt
|
||||
{
|
||||
|
||||
+1
-1
@@ -974,7 +974,7 @@ struct SaveBlock1
|
||||
/*0x3B24*/ u8 seen2[DEX_FLAGS_NO];
|
||||
/*0x3B58*/ LilycoveLady lilycoveLady;
|
||||
/*0x3B98*/ struct TrainerNameRecord trainerNameRecords[20];
|
||||
/*0x3C88*/ u8 unk3C88[10][21];
|
||||
/*0x3C88*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
|
||||
/*0x3D5A*/ u8 filler3D5A[0xA];
|
||||
/*0x3D64*/ struct SaveTrainerHill trainerHill;
|
||||
/*0x3D70*/ struct WaldaPhrase waldaPhrase;
|
||||
|
||||
+8
-8
@@ -4986,14 +4986,14 @@ extern const u16 gEasyChatRightWindow_Pal[];
|
||||
extern const u32 gUsePokeblockCondition_Gfx[];
|
||||
|
||||
// Union Room Chat
|
||||
extern const u16 gUnknown_08DD4BB0[];
|
||||
extern const u16 gUnknown_08DD4BD0[];
|
||||
extern const u32 gUnknown_08DD4BF0[];
|
||||
extern const u32 gUnknown_08DD4C4C[];
|
||||
extern const u32 gUnknown_08DD4CF8[];
|
||||
extern const u16 gLinkMiscMenu_Pal[];
|
||||
extern const u32 gLinkMiscMenu_Gfx[];
|
||||
extern const u32 gLinkMiscMenu_Tilemap[];
|
||||
extern const u16 gUnionRoomChat_Background_Pal[];
|
||||
extern const u32 gUnionRoomChat_Background_Gfx[];
|
||||
extern const u32 gUnionRoomChat_Background_Tilemap[];
|
||||
extern const u16 gUnionRoomChat_Window_Pal1[];
|
||||
extern const u16 gUnionRoomChat_Window_Pal2[];
|
||||
extern const u32 gUnionRoomChat_Border_Gfx[];
|
||||
extern const u32 gUnionRoomChat_Border_Tilemap[];
|
||||
extern const u32 gUnionRoomChat_RButtonLabels[];
|
||||
|
||||
// Use Pokeblock
|
||||
extern const u8 gPokenavConditionCancel_Gfx[];
|
||||
|
||||
+23
-24
@@ -73,10 +73,10 @@
|
||||
#define LINKCMD_CANCEL_TRADE 0xEEBB
|
||||
#define LINKCMD_0xEECC 0xEECC
|
||||
|
||||
#define LINKTYPE_0x1111 0x1111 // trade
|
||||
#define LINKTYPE_0x1122 0x1122 // trade
|
||||
#define LINKTYPE_0x1133 0x1133 // trade
|
||||
#define LINKTYPE_0x1144 0x1144 // trade
|
||||
#define LINKTYPE_TRADE 0x1111
|
||||
#define LINKTYPE_TRADE_CONNECTING 0x1122
|
||||
#define LINKTYPE_TRADE_SETUP 0x1133
|
||||
#define LINKTYPE_TRADE_DISCONNECTED 0x1144
|
||||
#define LINKTYPE_BATTLE 0x2211
|
||||
#define LINKTYPE_0x2222 0x2222 // unused battle?
|
||||
#define LINKTYPE_SINGLE_BATTLE 0x2233
|
||||
@@ -85,13 +85,13 @@
|
||||
#define LINKTYPE_BATTLE_TOWER_50 0x2266
|
||||
#define LINKTYPE_BATTLE_TOWER_OPEN 0x2277
|
||||
#define LINKTYPE_BATTLE_TOWER 0x2288
|
||||
#define LINKTYPE_0x3311 0x3311
|
||||
#define LINKTYPE_0x3322 0x3322
|
||||
#define LINKTYPE_RECORD_MIX_BEFORE 0x3311
|
||||
#define LINKTYPE_RECORD_MIX_AFTER 0x3322
|
||||
#define LINKTYPE_BERRY_BLENDER_SETUP 0x4411
|
||||
#define LINKTYPE_BERRY_BLENDER 0x4422
|
||||
#define LINKTYPE_0x5501 0x5501 // mystery event
|
||||
#define LINKTYPE_MYSTERY_EVENT 0x5501
|
||||
#define LINKTYPE_0x5502 0x5502 // unused?
|
||||
#define LINKTYPE_0x5503 0x5503 // eReader
|
||||
#define LINKTYPE_EREADER 0x5503
|
||||
#define LINKTYPE_CONTEST_GMODE 0x6601
|
||||
#define LINKTYPE_CONTEST_EMODE 0x6602
|
||||
|
||||
@@ -126,10 +126,10 @@ enum
|
||||
EXCHANGE_NOT_STARTED,
|
||||
EXCHANGE_COMPLETE,
|
||||
EXCHANGE_TIMED_OUT,
|
||||
EXCHANGE_IN_PROGRESS,
|
||||
EXCHANGE_DIFF_SELECTIONS,
|
||||
EXCHANGE_PLAYER_NOT_READY,
|
||||
EXCHANGE_PARTNER_NOT_READY,
|
||||
EXCHANGE_STAT_6,
|
||||
EXCHANGE_WRONG_NUM_PLAYERS,
|
||||
EXCHANGE_STAT_7
|
||||
};
|
||||
|
||||
@@ -274,9 +274,8 @@ void LoadWirelessStatusIndicatorSpriteGfx(void);
|
||||
bool8 IsLinkTaskFinished(void);
|
||||
void CreateWirelessStatusIndicatorSprite(u8, u8);
|
||||
void sub_800ADF8(void);
|
||||
void sub_800B488(void);
|
||||
void SetWirelessCommType1(void);
|
||||
void CheckShouldAdvanceLinkState(void);
|
||||
void sub_8011BD0(void);
|
||||
u8 IsLinkMaster(void);
|
||||
void sub_800AC34(void);
|
||||
bool8 HandleLinkConnection(void);
|
||||
@@ -285,14 +284,14 @@ void sub_800A418(void);
|
||||
void SetSuppressLinkErrorMessage(bool8 flag);
|
||||
void sub_800B524(struct LinkPlayer *linkPlayer);
|
||||
u8 GetSioMultiSI(void);
|
||||
void sub_800AAF4(void);
|
||||
void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
|
||||
void ClearSavedLinkPlayers(void);
|
||||
void BufferLinkErrorInfo(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
|
||||
void sub_800B348(void);
|
||||
void sub_800B3A4(u32 who);
|
||||
bool32 sub_800A07C(void);
|
||||
void LinkPlayerFromBlock(u32 who);
|
||||
bool32 Link_AnyPartnersPlayingFRLG_JP(void);
|
||||
void ResetLinkPlayerCount(void);
|
||||
void sub_800AA04(u8 a0);
|
||||
void sub_800B4C0(void);
|
||||
void SaveLinkPlayers(u8 a0);
|
||||
void SetWirelessCommType0(void);
|
||||
bool32 sub_800B504(void);
|
||||
|
||||
extern u16 gLinkPartnersHeldKeys[6];
|
||||
@@ -331,18 +330,18 @@ extern u32 gFiller_03003080;
|
||||
extern struct LinkPlayer gLocalLinkPlayer;
|
||||
|
||||
bool32 Link_AnyPartnersPlayingRubyOrSapphire(void);
|
||||
bool32 sub_800A03C(void);
|
||||
bool32 LinkDummy_Return2(void);
|
||||
void SetLocalLinkPlayerId(u8);
|
||||
u8 GetSavedPlayerCount(void);
|
||||
void sub_8009FAC(void);
|
||||
bool8 sub_800A4D8(u8 a0);
|
||||
u8 sub_800A9D8(void);
|
||||
u8 GetLinkPlayerCountAsBitFlags(void);
|
||||
u8 sub_800A0C8(s32, s32);
|
||||
u8 sub_800A9A8(void);
|
||||
u8 GetSavedLinkPlayerCountAsBitFlags(void);
|
||||
void sub_800AD10(void);
|
||||
void sub_800AB18(void);
|
||||
void sub_8009F18(void);
|
||||
bool8 sub_800AA60(void);
|
||||
void CheckLinkPlayersMatchSaved(void);
|
||||
void StartSendingKeysToLink(void);
|
||||
bool8 DoesLinkPlayerCountMatchSaved(void);
|
||||
void sub_800ABF4(u16 a0);
|
||||
bool32 IsSendingKeysToLink(void);
|
||||
u32 GetLinkRecvQueueLength(void);
|
||||
|
||||
+154
-213
@@ -5,7 +5,43 @@
|
||||
#include "link.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.
|
||||
struct GFtgtGnameSub
|
||||
@@ -13,12 +49,11 @@ struct GFtgtGnameSub
|
||||
u16 language:4;
|
||||
u16 hasNews:1;
|
||||
u16 hasCard:1;
|
||||
u16 unk_00_6:1;
|
||||
u16 unknown:1; // Never read
|
||||
u16 isChampion:1;
|
||||
u16 hasNationalDex:1;
|
||||
u16 gameClear:1;
|
||||
u16 version:4;
|
||||
u16 unk_01_6:2;
|
||||
u8 playerTrainerId[2];
|
||||
};
|
||||
|
||||
@@ -38,111 +73,73 @@ struct __attribute__((packed, aligned(2))) GFtgtGname
|
||||
u8 padding;
|
||||
}; // size: RFU_GNAME_SIZE
|
||||
|
||||
struct UnkLinkRfuStruct_02022B2C
|
||||
struct RfuBlockSend
|
||||
{
|
||||
u8 unk_00;
|
||||
u8 unk_01;
|
||||
u16 unk_02;
|
||||
u8 unk_04;
|
||||
u16 unk_06;
|
||||
struct GFtgtGname *unk_08;
|
||||
u8 *unk_0c;
|
||||
u8 unk_10;
|
||||
u8 unk_11;
|
||||
u16 unk_12;
|
||||
u16 unk_14;
|
||||
/* 0x00 */ u16 next;
|
||||
/* 0x02 */ u16 count;
|
||||
/* 0x04 */ const u8 *payload;
|
||||
/* 0x08 */ u32 receivedFlags;
|
||||
/* 0x0c */ u32 failedFlags;
|
||||
/* 0x10 */ bool8 sending;
|
||||
/* 0x11 */ u8 owner;
|
||||
/* 0x12 */ u8 receiving;
|
||||
};
|
||||
|
||||
struct UnkLinkRfuStruct_02022B44
|
||||
struct RfuRecvQueue
|
||||
{
|
||||
u8 fill_00[6];
|
||||
u16 unk_06;
|
||||
u8 fill_08[6];
|
||||
vu8 unk_0e;
|
||||
u8 unk_0f;
|
||||
u8 fill_10[0x54];
|
||||
u16 unk_64;
|
||||
u8 fill_66[0x1d];
|
||||
u8 unk_83;
|
||||
u8 fill_84[0x58];
|
||||
/* 0x000 */ u8 slots[RECV_QUEUE_NUM_SLOTS][RECV_QUEUE_SLOT_LENGTH];
|
||||
/* 0x8c0 */ vu8 recvSlot;
|
||||
/* 0x8c1 */ vu8 sendSlot;
|
||||
/* 0x8c2 */ vu8 count;
|
||||
/* 0x8c3 */ vu8 full;
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_2_Sub_6c
|
||||
struct RfuSendQueue
|
||||
{
|
||||
/* 0x00 */ u16 unk_00;
|
||||
/* 0x02 */ u16 unk_02;
|
||||
/* 0x04 */ const u8 *unk_04;
|
||||
/* 0x08 */ u32 unk_08;
|
||||
/* 0x0c */ u32 unk_0c;
|
||||
/* 0x10 */ u8 unk_10;
|
||||
/* 0x11 */ u8 unk_11;
|
||||
/* 0x12 */ u8 unk_12;
|
||||
/* 0x000 */ u8 slots[SEND_QUEUE_NUM_SLOTS][SEND_QUEUE_SLOT_LENGTH];
|
||||
/* 0x230 */ vu8 recvSlot;
|
||||
/* 0x231 */ vu8 sendSlot;
|
||||
/* 0x232 */ vu8 count;
|
||||
/* 0x233 */ vu8 full;
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_2_Sub_124
|
||||
struct RfuBackupQueue
|
||||
{
|
||||
/* 0x000 */ u8 unk_00[32][70];
|
||||
/* 0x8c0 */ vu8 unk_8c0;
|
||||
/* 0x8c1 */ vu8 unk_8c1;
|
||||
/* 0x8c2 */ vu8 unk_8c2;
|
||||
/* 0x8c3 */ vu8 unk_8c3;
|
||||
/* 0x00 */ u8 slots[BACKUP_QUEUE_NUM_SLOTS][BACKUP_QUEUE_SLOT_LENGTH];
|
||||
/* 0x1c */ vu8 recvSlot;
|
||||
/* 0x1d */ vu8 sendSlot;
|
||||
/* 0x1e */ vu8 count;
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_2_Sub_9e8
|
||||
struct GFRfuManager
|
||||
{
|
||||
/* 0x000 */ u8 unk_00[40][14];
|
||||
/* 0x230 */ vu8 unk_230;
|
||||
/* 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;
|
||||
/* 0x000 */ void (*callback)(void);
|
||||
/* 0x004 */ u16 state;
|
||||
/* 0x006 */ u8 filler_06[4];
|
||||
/* 0x00a */ u16 unk_0a;
|
||||
/* 0x00c */ u8 unk_0c;
|
||||
/* 0x00a */ u16 linkmanMsg;
|
||||
/* 0x00c */ u8 parentChild;
|
||||
/* 0x00d */ u8 playerCount;
|
||||
/* 0x00e */ u8 unk_0e;
|
||||
/* 0x00e */ bool8 unk_0e;
|
||||
/* 0x00f */ u8 unk_0f;
|
||||
/* 0x010 */ u16 unk_10;
|
||||
/* 0x012 */ u16 unk_12;
|
||||
/* 0x014 */ u8 unk_14[4][14];
|
||||
/* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14];
|
||||
/* 0x04c */ u8 unk_4c[14];
|
||||
/* 0x05a */ u8 unk_5a;
|
||||
/* 0x05b */ u8 unk_5b;
|
||||
/* 0x05c */ u8 unk_5c[5];
|
||||
/* 0x061 */ u8 unk_61[5];
|
||||
/* 0x066 */ u8 unk_66;
|
||||
/* 0x067 */ u8 unk_67;
|
||||
/* 0x05c */ bool8 blockReceived[MAX_RFU_PLAYERS];
|
||||
/* 0x061 */ bool8 numBlocksReceived[MAX_RFU_PLAYERS];
|
||||
/* 0x066 */ u8 idleTaskId;
|
||||
/* 0x067 */ u8 searchTaskId;
|
||||
/* 0x068 */ u8 filler_68[4];
|
||||
/* 0x06c */ struct UnkRfuStruct_2_Sub_6c unk_6c;
|
||||
/* 0x080 */ struct UnkRfuStruct_2_Sub_6c unk_80[5];
|
||||
/* 0x06c */ struct RfuBlockSend sendBlock;
|
||||
/* 0x080 */ struct RfuBlockSend recvBlock[MAX_RFU_PLAYERS];
|
||||
/* 0x0e4 */ u8 unk_e4[5];
|
||||
/* 0x0e9 */ u8 unk_e9[5];
|
||||
/* 0x0ee */ vu8 unk_ee;
|
||||
/* 0x0ef */ u8 unk_ef;
|
||||
/* 0x0f0 */ u8 unk_f0;
|
||||
/* 0x0f1 */ u8 unk_f1;
|
||||
/* 0x0ee */ vu8 errorState;
|
||||
/* 0x0ef */ bool8 isShuttingDown;
|
||||
/* 0x0f0 */ u8 linkLossRecoveryState;
|
||||
/* 0x0f1 */ u8 status;
|
||||
/* 0x0f2 */ u16 unk_f2[6];
|
||||
/* 0x0fe */ u16 unk_fe;
|
||||
/* 0x100 */ u16 unk_100;
|
||||
@@ -151,193 +148,137 @@ struct UnkRfuStruct_2
|
||||
/* 0x10A */ struct GFtgtGname unk_10A;
|
||||
u8 filler_;
|
||||
u8 playerName[PLAYER_NAME_LENGTH + 1];
|
||||
/* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124;
|
||||
/* 0x9e8 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8;
|
||||
/* 0xc1c */ struct UnkRfuStruct_2_Sub_c1c unk_c1c;
|
||||
/* 0xc3c */ vu8 unk_c3c;
|
||||
/* 0x124 */ struct RfuRecvQueue recvQueue;
|
||||
/* 0x9e8 */ struct RfuSendQueue sendQueue;
|
||||
/* 0xc1c */ struct RfuBackupQueue backupQueue;
|
||||
/* 0xc3c */ vu8 linkRecovered;
|
||||
/* 0xc3d */ u8 unk_c3d;
|
||||
/* 0xc3e */ vu8 unk_c3e;
|
||||
/* 0xc3e */ vu8 childSlot;
|
||||
/* 0xc3f */ u8 unk_c3f[70];
|
||||
/* 0xc85 */ u8 unk_c85;
|
||||
/* 0xc86 */ u8 unk_c86;
|
||||
/* 0xc87 */ u8 unk_c87[5][7][2];
|
||||
/* 0xccd */ u8 unk_ccd;
|
||||
/* 0xcce */ u8 unk_cce;
|
||||
/* 0xc86 */ u8 recvStatus;
|
||||
/* 0xc87 */ u8 recvCmds[5][7][2];
|
||||
/* 0xccd */ u8 parentId;
|
||||
/* 0xcce */ u8 multiplayerId;
|
||||
/* 0xccf */ u8 unk_ccf;
|
||||
/* 0xcd0 */ vu8 unk_cd0;
|
||||
/* 0xcd1 */ u8 unk_cd1[4];
|
||||
/* 0xcd5 */ u8 unk_cd5[4];
|
||||
/* 0xcd1 */ u8 partnerSendStatuses[RFU_CHILD_MAX];
|
||||
/* 0xcd5 */ u8 partnerRecvStatuses[RFU_CHILD_MAX];
|
||||
/* 0xcd9 */ u8 unk_cd9;
|
||||
/* 0xcda */ u8 unk_cda;
|
||||
/* 0xcdb */ vu8 unk_cdb;
|
||||
/* 0xcdc */ vu8 unk_cdc;
|
||||
/* 0xcdb */ vbool8 unk_cdb;
|
||||
/* 0xcdc */ vbool8 unk_cdc;
|
||||
/* 0xcdd */ u8 unk_cdd;
|
||||
/* 0xcde */ u8 unk_cde[4];
|
||||
/* 0xcde */ u8 linkPlayerIdx[RFU_CHILD_MAX];
|
||||
/* 0xce2 */ u8 unk_ce2;
|
||||
/* 0xce2 */ u8 unk_ce3;
|
||||
/* 0xce4 */ u8 unk_ce4;
|
||||
/* 0xce5 */ u8 unk_ce5;
|
||||
/* 0xce5 */ u8 unk_ce6;
|
||||
/* 0xce7 */ u8 unk_ce7;
|
||||
/* 0xce7 */ u8 acceptSlot_flag;
|
||||
/* 0xce8 */ u8 unk_ce8;
|
||||
/* 0xce9 */ u8 unk_ce9;
|
||||
/* 0xcea */ u8 unk_cea[4];
|
||||
/* 0xcee */ u8 unk_cee[4];
|
||||
}; // 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
|
||||
|
||||
extern struct GFtgtGname gUnknown_02022B14;
|
||||
extern u8 gUnknown_02022B22[];
|
||||
extern struct UnkRfuStruct_2 Rfu;
|
||||
extern struct GFtgtGname gHostRFUtgtGnameBuffer;
|
||||
extern u8 gHostRFUtgtUnameBuffer[];
|
||||
extern struct GFRfuManager Rfu;
|
||||
extern u8 gWirelessStatusIndicatorSpriteId;
|
||||
|
||||
// Exported ROM declarations
|
||||
void WipeTrainerNameRecords(void);
|
||||
void sub_800E700(void);
|
||||
void sub_800EDD4(void);
|
||||
void sub_800F6FC(u8 who);
|
||||
void sub_800F728(u8 who);
|
||||
void InitRFUAPI(void);
|
||||
void LinkRfu_Shutdown(void);
|
||||
void Rfu_SetBlockReceivedFlag(u8 who);
|
||||
void Rfu_ResetBlockReceivedFlag(u8 who);
|
||||
bool32 IsSendingKeysToRfu(void);
|
||||
void sub_800F804(void);
|
||||
void StartSendingKeysToRfu(void);
|
||||
void sub_800F850(void);
|
||||
u8 sub_800FCD8(void);
|
||||
bool32 sub_800FE84(const u8 *src, size_t size);
|
||||
u8 Rfu_GetBlockReceivedStatus(void);
|
||||
bool32 Rfu_InitBlockSend(const u8 *src, size_t size);
|
||||
void ClearLinkRfuCallback(void);
|
||||
u8 sub_80104F4(void);
|
||||
u8 rfu_get_multiplayer_id(void);
|
||||
u8 Rfu_GetLinkPlayerCount(void);
|
||||
u8 Rfu_GetMultiplayerId(void);
|
||||
bool8 sub_8010100(u8 a0);
|
||||
bool8 IsLinkRfuTaskFinished(void);
|
||||
bool8 Rfu_IsMaster(void);
|
||||
void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
|
||||
void sub_8010434(void);
|
||||
void sub_800E604(void);
|
||||
void sub_800E174(void);
|
||||
void sub_800E6D0(void);
|
||||
void ResetLinkRfuGFLayer(void);
|
||||
void UpdateWirelessStatusIndicatorSprite(void);
|
||||
void InitRFU(void);
|
||||
bool32 sub_8010EC0(void);
|
||||
bool32 sub_8010F1C(void);
|
||||
bool32 sub_8011A80(void);
|
||||
bool32 RfuHasErrored(void);
|
||||
bool32 IsRfuRecvQueueEmpty(void);
|
||||
u32 GetRfuRecvQueueLength(void);
|
||||
void RfuVSync(void);
|
||||
void sub_80111B0(bool32 a0);
|
||||
u8 sub_8011A74(void);
|
||||
struct GFtgtGname *sub_800F7DC(void);
|
||||
void sub_8011068(u8 a0);
|
||||
void sub_8011170(u32 a0);
|
||||
void sub_8011A64(u8 a0, u16 a1);
|
||||
u8 RfuGetStatus(void);
|
||||
struct GFtgtGname *GetHostRFUtgtGname(void);
|
||||
void UpdateGameData_GroupLockedIn(u8 a0);
|
||||
void GetLinkmanErrorParams(u32 a0);
|
||||
void RfuSetStatus(u8 a0, u16 a1);
|
||||
u8 sub_801048C(bool32 a0);
|
||||
void sub_800DF90(struct GFtgtGname *buff1, u8 *buff2);
|
||||
void sub_8010F84(u8 a0, u32 a1, u32 a2);
|
||||
void sub_8011C10(u32 a0);
|
||||
void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *buff1, u8 *buff2);
|
||||
void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, bool32 started);
|
||||
void InitializeRfuLinkManager_LinkLeader(u32 a0);
|
||||
bool32 sub_8012240(void);
|
||||
void sub_800EF38(void);
|
||||
void LinkRfu_StopManagerAndFinalizeSlots(void);
|
||||
bool32 sub_80105EC(void);
|
||||
bool32 sub_801064C(u16 a0, const u8 *a1);
|
||||
void sub_8010688(u8 a0, u16 a1, const u8 *a2);
|
||||
u32 sub_8010714(u16 a0, const u8 *a1);
|
||||
void sub_8011DC0(const u8 *a0, u16 a1);
|
||||
bool8 sub_800EF1C(void);
|
||||
bool32 sub_800EF58(bool32 a0);
|
||||
void DestroyWirelessStatusIndicatorSprite(void);
|
||||
bool32 HasTrainerLeftPartnersList(u16 trainerId, const u8 *name);
|
||||
void SendRfuStatusToPartner(u8 status, u16 trainerId, const u8 *name);
|
||||
u32 WaitSendRfuStatusToPartner(u16 trainerId, const u8 *name);
|
||||
void RequestDisconnectSlotByTrainerNameAndId(const u8 *a0, u16 a1);
|
||||
bool8 LmanAcceptSlotFlagIsNotZero(void);
|
||||
bool32 WaitRfuState(bool32 a0);
|
||||
void sub_801103C(void);
|
||||
void sub_8011C5C(void);
|
||||
void sub_80106D4(void);
|
||||
void InitializeRfuLinkManager_JoinGroup(void);
|
||||
void SendLeaveGroupNotice(void);
|
||||
void RecordMixTrainerNames(void);
|
||||
void sub_800ED10(void);
|
||||
void sub_800ED28(void);
|
||||
void sub_8011090(u8 a0, u32 a1, u32 a2);
|
||||
void sub_8011FC8(const u8 *src, u16 trainerId);
|
||||
void sub_8010FA0(bool32 a0, bool32 a1);
|
||||
void sub_8010F60(void);
|
||||
void sub_8010FCC(u32 a0, u32 a1, u32 a2);
|
||||
void sub_8011C84(void);
|
||||
void LinkRfu_CreateConnectionAsParent(void);
|
||||
void LinkRfu_StopManagerBeforeEnteringChat(void);
|
||||
void UpdateGameData_SetActivity(u8 activity, u32 flags, bool32 started);
|
||||
void CreateTask_RfuReconnectWithParent(const u8 *src, u16 trainerId);
|
||||
void SetGnameBufferWonderFlags(bool32 a0, bool32 a1);
|
||||
void ClearAndInitHostRFUtgtGname(void);
|
||||
void SetTradeBoardRegisteredMonInfo(u32 type, u32 species, u32 level);
|
||||
void InitializeRfuLinkManager_EnterUnionRoom(void);
|
||||
void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 a2);
|
||||
bool32 sub_8011B90(void);
|
||||
bool32 IsUnionRoomListenTaskActive(void);
|
||||
void sub_800FE50(void *a0);
|
||||
bool32 sub_800E540(u16 id, u8 *name);
|
||||
bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name);
|
||||
void sub_8011DE0(u32 arg0);
|
||||
u8 sub_801100C(s32 a0);
|
||||
void sub_800EF7C(void);
|
||||
bool8 sub_800DE7C(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
|
||||
bool8 sub_800DF34(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
|
||||
bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
|
||||
bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
|
||||
s32 sub_800E87C(u8 idx);
|
||||
void sub_8011BA4(void);
|
||||
void sub_8010198(void);
|
||||
void CreateTask_RfuIdle(void);
|
||||
void DestroyTask_RfuIdle(void);
|
||||
void sub_8011AC8(void);
|
||||
void LinkRfu_FatalError(void);
|
||||
bool32 sub_8011A9C(void);
|
||||
void sub_80104B0(void);
|
||||
void sub_8011A50(void);
|
||||
void sub_80110B8(u32 a0);
|
||||
bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
|
||||
void sub_800EAB4(void);
|
||||
void sub_800EAFC(void);
|
||||
void sub_800ED34(u16 unused);
|
||||
void sub_800EDBC(u16 unused);
|
||||
void sub_800F048(void);
|
||||
void sub_800F86C(u8 unused);
|
||||
void sub_800FCC4(struct UnkRfuStruct_2_Sub_6c *data);
|
||||
void sub_800FD14(u16 command);
|
||||
void rfufunc_80F9F44(void);
|
||||
void sub_800FFB0(void);
|
||||
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);
|
||||
bool32 IsRfuSerialNumberValid(u32 serialNo);
|
||||
bool8 IsRfuRecoveringFromLinkLoss(void);
|
||||
void RfuRecvQueue_Reset(struct RfuRecvQueue *queue);
|
||||
void RfuSendQueue_Reset(struct RfuSendQueue *queue);
|
||||
void RfuRecvQueue_Enqueue(struct RfuRecvQueue *queue, u8 *data);
|
||||
void RfuSendQueue_Enqueue(struct RfuSendQueue *queue, u8 *data);
|
||||
bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue *queue, u8 *dest);
|
||||
bool8 RfuSendQueue_Dequeue(struct RfuSendQueue *queue, u8 *dest);
|
||||
void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *q2);
|
||||
bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *q2);
|
||||
void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders);
|
||||
void CreateWirelessStatusIndicatorSprite(u8 x, u8 y);
|
||||
void DestroyWirelessStatusIndicatorSprite(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
|
||||
+1
-1
@@ -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_8199134(s8, s8);
|
||||
u8 GetStartMenuWindowId(void);
|
||||
void sub_819A2BC(u8, u8);
|
||||
void ListMenuLoadStdPalAt(u8, u8);
|
||||
u8 Menu_MoveCursor(s8 cursorDelta);
|
||||
u8 Menu_MoveCursorNoWrapAround(s8 cursorDelta);
|
||||
void DrawStdWindowFrame(u8 windowId, bool8 CopyToVram);
|
||||
|
||||
+2
-2
@@ -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);
|
||||
u16 MEventStruct_Unk1442CC_GetValueNFrom_unk_20(const struct MEventStruct_Unk1442CC *a0, u32 command);
|
||||
u16 mevent_081445C0(u32 command);
|
||||
void sub_801B940(void);
|
||||
bool32 sub_801B94C(u16 a0);
|
||||
void ResetReceivedWonderCardFlag(void);
|
||||
bool32 MEventHandleReceivedWonderCard(u16 a0);
|
||||
|
||||
#endif //GUARD_MEVENT_H
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
#ifndef GUARD_MEVENT2_H
|
||||
#define GUARD_MEVENT2_H
|
||||
|
||||
void sub_801B990(u32, u32);
|
||||
void RecordIdOfWonderCardSenderByEventType(u32, u32);
|
||||
|
||||
#endif //GUARD_MEVENT2_H
|
||||
@@ -12,5 +12,7 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str);
|
||||
void AddTextPrinterToWindow1(const u8 *src);
|
||||
void c2_ereader(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
|
||||
+2
-2
@@ -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);
|
||||
bool8 sub_80688F8(u8 caseId, u8 battlerId);
|
||||
void SetDeoxysStats(void);
|
||||
u16 sub_8068B48(void);
|
||||
u16 sub_8068BB0(void);
|
||||
u16 GetUnionRoomTrainerPic(void);
|
||||
u16 GetUnionRoomTrainerClass(void);
|
||||
void CreateObedientEnemyMon(void);
|
||||
void CalculateMonStats(struct Pokemon *mon);
|
||||
void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest);
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
#include "main.h"
|
||||
|
||||
void sub_802A9A8(u16 monId, MainCallback callback);
|
||||
void StartPokemonJump(u16 monId, MainCallback callback);
|
||||
bool32 IsSpeciesAllowedInPokemonJump(u16 species);
|
||||
void IsPokemonJumpSpeciesInParty(void);
|
||||
void ResetPokeJumpResults(void);
|
||||
|
||||
+1
-1
@@ -102,7 +102,7 @@ u8 Save_LoadGameData(u8 saveType);
|
||||
u16 sub_815355C(void);
|
||||
u32 TryReadSpecialSaveSection(u8 sector, u8* dst);
|
||||
u32 TryWriteSpecialSaveSection(u8 sector, u8* src);
|
||||
void sub_8153688(u8 taskId);
|
||||
void Task_LinkSave(u8 taskId);
|
||||
|
||||
// save_failed_screen.c
|
||||
void DoSaveFailedScreen(u8 saveType);
|
||||
|
||||
@@ -8,8 +8,8 @@ void Task_ShowStartMenu(u8 taskId);
|
||||
void ShowStartMenu(void);
|
||||
void ShowBattlePyramidStartMenu(void);
|
||||
void SaveGame(void);
|
||||
void sub_80A0514(void);
|
||||
void sub_80A08CC(void);
|
||||
void CB2_SetUpSaveAfterLinkBattle(void);
|
||||
void SaveForBattleTowerLink(void);
|
||||
void HideStartMenu(void);
|
||||
void AppendToList(u8* list, u8* pos, u8 newEntry);
|
||||
|
||||
|
||||
+5
-5
@@ -962,7 +962,7 @@ extern const u8 gText_TwoDashes[];
|
||||
|
||||
extern const u8 *const gReturnToXStringsTable2[];
|
||||
|
||||
extern const u8 gText_XPLink[];
|
||||
extern const u8 gText_NumPlayerLink[];
|
||||
extern const u8 gText_ConfirmLinkWhenPlayersReady[];
|
||||
extern const u8 gText_ConfirmStartLinkWithXPlayers[];
|
||||
extern const u8 gText_AwaitingLinkup[];
|
||||
@@ -2815,10 +2815,10 @@ extern const u8 gText_RegisterTextHere[];
|
||||
extern const u8 gText_InputText[];
|
||||
extern const u8 gText_ExitingChat[];
|
||||
extern const u8 gText_LeaderLeftEndingChat[];
|
||||
extern const u8 gText_RegisteredTextChanged[];
|
||||
extern const u8 gText_AlreadySavedFile_Unused[];
|
||||
extern const u8 gText_SavingDontTurnOff_Unused[];
|
||||
extern const u8 gText_PlayerSavedGame_Unused[];
|
||||
extern const u8 gText_RegisteredTextChangedOKToSave[];
|
||||
extern const u8 gText_AlreadySavedFile_Chat[];
|
||||
extern const u8 gText_SavingDontTurnOff_Chat[];
|
||||
extern const u8 gText_PlayerSavedGame_Chat[];
|
||||
extern const u8 gText_IfLeaderLeavesChatEnds[];
|
||||
extern const u8 gText_Upper[];
|
||||
extern const u8 gText_Lower[];
|
||||
|
||||
+71
-74
@@ -2,71 +2,70 @@
|
||||
#define GUARD_UNION_ROOM_H
|
||||
|
||||
#include "link_rfu.h"
|
||||
#include "link.h"
|
||||
#include "constants/union_room.h"
|
||||
|
||||
// Exported type declarations
|
||||
|
||||
struct UnkStruct_Shared
|
||||
struct WirelessGnameUnamePair
|
||||
{
|
||||
struct GFtgtGname field_0;
|
||||
struct GFtgtGname gname;
|
||||
u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1];
|
||||
};
|
||||
|
||||
struct UnkStruct_x1C
|
||||
{
|
||||
struct UnkStruct_Shared unk0;
|
||||
u8 unk18:1;
|
||||
struct WirelessGnameUnamePair gname_uname;
|
||||
u8 active:1;
|
||||
};
|
||||
|
||||
struct UnkStruct_x20
|
||||
{
|
||||
struct UnkStruct_Shared unk;
|
||||
u16 field_18;
|
||||
u8 field_1A_0:2;
|
||||
u8 field_1A_1:1;
|
||||
struct WirelessGnameUnamePair gname_uname;
|
||||
u16 timeoutCounter;
|
||||
u8 groupScheduledAnim:2;
|
||||
bool8 useRedText:1; // Never set
|
||||
u8 field_1B;
|
||||
u8 field_1D;
|
||||
u8 field_1E;
|
||||
u8 field_1F;
|
||||
u8 filler[3];
|
||||
};
|
||||
|
||||
struct UnkStruct_Main0
|
||||
{
|
||||
struct UnkStruct_x20 arr[8];
|
||||
struct UnkStruct_x20 arr[MAX_UNION_ROOM_PLAYERS];
|
||||
};
|
||||
|
||||
struct UnkStruct_Main4
|
||||
{
|
||||
struct UnkStruct_x1C arr[5];
|
||||
struct UnkStruct_x1C arr[MAX_RFU_PLAYERS];
|
||||
};
|
||||
|
||||
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_Main4 *field_4;
|
||||
struct UnkStruct_Main8 *field_8;
|
||||
u8 state;
|
||||
u8 textState;
|
||||
u8 field_E;
|
||||
u8 delayTimerAfterOk;
|
||||
u8 listWindowId;
|
||||
u8 field_10;
|
||||
u8 field_11;
|
||||
u8 bButtonCancelWindowId;
|
||||
u8 nPlayerModeWindowId;
|
||||
u8 listTaskId;
|
||||
u8 field_13;
|
||||
u8 field_14;
|
||||
u8 field_15;
|
||||
u8 playerCount;
|
||||
u16 field_14;
|
||||
u8 field_16;
|
||||
u8 field_17;
|
||||
u8 field_18;
|
||||
u8 field_19;
|
||||
u16 field_1A;
|
||||
u8 listenTaskId;
|
||||
u8 activity;
|
||||
u8 joinRequestAnswer;
|
||||
u16 memberConfirmTimeout;
|
||||
};
|
||||
|
||||
struct UnkStruct_Group
|
||||
struct WirelessLink_Group
|
||||
{
|
||||
struct UnkStruct_Main0 *field_0;
|
||||
struct UnkStruct_Main4 *field_4;
|
||||
@@ -74,98 +73,96 @@ struct UnkStruct_Group
|
||||
u8 textState;
|
||||
u8 field_A;
|
||||
u8 listWindowId;
|
||||
u8 field_C;
|
||||
u8 field_D;
|
||||
u8 bButtonCancelWindowId;
|
||||
u8 playerNameAndIdWindowId;
|
||||
u8 listTaskId;
|
||||
u8 field_F;
|
||||
u8 leaderId;
|
||||
u8 field_10;
|
||||
u8 field_11;
|
||||
u8 field_12;
|
||||
u8 listenTaskId;
|
||||
u8 isWonderNews;
|
||||
u8 field_13;
|
||||
u8 field_14;
|
||||
u8 field_15;
|
||||
u8 refreshTimer;
|
||||
u8 delayBeforePrint;
|
||||
};
|
||||
|
||||
struct UnkStruct_8019BA8
|
||||
struct UnionRoomObject
|
||||
{
|
||||
u8 field_0;
|
||||
u8 field_1;
|
||||
s8 field_2;
|
||||
u8 field_3;
|
||||
u8 state;
|
||||
u8 gfxId;
|
||||
s8 animState;
|
||||
u8 schedAnim;
|
||||
};
|
||||
|
||||
struct UnkStruct_URoom
|
||||
struct WirelessLink_URoom
|
||||
{
|
||||
struct UnkStruct_Main0 *field_0;
|
||||
struct UnkStruct_Main4 *field_4;
|
||||
struct UnkStruct_Main0 *field_8;
|
||||
struct UnkStruct_Main4 *field_C;
|
||||
u16 field_10;
|
||||
u16 unknown; // Never read
|
||||
u16 field_12;
|
||||
u8 state;
|
||||
u8 stateAfterPrint;
|
||||
u8 textState;
|
||||
u8 field_17;
|
||||
u8 field_18;
|
||||
u8 field_19;
|
||||
u8 field_1A;
|
||||
u8 field_1B;
|
||||
u8 field_1C;
|
||||
u8 field_1D;
|
||||
u8 field_1E;
|
||||
u8 field_1F;
|
||||
u8 field_20;
|
||||
u8 filler[4];
|
||||
u8 topListMenuWindowId;
|
||||
u8 topListMenuId;
|
||||
u8 tradeBoardSelectWindowId;
|
||||
u8 tradeBoardDetailsWindowId;
|
||||
u8 unused1;
|
||||
u8 searchTaskId;
|
||||
u8 spriteIds[40];
|
||||
u8 field_49;
|
||||
u8 field_4A;
|
||||
u16 field_4C[6];
|
||||
u8 field_58[0x98 - 0x58];
|
||||
u16 field_98;
|
||||
u16 field_9A[3];
|
||||
struct UnkStruct_8019BA8 field_A0[8];
|
||||
u8 field_C0[12][15];
|
||||
u8 field_174[48];
|
||||
u8 field_1A4[200];
|
||||
u8 unused2;
|
||||
u8 tradeBoardListMenuId;
|
||||
u16 playerSendBuffer[6];
|
||||
u8 activityRequestStrbufs[4][16];
|
||||
u16 partnerYesNoResponse;
|
||||
u16 recvActivityRequest[3];
|
||||
struct UnionRoomObject objects[MAX_UNION_ROOM_PLAYERS];
|
||||
u8 trainerCardStrBuffer[12][15];
|
||||
u8 trainerCardColorStrBuffer[48];
|
||||
u8 trainerCardMsgStrBuffer[200];
|
||||
};
|
||||
|
||||
union UnkUnion_Main
|
||||
union WirelessLink_Main
|
||||
{
|
||||
struct UnkStruct_Leader *leader;
|
||||
struct UnkStruct_Group *group;
|
||||
struct UnkStruct_URoom *uRoom;
|
||||
struct WirelessLink_Leader *leader;
|
||||
struct WirelessLink_Group *group;
|
||||
struct WirelessLink_URoom *uRoom;
|
||||
};
|
||||
|
||||
struct UnionRoomTrade
|
||||
{
|
||||
u16 field_0;
|
||||
u16 state;
|
||||
u16 type;
|
||||
u32 playerPersonality;
|
||||
u8 field_8;
|
||||
u8 field_9;
|
||||
u8 offerPlayerId;
|
||||
u8 filler1;
|
||||
u16 playerSpecies;
|
||||
u16 playerLevel;
|
||||
u16 species;
|
||||
u16 level;
|
||||
u16 field_12;
|
||||
u16 filler2;
|
||||
u32 personality;
|
||||
};
|
||||
|
||||
// Exported RAM declarations
|
||||
|
||||
extern u8 gUnknown_02022C2C;
|
||||
extern union UnkUnion_Main gUnknown_02022C30;
|
||||
extern struct GFtgtGnameSub gUnknown_02022C38;
|
||||
extern u8 gPlayerCurrActivity;
|
||||
extern union WirelessLink_Main gUnknown_02022C30;
|
||||
extern struct GFtgtGnameSub gPartnerTgtGnameSub;
|
||||
|
||||
extern u16 gUnionRoomOfferedSpecies;
|
||||
extern u8 gUnionRoomRequestedMonType;
|
||||
|
||||
// Exported ROM declarations
|
||||
|
||||
u8 sub_8013F78(void);
|
||||
void nullsub_89(u8 taskId);
|
||||
void var_800D_set_xB(void);
|
||||
u8 CreateTask_CreateTradeMenu(void);
|
||||
void SetUsingUnionRoomStartMenu(void);
|
||||
void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0);
|
||||
void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0);
|
||||
void MEvent_CreateTask_Leader(u32 arg0);
|
||||
u8 CreateTask_ListenToWireless(void);
|
||||
void StartUnionRoomBattle(u16 battleFlags);
|
||||
|
||||
#endif //GUARD_UNION_ROOM_H
|
||||
@@ -1,7 +1,6 @@
|
||||
#ifndef GUARD_UNION_ROOM_BATTLE_H
|
||||
#define GUARD_UNION_ROOM_BATTLE_H
|
||||
|
||||
u8 sub_8013C40(void);
|
||||
void sub_8014210(u16 battleFlags);
|
||||
void CB2_UnionRoomBattle(void);
|
||||
|
||||
#endif //GUARD_UNION_ROOM_BATTLE_H
|
||||
@@ -1,18 +1,7 @@
|
||||
#ifndef GUARD_UNION_ROOM_CHAT_H
|
||||
#define GUARD_UNION_ROOM_CHAT_H
|
||||
|
||||
enum
|
||||
{
|
||||
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);
|
||||
void EnterUnionRoomChat(void);
|
||||
void InitUnionRoomChatRegisteredTexts(void);
|
||||
|
||||
#endif // GUARD_UNION_ROOM_CHAT_H
|
||||
@@ -1,14 +1,14 @@
|
||||
#ifndef GUARD_UNION_ROOM_PLAYER_AVATAR_H
|
||||
#define GUARD_UNION_ROOM_PLAYER_AVATAR_H
|
||||
|
||||
u8 sub_8019BA8(struct UnkStruct_8019BA8 * ptr);
|
||||
void sub_8019E3C(void);
|
||||
void sub_8019E70(u8 *arg0, s32 arg1);
|
||||
void sub_8019F04(u8 *spriteIds);
|
||||
void sub_8019F2C(void);
|
||||
void sub_801A274(struct UnkStruct_URoom *arg0);
|
||||
void sub_801A284(struct UnkStruct_URoom *arg0);
|
||||
bool32 sub_801A2A8(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3);
|
||||
void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2);
|
||||
u8 InitUnionRoomPlayerObjects(struct UnionRoomObject *players);
|
||||
void DestroyUnionRoomPlayerObjects(void);
|
||||
void CreateGroupMemberSpritesInvisible(u8 *spriteIds, s32 playerIdx);
|
||||
void DestroyGroupMemberSprites(u8 *spriteIds);
|
||||
void SetTilesAroundUnionRoomPlayersPassable(void);
|
||||
void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom);
|
||||
void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom);
|
||||
bool32 TryInteractWithUnionRoomMember(struct UnkStruct_Main0 *main0, s16 *directionPtr, s16 *playerIdxPtr, u8 *spriteIds);
|
||||
void UpdateUnionRoomMemberFacing(u32 currDirection, u32 playerIdx, struct UnkStruct_Main0 *main0);
|
||||
|
||||
#endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H
|
||||
@@ -65,6 +65,7 @@ SECTIONS {
|
||||
src/union_room.o(.text);
|
||||
src/mystery_gift.o(.text);
|
||||
src/union_room_player_avatar.o(.text);
|
||||
src/wireless_communication_status_screen.o(.text);
|
||||
src/union_room_battle.o(.text);
|
||||
src/mevent2.o(.text);
|
||||
src/mevent_801BAAC.o(.text);
|
||||
@@ -450,6 +451,7 @@ SECTIONS {
|
||||
src/union_room.o(.rodata);
|
||||
src/mystery_gift.o(.rodata);
|
||||
src/union_room_player_avatar.o(.rodata);
|
||||
src/wireless_communication_status_screen.o(.rodata);
|
||||
src/union_room_battle.o(.rodata);
|
||||
src/mevent2.o(.rodata);
|
||||
src/mevent_801BAAC.o(.rodata);
|
||||
|
||||
@@ -1267,9 +1267,9 @@ static void LinkOpponentHandleDrawTrainerPic(void)
|
||||
else
|
||||
{
|
||||
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
|
||||
|| (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_LEAF_GREEN)
|
||||
|
||||
@@ -1229,9 +1229,9 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
|
||||
else
|
||||
{
|
||||
xPos = 176;
|
||||
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
|
||||
if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
|
||||
{
|
||||
trainerPicId = sub_8068B48();
|
||||
trainerPicId = GetUnionRoomTrainerPic();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "battle_message.h"
|
||||
#include "cable_club.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "party_menu.h"
|
||||
#include "pokemon.h"
|
||||
#include "recorded_battle.h"
|
||||
@@ -33,10 +34,10 @@ void HandleLinkBattleSetup(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
if (gWirelessCommType)
|
||||
sub_800B488();
|
||||
SetWirelessCommType1();
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
OpenLink();
|
||||
CreateTask(task00_08081A90, 0);
|
||||
CreateTask(Task_WaitForLinkPlayerConnection, 0);
|
||||
CreateTasksForSendRecvLinkBuffers();
|
||||
}
|
||||
}
|
||||
@@ -827,7 +828,7 @@ void sub_8033648(void)
|
||||
|
||||
if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & BATTLE_TYPE_20))
|
||||
{
|
||||
sub_8011BD0();
|
||||
DestroyTask_RfuIdle();
|
||||
for (i = 0; i < GetLinkPlayerCount(); i++)
|
||||
{
|
||||
if (GetBlockReceivedStatus() & gBitTable[i])
|
||||
|
||||
+1
-1
@@ -995,7 +995,7 @@ static void CB2_HandleStartBattle(void)
|
||||
sub_8036A5C();
|
||||
SetPlayerBerryDataInBattleStruct();
|
||||
|
||||
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
|
||||
if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
|
||||
{
|
||||
gLinkPlayers[0].id = 0;
|
||||
gLinkPlayers[1].id = 1;
|
||||
|
||||
@@ -1981,7 +1981,7 @@ void BufferStringBattle(u16 stringID)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
|
||||
if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
|
||||
stringPtr = sText_Trainer1WantsToBattle;
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
|
||||
stringPtr = sText_LinkTrainerWantsToBattlePause;
|
||||
@@ -2049,7 +2049,7 @@ void BufferStringBattle(u16 stringID)
|
||||
{
|
||||
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
|
||||
stringPtr = sText_Trainer1SentOutPkmn;
|
||||
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
|
||||
else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
|
||||
stringPtr = sText_Trainer1SentOutPkmn;
|
||||
else
|
||||
stringPtr = sText_LinkTrainerSentOutPkmn;
|
||||
@@ -2110,7 +2110,7 @@ void BufferStringBattle(u16 stringID)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||
stringPtr = sText_LinkTrainerMultiSentOutPkmn;
|
||||
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
|
||||
else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
|
||||
stringPtr = sText_Trainer1SentOutPkmn2;
|
||||
else
|
||||
stringPtr = sText_LinkTrainerSentOutPkmn2;
|
||||
@@ -2180,7 +2180,7 @@ void BufferStringBattle(u16 stringID)
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
|
||||
else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
|
||||
{
|
||||
switch (gBattleTextBuff1[0])
|
||||
{
|
||||
@@ -2495,8 +2495,8 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
|
||||
case B_TXT_TRAINER1_CLASS: // trainer class name
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
|
||||
toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()];
|
||||
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
|
||||
toCpy = gTrainerClassNames[sub_8068BB0()];
|
||||
else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
|
||||
toCpy = gTrainerClassNames[GetUnionRoomTrainerClass()];
|
||||
else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
|
||||
toCpy = gTrainerClassNames[GetFrontierBrainTrainerClass()];
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
|
||||
@@ -2517,7 +2517,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
|
||||
ConvertInternationalString(text, gBattleResources->secretBase->language);
|
||||
toCpy = text;
|
||||
}
|
||||
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
|
||||
else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
|
||||
{
|
||||
toCpy = gLinkPlayers[multiplayerId ^ BIT_SIDE].name;
|
||||
}
|
||||
|
||||
+8
-8
@@ -997,7 +997,7 @@ struct BerryTree *GetBerryTreeInfo(u8 id)
|
||||
|
||||
bool32 ObjectEventInteractionWaterBerryTree(void)
|
||||
{
|
||||
struct BerryTree *tree = GetBerryTreeInfo(ObjectEventGetBerryTreeId(gSelectedObjectEvent));
|
||||
struct BerryTree *tree = GetBerryTreeInfo(GetObjectEventBerryTreeId(gSelectedObjectEvent));
|
||||
|
||||
switch (tree->stage)
|
||||
{
|
||||
@@ -1022,7 +1022,7 @@ bool32 ObjectEventInteractionWaterBerryTree(void)
|
||||
bool8 IsPlayerFacingEmptyBerryTreePatch(void)
|
||||
{
|
||||
if (GetObjectEventScriptPointerPlayerFacing() == BerryTreeScript
|
||||
&& GetStageByBerryTreeId(ObjectEventGetBerryTreeId(gSelectedObjectEvent)) == BERRY_STAGE_NO_BERRY)
|
||||
&& GetStageByBerryTreeId(GetObjectEventBerryTreeId(gSelectedObjectEvent)) == BERRY_STAGE_NO_BERRY)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
@@ -1260,7 +1260,7 @@ void ObjectEventInteractionGetBerryTreeData(void)
|
||||
u8 group;
|
||||
u8 num;
|
||||
|
||||
id = ObjectEventGetBerryTreeId(gSelectedObjectEvent);
|
||||
id = GetObjectEventBerryTreeId(gSelectedObjectEvent);
|
||||
berry = GetBerryTypeByBerryTreeId(id);
|
||||
ResetBerryTreeSparkleFlag(id);
|
||||
localId = gSpecialVar_LastTalked;
|
||||
@@ -1277,13 +1277,13 @@ void ObjectEventInteractionGetBerryTreeData(void)
|
||||
|
||||
void ObjectEventInteractionGetBerryName(void)
|
||||
{
|
||||
u8 berryType = GetBerryTypeByBerryTreeId(ObjectEventGetBerryTreeId(gSelectedObjectEvent));
|
||||
u8 berryType = GetBerryTypeByBerryTreeId(GetObjectEventBerryTreeId(gSelectedObjectEvent));
|
||||
GetBerryNameByBerryType(berryType, gStringVar1);
|
||||
}
|
||||
|
||||
void ObjectEventInteractionGetBerryCountString(void)
|
||||
{
|
||||
u8 treeId = ObjectEventGetBerryTreeId(gSelectedObjectEvent);
|
||||
u8 treeId = GetObjectEventBerryTreeId(gSelectedObjectEvent);
|
||||
u8 berry = GetBerryTypeByBerryTreeId(treeId);
|
||||
u8 count = GetBerryCountByBerryTreeId(treeId);
|
||||
GetBerryCountStringByBerryType(berry, gStringVar1, count);
|
||||
@@ -1298,13 +1298,13 @@ void ObjectEventInteractionPlantBerryTree(void)
|
||||
{
|
||||
u8 berry = ItemIdToBerryType(gSpecialVar_ItemId);
|
||||
|
||||
PlantBerryTree(ObjectEventGetBerryTreeId(gSelectedObjectEvent), berry, 1, TRUE);
|
||||
PlantBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent), berry, 1, TRUE);
|
||||
ObjectEventInteractionGetBerryTreeData();
|
||||
}
|
||||
|
||||
void ObjectEventInteractionPickBerryTree(void)
|
||||
{
|
||||
u8 id = ObjectEventGetBerryTreeId(gSelectedObjectEvent);
|
||||
u8 id = GetObjectEventBerryTreeId(gSelectedObjectEvent);
|
||||
u8 berry = GetBerryTypeByBerryTreeId(id);
|
||||
|
||||
gSpecialVar_0x8004 = AddBagItem(BerryTypeToItemId(berry), GetBerryCountByBerryTreeId(id));
|
||||
@@ -1312,7 +1312,7 @@ void ObjectEventInteractionPickBerryTree(void)
|
||||
|
||||
void ObjectEventInteractionRemoveBerryTree(void)
|
||||
{
|
||||
RemoveBerryTree(ObjectEventGetBerryTreeId(gSelectedObjectEvent));
|
||||
RemoveBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent));
|
||||
sub_8092EF0(gSpecialVar_LastTalked, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -1246,7 +1246,7 @@ static void sub_8080018(void)
|
||||
if (++sBerryBlenderData->framesToWait > 20)
|
||||
{
|
||||
ClearDialogWindowAndFrameToTransparent(4, TRUE);
|
||||
if (GetBlockReceivedStatus() == sub_800A9D8())
|
||||
if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
|
||||
{
|
||||
for (i = 0; i < GetLinkPlayerCount(); i++)
|
||||
{
|
||||
@@ -1500,7 +1500,7 @@ static void sub_80808D4(void)
|
||||
switch (sBerryBlenderData->mainState)
|
||||
{
|
||||
case 0:
|
||||
sub_800B4C0();
|
||||
SetWirelessCommType0();
|
||||
sub_8080588();
|
||||
Blender_SetParticipantBerryData(0, gSpecialVar_ItemId);
|
||||
Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
|
||||
@@ -1664,7 +1664,7 @@ static void sub_80808D4(void)
|
||||
static void sub_8080DF8(void)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < CMD_LENGTH / 2; i++)
|
||||
{
|
||||
gSendCmd[0] = 0;
|
||||
gSendCmd[2] = 0;
|
||||
|
||||
+6
-6
@@ -832,7 +832,7 @@ u32 sub_8020C0C(MainCallback callback)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_8020C70(MainCallback callback)
|
||||
void StartBerryCrush(MainCallback callback)
|
||||
{
|
||||
u8 playerCount = 0;
|
||||
u8 multiplayerId;
|
||||
@@ -842,7 +842,7 @@ void sub_8020C70(MainCallback callback)
|
||||
SetMainCallback2(callback);
|
||||
Rfu.unk_10 = 0;
|
||||
Rfu.unk_12 = 0;
|
||||
Rfu.unk_ee = 1;
|
||||
Rfu.errorState = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -853,7 +853,7 @@ void sub_8020C70(MainCallback callback)
|
||||
SetMainCallback2(callback);
|
||||
Rfu.unk_10 = 0;
|
||||
Rfu.unk_12 = 0;
|
||||
Rfu.unk_ee = 1;
|
||||
Rfu.errorState = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -863,7 +863,7 @@ void sub_8020C70(MainCallback callback)
|
||||
SetMainCallback2(callback);
|
||||
Rfu.unk_10 = 0;
|
||||
Rfu.unk_12 = 0;
|
||||
Rfu.unk_ee = 1;
|
||||
Rfu.errorState = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -3013,10 +3013,10 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4)
|
||||
DrawDialogueFrame(0, 0);
|
||||
AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3);
|
||||
CopyWindowToVram(0, 3);
|
||||
CreateTask(sub_8153688, 0);
|
||||
CreateTask(Task_LinkSave, 0);
|
||||
break;
|
||||
case 3:
|
||||
if (FuncIsActiveTask(sub_8153688))
|
||||
if (FuncIsActiveTask(Task_LinkSave))
|
||||
return 0;
|
||||
break;
|
||||
case 4:
|
||||
|
||||
+328
-304
File diff suppressed because it is too large.
Load diff
@@ -36,7 +36,7 @@ bool8 sub_80FC530(u8 arg0)
|
||||
|
||||
bool8 sub_80FC55C(void)
|
||||
{
|
||||
if (GetBlockReceivedStatus() == sub_800A9D8())
|
||||
if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
|
||||
{
|
||||
ResetBlockReceivedFlags();
|
||||
return TRUE;
|
||||
|
||||
+254
-212
@@ -50,27 +50,36 @@ const u8 sText_4PlayerMode[] = _("4-PLAYER\nMODE");
|
||||
const u8 sText_5PlayerMode[] = _("5-PLAYER\nMODE");
|
||||
|
||||
static const u8 *const sPlayersNeededOrModeTexts[][5] = {
|
||||
// 2 players required
|
||||
{
|
||||
sText_1PlayerNeeded,
|
||||
sText_2PlayerMode
|
||||
}, {
|
||||
},
|
||||
// 4 players required
|
||||
{
|
||||
sText_3PlayersNeeded,
|
||||
sText_2PlayersNeeded,
|
||||
sText_1PlayerNeeded,
|
||||
sText_4PlayerMode
|
||||
}, {
|
||||
},
|
||||
// 2-5 players required
|
||||
{
|
||||
sText_1PlayerNeeded,
|
||||
sText_2PlayerMode,
|
||||
sText_3PlayerMode,
|
||||
sText_4PlayerMode,
|
||||
sText_5PlayerMode
|
||||
}, {
|
||||
},
|
||||
// 3-5 players required
|
||||
{
|
||||
sText_2PlayersNeeded,
|
||||
sText_1PlayerNeeded,
|
||||
sText_3PlayerMode,
|
||||
sText_4PlayerMode,
|
||||
sText_5PlayerMode
|
||||
}, {
|
||||
},
|
||||
// 2-4 players required
|
||||
{
|
||||
sText_1PlayerNeeded,
|
||||
sText_2PlayerMode,
|
||||
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_TrainersNotReadyYet[] = _("The other TRAINER(S) is/are not\nready yet.\p");
|
||||
|
||||
const u8 *const sCantTransmitToTrainerTexts[] = {
|
||||
sText_CantTransmitTrainerTooFar,
|
||||
sText_TrainersNotReadyYet
|
||||
static const u8 *const sCantTransmitToTrainerTexts[] = {
|
||||
[UR_TRADE_PLAYER_NOT_READY - 1] = sText_CantTransmitTrainerTooFar,
|
||||
[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_MemberNoLongerAvailable[] = _("There is a member who can no\nlonger remain available.\p");
|
||||
|
||||
const u8 *const sPlayerUnavailableTexts[] = {
|
||||
static const u8 *const sPlayerUnavailableTexts[] = {
|
||||
sText_OtherTrainerUnavailableNow,
|
||||
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_StoppedBeingMember[] = _("You stopped being a member.\p");
|
||||
|
||||
const u8 *const sPlayerDisconnectedTexts[] = {
|
||||
NULL,
|
||||
sText_MemberNoLongerAvailable,
|
||||
sText_TrainerAppearsUnavailable,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
sText_PlayerRepliedNo,
|
||||
NULL,
|
||||
NULL,
|
||||
sText_StoppedBeingMember
|
||||
static const u8 *const sPlayerDisconnectedTexts[] = {
|
||||
[RFU_STATUS_OK] = NULL,
|
||||
[RFU_STATUS_FATAL_ERROR] = sText_MemberNoLongerAvailable,
|
||||
[RFU_STATUS_CONNECTION_ERROR] = sText_TrainerAppearsUnavailable,
|
||||
[RFU_STATUS_CHILD_SEND_COMPLETE] = NULL,
|
||||
[RFU_STATUS_NEW_CHILD_DETECTED] = NULL,
|
||||
[RFU_STATUS_JOIN_GROUP_OK] = NULL,
|
||||
[RFU_STATUS_JOIN_GROUP_NO] = sText_PlayerRepliedNo,
|
||||
[RFU_STATUS_WAIT_ACK_JOIN_GROUP] = NULL,
|
||||
[RFU_STATUS_LEAVE_GROUP_NOTICE] = NULL,
|
||||
[RFU_STATUS_LEAVE_GROUP] = sText_StoppedBeingMember
|
||||
};
|
||||
|
||||
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…”");
|
||||
|
||||
const u8 *const sLinkDroppedTexts[] = {
|
||||
NULL,
|
||||
sText_LinkWithFriendDropped,
|
||||
sText_LinkWithFriendDropped,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
sText_PlayerRepliedNo2,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
[RFU_STATUS_OK] = NULL,
|
||||
[RFU_STATUS_FATAL_ERROR] = sText_LinkWithFriendDropped,
|
||||
[RFU_STATUS_CONNECTION_ERROR] = sText_LinkWithFriendDropped,
|
||||
[RFU_STATUS_CHILD_SEND_COMPLETE] = NULL,
|
||||
[RFU_STATUS_NEW_CHILD_DETECTED] = NULL,
|
||||
[RFU_STATUS_JOIN_GROUP_OK] = NULL,
|
||||
[RFU_STATUS_JOIN_GROUP_NO] = sText_PlayerRepliedNo2,
|
||||
[RFU_STATUS_WAIT_ACK_JOIN_GROUP] = NULL,
|
||||
[RFU_STATUS_LEAVE_GROUP_NOTICE] = NULL,
|
||||
[RFU_STATUS_LEAVE_GROUP] = NULL
|
||||
};
|
||||
|
||||
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_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_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_EnteringChat[] = _("Entering the chat…{PAUSE 60}");
|
||||
|
||||
const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = {
|
||||
static const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = {
|
||||
{
|
||||
{
|
||||
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_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_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] = {
|
||||
sText_DeclineBattleMale,
|
||||
stext_DeclineBattleFemale
|
||||
ALIGNED(4) const u8 sText_DeclineChatMale[] = _("Oh, all right.\nCome see me anytime, okay?\p");
|
||||
ALIGNED(4) const u8 stext_DeclineChatFemale[] = _("Oh…\nPlease come by anytime.\p");
|
||||
|
||||
// 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_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_ChatDeclinedFemale
|
||||
};
|
||||
@@ -484,8 +496,8 @@ static const u8 *const sChooseTrainerTexts[NUM_LINK_GROUP_TYPES] =
|
||||
[LINK_GROUP_BERRY_PICKING] = sText_ChooseLeaderBerryPicking,
|
||||
[LINK_GROUP_WONDER_CARD] = sText_ChooseTrainerToShareWonderCards,
|
||||
[LINK_GROUP_WONDER_NEWS] = sText_ChooseTrainerToShareWonderNews,
|
||||
[LINK_GROUP_UNK_9] = NULL,
|
||||
[LINK_GROUP_UNK_10] = NULL,
|
||||
[LINK_GROUP_UNION_ROOM_RESUME] = NULL,
|
||||
[LINK_GROUP_UNION_ROOM_INIT] = NULL,
|
||||
[LINK_GROUP_UNK_11] = NULL,
|
||||
[LINK_GROUP_RECORD_CORNER] = sText_ChooseLeaderRecordCorner,
|
||||
[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}");
|
||||
|
||||
const u8 *const sLinkGroupActivityTexts[] = {
|
||||
sText_EmptyString,
|
||||
sText_SingleBattle,
|
||||
sText_DoubleBattle,
|
||||
sText_MultiBattle,
|
||||
sText_PokemonTrades,
|
||||
sText_Chat,
|
||||
sText_WonderCards,
|
||||
sText_WonderNews,
|
||||
sText_Cards,
|
||||
sText_PokemonJump,
|
||||
sText_BerryCrush,
|
||||
sText_BerryPicking,
|
||||
sText_Search,
|
||||
sText_EmptyString,
|
||||
sText_BattleTowerOpenLv,
|
||||
sText_RecordCorner,
|
||||
sText_BerryBlender,
|
||||
sText_EmptyString,
|
||||
sText_EmptyString,
|
||||
sText_EmptyString,
|
||||
sText_EmptyString,
|
||||
sText_WonderCards,
|
||||
sText_WonderNews,
|
||||
sText_CoolContest,
|
||||
sText_BeautyContest,
|
||||
sText_CuteContest,
|
||||
sText_SmartContest,
|
||||
sText_ToughContest,
|
||||
sText_BattleTowerLv50
|
||||
static const u8 *const sLinkGroupActivityNameTexts[] = {
|
||||
[ACTIVITY_NONE] = sText_EmptyString,
|
||||
[ACTIVITY_BATTLE_SINGLE] = sText_SingleBattle,
|
||||
[ACTIVITY_BATTLE_DOUBLE] = sText_DoubleBattle,
|
||||
[ACTIVITY_BATTLE_MULTI] = sText_MultiBattle,
|
||||
[ACTIVITY_TRADE] = sText_PokemonTrades,
|
||||
[ACTIVITY_CHAT] = sText_Chat,
|
||||
[ACTIVITY_WONDER_CARD] = sText_WonderCards,
|
||||
[ACTIVITY_WONDER_NEWS] = sText_WonderNews,
|
||||
[ACTIVITY_CARD] = sText_Cards,
|
||||
[ACTIVITY_POKEMON_JUMP] = sText_PokemonJump,
|
||||
[ACTIVITY_BERRY_CRUSH] = sText_BerryCrush,
|
||||
[ACTIVITY_BERRY_PICK] = sText_BerryPicking,
|
||||
[ACTIVITY_SEARCH] = sText_Search,
|
||||
[ACTIVITY_SPIN_TRADE] = sText_EmptyString,
|
||||
[ACTIVITY_BATTLE_TOWER_OPEN] = sText_BattleTowerOpenLv,
|
||||
[ACTIVITY_RECORD_CORNER] = sText_RecordCorner,
|
||||
[ACTIVITY_BERRY_BLENDER] = sText_BerryBlender,
|
||||
[ACTIVITY_ACCEPT] = sText_EmptyString,
|
||||
[ACTIVITY_DECLINE] = sText_EmptyString,
|
||||
[ACTIVITY_NPCTALK] = sText_EmptyString,
|
||||
[ACTIVITY_PLYRTALK] = sText_EmptyString,
|
||||
[ACTIVITY_WONDER_CARD2] = sText_WonderCards,
|
||||
[ACTIVITY_WONDER_NEWS2] = sText_WonderNews,
|
||||
[ACTIVITY_CONTEST_COOL] = sText_CoolContest,
|
||||
[ACTIVITY_CONTEST_BEAUTY] = sText_BeautyContest,
|
||||
[ACTIVITY_CONTEST_CUTE] = sText_CuteContest,
|
||||
[ACTIVITY_CONTEST_SMART] = sText_SmartContest,
|
||||
[ACTIVITY_CONTEST_TOUGH] = sText_ToughContest,
|
||||
[ACTIVITY_BATTLE_TOWER] = sText_BattleTowerLv50
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_082F00BC = {
|
||||
static const struct WindowTemplate sWindowTemplate_BButtonCancel = {
|
||||
.bg = 0x00,
|
||||
.tilemapLeft = 0x00,
|
||||
.tilemapTop = 0x00,
|
||||
@@ -609,62 +621,69 @@ const struct WindowTemplate gUnknown_082F00BC = {
|
||||
.baseBlock = 0x0008
|
||||
};
|
||||
|
||||
const u32 gUnknown_082F00C4[NUM_LINK_GROUP_TYPES] = {
|
||||
0x0201,
|
||||
0x0202,
|
||||
0x0403,
|
||||
0x0204,
|
||||
0x2509,
|
||||
0x250a,
|
||||
0x350b,
|
||||
0x0000,
|
||||
0x0000,
|
||||
0x0000,
|
||||
0x0000,
|
||||
0x0000,
|
||||
0x240f,
|
||||
0x2410,
|
||||
0x0000,
|
||||
0x2417,
|
||||
0x2418,
|
||||
0x2419,
|
||||
0x241a,
|
||||
0x241b,
|
||||
0x021c,
|
||||
0x020e
|
||||
// Minimum and maximum number of players for a link group
|
||||
// A minimum of 0 means the min and max are equal
|
||||
#define LINK_GROUP_CAPACITY(min, max)(((min) << 12) | ((max) << 8))
|
||||
#define GROUP_MAX(capacity)(capacity & 0x0F)
|
||||
#define GROUP_MIN(capacity)(capacity >> 4)
|
||||
#define GROUP_MIN2(capacity)(capacity & 0xF0) // Unnecessary to have both, but needed to match
|
||||
|
||||
static const u32 sLinkGroupToActivityAndCapacity[NUM_LINK_GROUP_TYPES] = {
|
||||
[LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE | LINK_GROUP_CAPACITY(0, 2),
|
||||
[LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE | LINK_GROUP_CAPACITY(0, 2),
|
||||
[LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI | LINK_GROUP_CAPACITY(0, 4),
|
||||
[LINK_GROUP_TRADE] = ACTIVITY_TRADE | LINK_GROUP_CAPACITY(0, 2),
|
||||
[LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP | LINK_GROUP_CAPACITY(2, 5),
|
||||
[LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH | LINK_GROUP_CAPACITY(2, 5),
|
||||
[LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK | LINK_GROUP_CAPACITY(3, 5),
|
||||
[LINK_GROUP_WONDER_CARD] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
|
||||
[LINK_GROUP_WONDER_NEWS] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
|
||||
[LINK_GROUP_UNION_ROOM_RESUME] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
|
||||
[LINK_GROUP_UNION_ROOM_INIT] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
|
||||
[LINK_GROUP_UNK_11] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
|
||||
[LINK_GROUP_RECORD_CORNER] = ACTIVITY_RECORD_CORNER | LINK_GROUP_CAPACITY(2, 4),
|
||||
[LINK_GROUP_BERRY_BLENDER] = ACTIVITY_BERRY_BLENDER | LINK_GROUP_CAPACITY(2, 4),
|
||||
[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 = {
|
||||
.bg = 0x00,
|
||||
.tilemapLeft = 0x01,
|
||||
.tilemapTop = 0x03,
|
||||
.width = 0x0d,
|
||||
.height = 0x08,
|
||||
.paletteNum = 0x0f,
|
||||
static const struct WindowTemplate sWindowTemplate_PlayerList = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 3,
|
||||
.width = 13,
|
||||
.height = 8,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x0044
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_082F0124 = {
|
||||
.bg = 0x00,
|
||||
.tilemapLeft = 0x01,
|
||||
.tilemapTop = 0x03,
|
||||
.width = 0x0d,
|
||||
.height = 0x0a,
|
||||
.paletteNum = 0x0f,
|
||||
static const struct WindowTemplate sWindowTemplate_5PlayerList = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 3,
|
||||
.width = 13,
|
||||
.height = 10,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x0044
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_082F012C = {
|
||||
.bg = 0x00,
|
||||
.tilemapLeft = 0x10,
|
||||
.tilemapTop = 0x03,
|
||||
.width = 0x07,
|
||||
.height = 0x04,
|
||||
.paletteNum = 0x0f,
|
||||
static const struct WindowTemplate sWindowTemplate_NumPlayerMode = {
|
||||
.bg = 0,
|
||||
.tilemapLeft = 16,
|
||||
.tilemapTop = 3,
|
||||
.width = 7,
|
||||
.height = 4,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x00c6
|
||||
};
|
||||
|
||||
const struct ListMenuItem gUnknown_082F0134[] = {
|
||||
static const struct ListMenuItem sPossibleGroupMembersListMenuItems[] = {
|
||||
{ sText_EmptyString, 0 },
|
||||
{ sText_EmptyString, 1 },
|
||||
{ sText_EmptyString, 2 },
|
||||
@@ -672,11 +691,11 @@ const struct ListMenuItem gUnknown_082F0134[] = {
|
||||
{ sText_EmptyString, 4 }
|
||||
};
|
||||
|
||||
const struct ListMenuTemplate gUnknown_082F015C = {
|
||||
.items = gUnknown_082F0134,
|
||||
static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = {
|
||||
.items = sPossibleGroupMembersListMenuItems,
|
||||
.moveCursorFunc = NULL,
|
||||
.itemPrintFunc = sub_8013278,
|
||||
.totalItems = 5,
|
||||
.itemPrintFunc = ItemPrintFunc_PossibleGroupMembers,
|
||||
.totalItems = ARRAY_COUNT(sPossibleGroupMembersListMenuItems),
|
||||
.maxShowed = 5,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
@@ -732,11 +751,11 @@ const struct ListMenuItem gUnknown_082F0184[] = {
|
||||
{ sText_EmptyString, 15 }
|
||||
};
|
||||
|
||||
const struct ListMenuTemplate gUnknown_082F0204 = {
|
||||
static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = {
|
||||
.items = gUnknown_082F0184,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = sub_8013DF4,
|
||||
.totalItems = 16,
|
||||
.itemPrintFunc = ListMenuItemPrintFunc_UnionRoomGroups,
|
||||
.totalItems = ARRAY_COUNT(gUnknown_082F0184),
|
||||
.maxShowed = 5,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
@@ -753,7 +772,7 @@ const struct ListMenuTemplate gUnknown_082F0204 = {
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_082F021C = {
|
||||
static const struct WindowTemplate sWindowTemplate_InviteToActivity = {
|
||||
.bg = 0x00,
|
||||
.tilemapLeft = 0x14,
|
||||
.tilemapTop = 0x05,
|
||||
@@ -770,11 +789,11 @@ const struct ListMenuItem gUnknown_082F0224[] = {
|
||||
{ sText_Exit, 0x040 }
|
||||
};
|
||||
|
||||
const struct ListMenuTemplate gUnknown_082F0244 = {
|
||||
static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = {
|
||||
.items = gUnknown_082F0224,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = NULL,
|
||||
.totalItems = 4,
|
||||
.totalItems = ARRAY_COUNT(gUnknown_082F0224),
|
||||
.maxShowed = 4,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
@@ -791,7 +810,7 @@ const struct ListMenuTemplate gUnknown_082F0244 = {
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_082F025C = {
|
||||
static const struct WindowTemplate sWindowTemplate_RegisterForTrade = {
|
||||
.bg = 0x00,
|
||||
.tilemapLeft = 0x12,
|
||||
.tilemapTop = 0x07,
|
||||
@@ -801,17 +820,17 @@ const struct WindowTemplate gUnknown_082F025C = {
|
||||
.baseBlock = 0x0001
|
||||
};
|
||||
|
||||
const struct ListMenuItem gUnknown_082F0264[] = {
|
||||
static const struct ListMenuItem sRegisterForTradeListMenuItems[] = {
|
||||
{ gText_Register, 1 },
|
||||
{ sText_Info, 2 },
|
||||
{ sText_Exit, 3 }
|
||||
};
|
||||
|
||||
const struct ListMenuTemplate gUnknown_082F027C = {
|
||||
.items = gUnknown_082F0264,
|
||||
static const struct ListMenuTemplate sListMenuTemplate_RegisterForTrade = {
|
||||
.items = sRegisterForTradeListMenuItems,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = NULL,
|
||||
.totalItems = 3,
|
||||
.totalItems = ARRAY_COUNT(sRegisterForTradeListMenuItems),
|
||||
.maxShowed = 3,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
@@ -838,7 +857,7 @@ const struct WindowTemplate gUnknown_082F0294 = {
|
||||
.baseBlock = 0x0001
|
||||
};
|
||||
|
||||
static const struct ListMenuItem sTradingBoardTypes[] = {
|
||||
static const struct ListMenuItem sTradingBoardTypes[NUMBER_OF_MON_TYPES] = {
|
||||
{ gTypeNames[TYPE_NORMAL], TYPE_NORMAL },
|
||||
{ gTypeNames[TYPE_FIRE], TYPE_FIRE },
|
||||
{ gTypeNames[TYPE_WATER], TYPE_WATER },
|
||||
@@ -859,11 +878,11 @@ static const struct ListMenuItem sTradingBoardTypes[] = {
|
||||
{ sText_Exit, NUMBER_OF_MON_TYPES }
|
||||
};
|
||||
|
||||
const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = {
|
||||
static const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = {
|
||||
.items = sTradingBoardTypes,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = NULL,
|
||||
.totalItems = NUMBER_OF_MON_TYPES,
|
||||
.totalItems = ARRAY_COUNT(sTradingBoardTypes),
|
||||
.maxShowed = 6,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
@@ -880,7 +899,7 @@ const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = {
|
||||
.cursorKind = 0
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_082F0344 = {
|
||||
static const struct WindowTemplate sWindowTemplate_TradingBoard = {
|
||||
.bg = 0x00,
|
||||
.tilemapLeft = 0x01,
|
||||
.tilemapTop = 0x01,
|
||||
@@ -900,7 +919,7 @@ const struct WindowTemplate gUnknown_082F034C = {
|
||||
.baseBlock = 0x0039
|
||||
};
|
||||
|
||||
const struct ListMenuItem gUnknown_082F0354[] = {
|
||||
static const struct ListMenuItem sTradeBoardListMenuItems[] = {
|
||||
{ sText_EmptyString, -3 },
|
||||
{ sText_EmptyString, 0 },
|
||||
{ sText_EmptyString, 1 },
|
||||
@@ -913,11 +932,11 @@ const struct ListMenuItem gUnknown_082F0354[] = {
|
||||
{ sText_Exit2, 8 }
|
||||
};
|
||||
|
||||
const struct ListMenuTemplate gUnknown_082F03A4 = {
|
||||
.items = gUnknown_082F0354,
|
||||
static const struct ListMenuTemplate sTradeBoardListMenuTemplate = {
|
||||
.items = sTradeBoardListMenuItems,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = sub_8017BE8,
|
||||
.totalItems = 10,
|
||||
.itemPrintFunc = TradeBoardListMenuItemPrintFunc,
|
||||
.totalItems = ARRAY_COUNT(sTradeBoardListMenuItems),
|
||||
.maxShowed = 6,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
@@ -944,7 +963,7 @@ const struct WindowTemplate UnrefWindowTemplate_082F03B4 = {
|
||||
.baseBlock = 0x0039
|
||||
};
|
||||
|
||||
const struct ListMenuItem gUnknown_082F03C4[] = {
|
||||
static const struct ListMenuItem sEmptyListMenuItems[] = {
|
||||
{ sText_EmptyString, 0 },
|
||||
{ sText_EmptyString, 1 },
|
||||
{ sText_EmptyString, 2 },
|
||||
@@ -963,11 +982,12 @@ const struct ListMenuItem gUnknown_082F03C4[] = {
|
||||
{ sText_EmptyString, 15 }
|
||||
};
|
||||
|
||||
const struct ListMenuTemplate UnrefListMenuTemplate_082F0444 = {
|
||||
.items = gUnknown_082F03C4,
|
||||
// Unused
|
||||
static const struct ListMenuTemplate sUnknownListMenuTemplate = {
|
||||
.items = sEmptyListMenuItems,
|
||||
.moveCursorFunc = ListMenuDefaultCursorMoveFunc,
|
||||
.itemPrintFunc = nullsub_14,
|
||||
.totalItems = 16,
|
||||
.totalItems = ARRAY_COUNT(sEmptyListMenuItems),
|
||||
.maxShowed = 4,
|
||||
.windowId = 0,
|
||||
.header_X = 0,
|
||||
@@ -984,78 +1004,100 @@ const struct ListMenuTemplate UnrefListMenuTemplate_082F0444 = {
|
||||
.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 gUnknown_082F0478[] = {0x02, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F047C[] = {0x03, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F0480[] = {0x04, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F0484[] = {0x09, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F0488[] = {0x0a, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F048C[] = {0x0b, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F0490[] = {0x15, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F0494[] = {0x16, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F0498[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F04A4[] = {0x0c, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F04A8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15, 0x16, 0x0d, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F04B4[] = {0x0f, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F04B8[] = {0x10, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F04BC[] = {0x17, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F04C0[] = {0x18, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F04C4[] = {0x19, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F04C8[] = {0x1a, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F04CC[] = {0x1b, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F04D0[] = {0x1c, 0xff};
|
||||
ALIGNED(4) const u8 gUnknown_082F04D4[] = {0x0e, 0xff};
|
||||
ALIGNED(4) const u8 sAcceptedActivityIds_SingleBattle[] = {ACTIVITY_BATTLE_SINGLE, 0xff};
|
||||
ALIGNED(4) const u8 sAcceptedActivityIds_DoubleBattle[] = {ACTIVITY_BATTLE_DOUBLE, 0xff};
|
||||
ALIGNED(4) const u8 sAcceptedActivityIds_MultiBattle[] = {ACTIVITY_BATTLE_MULTI, 0xff};
|
||||
ALIGNED(4) const u8 sAcceptedActivityIds_Trade[] = {ACTIVITY_TRADE, 0xff};
|
||||
ALIGNED(4) const u8 sAcceptedActivityIds_PokemonJump[] = {ACTIVITY_POKEMON_JUMP, 0xff};
|
||||
ALIGNED(4) const u8 sAcceptedActivityIds_BerryCrush[] = {ACTIVITY_BERRY_CRUSH, 0xff};
|
||||
ALIGNED(4) const u8 sAcceptedActivityIds_BerryPicking[] = {ACTIVITY_BERRY_PICK, 0xff};
|
||||
ALIGNED(4) const u8 sAcceptedActivityIds_WonderCard[] = {ACTIVITY_WONDER_CARD2, 0xff};
|
||||
ALIGNED(4) const u8 sAcceptedActivityIds_WonderNews[] = {ACTIVITY_WONDER_NEWS2, 0xff};
|
||||
ALIGNED(4) const u8 sAcceptedActivityIds_Resume[] = {
|
||||
IN_UNION_ROOM | ACTIVITY_NONE,
|
||||
IN_UNION_ROOM | ACTIVITY_BATTLE_SINGLE,
|
||||
IN_UNION_ROOM | ACTIVITY_TRADE,
|
||||
IN_UNION_ROOM | ACTIVITY_CHAT,
|
||||
IN_UNION_ROOM | ACTIVITY_CARD,
|
||||
IN_UNION_ROOM | ACTIVITY_ACCEPT,
|
||||
IN_UNION_ROOM | ACTIVITY_DECLINE,
|
||||
IN_UNION_ROOM | ACTIVITY_NPCTALK,
|
||||
IN_UNION_ROOM | ACTIVITY_PLYRTALK,
|
||||
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] = {
|
||||
gUnknown_082F0474,
|
||||
gUnknown_082F0478,
|
||||
gUnknown_082F047C,
|
||||
gUnknown_082F0480,
|
||||
gUnknown_082F0484,
|
||||
gUnknown_082F0488,
|
||||
gUnknown_082F048C,
|
||||
gUnknown_082F0490,
|
||||
gUnknown_082F0494,
|
||||
gUnknown_082F0498,
|
||||
gUnknown_082F04A4,
|
||||
gUnknown_082F04A8,
|
||||
gUnknown_082F04B4,
|
||||
gUnknown_082F04B8,
|
||||
NULL,
|
||||
gUnknown_082F04BC,
|
||||
gUnknown_082F04C0,
|
||||
gUnknown_082F04C4,
|
||||
gUnknown_082F04C8,
|
||||
gUnknown_082F04CC,
|
||||
gUnknown_082F04D0,
|
||||
gUnknown_082F04D4
|
||||
const u8 *const sAcceptedActivityIds[NUM_LINK_GROUP_TYPES] = {
|
||||
[LINK_GROUP_SINGLE_BATTLE] = sAcceptedActivityIds_SingleBattle,
|
||||
[LINK_GROUP_DOUBLE_BATTLE] = sAcceptedActivityIds_DoubleBattle,
|
||||
[LINK_GROUP_MULTI_BATTLE] = sAcceptedActivityIds_MultiBattle,
|
||||
[LINK_GROUP_TRADE] = sAcceptedActivityIds_Trade,
|
||||
[LINK_GROUP_POKEMON_JUMP] = sAcceptedActivityIds_PokemonJump,
|
||||
[LINK_GROUP_BERRY_CRUSH] = sAcceptedActivityIds_BerryCrush,
|
||||
[LINK_GROUP_BERRY_PICKING] = sAcceptedActivityIds_BerryPicking,
|
||||
[LINK_GROUP_WONDER_CARD] = sAcceptedActivityIds_WonderCard,
|
||||
[LINK_GROUP_WONDER_NEWS] = sAcceptedActivityIds_WonderNews,
|
||||
[LINK_GROUP_UNION_ROOM_RESUME] = sAcceptedActivityIds_Resume,
|
||||
[LINK_GROUP_UNION_ROOM_INIT] = sAcceptedActivityIds_Init,
|
||||
[LINK_GROUP_UNK_11] = sAcceptedActivityIds_Unk11,
|
||||
[LINK_GROUP_RECORD_CORNER] = sAcceptedActivityIds_RecordCorner,
|
||||
[LINK_GROUP_BERRY_BLENDER] = sAcceptedActivityIds_BerryBlender,
|
||||
[LINK_GROUP_UNK_14] = NULL,
|
||||
[LINK_GROUP_COOL_CONTEST] = sAcceptedActivityIds_CoolContest,
|
||||
[LINK_GROUP_BEAUTY_CONTEST] = sAcceptedActivityIds_BeautyContest,
|
||||
[LINK_GROUP_CUTE_CONTEST] = sAcceptedActivityIds_CuteContest,
|
||||
[LINK_GROUP_SMART_CONTEST] = sAcceptedActivityIds_SmartContest,
|
||||
[LINK_GROUP_TOUGH_CONTEST] = sAcceptedActivityIds_ToughContest,
|
||||
[LINK_GROUP_BATTLE_TOWER] = sAcceptedActivityIds_BattleTower,
|
||||
[LINK_GROUP_BATTLE_TOWER_OPEN] = sAcceptedActivityIds_BattleTowerOpen
|
||||
};
|
||||
|
||||
// Link group type to ID for gUnknown_02022C2C
|
||||
const u8 gUnknown_082F0530[NUM_LINK_GROUP_TYPES + 2] =
|
||||
static const u8 sLinkGroupToURoomActivity[NUM_LINK_GROUP_TYPES + 2] =
|
||||
{
|
||||
0x01,
|
||||
0x02,
|
||||
0x03,
|
||||
0x04,
|
||||
0x09,
|
||||
0x0a,
|
||||
0x0b,
|
||||
0x15,
|
||||
0x16,
|
||||
0x00,
|
||||
0x00,
|
||||
0x00,
|
||||
0x0f,
|
||||
0x10,
|
||||
0x00,
|
||||
0x17,
|
||||
0x18,
|
||||
0x19,
|
||||
0x1a,
|
||||
0x1b,
|
||||
0x1c,
|
||||
0x0e
|
||||
[LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE,
|
||||
[LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE,
|
||||
[LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI,
|
||||
[LINK_GROUP_TRADE] = ACTIVITY_TRADE,
|
||||
[LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP,
|
||||
[LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH,
|
||||
[LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK,
|
||||
[LINK_GROUP_WONDER_CARD] = ACTIVITY_WONDER_CARD2,
|
||||
[LINK_GROUP_WONDER_NEWS] = ACTIVITY_WONDER_NEWS2,
|
||||
[LINK_GROUP_UNION_ROOM_RESUME] = ACTIVITY_NONE,
|
||||
[LINK_GROUP_UNION_ROOM_INIT] = ACTIVITY_NONE,
|
||||
[LINK_GROUP_UNK_11] = ACTIVITY_NONE,
|
||||
[LINK_GROUP_RECORD_CORNER] = ACTIVITY_RECORD_CORNER,
|
||||
[LINK_GROUP_BERRY_BLENDER] = ACTIVITY_BERRY_BLENDER,
|
||||
[LINK_GROUP_UNK_14] = ACTIVITY_NONE,
|
||||
[LINK_GROUP_COOL_CONTEST] = ACTIVITY_CONTEST_COOL,
|
||||
[LINK_GROUP_BEAUTY_CONTEST] = ACTIVITY_CONTEST_BEAUTY,
|
||||
[LINK_GROUP_CUTE_CONTEST] = ACTIVITY_CONTEST_CUTE,
|
||||
[LINK_GROUP_SMART_CONTEST] = ACTIVITY_CONTEST_SMART,
|
||||
[LINK_GROUP_TOUGH_CONTEST] = ACTIVITY_CONTEST_TOUGH,
|
||||
[LINK_GROUP_BATTLE_TOWER] = ACTIVITY_BATTLE_TOWER,
|
||||
[LINK_GROUP_BATTLE_TOWER_OPEN] = ACTIVITY_BATTLE_TOWER_OPEN
|
||||
};
|
||||
@@ -450,7 +450,7 @@ static void (*const gUnknown_082F7AF4[])(void) =
|
||||
};
|
||||
|
||||
// code
|
||||
void sub_802493C(u16 a0, void (*callback)(void))
|
||||
void StartDodrioBerryPicking(u16 a0, void (*callback)(void))
|
||||
{
|
||||
gUnknown_03000DB0 = FALSE;
|
||||
|
||||
@@ -832,9 +832,9 @@ static void sub_8025158(void)
|
||||
|
||||
static bool32 sub_8025170(void)
|
||||
{
|
||||
u8 r4 = GetBlockReceivedStatus();
|
||||
u8 r0 = sub_800A9D8();
|
||||
if (r4 == r0)
|
||||
u8 recvStatus = GetBlockReceivedStatus();
|
||||
u8 playerFlags = GetLinkPlayerCountAsBitFlags();
|
||||
if (recvStatus == playerFlags)
|
||||
{
|
||||
ResetBlockReceivedFlags();
|
||||
return TRUE;
|
||||
@@ -4483,12 +4483,12 @@ static void sub_802A380(void)
|
||||
case 2:
|
||||
if (!IsDma3ManagerBusyWithBgCopy())
|
||||
{
|
||||
CreateTask(sub_8153688, 0);
|
||||
CreateTask(Task_LinkSave, 0);
|
||||
gUnknown_02022CF8->state++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (!FuncIsActiveTask(sub_8153688))
|
||||
if (!FuncIsActiveTask(Task_LinkSave))
|
||||
gUnknown_02022CF8->state++;
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -85,10 +85,10 @@ static u8 sub_81D4DE8(struct Unk03006370 *arg0)
|
||||
return var0;
|
||||
}
|
||||
|
||||
static void sub_81D4E30(void)
|
||||
static void OpenEReaderLink(void)
|
||||
{
|
||||
memset(gDecompressionBuffer, 0, 0x2000);
|
||||
gLinkType = LINKTYPE_0x5503;
|
||||
gLinkType = LINKTYPE_EREADER;
|
||||
OpenLink();
|
||||
SetSuppressLinkErrorMessage(TRUE);
|
||||
}
|
||||
@@ -255,7 +255,7 @@ static void sub_81D5084(u8 taskId)
|
||||
data->unk8 = 1;
|
||||
break;
|
||||
case 1:
|
||||
sub_81D4E30();
|
||||
OpenEReaderLink();
|
||||
sub_81D505C(&data->unk0);
|
||||
data->unk8 = 2;
|
||||
break;
|
||||
@@ -285,7 +285,7 @@ static void sub_81D5084(u8 taskId)
|
||||
case 5:
|
||||
if (sub_81D5064(&data->unk0, 90))
|
||||
{
|
||||
sub_81D4E30();
|
||||
OpenEReaderLink();
|
||||
data->unk8 = 6;
|
||||
}
|
||||
else if (gMain.newKeys & B_BUTTON)
|
||||
@@ -319,7 +319,7 @@ static void sub_81D5084(u8 taskId)
|
||||
else if (sub_81D5064(&data->unk0, 10))
|
||||
{
|
||||
CloseLink();
|
||||
sub_81D4E30();
|
||||
OpenEReaderLink();
|
||||
sub_81D505C(&data->unk0);
|
||||
}
|
||||
break;
|
||||
@@ -360,7 +360,7 @@ static void sub_81D5084(u8 taskId)
|
||||
data->unk8 = 12;
|
||||
break;
|
||||
case 12:
|
||||
sub_81D4E30();
|
||||
OpenEReaderLink();
|
||||
AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard);
|
||||
data->unk8 = 13;
|
||||
break;
|
||||
|
||||
@@ -96,7 +96,7 @@ void ScriptUnfreezeObjectEvents(void)
|
||||
UnfreezeObjectEvents();
|
||||
}
|
||||
|
||||
void sub_8098524(void)
|
||||
void UnionRoom_UnlockPlayerAndChatPartner(void)
|
||||
{
|
||||
u8 playerObjectId;
|
||||
|
||||
|
||||
+66
-57
@@ -28,6 +28,7 @@
|
||||
#include "constants/items.h"
|
||||
#include "constants/mauville_old_man.h"
|
||||
#include "constants/trainer_types.h"
|
||||
#include "constants/union_room.h"
|
||||
|
||||
// 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_OnBeginStep(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 bool8 MovementType_Disguise_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 ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, 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};
|
||||
|
||||
@@ -1522,7 +1523,9 @@ u8 AddPseudoObjectEvent(u16 graphicsId, void (*callback)(struct Sprite *), s16 x
|
||||
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;
|
||||
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;
|
||||
|
||||
graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
|
||||
MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, UpdateObjectEventSpriteSubpriorityAndVisibility, &spriteTemplate, &subspriteTables);
|
||||
MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, UpdateObjectEventSprite, &spriteTemplate, &subspriteTables);
|
||||
*(u16 *)&spriteTemplate.paletteTag = 0xFFFF;
|
||||
x += 7;
|
||||
y += 7;
|
||||
sub_80930E0(&x, &y, 8, 16);
|
||||
SetSpritePosToOffsetMapCoords(&x, &y, 8, 16);
|
||||
spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -2363,7 +2366,8 @@ static u8 GetObjectTrainerTypeByObjectEventId(u8 objectEventId)
|
||||
return gObjectEvents[objectEventId].trainerType;
|
||||
}
|
||||
|
||||
u8 sub_808F0D4(u8 localId, u8 mapNum, u8 mapGroup)
|
||||
// Unused
|
||||
u8 GetObjectEventBerryTreeIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
|
||||
{
|
||||
u8 objectEventId;
|
||||
|
||||
@@ -2374,7 +2378,7 @@ u8 sub_808F0D4(u8 localId, u8 mapNum, u8 mapGroup)
|
||||
return gObjectEvents[objectEventId].trainerRange_berryTreeId;
|
||||
}
|
||||
|
||||
u8 ObjectEventGetBerryTreeId(u8 objectEventId)
|
||||
u8 GetObjectEventBerryTreeId(u8 objectEventId)
|
||||
{
|
||||
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 dy = -gTotalCameraPixelOffsetY - gFieldCamera.y;
|
||||
if (gFieldCamera.x > 0)
|
||||
dx += 1 << 4;
|
||||
dx += 16;
|
||||
|
||||
if (gFieldCamera.x < 0)
|
||||
dx -= 1 << 4;
|
||||
dx -= 16;
|
||||
|
||||
if (gFieldCamera.y > 0)
|
||||
dy += 1 << 4;
|
||||
dy += 16;
|
||||
|
||||
if (gFieldCamera.y < 0)
|
||||
dy -= 1 << 4;
|
||||
dy -= 16;
|
||||
|
||||
*destX = ((mapX - gSaveBlock1Ptr->pos.x) << 4) + dx;
|
||||
*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);
|
||||
*x += dx;
|
||||
@@ -8630,49 +8634,54 @@ void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible)
|
||||
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);
|
||||
UpdateObjectEventSpriteVisibility(sprite, sprite->data[2]);
|
||||
UpdateObjectEventSpriteVisibility(sprite, sprite->tInvisible);
|
||||
}
|
||||
|
||||
void sub_8097AF0(void)
|
||||
// Unused
|
||||
static void DestroyObjectEventSprites(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < MAX_SPRITES; i++)
|
||||
{
|
||||
struct Sprite *sprite = &gSprites[i];
|
||||
if(sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility)
|
||||
if(sprite->inUse && sprite->callback == UpdateObjectEventSprite)
|
||||
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;
|
||||
|
||||
for (i = 0; i < MAX_SPRITES; 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 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)
|
||||
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)
|
||||
{
|
||||
@@ -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)
|
||||
return;
|
||||
|
||||
if(var2)
|
||||
gSprites[spriteId].data[2] = 1;
|
||||
if (invisible)
|
||||
gSprites[spriteId].tInvisible = TRUE;
|
||||
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)
|
||||
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)
|
||||
{
|
||||
gSprites[spriteId].data[3] = var2;
|
||||
gSprites[spriteId].data[4] = 0;
|
||||
gSprites[spriteId].tAnimNum = animNum;
|
||||
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:
|
||||
sprite->pos2.y = 0;
|
||||
sprite->data[4]++;
|
||||
sprite->tAnimState++;
|
||||
case 1:
|
||||
sprite->pos2.y -= 8;
|
||||
if (sprite->pos2.y == -160)
|
||||
{
|
||||
sprite->pos2.y = 0;
|
||||
sprite->data[2] = 1;
|
||||
sprite->data[3] = 0;
|
||||
sprite->data[4] = 0;
|
||||
sprite->tInvisible = TRUE;
|
||||
sprite->tAnimNum = 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:
|
||||
sprite->pos2.y = -160;
|
||||
sprite->data[4]++;
|
||||
sprite->tAnimState++;
|
||||
case 1:
|
||||
sprite->pos2.y += 8;
|
||||
if(sprite->pos2.y == 0)
|
||||
{
|
||||
sprite->data[3] = 0;
|
||||
sprite->data[4] = 0;
|
||||
sprite->tAnimNum = 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:
|
||||
sub_8097D30(sprite);
|
||||
case UNION_ROOM_SPAWN_IN:
|
||||
MoveUnionRoomObjectDown(sprite);
|
||||
break;
|
||||
case 2:
|
||||
sub_8097CF4(sprite);
|
||||
case UNION_ROOM_SPAWN_OUT:
|
||||
MoveUnionRoomObjectUp(sprite);
|
||||
break;
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
sprite->data[3] = 0;
|
||||
sprite->tAnimNum = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool32 sub_8097D9C(u8 var)
|
||||
bool32 IsObjectEventSpriteAnimating(u8 var)
|
||||
{
|
||||
u8 spriteId = sub_8097B2C(var);
|
||||
u8 spriteId = GetObjectEventSpriteId(var);
|
||||
|
||||
if (spriteId == MAX_SPRITES)
|
||||
return FALSE;
|
||||
|
||||
if(gSprites[spriteId].data[3] != FALSE)
|
||||
if (gSprites[spriteId].tAnimNum != 0)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
|
||||
@@ -378,7 +378,7 @@ void sub_81D4A90(void)
|
||||
|
||||
x = mew->currentCoords.x;
|
||||
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);
|
||||
if (sUnknown_0203CF50 != MAX_SPRITES)
|
||||
{
|
||||
|
||||
+2
-2
@@ -2043,7 +2043,7 @@ static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task *task, struct ObjectEve
|
||||
u8 FldEff_LavaridgeGymWarp(void)
|
||||
{
|
||||
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]);
|
||||
gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
|
||||
gSprites[spriteId].coordOffsetEnabled = 1;
|
||||
@@ -2136,7 +2136,7 @@ static bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *o
|
||||
u8 FldEff_PopOutOfAsh(void)
|
||||
{
|
||||
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]);
|
||||
gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
|
||||
gSprites[spriteId].coordOffsetEnabled = 1;
|
||||
|
||||
+19
-19
@@ -274,7 +274,7 @@ u32 FldEff_TallGrass(void)
|
||||
|
||||
x = gFieldEffectArguments[0];
|
||||
y = gFieldEffectArguments[1];
|
||||
sub_80930E0(&x, &y, 8, 8);
|
||||
SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -340,7 +340,7 @@ u32 FldEff_JumpTallGrass(void)
|
||||
u8 spriteId;
|
||||
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);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -380,7 +380,7 @@ u32 FldEff_LongGrass(void)
|
||||
|
||||
x = gFieldEffectArguments[0];
|
||||
y = gFieldEffectArguments[1];
|
||||
sub_80930E0(&x, &y, 8, 8);
|
||||
SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -443,7 +443,7 @@ u32 FldEff_JumpLongGrass(void)
|
||||
u8 spriteId;
|
||||
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);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -521,7 +521,7 @@ u32 FldEff_SandFootprints(void)
|
||||
u8 spriteId;
|
||||
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]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -539,7 +539,7 @@ u32 FldEff_DeepSandFootprints(void)
|
||||
u8 spriteId;
|
||||
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]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -557,7 +557,7 @@ u32 FldEff_BikeTireTracks(void)
|
||||
u8 spriteId;
|
||||
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]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -649,7 +649,7 @@ u32 FldEff_JumpSmallSplash(void)
|
||||
u8 spriteId;
|
||||
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);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -667,7 +667,7 @@ u32 FldEff_JumpBigSplash(void)
|
||||
u8 spriteId;
|
||||
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);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -805,7 +805,7 @@ u32 FldEff_Unknown19(void)
|
||||
u8 spriteId;
|
||||
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]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -822,7 +822,7 @@ u32 FldEff_Unknown20(void)
|
||||
u8 spriteId;
|
||||
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]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -839,7 +839,7 @@ u32 FldEff_Unknown21(void)
|
||||
u8 spriteId;
|
||||
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]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -856,7 +856,7 @@ u32 FldEff_Unknown22(void)
|
||||
u8 spriteId;
|
||||
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]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -888,7 +888,7 @@ u32 FldEff_Ash(void)
|
||||
|
||||
x = gFieldEffectArguments[0];
|
||||
y = gFieldEffectArguments[1];
|
||||
sub_80930E0(&x, &y, 8, 8);
|
||||
SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[6], x, y, gFieldEffectArguments[2]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -944,7 +944,7 @@ u32 FldEff_SurfBlob(void)
|
||||
u8 spriteId;
|
||||
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);
|
||||
if (spriteId !=MAX_SPRITES)
|
||||
{
|
||||
@@ -1106,7 +1106,7 @@ u32 FldEff_Dust(void)
|
||||
u8 spriteId;
|
||||
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);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -1182,7 +1182,7 @@ u32 FldEff_Bubbles(void)
|
||||
u8 spriteId;
|
||||
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);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -1210,7 +1210,7 @@ u32 FldEff_BerryTreeGrowthSparkle(void)
|
||||
u8 spriteId;
|
||||
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]);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
@@ -1330,7 +1330,7 @@ u32 FldEff_Sparkle(void)
|
||||
|
||||
gFieldEffectArguments[0] += 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);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
|
||||
@@ -162,7 +162,7 @@ static void Task_ReturnToFieldCableLink(u8 taskId)
|
||||
switch (task->data[0])
|
||||
{
|
||||
case 0:
|
||||
task->data[1] = sub_80B3050();
|
||||
task->data[1] = CreateTask_ReestablishCableClubLink();
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
@@ -204,7 +204,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
|
||||
if (!IsLinkTaskFinished())
|
||||
{
|
||||
if (++task->data[1] > 1800)
|
||||
sub_8011170(0x6000);
|
||||
GetLinkmanErrorParams(0x6000);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -215,7 +215,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
|
||||
case 2:
|
||||
if (WaitForWeatherFadeIn() == TRUE)
|
||||
{
|
||||
sub_8009F18();
|
||||
StartSendingKeysToLink();
|
||||
ScriptContext2_Disable();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
@@ -240,7 +240,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
sub_8009F18();
|
||||
StartSendingKeysToLink();
|
||||
ResetAllMultiplayerState();
|
||||
ScriptContext2_Disable();
|
||||
DestroyTask(taskId);
|
||||
|
||||
+2
-2
@@ -924,11 +924,11 @@ void GetCameraCoords(u16 *x, u16 *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 (a2 != 0)
|
||||
if (impassable)
|
||||
gBackupMapLayout.map[x + gBackupMapLayout.width * y] |= METATILE_COLLISION_MASK;
|
||||
else
|
||||
gBackupMapLayout.map[x + gBackupMapLayout.width * y] &= ~METATILE_COLLISION_MASK;
|
||||
|
||||
+1
-1
@@ -1008,7 +1008,7 @@ void DoSecretBaseGlitterMatSparkle(void)
|
||||
s16 y = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y;
|
||||
u8 spriteId;
|
||||
|
||||
sub_80930E0(&x, &y, 8, 4);
|
||||
SetSpritePosToOffsetMapCoords(&x, &y, 8, 4);
|
||||
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], x, y, 0);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
|
||||
+9
-13
@@ -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_08DD47A0[] = INCBIN_U32("graphics/unknown/unknown_DD47A0.bin.lz");
|
||||
|
||||
// link
|
||||
|
||||
const u16 gLinkMiscMenu_Pal[] = INCBIN_U16("graphics/link/misc.gbapal");
|
||||
const u32 gLinkMiscMenu_Gfx[] = INCBIN_U32("graphics/link/misc.4bpp.lz");
|
||||
const u32 gLinkMiscMenu_Tilemap[] = INCBIN_U32("graphics/link/misc.bin.lz");
|
||||
|
||||
const u16 gUnknown_08DD4BB0[] = INCBIN_U16("graphics/link/link1.gbapal");
|
||||
const u16 gUnknown_08DD4BD0[] = INCBIN_U16("graphics/link/link2.gbapal");
|
||||
|
||||
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");
|
||||
// union room chat
|
||||
const u16 gUnionRoomChat_Background_Pal[] = INCBIN_U16("graphics/union_room_chat/background.gbapal");
|
||||
const u32 gUnionRoomChat_Background_Gfx[] = INCBIN_U32("graphics/union_room_chat/background.4bpp.lz");
|
||||
const u32 gUnionRoomChat_Background_Tilemap[] = INCBIN_U32("graphics/union_room_chat/background.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 u32 gUnionRoomChat_Border_Gfx[] = INCBIN_U32("graphics/union_room_chat/border.4bpp.lz");
|
||||
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 u16 gTilesetPalettes_General[][16] =
|
||||
{
|
||||
|
||||
+1
-1
@@ -2359,7 +2359,7 @@ void SetupBagMenu_Textboxes(void)
|
||||
DeactivateAllTextPrinters();
|
||||
LoadUserWindowBorderGfx(0, 1, 0xE0);
|
||||
LoadMessageBoxGfx(0, 10, 0xD0);
|
||||
sub_819A2BC(0xC0, 1);
|
||||
ListMenuLoadStdPalAt(0xC0, 1);
|
||||
LoadPalette(&gUnknown_0860F074, 0xF0, 0x20);
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
|
||||
+2
-2
@@ -488,7 +488,7 @@ static void rfu_CB_configGameData(u8 reqCommand, u16 reqResult)
|
||||
for (i = 0; i < RFU_GAME_NAME_LENGTH; ++i)
|
||||
gRfuLinkStatus->my.gname[i] = *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++;
|
||||
}
|
||||
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)
|
||||
target->gname[j] = *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++;
|
||||
++gRfuLinkStatus->findParentCount;
|
||||
}
|
||||
|
||||
+164
-164
@@ -1,5 +1,3 @@
|
||||
|
||||
// Includes
|
||||
#include "global.h"
|
||||
#include "m4a.h"
|
||||
#include "malloc.h"
|
||||
@@ -30,10 +28,6 @@
|
||||
#include "constants/rgb.h"
|
||||
#include "constants/trade.h"
|
||||
|
||||
extern u16 gHeldKeyCodeToSend;
|
||||
|
||||
// Static type declarations
|
||||
|
||||
struct BlockTransfer
|
||||
{
|
||||
u16 pos;
|
||||
@@ -51,15 +45,13 @@ struct LinkTestBGInfo
|
||||
u32 dummy_C;
|
||||
};
|
||||
|
||||
// Static RAM declarations
|
||||
|
||||
static struct BlockTransfer sBlockSend;
|
||||
static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS];
|
||||
static u32 sBlockSendDelayCounter;
|
||||
static u32 gUnknown_03000D54;
|
||||
static u8 gUnknown_03000D58;
|
||||
static bool32 sDummy1; // Never read
|
||||
static bool8 sDummy2; // Never assigned, read in unused function
|
||||
static u32 sPlayerDataExchangeStatus;
|
||||
static u32 gUnknown_03000D60;
|
||||
static bool32 sDummy3; // Never read
|
||||
static u8 sLinkTestLastBlockSendPos;
|
||||
static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS];
|
||||
static u8 sNumVBlanksWithoutSerialIntr;
|
||||
@@ -74,15 +66,15 @@ u32 gLinkDebugSeed;
|
||||
struct LinkPlayerBlock gLocalLinkPlayerBlock;
|
||||
bool8 gLinkErrorOccurred;
|
||||
u32 gLinkDebugFlags;
|
||||
u32 gFiller_03003074;
|
||||
u32 gLinkFiller1;
|
||||
bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS];
|
||||
u8 gBlockReceivedStatus[MAX_LINK_PLAYERS];
|
||||
u32 gFiller_03003080;
|
||||
u32 gLinkFiller2;
|
||||
u16 gLinkHeldKeys;
|
||||
u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
|
||||
u32 gLinkStatus;
|
||||
bool8 gUnknown_030030E4;
|
||||
bool8 gUnknown_030030E8;
|
||||
bool8 gLinkDummy1; // Never read
|
||||
bool8 gLinkDummy2; // Never read
|
||||
bool8 gUnknown_030030EC[MAX_LINK_PLAYERS];
|
||||
bool8 gUnknown_030030F0[MAX_LINK_PLAYERS];
|
||||
u16 gUnknown_030030F4;
|
||||
@@ -97,15 +89,13 @@ void (*gLinkCallback)(void);
|
||||
u8 gShouldAdvanceLinkState;
|
||||
u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS];
|
||||
u8 gBlockRequestType;
|
||||
u32 gFiller_03003154;
|
||||
u32 gFiller_03003158;
|
||||
u32 gFiller_0300315c;
|
||||
u32 gLinkFiller3;
|
||||
u32 gLinkFiller4;
|
||||
u32 gLinkFiller5;
|
||||
u8 gLastSendQueueCount;
|
||||
struct Link gLink;
|
||||
u8 gLastRecvQueueCount;
|
||||
u16 gLinkSavedIme;
|
||||
u32 gFiller_03004138;
|
||||
u32 gFiller_0300413C;
|
||||
|
||||
EWRAM_DATA u8 gLinkTestDebugValuesEnabled = 0;
|
||||
EWRAM_DATA u8 gUnknown_020223BD = 0;
|
||||
@@ -124,16 +114,16 @@ EWRAM_DATA struct {
|
||||
u8 lastSendQueueCount;
|
||||
u8 unk_06;
|
||||
} sLinkErrorBuffer = {};
|
||||
EWRAM_DATA u16 gUnknown_02022B08 = 0;
|
||||
EWRAM_DATA void *gUnknown_02022B0C = NULL;
|
||||
static EWRAM_DATA u16 sUnknown_02022B08 = 0;
|
||||
static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL;
|
||||
|
||||
// Static ROM declarations
|
||||
|
||||
static void InitLocalLinkPlayer(void);
|
||||
static void sub_80096BC(void);
|
||||
static void VBlankCB_LinkError(void);
|
||||
static void CB2_LinkTest(void);
|
||||
static void ProcessRecvCmds(u8 unused);
|
||||
static void sub_8009F70(void);
|
||||
static void LinkCB_SendHeldKeys(void);
|
||||
static void ResetBlockSend(void);
|
||||
static bool32 InitBlockSend(const void *src, size_t size);
|
||||
static void LinkCB_BlockSendBegin(void);
|
||||
@@ -155,7 +145,7 @@ static void sub_800AE5C(void);
|
||||
static void CheckErrorStatus(void);
|
||||
static void CB2_PrintErrorMessage(void);
|
||||
static bool8 IsSioMultiMaster(void);
|
||||
static void sub_800B4A4(void);
|
||||
static void SetWirelessCommType0_Internal(void);
|
||||
static void DisableSerial(void);
|
||||
static void EnableSerial(void);
|
||||
static void CheckMasterOrSlave(void);
|
||||
@@ -172,29 +162,29 @@ static void SendRecvDone(void);
|
||||
|
||||
// .rodata
|
||||
|
||||
ALIGNED(4) const u16 gWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal");
|
||||
const u32 gWirelessLinkDisplayGfx[] = INCBIN_U32("graphics/interface/wireless_link_display.4bpp.lz");
|
||||
const u32 gWirelessLinkDisplayTilemap[] = INCBIN_U32("graphics/interface/wireless_link_display.bin.lz");
|
||||
const u16 gLinkTestDigitsPal[] = INCBIN_U16("graphics/interface/link_test_digits.gbapal");
|
||||
const u16 gLinkTestDigitsGfx[] = INCBIN_U16("graphics/interface/link_test_digits.4bpp");
|
||||
const u8 unkstring_82ed160[] = _("{HIGHLIGHT TRANSPARENT}{COLOR WHITE}");
|
||||
const u16 g2BlankTilesGfx[] = INCBIN_U16("graphics/interface/blank_1x2.4bpp");
|
||||
const struct BlockRequest gUnknown_082ED1A8[] = {
|
||||
static const u16 sWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal");
|
||||
static const u32 sWirelessLinkDisplayGfx[] = INCBIN_U32("graphics/interface/wireless_link_display.4bpp.lz");
|
||||
static const u32 sWirelessLinkDisplayTilemap[] = INCBIN_U32("graphics/interface/wireless_link_display.bin.lz");
|
||||
static const u16 sLinkTestDigitsPal[] = INCBIN_U16("graphics/interface/link_test_digits.gbapal");
|
||||
static const u16 sLinkTestDigitsGfx[] = INCBIN_U16("graphics/interface/link_test_digits.4bpp");
|
||||
static const u8 sUnusedTransparentWhite[] = _("{HIGHLIGHT TRANSPARENT}{COLOR WHITE}");
|
||||
static const u16 s2BlankTilesGfx[] = INCBIN_U16("graphics/interface/blank_1x2.4bpp");
|
||||
static const struct BlockRequest sBlockRequests[] = {
|
||||
{gBlockSendBuffer, 200},
|
||||
{gBlockSendBuffer, 200},
|
||||
{gBlockSendBuffer, 100},
|
||||
{gBlockSendBuffer, 220},
|
||||
{gBlockSendBuffer, 40}
|
||||
};
|
||||
const u8 gBGControlRegs[] = {
|
||||
static const u8 sBGControlRegs[] = {
|
||||
REG_OFFSET_BG0CNT,
|
||||
REG_OFFSET_BG1CNT,
|
||||
REG_OFFSET_BG2CNT,
|
||||
REG_OFFSET_BG3CNT
|
||||
};
|
||||
const char gASCIIGameFreakInc[] = "GameFreak inc.";
|
||||
const char gASCIITestPrint[] = "TEST PRINT\nP0\nP1\nP2\nP3";
|
||||
const struct BgTemplate gUnknown_082ED1FC[] = {
|
||||
static const char sASCIIGameFreakInc[] = "GameFreak inc.";
|
||||
static const char sASCIITestPrint[] = "TEST PRINT\nP0\nP1\nP2\nP3";
|
||||
static const struct BgTemplate sLinkErrorBgTemplates[] = {
|
||||
{
|
||||
.bg = 0,
|
||||
.charBaseIndex = 2,
|
||||
@@ -207,29 +197,50 @@ const struct BgTemplate gUnknown_082ED1FC[] = {
|
||||
.priority = 1
|
||||
}
|
||||
};
|
||||
const struct WindowTemplate gUnknown_082ED204[] = {
|
||||
{0x00, 0x00, 0x00, 0x1E, 0x05, 0x0F, 0x0002},
|
||||
{0x00, 0x00, 0x06, 0x1E, 0x07, 0x0F, 0x0098},
|
||||
{0x00, 0x00, 0x0D, 0x1E, 0x07, 0x0F, 0x016A},
|
||||
DUMMY_WIN_TEMPLATE
|
||||
static const struct WindowTemplate sLinkErrorWindowTemplates[] = {
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 0,
|
||||
.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 sUnused_082ED224[] = {0x00, 0xff, 0xfe, 0xff, 0x00};
|
||||
static const u8 sUnused_082ED224[] = {0x00, 0xFF, 0xFE, 0xFF, 0x00};
|
||||
|
||||
// .text
|
||||
|
||||
bool8 IsWirelessAdapterConnected(void)
|
||||
{
|
||||
sub_800B488();
|
||||
sub_800E700();
|
||||
SetWirelessCommType1();
|
||||
InitRFUAPI();
|
||||
if (rfu_LMAN_REQBN_softReset_and_checkID() == 0x8001)
|
||||
{
|
||||
rfu_REQ_stopMode();
|
||||
rfu_waitREQComplete();
|
||||
return TRUE;
|
||||
}
|
||||
sub_800B4A4();
|
||||
SetWirelessCommType0_Internal();
|
||||
CloseLink();
|
||||
RestoreSerialTimer3IntrHandlers();
|
||||
return FALSE;
|
||||
@@ -242,8 +253,8 @@ void Task_DestroySelf(u8 taskId)
|
||||
|
||||
static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 a4)
|
||||
{
|
||||
LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20);
|
||||
DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof gLinkTestDigitsGfx);
|
||||
LoadPalette(sLinkTestDigitsPal, paletteNum * 16, 0x20);
|
||||
DmaCopy16(3, sLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof sLinkTestDigitsGfx);
|
||||
gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
|
||||
gLinkTestBGInfo.paletteNum = paletteNum;
|
||||
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)
|
||||
{
|
||||
LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20);
|
||||
DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof gLinkTestDigitsGfx);
|
||||
LoadPalette(sLinkTestDigitsPal, paletteNum * 16, 0x20);
|
||||
DmaCopy16(3, sLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof sLinkTestDigitsGfx);
|
||||
gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
|
||||
gLinkTestBGInfo.paletteNum = paletteNum;
|
||||
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)
|
||||
@@ -280,9 +291,9 @@ void LinkTestScreen(void)
|
||||
ResetSpriteData();
|
||||
FreeAllSpritePalettes();
|
||||
ResetTasks();
|
||||
SetVBlankCallback(sub_80096BC);
|
||||
SetVBlankCallback(VBlankCB_LinkError);
|
||||
ResetBlockSend();
|
||||
gLinkType = LINKTYPE_0x1111;
|
||||
gLinkType = LINKTYPE_TRADE;
|
||||
OpenLink();
|
||||
SeedRng(gMain.vblankCounter2);
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
@@ -296,7 +307,7 @@ void LinkTestScreen(void)
|
||||
AnimateSprites();
|
||||
BuildOamBuffer();
|
||||
UpdatePaletteFade();
|
||||
gUnknown_03000D60 = 0;
|
||||
sDummy3 = FALSE;
|
||||
InitLocalLinkPlayer();
|
||||
CreateTask(Task_PrintTestData, 0);
|
||||
SetMainCallback2(CB2_LinkTest);
|
||||
@@ -323,7 +334,7 @@ static void InitLocalLinkPlayer(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80096BC(void)
|
||||
static void VBlankCB_LinkError(void)
|
||||
{
|
||||
LoadOam();
|
||||
ProcessSpriteCopyRequests();
|
||||
@@ -334,9 +345,9 @@ static void InitLink(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < CMD_LENGTH; i++)
|
||||
{
|
||||
gSendCmd[i] = 0xefff;
|
||||
gSendCmd[i] = 0xEfff;
|
||||
}
|
||||
gLinkOpen = TRUE;
|
||||
EnableSerial();
|
||||
@@ -365,15 +376,15 @@ void OpenLink(void)
|
||||
gSuppressLinkErrorMessage = FALSE;
|
||||
ResetBlockReceivedFlags();
|
||||
ResetBlockSend();
|
||||
gUnknown_03000D54 = 0;
|
||||
gUnknown_030030E8 = FALSE;
|
||||
gUnknown_030030E4 = FALSE;
|
||||
sDummy1 = FALSE;
|
||||
gLinkDummy2 = FALSE;
|
||||
gLinkDummy1 = FALSE;
|
||||
gUnknown_030030F4 = 0;
|
||||
CreateTask(Task_TriggerHandshake, 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800E700();
|
||||
InitRFUAPI();
|
||||
}
|
||||
gReceivedRemoteLinkPlayers = 0;
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
@@ -389,7 +400,7 @@ void CloseLink(void)
|
||||
gReceivedRemoteLinkPlayers = FALSE;
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
sub_800EDD4();
|
||||
LinkRfu_Shutdown();
|
||||
}
|
||||
gLinkOpen = FALSE;
|
||||
DisableSerial();
|
||||
@@ -482,7 +493,7 @@ u16 LinkMain2(const u16 *heldKeys)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < CMD_LENGTH; i++)
|
||||
{
|
||||
gSendCmd[i] = 0;
|
||||
}
|
||||
@@ -536,8 +547,8 @@ static void ProcessRecvCmds(u8 unused)
|
||||
InitLocalLinkPlayer();
|
||||
block = &gLocalLinkPlayerBlock;
|
||||
block->linkPlayer = gLocalLinkPlayer;
|
||||
memcpy(block->magic1, gASCIIGameFreakInc, sizeof(block->magic1) - 1);
|
||||
memcpy(block->magic2, gASCIIGameFreakInc, sizeof(block->magic2) - 1);
|
||||
memcpy(block->magic1, sASCIIGameFreakInc, sizeof(block->magic1) - 1);
|
||||
memcpy(block->magic2, sASCIIGameFreakInc, sizeof(block->magic2) - 1);
|
||||
InitBlockSend(block, sizeof(*block));
|
||||
break;
|
||||
}
|
||||
@@ -545,10 +556,10 @@ static void ProcessRecvCmds(u8 unused)
|
||||
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
|
||||
break;
|
||||
case LINKCMD_0x5555:
|
||||
gUnknown_030030E8 = TRUE;
|
||||
gLinkDummy2 = TRUE;
|
||||
break;
|
||||
case LINKCMD_0x5566:
|
||||
gUnknown_030030E8 = TRUE;
|
||||
gLinkDummy2 = TRUE;
|
||||
break;
|
||||
case LINKCMD_INIT_BLOCK:
|
||||
{
|
||||
@@ -602,8 +613,8 @@ static void ProcessRecvCmds(u8 unused)
|
||||
linkPlayer->progressFlags = 0;
|
||||
}
|
||||
sub_800B524(linkPlayer);
|
||||
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);
|
||||
}
|
||||
@@ -629,7 +640,7 @@ static void ProcessRecvCmds(u8 unused)
|
||||
sub_800A418();
|
||||
break;
|
||||
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;
|
||||
case LINKCMD_SEND_HELD_KEYS_2:
|
||||
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
|
||||
@@ -705,70 +716,56 @@ static void BuildSendCmd(u16 command)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8009F18(void)
|
||||
void StartSendingKeysToLink(void)
|
||||
{
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
sub_800F804();
|
||||
}
|
||||
gLinkCallback = sub_8009F70;
|
||||
StartSendingKeysToRfu();
|
||||
|
||||
gLinkCallback = LinkCB_SendHeldKeys;
|
||||
}
|
||||
|
||||
bool32 IsSendingKeysToLink(void)
|
||||
{
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
return IsSendingKeysToRfu();
|
||||
}
|
||||
if (gLinkCallback == sub_8009F70)
|
||||
{
|
||||
|
||||
if (gLinkCallback == LinkCB_SendHeldKeys)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_8009F70(void)
|
||||
static void LinkCB_SendHeldKeys(void)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers == TRUE)
|
||||
{
|
||||
BuildSendCmd(LINKCMD_SEND_HELD_KEYS_2);
|
||||
}
|
||||
}
|
||||
|
||||
void ClearLinkCallback(void)
|
||||
{
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
ClearLinkRfuCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
gLinkCallback = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void ClearLinkCallback_2(void)
|
||||
{
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
ClearLinkRfuCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
gLinkCallback = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
u8 GetLinkPlayerCount(void)
|
||||
{
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
return sub_80104F4();
|
||||
}
|
||||
return Rfu_GetLinkPlayerCount();
|
||||
|
||||
return EXTRACT_PLAYER_COUNT(gLinkStatus);
|
||||
}
|
||||
|
||||
static int sub_8009FF8(u32 version1, u32 version2)
|
||||
static int AreAnyLinkPlayersUsingVersions(u32 version1, u32 version2)
|
||||
{
|
||||
int i;
|
||||
u8 nPlayers;
|
||||
@@ -776,22 +773,22 @@ static int sub_8009FF8(u32 version1, u32 version2)
|
||||
nPlayers = GetLinkPlayerCount();
|
||||
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;
|
||||
}
|
||||
|
||||
u32 sub_800A03C(void)
|
||||
u32 LinkDummy_Return2(void)
|
||||
{
|
||||
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;
|
||||
}
|
||||
@@ -800,18 +797,18 @@ bool32 sub_800A040(void)
|
||||
|
||||
bool32 Link_AnyPartnersPlayingRubyOrSapphire(void)
|
||||
{
|
||||
if (sub_8009FF8(VERSION_RUBY, VERSION_SAPPHIRE) >= 0)
|
||||
if (AreAnyLinkPlayersUsingVersions(VERSION_RUBY, VERSION_SAPPHIRE) >= 0)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool32 sub_800A07C(void)
|
||||
bool32 Link_AnyPartnersPlayingFRLG_JP(void)
|
||||
{
|
||||
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)
|
||||
{
|
||||
return TRUE;
|
||||
@@ -826,23 +823,23 @@ void OpenLinkTimed(void)
|
||||
OpenLink();
|
||||
}
|
||||
|
||||
u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
|
||||
u8 GetLinkPlayerDataExchangeStatusTimed(int minPlayers, int maxPlayers)
|
||||
{
|
||||
int i;
|
||||
int count;
|
||||
u32 index;
|
||||
u8 cmpVal;
|
||||
u8 numPlayers;
|
||||
u32 linkType1;
|
||||
u32 linkType2;
|
||||
|
||||
count = 0;
|
||||
if (gReceivedRemoteLinkPlayers == TRUE)
|
||||
{
|
||||
cmpVal = GetLinkPlayerCount_2();
|
||||
if (lower > cmpVal || cmpVal > upper)
|
||||
numPlayers = GetLinkPlayerCount_2();
|
||||
if (minPlayers > numPlayers || numPlayers > maxPlayers)
|
||||
{
|
||||
sPlayerDataExchangeStatus = EXCHANGE_STAT_6;
|
||||
return 6;
|
||||
sPlayerDataExchangeStatus = EXCHANGE_WRONG_NUM_PLAYERS;
|
||||
return sPlayerDataExchangeStatus;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -860,7 +857,7 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
|
||||
}
|
||||
if (count == GetLinkPlayerCount())
|
||||
{
|
||||
if (gLinkPlayers[0].linkType == 0x1133)
|
||||
if (gLinkPlayers[0].linkType == LINKTYPE_TRADE_SETUP)
|
||||
{
|
||||
switch (GetGameProgressForLinkTrade())
|
||||
{
|
||||
@@ -882,11 +879,14 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
|
||||
}
|
||||
else
|
||||
{
|
||||
sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS;
|
||||
sPlayerDataExchangeStatus = EXCHANGE_DIFF_SELECTIONS;
|
||||
linkType1 = gLinkPlayers[GetMultiplayerId()].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;
|
||||
}
|
||||
}
|
||||
@@ -921,7 +921,7 @@ bool8 IsLinkPlayerDataExchangeComplete(void)
|
||||
else
|
||||
{
|
||||
retval = FALSE;
|
||||
sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS;
|
||||
sPlayerDataExchangeStatus = EXCHANGE_DIFF_SELECTIONS;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
@@ -959,7 +959,7 @@ static bool32 InitBlockSend(const void *src, size_t size)
|
||||
sBlockSend.active = TRUE;
|
||||
sBlockSend.size = size;
|
||||
sBlockSend.pos = 0;
|
||||
if (size > 0x100)
|
||||
if (size > BLOCK_BUFFER_SIZE)
|
||||
{
|
||||
sBlockSend.src = src;
|
||||
}
|
||||
@@ -992,7 +992,7 @@ static void LinkCB_BlockSend(void)
|
||||
|
||||
src = sBlockSend.src;
|
||||
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];
|
||||
}
|
||||
@@ -1043,7 +1043,7 @@ u8 GetMultiplayerId(void)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
return rfu_get_multiplayer_id();
|
||||
return Rfu_GetMultiplayerId();
|
||||
}
|
||||
return SIO_MULTI_CNT->id;
|
||||
}
|
||||
@@ -1060,7 +1060,7 @@ bool8 SendBlock(u8 unused, const void *src, u16 size)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
return sub_800FE84(src, size);
|
||||
return Rfu_InitBlockSend(src, size);
|
||||
}
|
||||
return InitBlockSend(src, size);
|
||||
}
|
||||
@@ -1093,7 +1093,7 @@ u8 GetBlockReceivedStatus(void)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
return sub_800FCD8();
|
||||
return Rfu_GetBlockReceivedStatus();
|
||||
}
|
||||
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)
|
||||
{
|
||||
sub_800F6FC(who);
|
||||
Rfu_SetBlockReceivedFlag(who);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1118,7 +1118,7 @@ void ResetBlockReceivedFlags(void)
|
||||
{
|
||||
for (i = 0; i < MAX_RFU_PLAYERS; i++)
|
||||
{
|
||||
sub_800F728(i);
|
||||
Rfu_ResetBlockReceivedFlag(i);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1134,7 +1134,7 @@ void ResetBlockReceivedFlag(u8 who)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
sub_800F728(who);
|
||||
Rfu_ResetBlockReceivedFlag(who);
|
||||
}
|
||||
else if (gBlockReceivedStatus[who])
|
||||
{
|
||||
@@ -1261,7 +1261,7 @@ static void Task_PrintTestData(u8 taskId)
|
||||
char sp[32];
|
||||
int i;
|
||||
|
||||
strcpy(sp, gASCIITestPrint);
|
||||
strcpy(sp, sASCIITestPrint);
|
||||
LinkTest_prntstr(sp, 5, 2);
|
||||
LinkTest_prnthex(gShouldAdvanceLinkState, 2, 1, 2);
|
||||
LinkTest_prnthex(gLinkStatus, 15, 1, 8);
|
||||
@@ -1289,7 +1289,7 @@ void SetLinkDebugValues(u32 seed, u32 flags)
|
||||
gLinkDebugFlags = flags;
|
||||
}
|
||||
|
||||
u8 sub_800A9A8(void)
|
||||
u8 GetSavedLinkPlayerCountAsBitFlags(void)
|
||||
{
|
||||
int i;
|
||||
u8 flags;
|
||||
@@ -1302,7 +1302,7 @@ u8 sub_800A9A8(void)
|
||||
return flags;
|
||||
}
|
||||
|
||||
u8 sub_800A9D8(void)
|
||||
u8 GetLinkPlayerCountAsBitFlags(void)
|
||||
{
|
||||
int i;
|
||||
u8 flags;
|
||||
@@ -1315,11 +1315,11 @@ u8 sub_800A9D8(void)
|
||||
return flags;
|
||||
}
|
||||
|
||||
void sub_800AA04(u8 a0)
|
||||
void SaveLinkPlayers(u8 playerCount)
|
||||
{
|
||||
int i;
|
||||
|
||||
gSavedLinkPlayerCount = a0;
|
||||
gSavedLinkPlayerCount = playerCount;
|
||||
gSavedMultiplayerId = GetMultiplayerId();
|
||||
for (i = 0; i < MAX_RFU_PLAYERS; i++)
|
||||
{
|
||||
@@ -1334,17 +1334,17 @@ u8 GetSavedPlayerCount(void)
|
||||
return gSavedLinkPlayerCount;
|
||||
}
|
||||
|
||||
u8 sub_800AA54(void)
|
||||
// Unused
|
||||
static u8 GetSavedMultiplayerId(void)
|
||||
{
|
||||
return gSavedMultiplayerId;
|
||||
}
|
||||
|
||||
bool8 sub_800AA60(void)
|
||||
bool8 DoesLinkPlayerCountMatchSaved(void)
|
||||
{
|
||||
int i;
|
||||
unsigned count;
|
||||
u32 count = 0;
|
||||
|
||||
count = 0;
|
||||
for (i = 0; i < gSavedLinkPlayerCount; i++)
|
||||
{
|
||||
if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId)
|
||||
@@ -1352,10 +1352,8 @@ bool8 sub_800AA60(void)
|
||||
if (gLinkType == LINKTYPE_BATTLE_TOWER)
|
||||
{
|
||||
if (gLinkType == gLinkPlayers[i].linkType)
|
||||
{
|
||||
count++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
count++;
|
||||
@@ -1372,7 +1370,7 @@ bool8 sub_800AA60(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_800AAF4(void)
|
||||
void ClearSavedLinkPlayers(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -1383,13 +1381,14 @@ void sub_800AAF4(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800AB18(void)
|
||||
void CheckLinkPlayersMatchSaved(void)
|
||||
{
|
||||
u8 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;
|
||||
CloseLink();
|
||||
@@ -1418,9 +1417,10 @@ bool8 IsLinkMaster(void)
|
||||
return EXTRACT_MASTER(gLinkStatus);
|
||||
}
|
||||
|
||||
u8 sub_800ABE8(void)
|
||||
// Unused
|
||||
static u8 GetDummy2(void)
|
||||
{
|
||||
return gUnknown_03000D58;
|
||||
return sDummy2;
|
||||
}
|
||||
|
||||
void sub_800ABF4(u16 a0)
|
||||
@@ -1434,7 +1434,7 @@ void sub_800ABF4(u16 a0)
|
||||
if (gLinkCallback == NULL)
|
||||
{
|
||||
gLinkCallback = sub_800AC80;
|
||||
gUnknown_030030E4 = FALSE;
|
||||
gLinkDummy1 = FALSE;
|
||||
gUnknown_030030F4 = a0;
|
||||
}
|
||||
}
|
||||
@@ -1450,12 +1450,12 @@ void sub_800AC34(void)
|
||||
{
|
||||
if (gLinkCallback != NULL)
|
||||
{
|
||||
gUnknown_02022B08++;
|
||||
sUnknown_02022B08++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gLinkCallback = sub_800AC80;
|
||||
gUnknown_030030E4 = FALSE;
|
||||
gLinkDummy1 = FALSE;
|
||||
gUnknown_030030F4 = 0;
|
||||
}
|
||||
}
|
||||
@@ -1491,7 +1491,7 @@ static void sub_800ACAC(void)
|
||||
gLinkVSyncDisabled = TRUE;
|
||||
CloseLink();
|
||||
gLinkCallback = NULL;
|
||||
gUnknown_030030E4 = TRUE;
|
||||
gLinkDummy1 = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1505,12 +1505,12 @@ void sub_800AD10(void)
|
||||
{
|
||||
if (gLinkCallback != NULL)
|
||||
{
|
||||
gUnknown_02022B08++;
|
||||
sUnknown_02022B08++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gLinkCallback = sub_800AD5C;
|
||||
gUnknown_030030E4 = FALSE;
|
||||
gLinkDummy1 = FALSE;
|
||||
gUnknown_030030F4 = 0;
|
||||
}
|
||||
}
|
||||
@@ -1550,7 +1550,7 @@ static void sub_800AD88(void)
|
||||
gLinkVSyncDisabled = TRUE;
|
||||
CloseLink();
|
||||
gLinkCallback = NULL;
|
||||
gUnknown_030030E4 = TRUE;
|
||||
gLinkDummy1 = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1566,7 +1566,7 @@ void sub_800ADF8(void)
|
||||
{
|
||||
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.lastSendQueueCount = lastSendQueueCount;
|
||||
@@ -1647,14 +1647,14 @@ void CB2_LinkError(void)
|
||||
{
|
||||
gWirelessCommType = 3;
|
||||
}
|
||||
sub_800E604();
|
||||
ResetLinkRfuGFLayer();
|
||||
}
|
||||
SetVBlankCallback(sub_80096BC);
|
||||
SetVBlankCallback(VBlankCB_LinkError);
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
InitBgsFromTemplates(0, gUnknown_082ED1FC, 2);
|
||||
gUnknown_02022B0C = tilemapBuffer = malloc(0x800);
|
||||
InitBgsFromTemplates(0, sLinkErrorBgTemplates, ARRAY_COUNT(sLinkErrorBgTemplates));
|
||||
sLinkErrorBgTilemapBuffer = tilemapBuffer = malloc(0x800);
|
||||
SetBgTilemapBuffer(1, tilemapBuffer);
|
||||
if (InitWindows(gUnknown_082ED204))
|
||||
if (InitWindows(sLinkErrorWindowTemplates))
|
||||
{
|
||||
DeactivateAllTextPrinters();
|
||||
ResetTempTileDataBuffers();
|
||||
@@ -1680,11 +1680,11 @@ void CB2_LinkError(void)
|
||||
|
||||
static void sub_800B080(void)
|
||||
{
|
||||
LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0);
|
||||
DecompressAndLoadBgGfxUsingHeap(1, gWirelessLinkDisplayGfx, FALSE, 0, 0);
|
||||
CopyToBgTilemapBuffer(1, gWirelessLinkDisplayTilemap, 0, 0);
|
||||
LoadBgTiles(0, s2BlankTilesGfx, 0x20, 0);
|
||||
DecompressAndLoadBgGfxUsingHeap(1, sWirelessLinkDisplayGfx, FALSE, 0, 0);
|
||||
CopyToBgTilemapBuffer(1, sWirelessLinkDisplayTilemap, 0, 0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
LoadPalette(gWirelessLinkDisplayPal, 0, 0x20);
|
||||
LoadPalette(sWirelessLinkDisplayPal, 0, 0x20);
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(0));
|
||||
FillWindowPixelBuffer(2, PIXEL_FILL(0));
|
||||
AddTextPrinterParameterized3(0, 3, 2, 6, sTextColors, 0, gText_CommErrorEllipsis);
|
||||
@@ -1697,7 +1697,7 @@ static void sub_800B080(void)
|
||||
|
||||
static void sub_800B138(void)
|
||||
{
|
||||
LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0);
|
||||
LoadBgTiles(0, s2BlankTilesGfx, 0x20, 0);
|
||||
FillWindowPixelBuffer(1, PIXEL_FILL(0));
|
||||
FillWindowPixelBuffer(2, PIXEL_FILL(0));
|
||||
AddTextPrinterParameterized3(1, 3, 2, 0, sTextColors, 0, gText_CommErrorCheckConnections);
|
||||
@@ -1810,12 +1810,12 @@ void sub_800B348(void)
|
||||
InitLocalLinkPlayer();
|
||||
block = &gLocalLinkPlayerBlock;
|
||||
block->linkPlayer = gLocalLinkPlayer;
|
||||
memcpy(block->magic1, gASCIIGameFreakInc, sizeof(block->magic1) - 1);
|
||||
memcpy(block->magic2, gASCIIGameFreakInc, sizeof(block->magic2) - 1);
|
||||
memcpy(block->magic1, sASCIIGameFreakInc, sizeof(block->magic1) - 1);
|
||||
memcpy(block->magic2, sASCIIGameFreakInc, sizeof(block->magic2) - 1);
|
||||
memcpy(gBlockSendBuffer, block, sizeof(*block));
|
||||
}
|
||||
|
||||
void sub_800B3A4(u32 who)
|
||||
void LinkPlayerFromBlock(u32 who)
|
||||
{
|
||||
u8 who_ = who;
|
||||
struct LinkPlayerBlock *block;
|
||||
@@ -1825,7 +1825,7 @@ void sub_800B3A4(u32 who)
|
||||
player = &gLinkPlayers[who_];
|
||||
*player = block->linkPlayer;
|
||||
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);
|
||||
}
|
||||
@@ -1860,7 +1860,7 @@ bool8 HandleLinkConnection(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_800B488(void)
|
||||
void SetWirelessCommType1(void)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers == 0)
|
||||
{
|
||||
@@ -1868,7 +1868,7 @@ void sub_800B488(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800B4A4(void)
|
||||
static void SetWirelessCommType0_Internal(void)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers == 0)
|
||||
{
|
||||
@@ -1876,7 +1876,7 @@ static void sub_800B4A4(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800B4C0(void)
|
||||
void SetWirelessCommType0(void)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers == 0)
|
||||
{
|
||||
|
||||
+987
-901
File diff suppressed because it is too large.
Load diff
+445
-309
File diff suppressed because it is too large.
Load diff
+2
-2
@@ -113,7 +113,7 @@ void AgbMain()
|
||||
InitIntrHandlers();
|
||||
m4aSoundInit();
|
||||
EnableVCountIntrAtLine150();
|
||||
sub_800E6D0();
|
||||
InitRFU();
|
||||
RtcInit();
|
||||
CheckForFlashMemory();
|
||||
InitMainCallbacks();
|
||||
@@ -367,7 +367,7 @@ static void VBlankIntr(void)
|
||||
if (!gMain.inBattle || !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_RECORDED)))
|
||||
Random();
|
||||
|
||||
sub_800E174();
|
||||
UpdateWirelessStatusIndicatorSprite();
|
||||
|
||||
INTR_CHECK |= INTR_FLAG_VBLANK;
|
||||
gMain.intrCheck |= INTR_FLAG_VBLANK;
|
||||
|
||||
+1
-1
@@ -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);
|
||||
}
|
||||
|
||||
void sub_819A2BC(u8 palOffset, u8 palId)
|
||||
void ListMenuLoadStdPalAt(u8 palOffset, u8 palId)
|
||||
{
|
||||
const u16 *palette;
|
||||
|
||||
|
||||
+3
-3
@@ -548,12 +548,12 @@ u16 mevent_081445C0(u32 command)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_801B940(void)
|
||||
void ResetReceivedWonderCardFlag(void)
|
||||
{
|
||||
gUnknown_02022C70 = FALSE;
|
||||
}
|
||||
|
||||
bool32 sub_801B94C(u16 a0)
|
||||
bool32 MEventHandleReceivedWonderCard(u16 a0)
|
||||
{
|
||||
gUnknown_02022C70 = FALSE;
|
||||
if (a0 == 0)
|
||||
@@ -569,7 +569,7 @@ bool32 sub_801B94C(u16 a0)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_801B990(u32 a0, u32 a1)
|
||||
void RecordIdOfWonderCardSenderByEventType(u32 a0, u32 a1)
|
||||
{
|
||||
if (gUnknown_02022C70)
|
||||
{
|
||||
|
||||
@@ -152,7 +152,7 @@ static void CB2_MysteryEventMenu(void)
|
||||
if (!IsTextPrinterActive(0))
|
||||
{
|
||||
gMain.state++;
|
||||
gLinkType = LINKTYPE_0x5501;
|
||||
gLinkType = LINKTYPE_MYSTERY_EVENT;
|
||||
OpenLink();
|
||||
}
|
||||
break;
|
||||
@@ -206,7 +206,7 @@ static void CB2_MysteryEventMenu(void)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers != 0)
|
||||
{
|
||||
if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == 3)
|
||||
if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == EXCHANGE_DIFF_SELECTIONS)
|
||||
{
|
||||
sub_800AC34();
|
||||
GetEventLoadMessage(gStringVar4, 1);
|
||||
|
||||
+9
-8
@@ -30,6 +30,7 @@
|
||||
#include "link_rfu.h"
|
||||
#include "mevent_news.h"
|
||||
#include "mevent_server.h"
|
||||
#include "constants/cable_club.h"
|
||||
|
||||
void bgid_upload_textbox_1(u8 bgId);
|
||||
void task_add_00_mystery_gift(void);
|
||||
@@ -1242,21 +1243,21 @@ void task00_mystery_gift(u8 taskId)
|
||||
case 0:
|
||||
if (data->source == 1)
|
||||
{
|
||||
MEvent_CreateTask_CardOrNewsWithFriend(0x15);
|
||||
MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WONDER_CARD2);
|
||||
}
|
||||
else if (data->source == 0)
|
||||
{
|
||||
MEvent_CreateTask_CardOrNewsOverWireless(0x15);
|
||||
MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WONDER_CARD2);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (data->source == 1)
|
||||
{
|
||||
MEvent_CreateTask_CardOrNewsWithFriend(0x16);
|
||||
MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WONDER_NEWS2);
|
||||
}
|
||||
else if (data->source == 0)
|
||||
{
|
||||
MEvent_CreateTask_CardOrNewsOverWireless(0x16);
|
||||
MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WONDER_NEWS2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1269,7 +1270,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
data->state = 7;
|
||||
mevent_client_do_init(data->IsCardOrNews);
|
||||
}
|
||||
else if (gSpecialVar_Result == 5)
|
||||
else if (gSpecialVar_Result == LINKUP_FAILED)
|
||||
{
|
||||
ClearScreenInBg0(TRUE);
|
||||
data->state = 3;
|
||||
@@ -1599,10 +1600,10 @@ void task00_mystery_gift(u8 taskId)
|
||||
switch (data->IsCardOrNews)
|
||||
{
|
||||
case 0:
|
||||
MEvent_CreateTask_Leader(21);
|
||||
MEvent_CreateTask_Leader(ACTIVITY_WONDER_CARD2);
|
||||
break;
|
||||
case 1:
|
||||
MEvent_CreateTask_Leader(22);
|
||||
MEvent_CreateTask_Leader(ACTIVITY_WONDER_NEWS2);
|
||||
break;
|
||||
}
|
||||
data->source = 1;
|
||||
@@ -1615,7 +1616,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
ClearScreenInBg0(1);
|
||||
data->state = 31;
|
||||
}
|
||||
else if (gSpecialVar_Result == 5)
|
||||
else if (gSpecialVar_Result == LINKUP_FAILED)
|
||||
{
|
||||
ClearScreenInBg0(1);
|
||||
data->state = 18;
|
||||
|
||||
+1
-1
@@ -197,7 +197,7 @@ void NewGameInitData(void)
|
||||
WarpToTruck();
|
||||
ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags);
|
||||
ResetMiniGamesResults();
|
||||
copy_strings_to_sav1();
|
||||
InitUnionRoomChatRegisteredTexts();
|
||||
InitLilycoveLady();
|
||||
ResetAllApprenticeData();
|
||||
ClearRankingHallRecords();
|
||||
|
||||
+1
-1
@@ -2913,7 +2913,7 @@ bool32 sub_808766C(void)
|
||||
static u32 GetLinkSendQueueLength(void)
|
||||
{
|
||||
if (gWirelessCommType != 0)
|
||||
return Rfu.unk_9e8.unk_232;
|
||||
return Rfu.sendQueue.count;
|
||||
else
|
||||
return gLink.sendQueue.count;
|
||||
}
|
||||
|
||||
+2
-2
@@ -3527,7 +3527,7 @@ static void CursorCb_Register(u8 taskId)
|
||||
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
|
||||
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:
|
||||
StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
|
||||
@@ -3553,7 +3553,7 @@ static void CursorCb_Trade1(u8 taskId)
|
||||
u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
|
||||
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
|
||||
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)
|
||||
{
|
||||
|
||||
+2
-2
@@ -2725,7 +2725,7 @@ void SetDeoxysStats(void)
|
||||
}
|
||||
}
|
||||
|
||||
u16 sub_8068B48(void)
|
||||
u16 GetUnionRoomTrainerPic(void)
|
||||
{
|
||||
u8 linkId;
|
||||
u32 arrId;
|
||||
@@ -2740,7 +2740,7 @@ u16 sub_8068B48(void)
|
||||
return FacilityClassToPicIndex(gLinkPlayerFacilityClasses[arrId]);
|
||||
}
|
||||
|
||||
u16 sub_8068BB0(void)
|
||||
u16 GetUnionRoomTrainerClass(void)
|
||||
{
|
||||
u8 linkId;
|
||||
u32 arrId;
|
||||
|
||||
+8
-8
@@ -216,7 +216,7 @@ static bool32 sub_802C618(void);
|
||||
static bool32 sub_802C650(void);
|
||||
static void sub_802C688(int);
|
||||
static int sub_802C6B0(void);
|
||||
static bool32 sub_802C70C(void);
|
||||
static bool32 AreLinkQueuesEmpty(void);
|
||||
static int sub_802C73C(u8 *);
|
||||
static void sub_802C780(void);
|
||||
static int sub_802C790(int);
|
||||
@@ -400,7 +400,7 @@ static const struct PokemonJumpMons gPkmnJumpSpecies[] =
|
||||
{ .species = SPECIES_BAGON, .unk2 = 1, },
|
||||
};
|
||||
|
||||
void sub_802A9A8(u16 partyIndex, MainCallback callback)
|
||||
void StartPokemonJump(u16 partyIndex, MainCallback callback)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
@@ -876,7 +876,7 @@ static bool32 sub_802B31C(void)
|
||||
gUnknown_02022CFC->unk8++;
|
||||
// fall through
|
||||
case 1:
|
||||
if (sub_802C70C())
|
||||
if (AreLinkQueuesEmpty())
|
||||
return FALSE;
|
||||
break;
|
||||
}
|
||||
@@ -1146,14 +1146,14 @@ static bool32 sub_802B720(void)
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (sub_802C70C())
|
||||
if (AreLinkQueuesEmpty())
|
||||
{
|
||||
CreateTask(sub_8153688, 6);
|
||||
CreateTask(Task_LinkSave, 6);
|
||||
gUnknown_02022CFC->unk8++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (!FuncIsActiveTask(sub_8153688))
|
||||
if (!FuncIsActiveTask(Task_LinkSave))
|
||||
{
|
||||
sub_802DA14();
|
||||
gUnknown_02022CFC->unk8++;
|
||||
@@ -2025,9 +2025,9 @@ static int sub_802C6B0(void)
|
||||
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)
|
||||
|
||||
+7
-8
@@ -169,10 +169,9 @@ static const u8 gUnknown_0858CFBE[3][4] =
|
||||
|
||||
#define BUFFER_CHUNK_SIZE 200
|
||||
|
||||
// Note: VAR_0x8005 contains the spotId.
|
||||
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
|
||||
@@ -232,7 +231,7 @@ static void PrepareExchangePacket(void)
|
||||
|
||||
if (Link_AnyPartnersPlayingRubyOrSapphire())
|
||||
{
|
||||
if (sub_800A03C() == 0)
|
||||
if (LinkDummy_Return2() == 0)
|
||||
PrepareUnknownExchangePacket(&sSentRecord->ruby);
|
||||
else
|
||||
PrepareExchangePacketForRubySapphire(&sSentRecord->ruby);
|
||||
@@ -351,7 +350,7 @@ static void Task_RecordMixing_Main(u8 taskId)
|
||||
{
|
||||
tState = 4;
|
||||
if (gWirelessCommType == 0)
|
||||
data[10] = sub_80B3050();
|
||||
data[10] = CreateTask_ReestablishCableClubLink();
|
||||
|
||||
PrintTextOnRecordMixing(gText_RecordMixingComplete);
|
||||
data[8] = 0;
|
||||
@@ -527,7 +526,7 @@ static void Task_CopyReceiveBuffer(u8 taskId)
|
||||
u8 status = GetBlockReceivedStatus();
|
||||
u8 handledPlayers = 0;
|
||||
|
||||
if (status == sub_800A9D8())
|
||||
if (status == GetLinkPlayerCountAsBitFlags())
|
||||
{
|
||||
u8 i;
|
||||
|
||||
@@ -987,12 +986,12 @@ static void Task_DoRecordMixing(u8 taskId)
|
||||
case 6:
|
||||
if (!sub_801048C(FALSE))
|
||||
{
|
||||
CreateTask(sub_8153688, 5);
|
||||
CreateTask(Task_LinkSave, 5);
|
||||
task->data[0] ++;
|
||||
}
|
||||
break;
|
||||
case 7: // wait for sub_8153688 to finish.
|
||||
if (!FuncIsActiveTask(sub_8153688))
|
||||
case 7: // wait for Task_LinkSave to finish.
|
||||
if (!FuncIsActiveTask(Task_LinkSave))
|
||||
{
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
|
||||
+30
-22
@@ -897,74 +897,78 @@ u32 TryWriteSpecialSaveSection(u8 sector, u8* src)
|
||||
return SAVE_STATUS_OK;
|
||||
}
|
||||
|
||||
void sub_8153688(u8 taskId)
|
||||
{
|
||||
s16* taskData = gTasks[taskId].data;
|
||||
#define tState data[0]
|
||||
#define tTimer data[1]
|
||||
#define tPartialSave data[2]
|
||||
|
||||
switch (taskData[0])
|
||||
void Task_LinkSave(u8 taskId)
|
||||
{
|
||||
s16* data = gTasks[taskId].data;
|
||||
|
||||
switch (tState)
|
||||
{
|
||||
case 0:
|
||||
gSoftResetDisabled = TRUE;
|
||||
taskData[0] = 1;
|
||||
tState = 1;
|
||||
break;
|
||||
case 1:
|
||||
sub_800ADF8();
|
||||
taskData[0] = 2;
|
||||
tState = 2;
|
||||
break;
|
||||
case 2:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (taskData[2] == 0)
|
||||
if (!tPartialSave)
|
||||
save_serialize_map();
|
||||
taskData[0] = 3;
|
||||
tState = 3;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (taskData[2] == 0)
|
||||
if (!tPartialSave)
|
||||
SetContinueGameWarpStatusToDynamicWarp();
|
||||
sub_8153380();
|
||||
taskData[0] = 4;
|
||||
tState = 4;
|
||||
break;
|
||||
case 4:
|
||||
if (++taskData[1] == 5)
|
||||
if (++tTimer == 5)
|
||||
{
|
||||
taskData[1] = 0;
|
||||
taskData[0] = 5;
|
||||
tTimer = 0;
|
||||
tState = 5;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (sub_81533AC())
|
||||
taskData[0] = 6;
|
||||
tState = 6;
|
||||
else
|
||||
taskData[0] = 4;
|
||||
tState = 4;
|
||||
break;
|
||||
case 6:
|
||||
sub_81533E0();
|
||||
taskData[0] = 7;
|
||||
tState = 7;
|
||||
break;
|
||||
case 7:
|
||||
if (taskData[2] == 0)
|
||||
if (!tPartialSave)
|
||||
ClearContinueGameWarpStatus2();
|
||||
sub_800ADF8();
|
||||
taskData[0] = 8;
|
||||
tState = 8;
|
||||
break;
|
||||
case 8:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
sub_8153408();
|
||||
taskData[0] = 9;
|
||||
tState = 9;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
sub_800ADF8();
|
||||
taskData[0] = 10;
|
||||
tState = 10;
|
||||
break;
|
||||
case 10:
|
||||
if (IsLinkTaskFinished())
|
||||
taskData[0]++;
|
||||
tState++;
|
||||
break;
|
||||
case 11:
|
||||
if (++taskData[1] > 5)
|
||||
if (++tTimer > 5)
|
||||
{
|
||||
gSoftResetDisabled = FALSE;
|
||||
DestroyTask(taskId);
|
||||
@@ -972,3 +976,7 @@ void sub_8153688(u8 taskId)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#undef tState
|
||||
#undef tTimer
|
||||
#undef tPartialSave
|
||||
+4
-4
@@ -1185,22 +1185,22 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx)
|
||||
bool8 ScrCmd_createvobject(struct ScriptContext *ctx)
|
||||
{
|
||||
u8 graphicsId = ScriptReadByte(ctx);
|
||||
u8 v2 = ScriptReadByte(ctx);
|
||||
u8 objectEventId = ScriptReadByte(ctx);
|
||||
u16 x = VarGet(ScriptReadHalfword(ctx));
|
||||
u32 y = VarGet(ScriptReadHalfword(ctx));
|
||||
u8 elevation = ScriptReadByte(ctx);
|
||||
u8 direction = ScriptReadByte(ctx);
|
||||
|
||||
sprite_new(graphicsId, v2, x, y, elevation, direction);
|
||||
CreateObjectSprite(graphicsId, objectEventId, x, y, elevation, direction);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 ScrCmd_turnvobject(struct ScriptContext *ctx)
|
||||
{
|
||||
u8 v1 = ScriptReadByte(ctx);
|
||||
u8 objectEventId = ScriptReadByte(ctx);
|
||||
u8 direction = ScriptReadByte(ctx);
|
||||
|
||||
sub_8097B78(v1, direction);
|
||||
TurnObjectEventSprite(objectEventId, direction);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
+41
-37
@@ -133,8 +133,8 @@ static u8 BattlePyramidRetireInputCallback(void);
|
||||
// Task callbacks
|
||||
static void StartMenuTask(u8 taskId);
|
||||
static void SaveGameTask(u8 taskId);
|
||||
static void sub_80A0550(u8 taskId);
|
||||
static void sub_80A08A4(u8 taskId);
|
||||
static void Task_SaveAfterLinkBattle(u8 taskId);
|
||||
static void Task_WaitForBattleTowerLinkSave(u8 taskId);
|
||||
static bool8 FieldCB_ReturnToFieldStartMenu(void);
|
||||
|
||||
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 void InitBattlePyramidRetire(void);
|
||||
static void sub_80A03D8(void);
|
||||
static bool32 sub_80A03E4(u8 *par1);
|
||||
static void sub_80A0540(void);
|
||||
static bool32 InitSaveWindowAfterLinkBattle(u8 *par1);
|
||||
static void CB2_SaveAfterLinkBattle(void);
|
||||
static void ShowSaveInfoWindow(void);
|
||||
static void RemoveSaveInfoWindow(void);
|
||||
static void HideStartMenuWindow(void);
|
||||
@@ -525,7 +525,7 @@ void Task_ShowStartMenu(u8 taskId)
|
||||
{
|
||||
case 0:
|
||||
if (InUnionRoom() == TRUE)
|
||||
var_800D_set_xB();
|
||||
SetUsingUnionRoomStartMenu();
|
||||
|
||||
gMenuCallback = HandleStartMenuInput;
|
||||
task->data[0]++;
|
||||
@@ -1159,9 +1159,9 @@ static void sub_80A03D8(void)
|
||||
TransferPlttBuffer();
|
||||
}
|
||||
|
||||
static bool32 sub_80A03E4(u8 *par1)
|
||||
static bool32 InitSaveWindowAfterLinkBattle(u8 *state)
|
||||
{
|
||||
switch (*par1)
|
||||
switch (*state)
|
||||
{
|
||||
case 0:
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0);
|
||||
@@ -1193,43 +1193,43 @@ static bool32 sub_80A03E4(u8 *par1)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
(*par1)++;
|
||||
(*state)++;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_80A0514(void)
|
||||
void CB2_SetUpSaveAfterLinkBattle(void)
|
||||
{
|
||||
if (sub_80A03E4(&gMain.state))
|
||||
if (InitSaveWindowAfterLinkBattle(&gMain.state))
|
||||
{
|
||||
CreateTask(sub_80A0550, 0x50);
|
||||
SetMainCallback2(sub_80A0540);
|
||||
CreateTask(Task_SaveAfterLinkBattle, 0x50);
|
||||
SetMainCallback2(CB2_SaveAfterLinkBattle);
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80A0540(void)
|
||||
static void CB2_SaveAfterLinkBattle(void)
|
||||
{
|
||||
RunTasks();
|
||||
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)
|
||||
{
|
||||
switch (*step)
|
||||
switch (*state)
|
||||
{
|
||||
case 0:
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
AddTextPrinterParameterized2(0,
|
||||
1,
|
||||
gText_SavingDontTurnOffPower,
|
||||
255,
|
||||
TEXT_SPEED_FF,
|
||||
NULL,
|
||||
2,
|
||||
1,
|
||||
3);
|
||||
TEXT_COLOR_DARK_GREY,
|
||||
TEXT_COLOR_WHITE,
|
||||
TEXT_COLOR_LIGHT_GREY);
|
||||
DrawTextBorderOuter(0, 8, 14);
|
||||
PutWindowTilemap(0);
|
||||
CopyWindowToVram(0, 3);
|
||||
@@ -1237,37 +1237,37 @@ static void sub_80A0550(u8 taskId)
|
||||
|
||||
if (gWirelessCommType != 0 && InUnionRoom())
|
||||
{
|
||||
if (sub_800A07C())
|
||||
if (Link_AnyPartnersPlayingFRLG_JP())
|
||||
{
|
||||
*step = 1;
|
||||
*state = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
*step = 5;
|
||||
*state = 5;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gSoftResetDisabled = 1;
|
||||
*step = 1;
|
||||
*state = 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
SetContinueGameWarpStatusToDynamicWarp();
|
||||
FullSaveGame();
|
||||
*step = 2;
|
||||
*state = 2;
|
||||
break;
|
||||
case 2:
|
||||
if (CheckSaveFile())
|
||||
{
|
||||
ClearContinueGameWarpStatus2();
|
||||
*step = 3;
|
||||
*state = 3;
|
||||
gSoftResetDisabled = 0;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
|
||||
*step = 4;
|
||||
*state = 4;
|
||||
break;
|
||||
case 4:
|
||||
FreeAllWindowBuffers();
|
||||
@@ -1275,13 +1275,13 @@ static void sub_80A0550(u8 taskId)
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
case 5:
|
||||
CreateTask(sub_8153688, 0x5);
|
||||
*step = 6;
|
||||
CreateTask(Task_LinkSave, 5);
|
||||
*state = 6;
|
||||
break;
|
||||
case 6:
|
||||
if (!FuncIsActiveTask(sub_8153688))
|
||||
if (!FuncIsActiveTask(Task_LinkSave))
|
||||
{
|
||||
*step = 3;
|
||||
*state = 3;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1357,22 +1357,26 @@ static void RemoveSaveInfoWindow(void)
|
||||
RemoveWindow(sSaveInfoWindowId);
|
||||
}
|
||||
|
||||
static void sub_80A08A4(u8 taskId)
|
||||
static void Task_WaitForBattleTowerLinkSave(u8 taskId)
|
||||
{
|
||||
if (!FuncIsActiveTask(sub_8153688))
|
||||
if (!FuncIsActiveTask(Task_LinkSave))
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
EnableBothScriptContexts();
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80A08CC(void)
|
||||
#define tPartialSave data[2]
|
||||
|
||||
void SaveForBattleTowerLink(void)
|
||||
{
|
||||
u8 taskId = CreateTask(sub_8153688, 0x5);
|
||||
gTasks[taskId].data[2] = 1;
|
||||
gTasks[CreateTask(sub_80A08A4, 0x6)].data[1] = taskId;
|
||||
u8 taskId = CreateTask(Task_LinkSave, 5);
|
||||
gTasks[taskId].tPartialSave = TRUE;
|
||||
gTasks[CreateTask(Task_WaitForBattleTowerLinkSave, 6)].data[1] = taskId;
|
||||
}
|
||||
|
||||
#undef tPartialSave
|
||||
|
||||
static void HideStartMenuWindow(void)
|
||||
{
|
||||
ClearStdWindowAndFrame(GetStartMenuWindowId(), TRUE);
|
||||
|
||||
+5
-5
@@ -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 gText_ExitingChat[] = _("Exiting 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_AlreadySavedFile_Unused[] = _("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_PlayerSavedGame_Unused[] = _("{SPECIAL_F7 0x00} saved the game.");
|
||||
const u8 gText_RegisteredTextChangedOKToSave[] = _("The registered text has been changed.\nIs it okay to save the game?");
|
||||
const u8 gText_AlreadySavedFile_Chat[] = _("There is already a saved file.\nIs it okay to overwrite it?");
|
||||
const u8 gText_SavingDontTurnOff_Chat[] = _("SAVING…\nDON'T TURN OFF THE POWER.");
|
||||
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_Hello[] = _("HELLO");
|
||||
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_ButtonTypeLR[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}LR");
|
||||
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_CopperCard[] = _("COPPER");
|
||||
const u8 gText_SilverCard[] = _("SILVER");
|
||||
|
||||
+11
-10
@@ -52,6 +52,7 @@
|
||||
#include "constants/rgb.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/union_room.h"
|
||||
|
||||
#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)
|
||||
{
|
||||
if (gUnknown_02022C2C == 29)
|
||||
if (gPlayerCurrActivity == ACTIVITY_29)
|
||||
{
|
||||
rfu_NI_setSendData(lman.acceptSlot_flag, 84, linkData, size);
|
||||
return TRUE;
|
||||
@@ -252,7 +253,7 @@ static void sub_80771AC(u8 a0)
|
||||
|
||||
static bool32 sub_80771BC(void)
|
||||
{
|
||||
if (gUnknown_02022C2C == 29)
|
||||
if (gPlayerCurrActivity == ACTIVITY_29)
|
||||
{
|
||||
if (gRfuSlotStatusNI[sub_800E87C(lman.acceptSlot_flag)]->send.state == 0)
|
||||
return TRUE;
|
||||
@@ -288,7 +289,7 @@ static void TradeResetReceivedFlag(u32 who)
|
||||
|
||||
static bool32 IsWirelessTrade(void)
|
||||
{
|
||||
if (gWirelessCommType && gUnknown_02022C2C == 29)
|
||||
if (gWirelessCommType && gPlayerCurrActivity == ACTIVITY_29)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
@@ -388,20 +389,20 @@ static void CB2_CreateTradeMenu(void)
|
||||
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
gLinkType = LINKTYPE_0x1122;
|
||||
gLinkType = LINKTYPE_TRADE_CONNECTING;
|
||||
sTradeMenuData->timer = 0;
|
||||
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
sub_800B488();
|
||||
SetWirelessCommType1();
|
||||
OpenLink();
|
||||
sub_8011BA4();
|
||||
CreateTask_RfuIdle();
|
||||
}
|
||||
else
|
||||
{
|
||||
OpenLink();
|
||||
gMain.state++;
|
||||
CreateTask(task00_08081A90, 1);
|
||||
CreateTask(Task_WaitForLinkPlayerConnection, 1);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -437,7 +438,7 @@ static void CB2_CreateTradeMenu(void)
|
||||
case 4:
|
||||
if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE)
|
||||
{
|
||||
sub_8011BD0();
|
||||
DestroyTask_RfuIdle();
|
||||
CalculatePlayerPartyCount();
|
||||
gMain.state++;
|
||||
sTradeMenuData->timer = 0;
|
||||
@@ -2749,7 +2750,7 @@ void CB2_LinkTrade(void)
|
||||
case 0:
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
gLinkType = LINKTYPE_0x1144;
|
||||
gLinkType = LINKTYPE_TRADE_DISCONNECTED;
|
||||
CloseLink();
|
||||
}
|
||||
sTradeData = AllocZeroed(sizeof(*sTradeData));
|
||||
@@ -4596,7 +4597,7 @@ static void CB2_SaveAndEndTrade(void)
|
||||
IncrementGameStat(GAME_STAT_POKEMON_TRADES);
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
sub_801B990(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
|
||||
RecordIdOfWonderCardSenderByEventType(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
|
||||
}
|
||||
SetContinueGameWarpStatusToDynamicWarp();
|
||||
sub_8153380();
|
||||
|
||||
+1912
-1748
File diff suppressed because it is too large.
Load diff
+38
-435
@@ -11,134 +11,24 @@
|
||||
#include "window.h"
|
||||
#include "text_window.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 "constants/songs.h"
|
||||
#include "party_menu.h"
|
||||
#include "battle_setup.h"
|
||||
#include "link.h"
|
||||
#include "union_room.h"
|
||||
#include "union_room_battle.h"
|
||||
#include "constants/rgb.h"
|
||||
#include "constants/trainers.h"
|
||||
|
||||
struct UnkStruct_3000DAC
|
||||
struct UnionRoomBattle
|
||||
{
|
||||
/*0x00*/ u32 unk00[4];
|
||||
/*0x10*/ u32 unk10[4];
|
||||
/*0x20*/ u32 unk20[16];
|
||||
/*0x60*/ u8 taskId;
|
||||
/*0x61*/ u8 unk61;
|
||||
/*0x62*/ u8 filler_62[10];
|
||||
s16 textState;
|
||||
};
|
||||
|
||||
struct UnkStruct_2022C6C
|
||||
{
|
||||
s16 a0;
|
||||
};
|
||||
static EWRAM_DATA struct UnionRoomBattle * sBattle = NULL;
|
||||
|
||||
static struct UnkStruct_3000DAC * gUnknown_03000DAC;
|
||||
|
||||
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[] = {
|
||||
static const struct BgTemplate sBgTemplates[] = {
|
||||
{
|
||||
.bg = 0,
|
||||
.charBaseIndex = 3,
|
||||
@@ -146,7 +36,7 @@ const struct BgTemplate gUnknown_082F0DD0[] = {
|
||||
}
|
||||
};
|
||||
|
||||
const struct WindowTemplate gUnknown_082F0DD4[] = {
|
||||
static const struct WindowTemplate sWindowTemplates[] = {
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 3,
|
||||
@@ -156,301 +46,15 @@ const struct WindowTemplate gUnknown_082F0DD4[] = {
|
||||
.paletteNum = 0xE,
|
||||
.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)
|
||||
{
|
||||
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)
|
||||
static void CB2_SetUpPartiesAndStartBattle(void)
|
||||
{
|
||||
s32 i;
|
||||
FreeAllWindowBuffers();
|
||||
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);
|
||||
StartUnionRoomBattle(BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER);
|
||||
for (i = 0; i < UNION_ROOM_PARTY_SIZE; i++)
|
||||
{
|
||||
gEnemyParty[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1];
|
||||
@@ -465,25 +69,25 @@ void sub_801AAD4(void)
|
||||
}
|
||||
IncrementGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES);
|
||||
CalculatePlayerPartyCount();
|
||||
gTrainerBattleOpponent_A = 0xC00;
|
||||
gTrainerBattleOpponent_A = TRAINER_UNION_ROOM;
|
||||
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 lineSpacing = 1;
|
||||
FillWindowPixelBuffer(windowId, (gUnknown_082F0DE4[0] << 4) | gUnknown_082F0DE4[0]);
|
||||
AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, gUnknown_082F0DE4, speed, str);
|
||||
FillWindowPixelBuffer(windowId, (sTextColors[0] << 4) | sTextColors[0]);
|
||||
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)
|
||||
{
|
||||
case 0:
|
||||
DrawTextBorderOuter(0, 0x001, 0xD);
|
||||
sub_801AB68(0, str, 0, 1, speed);
|
||||
AddTextPrinterForUnionRoomBattle(0, str, 0, 1, speed);
|
||||
PutWindowTilemap(0);
|
||||
CopyWindowToVram(0, 3);
|
||||
(*state)++;
|
||||
@@ -499,49 +103,47 @@ bool32 sub_801ABDC(s16 * state, const u8 * str, s32 speed)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_801AC40(void)
|
||||
static void VBlankCB_UnionRoomBattle(void)
|
||||
{
|
||||
LoadOam();
|
||||
ProcessSpriteCopyRequests();
|
||||
TransferPlttBuffer();
|
||||
}
|
||||
|
||||
void sub_801AC54(void)
|
||||
void CB2_UnionRoomBattle(void)
|
||||
{
|
||||
switch (gMain.state)
|
||||
{
|
||||
case 0:
|
||||
SetGpuReg(REG_OFFSET_DISPCNT, 0x0000);
|
||||
gUnknown_02022C6C = AllocZeroed(4);
|
||||
sBattle = AllocZeroed(sizeof(struct UnionRoomBattle));
|
||||
ResetSpriteData();
|
||||
FreeAllSpritePalettes();
|
||||
ResetTasks();
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
InitBgsFromTemplates(0, gUnknown_082F0DD0, 1);
|
||||
InitBgsFromTemplates(0, sBgTemplates, ARRAY_COUNT(sBgTemplates));
|
||||
ResetTempTileDataBuffers();
|
||||
if (!InitWindows(gUnknown_082F0DD4))
|
||||
{
|
||||
if (!InitWindows(sWindowTemplates))
|
||||
return;
|
||||
}
|
||||
DeactivateAllTextPrinters();
|
||||
ClearWindowTilemap(0);
|
||||
FillWindowPixelBuffer(0, 0x00);
|
||||
FillWindowPixelBuffer(0, 0x11);
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(0));
|
||||
FillWindowPixelBuffer(0, PIXEL_FILL(1));
|
||||
FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 0xF);
|
||||
LoadUserWindowBorderGfx(0, 1, 0xD0);
|
||||
LoadUserWindowBorderGfx_(0, 1, 0xD0);
|
||||
sub_819789C();
|
||||
SetVBlankCallback(sub_801AC40);
|
||||
SetVBlankCallback(VBlankCB_UnionRoomBattle);
|
||||
gMain.state++;
|
||||
break;
|
||||
case 1:
|
||||
if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_CommStandbyAwaitingOtherPlayer, 0))
|
||||
if (PrintUnionRoomBattleMessage(&sBattle->textState, gText_CommStandbyAwaitingOtherPlayer, 0))
|
||||
{
|
||||
gMain.state++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
|
||||
ShowBg(0);
|
||||
gMain.state++;
|
||||
break;
|
||||
@@ -551,11 +153,11 @@ void sub_801AC54(void)
|
||||
memset(gBlockSendBuffer, 0, 0x20);
|
||||
if (gSelectedOrderFromParty[0] == -gSelectedOrderFromParty[1])
|
||||
{
|
||||
gBlockSendBuffer[0] = 0x52;
|
||||
gBlockSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBlockSendBuffer[0] = 0x51;
|
||||
gBlockSendBuffer[0] = ACTIVITY_ACCEPT | IN_UNION_ROOM;
|
||||
}
|
||||
SendBlock(0, gBlockSendBuffer, 0x20);
|
||||
gMain.state++;
|
||||
@@ -564,15 +166,16 @@ void sub_801AC54(void)
|
||||
case 4:
|
||||
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;
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800AC34();
|
||||
if (gBlockRecvBuffer[GetMultiplayerId()][0] == 0x52)
|
||||
if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | IN_UNION_ROOM))
|
||||
{
|
||||
gMain.state = 6;
|
||||
}
|
||||
@@ -594,29 +197,29 @@ void sub_801AC54(void)
|
||||
case 51:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
SetMainCallback2(sub_801AAD4);
|
||||
SetMainCallback2(CB2_SetUpPartiesAndStartBattle);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (gReceivedRemoteLinkPlayers == 0)
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
gMain.state++;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_RefusedBattle, 1))
|
||||
if (PrintUnionRoomBattleMessage(&sBattle->textState, gText_RefusedBattle, 1))
|
||||
{
|
||||
SetMainCallback2(CB2_ReturnToField);
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
if (gReceivedRemoteLinkPlayers == 0)
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
gMain.state++;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_BattleWasRefused, 1))
|
||||
if (PrintUnionRoomBattleMessage(&sBattle->textState, gText_BattleWasRefused, 1))
|
||||
{
|
||||
SetMainCallback2(CB2_ReturnToField);
|
||||
}
|
||||
|
||||
+1431
-1131
File diff suppressed because it is too large.
Load diff
+253
-240
@@ -10,98 +10,124 @@
|
||||
#include "constants/event_object_movement.h"
|
||||
#include "constants/flags.h"
|
||||
|
||||
EWRAM_DATA struct UnkStruct_8019BA8 * gUnknown_02022C64 = NULL;
|
||||
EWRAM_DATA u32 gUnknown_02022C68 = 0;
|
||||
#define UR_SPRITE_START_ID (MAX_SPRITES - MAX_UNION_ROOM_PLAYERS)
|
||||
#define UR_PLAYER_SPRITE_ID(playerIdx, facingDir)(5 * playerIdx + facingDir)
|
||||
|
||||
static u8 sub_8019DF4(void);
|
||||
static u32 sub_8019F8C(u32 playerIdx, u32 arg1);
|
||||
static void sub_801A3B0(s32 arg0, s32 arg1, u8 arg2);
|
||||
static EWRAM_DATA struct UnionRoomObject * sUnionObjWork = NULL;
|
||||
static EWRAM_DATA u32 sUnionObjRefreshTimer = 0;
|
||||
|
||||
ALIGNED(4) const u8 gUnknown_082F072C[][10] = {
|
||||
{0x21, 0x2c, 0x1f, 0x23, 0x25, 0x24, 0x41, 0x42},
|
||||
{0x22, 0x28, 0x20, 0x2f, 0x2f, 0x0e, 0x14, 0x2d}
|
||||
static u8 CreateTask_AnimateUnionRoomPlayers(void);
|
||||
static u32 IsUnionRoomPlayerInvisible(u32, u32);
|
||||
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] = {
|
||||
{0x4, 0x6},
|
||||
{0xd, 0x8},
|
||||
{0xa, 0x6},
|
||||
{0x1, 0x8},
|
||||
{0xd, 0x4},
|
||||
{0x7, 0x4},
|
||||
{0x1, 0x4},
|
||||
{0x7, 0x8}
|
||||
static const s16 sUnionRoomPlayerCoords[MAX_UNION_ROOM_PLAYERS][2] = {
|
||||
{ 4, 6},
|
||||
{13, 8},
|
||||
{10, 6},
|
||||
{ 1, 8},
|
||||
{13, 4},
|
||||
{ 7, 4},
|
||||
{ 1, 4},
|
||||
{ 7, 8}
|
||||
};
|
||||
|
||||
static const s8 gUnknown_082F0760[][2] = {
|
||||
{ 0, 0},
|
||||
{ 1, 0},
|
||||
{ 0, -1},
|
||||
{-1, 0},
|
||||
{ 0, 1}
|
||||
static const s8 sFacingDirectionOffsets[][2] = {
|
||||
[DIR_NONE] = { 0, 0},
|
||||
[DIR_SOUTH] = { 1, 0},
|
||||
[DIR_NORTH] = { 0, -1},
|
||||
[DIR_WEST] = {-1, 0},
|
||||
[DIR_EAST] = { 0, 1}
|
||||
};
|
||||
|
||||
static const u8 gUnknown_082F076A[] = {
|
||||
0x00, 0x02, 0x01, 0x04, 0x03
|
||||
static const u8 sOppositeFacingDirection[] = {
|
||||
[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[] = {
|
||||
0x01, 0x03, 0x01, 0x04, 0x02
|
||||
static const u8 sNextFacingDirection[] = {
|
||||
[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[] = {
|
||||
0x09, 0x08, 0x07, 0x02, 0x06, 0x05, 0x04, 0x03,
|
||||
0xbf, 0x02, 0xc0, 0x02, 0xc1, 0x02, 0xc2, 0x02,
|
||||
0xc3, 0x02, 0xc4, 0x02, 0xc5, 0x02, 0xc6, 0x02
|
||||
// Local id 1 is the Nurse/Attendant, 2-9 are link players
|
||||
static const u8 sUnionRoomLocalIds[] = { 9, 8, 7, 2, 6, 5, 4, 3 };
|
||||
|
||||
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_STEP_END
|
||||
};
|
||||
|
||||
static const u8 gUnknown_082F078E[2] = {
|
||||
static const u8 sMovement_UnionPlayerEnter[2] = {
|
||||
MOVEMENT_ACTION_FLY_DOWN,
|
||||
MOVEMENT_ACTION_STEP_END
|
||||
};
|
||||
|
||||
static bool32 is_walking_or_running(void)
|
||||
{
|
||||
if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0)
|
||||
static bool32 IsPlayerStandingStill(void)
|
||||
{
|
||||
if (gPlayerAvatar.tileTransitionState == T_TILE_CENTER || gPlayerAvatar.tileTransitionState == T_NOT_MOVING)
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id)
|
||||
{
|
||||
return sUnionRoomObjGfxIds[gender][id % MAX_UNION_ROOM_PLAYERS];
|
||||
}
|
||||
|
||||
static u8 sub_8019978(u32 a0, u32 a1)
|
||||
static void GetUnionRoomPlayerFacingCoords(u32 playerIdx, u32 direction, s32 * x, s32 * y)
|
||||
{
|
||||
return gUnknown_082F072C[a0][a1 % 8];
|
||||
*x = sUnionRoomPlayerCoords[playerIdx][0] + sFacingDirectionOffsets[direction][0] + 7;
|
||||
*y = sUnionRoomPlayerCoords[playerIdx][1] + sFacingDirectionOffsets[direction][1] + 7;
|
||||
}
|
||||
|
||||
static void sub_8019990(u32 a0, u32 a1, s32 * a2, s32 * a3)
|
||||
{
|
||||
*a2 = gUnknown_082F0740[a0][0] + gUnknown_082F0760[a1][0] + 7;
|
||||
*a3 = gUnknown_082F0740[a0][1] + gUnknown_082F0760[a1][1] + 7;
|
||||
}
|
||||
|
||||
static bool32 sub_80199E0(u32 a0, u32 a1, s32 a2, s32 a3)
|
||||
{
|
||||
if (gUnknown_082F0740[a0][0] + gUnknown_082F0760[a1][0] + 7 != a2)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else if (gUnknown_082F0740[a0][1] + gUnknown_082F0760[a1][1] + 7 != a3)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
static bool32 IsUnionRoomPlayerFacingTileAt(u32 playerIdx, u32 direction, s32 x, s32 y)
|
||||
{
|
||||
if ((sUnionRoomPlayerCoords[playerIdx][0] + sFacingDirectionOffsets[direction][0] + 7 == x)
|
||||
&& (sUnionRoomPlayerCoords[playerIdx][1] + sFacingDirectionOffsets[direction][1] + 7 == y))
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 IsUnionRoomPlayerHidden(u32 player_idx)
|
||||
@@ -126,19 +152,19 @@ static void SetUnionRoomPlayerGfx(u32 playerIdx, u32 gfxId)
|
||||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
u8 objectId;
|
||||
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;
|
||||
}
|
||||
@@ -154,11 +180,11 @@ static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * move
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool32 sub_8019B3C(u32 playerIdx)
|
||||
static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 playerIdx)
|
||||
{
|
||||
u8 objectId;
|
||||
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;
|
||||
}
|
||||
@@ -178,39 +204,39 @@ static bool32 sub_8019B3C(u32 playerIdx)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u8 sub_8019BA8(struct UnkStruct_8019BA8 * ptr)
|
||||
u8 InitUnionRoomPlayerObjects(struct UnionRoomObject * players)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
gUnknown_02022C68 = 0;
|
||||
gUnknown_02022C64 = ptr;
|
||||
for (i = 0; i < 8; i++)
|
||||
sUnionObjRefreshTimer = 0;
|
||||
sUnionObjWork = players;
|
||||
for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++)
|
||||
{
|
||||
ptr[i].field_0 = 0;
|
||||
ptr[i].field_1 = 0;
|
||||
ptr[i].field_2 = 0;
|
||||
ptr[i].field_3 = 0;
|
||||
players[i].state = 0;
|
||||
players[i].gfxId = 0;
|
||||
players[i].animState = 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:
|
||||
if (SetUnionRoomPlayerEnterExitMovement(playerIdx, gUnknown_082F078C) == TRUE)
|
||||
if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerExit) == TRUE)
|
||||
{
|
||||
HideUnionRoomPlayer(playerIdx);
|
||||
(*a0)++;
|
||||
(*state)++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_8019B3C(playerIdx))
|
||||
if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx))
|
||||
{
|
||||
RemoveUnionRoomPlayerObjectEvent(playerIdx);
|
||||
HideUnionRoomPlayer(playerIdx);
|
||||
*a0 = 0;
|
||||
*state = 0;
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
@@ -218,42 +244,42 @@ static bool32 sub_8019BDC(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr
|
||||
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;
|
||||
|
||||
switch (*a0)
|
||||
switch (*state)
|
||||
{
|
||||
case 0:
|
||||
if (!is_walking_or_running())
|
||||
if (!IsPlayerStandingStill())
|
||||
{
|
||||
break;
|
||||
}
|
||||
PlayerGetDestCoords(&x, &y);
|
||||
if (sub_80199E0(playerIdx, 0, x, y) == 1)
|
||||
if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE)
|
||||
{
|
||||
break;
|
||||
}
|
||||
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;
|
||||
}
|
||||
SetUnionRoomPlayerGfx(playerIdx, ptr->field_1);
|
||||
SetUnionRoomPlayerGfx(playerIdx, ptr->gfxId);
|
||||
CreateUnionRoomPlayerObjectEvent(playerIdx);
|
||||
ShowUnionRoomPlayer(playerIdx);
|
||||
(*a0)++;
|
||||
(*state)++;
|
||||
// fallthrough
|
||||
case 3: // incorrect?
|
||||
if (SetUnionRoomPlayerEnterExitMovement(playerIdx, gUnknown_082F078E) == 1)
|
||||
if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerEnter) == TRUE)
|
||||
{
|
||||
(*a0)++;
|
||||
(*state)++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (sub_8019B3C(playerIdx))
|
||||
if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx))
|
||||
{
|
||||
*a0 = 0;
|
||||
*state = 0;
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
@@ -261,44 +287,38 @@ static bool32 sub_8019C38(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 sub_8019CF0(u32 playerIdx, u32 a1, u32 a2)
|
||||
{
|
||||
struct UnkStruct_8019BA8 * ptr = &gUnknown_02022C64[playerIdx];
|
||||
ptr->field_3 = 1;
|
||||
ptr->field_1 = sub_8019978(a1, a2);
|
||||
if (ptr->field_0 == 0)
|
||||
static bool32 SpawnGroupLeader(u32 playerIdx, u32 gender, u32 id)
|
||||
{
|
||||
struct UnionRoomObject * ptr = &sUnionObjWork[playerIdx];
|
||||
ptr->schedAnim = UNION_ROOM_SPAWN_IN;
|
||||
ptr->gfxId = GetUnionRoomPlayerGraphicsId(gender, id);
|
||||
|
||||
if (ptr->state == 0)
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static bool32 sub_8019D20(u32 playerIdx)
|
||||
{
|
||||
struct UnkStruct_8019BA8 * ptr = &gUnknown_02022C64[playerIdx];
|
||||
ptr->field_3 = 2;
|
||||
if (ptr->field_0 == 1)
|
||||
static bool32 DespawnGroupLeader(u32 playerIdx)
|
||||
{
|
||||
struct UnionRoomObject * ptr = &sUnionObjWork[playerIdx];
|
||||
ptr->schedAnim = UNION_ROOM_SPAWN_OUT;
|
||||
|
||||
if (ptr->state == 1)
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
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:
|
||||
if (ptr->field_3 == 1)
|
||||
if (ptr->schedAnim == UNION_ROOM_SPAWN_IN)
|
||||
{
|
||||
ptr->field_0 = 2;
|
||||
ptr->field_2 = 0;
|
||||
ptr->state = 2;
|
||||
ptr->animState = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -306,23 +326,23 @@ static void sub_8019D44(u32 playerIdx, struct UnkStruct_8019BA8 * ptr)
|
||||
}
|
||||
// fallthrough
|
||||
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->field_2 = 0;
|
||||
ptr->state = 0;
|
||||
ptr->animState = 0;
|
||||
RemoveUnionRoomPlayerObjectEvent(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;
|
||||
case 1:
|
||||
if (ptr->field_3 == 2)
|
||||
if (ptr->schedAnim == UNION_ROOM_SPAWN_OUT)
|
||||
{
|
||||
ptr->field_0 = 3;
|
||||
ptr->field_2 = 0;
|
||||
ptr->state = 3;
|
||||
ptr->animState = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -330,49 +350,43 @@ static void sub_8019D44(u32 playerIdx, struct UnkStruct_8019BA8 * ptr)
|
||||
}
|
||||
// fallthrough
|
||||
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;
|
||||
}
|
||||
ptr->field_3 = 0;
|
||||
ptr->schedAnim = UNION_ROOM_SPAWN_NONE;
|
||||
}
|
||||
|
||||
static void sub_8019DD0(u8 taskId)
|
||||
static void Task_AnimateUnionRoomPlayers(u8 taskId)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
sub_8019D44(i, &gUnknown_02022C64[i]);
|
||||
}
|
||||
for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++)
|
||||
AnimateUnionRoomPlayer(i, &sUnionObjWork[i]);
|
||||
}
|
||||
|
||||
static u8 sub_8019DF4(void)
|
||||
{
|
||||
if (FuncIsActiveTask(sub_8019DD0) == 1)
|
||||
static u8 CreateTask_AnimateUnionRoomPlayers(void)
|
||||
{
|
||||
if (FuncIsActiveTask(Task_AnimateUnionRoomPlayers) == TRUE)
|
||||
return NUM_TASKS;
|
||||
}
|
||||
else
|
||||
{
|
||||
return CreateTask(sub_8019DD0, 5);
|
||||
}
|
||||
return CreateTask(Task_AnimateUnionRoomPlayers, 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)
|
||||
{
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8019E3C(void)
|
||||
void DestroyUnionRoomPlayerObjects(void)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < MAX_UNION_ROOM_PLAYERS; i++)
|
||||
{
|
||||
if (!IsUnionRoomPlayerHidden(i))
|
||||
{
|
||||
@@ -380,233 +394,232 @@ void sub_8019E3C(void)
|
||||
HideUnionRoomPlayer(i);
|
||||
}
|
||||
}
|
||||
gUnknown_02022C64 = NULL;
|
||||
sub_8019E20();
|
||||
sUnionObjWork = NULL;
|
||||
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;
|
||||
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);
|
||||
sub_8097C44(r5 - 0x38, TRUE);
|
||||
s32 id = UR_PLAYER_SPRITE_ID(playerIdx, direction);
|
||||
spriteIds[id] = CreateObjectSprite(OBJ_EVENT_GFX_MAN_4,
|
||||
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;
|
||||
for (i = 0; i < 40; i++)
|
||||
{
|
||||
DestroySprite(&gSprites[r5[i]]);
|
||||
}
|
||||
for (i = 0; i < UR_PLAYER_SPRITE_ID(MAX_UNION_ROOM_PLAYERS, 0); i++)
|
||||
DestroySprite(&gSprites[spriteIds[i]]);
|
||||
}
|
||||
|
||||
void sub_8019F2C(void)
|
||||
void SetTilesAroundUnionRoomPlayersPassable(void)
|
||||
{
|
||||
s32 i, j, x, y;
|
||||
for (i = 0; i < 8; i++)
|
||||
s32 i, direction, x, y;
|
||||
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);
|
||||
sub_8088B94(x, y, 0);
|
||||
GetUnionRoomPlayerFacingCoords(i, direction, &x, &y);
|
||||
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)
|
||||
{
|
||||
return gUnknown_082F076F[r1];
|
||||
}
|
||||
else if (r2->activity == 0x45)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if (direction != DIR_NONE)
|
||||
return sNextFacingDirection[direction];
|
||||
else if (gname->activity == (ACTIVITY_CHAT | IN_UNION_ROOM))
|
||||
return DIR_SOUTH;
|
||||
else
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
return DIR_EAST;
|
||||
}
|
||||
|
||||
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 r7 = 5 * r5 + r6;
|
||||
if (sub_8019F8C(r5, r6) == 1)
|
||||
s32 id = UR_PLAYER_SPRITE_ID(playerIdx, direction);
|
||||
if (IsUnionRoomPlayerInvisible(playerIdx, direction) == TRUE)
|
||||
{
|
||||
sub_8097C44(r7 - 0x38, FALSE);
|
||||
sub_8097CC4(r7 - 0x38, 1);
|
||||
SetObjectEventSpriteInvisibility(id - UR_SPRITE_START_ID, FALSE);
|
||||
SetObjectEventSpriteAnim(id - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_IN);
|
||||
}
|
||||
sub_8097BB4(r7 - 0x38, r8);
|
||||
sub_801A3B0(r6, r5, sub_8019F64(r6, r5, r9));
|
||||
sub_8019990(r5, r6, &x, &y);
|
||||
sub_8088B94(x, y, 1);
|
||||
SetObjectEventSpriteGraphics(id - UR_SPRITE_START_ID, graphicsId);
|
||||
SetUnionRoomObjectFacingDirection(direction, playerIdx, GetNewFacingDirectionForUnionRoomPlayer(direction, playerIdx, gname));
|
||||
GetUnionRoomPlayerFacingCoords(playerIdx, direction, &x, &y);
|
||||
MapGridSetMetatileImpassabilityAt(x, y, TRUE);
|
||||
}
|
||||
|
||||
static void sub_801A02C(u32 a0, u32 a1)
|
||||
static void DespawnGroupMember(u32 playerIdx, u32 direction)
|
||||
{
|
||||
s32 x, y;
|
||||
sub_8097CC4(5 * a0 + a1 - 0x38, 2);
|
||||
sub_8019990(a0, a1, &x, &y);
|
||||
sub_8088B94(x, y, 0);
|
||||
SetObjectEventSpriteAnim(UR_PLAYER_SPRITE_ID(playerIdx, direction) - UR_SPRITE_START_ID, UNION_ROOM_SPAWN_OUT);
|
||||
GetUnionRoomPlayerFacingCoords(playerIdx, direction, &x, &y);
|
||||
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;
|
||||
s32 i;
|
||||
|
||||
PlayerGetDestCoords(&x, &y);
|
||||
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;
|
||||
}
|
||||
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++)
|
||||
{
|
||||
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;
|
||||
switch (r4->activity)
|
||||
switch (gname->activity)
|
||||
{
|
||||
case 0x40:
|
||||
case 0x54:
|
||||
sub_8019CF0(r5, r4->playerGender, r4->unk_00.playerTrainerId[0]);
|
||||
case ACTIVITY_NONE | IN_UNION_ROOM:
|
||||
case ACTIVITY_PLYRTALK | IN_UNION_ROOM:
|
||||
SpawnGroupLeader(playerIdx, gname->playerGender, gname->unk_00.playerTrainerId[0]);
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
sub_801A02C(r5, i);
|
||||
DespawnGroupMember(playerIdx, i);
|
||||
}
|
||||
break;
|
||||
case 0x41:
|
||||
case 0x44:
|
||||
case 0x45:
|
||||
case 0x48:
|
||||
case 0x51:
|
||||
case 0x52:
|
||||
case 0x53:
|
||||
sub_8019D20(r5);
|
||||
sub_801A064(r5, r4);
|
||||
case ACTIVITY_BATTLE_SINGLE | IN_UNION_ROOM:
|
||||
case ACTIVITY_TRADE | IN_UNION_ROOM:
|
||||
case ACTIVITY_CHAT | IN_UNION_ROOM:
|
||||
case ACTIVITY_CARD | IN_UNION_ROOM:
|
||||
case ACTIVITY_ACCEPT | IN_UNION_ROOM:
|
||||
case ACTIVITY_DECLINE | IN_UNION_ROOM:
|
||||
case ACTIVITY_NPCTALK | IN_UNION_ROOM:
|
||||
DespawnGroupLeader(playerIdx);
|
||||
AssembleGroup(playerIdx, gname);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_801A214(u32 r5, struct GFtgtGname * unused)
|
||||
static void DespawnGroupLeaderAndMembers(u32 r5, struct GFtgtGname *gname)
|
||||
{
|
||||
s32 i;
|
||||
sub_8019D20(r5);
|
||||
DespawnGroupLeader(r5);
|
||||
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;
|
||||
struct UnkStruct_x20 * r4;
|
||||
gUnknown_02022C68 = 0;
|
||||
for (i = 0, r4 = r0->field_0->arr; i < 8; i++)
|
||||
sUnionObjRefreshTimer = 0;
|
||||
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;
|
||||
s32 i, j;
|
||||
s32 i, direction;
|
||||
struct UnkStruct_x20 * r4;
|
||||
if (!is_walking_or_running())
|
||||
if (!IsPlayerStandingStill())
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
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;
|
||||
if (x != gUnknown_082F0740[i][0] + gUnknown_082F0760[j][0] + 7)
|
||||
s32 id = UR_PLAYER_SPRITE_ID(i, direction);
|
||||
if (x != sUnionRoomPlayerCoords[i][0] + sFacingDirectionOffsets[direction][0] + 7)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (y != gUnknown_082F0740[i][1] + gUnknown_082F0760[j][1] + 7)
|
||||
if (y != sUnionRoomPlayerCoords[i][1] + sFacingDirectionOffsets[direction][1] + 7)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (sub_8097C8C(r3 - 0x38) != 0)
|
||||
if (IsObjectEventSpriteInvisible(id - UR_SPRITE_START_ID))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (sub_8097D9C(r3 - 0x38) != 0)
|
||||
if (IsObjectEventSpriteAnimating(id - UR_SPRITE_START_ID))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (r4[i].field_1A_0 != 1)
|
||||
if (r4[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
sub_801A3B0(j, i, gUnknown_082F076A[GetPlayerFacingDirection()]);
|
||||
*arg1 = j;
|
||||
*arg2 = i;
|
||||
// Face player
|
||||
SetUnionRoomObjectFacingDirection(direction, i, sOppositeFacingDirection[GetPlayerFacingDirection()]);
|
||||
*directionPtr = direction;
|
||||
*playerIdxPtr = i;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
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));
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@
|
||||
.include "src/link_rfu_3.o"
|
||||
.include "src/link_rfu_2.o"
|
||||
.include "src/union_room.o"
|
||||
.include "src/wireless_communication_status_screen.o"
|
||||
.include "src/union_room_battle.o"
|
||||
.include "src/dodrio_berry_picking.o"
|
||||
.include "src/rtc.o"
|
||||
|
||||
Loaded 100 of 101 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user