Merge branch 'master' of https://github.com/pret/pokeemerald into doc-confetti

This commit is contained in:
GriffinR committed 2020-07-08 15:45:31 -04:00
commit 431c60c92c
109 files changed
+7618 -6664

No files matched your search

+2 -2
View File
@@ -67,7 +67,7 @@ OBJ_DIR := build/emerald
LIBPATH := -L ../../tools/agbcc/lib LIBPATH := -L ../../tools/agbcc/lib
else else
CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet CC1 = $(shell $(CC) --print-prog-name=cc1) -quiet
override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -fno-aggressive-loop-optimizations -Wno-pointer-to-int-cast override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast
ROM := pokeemerald_modern.gba ROM := pokeemerald_modern.gba
OBJ_DIR := build/modern OBJ_DIR := build/modern
LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))" LIBPATH := -L "$(dir $(shell $(CC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(CC) -mthumb -print-file-name=libc.a))"
@@ -232,7 +232,7 @@ $(C_BUILDDIR)/record_mixing.o: CFLAGS += -ffreestanding
$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm $(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm
$(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet
else else
$(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -fno-aggressive-loop-optimizations -Wno-pointer-to-int-cast $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast
endif endif
ifeq ($(NODEP),1) ifeq ($(NODEP),1)
+7 -9
View File
@@ -3,15 +3,15 @@ gLinkDebugSeed
gLocalLinkPlayerBlock gLocalLinkPlayerBlock
gLinkErrorOccurred gLinkErrorOccurred
gLinkDebugFlags gLinkDebugFlags
gFiller_03003074 gLinkFiller1
gRemoteLinkPlayersNotReceived gRemoteLinkPlayersNotReceived
gBlockReceivedStatus gBlockReceivedStatus
gFiller_03003080 gLinkFiller2
gLinkHeldKeys gLinkHeldKeys
gRecvCmds gRecvCmds
gLinkStatus gLinkStatus
gUnknown_030030E4 gLinkDummy1
gUnknown_030030E8 gLinkDummy2
gUnknown_030030EC gUnknown_030030EC
gUnknown_030030F0 gUnknown_030030F0
gUnknown_030030F4 gUnknown_030030F4
@@ -26,12 +26,10 @@ gLinkCallback
gShouldAdvanceLinkState gShouldAdvanceLinkState
gLinkTestBlockChecksums gLinkTestBlockChecksums
gBlockRequestType gBlockRequestType
gFiller_03003154 gLinkFiller3
gFiller_03003158 gLinkFiller4
gFiller_0300315c gLinkFiller5
gLastSendQueueCount gLastSendQueueCount
gLink gLink
gLastRecvQueueCount gLastRecvQueueCount
gLinkSavedIme gLinkSavedIme
gFiller_03004138
gFiller_0300413C
@@ -786,19 +786,19 @@ BattleFrontier_BattleTowerLobby_EventScript_TryCableLink:: @ 823F2C5
setvar VAR_0x8005, 0 setvar VAR_0x8005, 0
special TryBattleLinkup special TryBattleLinkup
waitstate waitstate
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful
compare VAR_RESULT, 2 compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady
compare VAR_RESULT, 3 compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections
compare VAR_RESULT, 4 compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLinkIncorrectNumberOfPlayers goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLinkIncorrectNumberOfPlayers
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
compare VAR_RESULT, 6 compare VAR_RESULT, LINKUP_CONNECTION_ERROR
goto_if_eq CableClub_EventScript_AbortLinkConnectionError goto_if_eq CableClub_EventScript_AbortLinkConnectionError
compare VAR_RESULT, 11 compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink
end end
@@ -853,7 +853,7 @@ BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful:: @ 823F3AF
message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn
waitmessage waitmessage
tower_save CHALLENGE_STATUS_SAVING tower_save CHALLENGE_STATUS_SAVING
special sub_80A08CC special SaveForBattleTowerLink
waitstate waitstate
playse SE_SAVE playse SE_SAVE
waitse waitse
@@ -884,26 +884,26 @@ BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader:: @ 823F3F3
BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader:: @ 823F430 BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader:: @ 823F430
call CableClub_EventScript_TryBecomeLinkLeader call CableClub_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader
compare VAR_RESULT, 11 compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink
release release
return return
BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup:: @ 823F463 BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup:: @ 823F463
call CableClub_EventScript_TryJoinLinkGroup call CableClub_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup
compare VAR_RESULT, 11 compare VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER
goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink goto_if_eq BattleFrontier_BattleTowerLobby_EventScript_AbortLink
release release
return return
@@ -914,7 +914,7 @@ BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful:: @ 823F496
message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn
waitmessage waitmessage
tower_save CHALLENGE_STATUS_SAVING tower_save CHALLENGE_STATUS_SAVING
special sub_80A08CC special SaveForBattleTowerLink
waitstate waitstate
playse SE_SAVE playse SE_SAVE
waitse waitse
+11 -11
View File
@@ -767,15 +767,15 @@ LilycoveCity_ContestLobby_EventScript_TrySetUpLinkContest:: @ 821AA15
call_if_eq LilycoveCity_ContestLobby_EventScript_TryLinkGMode call_if_eq LilycoveCity_ContestLobby_EventScript_TryLinkGMode
compare VAR_TEMP_C, 2 compare VAR_TEMP_C, 2
goto_if_ge LilycoveCity_ContestLobby_EventScript_CancelLinkContest goto_if_ge LilycoveCity_ContestLobby_EventScript_CancelLinkContest
compare VAR_RESULT, 4 compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS
goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices
compare VAR_RESULT, 3 compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkDifferentChoices
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkContest goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkContest
compare VAR_RESULT, 6 compare VAR_RESULT, LINKUP_CONNECTION_ERROR
goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkError goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkError
compare VAR_RESULT, 10 compare VAR_RESULT, LINKUP_FAILED_CONTEST_GMODE
goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkModeDifference goto_if_eq LilycoveCity_ContestLobby_EventScript_CancelLinkModeDifference
message3 LilycoveCity_ContestLobby_Text_Transmitting message3 LilycoveCity_ContestLobby_Text_Transmitting
contestlinktransfer contestlinktransfer
@@ -889,22 +889,22 @@ LilycoveCity_ContestLobby_EventScript_DecideLinkLeader:: @ 821ABA6
LilycoveCity_ContestLobby_EventScript_TryLeadGroup:: @ 821ABE3 LilycoveCity_ContestLobby_EventScript_TryLeadGroup:: @ 821ABE3
call LilycoveCity_ContestLobby_EventScript_TryBecomeLinkLeader call LilycoveCity_ContestLobby_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq LilycoveCity_ContestLobby_EventScript_DecideLinkLeader goto_if_eq LilycoveCity_ContestLobby_EventScript_DecideLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq LilycoveCity_ContestLobby_EventScript_TryLeadGroup goto_if_eq LilycoveCity_ContestLobby_EventScript_TryLeadGroup
release release
end end
LilycoveCity_ContestLobby_EventScript_TryJoinGroup:: @ 821AC0B LilycoveCity_ContestLobby_EventScript_TryJoinGroup:: @ 821AC0B
call LilycoveCity_ContestLobby_EventScript_TryJoinLinkGroup call LilycoveCity_ContestLobby_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided goto_if_eq LilycoveCity_ContestLobby_EventScript_LinkLeaderDecided
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq LilycoveCity_ContestLobby_EventScript_DecideLinkLeader goto_if_eq LilycoveCity_ContestLobby_EventScript_DecideLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq LilycoveCity_ContestLobby_EventScript_TryJoinGroup goto_if_eq LilycoveCity_ContestLobby_EventScript_TryJoinGroup
release release
end end
+11 -11
View File
@@ -20,7 +20,7 @@ UnionRoom_OnResume: @ 823D1B1
removeobject 5 removeobject 5
removeobject 4 removeobject 4
removeobject 3 removeobject 3
special UnionRoomSpecial special RunUnionRoom
end end
UnionRoom_OnTransition: @ 823D1E5 UnionRoom_OnTransition: @ 823D1E5
@@ -29,7 +29,7 @@ UnionRoom_OnTransition: @ 823D1E5
UnionRoom_EventScript_Player1:: @ 823D1E6 UnionRoom_EventScript_Player1:: @ 823D1E6
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 1 setvar VAR_RESULT, UR_INTERACT_PLAYER_1
waitstate waitstate
release release
end end
@@ -37,7 +37,7 @@ UnionRoom_EventScript_Player1:: @ 823D1E6
UnionRoom_EventScript_Player2:: @ 823D1F0 UnionRoom_EventScript_Player2:: @ 823D1F0
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 2 setvar VAR_RESULT, UR_INTERACT_PLAYER_2
waitstate waitstate
release release
end end
@@ -45,7 +45,7 @@ UnionRoom_EventScript_Player2:: @ 823D1F0
UnionRoom_EventScript_Player3:: @ 823D1FA UnionRoom_EventScript_Player3:: @ 823D1FA
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 3 setvar VAR_RESULT, UR_INTERACT_PLAYER_3
waitstate waitstate
release release
end end
@@ -53,7 +53,7 @@ UnionRoom_EventScript_Player3:: @ 823D1FA
UnionRoom_EventScript_Player4:: @ 823D204 UnionRoom_EventScript_Player4:: @ 823D204
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 4 setvar VAR_RESULT, UR_INTERACT_PLAYER_4
waitstate waitstate
release release
end end
@@ -61,7 +61,7 @@ UnionRoom_EventScript_Player4:: @ 823D204
UnionRoom_EventScript_Player5:: @ 823D20E UnionRoom_EventScript_Player5:: @ 823D20E
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 5 setvar VAR_RESULT, UR_INTERACT_PLAYER_5
waitstate waitstate
release release
end end
@@ -69,7 +69,7 @@ UnionRoom_EventScript_Player5:: @ 823D20E
UnionRoom_EventScript_Player6:: @ 823D218 UnionRoom_EventScript_Player6:: @ 823D218
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 6 setvar VAR_RESULT, UR_INTERACT_PLAYER_6
waitstate waitstate
release release
end end
@@ -77,7 +77,7 @@ UnionRoom_EventScript_Player6:: @ 823D218
UnionRoom_EventScript_Player7:: @ 823D222 UnionRoom_EventScript_Player7:: @ 823D222
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 7 setvar VAR_RESULT, UR_INTERACT_PLAYER_7
waitstate waitstate
release release
end end
@@ -85,7 +85,7 @@ UnionRoom_EventScript_Player7:: @ 823D222
UnionRoom_EventScript_Player8:: @ 823D22C UnionRoom_EventScript_Player8:: @ 823D22C
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 8 setvar VAR_RESULT, UR_INTERACT_PLAYER_8
waitstate waitstate
release release
end end
@@ -93,14 +93,14 @@ UnionRoom_EventScript_Player8:: @ 823D22C
UnionRoom_EventScript_Attendant:: @ 823D236 UnionRoom_EventScript_Attendant:: @ 823D236
lock lock
faceplayer faceplayer
setvar VAR_RESULT, 9 setvar VAR_RESULT, UR_INTERACT_ATTENDANT
waitstate waitstate
release release
end end
UnionRoom_EventScript_Unused:: @ 823D240 UnionRoom_EventScript_Unused:: @ 823D240
lockall lockall
setvar VAR_RESULT, 10 setvar VAR_RESULT, UR_INTERACT_UNUSED
waitstate waitstate
releaseall releaseall
end end
+11 -11
View File
@@ -600,15 +600,15 @@ BerryBlender_EventScript_TryDoLinkBlender: @ 82940BB
waitmessage waitmessage
special TryBerryBlenderLinkup special TryBerryBlenderLinkup
waitstate waitstate
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq BerryBlender_EventScript_SpawnLinkPartners goto_if_eq BerryBlender_EventScript_SpawnLinkPartners
compare VAR_RESULT, 2 compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
goto_if_eq BerryBlender_EventScript_CloseLinkNotReady goto_if_eq BerryBlender_EventScript_CloseLinkNotReady
compare VAR_RESULT, 3 compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
goto_if_eq BerryBlender_EventScript_CloseLinkDifferentSelections goto_if_eq BerryBlender_EventScript_CloseLinkDifferentSelections
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq BerryBlender_EventScript_CloseLink goto_if_eq BerryBlender_EventScript_CloseLink
compare VAR_RESULT, 6 compare VAR_RESULT, LINKUP_CONNECTION_ERROR
goto_if_eq BerryBlender_EventScript_LinkError goto_if_eq BerryBlender_EventScript_LinkError
end end
@@ -712,22 +712,22 @@ BerryBlender_EventScript_DecideLinkLeader: @ 82941F8
BerryBlender_EventScript_TryLeadGroup: @ 8294235 BerryBlender_EventScript_TryLeadGroup: @ 8294235
call BerryBlender_EventScript_TryBecomeLinkLeader call BerryBlender_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq BerryBlender_EventScript_LinkLeaderDecided goto_if_eq BerryBlender_EventScript_LinkLeaderDecided
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq BerryBlender_EventScript_DecideLinkLeader goto_if_eq BerryBlender_EventScript_DecideLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq BerryBlender_EventScript_TryLeadGroup goto_if_eq BerryBlender_EventScript_TryLeadGroup
release release
end end
BerryBlender_EventScript_TryJoinGroup: @ 829425D BerryBlender_EventScript_TryJoinGroup: @ 829425D
call BerryBlender_EventScript_TryJoinLinkGroup call BerryBlender_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq BerryBlender_EventScript_LinkLeaderDecided goto_if_eq BerryBlender_EventScript_LinkLeaderDecided
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq BerryBlender_EventScript_DecideLinkLeader goto_if_eq BerryBlender_EventScript_DecideLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq BerryBlender_EventScript_TryJoinGroup goto_if_eq BerryBlender_EventScript_TryJoinGroup
release release
end end
+48 -48
View File
@@ -349,17 +349,17 @@ CableClub_EventScript_TryEnterColosseum:: @ 8276F60
waitmessage waitmessage
special TryBattleLinkup special TryBattleLinkup
waitstate waitstate
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterColosseum goto_if_eq CableClub_EventScript_EnterColosseum
compare VAR_RESULT, 2 compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady
compare VAR_RESULT, 3 compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections
compare VAR_RESULT, 4 compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS
goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfBattlers goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfBattlers
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_AbortLink goto_if_eq CableClub_EventScript_AbortLink
compare VAR_RESULT, 6 compare VAR_RESULT, LINKUP_CONNECTION_ERROR
goto_if_eq CableClub_EventScript_AbortLinkConnectionError goto_if_eq CableClub_EventScript_AbortLinkConnectionError
end end
@@ -452,21 +452,21 @@ CableClub_EventScript_TradeCenter:: @ 82770B2
waitmessage waitmessage
special TryTradeLinkup special TryTradeLinkup
waitstate waitstate
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterTradeCenter goto_if_eq CableClub_EventScript_EnterTradeCenter
compare VAR_RESULT, 2 compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady
compare VAR_RESULT, 3 compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections
compare VAR_RESULT, 4 compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS
goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_AbortLink goto_if_eq CableClub_EventScript_AbortLink
compare VAR_RESULT, 6 compare VAR_RESULT, LINKUP_CONNECTION_ERROR
goto_if_eq CableClub_EventScript_AbortLinkConnectionError goto_if_eq CableClub_EventScript_AbortLinkConnectionError
compare VAR_RESULT, 7 compare VAR_RESULT, LINKUP_PLAYER_NOT_READY
goto_if_eq CableClub_EventScript_AbortLinkPlayerNotReady goto_if_eq CableClub_EventScript_AbortLinkPlayerNotReady
compare VAR_RESULT, 9 compare VAR_RESULT, LINKUP_PARTNER_NOT_READY
goto_if_eq CableClub_EventScript_AbortLinkOtherTrainerNotReady goto_if_eq CableClub_EventScript_AbortLinkOtherTrainerNotReady
end end
@@ -527,21 +527,21 @@ CableClub_EventScript_RecordCorner:: @ 82771DB
waitmessage waitmessage
special TryRecordMixLinkup special TryRecordMixLinkup
waitstate waitstate
special sub_80B2EA8 special ValidateMixingGameLanguage
waitstate waitstate
compare VAR_RESULT, 12 compare VAR_RESULT, LINKUP_FOREIGN_GAME
goto_if_eq CableClub_EventScript_AbortLinkForeignGame goto_if_eq CableClub_EventScript_AbortLinkForeignGame
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterRecordCorner goto_if_eq CableClub_EventScript_EnterRecordCorner
compare VAR_RESULT, 2 compare VAR_RESULT, LINKUP_SOMEONE_NOT_READY
goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady goto_if_eq CableClub_EventScript_AbortLinkSomeoneNotReady
compare VAR_RESULT, 3 compare VAR_RESULT, LINKUP_DIFF_SELECTIONS
goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections goto_if_eq CableClub_EventScript_AbortLinkDifferentSelections
compare VAR_RESULT, 4 compare VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS
goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants goto_if_eq CableClub_EventScript_AbortLinkIncorrectNumberOfParticipants
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_AbortLink goto_if_eq CableClub_EventScript_AbortLink
compare VAR_RESULT, 6 compare VAR_RESULT, LINKUP_CONNECTION_ERROR
goto_if_eq CableClub_EventScript_AbortLinkConnectionError goto_if_eq CableClub_EventScript_AbortLinkConnectionError
end end
@@ -972,7 +972,7 @@ CableClub_EventScript_EnterUnionRoom:: @ 827759F
special SetCableClubWarp special SetCableClubWarp
warpteleport2 MAP_UNION_ROOM, 255, 7, 11 warpteleport2 MAP_UNION_ROOM, 255, 7, 11
waitstate waitstate
special UnionRoomSpecial special RunUnionRoom
waitstate waitstate
end end
@@ -1181,22 +1181,22 @@ CableClub_EventScript_ChooseLinkLeaderFrom2:: @ 8277989
CableClub_EventScript_TryLeadGroup2Players:: @ 82779C6 CableClub_EventScript_TryLeadGroup2Players:: @ 82779C6
call CableClub_EventScript_TryBecomeLinkLeader call CableClub_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2 goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq CableClub_EventScript_TryLeadGroup2Players goto_if_eq CableClub_EventScript_TryLeadGroup2Players
release release
return return
CableClub_EventScript_TryJoinGroup2Players:: @ 82779EE CableClub_EventScript_TryJoinGroup2Players:: @ 82779EE
call CableClub_EventScript_TryJoinLinkGroup call CableClub_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2 goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom2
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq CableClub_EventScript_TryJoinGroup2Players goto_if_eq CableClub_EventScript_TryJoinGroup2Players
release release
return return
@@ -1214,22 +1214,22 @@ CableClub_EventScript_ChooseLinkLeaderFrom4:: @ 8277A16
CableClub_EventScript_TryLeadGroup4Players:: @ 8277A53 CableClub_EventScript_TryLeadGroup4Players:: @ 8277A53
call CableClub_EventScript_TryBecomeLinkLeader call CableClub_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4 goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq CableClub_EventScript_TryLeadGroup4Players goto_if_eq CableClub_EventScript_TryLeadGroup4Players
release release
return return
CableClub_EventScript_TryJoinGroup4Players:: @ 8277A7B CableClub_EventScript_TryJoinGroup4Players:: @ 8277A7B
call CableClub_EventScript_TryJoinLinkGroup call CableClub_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4 goto_if_eq CableClub_EventScript_ChooseLinkLeaderFrom4
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq CableClub_EventScript_TryJoinGroup4Players goto_if_eq CableClub_EventScript_TryJoinGroup4Players
release release
return return
@@ -1247,22 +1247,22 @@ CableClub_EventScript_ChooseLinkLeader:: @ 8277AA3
CableClub_EventScript_TryLeadGroupXPlayers:: @ 8277AE0 CableClub_EventScript_TryLeadGroupXPlayers:: @ 8277AE0
call CableClub_EventScript_TryBecomeLinkLeader call CableClub_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_ChooseLinkLeader goto_if_eq CableClub_EventScript_ChooseLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq CableClub_EventScript_TryLeadGroupXPlayers goto_if_eq CableClub_EventScript_TryLeadGroupXPlayers
release release
return return
CableClub_EventScript_TryJoinGroupXPlayers:: @ 8277B08 CableClub_EventScript_TryJoinGroupXPlayers:: @ 8277B08
call CableClub_EventScript_TryJoinLinkGroup call CableClub_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom goto_if_eq CableClub_EventScript_EnterWirelessLinkRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq CableClub_EventScript_ChooseLinkLeader goto_if_eq CableClub_EventScript_ChooseLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq CableClub_EventScript_TryJoinGroupXPlayers goto_if_eq CableClub_EventScript_TryJoinGroupXPlayers
release release
return return
@@ -1310,7 +1310,7 @@ EventScript_WirelessBoxResults:: @ 8277B8A
compare VAR_RESULT, FALSE compare VAR_RESULT, FALSE
goto_if_eq CableClub_EventScript_AdapterNotConnected goto_if_eq CableClub_EventScript_AdapterNotConnected
fadescreen FADE_TO_BLACK fadescreen FADE_TO_BLACK
special sub_801A42C special ShowWirelessCommunicationScreen
waitstate waitstate
msgbox CableClub_Text_ParticipantsStepUpToCounter, MSGBOX_DEFAULT msgbox CableClub_Text_ParticipantsStepUpToCounter, MSGBOX_DEFAULT
releaseall releaseall
@@ -1453,22 +1453,22 @@ MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader:: @ 8277D81
MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader:: @ 8277DBE MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader:: @ 8277DBE
call CableClub_EventScript_TryBecomeLinkLeader call CableClub_EventScript_TryBecomeLinkLeader
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom goto_if_eq MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader goto_if_eq MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryBecomeLinkLeader
release release
return return
MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup:: @ 8277DE6 MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup:: @ 8277DE6
call CableClub_EventScript_TryJoinLinkGroup call CableClub_EventScript_TryJoinLinkGroup
compare VAR_RESULT, 1 compare VAR_RESULT, LINKUP_SUCCESS
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom goto_if_eq MossdeepCity_GameCorner_1F_EventScript_EnterMinigameRoom
compare VAR_RESULT, 5 compare VAR_RESULT, LINKUP_FAILED
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader goto_if_eq MossdeepCity_GameCorner_1F_EventScript_ChooseLinkLeader
compare VAR_RESULT, 8 compare VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN
goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup goto_if_eq MossdeepCity_GameCorner_1F_EventScript_TryJoinLinkGroup
release release
return return
+4 -4
View File
@@ -39,7 +39,7 @@ gSpecials:: @ 81DBA64
def_special TryBattleLinkup def_special TryBattleLinkup
def_special TryTradeLinkup def_special TryTradeLinkup
def_special TryRecordMixLinkup def_special TryRecordMixLinkup
def_special sub_80B2EA8 def_special ValidateMixingGameLanguage
def_special CloseLink def_special CloseLink
def_special ColosseumPlayerSpotTriggered def_special ColosseumPlayerSpotTriggered
def_special PlayerEnteredTradeSeat def_special PlayerEnteredTradeSeat
@@ -426,8 +426,8 @@ gSpecials:: @ 81DBA64
def_special IsWirelessAdapterConnected def_special IsWirelessAdapterConnected
def_special TryBecomeLinkLeader def_special TryBecomeLinkLeader
def_special TryJoinLinkGroup def_special TryJoinLinkGroup
def_special UnionRoomSpecial def_special RunUnionRoom
def_special sub_801A42C def_special ShowWirelessCommunicationScreen
def_special InitUnionRoom def_special InitUnionRoom
def_special BufferUnionRoomPlayerName def_special BufferUnionRoomPlayerName
def_special sub_801DC20 def_special sub_801DC20
@@ -502,7 +502,7 @@ gSpecials:: @ 81DBA64
def_special CreateAbnormalWeatherEvent def_special CreateAbnormalWeatherEvent
def_special GetAbnormalWeatherMapNameAndType def_special GetAbnormalWeatherMapNameAndType
def_special GetMartEmployeeObjectEventId def_special GetMartEmployeeObjectEventId
def_special sub_80A08CC def_special SaveForBattleTowerLink
def_special Unused_SetWeatherSunny def_special Unused_SetWeatherSunny
def_special SetUnlockedPokedexFlags def_special SetUnlockedPokedexFlags
def_special IsTrainerRegistered def_special IsTrainerRegistered
+177 -89
View File
@@ -1,95 +1,183 @@
#ifndef GUARD_TEXT_H #ifndef GUARD_TEXT_H
#define GUARD_TEXT_H #define GUARD_TEXT_H
#define CHAR_SPACE 0x00 #define CHAR_SPACE 0x00
#define CHAR_PLUS 0x2E #define CHAR_A_GRAVE 0x01
#define CHAR_0 0xA1 #define CHAR_A_ACUTE 0x02
#define CHAR_1 0xA2 #define CHAR_A_CIRCUMFLEX 0x03
#define CHAR_2 0xA3 #define CHAR_C_CEDILLA 0x04
#define CHAR_3 0xA4 #define CHAR_E_GRAVE 0x05
#define CHAR_4 0xA5 #define CHAR_E_ACUTE 0x06
#define CHAR_5 0xA6 #define CHAR_E_CIRCUMFLEX 0x07
#define CHAR_6 0xA7 #define CHAR_E_DIAERESIS 0x08
#define CHAR_7 0xA8 #define CHAR_I_GRAVE 0x09
#define CHAR_8 0xA9 //#define CHAR_I_ACUTE 0x0A // Is 0x5A instead
#define CHAR_9 0xAA #define CHAR_I_CIRCUMFLEX 0x0B
#define CHAR_EXCL_MARK 0xAB #define CHAR_I_DIAERESIS 0x0C
#define CHAR_QUESTION_MARK 0xAC #define CHAR_O_GRAVE 0x0D
#define CHAR_PERIOD 0xAD #define CHAR_O_ACUTE 0x0E
#define CHAR_HYPHEN 0xAE #define CHAR_O_CIRCUMFLEX 0x0F
#define CHAR_ELLIPSIS 0xB0 #define CHAR_OE 0x10
#define CHAR_DBL_QUOT_LEFT 0xB1 #define CHAR_U_GRAVE 0x11
#define CHAR_DBL_QUOT_RIGHT 0xB2 #define CHAR_U_ACUTE 0x12
#define CHAR_SGL_QUOT_LEFT 0xB3 #define CHAR_U_CIRCUMFLEX 0x13
#define CHAR_SGL_QUOT_RIGHT 0xB4 #define CHAR_N_TILDE 0x14
#define CHAR_MALE 0xB5 #define CHAR_ESZETT 0x15
#define CHAR_FEMALE 0xB6 #define CHAR_a_GRAVE 0x16
#define CHAR_CURRENCY 0xB7 #define CHAR_a_ACUTE 0x17
#define CHAR_COMMA 0xB8 //#define CHAR_a_CIRCUMFLEX 0x18 // Is 0x68 instead
#define CHAR_MULT_SIGN 0xB9 #define CHAR_c_CEDILLA 0x19
#define CHAR_SLASH 0xBA #define CHAR_e_GRAVE 0x1A
#define CHAR_A 0xBB #define CHAR_e_ACUTE 0x1B
#define CHAR_B 0xBC #define CHAR_e_CIRCUMFLEX 0x1C
#define CHAR_C 0xBD #define CHAR_e_DIAERESIS 0x1D
#define CHAR_D 0xBE #define CHAR_i_GRAVE 0x1E
#define CHAR_E 0xBF //#define CHAR_i_ACUTE 0x1F // Is 0x6F instead
#define CHAR_F 0xC0 #define CHAR_i_CIRCUMFLEX 0x20
#define CHAR_G 0xC1 #define CHAR_i_DIAERESIS 0x21
#define CHAR_H 0xC2 #define CHAR_o_GRAVE 0x22
#define CHAR_I 0xC3 #define CHAR_o_ACUTE 0x23
#define CHAR_J 0xC4 #define CHAR_o_CIRCUMFLEX 0x24
#define CHAR_K 0xC5 #define CHAR_oe 0x25
#define CHAR_L 0xC6 #define CHAR_u_GRAVE 0x26
#define CHAR_M 0xC7 #define CHAR_u_ACUTE 0x27
#define CHAR_N 0xC8 #define CHAR_u_CIRCUMFLEX 0x28
#define CHAR_O 0xC9 #define CHAR_n_TILDE 0x29
#define CHAR_P 0xCA #define CHAR_MASCULINE_ORDINAL 0x2A
#define CHAR_Q 0xCB #define CHAR_FEMININE_ORDINAL 0x2B
#define CHAR_R 0xCC #define CHAR_SUPER_ER 0x2C
#define CHAR_S 0xCD #define CHAR_AMPERSAND 0x2D
#define CHAR_T 0xCE #define CHAR_PLUS 0x2E
#define CHAR_U 0xCF //
#define CHAR_V 0xD0 #define CHAR_LV 0x34
#define CHAR_W 0xD1 #define CHAR_EQUALS 0x35
#define CHAR_X 0xD2 #define CHAR_SEMICOLON 0x36
#define CHAR_Y 0xD3 //
#define CHAR_Z 0xD4 #define CHAR_INV_QUESTION_MARK 0x51
#define CHAR_a 0xD5 #define CHAR_INV_EXCL_MARK 0x52
#define CHAR_b 0xD6 #define CHAR_PK 0x53
#define CHAR_c 0xD7 #define CHAR_MN 0x54
#define CHAR_d 0xD8 #define CHAR_PO 0x55
#define CHAR_e 0xD9 #define CHAR_KE 0x56
#define CHAR_f 0xDA #define CHAR_BLOCK_1 0x57 // Each of these 3
#define CHAR_g 0xDB #define CHAR_BLOCK_2 0x58 // chars contains 1/3
#define CHAR_h 0xDC #define CHAR_BLOCK_3 0x59 // of the word BLOCK
#define CHAR_i 0xDD #define CHAR_I_ACUTE 0x5A
#define CHAR_j 0xDE #define CHAR_PERCENT 0x5B
#define CHAR_k 0xDF #define CHAR_LEFT_PAREN 0x5C
#define CHAR_l 0xE0 #define CHAR_RIGHT_PAREN 0x5D
#define CHAR_m 0xE1 //
#define CHAR_n 0xE2 #define CHAR_a_CIRCUMFLEX 0x68
#define CHAR_o 0xE3 //
#define CHAR_p 0xE4 #define CHAR_i_ACUTE 0x6F
#define CHAR_q 0xE5 //
#define CHAR_r 0xE6 #define CHAR_UNK_SPACER 0x77
#define CHAR_s 0xE7 //
#define CHAR_t 0xE8 #define CHAR_UP_ARROW 0x79
#define CHAR_u 0xE9 #define CHAR_DOWN_ARROW 0x7A
#define CHAR_v 0xEA #define CHAR_LEFT_ARROW 0x7B
#define CHAR_w 0xEB #define CHAR_RIGHT_ARROW 0x7C
#define CHAR_x 0xEC //
#define CHAR_y 0xED #define CHAR_SUPER_E 0x84
#define CHAR_z 0xEE #define CHAR_LESS_THAN 0x85
#define CHAR_SPECIAL_F7 0xF7 #define CHAR_GREATER_THAN 0x86
#define CHAR_SPECIAL_F8 0xF8 //
#define CHAR_SPECIAL_F9 0xF9 #define CHAR_SUPER_RE 0xA0
#define CHAR_COLON 0xF0 #define CHAR_0 0xA1
#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog #define CHAR_1 0xA2
#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog #define CHAR_2 0xA3
#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code #define CHAR_3 0xA4
#define PLACEHOLDER_BEGIN 0xFD // string placeholder #define CHAR_4 0xA5
#define CHAR_NEWLINE 0xFE #define CHAR_5 0xA6
#define EOS 0xFF // end of string #define CHAR_6 0xA7
#define CHAR_7 0xA8
#define CHAR_8 0xA9
#define CHAR_9 0xAA
#define CHAR_EXCL_MARK 0xAB
#define CHAR_QUESTION_MARK 0xAC
#define CHAR_PERIOD 0xAD
#define CHAR_HYPHEN 0xAE
#define CHAR_BULLET 0xAF
#define CHAR_ELLIPSIS 0xB0
#define CHAR_DBL_QUOT_LEFT 0xB1
#define CHAR_DBL_QUOT_RIGHT 0xB2
#define CHAR_SGL_QUOT_LEFT 0xB3
#define CHAR_SGL_QUOT_RIGHT 0xB4
#define CHAR_MALE 0xB5
#define CHAR_FEMALE 0xB6
#define CHAR_CURRENCY 0xB7
#define CHAR_COMMA 0xB8
#define CHAR_MULT_SIGN 0xB9
#define CHAR_SLASH 0xBA
#define CHAR_A 0xBB
#define CHAR_B 0xBC
#define CHAR_C 0xBD
#define CHAR_D 0xBE
#define CHAR_E 0xBF
#define CHAR_F 0xC0
#define CHAR_G 0xC1
#define CHAR_H 0xC2
#define CHAR_I 0xC3
#define CHAR_J 0xC4
#define CHAR_K 0xC5
#define CHAR_L 0xC6
#define CHAR_M 0xC7
#define CHAR_N 0xC8
#define CHAR_O 0xC9
#define CHAR_P 0xCA
#define CHAR_Q 0xCB
#define CHAR_R 0xCC
#define CHAR_S 0xCD
#define CHAR_T 0xCE
#define CHAR_U 0xCF
#define CHAR_V 0xD0
#define CHAR_W 0xD1
#define CHAR_X 0xD2
#define CHAR_Y 0xD3
#define CHAR_Z 0xD4
#define CHAR_a 0xD5
#define CHAR_b 0xD6
#define CHAR_c 0xD7
#define CHAR_d 0xD8
#define CHAR_e 0xD9
#define CHAR_f 0xDA
#define CHAR_g 0xDB
#define CHAR_h 0xDC
#define CHAR_i 0xDD
#define CHAR_j 0xDE
#define CHAR_k 0xDF
#define CHAR_l 0xE0
#define CHAR_m 0xE1
#define CHAR_n 0xE2
#define CHAR_o 0xE3
#define CHAR_p 0xE4
#define CHAR_q 0xE5
#define CHAR_r 0xE6
#define CHAR_s 0xE7
#define CHAR_t 0xE8
#define CHAR_u 0xE9
#define CHAR_v 0xEA
#define CHAR_w 0xEB
#define CHAR_x 0xEC
#define CHAR_y 0xED
#define CHAR_z 0xEE
#define CHAR_BLACK_TRIANGLE 0xEF
#define CHAR_COLON 0xF0
#define CHAR_A_DIAERESIS 0xF1
#define CHAR_O_DIAERESIS 0xF2
#define CHAR_U_DIAERESIS 0xF3
#define CHAR_a_DIAERESIS 0xF4
#define CHAR_o_DIAERESIS 0xF5
#define CHAR_u_DIAERESIS 0xF6
#define CHAR_SPECIAL_F7 0xF7
#define CHAR_SPECIAL_F8 0xF8
#define CHAR_SPECIAL_F9 0xF9
#define CHAR_PROMPT_SCROLL 0xFA // waits for button press and scrolls dialog
#define CHAR_PROMPT_CLEAR 0xFB // waits for button press and clears dialog
#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code
#define PLACEHOLDER_BEGIN 0xFD // string placeholder
#define CHAR_NEWLINE 0xFE
#define EOS 0xFF // end of string
// Special F9 chars // Special F9 chars
#define CHAR_UP_ARROW_2 0x00 #define CHAR_UP_ARROW_2 0x00
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.
+1 -1
View File
@@ -3,6 +3,6 @@
#include "main.h" #include "main.h"
void sub_8020C70(MainCallback callback); void StartBerryCrush(MainCallback callback);
#endif // GUARD_BERRY_CRUSH_H #endif // GUARD_BERRY_CRUSH_H
+5 -11
View File
@@ -3,18 +3,12 @@
#include "task.h" #include "task.h"
// Exported type declarations void CreateTask_EnterCableClubSeat(TaskFunc taskFunc);
u8 CreateTask_ReestablishCableClubLink(void);
// Exported RAM declarations void CB2_ReturnFromCableClubBattle(void);
bool32 AreBattleTowerLinkSpeciesSame(u16 *speciesList1, u16 *speciesList2);
// Exported ROM declarations
void sub_80B37D4(TaskFunc taskFunc);
u8 sub_80B3050(void);
void sub_80B360C(void);
bool32 sub_80B2AF4(u16 *arg0, u16 *arg1);
void sub_80B3AF8(u8 taskId); void sub_80B3AF8(u8 taskId);
void task00_08081A90(u8 taskId); void Task_WaitForLinkPlayerConnection(u8 taskId);
bool32 GetLinkTrainerCardColor(u8 linkPlayerIndex); bool32 GetLinkTrainerCardColor(u8 linkPlayerIndex);
#endif //GUARD_CABLE_CLUB_H #endif //GUARD_CABLE_CLUB_H
+8
View File
@@ -26,4 +26,12 @@
#define UNITS_METRIC #define UNITS_METRIC
#endif #endif
// Various undefined behavior bugs may or may not prevent compilation with
// newer compilers. So always fix them when using a modern compiler.
#if MODERN
#ifndef UBFIX
#define UBFIX
#endif
#endif
#endif // GUARD_CONFIG_H #endif // GUARD_CONFIG_H
+16
View File
@@ -12,4 +12,20 @@
#define USING_MINIGAME 8 #define USING_MINIGAME 8
#define USING_BATTLE_TOWER 9 #define USING_BATTLE_TOWER 9
// Return states for the group of specials that use CreateLinkupTask
// A few also used by TryBecomeLinkLeader and TryJoinLinkGroup
#define LINKUP_ONGOING 0
#define LINKUP_SUCCESS 1
#define LINKUP_SOMEONE_NOT_READY 2
#define LINKUP_DIFF_SELECTIONS 3
#define LINKUP_WRONG_NUM_PLAYERS 4
#define LINKUP_FAILED 5
#define LINKUP_CONNECTION_ERROR 6
#define LINKUP_PLAYER_NOT_READY 7
#define LINKUP_RETRY_ROLE_ASSIGN 8
#define LINKUP_PARTNER_NOT_READY 9
#define LINKUP_FAILED_CONTEST_GMODE 10
#define LINKUP_FAILED_BATTLE_TOWER 11
#define LINKUP_FOREIGN_GAME 12
#endif //GUARD_CONSTANTS_CABLE_CLUB_H #endif //GUARD_CONSTANTS_CABLE_CLUB_H
+1
View File
@@ -53,6 +53,7 @@
#define APPRENTICE_MAX_QUESTIONS 9 #define APPRENTICE_MAX_QUESTIONS 9
#define MAX_REMATCH_ENTRIES 100 // only REMATCH_TABLE_ENTRIES (78) are used #define MAX_REMATCH_ENTRIES 100 // only REMATCH_TABLE_ENTRIES (78) are used
#define NUM_CONTEST_WINNERS 13 #define NUM_CONTEST_WINNERS 13
#define UNION_ROOM_KB_ROW_COUNT 10
#define PYRAMID_BAG_ITEMS_COUNT 10 #define PYRAMID_BAG_ITEMS_COUNT 10
#define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode. #define HALL_FACILITIES_COUNT 9 // 7 facilities for single mode + tower double mode + tower multi mode.
+1 -1
View File
@@ -13,7 +13,7 @@
#define TRAINER_PLAYER 1023 #define TRAINER_PLAYER 1023
#define TRAINER_SECRET_BASE 1024 #define TRAINER_SECRET_BASE 1024
#define TRAINER_LINK_OPPONENT 2048 #define TRAINER_LINK_OPPONENT 2048
#define TRAINER_OPPONENT_C00 3072 #define TRAINER_UNION_ROOM 3072
#define TRAINER_STEVEN_PARTNER 3075 #define TRAINER_STEVEN_PARTNER 3075
#define TRAINER_PIC_HIKER 0 #define TRAINER_PIC_HIKER 0
+76 -2
View File
@@ -1,6 +1,60 @@
#ifndef GUARD_CONSTANTS_UNION_ROOM_H #ifndef GUARD_CONSTANTS_UNION_ROOM_H
#define GUARD_CONSTANTS_UNION_ROOM_H #define GUARD_CONSTANTS_UNION_ROOM_H
#define MAX_UNION_ROOM_PLAYERS 8
#define UNION_ROOM_SPAWN_NONE 0
#define UNION_ROOM_SPAWN_IN 1
#define UNION_ROOM_SPAWN_OUT 2
#define ACTIVITY_NONE 0
#define ACTIVITY_BATTLE_SINGLE 1
#define ACTIVITY_BATTLE_DOUBLE 2
#define ACTIVITY_BATTLE_MULTI 3
#define ACTIVITY_TRADE 4
#define ACTIVITY_CHAT 5
#define ACTIVITY_WONDER_CARD 6
#define ACTIVITY_WONDER_NEWS 7
#define ACTIVITY_CARD 8
#define ACTIVITY_POKEMON_JUMP 9
#define ACTIVITY_BERRY_CRUSH 10
#define ACTIVITY_BERRY_PICK 11
#define ACTIVITY_SEARCH 12
#define ACTIVITY_SPIN_TRADE 13
#define ACTIVITY_BATTLE_TOWER_OPEN 14
#define ACTIVITY_RECORD_CORNER 15
#define ACTIVITY_BERRY_BLENDER 16
// Player response
#define ACTIVITY_ACCEPT 17
#define ACTIVITY_DECLINE 18
#define ACTIVITY_NPCTALK 19
#define ACTIVITY_PLYRTALK 20
// Duplicate IDs?
#define ACTIVITY_WONDER_CARD2 21
#define ACTIVITY_WONDER_NEWS2 22
#define ACTIVITY_CONTEST_COOL 23
#define ACTIVITY_CONTEST_BEAUTY 24
#define ACTIVITY_CONTEST_CUTE 25
#define ACTIVITY_CONTEST_SMART 26
#define ACTIVITY_CONTEST_TOUGH 27
#define ACTIVITY_BATTLE_TOWER 28
#define ACTIVITY_29 29
#define IN_UNION_ROOM (1 << 6)
// Used in UR_AddTextPrinterParameterized
#define UR_COLOR_DKE_WHT_LTE 0
#define UR_COLOR_RED_WHT_LTR 1
#define UR_COLOR_GRN_WHT_LTG 2
#define UR_COLOR_WHT_WHT_LTE 3
#define UR_COLOR_WHT_DKE_LTE 4
#define UR_COLOR_GRN_DN6_LTB 5
#define UR_COLOR_DN5_DN6_LTB 6
#define LINK_GROUP_SINGLE_BATTLE 0 #define LINK_GROUP_SINGLE_BATTLE 0
#define LINK_GROUP_DOUBLE_BATTLE 1 #define LINK_GROUP_DOUBLE_BATTLE 1
#define LINK_GROUP_MULTI_BATTLE 2 #define LINK_GROUP_MULTI_BATTLE 2
@@ -10,8 +64,8 @@
#define LINK_GROUP_BERRY_PICKING 6 #define LINK_GROUP_BERRY_PICKING 6
#define LINK_GROUP_WONDER_CARD 7 #define LINK_GROUP_WONDER_CARD 7
#define LINK_GROUP_WONDER_NEWS 8 #define LINK_GROUP_WONDER_NEWS 8
#define LINK_GROUP_UNK_9 9 #define LINK_GROUP_UNION_ROOM_RESUME 9
#define LINK_GROUP_UNK_10 10 #define LINK_GROUP_UNION_ROOM_INIT 10
#define LINK_GROUP_UNK_11 11 #define LINK_GROUP_UNK_11 11
#define LINK_GROUP_RECORD_CORNER 12 #define LINK_GROUP_RECORD_CORNER 12
#define LINK_GROUP_BERRY_BLENDER 13 #define LINK_GROUP_BERRY_BLENDER 13
@@ -25,4 +79,24 @@
#define LINK_GROUP_BATTLE_TOWER_OPEN 21 #define LINK_GROUP_BATTLE_TOWER_OPEN 21
#define NUM_LINK_GROUP_TYPES 22 #define NUM_LINK_GROUP_TYPES 22
#define UR_TRADE_MATCH 0
#define UR_TRADE_NOTYPE 1
#define UR_TRADE_NOEGG 2
#define UR_TRADE_READY 0
#define UR_TRADE_PLAYER_NOT_READY 1
#define UR_TRADE_PARTNER_NOT_READY 2
#define UR_INTERACT_PLAYER_1 1
#define UR_INTERACT_PLAYER_2 2
#define UR_INTERACT_PLAYER_3 3
#define UR_INTERACT_PLAYER_4 4
#define UR_INTERACT_PLAYER_5 5
#define UR_INTERACT_PLAYER_6 6
#define UR_INTERACT_PLAYER_7 7
#define UR_INTERACT_PLAYER_8 8
#define UR_INTERACT_ATTENDANT 9
#define UR_INTERACT_UNUSED 10
#define UR_INTERACT_START_MENU 11
#endif //GUARD_CONSTANTS_UNION_ROOM_H #endif //GUARD_CONSTANTS_UNION_ROOM_H
+1 -1
View File
@@ -1,7 +1,7 @@
#ifndef GUARD_DODRIO_BERRY_PICKING_H #ifndef GUARD_DODRIO_BERRY_PICKING_H
#define GUARD_DODRIO_BERRY_PICKING_H #define GUARD_DODRIO_BERRY_PICKING_H
void sub_802493C(u16 a0, void (*callback)(void)); void StartDodrioBerryPicking(u16 a0, void (*callback)(void));
void IsDodrioInParty(void); void IsDodrioInParty(void);
void ShowDodrioBerryPickingRecords(void); void ShowDodrioBerryPickingRecords(void);
+1 -1
View File
@@ -8,6 +8,6 @@ void LockSelectedObjectEvent(void);
void sub_8098630(void); void sub_8098630(void);
bool8 sub_8098734(void); bool8 sub_8098734(void);
void ScriptUnfreezeObjectEvents(void); void ScriptUnfreezeObjectEvents(void);
void sub_8098524(void); void UnionRoom_UnlockPlayerAndChatPartner(void);
#endif // GUARD_EVENT_OBJECT_LOCK_H #endif // GUARD_EVENT_OBJECT_LOCK_H
+9 -9
View File
@@ -81,11 +81,11 @@ void sub_808E16C(s16, s16);
void OverrideSecretBaseDecorationSpriteScript(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat); void OverrideSecretBaseDecorationSpriteScript(u8 localId, u8 mapNum, u8 mapGroup, u8 decorCat);
void sub_8092FF0(s16, s16, s16 *, s16 *); void sub_8092FF0(s16, s16, s16 *, s16 *);
u8 GetFaceDirectionAnimNum(u8); u8 GetFaceDirectionAnimNum(u8);
void sub_80930E0(s16 *, s16 *, s16, s16); void SetSpritePosToOffsetMapCoords(s16 *, s16 *, s16, s16);
void ObjectEventClearHeldMovement(struct ObjectEvent *); void ObjectEventClearHeldMovement(struct ObjectEvent *);
void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *); void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *);
void TrySpawnObjectEvents(s16, s16); void TrySpawnObjectEvents(s16, s16);
u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction); u8 CreateObjectSprite(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction);
u8 AddPseudoObjectEvent(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority); u8 AddPseudoObjectEvent(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority);
u8 TrySpawnObjectEvent(u8, u8, u8); u8 TrySpawnObjectEvent(u8, u8, u8);
u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z); u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z);
@@ -180,7 +180,7 @@ void CreateLevitateMovementTask(struct ObjectEvent *);
void DestroyExtraMovementTask(u8); void DestroyExtraMovementTask(u8);
void UnfreezeObjectEvents(void); void UnfreezeObjectEvents(void);
void FreezeObjectEventsExceptOne(u8 objectEventId); void FreezeObjectEventsExceptOne(u8 objectEventId);
void sub_8097B78(u8, u8); void TurnObjectEventSprite(u8, u8);
void sub_8098074(u8 var1, u8 var2); void sub_8098074(u8 var1, u8 var2);
void FreezeObjectEvents(void); void FreezeObjectEvents(void);
bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent); bool8 FreezeObjectEvent(struct ObjectEvent *objectEvent);
@@ -194,7 +194,7 @@ void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible);
s16 sub_809773C(s16 a1); s16 sub_809773C(s16 a1);
s16 sub_8097728(s16 a1); s16 sub_8097728(s16 a1);
void CameraObjectReset2(void); void CameraObjectReset2(void);
u8 ObjectEventGetBerryTreeId(u8 objectEventId); u8 GetObjectEventBerryTreeId(u8 objectEventId);
void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup); void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup);
bool8 IsBerryTreeSparkling(u8, u8, u8); bool8 IsBerryTreeSparkling(u8, u8, u8);
@@ -414,10 +414,10 @@ u8 MovementType_RunInPlace_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementType_Invisible_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementType_Invisible_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step1(struct ObjectEvent *, struct Sprite *);
u8 MovementType_Invisible_Step2(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step2(struct ObjectEvent *, struct Sprite *);
void sub_8097C44(u8 var, bool32 var2); void SetObjectEventSpriteInvisibility(u8 var, bool32 var2);
bool32 sub_8097C8C(u8 var); bool32 IsObjectEventSpriteInvisible(u8 var);
void sub_8097BB4(u8 var1, u8 graphicsId); void SetObjectEventSpriteGraphics(u8 var1, u8 graphicsId);
void sub_8097CC4(u8 var1, u8 var2); void SetObjectEventSpriteAnim(u8 var1, u8 var2);
bool32 sub_8097D9C(u8 var); bool32 IsObjectEventSpriteAnimating(u8 var);
#endif //GUARD_EVENT_OBJECT_MOVEMENT_H #endif //GUARD_EVENT_OBJECT_MOVEMENT_H
+1 -1
View File
@@ -43,6 +43,7 @@ void copy_map_tileset1_to_vram(const struct MapLayout *);
void copy_map_tileset2_to_vram(const struct MapLayout *); void copy_map_tileset2_to_vram(const struct MapLayout *);
struct MapHeader const *const mapconnection_get_mapheader(struct MapConnection *connection); struct MapHeader const *const mapconnection_get_mapheader(struct MapConnection *connection);
struct MapConnection *GetConnectionAtCoords(s16 x, s16 y); struct MapConnection *GetConnectionAtCoords(s16 x, s16 y);
void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable);
void SpriteCB_PokeballGlow(struct Sprite *); void SpriteCB_PokeballGlow(struct Sprite *);
void SpriteCB_PokecenterMonitor(struct Sprite *); void SpriteCB_PokecenterMonitor(struct Sprite *);
@@ -50,6 +51,5 @@ void SpriteCB_HallOfFameMonitor(struct Sprite *);
// field_region_map.c // field_region_map.c
void FieldInitRegionMap(MainCallback callback); void FieldInitRegionMap(MainCallback callback);
void sub_8088B94(int x, int y, int a2);
#endif //GUARD_FIELDMAP_H #endif //GUARD_FIELDMAP_H
+3
View File
@@ -27,6 +27,9 @@ typedef double f64;
typedef u8 bool8; typedef u8 bool8;
typedef u16 bool16; typedef u16 bool16;
typedef u32 bool32; typedef u32 bool32;
typedef vu8 vbool8;
typedef vu16 vbool16;
typedef vu32 vbool32;
struct BgCnt struct BgCnt
{ {
+1 -1
View File
@@ -974,7 +974,7 @@ struct SaveBlock1
/*0x3B24*/ u8 seen2[DEX_FLAGS_NO]; /*0x3B24*/ u8 seen2[DEX_FLAGS_NO];
/*0x3B58*/ LilycoveLady lilycoveLady; /*0x3B58*/ LilycoveLady lilycoveLady;
/*0x3B98*/ struct TrainerNameRecord trainerNameRecords[20]; /*0x3B98*/ struct TrainerNameRecord trainerNameRecords[20];
/*0x3C88*/ u8 unk3C88[10][21]; /*0x3C88*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
/*0x3D5A*/ u8 filler3D5A[0xA]; /*0x3D5A*/ u8 filler3D5A[0xA];
/*0x3D64*/ struct SaveTrainerHill trainerHill; /*0x3D64*/ struct SaveTrainerHill trainerHill;
/*0x3D70*/ struct WaldaPhrase waldaPhrase; /*0x3D70*/ struct WaldaPhrase waldaPhrase;
+7
View File
@@ -18,6 +18,13 @@ typedef union // size = 0x24
/*0x23*/ u8 trainerIdHi; /*0x23*/ u8 trainerIdHi;
} common; } common;
// Common init (used for initialization loop)
struct {
/*0x00*/ u8 kind;
/*0x01*/ bool8 active;
/*0x02*/ u8 pad02[34];
} commonInit;
// Local shows // Local shows
// TVSHOW_FAN_CLUB_LETTER // TVSHOW_FAN_CLUB_LETTER
struct { struct {
+8 -8
View File
@@ -4986,14 +4986,14 @@ extern const u16 gEasyChatRightWindow_Pal[];
extern const u32 gUsePokeblockCondition_Gfx[]; extern const u32 gUsePokeblockCondition_Gfx[];
// Union Room Chat // Union Room Chat
extern const u16 gUnknown_08DD4BB0[]; extern const u16 gUnionRoomChat_Background_Pal[];
extern const u16 gUnknown_08DD4BD0[]; extern const u32 gUnionRoomChat_Background_Gfx[];
extern const u32 gUnknown_08DD4BF0[]; extern const u32 gUnionRoomChat_Background_Tilemap[];
extern const u32 gUnknown_08DD4C4C[]; extern const u16 gUnionRoomChat_Window_Pal1[];
extern const u32 gUnknown_08DD4CF8[]; extern const u16 gUnionRoomChat_Window_Pal2[];
extern const u16 gLinkMiscMenu_Pal[]; extern const u32 gUnionRoomChat_Border_Gfx[];
extern const u32 gLinkMiscMenu_Gfx[]; extern const u32 gUnionRoomChat_Border_Tilemap[];
extern const u32 gLinkMiscMenu_Tilemap[]; extern const u32 gUnionRoomChat_RButtonLabels[];
// Use Pokeblock // Use Pokeblock
extern const u8 gPokenavConditionCancel_Gfx[]; extern const u8 gPokenavConditionCancel_Gfx[];
+23 -24
View File
@@ -73,10 +73,10 @@
#define LINKCMD_CANCEL_TRADE 0xEEBB #define LINKCMD_CANCEL_TRADE 0xEEBB
#define LINKCMD_0xEECC 0xEECC #define LINKCMD_0xEECC 0xEECC
#define LINKTYPE_0x1111 0x1111 // trade #define LINKTYPE_TRADE 0x1111
#define LINKTYPE_0x1122 0x1122 // trade #define LINKTYPE_TRADE_CONNECTING 0x1122
#define LINKTYPE_0x1133 0x1133 // trade #define LINKTYPE_TRADE_SETUP 0x1133
#define LINKTYPE_0x1144 0x1144 // trade #define LINKTYPE_TRADE_DISCONNECTED 0x1144
#define LINKTYPE_BATTLE 0x2211 #define LINKTYPE_BATTLE 0x2211
#define LINKTYPE_0x2222 0x2222 // unused battle? #define LINKTYPE_0x2222 0x2222 // unused battle?
#define LINKTYPE_SINGLE_BATTLE 0x2233 #define LINKTYPE_SINGLE_BATTLE 0x2233
@@ -85,13 +85,13 @@
#define LINKTYPE_BATTLE_TOWER_50 0x2266 #define LINKTYPE_BATTLE_TOWER_50 0x2266
#define LINKTYPE_BATTLE_TOWER_OPEN 0x2277 #define LINKTYPE_BATTLE_TOWER_OPEN 0x2277
#define LINKTYPE_BATTLE_TOWER 0x2288 #define LINKTYPE_BATTLE_TOWER 0x2288
#define LINKTYPE_0x3311 0x3311 #define LINKTYPE_RECORD_MIX_BEFORE 0x3311
#define LINKTYPE_0x3322 0x3322 #define LINKTYPE_RECORD_MIX_AFTER 0x3322
#define LINKTYPE_BERRY_BLENDER_SETUP 0x4411 #define LINKTYPE_BERRY_BLENDER_SETUP 0x4411
#define LINKTYPE_BERRY_BLENDER 0x4422 #define LINKTYPE_BERRY_BLENDER 0x4422
#define LINKTYPE_0x5501 0x5501 // mystery event #define LINKTYPE_MYSTERY_EVENT 0x5501
#define LINKTYPE_0x5502 0x5502 // unused? #define LINKTYPE_0x5502 0x5502 // unused?
#define LINKTYPE_0x5503 0x5503 // eReader #define LINKTYPE_EREADER 0x5503
#define LINKTYPE_CONTEST_GMODE 0x6601 #define LINKTYPE_CONTEST_GMODE 0x6601
#define LINKTYPE_CONTEST_EMODE 0x6602 #define LINKTYPE_CONTEST_EMODE 0x6602
@@ -126,10 +126,10 @@ enum
EXCHANGE_NOT_STARTED, EXCHANGE_NOT_STARTED,
EXCHANGE_COMPLETE, EXCHANGE_COMPLETE,
EXCHANGE_TIMED_OUT, EXCHANGE_TIMED_OUT,
EXCHANGE_IN_PROGRESS, EXCHANGE_DIFF_SELECTIONS,
EXCHANGE_PLAYER_NOT_READY, EXCHANGE_PLAYER_NOT_READY,
EXCHANGE_PARTNER_NOT_READY, EXCHANGE_PARTNER_NOT_READY,
EXCHANGE_STAT_6, EXCHANGE_WRONG_NUM_PLAYERS,
EXCHANGE_STAT_7 EXCHANGE_STAT_7
}; };
@@ -274,9 +274,8 @@ void LoadWirelessStatusIndicatorSpriteGfx(void);
bool8 IsLinkTaskFinished(void); bool8 IsLinkTaskFinished(void);
void CreateWirelessStatusIndicatorSprite(u8, u8); void CreateWirelessStatusIndicatorSprite(u8, u8);
void sub_800ADF8(void); void sub_800ADF8(void);
void sub_800B488(void); void SetWirelessCommType1(void);
void CheckShouldAdvanceLinkState(void); void CheckShouldAdvanceLinkState(void);
void sub_8011BD0(void);
u8 IsLinkMaster(void); u8 IsLinkMaster(void);
void sub_800AC34(void); void sub_800AC34(void);
bool8 HandleLinkConnection(void); bool8 HandleLinkConnection(void);
@@ -285,14 +284,14 @@ void sub_800A418(void);
void SetSuppressLinkErrorMessage(bool8 flag); void SetSuppressLinkErrorMessage(bool8 flag);
void sub_800B524(struct LinkPlayer *linkPlayer); void sub_800B524(struct LinkPlayer *linkPlayer);
u8 GetSioMultiSI(void); u8 GetSioMultiSI(void);
void sub_800AAF4(void); void ClearSavedLinkPlayers(void);
void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06); void BufferLinkErrorInfo(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
void sub_800B348(void); void sub_800B348(void);
void sub_800B3A4(u32 who); void LinkPlayerFromBlock(u32 who);
bool32 sub_800A07C(void); bool32 Link_AnyPartnersPlayingFRLG_JP(void);
void ResetLinkPlayerCount(void); void ResetLinkPlayerCount(void);
void sub_800AA04(u8 a0); void SaveLinkPlayers(u8 a0);
void sub_800B4C0(void); void SetWirelessCommType0(void);
bool32 sub_800B504(void); bool32 sub_800B504(void);
extern u16 gLinkPartnersHeldKeys[6]; extern u16 gLinkPartnersHeldKeys[6];
@@ -331,18 +330,18 @@ extern u32 gFiller_03003080;
extern struct LinkPlayer gLocalLinkPlayer; extern struct LinkPlayer gLocalLinkPlayer;
bool32 Link_AnyPartnersPlayingRubyOrSapphire(void); bool32 Link_AnyPartnersPlayingRubyOrSapphire(void);
bool32 sub_800A03C(void); bool32 LinkDummy_Return2(void);
void SetLocalLinkPlayerId(u8); void SetLocalLinkPlayerId(u8);
u8 GetSavedPlayerCount(void); u8 GetSavedPlayerCount(void);
void sub_8009FAC(void); void sub_8009FAC(void);
bool8 sub_800A4D8(u8 a0); bool8 sub_800A4D8(u8 a0);
u8 sub_800A9D8(void); u8 GetLinkPlayerCountAsBitFlags(void);
u8 sub_800A0C8(s32, s32); u8 sub_800A0C8(s32, s32);
u8 sub_800A9A8(void); u8 GetSavedLinkPlayerCountAsBitFlags(void);
void sub_800AD10(void); void sub_800AD10(void);
void sub_800AB18(void); void CheckLinkPlayersMatchSaved(void);
void sub_8009F18(void); void StartSendingKeysToLink(void);
bool8 sub_800AA60(void); bool8 DoesLinkPlayerCountMatchSaved(void);
void sub_800ABF4(u16 a0); void sub_800ABF4(u16 a0);
bool32 IsSendingKeysToLink(void); bool32 IsSendingKeysToLink(void);
u32 GetLinkRecvQueueLength(void); u32 GetLinkRecvQueueLength(void);
+154 -213
View File
@@ -5,7 +5,43 @@
#include "link.h" #include "link.h"
#include "AgbRfu_LinkManager.h" #include "AgbRfu_LinkManager.h"
// Exported type declarations #define RFU_COMMAND_0x4400 0x4400
#define RFU_COMMAND_0x8800 0x8800
#define RFU_COMMAND_0x8900 0x8900
#define RFU_COMMAND_0xA100 0xA100
#define RFU_COMMAND_0x7700 0x7700
#define RFU_COMMAND_0x7800 0x7800
#define RFU_COMMAND_0x6600 0x6600
#define RFU_COMMAND_0x5F00 0x5F00
#define RFU_COMMAND_0x2F00 0x2F00
#define RFU_COMMAND_0xBE00 0xBE00
#define RFU_COMMAND_0xEE00 0xEE00
#define RFU_COMMAND_0xED00 0xED00
#define RFU_SERIAL_7F7D 0x7F7D
#define RECV_QUEUE_NUM_SLOTS 32
#define RECV_QUEUE_SLOT_LENGTH (14 * MAX_RFU_PLAYERS)
#define SEND_QUEUE_NUM_SLOTS 40
#define SEND_QUEUE_SLOT_LENGTH 14
#define BACKUP_QUEUE_NUM_SLOTS 2
#define BACKUP_QUEUE_SLOT_LENGTH 14
#define RFU_STATUS_OK 0
#define RFU_STATUS_FATAL_ERROR 1
#define RFU_STATUS_CONNECTION_ERROR 2
#define RFU_STATUS_CHILD_SEND_COMPLETE 3
#define RFU_STATUS_NEW_CHILD_DETECTED 4
#define RFU_STATUS_JOIN_GROUP_OK 5
#define RFU_STATUS_JOIN_GROUP_NO 6
#define RFU_STATUS_WAIT_ACK_JOIN_GROUP 7
#define RFU_STATUS_LEAVE_GROUP_NOTICE 8
#define RFU_STATUS_LEAVE_GROUP 9
#define RFU_STATUS_10 10
#define RFU_STATUS_11 11
#define RFU_STATUS_ACK_JOIN_GROUP 12
// RfuTgtData.gname is read as these structs. // RfuTgtData.gname is read as these structs.
struct GFtgtGnameSub struct GFtgtGnameSub
@@ -13,12 +49,11 @@ struct GFtgtGnameSub
u16 language:4; u16 language:4;
u16 hasNews:1; u16 hasNews:1;
u16 hasCard:1; u16 hasCard:1;
u16 unk_00_6:1; u16 unknown:1; // Never read
u16 isChampion:1; u16 isChampion:1;
u16 hasNationalDex:1; u16 hasNationalDex:1;
u16 gameClear:1; u16 gameClear:1;
u16 version:4; u16 version:4;
u16 unk_01_6:2;
u8 playerTrainerId[2]; u8 playerTrainerId[2];
}; };
@@ -38,111 +73,73 @@ struct __attribute__((packed, aligned(2))) GFtgtGname
u8 padding; u8 padding;
}; // size: RFU_GNAME_SIZE }; // size: RFU_GNAME_SIZE
struct UnkLinkRfuStruct_02022B2C struct RfuBlockSend
{ {
u8 unk_00; /* 0x00 */ u16 next;
u8 unk_01; /* 0x02 */ u16 count;
u16 unk_02; /* 0x04 */ const u8 *payload;
u8 unk_04; /* 0x08 */ u32 receivedFlags;
u16 unk_06; /* 0x0c */ u32 failedFlags;
struct GFtgtGname *unk_08; /* 0x10 */ bool8 sending;
u8 *unk_0c; /* 0x11 */ u8 owner;
u8 unk_10; /* 0x12 */ u8 receiving;
u8 unk_11;
u16 unk_12;
u16 unk_14;
}; };
struct UnkLinkRfuStruct_02022B44 struct RfuRecvQueue
{ {
u8 fill_00[6]; /* 0x000 */ u8 slots[RECV_QUEUE_NUM_SLOTS][RECV_QUEUE_SLOT_LENGTH];
u16 unk_06; /* 0x8c0 */ vu8 recvSlot;
u8 fill_08[6]; /* 0x8c1 */ vu8 sendSlot;
vu8 unk_0e; /* 0x8c2 */ vu8 count;
u8 unk_0f; /* 0x8c3 */ vu8 full;
u8 fill_10[0x54];
u16 unk_64;
u8 fill_66[0x1d];
u8 unk_83;
u8 fill_84[0x58];
}; };
struct UnkRfuStruct_2_Sub_6c struct RfuSendQueue
{ {
/* 0x00 */ u16 unk_00; /* 0x000 */ u8 slots[SEND_QUEUE_NUM_SLOTS][SEND_QUEUE_SLOT_LENGTH];
/* 0x02 */ u16 unk_02; /* 0x230 */ vu8 recvSlot;
/* 0x04 */ const u8 *unk_04; /* 0x231 */ vu8 sendSlot;
/* 0x08 */ u32 unk_08; /* 0x232 */ vu8 count;
/* 0x0c */ u32 unk_0c; /* 0x233 */ vu8 full;
/* 0x10 */ u8 unk_10;
/* 0x11 */ u8 unk_11;
/* 0x12 */ u8 unk_12;
}; };
struct UnkRfuStruct_2_Sub_124 struct RfuBackupQueue
{ {
/* 0x000 */ u8 unk_00[32][70]; /* 0x00 */ u8 slots[BACKUP_QUEUE_NUM_SLOTS][BACKUP_QUEUE_SLOT_LENGTH];
/* 0x8c0 */ vu8 unk_8c0; /* 0x1c */ vu8 recvSlot;
/* 0x8c1 */ vu8 unk_8c1; /* 0x1d */ vu8 sendSlot;
/* 0x8c2 */ vu8 unk_8c2; /* 0x1e */ vu8 count;
/* 0x8c3 */ vu8 unk_8c3;
}; };
struct UnkRfuStruct_2_Sub_9e8 struct GFRfuManager
{ {
/* 0x000 */ u8 unk_00[40][14]; /* 0x000 */ void (*callback)(void);
/* 0x230 */ vu8 unk_230; /* 0x004 */ u16 state;
/* 0x231 */ vu8 unk_231;
/* 0x232 */ vu8 unk_232;
/* 0x233 */ vu8 unk_233;
};
struct UnkRfuStruct_2_Sub_c1c
{
/* 0x00 */ u8 unk_00[2][14];
/* 0x1c */ vu8 unk_1c;
/* 0x1d */ vu8 unk_1d;
/* 0x1e */ vu8 unk_1e;
};
struct UnkRfuStruct_Sub_Unused
{
/* 0x000 */ u8 unk_00[2][256];
/* 0x200 */ vu8 unk_200;
/* 0x201 */ vu8 unk_201;
/* 0x202 */ vu8 unk_202;
/* 0x203 */ vu8 unk_203;
};
struct UnkRfuStruct_2
{
/* 0x000 */ void (*linkRfuCallback)(void);
/* 0x004 */ u16 unk_04;
/* 0x006 */ u8 filler_06[4]; /* 0x006 */ u8 filler_06[4];
/* 0x00a */ u16 unk_0a; /* 0x00a */ u16 linkmanMsg;
/* 0x00c */ u8 unk_0c; /* 0x00c */ u8 parentChild;
/* 0x00d */ u8 playerCount; /* 0x00d */ u8 playerCount;
/* 0x00e */ u8 unk_0e; /* 0x00e */ bool8 unk_0e;
/* 0x00f */ u8 unk_0f; /* 0x00f */ u8 unk_0f;
/* 0x010 */ u16 unk_10; /* 0x010 */ u16 unk_10;
/* 0x012 */ u16 unk_12; /* 0x012 */ u16 unk_12;
/* 0x014 */ u8 unk_14[4][14]; /* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14];
/* 0x04c */ u8 unk_4c[14]; /* 0x04c */ u8 unk_4c[14];
/* 0x05a */ u8 unk_5a; /* 0x05a */ u8 unk_5a;
/* 0x05b */ u8 unk_5b; /* 0x05b */ u8 unk_5b;
/* 0x05c */ u8 unk_5c[5]; /* 0x05c */ bool8 blockReceived[MAX_RFU_PLAYERS];
/* 0x061 */ u8 unk_61[5]; /* 0x061 */ bool8 numBlocksReceived[MAX_RFU_PLAYERS];
/* 0x066 */ u8 unk_66; /* 0x066 */ u8 idleTaskId;
/* 0x067 */ u8 unk_67; /* 0x067 */ u8 searchTaskId;
/* 0x068 */ u8 filler_68[4]; /* 0x068 */ u8 filler_68[4];
/* 0x06c */ struct UnkRfuStruct_2_Sub_6c unk_6c; /* 0x06c */ struct RfuBlockSend sendBlock;
/* 0x080 */ struct UnkRfuStruct_2_Sub_6c unk_80[5]; /* 0x080 */ struct RfuBlockSend recvBlock[MAX_RFU_PLAYERS];
/* 0x0e4 */ u8 unk_e4[5]; /* 0x0e4 */ u8 unk_e4[5];
/* 0x0e9 */ u8 unk_e9[5]; /* 0x0e9 */ u8 unk_e9[5];
/* 0x0ee */ vu8 unk_ee; /* 0x0ee */ vu8 errorState;
/* 0x0ef */ u8 unk_ef; /* 0x0ef */ bool8 isShuttingDown;
/* 0x0f0 */ u8 unk_f0; /* 0x0f0 */ u8 linkLossRecoveryState;
/* 0x0f1 */ u8 unk_f1; /* 0x0f1 */ u8 status;
/* 0x0f2 */ u16 unk_f2[6]; /* 0x0f2 */ u16 unk_f2[6];
/* 0x0fe */ u16 unk_fe; /* 0x0fe */ u16 unk_fe;
/* 0x100 */ u16 unk_100; /* 0x100 */ u16 unk_100;
@@ -151,193 +148,137 @@ struct UnkRfuStruct_2
/* 0x10A */ struct GFtgtGname unk_10A; /* 0x10A */ struct GFtgtGname unk_10A;
u8 filler_; u8 filler_;
u8 playerName[PLAYER_NAME_LENGTH + 1]; u8 playerName[PLAYER_NAME_LENGTH + 1];
/* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124; /* 0x124 */ struct RfuRecvQueue recvQueue;
/* 0x9e8 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8; /* 0x9e8 */ struct RfuSendQueue sendQueue;
/* 0xc1c */ struct UnkRfuStruct_2_Sub_c1c unk_c1c; /* 0xc1c */ struct RfuBackupQueue backupQueue;
/* 0xc3c */ vu8 unk_c3c; /* 0xc3c */ vu8 linkRecovered;
/* 0xc3d */ u8 unk_c3d; /* 0xc3d */ u8 unk_c3d;
/* 0xc3e */ vu8 unk_c3e; /* 0xc3e */ vu8 childSlot;
/* 0xc3f */ u8 unk_c3f[70]; /* 0xc3f */ u8 unk_c3f[70];
/* 0xc85 */ u8 unk_c85; /* 0xc85 */ u8 unk_c85;
/* 0xc86 */ u8 unk_c86; /* 0xc86 */ u8 recvStatus;
/* 0xc87 */ u8 unk_c87[5][7][2]; /* 0xc87 */ u8 recvCmds[5][7][2];
/* 0xccd */ u8 unk_ccd; /* 0xccd */ u8 parentId;
/* 0xcce */ u8 unk_cce; /* 0xcce */ u8 multiplayerId;
/* 0xccf */ u8 unk_ccf; /* 0xccf */ u8 unk_ccf;
/* 0xcd0 */ vu8 unk_cd0; /* 0xcd0 */ vu8 unk_cd0;
/* 0xcd1 */ u8 unk_cd1[4]; /* 0xcd1 */ u8 partnerSendStatuses[RFU_CHILD_MAX];
/* 0xcd5 */ u8 unk_cd5[4]; /* 0xcd5 */ u8 partnerRecvStatuses[RFU_CHILD_MAX];
/* 0xcd9 */ u8 unk_cd9; /* 0xcd9 */ u8 unk_cd9;
/* 0xcda */ u8 unk_cda; /* 0xcda */ u8 unk_cda;
/* 0xcdb */ vu8 unk_cdb; /* 0xcdb */ vbool8 unk_cdb;
/* 0xcdc */ vu8 unk_cdc; /* 0xcdc */ vbool8 unk_cdc;
/* 0xcdd */ u8 unk_cdd; /* 0xcdd */ u8 unk_cdd;
/* 0xcde */ u8 unk_cde[4]; /* 0xcde */ u8 linkPlayerIdx[RFU_CHILD_MAX];
/* 0xce2 */ u8 unk_ce2; /* 0xce2 */ u8 unk_ce2;
/* 0xce2 */ u8 unk_ce3; /* 0xce2 */ u8 unk_ce3;
/* 0xce4 */ u8 unk_ce4; /* 0xce4 */ u8 unk_ce4;
/* 0xce5 */ u8 unk_ce5; /* 0xce5 */ u8 unk_ce5;
/* 0xce5 */ u8 unk_ce6; /* 0xce5 */ u8 unk_ce6;
/* 0xce7 */ u8 unk_ce7; /* 0xce7 */ u8 acceptSlot_flag;
/* 0xce8 */ u8 unk_ce8; /* 0xce8 */ u8 unk_ce8;
/* 0xce9 */ u8 unk_ce9; /* 0xce9 */ u8 unk_ce9;
/* 0xcea */ u8 unk_cea[4]; /* 0xcea */ u8 unk_cea[4];
/* 0xcee */ u8 unk_cee[4]; /* 0xcee */ u8 unk_cee[4];
}; // size = 0xcf4 }; // size = 0xcf4
struct UnkRfuStruct_8010A14
{
char unk_00[15];
u8 unk_0f;
u8 unk_10[4];
struct LinkPlayer unk_14[5];
u8 fill_a0[0x5c];
};
// Exported RAM declarations // Exported RAM declarations
extern struct GFtgtGname gUnknown_02022B14; extern struct GFtgtGname gHostRFUtgtGnameBuffer;
extern u8 gUnknown_02022B22[]; extern u8 gHostRFUtgtUnameBuffer[];
extern struct UnkRfuStruct_2 Rfu; extern struct GFRfuManager Rfu;
extern u8 gWirelessStatusIndicatorSpriteId; extern u8 gWirelessStatusIndicatorSpriteId;
// Exported ROM declarations // Exported ROM declarations
void WipeTrainerNameRecords(void); void WipeTrainerNameRecords(void);
void sub_800E700(void); void InitRFUAPI(void);
void sub_800EDD4(void); void LinkRfu_Shutdown(void);
void sub_800F6FC(u8 who); void Rfu_SetBlockReceivedFlag(u8 who);
void sub_800F728(u8 who); void Rfu_ResetBlockReceivedFlag(u8 who);
bool32 IsSendingKeysToRfu(void); bool32 IsSendingKeysToRfu(void);
void sub_800F804(void); void StartSendingKeysToRfu(void);
void sub_800F850(void); void sub_800F850(void);
u8 sub_800FCD8(void); u8 Rfu_GetBlockReceivedStatus(void);
bool32 sub_800FE84(const u8 *src, size_t size); bool32 Rfu_InitBlockSend(const u8 *src, size_t size);
void ClearLinkRfuCallback(void); void ClearLinkRfuCallback(void);
u8 sub_80104F4(void); u8 Rfu_GetLinkPlayerCount(void);
u8 rfu_get_multiplayer_id(void); u8 Rfu_GetMultiplayerId(void);
bool8 sub_8010100(u8 a0); bool8 sub_8010100(u8 a0);
bool8 IsLinkRfuTaskFinished(void); bool8 IsLinkRfuTaskFinished(void);
bool8 Rfu_IsMaster(void); bool8 Rfu_IsMaster(void);
void task_add_05_task_del_08FA224_when_no_RfuFunc(void); void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
void sub_8010434(void); void sub_8010434(void);
void sub_800E604(void); void ResetLinkRfuGFLayer(void);
void sub_800E174(void); void UpdateWirelessStatusIndicatorSprite(void);
void sub_800E6D0(void); void InitRFU(void);
bool32 sub_8010EC0(void); bool32 sub_8010EC0(void);
bool32 sub_8010F1C(void); bool32 sub_8010F1C(void);
bool32 sub_8011A80(void); bool32 RfuHasErrored(void);
bool32 IsRfuRecvQueueEmpty(void); bool32 IsRfuRecvQueueEmpty(void);
u32 GetRfuRecvQueueLength(void); u32 GetRfuRecvQueueLength(void);
void RfuVSync(void); void RfuVSync(void);
void sub_80111B0(bool32 a0); void sub_80111B0(bool32 a0);
u8 sub_8011A74(void); u8 RfuGetStatus(void);
struct GFtgtGname *sub_800F7DC(void); struct GFtgtGname *GetHostRFUtgtGname(void);
void sub_8011068(u8 a0); void UpdateGameData_GroupLockedIn(u8 a0);
void sub_8011170(u32 a0); void GetLinkmanErrorParams(u32 a0);
void sub_8011A64(u8 a0, u16 a1); void RfuSetStatus(u8 a0, u16 a1);
u8 sub_801048C(bool32 a0); u8 sub_801048C(bool32 a0);
void sub_800DF90(struct GFtgtGname *buff1, u8 *buff2); void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *buff1, u8 *buff2);
void sub_8010F84(u8 a0, u32 a1, u32 a2); void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, bool32 started);
void sub_8011C10(u32 a0); void InitializeRfuLinkManager_LinkLeader(u32 a0);
bool32 sub_8012240(void); bool32 sub_8012240(void);
void sub_800EF38(void); void LinkRfu_StopManagerAndFinalizeSlots(void);
bool32 sub_80105EC(void); bool32 sub_80105EC(void);
bool32 sub_801064C(u16 a0, const u8 *a1); bool32 HasTrainerLeftPartnersList(u16 trainerId, const u8 *name);
void sub_8010688(u8 a0, u16 a1, const u8 *a2); void SendRfuStatusToPartner(u8 status, u16 trainerId, const u8 *name);
u32 sub_8010714(u16 a0, const u8 *a1); u32 WaitSendRfuStatusToPartner(u16 trainerId, const u8 *name);
void sub_8011DC0(const u8 *a0, u16 a1); void RequestDisconnectSlotByTrainerNameAndId(const u8 *a0, u16 a1);
bool8 sub_800EF1C(void); bool8 LmanAcceptSlotFlagIsNotZero(void);
bool32 sub_800EF58(bool32 a0); bool32 WaitRfuState(bool32 a0);
void DestroyWirelessStatusIndicatorSprite(void);
void sub_801103C(void); void sub_801103C(void);
void sub_8011C5C(void); void InitializeRfuLinkManager_JoinGroup(void);
void sub_80106D4(void); void SendLeaveGroupNotice(void);
void RecordMixTrainerNames(void); void RecordMixTrainerNames(void);
void sub_800ED10(void); void LinkRfu_CreateConnectionAsParent(void);
void sub_800ED28(void); void LinkRfu_StopManagerBeforeEnteringChat(void);
void sub_8011090(u8 a0, u32 a1, u32 a2); void UpdateGameData_SetActivity(u8 activity, u32 flags, bool32 started);
void sub_8011FC8(const u8 *src, u16 trainerId); void CreateTask_RfuReconnectWithParent(const u8 *src, u16 trainerId);
void sub_8010FA0(bool32 a0, bool32 a1); void SetGnameBufferWonderFlags(bool32 a0, bool32 a1);
void sub_8010F60(void); void ClearAndInitHostRFUtgtGname(void);
void sub_8010FCC(u32 a0, u32 a1, u32 a2); void SetTradeBoardRegisteredMonInfo(u32 type, u32 species, u32 level);
void sub_8011C84(void); void InitializeRfuLinkManager_EnterUnionRoom(void);
void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 a2); void sub_8012188(const u8 *name, struct GFtgtGname *structPtr, u8 a2);
bool32 sub_8011B90(void); bool32 IsUnionRoomListenTaskActive(void);
void sub_800FE50(void *a0); void sub_800FE50(void *a0);
bool32 sub_800E540(u16 id, u8 *name); bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name);
void sub_8011DE0(u32 arg0); void sub_8011DE0(u32 arg0);
u8 sub_801100C(s32 a0); u8 sub_801100C(s32 a0);
void sub_800EF7C(void); void sub_800EF7C(void);
bool8 sub_800DE7C(struct GFtgtGname *buff1, u8 *buff2, u8 idx); bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
bool8 sub_800DF34(struct GFtgtGname *buff1, u8 *buff2, u8 idx); bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
s32 sub_800E87C(u8 idx); s32 sub_800E87C(u8 idx);
void sub_8011BA4(void); void CreateTask_RfuIdle(void);
void sub_8010198(void); void DestroyTask_RfuIdle(void);
void sub_8011AC8(void); void sub_8011AC8(void);
void LinkRfu_FatalError(void); void LinkRfu_FatalError(void);
bool32 sub_8011A9C(void); bool32 sub_8011A9C(void);
void sub_80104B0(void); void sub_80104B0(void);
void sub_8011A50(void); void sub_8011A50(void);
void sub_80110B8(u32 a0); void sub_80110B8(u32 a0);
bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2); bool32 IsRfuSerialNumberValid(u32 serialNo);
void sub_800EAB4(void); bool8 IsRfuRecoveringFromLinkLoss(void);
void sub_800EAFC(void); void RfuRecvQueue_Reset(struct RfuRecvQueue *queue);
void sub_800ED34(u16 unused); void RfuSendQueue_Reset(struct RfuSendQueue *queue);
void sub_800EDBC(u16 unused); void RfuRecvQueue_Enqueue(struct RfuRecvQueue *queue, u8 *data);
void sub_800F048(void); void RfuSendQueue_Enqueue(struct RfuSendQueue *queue, u8 *data);
void sub_800F86C(u8 unused); bool8 RfuRecvQueue_Dequeue(struct RfuRecvQueue *queue, u8 *dest);
void sub_800FCC4(struct UnkRfuStruct_2_Sub_6c *data); bool8 RfuSendQueue_Dequeue(struct RfuSendQueue *queue, u8 *dest);
void sub_800FD14(u16 command); void RfuBackupQueue_Enqueue(struct RfuBackupQueue *queue, const u8 *q2);
void rfufunc_80F9F44(void); bool8 RfuBackupQueue_Dequeue(struct RfuBackupQueue *queue, u8 *q2);
void sub_800FFB0(void); void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders);
void rfufunc_80FA020(void);
bool32 sub_8010454(u32 a0);
void sub_8010528(void);
void sub_8010750(void);
s32 sub_80107A0(void);
void sub_801084C(u8 taskId);
void sub_80109E8(u16 a0);
void sub_8010A70(void *a0);
void sub_8010AAC(u8 taskId);
void sub_8010D0C(u8 taskId);
void sub_80115EC(s32 a0);
u8 sub_8011CE4(const u8 *a0, u16 a1);
void sub_8011D6C(u32 a0);
void sub_8011E94(u32 a0, u32 a1);
bool8 sub_8012224(void);
void sub_801227C(void);
void sub_801209C(u8 taskId);
void sub_8011BF8(void);
void sub_8011BA4(void);
void sub_800D6C8(struct UnkRfuStruct_2_Sub_124 *ptr);
void sub_800D724(struct UnkRfuStruct_2_Sub_9e8 *ptr);
void sub_800D780(struct UnkRfuStruct_Sub_Unused *ptr);
void sub_800D7D8(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
void sub_800D888(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
bool8 sub_800D934(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
bool8 sub_800D9DC(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
void sub_800DA68(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2);
bool8 sub_800DAC8(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
void sub_800DB18(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2);
bool8 sub_800DB84(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2);
void sub_800DBF8(u8 *q1, u8 mode);
void PkmnStrToASCII(u8 *q1, const u8 *q2);
void ASCIIToPkmnStr(u8 *q1, const u8 *q2);
u8 sub_800DD1C(u8 maxFlags);
void sub_800DD94(struct GFtgtGname *data, u8 r9, bool32 r2, s32 r3);
bool8 sub_800DE7C(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
bool8 sub_800DF34(struct GFtgtGname *buff1, u8 *buff2, u8 idx);
void sub_800DF90(struct GFtgtGname *buff1, u8 *buff2);
void CreateWirelessStatusIndicatorSprite(u8 x, u8 y); void CreateWirelessStatusIndicatorSprite(u8 x, u8 y);
void DestroyWirelessStatusIndicatorSprite(void); void DestroyWirelessStatusIndicatorSprite(void);
void LoadWirelessStatusIndicatorSpriteGfx(void); void LoadWirelessStatusIndicatorSpriteGfx(void);
u8 sub_800E124(void);
void sub_800E15C(struct Sprite *sprite, s32 signalStrengthAnimNum);
void sub_800E174(void);
void CopyTrainerRecord(struct TrainerNameRecord *dest, u32 trainerId, const u8 *name);
bool32 NameIsNotEmpty(const u8 *name);
void RecordMixTrainerNames(void);
bool32 sub_800E540(u16 id, u8 *name);
void WipeTrainerNameRecords(void);
#endif //GUARD_LINK_RFU_H #endif //GUARD_LINK_RFU_H
+1 -1
View File
@@ -79,7 +79,7 @@ void sub_8198DBC(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 itemCount, u
u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos); u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos);
u8 sub_8199134(s8, s8); u8 sub_8199134(s8, s8);
u8 GetStartMenuWindowId(void); u8 GetStartMenuWindowId(void);
void sub_819A2BC(u8, u8); void ListMenuLoadStdPalAt(u8, u8);
u8 Menu_MoveCursor(s8 cursorDelta); u8 Menu_MoveCursor(s8 cursorDelta);
u8 Menu_MoveCursorNoWrapAround(s8 cursorDelta); u8 Menu_MoveCursorNoWrapAround(s8 cursorDelta);
void DrawStdWindowFrame(u8 windowId, bool8 CopyToVram); void DrawStdWindowFrame(u8 windowId, bool8 CopyToVram);
+2 -2
View File
@@ -57,7 +57,7 @@ u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const vo
bool32 MEventStruct_Unk1442CC_CompareField_unk_16(const struct MEventStruct_Unk1442CC *a0, const u16 *a1); bool32 MEventStruct_Unk1442CC_CompareField_unk_16(const struct MEventStruct_Unk1442CC *a0, const u16 *a1);
u16 MEventStruct_Unk1442CC_GetValueNFrom_unk_20(const struct MEventStruct_Unk1442CC *a0, u32 command); u16 MEventStruct_Unk1442CC_GetValueNFrom_unk_20(const struct MEventStruct_Unk1442CC *a0, u32 command);
u16 mevent_081445C0(u32 command); u16 mevent_081445C0(u32 command);
void sub_801B940(void); void ResetReceivedWonderCardFlag(void);
bool32 sub_801B94C(u16 a0); bool32 MEventHandleReceivedWonderCard(u16 a0);
#endif //GUARD_MEVENT_H #endif //GUARD_MEVENT_H
+1 -1
View File
@@ -1,6 +1,6 @@
#ifndef GUARD_MEVENT2_H #ifndef GUARD_MEVENT2_H
#define GUARD_MEVENT2_H #define GUARD_MEVENT2_H
void sub_801B990(u32, u32); void RecordIdOfWonderCardSenderByEventType(u32, u32);
#endif //GUARD_MEVENT2_H #endif //GUARD_MEVENT2_H
+2
View File
@@ -12,5 +12,7 @@ bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str);
void AddTextPrinterToWindow1(const u8 *src); void AddTextPrinterToWindow1(const u8 *src);
void c2_ereader(void); void c2_ereader(void);
void c2_mystery_gift(void); void c2_mystery_gift(void);
void MG_DrawTextBorder(u8 windowId);
s8 mevent_message_print_and_prompt_yes_no(u8 *textState, u16 *windowId, bool8 yesNoBoxPlacement, const u8 *str);
#endif //GUARD_MYSTERY_GIFT_H #endif //GUARD_MYSTERY_GIFT_H
+2 -2
View File
@@ -279,8 +279,8 @@ void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest);
void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId); void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId);
bool8 sub_80688F8(u8 caseId, u8 battlerId); bool8 sub_80688F8(u8 caseId, u8 battlerId);
void SetDeoxysStats(void); void SetDeoxysStats(void);
u16 sub_8068B48(void); u16 GetUnionRoomTrainerPic(void);
u16 sub_8068BB0(void); u16 GetUnionRoomTrainerClass(void);
void CreateObedientEnemyMon(void); void CreateObedientEnemyMon(void);
void CalculateMonStats(struct Pokemon *mon); void CalculateMonStats(struct Pokemon *mon);
void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest); void BoxMonToMon(const struct BoxPokemon *src, struct Pokemon *dest);
+1 -1
View File
@@ -3,7 +3,7 @@
#include "main.h" #include "main.h"
void sub_802A9A8(u16 monId, MainCallback callback); void StartPokemonJump(u16 monId, MainCallback callback);
bool32 IsSpeciesAllowedInPokemonJump(u16 species); bool32 IsSpeciesAllowedInPokemonJump(u16 species);
void IsPokemonJumpSpeciesInParty(void); void IsPokemonJumpSpeciesInParty(void);
void ResetPokeJumpResults(void); void ResetPokeJumpResults(void);
+1 -1
View File
@@ -102,7 +102,7 @@ u8 Save_LoadGameData(u8 saveType);
u16 sub_815355C(void); u16 sub_815355C(void);
u32 TryReadSpecialSaveSection(u8 sector, u8* dst); u32 TryReadSpecialSaveSection(u8 sector, u8* dst);
u32 TryWriteSpecialSaveSection(u8 sector, u8* src); u32 TryWriteSpecialSaveSection(u8 sector, u8* src);
void sub_8153688(u8 taskId); void Task_LinkSave(u8 taskId);
// save_failed_screen.c // save_failed_screen.c
void DoSaveFailedScreen(u8 saveType); void DoSaveFailedScreen(u8 saveType);
+2 -2
View File
@@ -8,8 +8,8 @@ void Task_ShowStartMenu(u8 taskId);
void ShowStartMenu(void); void ShowStartMenu(void);
void ShowBattlePyramidStartMenu(void); void ShowBattlePyramidStartMenu(void);
void SaveGame(void); void SaveGame(void);
void sub_80A0514(void); void CB2_SetUpSaveAfterLinkBattle(void);
void sub_80A08CC(void); void SaveForBattleTowerLink(void);
void HideStartMenu(void); void HideStartMenu(void);
void AppendToList(u8* list, u8* pos, u8 newEntry); void AppendToList(u8* list, u8* pos, u8 newEntry);
+5 -5
View File
@@ -962,7 +962,7 @@ extern const u8 gText_TwoDashes[];
extern const u8 *const gReturnToXStringsTable2[]; extern const u8 *const gReturnToXStringsTable2[];
extern const u8 gText_XPLink[]; extern const u8 gText_NumPlayerLink[];
extern const u8 gText_ConfirmLinkWhenPlayersReady[]; extern const u8 gText_ConfirmLinkWhenPlayersReady[];
extern const u8 gText_ConfirmStartLinkWithXPlayers[]; extern const u8 gText_ConfirmStartLinkWithXPlayers[];
extern const u8 gText_AwaitingLinkup[]; extern const u8 gText_AwaitingLinkup[];
@@ -2815,10 +2815,10 @@ extern const u8 gText_RegisterTextHere[];
extern const u8 gText_InputText[]; extern const u8 gText_InputText[];
extern const u8 gText_ExitingChat[]; extern const u8 gText_ExitingChat[];
extern const u8 gText_LeaderLeftEndingChat[]; extern const u8 gText_LeaderLeftEndingChat[];
extern const u8 gText_RegisteredTextChanged[]; extern const u8 gText_RegisteredTextChangedOKToSave[];
extern const u8 gText_AlreadySavedFile_Unused[]; extern const u8 gText_AlreadySavedFile_Chat[];
extern const u8 gText_SavingDontTurnOff_Unused[]; extern const u8 gText_SavingDontTurnOff_Chat[];
extern const u8 gText_PlayerSavedGame_Unused[]; extern const u8 gText_PlayerSavedGame_Chat[];
extern const u8 gText_IfLeaderLeavesChatEnds[]; extern const u8 gText_IfLeaderLeavesChatEnds[];
extern const u8 gText_Upper[]; extern const u8 gText_Upper[];
extern const u8 gText_Lower[]; extern const u8 gText_Lower[];
+71 -74
View File
@@ -2,71 +2,70 @@
#define GUARD_UNION_ROOM_H #define GUARD_UNION_ROOM_H
#include "link_rfu.h" #include "link_rfu.h"
#include "link.h"
#include "constants/union_room.h"
// Exported type declarations // Exported type declarations
struct UnkStruct_Shared struct WirelessGnameUnamePair
{ {
struct GFtgtGname field_0; struct GFtgtGname gname;
u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1]; u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1];
}; };
struct UnkStruct_x1C struct UnkStruct_x1C
{ {
struct UnkStruct_Shared unk0; struct WirelessGnameUnamePair gname_uname;
u8 unk18:1; u8 active:1;
}; };
struct UnkStruct_x20 struct UnkStruct_x20
{ {
struct UnkStruct_Shared unk; struct WirelessGnameUnamePair gname_uname;
u16 field_18; u16 timeoutCounter;
u8 field_1A_0:2; u8 groupScheduledAnim:2;
u8 field_1A_1:1; bool8 useRedText:1; // Never set
u8 field_1B; u8 field_1B;
u8 field_1D; u8 filler[3];
u8 field_1E;
u8 field_1F;
}; };
struct UnkStruct_Main0 struct UnkStruct_Main0
{ {
struct UnkStruct_x20 arr[8]; struct UnkStruct_x20 arr[MAX_UNION_ROOM_PLAYERS];
}; };
struct UnkStruct_Main4 struct UnkStruct_Main4
{ {
struct UnkStruct_x1C arr[5]; struct UnkStruct_x1C arr[MAX_RFU_PLAYERS];
}; };
struct UnkStruct_Main8 struct UnkStruct_Main8
{ {
struct UnkStruct_x20 arr[5]; struct UnkStruct_x20 arr[MAX_RFU_PLAYERS];
}; };
struct UnkStruct_Leader struct WirelessLink_Leader
{ {
struct UnkStruct_Main0 *field_0; struct UnkStruct_Main0 *field_0;
struct UnkStruct_Main4 *field_4; struct UnkStruct_Main4 *field_4;
struct UnkStruct_Main8 *field_8; struct UnkStruct_Main8 *field_8;
u8 state; u8 state;
u8 textState; u8 textState;
u8 field_E; u8 delayTimerAfterOk;
u8 listWindowId; u8 listWindowId;
u8 field_10; u8 bButtonCancelWindowId;
u8 field_11; u8 nPlayerModeWindowId;
u8 listTaskId; u8 listTaskId;
u8 field_13; u8 playerCount;
u8 field_14; u16 field_14;
u8 field_15;
u8 field_16; u8 field_16;
u8 field_17; u8 listenTaskId;
u8 field_18; u8 activity;
u8 field_19; u8 joinRequestAnswer;
u16 field_1A; u16 memberConfirmTimeout;
}; };
struct UnkStruct_Group struct WirelessLink_Group
{ {
struct UnkStruct_Main0 *field_0; struct UnkStruct_Main0 *field_0;
struct UnkStruct_Main4 *field_4; struct UnkStruct_Main4 *field_4;
@@ -74,98 +73,96 @@ struct UnkStruct_Group
u8 textState; u8 textState;
u8 field_A; u8 field_A;
u8 listWindowId; u8 listWindowId;
u8 field_C; u8 bButtonCancelWindowId;
u8 field_D; u8 playerNameAndIdWindowId;
u8 listTaskId; u8 listTaskId;
u8 field_F; u8 leaderId;
u8 field_10; u8 field_10;
u8 field_11; u8 listenTaskId;
u8 field_12; u8 isWonderNews;
u8 field_13; u8 field_13;
u8 field_14; u8 refreshTimer;
u8 field_15; u8 delayBeforePrint;
}; };
struct UnkStruct_8019BA8 struct UnionRoomObject
{ {
u8 field_0; u8 state;
u8 field_1; u8 gfxId;
s8 field_2; s8 animState;
u8 field_3; u8 schedAnim;
}; };
struct UnkStruct_URoom struct WirelessLink_URoom
{ {
struct UnkStruct_Main0 *field_0; struct UnkStruct_Main0 *field_0;
struct UnkStruct_Main4 *field_4; struct UnkStruct_Main4 *field_4;
struct UnkStruct_Main0 *field_8; struct UnkStruct_Main0 *field_8;
struct UnkStruct_Main4 *field_C; struct UnkStruct_Main4 *field_C;
u16 field_10; u16 unknown; // Never read
u16 field_12; u16 field_12;
u8 state; u8 state;
u8 stateAfterPrint; u8 stateAfterPrint;
u8 textState; u8 textState;
u8 field_17; u8 filler[4];
u8 field_18; u8 topListMenuWindowId;
u8 field_19; u8 topListMenuId;
u8 field_1A; u8 tradeBoardSelectWindowId;
u8 field_1B; u8 tradeBoardDetailsWindowId;
u8 field_1C; u8 unused1;
u8 field_1D; u8 searchTaskId;
u8 field_1E;
u8 field_1F;
u8 field_20;
u8 spriteIds[40]; u8 spriteIds[40];
u8 field_49; u8 unused2;
u8 field_4A; u8 tradeBoardListMenuId;
u16 field_4C[6]; u16 playerSendBuffer[6];
u8 field_58[0x98 - 0x58]; u8 activityRequestStrbufs[4][16];
u16 field_98; u16 partnerYesNoResponse;
u16 field_9A[3]; u16 recvActivityRequest[3];
struct UnkStruct_8019BA8 field_A0[8]; struct UnionRoomObject objects[MAX_UNION_ROOM_PLAYERS];
u8 field_C0[12][15]; u8 trainerCardStrBuffer[12][15];
u8 field_174[48]; u8 trainerCardColorStrBuffer[48];
u8 field_1A4[200]; u8 trainerCardMsgStrBuffer[200];
}; };
union UnkUnion_Main union WirelessLink_Main
{ {
struct UnkStruct_Leader *leader; struct WirelessLink_Leader *leader;
struct UnkStruct_Group *group; struct WirelessLink_Group *group;
struct UnkStruct_URoom *uRoom; struct WirelessLink_URoom *uRoom;
}; };
struct UnionRoomTrade struct UnionRoomTrade
{ {
u16 field_0; u16 state;
u16 type; u16 type;
u32 playerPersonality; u32 playerPersonality;
u8 field_8; u8 offerPlayerId;
u8 field_9; u8 filler1;
u16 playerSpecies; u16 playerSpecies;
u16 playerLevel; u16 playerLevel;
u16 species; u16 species;
u16 level; u16 level;
u16 field_12; u16 filler2;
u32 personality; u32 personality;
}; };
// Exported RAM declarations // Exported RAM declarations
extern u8 gUnknown_02022C2C; extern u8 gPlayerCurrActivity;
extern union UnkUnion_Main gUnknown_02022C30; extern union WirelessLink_Main gUnknown_02022C30;
extern struct GFtgtGnameSub gUnknown_02022C38; extern struct GFtgtGnameSub gPartnerTgtGnameSub;
extern u16 gUnionRoomOfferedSpecies; extern u16 gUnionRoomOfferedSpecies;
extern u8 gUnionRoomRequestedMonType; extern u8 gUnionRoomRequestedMonType;
// Exported ROM declarations // Exported ROM declarations
u8 sub_8013F78(void); u8 CreateTask_CreateTradeMenu(void);
void nullsub_89(u8 taskId); void SetUsingUnionRoomStartMenu(void);
void var_800D_set_xB(void);
void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0); void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0);
void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0); void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0);
void MEvent_CreateTask_Leader(u32 arg0); void MEvent_CreateTask_Leader(u32 arg0);
u8 CreateTask_ListenToWireless(void);
void StartUnionRoomBattle(u16 battleFlags);
#endif //GUARD_UNION_ROOM_H #endif //GUARD_UNION_ROOM_H
+1 -2
View File
@@ -1,7 +1,6 @@
#ifndef GUARD_UNION_ROOM_BATTLE_H #ifndef GUARD_UNION_ROOM_BATTLE_H
#define GUARD_UNION_ROOM_BATTLE_H #define GUARD_UNION_ROOM_BATTLE_H
u8 sub_8013C40(void); void CB2_UnionRoomBattle(void);
void sub_8014210(u16 battleFlags);
#endif //GUARD_UNION_ROOM_BATTLE_H #endif //GUARD_UNION_ROOM_BATTLE_H
+2 -13
View File
@@ -1,18 +1,7 @@
#ifndef GUARD_UNION_ROOM_CHAT_H #ifndef GUARD_UNION_ROOM_CHAT_H
#define GUARD_UNION_ROOM_CHAT_H #define GUARD_UNION_ROOM_CHAT_H
enum void EnterUnionRoomChat(void);
{ void InitUnionRoomChatRegisteredTexts(void);
UNION_ROOM_KB_PAGE_UPPER,
UNION_ROOM_KB_PAGE_LOWER,
UNION_ROOM_KB_PAGE_EMOJI,
UNION_ROOM_KB_PAGE_COUNT
};
#define UNION_ROOM_KB_ROW_COUNT 10
void sub_801DD98(void);
void copy_strings_to_sav1(void);
#endif // GUARD_UNION_ROOM_CHAT_H #endif // GUARD_UNION_ROOM_CHAT_H
+9 -9
View File
@@ -1,14 +1,14 @@
#ifndef GUARD_UNION_ROOM_PLAYER_AVATAR_H #ifndef GUARD_UNION_ROOM_PLAYER_AVATAR_H
#define GUARD_UNION_ROOM_PLAYER_AVATAR_H #define GUARD_UNION_ROOM_PLAYER_AVATAR_H
u8 sub_8019BA8(struct UnkStruct_8019BA8 * ptr); u8 InitUnionRoomPlayerObjects(struct UnionRoomObject *players);
void sub_8019E3C(void); void DestroyUnionRoomPlayerObjects(void);
void sub_8019E70(u8 *arg0, s32 arg1); void CreateGroupMemberSpritesInvisible(u8 *spriteIds, s32 playerIdx);
void sub_8019F04(u8 *spriteIds); void DestroyGroupMemberSprites(u8 *spriteIds);
void sub_8019F2C(void); void SetTilesAroundUnionRoomPlayersPassable(void);
void sub_801A274(struct UnkStruct_URoom *arg0); void ScheduleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom);
void sub_801A284(struct UnkStruct_URoom *arg0); void HandleUnionRoomPlayerRefresh(struct WirelessLink_URoom *uroom);
bool32 sub_801A2A8(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3); bool32 TryInteractWithUnionRoomMember(struct UnkStruct_Main0 *main0, s16 *directionPtr, s16 *playerIdxPtr, u8 *spriteIds);
void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2); void UpdateUnionRoomMemberFacing(u32 currDirection, u32 playerIdx, struct UnkStruct_Main0 *main0);
#endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H #endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H
+2
View File
@@ -65,6 +65,7 @@ SECTIONS {
src/union_room.o(.text); src/union_room.o(.text);
src/mystery_gift.o(.text); src/mystery_gift.o(.text);
src/union_room_player_avatar.o(.text); src/union_room_player_avatar.o(.text);
src/wireless_communication_status_screen.o(.text);
src/union_room_battle.o(.text); src/union_room_battle.o(.text);
src/mevent2.o(.text); src/mevent2.o(.text);
src/mevent_801BAAC.o(.text); src/mevent_801BAAC.o(.text);
@@ -450,6 +451,7 @@ SECTIONS {
src/union_room.o(.rodata); src/union_room.o(.rodata);
src/mystery_gift.o(.rodata); src/mystery_gift.o(.rodata);
src/union_room_player_avatar.o(.rodata); src/union_room_player_avatar.o(.rodata);
src/wireless_communication_status_screen.o(.rodata);
src/union_room_battle.o(.rodata); src/union_room_battle.o(.rodata);
src/mevent2.o(.rodata); src/mevent2.o(.rodata);
src/mevent_801BAAC.o(.rodata); src/mevent_801BAAC.o(.rodata);
+2 -2
View File
@@ -1267,9 +1267,9 @@ static void LinkOpponentHandleDrawTrainerPic(void)
else else
{ {
xPos = 176; xPos = 176;
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{ {
trainerPicId = sub_8068B48(); trainerPicId = GetUnionRoomTrainerPic();
} }
else if ((gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_FIRE_RED else if ((gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_FIRE_RED
|| (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_LEAF_GREEN) || (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_LEAF_GREEN)
+2 -2
View File
@@ -1229,9 +1229,9 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
else else
{ {
xPos = 176; xPos = 176;
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{ {
trainerPicId = sub_8068B48(); trainerPicId = GetUnionRoomTrainerPic();
} }
else else
{ {
+4 -3
View File
@@ -6,6 +6,7 @@
#include "battle_message.h" #include "battle_message.h"
#include "cable_club.h" #include "cable_club.h"
#include "link.h" #include "link.h"
#include "link_rfu.h"
#include "party_menu.h" #include "party_menu.h"
#include "pokemon.h" #include "pokemon.h"
#include "recorded_battle.h" #include "recorded_battle.h"
@@ -33,10 +34,10 @@ void HandleLinkBattleSetup(void)
if (gBattleTypeFlags & BATTLE_TYPE_LINK) if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{ {
if (gWirelessCommType) if (gWirelessCommType)
sub_800B488(); SetWirelessCommType1();
if (!gReceivedRemoteLinkPlayers) if (!gReceivedRemoteLinkPlayers)
OpenLink(); OpenLink();
CreateTask(task00_08081A90, 0); CreateTask(Task_WaitForLinkPlayerConnection, 0);
CreateTasksForSendRecvLinkBuffers(); CreateTasksForSendRecvLinkBuffers();
} }
} }
@@ -827,7 +828,7 @@ void sub_8033648(void)
if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & BATTLE_TYPE_20)) if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & BATTLE_TYPE_20))
{ {
sub_8011BD0(); DestroyTask_RfuIdle();
for (i = 0; i < GetLinkPlayerCount(); i++) for (i = 0; i < GetLinkPlayerCount(); i++)
{ {
if (GetBlockReceivedStatus() & gBitTable[i]) if (GetBlockReceivedStatus() & gBitTable[i])
+1 -1
View File
@@ -995,7 +995,7 @@ static void CB2_HandleStartBattle(void)
sub_8036A5C(); sub_8036A5C();
SetPlayerBerryDataInBattleStruct(); SetPlayerBerryDataInBattleStruct();
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{ {
gLinkPlayers[0].id = 0; gLinkPlayers[0].id = 0;
gLinkPlayers[1].id = 1; gLinkPlayers[1].id = 1;
+7 -7
View File
@@ -1981,7 +1981,7 @@ void BufferStringBattle(u16 stringID)
} }
else else
{ {
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
stringPtr = sText_Trainer1WantsToBattle; stringPtr = sText_Trainer1WantsToBattle;
else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
stringPtr = sText_LinkTrainerWantsToBattlePause; stringPtr = sText_LinkTrainerWantsToBattlePause;
@@ -2049,7 +2049,7 @@ void BufferStringBattle(u16 stringID)
{ {
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))) if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
stringPtr = sText_Trainer1SentOutPkmn; stringPtr = sText_Trainer1SentOutPkmn;
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
stringPtr = sText_Trainer1SentOutPkmn; stringPtr = sText_Trainer1SentOutPkmn;
else else
stringPtr = sText_LinkTrainerSentOutPkmn; stringPtr = sText_LinkTrainerSentOutPkmn;
@@ -2110,7 +2110,7 @@ void BufferStringBattle(u16 stringID)
{ {
if (gBattleTypeFlags & BATTLE_TYPE_MULTI) if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
stringPtr = sText_LinkTrainerMultiSentOutPkmn; stringPtr = sText_LinkTrainerMultiSentOutPkmn;
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
stringPtr = sText_Trainer1SentOutPkmn2; stringPtr = sText_Trainer1SentOutPkmn2;
else else
stringPtr = sText_LinkTrainerSentOutPkmn2; stringPtr = sText_LinkTrainerSentOutPkmn2;
@@ -2180,7 +2180,7 @@ void BufferStringBattle(u16 stringID)
break; break;
} }
} }
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{ {
switch (gBattleTextBuff1[0]) switch (gBattleTextBuff1[0])
{ {
@@ -2495,8 +2495,8 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
case B_TXT_TRAINER1_CLASS: // trainer class name case B_TXT_TRAINER1_CLASS: // trainer class name
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE) if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()]; toCpy = gTrainerClassNames[GetSecretBaseTrainerClass()];
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
toCpy = gTrainerClassNames[sub_8068BB0()]; toCpy = gTrainerClassNames[GetUnionRoomTrainerClass()];
else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) else if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
toCpy = gTrainerClassNames[GetFrontierBrainTrainerClass()]; toCpy = gTrainerClassNames[GetFrontierBrainTrainerClass()];
else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
@@ -2517,7 +2517,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
ConvertInternationalString(text, gBattleResources->secretBase->language); ConvertInternationalString(text, gBattleResources->secretBase->language);
toCpy = text; toCpy = text;
} }
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) else if (gTrainerBattleOpponent_A == TRAINER_UNION_ROOM)
{ {
toCpy = gLinkPlayers[multiplayerId ^ BIT_SIDE].name; toCpy = gLinkPlayers[multiplayerId ^ BIT_SIDE].name;
} }
+8 -8
View File
@@ -997,7 +997,7 @@ struct BerryTree *GetBerryTreeInfo(u8 id)
bool32 ObjectEventInteractionWaterBerryTree(void) bool32 ObjectEventInteractionWaterBerryTree(void)
{ {
struct BerryTree *tree = GetBerryTreeInfo(ObjectEventGetBerryTreeId(gSelectedObjectEvent)); struct BerryTree *tree = GetBerryTreeInfo(GetObjectEventBerryTreeId(gSelectedObjectEvent));
switch (tree->stage) switch (tree->stage)
{ {
@@ -1022,7 +1022,7 @@ bool32 ObjectEventInteractionWaterBerryTree(void)
bool8 IsPlayerFacingEmptyBerryTreePatch(void) bool8 IsPlayerFacingEmptyBerryTreePatch(void)
{ {
if (GetObjectEventScriptPointerPlayerFacing() == BerryTreeScript if (GetObjectEventScriptPointerPlayerFacing() == BerryTreeScript
&& GetStageByBerryTreeId(ObjectEventGetBerryTreeId(gSelectedObjectEvent)) == BERRY_STAGE_NO_BERRY) && GetStageByBerryTreeId(GetObjectEventBerryTreeId(gSelectedObjectEvent)) == BERRY_STAGE_NO_BERRY)
return TRUE; return TRUE;
else else
return FALSE; return FALSE;
@@ -1260,7 +1260,7 @@ void ObjectEventInteractionGetBerryTreeData(void)
u8 group; u8 group;
u8 num; u8 num;
id = ObjectEventGetBerryTreeId(gSelectedObjectEvent); id = GetObjectEventBerryTreeId(gSelectedObjectEvent);
berry = GetBerryTypeByBerryTreeId(id); berry = GetBerryTypeByBerryTreeId(id);
ResetBerryTreeSparkleFlag(id); ResetBerryTreeSparkleFlag(id);
localId = gSpecialVar_LastTalked; localId = gSpecialVar_LastTalked;
@@ -1277,13 +1277,13 @@ void ObjectEventInteractionGetBerryTreeData(void)
void ObjectEventInteractionGetBerryName(void) void ObjectEventInteractionGetBerryName(void)
{ {
u8 berryType = GetBerryTypeByBerryTreeId(ObjectEventGetBerryTreeId(gSelectedObjectEvent)); u8 berryType = GetBerryTypeByBerryTreeId(GetObjectEventBerryTreeId(gSelectedObjectEvent));
GetBerryNameByBerryType(berryType, gStringVar1); GetBerryNameByBerryType(berryType, gStringVar1);
} }
void ObjectEventInteractionGetBerryCountString(void) void ObjectEventInteractionGetBerryCountString(void)
{ {
u8 treeId = ObjectEventGetBerryTreeId(gSelectedObjectEvent); u8 treeId = GetObjectEventBerryTreeId(gSelectedObjectEvent);
u8 berry = GetBerryTypeByBerryTreeId(treeId); u8 berry = GetBerryTypeByBerryTreeId(treeId);
u8 count = GetBerryCountByBerryTreeId(treeId); u8 count = GetBerryCountByBerryTreeId(treeId);
GetBerryCountStringByBerryType(berry, gStringVar1, count); GetBerryCountStringByBerryType(berry, gStringVar1, count);
@@ -1298,13 +1298,13 @@ void ObjectEventInteractionPlantBerryTree(void)
{ {
u8 berry = ItemIdToBerryType(gSpecialVar_ItemId); u8 berry = ItemIdToBerryType(gSpecialVar_ItemId);
PlantBerryTree(ObjectEventGetBerryTreeId(gSelectedObjectEvent), berry, 1, TRUE); PlantBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent), berry, 1, TRUE);
ObjectEventInteractionGetBerryTreeData(); ObjectEventInteractionGetBerryTreeData();
} }
void ObjectEventInteractionPickBerryTree(void) void ObjectEventInteractionPickBerryTree(void)
{ {
u8 id = ObjectEventGetBerryTreeId(gSelectedObjectEvent); u8 id = GetObjectEventBerryTreeId(gSelectedObjectEvent);
u8 berry = GetBerryTypeByBerryTreeId(id); u8 berry = GetBerryTypeByBerryTreeId(id);
gSpecialVar_0x8004 = AddBagItem(BerryTypeToItemId(berry), GetBerryCountByBerryTreeId(id)); gSpecialVar_0x8004 = AddBagItem(BerryTypeToItemId(berry), GetBerryCountByBerryTreeId(id));
@@ -1312,7 +1312,7 @@ void ObjectEventInteractionPickBerryTree(void)
void ObjectEventInteractionRemoveBerryTree(void) void ObjectEventInteractionRemoveBerryTree(void)
{ {
RemoveBerryTree(ObjectEventGetBerryTreeId(gSelectedObjectEvent)); RemoveBerryTree(GetObjectEventBerryTreeId(gSelectedObjectEvent));
sub_8092EF0(gSpecialVar_LastTalked, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); sub_8092EF0(gSpecialVar_LastTalked, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
} }
+8 -3
View File
@@ -1246,7 +1246,7 @@ static void sub_8080018(void)
if (++sBerryBlenderData->framesToWait > 20) if (++sBerryBlenderData->framesToWait > 20)
{ {
ClearDialogWindowAndFrameToTransparent(4, TRUE); ClearDialogWindowAndFrameToTransparent(4, TRUE);
if (GetBlockReceivedStatus() == sub_800A9D8()) if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
{ {
for (i = 0; i < GetLinkPlayerCount(); i++) for (i = 0; i < GetLinkPlayerCount(); i++)
{ {
@@ -1500,7 +1500,7 @@ static void sub_80808D4(void)
switch (sBerryBlenderData->mainState) switch (sBerryBlenderData->mainState)
{ {
case 0: case 0:
sub_800B4C0(); SetWirelessCommType0();
sub_8080588(); sub_8080588();
Blender_SetParticipantBerryData(0, gSpecialVar_ItemId); Blender_SetParticipantBerryData(0, gSpecialVar_ItemId);
Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId); Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
@@ -1664,7 +1664,7 @@ static void sub_80808D4(void)
static void sub_8080DF8(void) static void sub_8080DF8(void)
{ {
s32 i; s32 i;
for (i = 0; i < 4; i++) for (i = 0; i < CMD_LENGTH / 2; i++)
{ {
gSendCmd[0] = 0; gSendCmd[0] = 0;
gSendCmd[2] = 0; gSendCmd[2] = 0;
@@ -2202,6 +2202,11 @@ static s16 sub_8081BD4(void)
return sUnknown_03000E06; return sUnknown_03000E06;
} }
#if MODERN
// TODO remove this as soon as the code below is understood
// add a UBFIX if required (code buggy?)
__attribute__((optimize("no-aggressive-loop-optimizations")))
#endif
static void Blender_CalculatePokeblock(struct BlenderBerry *berries, struct Pokeblock *pokeblock, u8 playersNo, u8 *flavors, u16 maxRPM) static void Blender_CalculatePokeblock(struct BlenderBerry *berries, struct Pokeblock *pokeblock, u8 playersNo, u8 *flavors, u16 maxRPM)
{ {
s32 i, j; s32 i, j;
+11 -6
View File
@@ -832,7 +832,7 @@ u32 sub_8020C0C(MainCallback callback)
return 0; return 0;
} }
void sub_8020C70(MainCallback callback) void StartBerryCrush(MainCallback callback)
{ {
u8 playerCount = 0; u8 playerCount = 0;
u8 multiplayerId; u8 multiplayerId;
@@ -842,7 +842,7 @@ void sub_8020C70(MainCallback callback)
SetMainCallback2(callback); SetMainCallback2(callback);
Rfu.unk_10 = 0; Rfu.unk_10 = 0;
Rfu.unk_12 = 0; Rfu.unk_12 = 0;
Rfu.unk_ee = 1; Rfu.errorState = 1;
return; return;
} }
@@ -853,7 +853,7 @@ void sub_8020C70(MainCallback callback)
SetMainCallback2(callback); SetMainCallback2(callback);
Rfu.unk_10 = 0; Rfu.unk_10 = 0;
Rfu.unk_12 = 0; Rfu.unk_12 = 0;
Rfu.unk_ee = 1; Rfu.errorState = 1;
return; return;
} }
@@ -863,7 +863,7 @@ void sub_8020C70(MainCallback callback)
SetMainCallback2(callback); SetMainCallback2(callback);
Rfu.unk_10 = 0; Rfu.unk_10 = 0;
Rfu.unk_12 = 0; Rfu.unk_12 = 0;
Rfu.unk_ee = 1; Rfu.errorState = 1;
return; return;
} }
@@ -3013,10 +3013,10 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4)
DrawDialogueFrame(0, 0); DrawDialogueFrame(0, 0);
AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3); AddTextPrinterParameterized2(0, 1, gText_SavingDontTurnOffPower, 0, 0, 2, 1, 3);
CopyWindowToVram(0, 3); CopyWindowToVram(0, 3);
CreateTask(sub_8153688, 0); CreateTask(Task_LinkSave, 0);
break; break;
case 3: case 3:
if (FuncIsActiveTask(sub_8153688)) if (FuncIsActiveTask(Task_LinkSave))
return 0; return 0;
break; break;
case 4: case 4:
@@ -3209,6 +3209,11 @@ static u32 sub_8024568(__attribute__((unused)) struct BerryCrushGame *r0, __attr
return 0; return 0;
} }
#if MODERN
// TODO remove this as soon as the code below is understood
// add a UBFIX if required (code buggy?)
__attribute__((optimize("no-aggressive-loop-optimizations")))
#endif
void sub_8024578(struct BerryCrushGame *r4) void sub_8024578(struct BerryCrushGame *r4)
{ {
u8 r5 = 0; u8 r5 = 0;
+398 -374
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -37,7 +37,7 @@ bool8 sub_80FC530(u8 arg0)
bool8 sub_80FC55C(void) bool8 sub_80FC55C(void)
{ {
if (GetBlockReceivedStatus() == sub_800A9D8()) if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
{ {
ResetBlockReceivedFlags(); ResetBlockReceivedFlags();
return TRUE; return TRUE;
+255 -213
View File
@@ -50,27 +50,36 @@ const u8 sText_4PlayerMode[] = _("4-PLAYER\nMODE");
const u8 sText_5PlayerMode[] = _("5-PLAYER\nMODE"); const u8 sText_5PlayerMode[] = _("5-PLAYER\nMODE");
static const u8 *const sPlayersNeededOrModeTexts[][5] = { static const u8 *const sPlayersNeededOrModeTexts[][5] = {
// 2 players required
{ {
sText_1PlayerNeeded, sText_1PlayerNeeded,
sText_2PlayerMode sText_2PlayerMode
}, { },
// 4 players required
{
sText_3PlayersNeeded, sText_3PlayersNeeded,
sText_2PlayersNeeded, sText_2PlayersNeeded,
sText_1PlayerNeeded, sText_1PlayerNeeded,
sText_4PlayerMode sText_4PlayerMode
}, { },
// 2-5 players required
{
sText_1PlayerNeeded, sText_1PlayerNeeded,
sText_2PlayerMode, sText_2PlayerMode,
sText_3PlayerMode, sText_3PlayerMode,
sText_4PlayerMode, sText_4PlayerMode,
sText_5PlayerMode sText_5PlayerMode
}, { },
// 3-5 players required
{
sText_2PlayersNeeded, sText_2PlayersNeeded,
sText_1PlayerNeeded, sText_1PlayerNeeded,
sText_3PlayerMode, sText_3PlayerMode,
sText_4PlayerMode, sText_4PlayerMode,
sText_5PlayerMode sText_5PlayerMode
}, { },
// 2-4 players required
{
sText_1PlayerNeeded, sText_1PlayerNeeded,
sText_2PlayerMode, sText_2PlayerMode,
sText_3PlayerMode, sText_3PlayerMode,
@@ -90,15 +99,15 @@ ALIGNED(4) const u8 sText_OtherTrainerUnavailableNow[] = _("The other TRAINER do
ALIGNED(4) const u8 sText_CantTransmitTrainerTooFar[] = _("You can't transmit with a TRAINER\nwho is too far away.\p"); ALIGNED(4) const u8 sText_CantTransmitTrainerTooFar[] = _("You can't transmit with a TRAINER\nwho is too far away.\p");
ALIGNED(4) const u8 sText_TrainersNotReadyYet[] = _("The other TRAINER(S) is/are not\nready yet.\p"); ALIGNED(4) const u8 sText_TrainersNotReadyYet[] = _("The other TRAINER(S) is/are not\nready yet.\p");
const u8 *const sCantTransmitToTrainerTexts[] = { static const u8 *const sCantTransmitToTrainerTexts[] = {
sText_CantTransmitTrainerTooFar, [UR_TRADE_PLAYER_NOT_READY - 1] = sText_CantTransmitTrainerTooFar,
sText_TrainersNotReadyYet [UR_TRADE_PARTNER_NOT_READY - 1] = sText_TrainersNotReadyYet
}; };
ALIGNED(4) const u8 sText_ModeWithTheseMembersWillBeCanceled[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}"); ALIGNED(4) const u8 sText_ModeWithTheseMembersWillBeCanceled[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}");
ALIGNED(4) const u8 sText_MemberNoLongerAvailable[] = _("There is a member who can no\nlonger remain available.\p"); ALIGNED(4) const u8 sText_MemberNoLongerAvailable[] = _("There is a member who can no\nlonger remain available.\p");
const u8 *const sPlayerUnavailableTexts[] = { static const u8 *const sPlayerUnavailableTexts[] = {
sText_OtherTrainerUnavailableNow, sText_OtherTrainerUnavailableNow,
sText_MemberNoLongerAvailable sText_MemberNoLongerAvailable
}; };
@@ -111,17 +120,17 @@ ALIGNED(4) const u8 sText_AwaitingOtherMembers[] = _("{STR_VAR_1}!\nAwaiting oth
ALIGNED(4) const u8 sText_QuitBeingMember[] = _("Quit being a member?"); ALIGNED(4) const u8 sText_QuitBeingMember[] = _("Quit being a member?");
ALIGNED(4) const u8 sText_StoppedBeingMember[] = _("You stopped being a member.\p"); ALIGNED(4) const u8 sText_StoppedBeingMember[] = _("You stopped being a member.\p");
const u8 *const sPlayerDisconnectedTexts[] = { static const u8 *const sPlayerDisconnectedTexts[] = {
NULL, [RFU_STATUS_OK] = NULL,
sText_MemberNoLongerAvailable, [RFU_STATUS_FATAL_ERROR] = sText_MemberNoLongerAvailable,
sText_TrainerAppearsUnavailable, [RFU_STATUS_CONNECTION_ERROR] = sText_TrainerAppearsUnavailable,
NULL, [RFU_STATUS_CHILD_SEND_COMPLETE] = NULL,
NULL, [RFU_STATUS_NEW_CHILD_DETECTED] = NULL,
NULL, [RFU_STATUS_JOIN_GROUP_OK] = NULL,
sText_PlayerRepliedNo, [RFU_STATUS_JOIN_GROUP_NO] = sText_PlayerRepliedNo,
NULL, [RFU_STATUS_WAIT_ACK_JOIN_GROUP] = NULL,
NULL, [RFU_STATUS_LEAVE_GROUP_NOTICE] = NULL,
sText_StoppedBeingMember [RFU_STATUS_LEAVE_GROUP] = sText_StoppedBeingMember
}; };
ALIGNED(4) const u8 sText_WirelessLinkEstablished[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established."); ALIGNED(4) const u8 sText_WirelessLinkEstablished[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established.");
@@ -130,16 +139,16 @@ ALIGNED(4) const u8 sText_LinkWithFriendDropped[] = _("The link with your friend
ALIGNED(4) const u8 sText_PlayerRepliedNo2[] = _("{STR_VAR_1} replied, “No…”"); ALIGNED(4) const u8 sText_PlayerRepliedNo2[] = _("{STR_VAR_1} replied, “No…”");
const u8 *const sLinkDroppedTexts[] = { const u8 *const sLinkDroppedTexts[] = {
NULL, [RFU_STATUS_OK] = NULL,
sText_LinkWithFriendDropped, [RFU_STATUS_FATAL_ERROR] = sText_LinkWithFriendDropped,
sText_LinkWithFriendDropped, [RFU_STATUS_CONNECTION_ERROR] = sText_LinkWithFriendDropped,
NULL, [RFU_STATUS_CHILD_SEND_COMPLETE] = NULL,
NULL, [RFU_STATUS_NEW_CHILD_DETECTED] = NULL,
NULL, [RFU_STATUS_JOIN_GROUP_OK] = NULL,
sText_PlayerRepliedNo2, [RFU_STATUS_JOIN_GROUP_NO] = sText_PlayerRepliedNo2,
NULL, [RFU_STATUS_WAIT_ACK_JOIN_GROUP] = NULL,
NULL, [RFU_STATUS_LEAVE_GROUP_NOTICE] = NULL,
NULL [RFU_STATUS_LEAVE_GROUP] = NULL
}; };
ALIGNED(4) const u8 sText_DoYouWantXMode[] = _("Do you want the {STR_VAR_2}\nMODE?"); ALIGNED(4) const u8 sText_DoYouWantXMode[] = _("Do you want the {STR_VAR_2}\nMODE?");
@@ -251,7 +260,7 @@ ALIGNED(4) const u8 sText_WaitForBattleFemale[] = _("A battle? Of course, but I
ALIGNED(4) const u8 sText_WaitForChatFemale[] = _("Did you want to chat?\nOkay, but please wait a moment."); ALIGNED(4) const u8 sText_WaitForChatFemale[] = _("Did you want to chat?\nOkay, but please wait a moment.");
ALIGNED(4) const u8 sText_ShowTrainerCardFemale[] = _("As my introduction, I'll show you\nmy TRAINER CARD."); ALIGNED(4) const u8 sText_ShowTrainerCardFemale[] = _("As my introduction, I'll show you\nmy TRAINER CARD.");
const u8 *const sText_WaitOrShowCardTexts[GENDER_COUNT][4] = { static const u8 *const sText_WaitOrShowCardTexts[GENDER_COUNT][4] = {
{ {
sText_WaitForBattleMale, sText_WaitForBattleMale,
sText_WaitForChatMale, sText_WaitForChatMale,
@@ -274,7 +283,7 @@ ALIGNED(4) const u8 sText_TradeWillBeStarted[] = _("The trade will be started.{P
ALIGNED(4) const u8 sText_BattleWillBeStarted[] = _("The battle will be started.{PAUSE 60}"); ALIGNED(4) const u8 sText_BattleWillBeStarted[] = _("The battle will be started.{PAUSE 60}");
ALIGNED(4) const u8 sText_EnteringChat[] = _("Entering the chat…{PAUSE 60}"); ALIGNED(4) const u8 sText_EnteringChat[] = _("Entering the chat…{PAUSE 60}");
const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = { static const u8 *const sStartActivityTexts[][GENDER_COUNT][3] = {
{ {
{ {
sText_BattleWillBeStarted, sText_BattleWillBeStarted,
@@ -325,18 +334,21 @@ const u8 *const sIfYouWantToDoSomethingTexts[GENDER_COUNT] = {
ALIGNED(4) const u8 sText_TrainerBattleBusy[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p"); ALIGNED(4) const u8 sText_TrainerBattleBusy[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p");
ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower1[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p"); ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower1[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p");
ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower2[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p"); ALIGNED(4) const u8 sText_NeedTwoMonsOfLevel30OrLower2[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p");
ALIGNED(4) const u8 sText_DeclineBattleMale[] = _("Oh, all right.\nCome see me anytime, okay?\p");
ALIGNED(4) const u8 stext_DeclineBattleFemale[] = _("Oh…\nPlease come by anytime.\p");
static const u8 *const sDeclineBattleTexts[GENDER_COUNT] = { ALIGNED(4) const u8 sText_DeclineChatMale[] = _("Oh, all right.\nCome see me anytime, okay?\p");
sText_DeclineBattleMale, ALIGNED(4) const u8 stext_DeclineChatFemale[] = _("Oh…\nPlease come by anytime.\p");
stext_DeclineBattleFemale
// Response from partner when player declines chat
static const u8 *const sDeclineChatTexts[GENDER_COUNT] = {
sText_DeclineChatMale,
stext_DeclineChatFemale
}; };
ALIGNED(4) const u8 sText_ChatDeclinedMale[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p"); ALIGNED(4) const u8 sText_ChatDeclinedMale[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p");
ALIGNED(4) const u8 sText_ChatDeclinedFemale[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p"); ALIGNED(4) const u8 sText_ChatDeclinedFemale[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p");
const u8 *const sChatDeclinedTexts[GENDER_COUNT] = { // Response from partner when they decline chat
static const u8 *const sChatDeclinedTexts[GENDER_COUNT] = {
sText_ChatDeclinedMale, sText_ChatDeclinedMale,
sText_ChatDeclinedFemale sText_ChatDeclinedFemale
}; };
@@ -484,8 +496,8 @@ static const u8 *const sChooseTrainerTexts[NUM_LINK_GROUP_TYPES] =
[LINK_GROUP_BERRY_PICKING] = sText_ChooseLeaderBerryPicking, [LINK_GROUP_BERRY_PICKING] = sText_ChooseLeaderBerryPicking,
[LINK_GROUP_WONDER_CARD] = sText_ChooseTrainerToShareWonderCards, [LINK_GROUP_WONDER_CARD] = sText_ChooseTrainerToShareWonderCards,
[LINK_GROUP_WONDER_NEWS] = sText_ChooseTrainerToShareWonderNews, [LINK_GROUP_WONDER_NEWS] = sText_ChooseTrainerToShareWonderNews,
[LINK_GROUP_UNK_9] = NULL, [LINK_GROUP_UNION_ROOM_RESUME] = NULL,
[LINK_GROUP_UNK_10] = NULL, [LINK_GROUP_UNION_ROOM_INIT] = NULL,
[LINK_GROUP_UNK_11] = NULL, [LINK_GROUP_UNK_11] = NULL,
[LINK_GROUP_RECORD_CORNER] = sText_ChooseLeaderRecordCorner, [LINK_GROUP_RECORD_CORNER] = sText_ChooseLeaderRecordCorner,
[LINK_GROUP_BERRY_BLENDER] = sText_ChooseLeaderBerryBlender, [LINK_GROUP_BERRY_BLENDER] = sText_ChooseLeaderBerryBlender,
@@ -567,39 +579,39 @@ const u8 *const sGladToMeetYouTexts[GENDER_COUNT] = {
ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}"); ALIGNED(4) const u8 sText_FinishedCheckingPlayersTrainerCard[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}");
const u8 *const sLinkGroupActivityTexts[] = { static const u8 *const sLinkGroupActivityNameTexts[] = {
sText_EmptyString, [ACTIVITY_NONE] = sText_EmptyString,
sText_SingleBattle, [ACTIVITY_BATTLE_SINGLE] = sText_SingleBattle,
sText_DoubleBattle, [ACTIVITY_BATTLE_DOUBLE] = sText_DoubleBattle,
sText_MultiBattle, [ACTIVITY_BATTLE_MULTI] = sText_MultiBattle,
sText_PokemonTrades, [ACTIVITY_TRADE] = sText_PokemonTrades,
sText_Chat, [ACTIVITY_CHAT] = sText_Chat,
sText_WonderCards, [ACTIVITY_WONDER_CARD] = sText_WonderCards,
sText_WonderNews, [ACTIVITY_WONDER_NEWS] = sText_WonderNews,
sText_Cards, [ACTIVITY_CARD] = sText_Cards,
sText_PokemonJump, [ACTIVITY_POKEMON_JUMP] = sText_PokemonJump,
sText_BerryCrush, [ACTIVITY_BERRY_CRUSH] = sText_BerryCrush,
sText_BerryPicking, [ACTIVITY_BERRY_PICK] = sText_BerryPicking,
sText_Search, [ACTIVITY_SEARCH] = sText_Search,
sText_EmptyString, [ACTIVITY_SPIN_TRADE] = sText_EmptyString,
sText_BattleTowerOpenLv, [ACTIVITY_BATTLE_TOWER_OPEN] = sText_BattleTowerOpenLv,
sText_RecordCorner, [ACTIVITY_RECORD_CORNER] = sText_RecordCorner,
sText_BerryBlender, [ACTIVITY_BERRY_BLENDER] = sText_BerryBlender,
sText_EmptyString, [ACTIVITY_ACCEPT] = sText_EmptyString,
sText_EmptyString, [ACTIVITY_DECLINE] = sText_EmptyString,
sText_EmptyString, [ACTIVITY_NPCTALK] = sText_EmptyString,
sText_EmptyString, [ACTIVITY_PLYRTALK] = sText_EmptyString,
sText_WonderCards, [ACTIVITY_WONDER_CARD2] = sText_WonderCards,
sText_WonderNews, [ACTIVITY_WONDER_NEWS2] = sText_WonderNews,
sText_CoolContest, [ACTIVITY_CONTEST_COOL] = sText_CoolContest,
sText_BeautyContest, [ACTIVITY_CONTEST_BEAUTY] = sText_BeautyContest,
sText_CuteContest, [ACTIVITY_CONTEST_CUTE] = sText_CuteContest,
sText_SmartContest, [ACTIVITY_CONTEST_SMART] = sText_SmartContest,
sText_ToughContest, [ACTIVITY_CONTEST_TOUGH] = sText_ToughContest,
sText_BattleTowerLv50 [ACTIVITY_BATTLE_TOWER] = sText_BattleTowerLv50
}; };
const struct WindowTemplate gUnknown_082F00BC = { static const struct WindowTemplate sWindowTemplate_BButtonCancel = {
.bg = 0x00, .bg = 0x00,
.tilemapLeft = 0x00, .tilemapLeft = 0x00,
.tilemapTop = 0x00, .tilemapTop = 0x00,
@@ -609,62 +621,69 @@ const struct WindowTemplate gUnknown_082F00BC = {
.baseBlock = 0x0008 .baseBlock = 0x0008
}; };
const u32 gUnknown_082F00C4[NUM_LINK_GROUP_TYPES] = { // Minimum and maximum number of players for a link group
0x0201, // A minimum of 0 means the min and max are equal
0x0202, #define LINK_GROUP_CAPACITY(min, max)(((min) << 12) | ((max) << 8))
0x0403, #define GROUP_MAX(capacity)(capacity & 0x0F)
0x0204, #define GROUP_MIN(capacity)(capacity >> 4)
0x2509, #define GROUP_MIN2(capacity)(capacity & 0xF0) // Unnecessary to have both, but needed to match
0x250a,
0x350b, static const u32 sLinkGroupToActivityAndCapacity[NUM_LINK_GROUP_TYPES] = {
0x0000, [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE | LINK_GROUP_CAPACITY(0, 2),
0x0000, [LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE | LINK_GROUP_CAPACITY(0, 2),
0x0000, [LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI | LINK_GROUP_CAPACITY(0, 4),
0x0000, [LINK_GROUP_TRADE] = ACTIVITY_TRADE | LINK_GROUP_CAPACITY(0, 2),
0x0000, [LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP | LINK_GROUP_CAPACITY(2, 5),
0x240f, [LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH | LINK_GROUP_CAPACITY(2, 5),
0x2410, [LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK | LINK_GROUP_CAPACITY(3, 5),
0x0000, [LINK_GROUP_WONDER_CARD] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
0x2417, [LINK_GROUP_WONDER_NEWS] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
0x2418, [LINK_GROUP_UNION_ROOM_RESUME] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
0x2419, [LINK_GROUP_UNION_ROOM_INIT] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
0x241a, [LINK_GROUP_UNK_11] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
0x241b, [LINK_GROUP_RECORD_CORNER] = ACTIVITY_RECORD_CORNER | LINK_GROUP_CAPACITY(2, 4),
0x021c, [LINK_GROUP_BERRY_BLENDER] = ACTIVITY_BERRY_BLENDER | LINK_GROUP_CAPACITY(2, 4),
0x020e [LINK_GROUP_UNK_14] = ACTIVITY_NONE | LINK_GROUP_CAPACITY(0, 0),
[LINK_GROUP_COOL_CONTEST] = ACTIVITY_CONTEST_COOL | LINK_GROUP_CAPACITY(2, 4),
[LINK_GROUP_BEAUTY_CONTEST] = ACTIVITY_CONTEST_BEAUTY | LINK_GROUP_CAPACITY(2, 4),
[LINK_GROUP_CUTE_CONTEST] = ACTIVITY_CONTEST_CUTE | LINK_GROUP_CAPACITY(2, 4),
[LINK_GROUP_SMART_CONTEST] = ACTIVITY_CONTEST_SMART | LINK_GROUP_CAPACITY(2, 4),
[LINK_GROUP_TOUGH_CONTEST] = ACTIVITY_CONTEST_TOUGH | LINK_GROUP_CAPACITY(2, 4),
[LINK_GROUP_BATTLE_TOWER] = ACTIVITY_BATTLE_TOWER | LINK_GROUP_CAPACITY(0, 2),
[LINK_GROUP_BATTLE_TOWER_OPEN] = ACTIVITY_BATTLE_TOWER_OPEN | LINK_GROUP_CAPACITY(0, 2)
}; };
const struct WindowTemplate gUnknown_082F011C = { static const struct WindowTemplate sWindowTemplate_PlayerList = {
.bg = 0x00, .bg = 0,
.tilemapLeft = 0x01, .tilemapLeft = 1,
.tilemapTop = 0x03, .tilemapTop = 3,
.width = 0x0d, .width = 13,
.height = 0x08, .height = 8,
.paletteNum = 0x0f, .paletteNum = 15,
.baseBlock = 0x0044 .baseBlock = 0x0044
}; };
const struct WindowTemplate gUnknown_082F0124 = { static const struct WindowTemplate sWindowTemplate_5PlayerList = {
.bg = 0x00, .bg = 0,
.tilemapLeft = 0x01, .tilemapLeft = 1,
.tilemapTop = 0x03, .tilemapTop = 3,
.width = 0x0d, .width = 13,
.height = 0x0a, .height = 10,
.paletteNum = 0x0f, .paletteNum = 15,
.baseBlock = 0x0044 .baseBlock = 0x0044
}; };
const struct WindowTemplate gUnknown_082F012C = { static const struct WindowTemplate sWindowTemplate_NumPlayerMode = {
.bg = 0x00, .bg = 0,
.tilemapLeft = 0x10, .tilemapLeft = 16,
.tilemapTop = 0x03, .tilemapTop = 3,
.width = 0x07, .width = 7,
.height = 0x04, .height = 4,
.paletteNum = 0x0f, .paletteNum = 15,
.baseBlock = 0x00c6 .baseBlock = 0x00c6
}; };
const struct ListMenuItem gUnknown_082F0134[] = { static const struct ListMenuItem sPossibleGroupMembersListMenuItems[] = {
{ sText_EmptyString, 0 }, { sText_EmptyString, 0 },
{ sText_EmptyString, 1 }, { sText_EmptyString, 1 },
{ sText_EmptyString, 2 }, { sText_EmptyString, 2 },
@@ -672,11 +691,11 @@ const struct ListMenuItem gUnknown_082F0134[] = {
{ sText_EmptyString, 4 } { sText_EmptyString, 4 }
}; };
const struct ListMenuTemplate gUnknown_082F015C = { static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = {
.items = gUnknown_082F0134, .items = sPossibleGroupMembersListMenuItems,
.moveCursorFunc = NULL, .moveCursorFunc = NULL,
.itemPrintFunc = sub_8013278, .itemPrintFunc = ItemPrintFunc_PossibleGroupMembers,
.totalItems = 5, .totalItems = ARRAY_COUNT(sPossibleGroupMembersListMenuItems),
.maxShowed = 5, .maxShowed = 5,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -732,11 +751,11 @@ const struct ListMenuItem gUnknown_082F0184[] = {
{ sText_EmptyString, 15 } { sText_EmptyString, 15 }
}; };
const struct ListMenuTemplate gUnknown_082F0204 = { static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = {
.items = gUnknown_082F0184, .items = gUnknown_082F0184,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc, .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = sub_8013DF4, .itemPrintFunc = ListMenuItemPrintFunc_UnionRoomGroups,
.totalItems = 16, .totalItems = ARRAY_COUNT(gUnknown_082F0184),
.maxShowed = 5, .maxShowed = 5,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -753,7 +772,7 @@ const struct ListMenuTemplate gUnknown_082F0204 = {
.cursorKind = 0 .cursorKind = 0
}; };
const struct WindowTemplate gUnknown_082F021C = { static const struct WindowTemplate sWindowTemplate_InviteToActivity = {
.bg = 0x00, .bg = 0x00,
.tilemapLeft = 0x14, .tilemapLeft = 0x14,
.tilemapTop = 0x05, .tilemapTop = 0x05,
@@ -770,11 +789,11 @@ const struct ListMenuItem gUnknown_082F0224[] = {
{ sText_Exit, 0x040 } { sText_Exit, 0x040 }
}; };
const struct ListMenuTemplate gUnknown_082F0244 = { static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = {
.items = gUnknown_082F0224, .items = gUnknown_082F0224,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc, .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = NULL, .itemPrintFunc = NULL,
.totalItems = 4, .totalItems = ARRAY_COUNT(gUnknown_082F0224),
.maxShowed = 4, .maxShowed = 4,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -791,7 +810,7 @@ const struct ListMenuTemplate gUnknown_082F0244 = {
.cursorKind = 0 .cursorKind = 0
}; };
const struct WindowTemplate gUnknown_082F025C = { static const struct WindowTemplate sWindowTemplate_RegisterForTrade = {
.bg = 0x00, .bg = 0x00,
.tilemapLeft = 0x12, .tilemapLeft = 0x12,
.tilemapTop = 0x07, .tilemapTop = 0x07,
@@ -801,17 +820,17 @@ const struct WindowTemplate gUnknown_082F025C = {
.baseBlock = 0x0001 .baseBlock = 0x0001
}; };
const struct ListMenuItem gUnknown_082F0264[] = { static const struct ListMenuItem sRegisterForTradeListMenuItems[] = {
{ gText_Register, 1 }, { gText_Register, 1 },
{ sText_Info, 2 }, { sText_Info, 2 },
{ sText_Exit, 3 } { sText_Exit, 3 }
}; };
const struct ListMenuTemplate gUnknown_082F027C = { static const struct ListMenuTemplate sListMenuTemplate_RegisterForTrade = {
.items = gUnknown_082F0264, .items = sRegisterForTradeListMenuItems,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc, .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = NULL, .itemPrintFunc = NULL,
.totalItems = 3, .totalItems = ARRAY_COUNT(sRegisterForTradeListMenuItems),
.maxShowed = 3, .maxShowed = 3,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -838,7 +857,7 @@ const struct WindowTemplate gUnknown_082F0294 = {
.baseBlock = 0x0001 .baseBlock = 0x0001
}; };
static const struct ListMenuItem sTradingBoardTypes[] = { static const struct ListMenuItem sTradingBoardTypes[NUMBER_OF_MON_TYPES] = {
{ gTypeNames[TYPE_NORMAL], TYPE_NORMAL }, { gTypeNames[TYPE_NORMAL], TYPE_NORMAL },
{ gTypeNames[TYPE_FIRE], TYPE_FIRE }, { gTypeNames[TYPE_FIRE], TYPE_FIRE },
{ gTypeNames[TYPE_WATER], TYPE_WATER }, { gTypeNames[TYPE_WATER], TYPE_WATER },
@@ -856,14 +875,14 @@ static const struct ListMenuItem sTradingBoardTypes[] = {
{ gTypeNames[TYPE_DRAGON], TYPE_DRAGON }, { gTypeNames[TYPE_DRAGON], TYPE_DRAGON },
{ gTypeNames[TYPE_STEEL], TYPE_STEEL }, { gTypeNames[TYPE_STEEL], TYPE_STEEL },
{ gTypeNames[TYPE_DARK], TYPE_DARK }, { gTypeNames[TYPE_DARK], TYPE_DARK },
{ sText_Exit, NUMBER_OF_MON_TYPES } { sText_Exit, NUMBER_OF_MON_TYPES }
}; };
const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = { static const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = {
.items = sTradingBoardTypes, .items = sTradingBoardTypes,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc, .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = NULL, .itemPrintFunc = NULL,
.totalItems = NUMBER_OF_MON_TYPES, .totalItems = ARRAY_COUNT(sTradingBoardTypes),
.maxShowed = 6, .maxShowed = 6,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -880,7 +899,7 @@ const struct ListMenuTemplate sMenuTemplate_TradingBoardRequestType = {
.cursorKind = 0 .cursorKind = 0
}; };
const struct WindowTemplate gUnknown_082F0344 = { static const struct WindowTemplate sWindowTemplate_TradingBoard = {
.bg = 0x00, .bg = 0x00,
.tilemapLeft = 0x01, .tilemapLeft = 0x01,
.tilemapTop = 0x01, .tilemapTop = 0x01,
@@ -900,7 +919,7 @@ const struct WindowTemplate gUnknown_082F034C = {
.baseBlock = 0x0039 .baseBlock = 0x0039
}; };
const struct ListMenuItem gUnknown_082F0354[] = { static const struct ListMenuItem sTradeBoardListMenuItems[] = {
{ sText_EmptyString, -3 }, { sText_EmptyString, -3 },
{ sText_EmptyString, 0 }, { sText_EmptyString, 0 },
{ sText_EmptyString, 1 }, { sText_EmptyString, 1 },
@@ -913,11 +932,11 @@ const struct ListMenuItem gUnknown_082F0354[] = {
{ sText_Exit2, 8 } { sText_Exit2, 8 }
}; };
const struct ListMenuTemplate gUnknown_082F03A4 = { static const struct ListMenuTemplate sTradeBoardListMenuTemplate = {
.items = gUnknown_082F0354, .items = sTradeBoardListMenuItems,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc, .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = sub_8017BE8, .itemPrintFunc = TradeBoardListMenuItemPrintFunc,
.totalItems = 10, .totalItems = ARRAY_COUNT(sTradeBoardListMenuItems),
.maxShowed = 6, .maxShowed = 6,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -944,7 +963,7 @@ const struct WindowTemplate UnrefWindowTemplate_082F03B4 = {
.baseBlock = 0x0039 .baseBlock = 0x0039
}; };
const struct ListMenuItem gUnknown_082F03C4[] = { static const struct ListMenuItem sEmptyListMenuItems[] = {
{ sText_EmptyString, 0 }, { sText_EmptyString, 0 },
{ sText_EmptyString, 1 }, { sText_EmptyString, 1 },
{ sText_EmptyString, 2 }, { sText_EmptyString, 2 },
@@ -963,11 +982,12 @@ const struct ListMenuItem gUnknown_082F03C4[] = {
{ sText_EmptyString, 15 } { sText_EmptyString, 15 }
}; };
const struct ListMenuTemplate UnrefListMenuTemplate_082F0444 = { // Unused
.items = gUnknown_082F03C4, static const struct ListMenuTemplate sUnknownListMenuTemplate = {
.items = sEmptyListMenuItems,
.moveCursorFunc = ListMenuDefaultCursorMoveFunc, .moveCursorFunc = ListMenuDefaultCursorMoveFunc,
.itemPrintFunc = nullsub_14, .itemPrintFunc = nullsub_14,
.totalItems = 16, .totalItems = ARRAY_COUNT(sEmptyListMenuItems),
.maxShowed = 4, .maxShowed = 4,
.windowId = 0, .windowId = 0,
.header_X = 0, .header_X = 0,
@@ -984,78 +1004,100 @@ const struct ListMenuTemplate UnrefListMenuTemplate_082F0444 = {
.cursorKind = 0 .cursorKind = 0
}; };
const struct UnkStruct_Shared gUnknown_082F045C = {0}; const struct WirelessGnameUnamePair sWirelessGnameUnamePair_Dummy = {0};
ALIGNED(4) const u8 gUnknown_082F0474[] = {0x01, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_SingleBattle[] = {ACTIVITY_BATTLE_SINGLE, 0xff};
ALIGNED(4) const u8 gUnknown_082F0478[] = {0x02, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_DoubleBattle[] = {ACTIVITY_BATTLE_DOUBLE, 0xff};
ALIGNED(4) const u8 gUnknown_082F047C[] = {0x03, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_MultiBattle[] = {ACTIVITY_BATTLE_MULTI, 0xff};
ALIGNED(4) const u8 gUnknown_082F0480[] = {0x04, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_Trade[] = {ACTIVITY_TRADE, 0xff};
ALIGNED(4) const u8 gUnknown_082F0484[] = {0x09, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_PokemonJump[] = {ACTIVITY_POKEMON_JUMP, 0xff};
ALIGNED(4) const u8 gUnknown_082F0488[] = {0x0a, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_BerryCrush[] = {ACTIVITY_BERRY_CRUSH, 0xff};
ALIGNED(4) const u8 gUnknown_082F048C[] = {0x0b, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_BerryPicking[] = {ACTIVITY_BERRY_PICK, 0xff};
ALIGNED(4) const u8 gUnknown_082F0490[] = {0x15, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_WonderCard[] = {ACTIVITY_WONDER_CARD2, 0xff};
ALIGNED(4) const u8 gUnknown_082F0494[] = {0x16, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_WonderNews[] = {ACTIVITY_WONDER_NEWS2, 0xff};
ALIGNED(4) const u8 gUnknown_082F0498[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xff}; ALIGNED(4) const u8 sAcceptedActivityIds_Resume[] = {
ALIGNED(4) const u8 gUnknown_082F04A4[] = {0x0c, 0xff}; IN_UNION_ROOM | ACTIVITY_NONE,
ALIGNED(4) const u8 gUnknown_082F04A8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15, 0x16, 0x0d, 0xff}; IN_UNION_ROOM | ACTIVITY_BATTLE_SINGLE,
ALIGNED(4) const u8 gUnknown_082F04B4[] = {0x0f, 0xff}; IN_UNION_ROOM | ACTIVITY_TRADE,
ALIGNED(4) const u8 gUnknown_082F04B8[] = {0x10, 0xff}; IN_UNION_ROOM | ACTIVITY_CHAT,
ALIGNED(4) const u8 gUnknown_082F04BC[] = {0x17, 0xff}; IN_UNION_ROOM | ACTIVITY_CARD,
ALIGNED(4) const u8 gUnknown_082F04C0[] = {0x18, 0xff}; IN_UNION_ROOM | ACTIVITY_ACCEPT,
ALIGNED(4) const u8 gUnknown_082F04C4[] = {0x19, 0xff}; IN_UNION_ROOM | ACTIVITY_DECLINE,
ALIGNED(4) const u8 gUnknown_082F04C8[] = {0x1a, 0xff}; IN_UNION_ROOM | ACTIVITY_NPCTALK,
ALIGNED(4) const u8 gUnknown_082F04CC[] = {0x1b, 0xff}; IN_UNION_ROOM | ACTIVITY_PLYRTALK,
ALIGNED(4) const u8 gUnknown_082F04D0[] = {0x1c, 0xff}; 0xff
ALIGNED(4) const u8 gUnknown_082F04D4[] = {0x0e, 0xff}; };
ALIGNED(4) const u8 sAcceptedActivityIds_Init[] = {ACTIVITY_SEARCH, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_Unk11[] = {
ACTIVITY_BATTLE_SINGLE,
ACTIVITY_BATTLE_DOUBLE,
ACTIVITY_BATTLE_MULTI,
ACTIVITY_TRADE,
ACTIVITY_POKEMON_JUMP,
ACTIVITY_BERRY_CRUSH,
ACTIVITY_BERRY_PICK,
ACTIVITY_WONDER_CARD2,
ACTIVITY_WONDER_NEWS2,
ACTIVITY_SPIN_TRADE,
0xff
};
ALIGNED(4) const u8 sAcceptedActivityIds_RecordCorner[] = {ACTIVITY_RECORD_CORNER, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_BerryBlender[] = {ACTIVITY_BERRY_BLENDER, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_CoolContest[] = {ACTIVITY_CONTEST_COOL, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_BeautyContest[] = {ACTIVITY_CONTEST_BEAUTY, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_CuteContest[] = {ACTIVITY_CONTEST_CUTE, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_SmartContest[] = {ACTIVITY_CONTEST_SMART, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_ToughContest[] = {ACTIVITY_CONTEST_TOUGH, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_BattleTower[] = {ACTIVITY_BATTLE_TOWER, 0xff};
ALIGNED(4) const u8 sAcceptedActivityIds_BattleTowerOpen[] = {ACTIVITY_BATTLE_TOWER_OPEN, 0xff};
const u8 *const gUnknown_082F04D8[NUM_LINK_GROUP_TYPES] = { const u8 *const sAcceptedActivityIds[NUM_LINK_GROUP_TYPES] = {
gUnknown_082F0474, [LINK_GROUP_SINGLE_BATTLE] = sAcceptedActivityIds_SingleBattle,
gUnknown_082F0478, [LINK_GROUP_DOUBLE_BATTLE] = sAcceptedActivityIds_DoubleBattle,
gUnknown_082F047C, [LINK_GROUP_MULTI_BATTLE] = sAcceptedActivityIds_MultiBattle,
gUnknown_082F0480, [LINK_GROUP_TRADE] = sAcceptedActivityIds_Trade,
gUnknown_082F0484, [LINK_GROUP_POKEMON_JUMP] = sAcceptedActivityIds_PokemonJump,
gUnknown_082F0488, [LINK_GROUP_BERRY_CRUSH] = sAcceptedActivityIds_BerryCrush,
gUnknown_082F048C, [LINK_GROUP_BERRY_PICKING] = sAcceptedActivityIds_BerryPicking,
gUnknown_082F0490, [LINK_GROUP_WONDER_CARD] = sAcceptedActivityIds_WonderCard,
gUnknown_082F0494, [LINK_GROUP_WONDER_NEWS] = sAcceptedActivityIds_WonderNews,
gUnknown_082F0498, [LINK_GROUP_UNION_ROOM_RESUME] = sAcceptedActivityIds_Resume,
gUnknown_082F04A4, [LINK_GROUP_UNION_ROOM_INIT] = sAcceptedActivityIds_Init,
gUnknown_082F04A8, [LINK_GROUP_UNK_11] = sAcceptedActivityIds_Unk11,
gUnknown_082F04B4, [LINK_GROUP_RECORD_CORNER] = sAcceptedActivityIds_RecordCorner,
gUnknown_082F04B8, [LINK_GROUP_BERRY_BLENDER] = sAcceptedActivityIds_BerryBlender,
NULL, [LINK_GROUP_UNK_14] = NULL,
gUnknown_082F04BC, [LINK_GROUP_COOL_CONTEST] = sAcceptedActivityIds_CoolContest,
gUnknown_082F04C0, [LINK_GROUP_BEAUTY_CONTEST] = sAcceptedActivityIds_BeautyContest,
gUnknown_082F04C4, [LINK_GROUP_CUTE_CONTEST] = sAcceptedActivityIds_CuteContest,
gUnknown_082F04C8, [LINK_GROUP_SMART_CONTEST] = sAcceptedActivityIds_SmartContest,
gUnknown_082F04CC, [LINK_GROUP_TOUGH_CONTEST] = sAcceptedActivityIds_ToughContest,
gUnknown_082F04D0, [LINK_GROUP_BATTLE_TOWER] = sAcceptedActivityIds_BattleTower,
gUnknown_082F04D4 [LINK_GROUP_BATTLE_TOWER_OPEN] = sAcceptedActivityIds_BattleTowerOpen
}; };
// Link group type to ID for gUnknown_02022C2C static const u8 sLinkGroupToURoomActivity[NUM_LINK_GROUP_TYPES + 2] =
const u8 gUnknown_082F0530[NUM_LINK_GROUP_TYPES + 2] =
{ {
0x01, [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE_SINGLE,
0x02, [LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_BATTLE_DOUBLE,
0x03, [LINK_GROUP_MULTI_BATTLE] = ACTIVITY_BATTLE_MULTI,
0x04, [LINK_GROUP_TRADE] = ACTIVITY_TRADE,
0x09, [LINK_GROUP_POKEMON_JUMP] = ACTIVITY_POKEMON_JUMP,
0x0a, [LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BERRY_CRUSH,
0x0b, [LINK_GROUP_BERRY_PICKING] = ACTIVITY_BERRY_PICK,
0x15, [LINK_GROUP_WONDER_CARD] = ACTIVITY_WONDER_CARD2,
0x16, [LINK_GROUP_WONDER_NEWS] = ACTIVITY_WONDER_NEWS2,
0x00, [LINK_GROUP_UNION_ROOM_RESUME] = ACTIVITY_NONE,
0x00, [LINK_GROUP_UNION_ROOM_INIT] = ACTIVITY_NONE,
0x00, [LINK_GROUP_UNK_11] = ACTIVITY_NONE,
0x0f, [LINK_GROUP_RECORD_CORNER] = ACTIVITY_RECORD_CORNER,
0x10, [LINK_GROUP_BERRY_BLENDER] = ACTIVITY_BERRY_BLENDER,
0x00, [LINK_GROUP_UNK_14] = ACTIVITY_NONE,
0x17, [LINK_GROUP_COOL_CONTEST] = ACTIVITY_CONTEST_COOL,
0x18, [LINK_GROUP_BEAUTY_CONTEST] = ACTIVITY_CONTEST_BEAUTY,
0x19, [LINK_GROUP_CUTE_CONTEST] = ACTIVITY_CONTEST_CUTE,
0x1a, [LINK_GROUP_SMART_CONTEST] = ACTIVITY_CONTEST_SMART,
0x1b, [LINK_GROUP_TOUGH_CONTEST] = ACTIVITY_CONTEST_TOUGH,
0x1c, [LINK_GROUP_BATTLE_TOWER] = ACTIVITY_BATTLE_TOWER,
0x0e [LINK_GROUP_BATTLE_TOWER_OPEN] = ACTIVITY_BATTLE_TOWER_OPEN
}; };
+6 -6
View File
@@ -450,7 +450,7 @@ static void (*const gUnknown_082F7AF4[])(void) =
}; };
// code // code
void sub_802493C(u16 a0, void (*callback)(void)) void StartDodrioBerryPicking(u16 a0, void (*callback)(void))
{ {
gUnknown_03000DB0 = FALSE; gUnknown_03000DB0 = FALSE;
@@ -832,9 +832,9 @@ static void sub_8025158(void)
static bool32 sub_8025170(void) static bool32 sub_8025170(void)
{ {
u8 r4 = GetBlockReceivedStatus(); u8 recvStatus = GetBlockReceivedStatus();
u8 r0 = sub_800A9D8(); u8 playerFlags = GetLinkPlayerCountAsBitFlags();
if (r4 == r0) if (recvStatus == playerFlags)
{ {
ResetBlockReceivedFlags(); ResetBlockReceivedFlags();
return TRUE; return TRUE;
@@ -4483,12 +4483,12 @@ static void sub_802A380(void)
case 2: case 2:
if (!IsDma3ManagerBusyWithBgCopy()) if (!IsDma3ManagerBusyWithBgCopy())
{ {
CreateTask(sub_8153688, 0); CreateTask(Task_LinkSave, 0);
gUnknown_02022CF8->state++; gUnknown_02022CF8->state++;
} }
break; break;
case 3: case 3:
if (!FuncIsActiveTask(sub_8153688)) if (!FuncIsActiveTask(Task_LinkSave))
gUnknown_02022CF8->state++; gUnknown_02022CF8->state++;
break; break;
default: default:
+5
View File
@@ -5273,12 +5273,17 @@ void InitEasyChatPhrases(void)
gSaveBlock1Ptr->mail[i].words[j] = 0xFFFF; gSaveBlock1Ptr->mail[i].words[j] = 0xFFFF;
} }
#ifndef UBFIX
// BUG: This is supposed to clear 64 bits, but this loop is clearing 64 bytes. // BUG: This is supposed to clear 64 bits, but this loop is clearing 64 bytes.
// However, this bug has no resulting effect on gameplay because only the // However, this bug has no resulting effect on gameplay because only the
// Mauville old man data is corrupted, which is initialized directly after // Mauville old man data is corrupted, which is initialized directly after
// this function is called when starting a new game. // this function is called when starting a new game.
for (i = 0; i < 64; i++) for (i = 0; i < 64; i++)
gSaveBlock1Ptr->additionalPhrases[i] = 0; gSaveBlock1Ptr->additionalPhrases[i] = 0;
#else
for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->additionalPhrases); i++)
gSaveBlock1Ptr->additionalPhrases[i] = 0;
#endif
} }
static bool8 sub_811F28C(void) static bool8 sub_811F28C(void)
+6 -6
View File
@@ -85,10 +85,10 @@ static u8 sub_81D4DE8(struct Unk03006370 *arg0)
return var0; return var0;
} }
static void sub_81D4E30(void) static void OpenEReaderLink(void)
{ {
memset(gDecompressionBuffer, 0, 0x2000); memset(gDecompressionBuffer, 0, 0x2000);
gLinkType = LINKTYPE_0x5503; gLinkType = LINKTYPE_EREADER;
OpenLink(); OpenLink();
SetSuppressLinkErrorMessage(TRUE); SetSuppressLinkErrorMessage(TRUE);
} }
@@ -255,7 +255,7 @@ static void sub_81D5084(u8 taskId)
data->unk8 = 1; data->unk8 = 1;
break; break;
case 1: case 1:
sub_81D4E30(); OpenEReaderLink();
sub_81D505C(&data->unk0); sub_81D505C(&data->unk0);
data->unk8 = 2; data->unk8 = 2;
break; break;
@@ -285,7 +285,7 @@ static void sub_81D5084(u8 taskId)
case 5: case 5:
if (sub_81D5064(&data->unk0, 90)) if (sub_81D5064(&data->unk0, 90))
{ {
sub_81D4E30(); OpenEReaderLink();
data->unk8 = 6; data->unk8 = 6;
} }
else if (gMain.newKeys & B_BUTTON) else if (gMain.newKeys & B_BUTTON)
@@ -319,7 +319,7 @@ static void sub_81D5084(u8 taskId)
else if (sub_81D5064(&data->unk0, 10)) else if (sub_81D5064(&data->unk0, 10))
{ {
CloseLink(); CloseLink();
sub_81D4E30(); OpenEReaderLink();
sub_81D505C(&data->unk0); sub_81D505C(&data->unk0);
} }
break; break;
@@ -360,7 +360,7 @@ static void sub_81D5084(u8 taskId)
data->unk8 = 12; data->unk8 = 12;
break; break;
case 12: case 12:
sub_81D4E30(); OpenEReaderLink();
AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard); AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard);
data->unk8 = 13; data->unk8 = 13;
break; break;
+1 -1
View File
@@ -96,7 +96,7 @@ void ScriptUnfreezeObjectEvents(void)
UnfreezeObjectEvents(); UnfreezeObjectEvents();
} }
void sub_8098524(void) void UnionRoom_UnlockPlayerAndChatPartner(void)
{ {
u8 playerObjectId; u8 playerObjectId;
+76 -67
View File
@@ -28,6 +28,7 @@
#include "constants/items.h" #include "constants/items.h"
#include "constants/mauville_old_man.h" #include "constants/mauville_old_man.h"
#include "constants/trainer_types.h" #include "constants/trainer_types.h"
#include "constants/union_room.h"
// this file was known as evobjmv.c in Game Freak's original source // this file was known as evobjmv.c in Game Freak's original source
@@ -97,7 +98,7 @@ static void DoRippleFieldEffect(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnSpawn(struct ObjectEvent*, struct Sprite*); static void DoGroundEffects_OnSpawn(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnBeginStep(struct ObjectEvent*, struct Sprite*); static void DoGroundEffects_OnBeginStep(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnFinishStep(struct ObjectEvent*, struct Sprite*); static void DoGroundEffects_OnFinishStep(struct ObjectEvent*, struct Sprite*);
static void sub_8097D68(struct Sprite*); static void UpdateObjectEventSpritePosition(struct Sprite*);
static void ApplyLevitateMovement(u8); static void ApplyLevitateMovement(u8);
static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *); static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *);
static bool8 MovementType_Hidden_Callback(struct ObjectEvent *, struct Sprite *); static bool8 MovementType_Hidden_Callback(struct ObjectEvent *, struct Sprite *);
@@ -129,7 +130,7 @@ static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId,
static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *); static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *);
static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8); static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8);
static void oamt_npc_ministep_reset(struct Sprite *, u8, u8); static void oamt_npc_ministep_reset(struct Sprite *, u8, u8);
static void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *); static void UpdateObjectEventSprite(struct Sprite *);
const u8 gReflectionEffectPaletteMap[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0}; const u8 gReflectionEffectPaletteMap[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0};
@@ -1522,7 +1523,9 @@ u8 AddPseudoObjectEvent(u16 graphicsId, void (*callback)(struct Sprite *), s16 x
return spriteId; return spriteId;
} }
u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction) // Used to create sprite object events instead of a full object event
// Used when resources are limiting, e.g. for the audience in contests or group members in Union Room
u8 CreateObjectSprite(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
{ {
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
@@ -1531,11 +1534,11 @@ u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
const struct ObjectEventGraphicsInfo *graphicsInfo; const struct ObjectEventGraphicsInfo *graphicsInfo;
graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, UpdateObjectEventSpriteSubpriorityAndVisibility, &spriteTemplate, &subspriteTables); MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, UpdateObjectEventSprite, &spriteTemplate, &subspriteTables);
*(u16 *)&spriteTemplate.paletteTag = 0xFFFF; *(u16 *)&spriteTemplate.paletteTag = 0xFFFF;
x += 7; x += 7;
y += 7; y += 7;
sub_80930E0(&x, &y, 8, 16); SetSpritePosToOffsetMapCoords(&x, &y, 8, 16);
spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0); spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -2363,7 +2366,8 @@ static u8 GetObjectTrainerTypeByObjectEventId(u8 objectEventId)
return gObjectEvents[objectEventId].trainerType; return gObjectEvents[objectEventId].trainerType;
} }
u8 sub_808F0D4(u8 localId, u8 mapNum, u8 mapGroup) // Unused
u8 GetObjectEventBerryTreeIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
{ {
u8 objectEventId; u8 objectEventId;
@@ -2374,7 +2378,7 @@ u8 sub_808F0D4(u8 localId, u8 mapNum, u8 mapGroup)
return gObjectEvents[objectEventId].trainerRange_berryTreeId; return gObjectEvents[objectEventId].trainerRange_berryTreeId;
} }
u8 ObjectEventGetBerryTreeId(u8 objectEventId) u8 GetObjectEventBerryTreeId(u8 objectEventId)
{ {
return gObjectEvents[objectEventId].trainerRange_berryTreeId; return gObjectEvents[objectEventId].trainerRange_berryTreeId;
} }
@@ -4864,22 +4868,22 @@ void SetSpritePosToMapCoords(s16 mapX, s16 mapY, s16 *destX, s16 *destY)
s16 dx = -gTotalCameraPixelOffsetX - gFieldCamera.x; s16 dx = -gTotalCameraPixelOffsetX - gFieldCamera.x;
s16 dy = -gTotalCameraPixelOffsetY - gFieldCamera.y; s16 dy = -gTotalCameraPixelOffsetY - gFieldCamera.y;
if (gFieldCamera.x > 0) if (gFieldCamera.x > 0)
dx += 1 << 4; dx += 16;
if (gFieldCamera.x < 0) if (gFieldCamera.x < 0)
dx -= 1 << 4; dx -= 16;
if (gFieldCamera.y > 0) if (gFieldCamera.y > 0)
dy += 1 << 4; dy += 16;
if (gFieldCamera.y < 0) if (gFieldCamera.y < 0)
dy -= 1 << 4; dy -= 16;
*destX = ((mapX - gSaveBlock1Ptr->pos.x) << 4) + dx; *destX = ((mapX - gSaveBlock1Ptr->pos.x) << 4) + dx;
*destY = ((mapY - gSaveBlock1Ptr->pos.y) << 4) + dy; *destY = ((mapY - gSaveBlock1Ptr->pos.y) << 4) + dy;
} }
void sub_80930E0(s16 *x, s16 *y, s16 dx, s16 dy) void SetSpritePosToOffsetMapCoords(s16 *x, s16 *y, s16 dx, s16 dy)
{ {
SetSpritePosToMapCoords(*x, *y, x, y); SetSpritePosToMapCoords(*x, *y, x, y);
*x += dx; *x += dx;
@@ -8630,51 +8634,56 @@ void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible)
sprite->invisible = TRUE; sprite->invisible = TRUE;
} }
static void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *sprite) #define tInvisible data[2]
#define tAnimNum data[3]
#define tAnimState data[4]
static void UpdateObjectEventSprite(struct Sprite *sprite)
{ {
sub_8097D68(sprite); UpdateObjectEventSpritePosition(sprite);
SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1); SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1);
UpdateObjectEventSpriteVisibility(sprite, sprite->data[2]); UpdateObjectEventSpriteVisibility(sprite, sprite->tInvisible);
} }
void sub_8097AF0(void) // Unused
static void DestroyObjectEventSprites(void)
{ {
int i; int i;
for(i = 0; i < MAX_SPRITES; i++) for (i = 0; i < MAX_SPRITES; i++)
{ {
struct Sprite *sprite = &gSprites[i]; struct Sprite *sprite = &gSprites[i];
if(sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility) if(sprite->inUse && sprite->callback == UpdateObjectEventSprite)
DestroySprite(sprite); DestroySprite(sprite);
} }
} }
int sub_8097B2C(u8 var) // this should return a u8, because all that call this shifts to u8, but it wont match because it doesnt shift u8 at the end. static int GetObjectEventSpriteId(u8 var) // this should return a u8, because all that call this shifts to u8, but it wont match because it doesnt shift u8 at the end.
{ {
int i; int i;
for(i = 0; i < MAX_SPRITES; i++) for (i = 0; i < MAX_SPRITES; i++)
{ {
struct Sprite *sprite = &gSprites[i]; struct Sprite *sprite = &gSprites[i];
if(sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility && (u8)sprite->data[0] == var) if(sprite->inUse && sprite->callback == UpdateObjectEventSprite && (u8)sprite->data[0] == var)
return i; return i;
} }
return MAX_SPRITES; return MAX_SPRITES;
} }
void sub_8097B78(u8 var1, u8 var2) void TurnObjectEventSprite(u8 objectEventId, u8 direction)
{ {
u8 spriteId = sub_8097B2C(var1); u8 spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(var2)); StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(direction));
} }
void sub_8097BB4(u8 var1, u8 graphicsId) void SetObjectEventSpriteGraphics(u8 objectEventId, u8 graphicsId)
{ {
int spriteId = sub_8097B2C(var1); int spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
struct Sprite *sprite = &gSprites[spriteId]; struct Sprite *sprite = &gSprites[spriteId];
const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
@@ -8685,7 +8694,7 @@ void sub_8097BB4(u8 var1, u8 graphicsId)
sprite->oam.paletteNum = graphicsInfo->paletteSlot; sprite->oam.paletteNum = graphicsInfo->paletteSlot;
sprite->images = graphicsInfo->images; sprite->images = graphicsInfo->images;
if(graphicsInfo->subspriteTables == NULL) if (graphicsInfo->subspriteTables == NULL)
{ {
sprite->subspriteTables = NULL; sprite->subspriteTables = NULL;
sprite->subspriteTableNum = 0; sprite->subspriteTableNum = 0;
@@ -8700,102 +8709,102 @@ void sub_8097BB4(u8 var1, u8 graphicsId)
} }
} }
void sub_8097C44(u8 var, bool32 var2) void SetObjectEventSpriteInvisibility(u8 objectEventId, bool32 invisible)
{ {
u8 spriteId = sub_8097B2C(var); u8 spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId == MAX_SPRITES) if (spriteId == MAX_SPRITES)
return; return;
if(var2) if (invisible)
gSprites[spriteId].data[2] = 1; gSprites[spriteId].tInvisible = TRUE;
else else
gSprites[spriteId].data[2] = 0; gSprites[spriteId].tInvisible = FALSE;
} }
bool32 sub_8097C8C(u8 var) bool32 IsObjectEventSpriteInvisible(u8 objectEventId)
{ {
u8 spriteId = sub_8097B2C(var); u8 spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId == MAX_SPRITES) if (spriteId == MAX_SPRITES)
return FALSE; return FALSE;
return (gSprites[spriteId].data[2] == TRUE); return (gSprites[spriteId].tInvisible == TRUE);
} }
void sub_8097CC4(u8 var1, u8 var2) void SetObjectEventSpriteAnim(u8 objectEventId, u8 animNum)
{ {
u8 spriteId = sub_8097B2C(var1); u8 spriteId = GetObjectEventSpriteId(objectEventId);
if(spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
gSprites[spriteId].data[3] = var2; gSprites[spriteId].tAnimNum = animNum;
gSprites[spriteId].data[4] = 0; gSprites[spriteId].tAnimState = 0;
} }
} }
void sub_8097CF4(struct Sprite *sprite) static void MoveUnionRoomObjectUp(struct Sprite *sprite)
{ {
switch(sprite->data[4]) switch(sprite->tAnimState)
{ {
case 0: case 0:
sprite->pos2.y = 0; sprite->pos2.y = 0;
sprite->data[4]++; sprite->tAnimState++;
case 1: case 1:
sprite->pos2.y -= 8; sprite->pos2.y -= 8;
if(sprite->pos2.y == -160) if (sprite->pos2.y == -160)
{ {
sprite->pos2.y = 0; sprite->pos2.y = 0;
sprite->data[2] = 1; sprite->tInvisible = TRUE;
sprite->data[3] = 0; sprite->tAnimNum = 0;
sprite->data[4] = 0; sprite->tAnimState = 0;
} }
} }
} }
void sub_8097D30(struct Sprite *sprite) static void MoveUnionRoomObjectDown(struct Sprite *sprite)
{ {
switch(sprite->data[4]) switch(sprite->tAnimState)
{ {
case 0: case 0:
sprite->pos2.y = -160; sprite->pos2.y = -160;
sprite->data[4]++; sprite->tAnimState++;
case 1: case 1:
sprite->pos2.y += 8; sprite->pos2.y += 8;
if(sprite->pos2.y == 0) if(sprite->pos2.y == 0)
{ {
sprite->data[3] = 0; sprite->tAnimNum = 0;
sprite->data[4] = 0; sprite->tAnimState = 0;
} }
} }
} }
static void sub_8097D68(struct Sprite *sprite) static void UpdateObjectEventSpritePosition(struct Sprite *sprite)
{ {
switch(sprite->data[3]) switch(sprite->tAnimNum)
{ {
case 1: case UNION_ROOM_SPAWN_IN:
sub_8097D30(sprite); MoveUnionRoomObjectDown(sprite);
break; break;
case 2: case UNION_ROOM_SPAWN_OUT:
sub_8097CF4(sprite); MoveUnionRoomObjectUp(sprite);
break; break;
case 0: case 0:
break; break;
default: default:
sprite->data[3] = 0; sprite->tAnimNum = 0;
break; break;
} }
} }
bool32 sub_8097D9C(u8 var) bool32 IsObjectEventSpriteAnimating(u8 var)
{ {
u8 spriteId = sub_8097B2C(var); u8 spriteId = GetObjectEventSpriteId(var);
if(spriteId == MAX_SPRITES) if (spriteId == MAX_SPRITES)
return FALSE; return FALSE;
if(gSprites[spriteId].data[3] != FALSE) if (gSprites[spriteId].tAnimNum != 0)
return TRUE; return TRUE;
return FALSE; return FALSE;
+1 -1
View File
@@ -378,7 +378,7 @@ void sub_81D4A90(void)
x = mew->currentCoords.x; x = mew->currentCoords.x;
y = mew->currentCoords.y; y = mew->currentCoords.y;
sub_80930E0(&x, &y, 8, 8); SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
sUnknown_0203CF50 = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, gSprites[mew->spriteId].subpriority - 1); sUnknown_0203CF50 = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, gSprites[mew->spriteId].subpriority - 1);
if (sUnknown_0203CF50 != MAX_SPRITES) if (sUnknown_0203CF50 != MAX_SPRITES)
{ {
+2 -2
View File
@@ -2043,7 +2043,7 @@ static bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task *task, struct ObjectEve
u8 FldEff_LavaridgeGymWarp(void) u8 FldEff_LavaridgeGymWarp(void)
{ {
u8 spriteId; u8 spriteId;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
gSprites[spriteId].coordOffsetEnabled = 1; gSprites[spriteId].coordOffsetEnabled = 1;
@@ -2136,7 +2136,7 @@ static bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *o
u8 FldEff_PopOutOfAsh(void) u8 FldEff_PopOutOfAsh(void)
{ {
u8 spriteId; u8 spriteId;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
gSprites[spriteId].oam.priority = gFieldEffectArguments[3]; gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
gSprites[spriteId].coordOffsetEnabled = 1; gSprites[spriteId].coordOffsetEnabled = 1;
+19 -19
View File
@@ -274,7 +274,7 @@ u32 FldEff_TallGrass(void)
x = gFieldEffectArguments[0]; x = gFieldEffectArguments[0];
y = gFieldEffectArguments[1]; y = gFieldEffectArguments[1];
sub_80930E0(&x, &y, 8, 8); SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -340,7 +340,7 @@ u32 FldEff_JumpTallGrass(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[10], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[10], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -380,7 +380,7 @@ u32 FldEff_LongGrass(void)
x = gFieldEffectArguments[0]; x = gFieldEffectArguments[0];
y = gFieldEffectArguments[1]; y = gFieldEffectArguments[1];
sub_80930E0(&x, &y, 8, 8); SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -443,7 +443,7 @@ u32 FldEff_JumpLongGrass(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[16], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[16], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -521,7 +521,7 @@ u32 FldEff_SandFootprints(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[11], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[11], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -539,7 +539,7 @@ u32 FldEff_DeepSandFootprints(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[23], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[23], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -557,7 +557,7 @@ u32 FldEff_BikeTireTracks(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[27], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[27], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -649,7 +649,7 @@ u32 FldEff_JumpSmallSplash(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[14], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[14], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -667,7 +667,7 @@ u32 FldEff_JumpBigSplash(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[12], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[12], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -805,7 +805,7 @@ u32 FldEff_Unknown19(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[17], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[17], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -822,7 +822,7 @@ u32 FldEff_Unknown20(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[18], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[18], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -839,7 +839,7 @@ u32 FldEff_Unknown21(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[19], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[19], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -856,7 +856,7 @@ u32 FldEff_Unknown22(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[20], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[20], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -888,7 +888,7 @@ u32 FldEff_Ash(void)
x = gFieldEffectArguments[0]; x = gFieldEffectArguments[0];
y = gFieldEffectArguments[1]; y = gFieldEffectArguments[1];
sub_80930E0(&x, &y, 8, 8); SetSpritePosToOffsetMapCoords(&x, &y, 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[6], x, y, gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[6], x, y, gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -944,7 +944,7 @@ u32 FldEff_SurfBlob(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[7], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[7], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96);
if (spriteId !=MAX_SPRITES) if (spriteId !=MAX_SPRITES)
{ {
@@ -1106,7 +1106,7 @@ u32 FldEff_Dust(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[9], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[9], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -1182,7 +1182,7 @@ u32 FldEff_Bubbles(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[34], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[34], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -1210,7 +1210,7 @@ u32 FldEff_BerryTreeGrowthSparkle(void)
u8 spriteId; u8 spriteId;
struct Sprite *sprite; struct Sprite *sprite;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
@@ -1330,7 +1330,7 @@ u32 FldEff_Sparkle(void)
gFieldEffectArguments[0] += 7; gFieldEffectArguments[0] += 7;
gFieldEffectArguments[1] += 7; gFieldEffectArguments[1] += 7;
sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[35], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[35], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
{ {
+4 -4
View File
@@ -162,7 +162,7 @@ static void Task_ReturnToFieldCableLink(u8 taskId)
switch (task->data[0]) switch (task->data[0])
{ {
case 0: case 0:
task->data[1] = sub_80B3050(); task->data[1] = CreateTask_ReestablishCableClubLink();
task->data[0]++; task->data[0]++;
break; break;
case 1: case 1:
@@ -204,7 +204,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
if (!IsLinkTaskFinished()) if (!IsLinkTaskFinished())
{ {
if (++task->data[1] > 1800) if (++task->data[1] > 1800)
sub_8011170(0x6000); GetLinkmanErrorParams(0x6000);
} }
else else
{ {
@@ -215,7 +215,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
case 2: case 2:
if (WaitForWeatherFadeIn() == TRUE) if (WaitForWeatherFadeIn() == TRUE)
{ {
sub_8009F18(); StartSendingKeysToLink();
ScriptContext2_Disable(); ScriptContext2_Disable();
DestroyTask(taskId); DestroyTask(taskId);
} }
@@ -240,7 +240,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId)
} }
break; break;
case 2: case 2:
sub_8009F18(); StartSendingKeysToLink();
ResetAllMultiplayerState(); ResetAllMultiplayerState();
ScriptContext2_Disable(); ScriptContext2_Disable();
DestroyTask(taskId); DestroyTask(taskId);
+9 -2
View File
@@ -533,9 +533,16 @@ static bool32 SavedMapViewIsEmpty(void)
u16 i; u16 i;
u32 marker = 0; u32 marker = 0;
#ifndef UBFIX
// BUG: This loop extends past the bounds of the mapView array. Its size is only 0x100. // BUG: This loop extends past the bounds of the mapView array. Its size is only 0x100.
for (i = 0; i < 0x200; i++) for (i = 0; i < 0x200; i++)
marker |= gSaveBlock1Ptr->mapView[i]; marker |= gSaveBlock1Ptr->mapView[i];
#else
// UBFIX: Only iterate over 0x100
for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->mapView); i++)
marker |= gSaveBlock1Ptr->mapView[i];
#endif
if (marker == 0) if (marker == 0)
return TRUE; return TRUE;
@@ -917,11 +924,11 @@ void GetCameraCoords(u16 *x, u16 *y)
*y = gSaveBlock1Ptr->pos.y; *y = gSaveBlock1Ptr->pos.y;
} }
void sub_8088B94(int x, int y, int a2) void MapGridSetMetatileImpassabilityAt(int x, int y, bool32 impassable)
{ {
if (x >= 0 && x < gBackupMapLayout.width && y >= 0 && y < gBackupMapLayout.height) if (x >= 0 && x < gBackupMapLayout.width && y >= 0 && y < gBackupMapLayout.height)
{ {
if (a2 != 0) if (impassable)
gBackupMapLayout.map[x + gBackupMapLayout.width * y] |= METATILE_COLLISION_MASK; gBackupMapLayout.map[x + gBackupMapLayout.width * y] |= METATILE_COLLISION_MASK;
else else
gBackupMapLayout.map[x + gBackupMapLayout.width * y] &= ~METATILE_COLLISION_MASK; gBackupMapLayout.map[x + gBackupMapLayout.width * y] &= ~METATILE_COLLISION_MASK;
+1 -1
View File
@@ -1008,7 +1008,7 @@ void DoSecretBaseGlitterMatSparkle(void)
s16 y = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y; s16 y = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y;
u8 spriteId; u8 spriteId;
sub_80930E0(&x, &y, 8, 4); SetSpritePosToOffsetMapCoords(&x, &y, 8, 4);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], x, y, 0); spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], x, y, 0);
if (spriteId != MAX_SPRITES) if (spriteId != MAX_SPRITES)
+9 -13
View File
@@ -1445,19 +1445,15 @@ const u32 gUnknown_08DD4620[] = INCBIN_U32("graphics/unknown/unknown_DD4620.bin.
const u32 gUnknown_08DD46E0[] = INCBIN_U32("graphics/unknown/unknown_DD46E0.bin.lz"); const u32 gUnknown_08DD46E0[] = INCBIN_U32("graphics/unknown/unknown_DD46E0.bin.lz");
const u32 gUnknown_08DD47A0[] = INCBIN_U32("graphics/unknown/unknown_DD47A0.bin.lz"); const u32 gUnknown_08DD47A0[] = INCBIN_U32("graphics/unknown/unknown_DD47A0.bin.lz");
// link // union room chat
const u16 gUnionRoomChat_Background_Pal[] = INCBIN_U16("graphics/union_room_chat/background.gbapal");
const u16 gLinkMiscMenu_Pal[] = INCBIN_U16("graphics/link/misc.gbapal"); const u32 gUnionRoomChat_Background_Gfx[] = INCBIN_U32("graphics/union_room_chat/background.4bpp.lz");
const u32 gLinkMiscMenu_Gfx[] = INCBIN_U32("graphics/link/misc.4bpp.lz"); const u32 gUnionRoomChat_Background_Tilemap[] = INCBIN_U32("graphics/union_room_chat/background.bin.lz");
const u32 gLinkMiscMenu_Tilemap[] = INCBIN_U32("graphics/link/misc.bin.lz"); const u16 gUnionRoomChat_Window_Pal1[] = INCBIN_U16("graphics/union_room_chat/window_1.gbapal");
const u16 gUnionRoomChat_Window_Pal2[] = INCBIN_U16("graphics/union_room_chat/window_2.gbapal");
const u16 gUnknown_08DD4BB0[] = INCBIN_U16("graphics/link/link1.gbapal"); const u32 gUnionRoomChat_Border_Gfx[] = INCBIN_U32("graphics/union_room_chat/border.4bpp.lz");
const u16 gUnknown_08DD4BD0[] = INCBIN_U16("graphics/link/link2.gbapal"); const u32 gUnionRoomChat_Border_Tilemap[] = INCBIN_U32("graphics/union_room_chat/border.bin.lz");
const u32 gUnionRoomChat_RButtonLabels[] = INCBIN_U32("graphics/union_room_chat/r_button_labels.4bpp.lz");
const u32 gUnknown_08DD4BF0[] = INCBIN_U32("graphics/link/link_winedge.4bpp.lz");
const u32 gUnknown_08DD4C4C[] = INCBIN_U32("graphics/link/link_winedge.bin.lz");
const u32 gUnknown_08DD4CF8[] = INCBIN_U32("graphics/interface/unk_change_case.4bpp.lz");
const u16 gTilesetPalettes_General[][16] = const u16 gTilesetPalettes_General[][16] =
{ {
+22 -22
View File
@@ -5,7 +5,7 @@
// IWRAM common // IWRAM common
u8 gCanvasColumnStart; u8 gCanvasColumnStart;
u16 (*gCanvasPixels)[][32]; u16 *gCanvasPixels;
u8 gCanvasRowEnd; u8 gCanvasRowEnd;
u8 gCanvasHeight; u8 gCanvasHeight;
u8 gCanvasColumnEnd; u8 gCanvasColumnEnd;
@@ -125,7 +125,7 @@ static void ApplyImageEffect_RedChannelGrayscale(u8 delta)
for (j = 0; j < gCanvasRowEnd; j++) for (j = 0; j < gCanvasRowEnd; j++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart]; u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++) for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{ {
@@ -150,7 +150,7 @@ static void ApplyImageEffect_RedChannelGrayscaleHighlight(u8 highlight)
for (j = 0; j < gCanvasRowEnd; j++) for (j = 0; j < gCanvasRowEnd; j++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart]; u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++) for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{ {
@@ -179,7 +179,7 @@ static void ApplyImageEffect_Grayscale(void)
for (j = 0; j < gCanvasRowEnd; j++) for (j = 0; j < gCanvasRowEnd; j++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart]; u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++) for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{ {
@@ -195,7 +195,7 @@ static void ApplyImageEffect_Blur(void)
for (i = 0; i < gCanvasColumnEnd; i++) for (i = 0; i < gCanvasColumnEnd; i++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[gCanvasRowStart * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart + i]; u16 *pixel = &pixelRow[gCanvasColumnStart + i];
u16 prevPixel = *pixel; u16 prevPixel = *pixel;
@@ -221,7 +221,7 @@ static void ApplyImageEffect_PersonalityColor(u8 personality)
for (j = 0; j < gCanvasRowEnd; j++) for (j = 0; j < gCanvasRowEnd; j++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart]; u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++) for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{ {
@@ -237,7 +237,7 @@ static void ApplyImageEffect_BlackAndWhite(void)
for (j = 0; j < gCanvasRowEnd; j++) for (j = 0; j < gCanvasRowEnd; j++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart]; u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++) for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{ {
@@ -255,7 +255,7 @@ static void ApplyImageEffect_BlackOutline(void)
// Handle top row of pixels first. // Handle top row of pixels first.
for (j = 0; j < gCanvasRowEnd; j++) for (j = 0; j < gCanvasRowEnd; j++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
pixel = &pixelRow[gCanvasColumnStart]; pixel = &pixelRow[gCanvasColumnStart];
*pixel = QuantizePixel_BlackOutline(pixel, pixel + 1); *pixel = QuantizePixel_BlackOutline(pixel, pixel + 1);
for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++) for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++)
@@ -270,7 +270,7 @@ static void ApplyImageEffect_BlackOutline(void)
// Handle each column from left to right. // Handle each column from left to right.
for (i = 0; i < gCanvasColumnEnd; i++) for (i = 0; i < gCanvasColumnEnd; i++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[gCanvasRowStart * gCanvasWidth];
pixel = &pixelRow[gCanvasColumnStart + i]; pixel = &pixelRow[gCanvasColumnStart + i];
*pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth); *pixel = QuantizePixel_BlackOutline(pixel, pixel + gCanvasWidth);
for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth) for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth)
@@ -289,7 +289,7 @@ static void ApplyImageEffect_Invert(void)
for (j = 0; j < gCanvasRowEnd; j++) for (j = 0; j < gCanvasRowEnd; j++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart]; u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++) for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{ {
@@ -306,7 +306,7 @@ static void ApplyImageEffect_Shimmer(void)
u16 prevPixel; u16 prevPixel;
// First, invert all of the colors. // First, invert all of the colors.
pixel = (*gCanvasPixels)[0]; pixel = gCanvasPixels;
for (i = 0; i < 64; i++) for (i = 0; i < 64; i++)
{ {
for (j = 0; j < 64; j++, pixel++) for (j = 0; j < 64; j++, pixel++)
@@ -319,7 +319,7 @@ static void ApplyImageEffect_Shimmer(void)
// Blur the pixels twice. // Blur the pixels twice.
for (j = 0; j < 64; j++) for (j = 0; j < 64; j++)
{ {
pixel = &(*gCanvasPixels)[0][j]; pixel = &gCanvasPixels[j];
prevPixel = *pixel; prevPixel = *pixel;
*pixel = 0x8000; *pixel = 0x8000;
for (i = 1, pixel += 64; i < 63; i++, pixel += 64) for (i = 1, pixel += 64; i < 63; i++, pixel += 64)
@@ -332,7 +332,7 @@ static void ApplyImageEffect_Shimmer(void)
} }
*pixel = 0x8000; *pixel = 0x8000;
pixel = &(*gCanvasPixels)[0][j]; pixel = &gCanvasPixels[j];
prevPixel = *pixel; prevPixel = *pixel;
*pixel = 0x8000; *pixel = 0x8000;
for (i = 1, pixel += 64; i < 63; i++, pixel += 64) for (i = 1, pixel += 64; i < 63; i++, pixel += 64)
@@ -350,7 +350,7 @@ static void ApplyImageEffect_Shimmer(void)
// Finally, invert colors back to the original color space. // Finally, invert colors back to the original color space.
// The above blur causes the outline areas to darken, which makes // The above blur causes the outline areas to darken, which makes
// this inversion give the effect of light outlines. // this inversion give the effect of light outlines.
pixel = (*gCanvasPixels)[0]; pixel = gCanvasPixels;
for (i = 0; i < 64; i++) for (i = 0; i < 64; i++)
{ {
for (j = 0; j < 64; j++, pixel++) for (j = 0; j < 64; j++, pixel++)
@@ -367,7 +367,7 @@ static void ApplyImageEffect_BlurRight(void)
for (j = 0; j < gCanvasRowEnd; j++) for (j = 0; j < gCanvasRowEnd; j++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart]; u16 *pixel = &pixelRow[gCanvasColumnStart];
u16 prevPixel = *pixel; u16 prevPixel = *pixel;
for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++) for (i = 1, pixel++; i < gCanvasColumnEnd - 1; i++, pixel++)
@@ -387,7 +387,7 @@ static void ApplyImageEffect_BlurDown(void)
for (i = 0; i < gCanvasColumnEnd; i++) for (i = 0; i < gCanvasColumnEnd; i++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][gCanvasRowStart * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[gCanvasRowStart * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart + i]; u16 *pixel = &pixelRow[gCanvasColumnStart + i];
u16 prevPixel = *pixel; u16 prevPixel = *pixel;
for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth) for (j = 1, pixel += gCanvasWidth; j < gCanvasRowEnd - 1; j++, pixel += gCanvasWidth)
@@ -445,7 +445,7 @@ static void AddPointillismPoints(u16 arg0)
for (i = 0; i < points[0].delta; i++) for (i = 0; i < points[0].delta; i++)
{ {
u16 *pixel = &(*gCanvasPixels)[points[i].row * 2][points[i].column]; u16 *pixel = &gCanvasPixels[points[i].row * 64] + points[i].column;
if (!(0x8000 & *pixel)) if (!(0x8000 & *pixel))
{ {
@@ -910,7 +910,7 @@ static void QuantizePalette_Standard(bool8 useLimitedPalette)
gCanvasPalette[maxIndex] = RGB2(15, 15, 15); gCanvasPalette[maxIndex] = RGB2(15, 15, 15);
for (j = 0; j < gCanvasRowEnd; j++) for (j = 0; j < gCanvasRowEnd; j++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart]; u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++) for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{ {
@@ -978,7 +978,7 @@ static void QuantizePalette_BlackAndWhite(void)
for (j = 0; j < gCanvasRowEnd; j++) for (j = 0; j < gCanvasRowEnd; j++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart]; u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++) for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{ {
@@ -1009,7 +1009,7 @@ static void QuantizePalette_GrayscaleSmall(void)
for (j = 0; j < gCanvasRowEnd; j++) for (j = 0; j < gCanvasRowEnd; j++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart]; u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++) for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{ {
@@ -1027,7 +1027,7 @@ static void QuantizePalette_Grayscale(void)
for (j = 0; j < gCanvasRowEnd; j++) for (j = 0; j < gCanvasRowEnd; j++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart]; u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++) for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{ {
@@ -1045,7 +1045,7 @@ static void QuantizePalette_PrimaryColors(void)
for (j = 0; j < gCanvasRowEnd; j++) for (j = 0; j < gCanvasRowEnd; j++)
{ {
u16 *pixelRow = &(*gCanvasPixels)[0][(gCanvasRowStart + j) * gCanvasWidth]; u16 *pixelRow = &gCanvasPixels[(gCanvasRowStart + j) * gCanvasWidth];
u16 *pixel = &pixelRow[gCanvasColumnStart]; u16 *pixel = &pixelRow[gCanvasColumnStart];
for (i = 0; i < gCanvasColumnEnd; i++, pixel++) for (i = 0; i < gCanvasColumnEnd; i++, pixel++)
{ {
+1 -1
View File
@@ -2359,7 +2359,7 @@ void SetupBagMenu_Textboxes(void)
DeactivateAllTextPrinters(); DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 1, 0xE0); LoadUserWindowBorderGfx(0, 1, 0xE0);
LoadMessageBoxGfx(0, 10, 0xD0); LoadMessageBoxGfx(0, 10, 0xD0);
sub_819A2BC(0xC0, 1); ListMenuLoadStdPalAt(0xC0, 1);
LoadPalette(&gUnknown_0860F074, 0xF0, 0x20); LoadPalette(&gUnknown_0860F074, 0xF0, 0x20);
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
{ {
+2 -2
View File
@@ -488,7 +488,7 @@ static void rfu_CB_configGameData(u8 reqCommand, u16 reqResult)
for (i = 0; i < RFU_GAME_NAME_LENGTH; ++i) for (i = 0; i < RFU_GAME_NAME_LENGTH; ++i)
gRfuLinkStatus->my.gname[i] = *gname_uname_p++; gRfuLinkStatus->my.gname[i] = *gname_uname_p++;
++gname_uname_p; ++gname_uname_p;
for (i = 0; i < RFU_USER_NAME_LENGTH; ++i) for (i = 0; i < PLAYER_NAME_LENGTH + 1; ++i)
gRfuLinkStatus->my.uname[i] = *gname_uname_p++; gRfuLinkStatus->my.uname[i] = *gname_uname_p++;
} }
rfu_STC_REQ_callback(reqCommand, reqResult); rfu_STC_REQ_callback(reqCommand, reqResult);
@@ -718,7 +718,7 @@ static void rfu_STC_readParentCandidateList(void)
for (j = 0; j < RFU_GAME_NAME_LENGTH; ++j) for (j = 0; j < RFU_GAME_NAME_LENGTH; ++j)
target->gname[j] = *packet_p++; target->gname[j] = *packet_p++;
++packet_p; ++packet_p;
for (j = 0; j < RFU_USER_NAME_LENGTH; ++j) for (j = 0; j < PLAYER_NAME_LENGTH + 1; ++j)
target->uname[j] = *packet_p++; target->uname[j] = *packet_p++;
++gRfuLinkStatus->findParentCount; ++gRfuLinkStatus->findParentCount;
} }
+173 -173
View File
@@ -1,5 +1,3 @@
// Includes
#include "global.h" #include "global.h"
#include "m4a.h" #include "m4a.h"
#include "malloc.h" #include "malloc.h"
@@ -30,10 +28,6 @@
#include "constants/rgb.h" #include "constants/rgb.h"
#include "constants/trade.h" #include "constants/trade.h"
extern u16 gHeldKeyCodeToSend;
// Static type declarations
struct BlockTransfer struct BlockTransfer
{ {
u16 pos; u16 pos;
@@ -51,15 +45,13 @@ struct LinkTestBGInfo
u32 dummy_C; u32 dummy_C;
}; };
// Static RAM declarations
static struct BlockTransfer sBlockSend; static struct BlockTransfer sBlockSend;
static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS]; static struct BlockTransfer sBlockRecv[MAX_LINK_PLAYERS];
static u32 sBlockSendDelayCounter; static u32 sBlockSendDelayCounter;
static u32 gUnknown_03000D54; static bool32 sDummy1; // Never read
static u8 gUnknown_03000D58; static bool8 sDummy2; // Never assigned, read in unused function
static u32 sPlayerDataExchangeStatus; static u32 sPlayerDataExchangeStatus;
static u32 gUnknown_03000D60; static bool32 sDummy3; // Never read
static u8 sLinkTestLastBlockSendPos; static u8 sLinkTestLastBlockSendPos;
static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS]; static u8 sLinkTestLastBlockRecvPos[MAX_LINK_PLAYERS];
static u8 sNumVBlanksWithoutSerialIntr; static u8 sNumVBlanksWithoutSerialIntr;
@@ -74,15 +66,15 @@ u32 gLinkDebugSeed;
struct LinkPlayerBlock gLocalLinkPlayerBlock; struct LinkPlayerBlock gLocalLinkPlayerBlock;
bool8 gLinkErrorOccurred; bool8 gLinkErrorOccurred;
u32 gLinkDebugFlags; u32 gLinkDebugFlags;
u32 gFiller_03003074; u32 gLinkFiller1;
bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS]; bool8 gRemoteLinkPlayersNotReceived[MAX_LINK_PLAYERS];
u8 gBlockReceivedStatus[MAX_LINK_PLAYERS]; u8 gBlockReceivedStatus[MAX_LINK_PLAYERS];
u32 gFiller_03003080; u32 gLinkFiller2;
u16 gLinkHeldKeys; u16 gLinkHeldKeys;
u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH]; u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
u32 gLinkStatus; u32 gLinkStatus;
bool8 gUnknown_030030E4; bool8 gLinkDummy1; // Never read
bool8 gUnknown_030030E8; bool8 gLinkDummy2; // Never read
bool8 gUnknown_030030EC[MAX_LINK_PLAYERS]; bool8 gUnknown_030030EC[MAX_LINK_PLAYERS];
bool8 gUnknown_030030F0[MAX_LINK_PLAYERS]; bool8 gUnknown_030030F0[MAX_LINK_PLAYERS];
u16 gUnknown_030030F4; u16 gUnknown_030030F4;
@@ -97,15 +89,13 @@ void (*gLinkCallback)(void);
u8 gShouldAdvanceLinkState; u8 gShouldAdvanceLinkState;
u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS]; u16 gLinkTestBlockChecksums[MAX_LINK_PLAYERS];
u8 gBlockRequestType; u8 gBlockRequestType;
u32 gFiller_03003154; u32 gLinkFiller3;
u32 gFiller_03003158; u32 gLinkFiller4;
u32 gFiller_0300315c; u32 gLinkFiller5;
u8 gLastSendQueueCount; u8 gLastSendQueueCount;
struct Link gLink; struct Link gLink;
u8 gLastRecvQueueCount; u8 gLastRecvQueueCount;
u16 gLinkSavedIme; u16 gLinkSavedIme;
u32 gFiller_03004138;
u32 gFiller_0300413C;
EWRAM_DATA u8 gLinkTestDebugValuesEnabled = 0; EWRAM_DATA u8 gLinkTestDebugValuesEnabled = 0;
EWRAM_DATA u8 gUnknown_020223BD = 0; EWRAM_DATA u8 gUnknown_020223BD = 0;
@@ -124,16 +114,16 @@ EWRAM_DATA struct {
u8 lastSendQueueCount; u8 lastSendQueueCount;
u8 unk_06; u8 unk_06;
} sLinkErrorBuffer = {}; } sLinkErrorBuffer = {};
EWRAM_DATA u16 gUnknown_02022B08 = 0; static EWRAM_DATA u16 sUnknown_02022B08 = 0;
EWRAM_DATA void *gUnknown_02022B0C = NULL; static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL;
// Static ROM declarations // Static ROM declarations
static void InitLocalLinkPlayer(void); static void InitLocalLinkPlayer(void);
static void sub_80096BC(void); static void VBlankCB_LinkError(void);
static void CB2_LinkTest(void); static void CB2_LinkTest(void);
static void ProcessRecvCmds(u8 unused); static void ProcessRecvCmds(u8 unused);
static void sub_8009F70(void); static void LinkCB_SendHeldKeys(void);
static void ResetBlockSend(void); static void ResetBlockSend(void);
static bool32 InitBlockSend(const void *src, size_t size); static bool32 InitBlockSend(const void *src, size_t size);
static void LinkCB_BlockSendBegin(void); static void LinkCB_BlockSendBegin(void);
@@ -155,7 +145,7 @@ static void sub_800AE5C(void);
static void CheckErrorStatus(void); static void CheckErrorStatus(void);
static void CB2_PrintErrorMessage(void); static void CB2_PrintErrorMessage(void);
static bool8 IsSioMultiMaster(void); static bool8 IsSioMultiMaster(void);
static void sub_800B4A4(void); static void SetWirelessCommType0_Internal(void);
static void DisableSerial(void); static void DisableSerial(void);
static void EnableSerial(void); static void EnableSerial(void);
static void CheckMasterOrSlave(void); static void CheckMasterOrSlave(void);
@@ -172,29 +162,29 @@ static void SendRecvDone(void);
// .rodata // .rodata
ALIGNED(4) const u16 gWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal"); static const u16 sWirelessLinkDisplayPal[] = INCBIN_U16("graphics/interface/wireless_link_display.gbapal");
const u32 gWirelessLinkDisplayGfx[] = INCBIN_U32("graphics/interface/wireless_link_display.4bpp.lz"); static const u32 sWirelessLinkDisplayGfx[] = INCBIN_U32("graphics/interface/wireless_link_display.4bpp.lz");
const u32 gWirelessLinkDisplayTilemap[] = INCBIN_U32("graphics/interface/wireless_link_display.bin.lz"); static const u32 sWirelessLinkDisplayTilemap[] = INCBIN_U32("graphics/interface/wireless_link_display.bin.lz");
const u16 gLinkTestDigitsPal[] = INCBIN_U16("graphics/interface/link_test_digits.gbapal"); static const u16 sLinkTestDigitsPal[] = INCBIN_U16("graphics/interface/link_test_digits.gbapal");
const u16 gLinkTestDigitsGfx[] = INCBIN_U16("graphics/interface/link_test_digits.4bpp"); static const u16 sLinkTestDigitsGfx[] = INCBIN_U16("graphics/interface/link_test_digits.4bpp");
const u8 unkstring_82ed160[] = _("{HIGHLIGHT TRANSPARENT}{COLOR WHITE}"); static const u8 sUnusedTransparentWhite[] = _("{HIGHLIGHT TRANSPARENT}{COLOR WHITE}");
const u16 g2BlankTilesGfx[] = INCBIN_U16("graphics/interface/blank_1x2.4bpp"); static const u16 s2BlankTilesGfx[] = INCBIN_U16("graphics/interface/blank_1x2.4bpp");
const struct BlockRequest gUnknown_082ED1A8[] = { static const struct BlockRequest sBlockRequests[] = {
{gBlockSendBuffer, 200}, {gBlockSendBuffer, 200},
{gBlockSendBuffer, 200}, {gBlockSendBuffer, 200},
{gBlockSendBuffer, 100}, {gBlockSendBuffer, 100},
{gBlockSendBuffer, 220}, {gBlockSendBuffer, 220},
{gBlockSendBuffer, 40} {gBlockSendBuffer, 40}
}; };
const u8 gBGControlRegs[] = { static const u8 sBGControlRegs[] = {
REG_OFFSET_BG0CNT, REG_OFFSET_BG0CNT,
REG_OFFSET_BG1CNT, REG_OFFSET_BG1CNT,
REG_OFFSET_BG2CNT, REG_OFFSET_BG2CNT,
REG_OFFSET_BG3CNT REG_OFFSET_BG3CNT
}; };
const char gASCIIGameFreakInc[] = "GameFreak inc."; static const char sASCIIGameFreakInc[] = "GameFreak inc.";
const char gASCIITestPrint[] = "TEST PRINT\nP0\nP1\nP2\nP3"; static const char sASCIITestPrint[] = "TEST PRINT\nP0\nP1\nP2\nP3";
const struct BgTemplate gUnknown_082ED1FC[] = { static const struct BgTemplate sLinkErrorBgTemplates[] = {
{ {
.bg = 0, .bg = 0,
.charBaseIndex = 2, .charBaseIndex = 2,
@@ -207,29 +197,50 @@ const struct BgTemplate gUnknown_082ED1FC[] = {
.priority = 1 .priority = 1
} }
}; };
const struct WindowTemplate gUnknown_082ED204[] = { static const struct WindowTemplate sLinkErrorWindowTemplates[] = {
{0x00, 0x00, 0x00, 0x1E, 0x05, 0x0F, 0x0002}, {
{0x00, 0x00, 0x06, 0x1E, 0x07, 0x0F, 0x0098}, .bg = 0,
{0x00, 0x00, 0x0D, 0x1E, 0x07, 0x0F, 0x016A}, .tilemapLeft = 0,
DUMMY_WIN_TEMPLATE .tilemapTop = 0,
.width = 30,
.height = 5,
.paletteNum = 15,
.baseBlock = 0x002
}, {
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 6,
.width = 30,
.height = 7,
.paletteNum = 15,
.baseBlock = 0x098
}, {
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 13,
.width = 30,
.height = 7,
.paletteNum = 15,
.baseBlock = 0x16A
}, DUMMY_WIN_TEMPLATE
}; };
static const u8 sTextColors[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY }; static const u8 sTextColors[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY };
static const u8 sUnused_082ED224[] = {0x00, 0xff, 0xfe, 0xff, 0x00}; static const u8 sUnused_082ED224[] = {0x00, 0xFF, 0xFE, 0xFF, 0x00};
// .text // .text
bool8 IsWirelessAdapterConnected(void) bool8 IsWirelessAdapterConnected(void)
{ {
sub_800B488(); SetWirelessCommType1();
sub_800E700(); InitRFUAPI();
if (rfu_LMAN_REQBN_softReset_and_checkID() == 0x8001) if (rfu_LMAN_REQBN_softReset_and_checkID() == 0x8001)
{ {
rfu_REQ_stopMode(); rfu_REQ_stopMode();
rfu_waitREQComplete(); rfu_waitREQComplete();
return TRUE; return TRUE;
} }
sub_800B4A4(); SetWirelessCommType0_Internal();
CloseLink(); CloseLink();
RestoreSerialTimer3IntrHandlers(); RestoreSerialTimer3IntrHandlers();
return FALSE; return FALSE;
@@ -242,8 +253,8 @@ void Task_DestroySelf(u8 taskId)
static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 a4) static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock, u16 a4)
{ {
LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20); LoadPalette(sLinkTestDigitsPal, paletteNum * 16, 0x20);
DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof gLinkTestDigitsGfx); DmaCopy16(3, sLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock) + (16 * a4), sizeof sLinkTestDigitsGfx);
gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
gLinkTestBGInfo.paletteNum = paletteNum; gLinkTestBGInfo.paletteNum = paletteNum;
gLinkTestBGInfo.dummy_8 = a4; gLinkTestBGInfo.dummy_8 = a4;
@@ -265,12 +276,12 @@ static void InitLinkTestBG(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charB
void sub_80094EC(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock) void sub_80094EC(u8 paletteNum, u8 bgNum, u8 screenBaseBlock, u8 charBaseBlock)
{ {
LoadPalette(gLinkTestDigitsPal, paletteNum * 16, 0x20); LoadPalette(sLinkTestDigitsPal, paletteNum * 16, 0x20);
DmaCopy16(3, gLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof gLinkTestDigitsGfx); DmaCopy16(3, sLinkTestDigitsGfx, (u16 *)BG_CHAR_ADDR(charBaseBlock), sizeof sLinkTestDigitsGfx);
gLinkTestBGInfo.screenBaseBlock = screenBaseBlock; gLinkTestBGInfo.screenBaseBlock = screenBaseBlock;
gLinkTestBGInfo.paletteNum = paletteNum; gLinkTestBGInfo.paletteNum = paletteNum;
gLinkTestBGInfo.dummy_8 = 0; gLinkTestBGInfo.dummy_8 = 0;
SetGpuReg(gBGControlRegs[bgNum], BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock)); SetGpuReg(sBGControlRegs[bgNum], BGCNT_SCREENBASE(screenBaseBlock) | BGCNT_CHARBASE(charBaseBlock));
} }
void LinkTestScreen(void) void LinkTestScreen(void)
@@ -280,9 +291,9 @@ void LinkTestScreen(void)
ResetSpriteData(); ResetSpriteData();
FreeAllSpritePalettes(); FreeAllSpritePalettes();
ResetTasks(); ResetTasks();
SetVBlankCallback(sub_80096BC); SetVBlankCallback(VBlankCB_LinkError);
ResetBlockSend(); ResetBlockSend();
gLinkType = LINKTYPE_0x1111; gLinkType = LINKTYPE_TRADE;
OpenLink(); OpenLink();
SeedRng(gMain.vblankCounter2); SeedRng(gMain.vblankCounter2);
for (i = 0; i < MAX_LINK_PLAYERS; i++) for (i = 0; i < MAX_LINK_PLAYERS; i++)
@@ -296,7 +307,7 @@ void LinkTestScreen(void)
AnimateSprites(); AnimateSprites();
BuildOamBuffer(); BuildOamBuffer();
UpdatePaletteFade(); UpdatePaletteFade();
gUnknown_03000D60 = 0; sDummy3 = FALSE;
InitLocalLinkPlayer(); InitLocalLinkPlayer();
CreateTask(Task_PrintTestData, 0); CreateTask(Task_PrintTestData, 0);
SetMainCallback2(CB2_LinkTest); SetMainCallback2(CB2_LinkTest);
@@ -323,7 +334,7 @@ static void InitLocalLinkPlayer(void)
} }
} }
static void sub_80096BC(void) static void VBlankCB_LinkError(void)
{ {
LoadOam(); LoadOam();
ProcessSpriteCopyRequests(); ProcessSpriteCopyRequests();
@@ -334,9 +345,9 @@ static void InitLink(void)
{ {
int i; int i;
for (i = 0; i < 8; i++) for (i = 0; i < CMD_LENGTH; i++)
{ {
gSendCmd[i] = 0xefff; gSendCmd[i] = 0xEfff;
} }
gLinkOpen = TRUE; gLinkOpen = TRUE;
EnableSerial(); EnableSerial();
@@ -365,15 +376,15 @@ void OpenLink(void)
gSuppressLinkErrorMessage = FALSE; gSuppressLinkErrorMessage = FALSE;
ResetBlockReceivedFlags(); ResetBlockReceivedFlags();
ResetBlockSend(); ResetBlockSend();
gUnknown_03000D54 = 0; sDummy1 = FALSE;
gUnknown_030030E8 = FALSE; gLinkDummy2 = FALSE;
gUnknown_030030E4 = FALSE; gLinkDummy1 = FALSE;
gUnknown_030030F4 = 0; gUnknown_030030F4 = 0;
CreateTask(Task_TriggerHandshake, 2); CreateTask(Task_TriggerHandshake, 2);
} }
else else
{ {
sub_800E700(); InitRFUAPI();
} }
gReceivedRemoteLinkPlayers = 0; gReceivedRemoteLinkPlayers = 0;
for (i = 0; i < MAX_LINK_PLAYERS; i++) for (i = 0; i < MAX_LINK_PLAYERS; i++)
@@ -389,7 +400,7 @@ void CloseLink(void)
gReceivedRemoteLinkPlayers = FALSE; gReceivedRemoteLinkPlayers = FALSE;
if (gWirelessCommType) if (gWirelessCommType)
{ {
sub_800EDD4(); LinkRfu_Shutdown();
} }
gLinkOpen = FALSE; gLinkOpen = FALSE;
DisableSerial(); DisableSerial();
@@ -482,7 +493,7 @@ u16 LinkMain2(const u16 *heldKeys)
{ {
return 0; return 0;
} }
for (i = 0; i < 8; i++) for (i = 0; i < CMD_LENGTH; i++)
{ {
gSendCmd[i] = 0; gSendCmd[i] = 0;
} }
@@ -536,8 +547,8 @@ static void ProcessRecvCmds(u8 unused)
InitLocalLinkPlayer(); InitLocalLinkPlayer();
block = &gLocalLinkPlayerBlock; block = &gLocalLinkPlayerBlock;
block->linkPlayer = gLocalLinkPlayer; block->linkPlayer = gLocalLinkPlayer;
memcpy(block->magic1, gASCIIGameFreakInc, sizeof(block->magic1) - 1); memcpy(block->magic1, sASCIIGameFreakInc, sizeof(block->magic1) - 1);
memcpy(block->magic2, gASCIIGameFreakInc, sizeof(block->magic2) - 1); memcpy(block->magic2, sASCIIGameFreakInc, sizeof(block->magic2) - 1);
InitBlockSend(block, sizeof(*block)); InitBlockSend(block, sizeof(*block));
break; break;
} }
@@ -545,10 +556,10 @@ static void ProcessRecvCmds(u8 unused)
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1]; gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
break; break;
case LINKCMD_0x5555: case LINKCMD_0x5555:
gUnknown_030030E8 = TRUE; gLinkDummy2 = TRUE;
break; break;
case LINKCMD_0x5566: case LINKCMD_0x5566:
gUnknown_030030E8 = TRUE; gLinkDummy2 = TRUE;
break; break;
case LINKCMD_INIT_BLOCK: case LINKCMD_INIT_BLOCK:
{ {
@@ -602,8 +613,8 @@ static void ProcessRecvCmds(u8 unused)
linkPlayer->progressFlags = 0; linkPlayer->progressFlags = 0;
} }
sub_800B524(linkPlayer); sub_800B524(linkPlayer);
if (strcmp(block->magic1, gASCIIGameFreakInc) != 0 if (strcmp(block->magic1, sASCIIGameFreakInc) != 0
|| strcmp(block->magic2, gASCIIGameFreakInc) != 0) || strcmp(block->magic2, sASCIIGameFreakInc) != 0)
{ {
SetMainCallback2(CB2_LinkError); SetMainCallback2(CB2_LinkError);
} }
@@ -629,7 +640,7 @@ static void ProcessRecvCmds(u8 unused)
sub_800A418(); sub_800A418();
break; break;
case LINKCMD_0xCCCC: case LINKCMD_0xCCCC:
SendBlock(0, gUnknown_082ED1A8[gRecvCmds[i][1]].address, gUnknown_082ED1A8[gRecvCmds[i][1]].size); SendBlock(0, sBlockRequests[gRecvCmds[i][1]].address, sBlockRequests[gRecvCmds[i][1]].size);
break; break;
case LINKCMD_SEND_HELD_KEYS_2: case LINKCMD_SEND_HELD_KEYS_2:
gLinkPartnersHeldKeys[i] = gRecvCmds[i][1]; gLinkPartnersHeldKeys[i] = gRecvCmds[i][1];
@@ -705,70 +716,56 @@ static void BuildSendCmd(u16 command)
} }
} }
void sub_8009F18(void) void StartSendingKeysToLink(void)
{ {
if (gWirelessCommType) if (gWirelessCommType)
{ StartSendingKeysToRfu();
sub_800F804();
} gLinkCallback = LinkCB_SendHeldKeys;
gLinkCallback = sub_8009F70;
} }
bool32 IsSendingKeysToLink(void) bool32 IsSendingKeysToLink(void)
{ {
if (gWirelessCommType) if (gWirelessCommType)
{
return IsSendingKeysToRfu(); return IsSendingKeysToRfu();
}
if (gLinkCallback == sub_8009F70) if (gLinkCallback == LinkCB_SendHeldKeys)
{
return TRUE; return TRUE;
}
return FALSE; return FALSE;
} }
static void sub_8009F70(void) static void LinkCB_SendHeldKeys(void)
{ {
if (gReceivedRemoteLinkPlayers == TRUE) if (gReceivedRemoteLinkPlayers == TRUE)
{
BuildSendCmd(LINKCMD_SEND_HELD_KEYS_2); BuildSendCmd(LINKCMD_SEND_HELD_KEYS_2);
}
} }
void ClearLinkCallback(void) void ClearLinkCallback(void)
{ {
if (gWirelessCommType) if (gWirelessCommType)
{
ClearLinkRfuCallback(); ClearLinkRfuCallback();
}
else else
{
gLinkCallback = NULL; gLinkCallback = NULL;
}
} }
void ClearLinkCallback_2(void) void ClearLinkCallback_2(void)
{ {
if (gWirelessCommType) if (gWirelessCommType)
{
ClearLinkRfuCallback(); ClearLinkRfuCallback();
}
else else
{
gLinkCallback = NULL; gLinkCallback = NULL;
}
} }
u8 GetLinkPlayerCount(void) u8 GetLinkPlayerCount(void)
{ {
if (gWirelessCommType) if (gWirelessCommType)
{ return Rfu_GetLinkPlayerCount();
return sub_80104F4();
}
return EXTRACT_PLAYER_COUNT(gLinkStatus); return EXTRACT_PLAYER_COUNT(gLinkStatus);
} }
static int sub_8009FF8(u32 version1, u32 version2) static int AreAnyLinkPlayersUsingVersions(u32 version1, u32 version2)
{ {
int i; int i;
u8 nPlayers; u8 nPlayers;
@@ -776,22 +773,22 @@ static int sub_8009FF8(u32 version1, u32 version2)
nPlayers = GetLinkPlayerCount(); nPlayers = GetLinkPlayerCount();
for (i = 0; i < nPlayers; i++) for (i = 0; i < nPlayers; i++)
{ {
if ((gLinkPlayers[i].version & 0xFF) == version1 || (gLinkPlayers[i].version & 0xFF) == version2) if ((gLinkPlayers[i].version & 0xFF) == version1
{ || (gLinkPlayers[i].version & 0xFF) == version2)
return 1; return 1;
}
} }
return -1; return -1;
} }
u32 sub_800A03C(void) u32 LinkDummy_Return2(void)
{ {
return 2; return 2;
} }
bool32 sub_800A040(void) // Unused
static bool32 IsFullLinkGroupWithNoRS(void)
{ {
if (GetLinkPlayerCount() != 4 || sub_8009FF8(VERSION_RUBY, VERSION_SAPPHIRE) < 0) if (GetLinkPlayerCount() != MAX_LINK_PLAYERS || AreAnyLinkPlayersUsingVersions(VERSION_RUBY, VERSION_SAPPHIRE) < 0)
{ {
return FALSE; return FALSE;
} }
@@ -800,18 +797,18 @@ bool32 sub_800A040(void)
bool32 Link_AnyPartnersPlayingRubyOrSapphire(void) bool32 Link_AnyPartnersPlayingRubyOrSapphire(void)
{ {
if (sub_8009FF8(VERSION_RUBY, VERSION_SAPPHIRE) >= 0) if (AreAnyLinkPlayersUsingVersions(VERSION_RUBY, VERSION_SAPPHIRE) >= 0)
{ {
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
} }
bool32 sub_800A07C(void) bool32 Link_AnyPartnersPlayingFRLG_JP(void)
{ {
int i; int i;
i = sub_8009FF8(VERSION_FIRE_RED, VERSION_LEAF_GREEN); i = AreAnyLinkPlayersUsingVersions(VERSION_FIRE_RED, VERSION_LEAF_GREEN);
if (i >= 0 && gLinkPlayers[i].language == LANGUAGE_JAPANESE) if (i >= 0 && gLinkPlayers[i].language == LANGUAGE_JAPANESE)
{ {
return TRUE; return TRUE;
@@ -826,23 +823,23 @@ void OpenLinkTimed(void)
OpenLink(); OpenLink();
} }
u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper) u8 GetLinkPlayerDataExchangeStatusTimed(int minPlayers, int maxPlayers)
{ {
int i; int i;
int count; int count;
u32 index; u32 index;
u8 cmpVal; u8 numPlayers;
u32 linkType1; u32 linkType1;
u32 linkType2; u32 linkType2;
count = 0; count = 0;
if (gReceivedRemoteLinkPlayers == TRUE) if (gReceivedRemoteLinkPlayers == TRUE)
{ {
cmpVal = GetLinkPlayerCount_2(); numPlayers = GetLinkPlayerCount_2();
if (lower > cmpVal || cmpVal > upper) if (minPlayers > numPlayers || numPlayers > maxPlayers)
{ {
sPlayerDataExchangeStatus = EXCHANGE_STAT_6; sPlayerDataExchangeStatus = EXCHANGE_WRONG_NUM_PLAYERS;
return 6; return sPlayerDataExchangeStatus;
} }
else else
{ {
@@ -860,19 +857,19 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
} }
if (count == GetLinkPlayerCount()) if (count == GetLinkPlayerCount())
{ {
if (gLinkPlayers[0].linkType == 0x1133) if (gLinkPlayers[0].linkType == LINKTYPE_TRADE_SETUP)
{ {
switch (GetGameProgressForLinkTrade()) switch (GetGameProgressForLinkTrade())
{ {
case TRADE_PLAYER_NOT_READY: case TRADE_PLAYER_NOT_READY:
sPlayerDataExchangeStatus = EXCHANGE_PLAYER_NOT_READY; sPlayerDataExchangeStatus = EXCHANGE_PLAYER_NOT_READY;
break; break;
case TRADE_PARTNER_NOT_READY: case TRADE_PARTNER_NOT_READY:
sPlayerDataExchangeStatus = EXCHANGE_PARTNER_NOT_READY; sPlayerDataExchangeStatus = EXCHANGE_PARTNER_NOT_READY;
break; break;
case TRADE_BOTH_PLAYERS_READY: case TRADE_BOTH_PLAYERS_READY:
sPlayerDataExchangeStatus = EXCHANGE_COMPLETE; sPlayerDataExchangeStatus = EXCHANGE_COMPLETE;
break; break;
} }
} }
else else
@@ -882,11 +879,14 @@ u8 GetLinkPlayerDataExchangeStatusTimed(int lower, int upper)
} }
else else
{ {
sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS; sPlayerDataExchangeStatus = EXCHANGE_DIFF_SELECTIONS;
linkType1 = gLinkPlayers[GetMultiplayerId()].linkType; linkType1 = gLinkPlayers[GetMultiplayerId()].linkType;
linkType2 = gLinkPlayers[GetMultiplayerId() ^ 1].linkType; linkType2 = gLinkPlayers[GetMultiplayerId() ^ 1].linkType;
if ((linkType1 == 0x2266 && linkType2 == 0x2277) || (linkType1 == 0x2277 && linkType2 == 0x2266)) if ((linkType1 == LINKTYPE_BATTLE_TOWER_50 && linkType2 == LINKTYPE_BATTLE_TOWER_OPEN)
|| (linkType1 == LINKTYPE_BATTLE_TOWER_OPEN && linkType2 == LINKTYPE_BATTLE_TOWER_50))
{ {
// 3 below indicates partner made different level mode selection
// See BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections
gSpecialVar_0x8005 = 3; gSpecialVar_0x8005 = 3;
} }
} }
@@ -921,7 +921,7 @@ bool8 IsLinkPlayerDataExchangeComplete(void)
else else
{ {
retval = FALSE; retval = FALSE;
sPlayerDataExchangeStatus = EXCHANGE_IN_PROGRESS; sPlayerDataExchangeStatus = EXCHANGE_DIFF_SELECTIONS;
} }
return retval; return retval;
} }
@@ -959,7 +959,7 @@ static bool32 InitBlockSend(const void *src, size_t size)
sBlockSend.active = TRUE; sBlockSend.active = TRUE;
sBlockSend.size = size; sBlockSend.size = size;
sBlockSend.pos = 0; sBlockSend.pos = 0;
if (size > 0x100) if (size > BLOCK_BUFFER_SIZE)
{ {
sBlockSend.src = src; sBlockSend.src = src;
} }
@@ -992,7 +992,7 @@ static void LinkCB_BlockSend(void)
src = sBlockSend.src; src = sBlockSend.src;
gSendCmd[0] = LINKCMD_CONT_BLOCK; gSendCmd[0] = LINKCMD_CONT_BLOCK;
for (i = 0; i < 7; i++) for (i = 0; i < CMD_LENGTH - 1; i++)
{ {
gSendCmd[i + 1] = (src[sBlockSend.pos + i * 2 + 1] << 8) | src[sBlockSend.pos + i * 2]; gSendCmd[i + 1] = (src[sBlockSend.pos + i * 2 + 1] << 8) | src[sBlockSend.pos + i * 2];
} }
@@ -1043,7 +1043,7 @@ u8 GetMultiplayerId(void)
{ {
if (gWirelessCommType == TRUE) if (gWirelessCommType == TRUE)
{ {
return rfu_get_multiplayer_id(); return Rfu_GetMultiplayerId();
} }
return SIO_MULTI_CNT->id; return SIO_MULTI_CNT->id;
} }
@@ -1060,7 +1060,7 @@ bool8 SendBlock(u8 unused, const void *src, u16 size)
{ {
if (gWirelessCommType == TRUE) if (gWirelessCommType == TRUE)
{ {
return sub_800FE84(src, size); return Rfu_InitBlockSend(src, size);
} }
return InitBlockSend(src, size); return InitBlockSend(src, size);
} }
@@ -1093,7 +1093,7 @@ u8 GetBlockReceivedStatus(void)
{ {
if (gWirelessCommType == TRUE) if (gWirelessCommType == TRUE)
{ {
return sub_800FCD8(); return Rfu_GetBlockReceivedStatus();
} }
return (gBlockReceivedStatus[3] << 3) | (gBlockReceivedStatus[2] << 2) | (gBlockReceivedStatus[1] << 1) | (gBlockReceivedStatus[0] << 0); return (gBlockReceivedStatus[3] << 3) | (gBlockReceivedStatus[2] << 2) | (gBlockReceivedStatus[1] << 1) | (gBlockReceivedStatus[0] << 0);
} }
@@ -1102,7 +1102,7 @@ static void SetBlockReceivedFlag(u8 who)
{ {
if (gWirelessCommType == TRUE) if (gWirelessCommType == TRUE)
{ {
sub_800F6FC(who); Rfu_SetBlockReceivedFlag(who);
} }
else else
{ {
@@ -1118,7 +1118,7 @@ void ResetBlockReceivedFlags(void)
{ {
for (i = 0; i < MAX_RFU_PLAYERS; i++) for (i = 0; i < MAX_RFU_PLAYERS; i++)
{ {
sub_800F728(i); Rfu_ResetBlockReceivedFlag(i);
} }
} }
else else
@@ -1134,7 +1134,7 @@ void ResetBlockReceivedFlag(u8 who)
{ {
if (gWirelessCommType == TRUE) if (gWirelessCommType == TRUE)
{ {
sub_800F728(who); Rfu_ResetBlockReceivedFlag(who);
} }
else if (gBlockReceivedStatus[who]) else if (gBlockReceivedStatus[who])
{ {
@@ -1261,7 +1261,7 @@ static void Task_PrintTestData(u8 taskId)
char sp[32]; char sp[32];
int i; int i;
strcpy(sp, gASCIITestPrint); strcpy(sp, sASCIITestPrint);
LinkTest_prntstr(sp, 5, 2); LinkTest_prntstr(sp, 5, 2);
LinkTest_prnthex(gShouldAdvanceLinkState, 2, 1, 2); LinkTest_prnthex(gShouldAdvanceLinkState, 2, 1, 2);
LinkTest_prnthex(gLinkStatus, 15, 1, 8); LinkTest_prnthex(gLinkStatus, 15, 1, 8);
@@ -1289,7 +1289,7 @@ void SetLinkDebugValues(u32 seed, u32 flags)
gLinkDebugFlags = flags; gLinkDebugFlags = flags;
} }
u8 sub_800A9A8(void) u8 GetSavedLinkPlayerCountAsBitFlags(void)
{ {
int i; int i;
u8 flags; u8 flags;
@@ -1302,7 +1302,7 @@ u8 sub_800A9A8(void)
return flags; return flags;
} }
u8 sub_800A9D8(void) u8 GetLinkPlayerCountAsBitFlags(void)
{ {
int i; int i;
u8 flags; u8 flags;
@@ -1315,11 +1315,11 @@ u8 sub_800A9D8(void)
return flags; return flags;
} }
void sub_800AA04(u8 a0) void SaveLinkPlayers(u8 playerCount)
{ {
int i; int i;
gSavedLinkPlayerCount = a0; gSavedLinkPlayerCount = playerCount;
gSavedMultiplayerId = GetMultiplayerId(); gSavedMultiplayerId = GetMultiplayerId();
for (i = 0; i < MAX_RFU_PLAYERS; i++) for (i = 0; i < MAX_RFU_PLAYERS; i++)
{ {
@@ -1334,17 +1334,17 @@ u8 GetSavedPlayerCount(void)
return gSavedLinkPlayerCount; return gSavedLinkPlayerCount;
} }
u8 sub_800AA54(void) // Unused
static u8 GetSavedMultiplayerId(void)
{ {
return gSavedMultiplayerId; return gSavedMultiplayerId;
} }
bool8 sub_800AA60(void) bool8 DoesLinkPlayerCountMatchSaved(void)
{ {
int i; int i;
unsigned count; u32 count = 0;
count = 0;
for (i = 0; i < gSavedLinkPlayerCount; i++) for (i = 0; i < gSavedLinkPlayerCount; i++)
{ {
if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId) if (gLinkPlayers[i].trainerId == gSavedLinkPlayers[i].trainerId)
@@ -1352,9 +1352,7 @@ bool8 sub_800AA60(void)
if (gLinkType == LINKTYPE_BATTLE_TOWER) if (gLinkType == LINKTYPE_BATTLE_TOWER)
{ {
if (gLinkType == gLinkPlayers[i].linkType) if (gLinkType == gLinkPlayers[i].linkType)
{
count++; count++;
}
} }
else else
{ {
@@ -1372,7 +1370,7 @@ bool8 sub_800AA60(void)
return FALSE; return FALSE;
} }
void sub_800AAF4(void) void ClearSavedLinkPlayers(void)
{ {
int i; int i;
@@ -1383,13 +1381,14 @@ void sub_800AAF4(void)
} }
} }
void sub_800AB18(void) void CheckLinkPlayersMatchSaved(void)
{ {
u8 i; u8 i;
for (i = 0; i < gSavedLinkPlayerCount; i++) for (i = 0; i < gSavedLinkPlayerCount; i++)
{ {
if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId || StringCompare(gSavedLinkPlayers[i].name, gLinkPlayers[i].name) != 0) if (gSavedLinkPlayers[i].trainerId != gLinkPlayers[i].trainerId
|| StringCompare(gSavedLinkPlayers[i].name, gLinkPlayers[i].name) != 0)
{ {
gLinkErrorOccurred = TRUE; gLinkErrorOccurred = TRUE;
CloseLink(); CloseLink();
@@ -1418,9 +1417,10 @@ bool8 IsLinkMaster(void)
return EXTRACT_MASTER(gLinkStatus); return EXTRACT_MASTER(gLinkStatus);
} }
u8 sub_800ABE8(void) // Unused
static u8 GetDummy2(void)
{ {
return gUnknown_03000D58; return sDummy2;
} }
void sub_800ABF4(u16 a0) void sub_800ABF4(u16 a0)
@@ -1434,7 +1434,7 @@ void sub_800ABF4(u16 a0)
if (gLinkCallback == NULL) if (gLinkCallback == NULL)
{ {
gLinkCallback = sub_800AC80; gLinkCallback = sub_800AC80;
gUnknown_030030E4 = FALSE; gLinkDummy1 = FALSE;
gUnknown_030030F4 = a0; gUnknown_030030F4 = a0;
} }
} }
@@ -1450,12 +1450,12 @@ void sub_800AC34(void)
{ {
if (gLinkCallback != NULL) if (gLinkCallback != NULL)
{ {
gUnknown_02022B08++; sUnknown_02022B08++;
} }
else else
{ {
gLinkCallback = sub_800AC80; gLinkCallback = sub_800AC80;
gUnknown_030030E4 = FALSE; gLinkDummy1 = FALSE;
gUnknown_030030F4 = 0; gUnknown_030030F4 = 0;
} }
} }
@@ -1491,7 +1491,7 @@ static void sub_800ACAC(void)
gLinkVSyncDisabled = TRUE; gLinkVSyncDisabled = TRUE;
CloseLink(); CloseLink();
gLinkCallback = NULL; gLinkCallback = NULL;
gUnknown_030030E4 = TRUE; gLinkDummy1 = TRUE;
} }
} }
@@ -1505,12 +1505,12 @@ void sub_800AD10(void)
{ {
if (gLinkCallback != NULL) if (gLinkCallback != NULL)
{ {
gUnknown_02022B08++; sUnknown_02022B08++;
} }
else else
{ {
gLinkCallback = sub_800AD5C; gLinkCallback = sub_800AD5C;
gUnknown_030030E4 = FALSE; gLinkDummy1 = FALSE;
gUnknown_030030F4 = 0; gUnknown_030030F4 = 0;
} }
} }
@@ -1550,7 +1550,7 @@ static void sub_800AD88(void)
gLinkVSyncDisabled = TRUE; gLinkVSyncDisabled = TRUE;
CloseLink(); CloseLink();
gLinkCallback = NULL; gLinkCallback = NULL;
gUnknown_030030E4 = TRUE; gLinkDummy1 = TRUE;
} }
} }
@@ -1566,7 +1566,7 @@ void sub_800ADF8(void)
{ {
gLinkCallback = sub_800AE30; gLinkCallback = sub_800AE30;
} }
gUnknown_030030E4 = FALSE; gLinkDummy1 = FALSE;
} }
} }
@@ -1618,7 +1618,7 @@ static void CheckErrorStatus(void)
} }
} }
void sub_800AF18(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06) void BufferLinkErrorInfo(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, bool8 unk_06)
{ {
sLinkErrorBuffer.status = status; sLinkErrorBuffer.status = status;
sLinkErrorBuffer.lastSendQueueCount = lastSendQueueCount; sLinkErrorBuffer.lastSendQueueCount = lastSendQueueCount;
@@ -1647,14 +1647,14 @@ void CB2_LinkError(void)
{ {
gWirelessCommType = 3; gWirelessCommType = 3;
} }
sub_800E604(); ResetLinkRfuGFLayer();
} }
SetVBlankCallback(sub_80096BC); SetVBlankCallback(VBlankCB_LinkError);
ResetBgsAndClearDma3BusyFlags(0); ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_082ED1FC, 2); InitBgsFromTemplates(0, sLinkErrorBgTemplates, ARRAY_COUNT(sLinkErrorBgTemplates));
gUnknown_02022B0C = tilemapBuffer = malloc(0x800); sLinkErrorBgTilemapBuffer = tilemapBuffer = malloc(0x800);
SetBgTilemapBuffer(1, tilemapBuffer); SetBgTilemapBuffer(1, tilemapBuffer);
if (InitWindows(gUnknown_082ED204)) if (InitWindows(sLinkErrorWindowTemplates))
{ {
DeactivateAllTextPrinters(); DeactivateAllTextPrinters();
ResetTempTileDataBuffers(); ResetTempTileDataBuffers();
@@ -1680,11 +1680,11 @@ void CB2_LinkError(void)
static void sub_800B080(void) static void sub_800B080(void)
{ {
LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0); LoadBgTiles(0, s2BlankTilesGfx, 0x20, 0);
DecompressAndLoadBgGfxUsingHeap(1, gWirelessLinkDisplayGfx, FALSE, 0, 0); DecompressAndLoadBgGfxUsingHeap(1, sWirelessLinkDisplayGfx, FALSE, 0, 0);
CopyToBgTilemapBuffer(1, gWirelessLinkDisplayTilemap, 0, 0); CopyToBgTilemapBuffer(1, sWirelessLinkDisplayTilemap, 0, 0);
CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(1);
LoadPalette(gWirelessLinkDisplayPal, 0, 0x20); LoadPalette(sWirelessLinkDisplayPal, 0, 0x20);
FillWindowPixelBuffer(0, PIXEL_FILL(0)); FillWindowPixelBuffer(0, PIXEL_FILL(0));
FillWindowPixelBuffer(2, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0));
AddTextPrinterParameterized3(0, 3, 2, 6, sTextColors, 0, gText_CommErrorEllipsis); AddTextPrinterParameterized3(0, 3, 2, 6, sTextColors, 0, gText_CommErrorEllipsis);
@@ -1697,7 +1697,7 @@ static void sub_800B080(void)
static void sub_800B138(void) static void sub_800B138(void)
{ {
LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0); LoadBgTiles(0, s2BlankTilesGfx, 0x20, 0);
FillWindowPixelBuffer(1, PIXEL_FILL(0)); FillWindowPixelBuffer(1, PIXEL_FILL(0));
FillWindowPixelBuffer(2, PIXEL_FILL(0)); FillWindowPixelBuffer(2, PIXEL_FILL(0));
AddTextPrinterParameterized3(1, 3, 2, 0, sTextColors, 0, gText_CommErrorCheckConnections); AddTextPrinterParameterized3(1, 3, 2, 0, sTextColors, 0, gText_CommErrorCheckConnections);
@@ -1810,12 +1810,12 @@ void sub_800B348(void)
InitLocalLinkPlayer(); InitLocalLinkPlayer();
block = &gLocalLinkPlayerBlock; block = &gLocalLinkPlayerBlock;
block->linkPlayer = gLocalLinkPlayer; block->linkPlayer = gLocalLinkPlayer;
memcpy(block->magic1, gASCIIGameFreakInc, sizeof(block->magic1) - 1); memcpy(block->magic1, sASCIIGameFreakInc, sizeof(block->magic1) - 1);
memcpy(block->magic2, gASCIIGameFreakInc, sizeof(block->magic2) - 1); memcpy(block->magic2, sASCIIGameFreakInc, sizeof(block->magic2) - 1);
memcpy(gBlockSendBuffer, block, sizeof(*block)); memcpy(gBlockSendBuffer, block, sizeof(*block));
} }
void sub_800B3A4(u32 who) void LinkPlayerFromBlock(u32 who)
{ {
u8 who_ = who; u8 who_ = who;
struct LinkPlayerBlock *block; struct LinkPlayerBlock *block;
@@ -1825,7 +1825,7 @@ void sub_800B3A4(u32 who)
player = &gLinkPlayers[who_]; player = &gLinkPlayers[who_];
*player = block->linkPlayer; *player = block->linkPlayer;
sub_800B524(player); sub_800B524(player);
if (strcmp(block->magic1, gASCIIGameFreakInc) != 0 || strcmp(block->magic2, gASCIIGameFreakInc) != 0) if (strcmp(block->magic1, sASCIIGameFreakInc) != 0 || strcmp(block->magic2, sASCIIGameFreakInc) != 0)
{ {
SetMainCallback2(CB2_LinkError); SetMainCallback2(CB2_LinkError);
} }
@@ -1860,7 +1860,7 @@ bool8 HandleLinkConnection(void)
return FALSE; return FALSE;
} }
void sub_800B488(void) void SetWirelessCommType1(void)
{ {
if (gReceivedRemoteLinkPlayers == 0) if (gReceivedRemoteLinkPlayers == 0)
{ {
@@ -1868,7 +1868,7 @@ void sub_800B488(void)
} }
} }
static void sub_800B4A4(void) static void SetWirelessCommType0_Internal(void)
{ {
if (gReceivedRemoteLinkPlayers == 0) if (gReceivedRemoteLinkPlayers == 0)
{ {
@@ -1876,7 +1876,7 @@ static void sub_800B4A4(void)
} }
} }
void sub_800B4C0(void) void SetWirelessCommType0(void)
{ {
if (gReceivedRemoteLinkPlayers == 0) if (gReceivedRemoteLinkPlayers == 0)
{ {
+1219 -1133
View File
File diff suppressed because it is too large. Load diff
+445 -309
View File
File diff suppressed because it is too large. Load diff
+2 -2
View File
@@ -113,7 +113,7 @@ void AgbMain()
InitIntrHandlers(); InitIntrHandlers();
m4aSoundInit(); m4aSoundInit();
EnableVCountIntrAtLine150(); EnableVCountIntrAtLine150();
sub_800E6D0(); InitRFU();
RtcInit(); RtcInit();
CheckForFlashMemory(); CheckForFlashMemory();
InitMainCallbacks(); InitMainCallbacks();
@@ -367,7 +367,7 @@ static void VBlankIntr(void)
if (!gMain.inBattle || !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_RECORDED))) if (!gMain.inBattle || !(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_RECORDED)))
Random(); Random();
sub_800E174(); UpdateWirelessStatusIndicatorSprite();
INTR_CHECK |= INTR_FLAG_VBLANK; INTR_CHECK |= INTR_FLAG_VBLANK;
gMain.intrCheck |= INTR_FLAG_VBLANK; gMain.intrCheck |= INTR_FLAG_VBLANK;
+1 -1
View File
@@ -2107,7 +2107,7 @@ void sub_819A27C(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y)
BlitBitmapToWindow(windowId, GetMonIconPtr(speciesId, personality, 1), x, y, 32, 32); BlitBitmapToWindow(windowId, GetMonIconPtr(speciesId, personality, 1), x, y, 32, 32);
} }
void sub_819A2BC(u8 palOffset, u8 palId) void ListMenuLoadStdPalAt(u8 palOffset, u8 palId)
{ {
const u16 *palette; const u16 *palette;
+3 -3
View File
@@ -548,12 +548,12 @@ u16 mevent_081445C0(u32 command)
return 0; return 0;
} }
void sub_801B940(void) void ResetReceivedWonderCardFlag(void)
{ {
gUnknown_02022C70 = FALSE; gUnknown_02022C70 = FALSE;
} }
bool32 sub_801B94C(u16 a0) bool32 MEventHandleReceivedWonderCard(u16 a0)
{ {
gUnknown_02022C70 = FALSE; gUnknown_02022C70 = FALSE;
if (a0 == 0) if (a0 == 0)
@@ -569,7 +569,7 @@ bool32 sub_801B94C(u16 a0)
return TRUE; return TRUE;
} }
void sub_801B990(u32 a0, u32 a1) void RecordIdOfWonderCardSenderByEventType(u32 a0, u32 a1)
{ {
if (gUnknown_02022C70) if (gUnknown_02022C70)
{ {
+2 -2
View File
@@ -152,7 +152,7 @@ static void CB2_MysteryEventMenu(void)
if (!IsTextPrinterActive(0)) if (!IsTextPrinterActive(0))
{ {
gMain.state++; gMain.state++;
gLinkType = LINKTYPE_0x5501; gLinkType = LINKTYPE_MYSTERY_EVENT;
OpenLink(); OpenLink();
} }
break; break;
@@ -206,7 +206,7 @@ static void CB2_MysteryEventMenu(void)
{ {
if (gReceivedRemoteLinkPlayers != 0) if (gReceivedRemoteLinkPlayers != 0)
{ {
if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == 3) if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == EXCHANGE_DIFF_SELECTIONS)
{ {
sub_800AC34(); sub_800AC34();
GetEventLoadMessage(gStringVar4, 1); GetEventLoadMessage(gStringVar4, 1);
+9 -8
View File
@@ -30,6 +30,7 @@
#include "link_rfu.h" #include "link_rfu.h"
#include "mevent_news.h" #include "mevent_news.h"
#include "mevent_server.h" #include "mevent_server.h"
#include "constants/cable_club.h"
void bgid_upload_textbox_1(u8 bgId); void bgid_upload_textbox_1(u8 bgId);
void task_add_00_mystery_gift(void); void task_add_00_mystery_gift(void);
@@ -1242,21 +1243,21 @@ void task00_mystery_gift(u8 taskId)
case 0: case 0:
if (data->source == 1) if (data->source == 1)
{ {
MEvent_CreateTask_CardOrNewsWithFriend(0x15); MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WONDER_CARD2);
} }
else if (data->source == 0) else if (data->source == 0)
{ {
MEvent_CreateTask_CardOrNewsOverWireless(0x15); MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WONDER_CARD2);
} }
break; break;
case 1: case 1:
if (data->source == 1) if (data->source == 1)
{ {
MEvent_CreateTask_CardOrNewsWithFriend(0x16); MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WONDER_NEWS2);
} }
else if (data->source == 0) else if (data->source == 0)
{ {
MEvent_CreateTask_CardOrNewsOverWireless(0x16); MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WONDER_NEWS2);
} }
break; break;
} }
@@ -1269,7 +1270,7 @@ void task00_mystery_gift(u8 taskId)
data->state = 7; data->state = 7;
mevent_client_do_init(data->IsCardOrNews); mevent_client_do_init(data->IsCardOrNews);
} }
else if (gSpecialVar_Result == 5) else if (gSpecialVar_Result == LINKUP_FAILED)
{ {
ClearScreenInBg0(TRUE); ClearScreenInBg0(TRUE);
data->state = 3; data->state = 3;
@@ -1599,10 +1600,10 @@ void task00_mystery_gift(u8 taskId)
switch (data->IsCardOrNews) switch (data->IsCardOrNews)
{ {
case 0: case 0:
MEvent_CreateTask_Leader(21); MEvent_CreateTask_Leader(ACTIVITY_WONDER_CARD2);
break; break;
case 1: case 1:
MEvent_CreateTask_Leader(22); MEvent_CreateTask_Leader(ACTIVITY_WONDER_NEWS2);
break; break;
} }
data->source = 1; data->source = 1;
@@ -1615,7 +1616,7 @@ void task00_mystery_gift(u8 taskId)
ClearScreenInBg0(1); ClearScreenInBg0(1);
data->state = 31; data->state = 31;
} }
else if (gSpecialVar_Result == 5) else if (gSpecialVar_Result == LINKUP_FAILED)
{ {
ClearScreenInBg0(1); ClearScreenInBg0(1);
data->state = 18; data->state = 18;
+1 -1
View File
@@ -197,7 +197,7 @@ void NewGameInitData(void)
WarpToTruck(); WarpToTruck();
ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags); ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags);
ResetMiniGamesResults(); ResetMiniGamesResults();
copy_strings_to_sav1(); InitUnionRoomChatRegisteredTexts();
InitLilycoveLady(); InitLilycoveLady();
ResetAllApprenticeData(); ResetAllApprenticeData();
ClearRankingHallRecords(); ClearRankingHallRecords();
+1 -1
View File
@@ -2913,7 +2913,7 @@ bool32 sub_808766C(void)
static u32 GetLinkSendQueueLength(void) static u32 GetLinkSendQueueLength(void)
{ {
if (gWirelessCommType != 0) if (gWirelessCommType != 0)
return Rfu.unk_9e8.unk_232; return Rfu.sendQueue.count;
else else
return gLink.sendQueue.count; return gLink.sendQueue.count;
} }
+2 -2
View File
@@ -3527,7 +3527,7 @@ static void CursorCb_Register(u8 taskId)
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE); u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)sub_800F7DC(), species2, species, obedience)) switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), species2, species, obedience))
{ {
case CANT_REGISTER_MON: case CANT_REGISTER_MON:
StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow); StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
@@ -3553,7 +3553,7 @@ static void CursorCb_Trade1(u8 taskId)
u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2); u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES); u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE); u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)sub_800F7DC(), gUnknown_02022C38, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience); u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience);
if (stringId != UR_TRADE_MSG_NONE) if (stringId != UR_TRADE_MSG_NONE)
{ {
+2 -6
View File
@@ -2218,18 +2218,14 @@ static void CreatePokedexList(u8 dexMode, u8 order)
} }
else else
{ {
bool32 r10; s16 r5, r10;
s16 r5; for (i = 0, r5 = 0, r10 = 0; i < temp_dexCount; i++)
r10 = r5 = i = 0;
for (i = 0; i < temp_dexCount; i++)
{ {
temp_dexNum = i + 1; temp_dexNum = i + 1;
if (GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN)) if (GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN))
r10 = 1; r10 = 1;
if (r10) if (r10)
{ {
asm(""); //Needed to match for some reason
sPokedexView->pokedexList[r5].dexNum = temp_dexNum; sPokedexView->pokedexList[r5].dexNum = temp_dexNum;
sPokedexView->pokedexList[r5].seen = GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN); sPokedexView->pokedexList[r5].seen = GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN);
sPokedexView->pokedexList[r5].owned = GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT); sPokedexView->pokedexList[r5].owned = GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT);
+2 -2
View File
@@ -2725,7 +2725,7 @@ void SetDeoxysStats(void)
} }
} }
u16 sub_8068B48(void) u16 GetUnionRoomTrainerPic(void)
{ {
u8 linkId; u8 linkId;
u32 arrId; u32 arrId;
@@ -2740,7 +2740,7 @@ u16 sub_8068B48(void)
return FacilityClassToPicIndex(gLinkPlayerFacilityClasses[arrId]); return FacilityClassToPicIndex(gLinkPlayerFacilityClasses[arrId]);
} }
u16 sub_8068BB0(void) u16 GetUnionRoomTrainerClass(void)
{ {
u8 linkId; u8 linkId;
u32 arrId; u32 arrId;
+8 -8
View File
@@ -216,7 +216,7 @@ static bool32 sub_802C618(void);
static bool32 sub_802C650(void); static bool32 sub_802C650(void);
static void sub_802C688(int); static void sub_802C688(int);
static int sub_802C6B0(void); static int sub_802C6B0(void);
static bool32 sub_802C70C(void); static bool32 AreLinkQueuesEmpty(void);
static int sub_802C73C(u8 *); static int sub_802C73C(u8 *);
static void sub_802C780(void); static void sub_802C780(void);
static int sub_802C790(int); static int sub_802C790(int);
@@ -400,7 +400,7 @@ static const struct PokemonJumpMons gPkmnJumpSpecies[] =
{ .species = SPECIES_BAGON, .unk2 = 1, }, { .species = SPECIES_BAGON, .unk2 = 1, },
}; };
void sub_802A9A8(u16 partyIndex, MainCallback callback) void StartPokemonJump(u16 partyIndex, MainCallback callback)
{ {
u8 taskId; u8 taskId;
@@ -876,7 +876,7 @@ static bool32 sub_802B31C(void)
gUnknown_02022CFC->unk8++; gUnknown_02022CFC->unk8++;
// fall through // fall through
case 1: case 1:
if (sub_802C70C()) if (AreLinkQueuesEmpty())
return FALSE; return FALSE;
break; break;
} }
@@ -1146,14 +1146,14 @@ static bool32 sub_802B720(void)
} }
break; break;
case 2: case 2:
if (sub_802C70C()) if (AreLinkQueuesEmpty())
{ {
CreateTask(sub_8153688, 6); CreateTask(Task_LinkSave, 6);
gUnknown_02022CFC->unk8++; gUnknown_02022CFC->unk8++;
} }
break; break;
case 3: case 3:
if (!FuncIsActiveTask(sub_8153688)) if (!FuncIsActiveTask(Task_LinkSave))
{ {
sub_802DA14(); sub_802DA14();
gUnknown_02022CFC->unk8++; gUnknown_02022CFC->unk8++;
@@ -2025,9 +2025,9 @@ static int sub_802C6B0(void)
return count; return count;
} }
static bool32 sub_802C70C(void) static bool32 AreLinkQueuesEmpty(void)
{ {
return !Rfu.unk_124.unk_8c2 && !Rfu.unk_9e8.unk_232; return !Rfu.recvQueue.count && !Rfu.sendQueue.count;
} }
static int sub_802C73C(u8 *arg0) static int sub_802C73C(u8 *arg0)
+7 -8
View File
@@ -169,10 +169,9 @@ static const u8 gUnknown_0858CFBE[3][4] =
#define BUFFER_CHUNK_SIZE 200 #define BUFFER_CHUNK_SIZE 200
// Note: VAR_0x8005 contains the spotId.
void RecordMixingPlayerSpotTriggered(void) void RecordMixingPlayerSpotTriggered(void)
{ {
sub_80B37D4(Task_RecordMixing_Main); CreateTask_EnterCableClubSeat(Task_RecordMixing_Main);
} }
// these variables were const in R/S, but had to become changeable because of saveblocks changing RAM position // these variables were const in R/S, but had to become changeable because of saveblocks changing RAM position
@@ -232,7 +231,7 @@ static void PrepareExchangePacket(void)
if (Link_AnyPartnersPlayingRubyOrSapphire()) if (Link_AnyPartnersPlayingRubyOrSapphire())
{ {
if (sub_800A03C() == 0) if (LinkDummy_Return2() == 0)
PrepareUnknownExchangePacket(&sSentRecord->ruby); PrepareUnknownExchangePacket(&sSentRecord->ruby);
else else
PrepareExchangePacketForRubySapphire(&sSentRecord->ruby); PrepareExchangePacketForRubySapphire(&sSentRecord->ruby);
@@ -351,7 +350,7 @@ static void Task_RecordMixing_Main(u8 taskId)
{ {
tState = 4; tState = 4;
if (gWirelessCommType == 0) if (gWirelessCommType == 0)
data[10] = sub_80B3050(); data[10] = CreateTask_ReestablishCableClubLink();
PrintTextOnRecordMixing(gText_RecordMixingComplete); PrintTextOnRecordMixing(gText_RecordMixingComplete);
data[8] = 0; data[8] = 0;
@@ -527,7 +526,7 @@ static void Task_CopyReceiveBuffer(u8 taskId)
u8 status = GetBlockReceivedStatus(); u8 status = GetBlockReceivedStatus();
u8 handledPlayers = 0; u8 handledPlayers = 0;
if (status == sub_800A9D8()) if (status == GetLinkPlayerCountAsBitFlags())
{ {
u8 i; u8 i;
@@ -987,12 +986,12 @@ static void Task_DoRecordMixing(u8 taskId)
case 6: case 6:
if (!sub_801048C(FALSE)) if (!sub_801048C(FALSE))
{ {
CreateTask(sub_8153688, 5); CreateTask(Task_LinkSave, 5);
task->data[0] ++; task->data[0] ++;
} }
break; break;
case 7: // wait for sub_8153688 to finish. case 7: // wait for Task_LinkSave to finish.
if (!FuncIsActiveTask(sub_8153688)) if (!FuncIsActiveTask(Task_LinkSave))
{ {
if (gWirelessCommType) if (gWirelessCommType)
{ {
+30 -22
View File
@@ -897,74 +897,78 @@ u32 TryWriteSpecialSaveSection(u8 sector, u8* src)
return SAVE_STATUS_OK; return SAVE_STATUS_OK;
} }
void sub_8153688(u8 taskId) #define tState data[0]
{ #define tTimer data[1]
s16* taskData = gTasks[taskId].data; #define tPartialSave data[2]
switch (taskData[0]) void Task_LinkSave(u8 taskId)
{
s16* data = gTasks[taskId].data;
switch (tState)
{ {
case 0: case 0:
gSoftResetDisabled = TRUE; gSoftResetDisabled = TRUE;
taskData[0] = 1; tState = 1;
break; break;
case 1: case 1:
sub_800ADF8(); sub_800ADF8();
taskData[0] = 2; tState = 2;
break; break;
case 2: case 2:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
if (taskData[2] == 0) if (!tPartialSave)
save_serialize_map(); save_serialize_map();
taskData[0] = 3; tState = 3;
} }
break; break;
case 3: case 3:
if (taskData[2] == 0) if (!tPartialSave)
SetContinueGameWarpStatusToDynamicWarp(); SetContinueGameWarpStatusToDynamicWarp();
sub_8153380(); sub_8153380();
taskData[0] = 4; tState = 4;
break; break;
case 4: case 4:
if (++taskData[1] == 5) if (++tTimer == 5)
{ {
taskData[1] = 0; tTimer = 0;
taskData[0] = 5; tState = 5;
} }
break; break;
case 5: case 5:
if (sub_81533AC()) if (sub_81533AC())
taskData[0] = 6; tState = 6;
else else
taskData[0] = 4; tState = 4;
break; break;
case 6: case 6:
sub_81533E0(); sub_81533E0();
taskData[0] = 7; tState = 7;
break; break;
case 7: case 7:
if (taskData[2] == 0) if (!tPartialSave)
ClearContinueGameWarpStatus2(); ClearContinueGameWarpStatus2();
sub_800ADF8(); sub_800ADF8();
taskData[0] = 8; tState = 8;
break; break;
case 8: case 8:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
{ {
sub_8153408(); sub_8153408();
taskData[0] = 9; tState = 9;
} }
break; break;
case 9: case 9:
sub_800ADF8(); sub_800ADF8();
taskData[0] = 10; tState = 10;
break; break;
case 10: case 10:
if (IsLinkTaskFinished()) if (IsLinkTaskFinished())
taskData[0]++; tState++;
break; break;
case 11: case 11:
if (++taskData[1] > 5) if (++tTimer > 5)
{ {
gSoftResetDisabled = FALSE; gSoftResetDisabled = FALSE;
DestroyTask(taskId); DestroyTask(taskId);
@@ -972,3 +976,7 @@ void sub_8153688(u8 taskId)
break; break;
} }
} }
#undef tState
#undef tTimer
#undef tPartialSave
+4 -4
View File
@@ -1185,22 +1185,22 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx)
bool8 ScrCmd_createvobject(struct ScriptContext *ctx) bool8 ScrCmd_createvobject(struct ScriptContext *ctx)
{ {
u8 graphicsId = ScriptReadByte(ctx); u8 graphicsId = ScriptReadByte(ctx);
u8 v2 = ScriptReadByte(ctx); u8 objectEventId = ScriptReadByte(ctx);
u16 x = VarGet(ScriptReadHalfword(ctx)); u16 x = VarGet(ScriptReadHalfword(ctx));
u32 y = VarGet(ScriptReadHalfword(ctx)); u32 y = VarGet(ScriptReadHalfword(ctx));
u8 elevation = ScriptReadByte(ctx); u8 elevation = ScriptReadByte(ctx);
u8 direction = ScriptReadByte(ctx); u8 direction = ScriptReadByte(ctx);
sprite_new(graphicsId, v2, x, y, elevation, direction); CreateObjectSprite(graphicsId, objectEventId, x, y, elevation, direction);
return FALSE; return FALSE;
} }
bool8 ScrCmd_turnvobject(struct ScriptContext *ctx) bool8 ScrCmd_turnvobject(struct ScriptContext *ctx)
{ {
u8 v1 = ScriptReadByte(ctx); u8 objectEventId = ScriptReadByte(ctx);
u8 direction = ScriptReadByte(ctx); u8 direction = ScriptReadByte(ctx);
sub_8097B78(v1, direction); TurnObjectEventSprite(objectEventId, direction);
return FALSE; return FALSE;
} }
+10 -13
View File
@@ -384,7 +384,7 @@ static const u16 gSlotPayouts[];
static const u8 *const gUnknown_083EDCE4; static const u8 *const gUnknown_083EDCE4;
static const u8 *const gUnknown_083EDCDC; static const u8 *const gUnknown_083EDCDC;
static const u32 gReelTimeGfx[]; static const u32 gReelTimeGfx[];
static const struct SpriteSheet gSlotMachineSpriteSheets[]; static const struct SpriteSheet gSlotMachineSpriteSheets[22];
static const struct SpritePalette gSlotMachineSpritePalettes[]; static const struct SpritePalette gSlotMachineSpritePalettes[];
static const u16 *const gUnknown_083EDE20; static const u16 *const gUnknown_083EDE20;
static const s16 gInitialReelPositions[][2]; static const s16 gInitialReelPositions[][2];
@@ -4171,8 +4171,8 @@ static void sub_81063C0(void)
LZDecompressWram(gSlotMachineReelTime_Gfx, sUnknown_0203AAD4); LZDecompressWram(gSlotMachineReelTime_Gfx, sUnknown_0203AAD4);
sUnknown_0203AAD8 = Alloc(0x3600); sUnknown_0203AAD8 = Alloc(0x3600);
LZDecompressWram(gReelTimeGfx, sUnknown_0203AAD8); LZDecompressWram(gReelTimeGfx, sUnknown_0203AAD8);
sUnknown_0203AB30 = AllocZeroed(sizeof(struct SpriteSheet) * 22); sUnknown_0203AB30 = AllocZeroed(sizeof(struct SpriteSheet) * ARRAY_COUNT(gSlotMachineSpriteSheets));
for (i = 0; i < 22; i++) for (i = 0; i < ARRAY_COUNT(gSlotMachineSpriteSheets); i++)
{ {
sUnknown_0203AB30[i].data = gSlotMachineSpriteSheets[i].data; sUnknown_0203AB30[i].data = gSlotMachineSpriteSheets[i].data;
sUnknown_0203AB30[i].size = gSlotMachineSpriteSheets[i].size; sUnknown_0203AB30[i].size = gSlotMachineSpriteSheets[i].size;
@@ -6708,7 +6708,7 @@ static const struct SubspriteTable *const gUnknown_083EDBC4[] =
NULL NULL
}; };
static const struct SpriteSheet gSlotMachineSpriteSheets[] = static const struct SpriteSheet gSlotMachineSpriteSheets[22] =
{ {
{ .data = gSlotMachineReelSymbol1Tiles, .size = 0x200, .tag = 0 }, { .data = gSlotMachineReelSymbol1Tiles, .size = 0x200, .tag = 0 },
{ .data = gSlotMachineReelSymbol2Tiles, .size = 0x200, .tag = 1 }, { .data = gSlotMachineReelSymbol2Tiles, .size = 0x200, .tag = 1 },
@@ -6727,15 +6727,12 @@ static const struct SpriteSheet gSlotMachineSpriteSheets[] =
{ .data = gSlotMachineNumber7Tiles, .size = 0x40, .tag = 14 }, { .data = gSlotMachineNumber7Tiles, .size = 0x40, .tag = 14 },
{ .data = gSlotMachineNumber8Tiles, .size = 0x40, .tag = 15 }, { .data = gSlotMachineNumber8Tiles, .size = 0x40, .tag = 15 },
{ .data = gSlotMachineNumber9Tiles, .size = 0x40, .tag = 16 }, { .data = gSlotMachineNumber9Tiles, .size = 0x40, .tag = 16 },
}; // the data for these sheets is determined at runtime
{ .data = NULL, .size = 0x200, .tag = 18 },
static const u8 sUnused1[][8] = { .data = NULL, .size = 0x200, .tag = 19 },
{ { .data = NULL, .size = 0x300, .tag = 20 },
{0, 0, 0, 0, 0, 2, 18}, { .data = NULL, .size = 0x300, .tag = 21 },
{0, 0, 0, 0, 0, 2, 19}, {},
{0, 0, 0, 0, 0, 3, 20},
{0, 0, 0, 0, 0, 3, 21},
{0, 0, 0, 0, 0, 0, 0}
}; };
static const u8 *const gUnknown_083EDCDC = gUnknown_08DD19F8; static const u8 *const gUnknown_083EDCDC = gUnknown_08DD19F8;
+41 -37
View File
@@ -133,8 +133,8 @@ static u8 BattlePyramidRetireInputCallback(void);
// Task callbacks // Task callbacks
static void StartMenuTask(u8 taskId); static void StartMenuTask(u8 taskId);
static void SaveGameTask(u8 taskId); static void SaveGameTask(u8 taskId);
static void sub_80A0550(u8 taskId); static void Task_SaveAfterLinkBattle(u8 taskId);
static void sub_80A08A4(u8 taskId); static void Task_WaitForBattleTowerLinkSave(u8 taskId);
static bool8 FieldCB_ReturnToFieldStartMenu(void); static bool8 FieldCB_ReturnToFieldStartMenu(void);
static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8}; static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8};
@@ -219,8 +219,8 @@ static bool8 SaveSuccesTimer(void);
static bool8 SaveErrorTimer(void); static bool8 SaveErrorTimer(void);
static void InitBattlePyramidRetire(void); static void InitBattlePyramidRetire(void);
static void sub_80A03D8(void); static void sub_80A03D8(void);
static bool32 sub_80A03E4(u8 *par1); static bool32 InitSaveWindowAfterLinkBattle(u8 *par1);
static void sub_80A0540(void); static void CB2_SaveAfterLinkBattle(void);
static void ShowSaveInfoWindow(void); static void ShowSaveInfoWindow(void);
static void RemoveSaveInfoWindow(void); static void RemoveSaveInfoWindow(void);
static void HideStartMenuWindow(void); static void HideStartMenuWindow(void);
@@ -525,7 +525,7 @@ void Task_ShowStartMenu(u8 taskId)
{ {
case 0: case 0:
if (InUnionRoom() == TRUE) if (InUnionRoom() == TRUE)
var_800D_set_xB(); SetUsingUnionRoomStartMenu();
gMenuCallback = HandleStartMenuInput; gMenuCallback = HandleStartMenuInput;
task->data[0]++; task->data[0]++;
@@ -1159,9 +1159,9 @@ static void sub_80A03D8(void)
TransferPlttBuffer(); TransferPlttBuffer();
} }
static bool32 sub_80A03E4(u8 *par1) static bool32 InitSaveWindowAfterLinkBattle(u8 *state)
{ {
switch (*par1) switch (*state)
{ {
case 0: case 0:
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0);
@@ -1193,43 +1193,43 @@ static bool32 sub_80A03E4(u8 *par1)
return TRUE; return TRUE;
} }
(*par1)++; (*state)++;
return FALSE; return FALSE;
} }
void sub_80A0514(void) void CB2_SetUpSaveAfterLinkBattle(void)
{ {
if (sub_80A03E4(&gMain.state)) if (InitSaveWindowAfterLinkBattle(&gMain.state))
{ {
CreateTask(sub_80A0550, 0x50); CreateTask(Task_SaveAfterLinkBattle, 0x50);
SetMainCallback2(sub_80A0540); SetMainCallback2(CB2_SaveAfterLinkBattle);
} }
} }
static void sub_80A0540(void) static void CB2_SaveAfterLinkBattle(void)
{ {
RunTasks(); RunTasks();
UpdatePaletteFade(); UpdatePaletteFade();
} }
static void sub_80A0550(u8 taskId) static void Task_SaveAfterLinkBattle(u8 taskId)
{ {
s16 *step = gTasks[taskId].data; s16 *state = gTasks[taskId].data;
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
switch (*step) switch (*state)
{ {
case 0: case 0:
FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, AddTextPrinterParameterized2(0,
1, 1,
gText_SavingDontTurnOffPower, gText_SavingDontTurnOffPower,
255, TEXT_SPEED_FF,
NULL, NULL,
2, TEXT_COLOR_DARK_GREY,
1, TEXT_COLOR_WHITE,
3); TEXT_COLOR_LIGHT_GREY);
DrawTextBorderOuter(0, 8, 14); DrawTextBorderOuter(0, 8, 14);
PutWindowTilemap(0); PutWindowTilemap(0);
CopyWindowToVram(0, 3); CopyWindowToVram(0, 3);
@@ -1237,37 +1237,37 @@ static void sub_80A0550(u8 taskId)
if (gWirelessCommType != 0 && InUnionRoom()) if (gWirelessCommType != 0 && InUnionRoom())
{ {
if (sub_800A07C()) if (Link_AnyPartnersPlayingFRLG_JP())
{ {
*step = 1; *state = 1;
} }
else else
{ {
*step = 5; *state = 5;
} }
} }
else else
{ {
gSoftResetDisabled = 1; gSoftResetDisabled = 1;
*step = 1; *state = 1;
} }
break; break;
case 1: case 1:
SetContinueGameWarpStatusToDynamicWarp(); SetContinueGameWarpStatusToDynamicWarp();
FullSaveGame(); FullSaveGame();
*step = 2; *state = 2;
break; break;
case 2: case 2:
if (CheckSaveFile()) if (CheckSaveFile())
{ {
ClearContinueGameWarpStatus2(); ClearContinueGameWarpStatus2();
*step = 3; *state = 3;
gSoftResetDisabled = 0; gSoftResetDisabled = 0;
} }
break; break;
case 3: case 3:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
*step = 4; *state = 4;
break; break;
case 4: case 4:
FreeAllWindowBuffers(); FreeAllWindowBuffers();
@@ -1275,13 +1275,13 @@ static void sub_80A0550(u8 taskId)
DestroyTask(taskId); DestroyTask(taskId);
break; break;
case 5: case 5:
CreateTask(sub_8153688, 0x5); CreateTask(Task_LinkSave, 5);
*step = 6; *state = 6;
break; break;
case 6: case 6:
if (!FuncIsActiveTask(sub_8153688)) if (!FuncIsActiveTask(Task_LinkSave))
{ {
*step = 3; *state = 3;
} }
break; break;
} }
@@ -1357,22 +1357,26 @@ static void RemoveSaveInfoWindow(void)
RemoveWindow(sSaveInfoWindowId); RemoveWindow(sSaveInfoWindowId);
} }
static void sub_80A08A4(u8 taskId) static void Task_WaitForBattleTowerLinkSave(u8 taskId)
{ {
if (!FuncIsActiveTask(sub_8153688)) if (!FuncIsActiveTask(Task_LinkSave))
{ {
DestroyTask(taskId); DestroyTask(taskId);
EnableBothScriptContexts(); EnableBothScriptContexts();
} }
} }
void sub_80A08CC(void) #define tPartialSave data[2]
void SaveForBattleTowerLink(void)
{ {
u8 taskId = CreateTask(sub_8153688, 0x5); u8 taskId = CreateTask(Task_LinkSave, 5);
gTasks[taskId].data[2] = 1; gTasks[taskId].tPartialSave = TRUE;
gTasks[CreateTask(sub_80A08A4, 0x6)].data[1] = taskId; gTasks[CreateTask(Task_WaitForBattleTowerLinkSave, 6)].data[1] = taskId;
} }
#undef tPartialSave
static void HideStartMenuWindow(void) static void HideStartMenuWindow(void)
{ {
ClearStdWindowAndFrame(GetStartMenuWindowId(), TRUE); ClearStdWindowAndFrame(GetStartMenuWindowId(), TRUE);
+5 -5
View File
@@ -1261,10 +1261,10 @@ const u8 gJPText_PlayersXPokemon[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひ
const u8 gJPText_PlayersXPokmonDoesNotExist[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひきめは いません"); // Unused const u8 gJPText_PlayersXPokmonDoesNotExist[] = _("{SPECIAL_F7 0x00}の{SPECIAL_F7 0x01}ひきめは いません"); // Unused
const u8 gText_ExitingChat[] = _("Exiting the chat…"); const u8 gText_ExitingChat[] = _("Exiting the chat…");
const u8 gText_LeaderLeftEndingChat[] = _("The LEADER, {SPECIAL_F7 0x00}, has\nleft, ending the chat."); const u8 gText_LeaderLeftEndingChat[] = _("The LEADER, {SPECIAL_F7 0x00}, has\nleft, ending the chat.");
const u8 gText_RegisteredTextChanged[] = _("The registered text has been changed.\nIs it okay to save the game?"); const u8 gText_RegisteredTextChangedOKToSave[] = _("The registered text has been changed.\nIs it okay to save the game?");
const u8 gText_AlreadySavedFile_Unused[] = _("There is already a saved file.\nIs it okay to overwrite it?"); const u8 gText_AlreadySavedFile_Chat[] = _("There is already a saved file.\nIs it okay to overwrite it?");
const u8 gText_SavingDontTurnOff_Unused[] = _("SAVING…\nDON'T TURN OFF THE POWER."); const u8 gText_SavingDontTurnOff_Chat[] = _("SAVING…\nDON'T TURN OFF THE POWER.");
const u8 gText_PlayerSavedGame_Unused[] = _("{SPECIAL_F7 0x00} saved the game."); const u8 gText_PlayerSavedGame_Chat[] = _("{SPECIAL_F7 0x00} saved the game.");
const u8 gText_IfLeaderLeavesChatEnds[] = _("If the LEADER leaves, the chat\nwill end. Is that okay?"); const u8 gText_IfLeaderLeavesChatEnds[] = _("If the LEADER leaves, the chat\nwill end. Is that okay?");
const u8 gText_Hello[] = _("HELLO"); const u8 gText_Hello[] = _("HELLO");
const u8 gText_Pokemon2[] = _("POKéMON"); const u8 gText_Pokemon2[] = _("POKéMON");
@@ -1492,7 +1492,7 @@ const u8 gText_FrameTypeNumber[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}");
const u8 gText_ButtonTypeNormal[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}NORMAL"); const u8 gText_ButtonTypeNormal[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}NORMAL");
const u8 gText_ButtonTypeLR[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}LR"); const u8 gText_ButtonTypeLR[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}LR");
const u8 gText_ButtonTypeLEqualsA[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}L=A"); const u8 gText_ButtonTypeLEqualsA[] = _("{COLOR GREEN}{SHADOW LIGHT_GREEN}L=A");
const u8 gText_XPLink[] = _("{STR_VAR_1}P LINK"); const u8 gText_NumPlayerLink[] = _("{STR_VAR_1}P LINK");
const u8 gText_BronzeCard[] = _("BRONZE"); const u8 gText_BronzeCard[] = _("BRONZE");
const u8 gText_CopperCard[] = _("COPPER"); const u8 gText_CopperCard[] = _("COPPER");
const u8 gText_SilverCard[] = _("SILVER"); const u8 gText_SilverCard[] = _("SILVER");
Loaded 100 of 109 files, more files were not shown because too many files have changed in this diff. Show more