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