mirror of
https://github.com/pret/pokeemerald.git
synced 2026-04-25 15:57:29 -05:00
Merge pull request #1138 from GriffinRichards/doc-contest
Document contest
This commit is contained in:
commit
6c34effda9
|
|
@ -5,36 +5,42 @@
|
|||
.byte \score
|
||||
.endm
|
||||
|
||||
@ turn (AKA "Appeal No.")
|
||||
|
||||
.macro get_turn
|
||||
.macro get_appeal_num
|
||||
.byte 0x01
|
||||
.endm
|
||||
|
||||
.macro if_turn_less_than param, addr
|
||||
.macro if_appeal_num_less_than param, addr
|
||||
.byte 0x02
|
||||
.byte \param
|
||||
.4byte \addr
|
||||
.endm
|
||||
|
||||
.macro if_turn_more_than param, addr
|
||||
.macro if_appeal_num_more_than param, addr
|
||||
.byte 0x03
|
||||
.byte \param
|
||||
.4byte \addr
|
||||
.endm
|
||||
|
||||
.macro if_turn_eq param, addr
|
||||
.macro if_appeal_num_eq param, addr
|
||||
.byte 0x04
|
||||
.byte \param
|
||||
.4byte \addr
|
||||
.endm
|
||||
|
||||
.macro if_turn_not_eq param, addr
|
||||
.macro if_appeal_num_not_eq param, addr
|
||||
.byte 0x05
|
||||
.byte \param
|
||||
.4byte \addr
|
||||
.endm
|
||||
|
||||
.macro if_last_appeal addr:req
|
||||
if_appeal_num_eq CONTEST_LAST_APPEAL, \addr
|
||||
.endm
|
||||
|
||||
.macro if_not_last_appeal addr:req
|
||||
if_appeal_num_not_eq CONTEST_LAST_APPEAL, \addr
|
||||
.endm
|
||||
|
||||
@ audience excitement
|
||||
|
||||
.macro get_excitement
|
||||
|
|
@ -65,7 +71,7 @@
|
|||
.4byte \addr
|
||||
.endm
|
||||
|
||||
@ the order that the user goes in the current turn
|
||||
@ the order that the user goes in the current appeal
|
||||
|
||||
.macro get_user_order
|
||||
.byte 0x0B
|
||||
|
|
|
|||
|
|
@ -12,9 +12,9 @@ gRecvCmds
|
|||
gLinkStatus
|
||||
gLinkDummy1
|
||||
gLinkDummy2
|
||||
gUnknown_030030EC
|
||||
gUnknown_030030F0
|
||||
gUnknown_030030F4
|
||||
gReadyToExitStandby
|
||||
gReadyToCloseLink
|
||||
gReadyCloseLinkType
|
||||
gSuppressLinkErrorMessage
|
||||
gWirelessCommType
|
||||
gSavedLinkPlayerCount
|
||||
|
|
|
|||
|
|
@ -1,4 +1,2 @@
|
|||
.include "constants/gba_constants.inc"
|
||||
.include "constants/global.inc"
|
||||
.include "constants/contest_constants.inc"
|
||||
.include "constants/contest_move_effects.inc"
|
||||
|
|
|
|||
|
|
@ -1,68 +0,0 @@
|
|||
.set CONTEST_COOL, 0x00
|
||||
.set CONTEST_BEAUTY, 0x01
|
||||
.set CONTEST_CUTE, 0x02
|
||||
.set CONTEST_SMART, 0x03
|
||||
.set CONTEST_TOUGH, 0x04
|
||||
|
||||
.set COMBO_STARTER_RAIN_DANCE, 0x01
|
||||
.set COMBO_STARTER_RAGE, 0x02
|
||||
.set COMBO_STARTER_FOCUS_ENERGY, 0x03
|
||||
.set COMBO_STARTER_HYPNOSIS, 0x04
|
||||
.set COMBO_STARTER_ENDURE, 0x05
|
||||
.set COMBO_STARTER_HORN_ATTACK, 0x06
|
||||
.set COMBO_STARTER_SWORDS_DANCE, 0x07
|
||||
.set COMBO_STARTER_STOCKPILE, 0x08
|
||||
.set COMBO_STARTER_SUNNY_DAY, 0x09
|
||||
.set COMBO_STARTER_REST, 0x0A
|
||||
.set COMBO_STARTER_VICE_GRIP, 0x0B
|
||||
.set COMBO_STARTER_DEFENSE_CURL, 0x0C
|
||||
.set COMBO_STARTER_CHARGE, 0x0D
|
||||
.set COMBO_STARTER_ROCK_THROW, 0x0E
|
||||
.set COMBO_STARTER_YAWN, 0x0F
|
||||
.set COMBO_STARTER_SCARY_FACE, 0x10
|
||||
.set COMBO_STARTER_POWDER_SNOW, 0x11
|
||||
.set COMBO_STARTER_LOCK_ON, 0x12
|
||||
.set COMBO_STARTER_SOFT_BOILED, 0x13
|
||||
.set COMBO_STARTER_MEAN_LOOK, 0x14
|
||||
.set COMBO_STARTER_SCRATCH, 0x15
|
||||
.set COMBO_STARTER_GROWTH, 0x16
|
||||
.set COMBO_STARTER_HAIL, 0x17
|
||||
.set COMBO_STARTER_SANDSTORM, 0x18
|
||||
.set COMBO_STARTER_BELLY_DRUM, 0x19
|
||||
.set COMBO_STARTER_MIND_READER, 0x1A
|
||||
.set COMBO_STARTER_DRAGON_BREATH, 0x1B
|
||||
.set COMBO_STARTER_DRAGON_RAGE, 0x1C
|
||||
.set COMBO_STARTER_DRAGON_DANCE, 0x1D
|
||||
.set COMBO_STARTER_SURF, 0x1E
|
||||
.set COMBO_STARTER_DIVE, 0x1F
|
||||
.set COMBO_STARTER_STRING_SHOT, 0x20
|
||||
.set COMBO_STARTER_LEER, 0x21
|
||||
.set COMBO_STARTER_TAUNT, 0x22
|
||||
.set COMBO_STARTER_CHARM, 0x23
|
||||
.set COMBO_STARTER_HARDEN, 0x24
|
||||
.set COMBO_STARTER_SING, 0x25
|
||||
.set COMBO_STARTER_EARTHQUAKE, 0x26
|
||||
.set COMBO_STARTER_DOUBLE_TEAM, 0x27
|
||||
.set COMBO_STARTER_CURSE, 0x28
|
||||
.set COMBO_STARTER_SWEET_SCENT, 0x29
|
||||
.set COMBO_STARTER_SLUDGE, 0x2A
|
||||
.set COMBO_STARTER_SLUDGE_BOMB, 0x2B
|
||||
.set COMBO_STARTER_THUNDER_PUNCH, 0x2C
|
||||
.set COMBO_STARTER_FIRE_PUNCH, 0x2D
|
||||
.set COMBO_STARTER_ICE_PUNCH, 0x2E
|
||||
.set COMBO_STARTER_PECK, 0x2F
|
||||
.set COMBO_STARTER_METAL_SOUND, 0x30
|
||||
.set COMBO_STARTER_MUD_SPORT, 0x31
|
||||
.set COMBO_STARTER_WATER_SPORT, 0x32
|
||||
.set COMBO_STARTER_BONE_CLUB, 0x33
|
||||
.set COMBO_STARTER_BONEMERANG, 0x34
|
||||
.set COMBO_STARTER_BONE_RUSH, 0x35
|
||||
.set COMBO_STARTER_SAND_ATTACK, 0x36
|
||||
.set COMBO_STARTER_MUD_SLAP, 0x37
|
||||
.set COMBO_STARTER_FAKE_OUT, 0x38
|
||||
.set COMBO_STARTER_PSYCHIC, 0x39
|
||||
.set COMBO_STARTER_KINESIS, 0x3A
|
||||
.set COMBO_STARTER_CONFUSION, 0x3B
|
||||
.set COMBO_STARTER_POUND, 0x3C
|
||||
.set COMBO_STARTER_SMOG, 0x3D
|
||||
.set COMBO_STARTER_CALM_MIND, 0x3E
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
enum_start
|
||||
enum CONTEST_EFFECT_HIGHLY_APPEALING @ 0
|
||||
enum CONTEST_EFFECT_USER_MORE_EASILY_STARTLED @ 1
|
||||
enum CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES @ 2
|
||||
enum CONTEST_EFFECT_REPETITION_NOT_BORING @ 3
|
||||
enum CONTEST_EFFECT_AVOID_STARTLE_ONCE @ 4
|
||||
enum CONTEST_EFFECT_AVOID_STARTLE @ 5
|
||||
enum CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY @ 6
|
||||
enum CONTEST_EFFECT_USER_LESS_EASILY_STARTLED @ 7
|
||||
enum CONTEST_EFFECT_STARTLE_FRONT_MON @ 8
|
||||
enum CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS @ 9
|
||||
enum CONTEST_EFFECT_STARTLE_PREV_MON @ 10
|
||||
enum CONTEST_EFFECT_STARTLE_PREV_MONS @ 11
|
||||
enum CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON @ 12
|
||||
enum CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS @ 13
|
||||
enum CONTEST_EFFECT_STARTLE_PREV_MON_2 @ 14
|
||||
enum CONTEST_EFFECT_STARTLE_PREV_MONS_2 @ 15
|
||||
enum CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION @ 16
|
||||
enum CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION @ 17
|
||||
enum CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN @ 18
|
||||
enum CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL @ 19
|
||||
enum CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL @ 20
|
||||
enum CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL @ 21
|
||||
enum CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL @ 22
|
||||
enum CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL @ 23
|
||||
enum CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL @ 24
|
||||
enum CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS @ 25
|
||||
enum CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS @ 26
|
||||
enum CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS @ 27
|
||||
enum CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION @ 28
|
||||
enum CONTEST_EFFECT_BETTER_IF_FIRST @ 29
|
||||
enum CONTEST_EFFECT_BETTER_IF_LAST @ 30
|
||||
enum CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES @ 31
|
||||
enum CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE @ 32
|
||||
enum CONTEST_EFFECT_BETTER_WHEN_LATER @ 33
|
||||
enum CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING @ 34
|
||||
enum CONTEST_EFFECT_BETTER_IF_SAME_TYPE @ 35
|
||||
enum CONTEST_EFFECT_BETTER_IF_DIFF_TYPE @ 36
|
||||
enum CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL @ 37
|
||||
enum CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS @ 38
|
||||
enum CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION @ 39
|
||||
enum CONTEST_EFFECT_NEXT_APPEAL_EARLIER @ 40
|
||||
enum CONTEST_EFFECT_NEXT_APPEAL_LATER @ 41
|
||||
enum CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER @ 42
|
||||
enum CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER @ 43
|
||||
enum CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST @ 44
|
||||
enum CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS @ 45
|
||||
enum CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED @ 46
|
||||
enum CONTEST_EFFECT_DONT_EXCITE_AUDIENCE @ 47
|
||||
|
|
@ -1,3 +1,5 @@
|
|||
#include "constants/global.h"
|
||||
#include "constants/contest.h"
|
||||
.include "asm/macros.inc"
|
||||
.include "asm/macros/contest_ai_script.inc"
|
||||
.include "constants/constants.inc"
|
||||
|
|
@ -12,13 +14,13 @@
|
|||
|
||||
.align 2
|
||||
gContestAIChecks:: @ 82DE350
|
||||
.4byte AI_CheckForBadMove // 0x00000001
|
||||
.4byte AI_CheckForCombo // 0x00000002
|
||||
.4byte AI_CheckBoring // 0x00000004
|
||||
.4byte AI_CheckExcitement // 0x00000008
|
||||
.4byte AI_CheckOrder // 0x00000010
|
||||
.4byte AI_CheckForGoodMove // 0x00000020
|
||||
.4byte AI_Erratic // 0x00000040
|
||||
.4byte AI_CheckForBadMove @ CONTEST_AI_CHECK_BAD_MOVE
|
||||
.4byte AI_CheckForCombo @ CONTEST_AI_CHECK_COMBO
|
||||
.4byte AI_CheckBoring @ CONTEST_AI_CHECK_BORING
|
||||
.4byte AI_CheckExcitement @ CONTEST_AI_CHECK_EXCITEMENT
|
||||
.4byte AI_CheckOrder @ CONTEST_AI_CHECK_ORDER
|
||||
.4byte AI_CheckForGoodMove @ CONTEST_AI_CHECK_GOOD_MOVE
|
||||
.4byte AI_Erratic @ CONTEST_AI_ERRATIC
|
||||
.4byte AI_Nothing // 0x00000080
|
||||
.4byte AI_Nothing // 0x00000100
|
||||
.4byte AI_Nothing // 0x00000200
|
||||
|
|
@ -47,9 +49,9 @@ gContestAIChecks:: @ 82DE350
|
|||
|
||||
|
||||
@ Unreferenced AI routine to encourage moves that improve condition on the first
|
||||
@ turn. Additionally, it checks the appeal order of the user and the effect
|
||||
@ appeal. Additionally, it checks the turn order of the user and the effect
|
||||
@ type, but the code is buggy and doesn't affect the score.
|
||||
if_turn_not_eq 0, ContestUnreferenced_80
|
||||
if_appeal_num_not_eq 0, ContestUnreferenced_80
|
||||
if_effect_not_eq CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS, ContestUnreferenced_80
|
||||
score +10
|
||||
ContestUnreferenced_80:
|
||||
|
|
@ -64,11 +66,11 @@ ContestUnreferenced_end:
|
|||
end
|
||||
|
||||
@ Unreferenced AI routine that doesn't make much sense.
|
||||
if_turn_eq 0, ContestUnreferenced_0F_1
|
||||
if_turn_eq 1, ContestUnreferenced_0F_2
|
||||
if_turn_eq 2, ContestUnreferenced_0F_3
|
||||
if_turn_eq 3, ContestUnreferenced_0F_4
|
||||
if_turn_eq 4, ContestUnreferenced_0F_5
|
||||
if_appeal_num_eq 0, ContestUnreferenced_0F_1
|
||||
if_appeal_num_eq 1, ContestUnreferenced_0F_2
|
||||
if_appeal_num_eq 2, ContestUnreferenced_0F_3
|
||||
if_appeal_num_eq 3, ContestUnreferenced_0F_4
|
||||
if_last_appeal ContestUnreferenced_0F_5
|
||||
end
|
||||
ContestUnreferenced_0F_1:
|
||||
if_user_order_not_eq MON_1, ContestUnreferenced_2B_1
|
||||
|
|
@ -122,25 +124,26 @@ ContestUnreferenced_score2:
|
|||
end
|
||||
|
||||
AI_CheckBoring:
|
||||
if_effect_eq CONTEST_EFFECT_REPETITION_NOT_BORING, AI_end_081DC27F
|
||||
if_move_used_count_eq 1, AI_score1_081DC27F
|
||||
if_move_used_count_eq 2, AI_score2_081DC27F
|
||||
if_move_used_count_eq 3, AI_score3_081DC27F
|
||||
if_move_used_count_eq 4, AI_score4_081DC27F
|
||||
if_effect_eq CONTEST_EFFECT_REPETITION_NOT_BORING, AI_CheckBoring_NotBoring
|
||||
if_move_used_count_eq 1, AI_CheckBoring_FirstRepeat
|
||||
if_move_used_count_eq 2, AI_CheckBoring_SecondRepeat
|
||||
if_move_used_count_eq 3, AI_CheckBoring_ThirdRepeat
|
||||
if_move_used_count_eq 4, AI_CheckBoring_FourthRepeat
|
||||
@ No repeats
|
||||
end
|
||||
AI_score1_081DC27F:
|
||||
AI_CheckBoring_FirstRepeat:
|
||||
score -5
|
||||
end
|
||||
AI_score2_081DC27F:
|
||||
AI_CheckBoring_SecondRepeat:
|
||||
score -15
|
||||
end
|
||||
AI_score3_081DC27F:
|
||||
AI_CheckBoring_ThirdRepeat:
|
||||
score -20
|
||||
end
|
||||
AI_score4_081DC27F:
|
||||
AI_CheckBoring_FourthRepeat:
|
||||
score -25
|
||||
end
|
||||
AI_end_081DC27F:
|
||||
AI_CheckBoring_NotBoring:
|
||||
end
|
||||
|
||||
AI_CheckExcitement:
|
||||
|
|
@ -165,7 +168,7 @@ AI_contest7D_1_081DC2AB:
|
|||
end
|
||||
AI_contest0F_2_081DC2AB:
|
||||
if_user_order_not_eq MON_1, AI_contest7D_3_081DC2AB
|
||||
if_turn_eq 4, AI_score_081DC2AB
|
||||
if_last_appeal AI_score_081DC2AB
|
||||
AI_contest7D_2_081DC2AB:
|
||||
if_random 51, AI_end_081DC2AB
|
||||
score +10
|
||||
|
|
@ -221,22 +224,22 @@ AI_score_081DC348:
|
|||
score +25
|
||||
end
|
||||
AI_contest04_1_081DC348:
|
||||
if_turn_eq 4, AI_contest7D_081DC348
|
||||
if_last_appeal AI_contest7D_081DC348
|
||||
if_random 150, AI_end_081DC348
|
||||
score +10
|
||||
end
|
||||
AI_contest04_2_081DC348:
|
||||
if_turn_eq 4, AI_contest7D_081DC348
|
||||
if_last_appeal AI_contest7D_081DC348
|
||||
if_random 125, AI_end_081DC348
|
||||
score +10
|
||||
end
|
||||
AI_contest04_3_081DC348:
|
||||
if_turn_eq 4, AI_contest7D_081DC348
|
||||
if_last_appeal AI_contest7D_081DC348
|
||||
if_random 50, AI_end_081DC348
|
||||
score +10
|
||||
end
|
||||
AI_contest04_4_081DC348:
|
||||
if_turn_eq 4, AI_contest7D_081DC348
|
||||
if_last_appeal AI_contest7D_081DC348
|
||||
score +10
|
||||
end
|
||||
AI_contest7D_081DC348:
|
||||
|
|
@ -301,7 +304,7 @@ ContestEffect3:
|
|||
if_random 50, ContestEffectEnd
|
||||
score +15
|
||||
end
|
||||
if_turn_eq 4, ContestEffect3_7D
|
||||
if_last_appeal ContestEffect3_7D
|
||||
if_random 220, ContestEffect3_score
|
||||
score +10
|
||||
end
|
||||
|
|
@ -323,8 +326,8 @@ ContestEffect38_score1:
|
|||
score -10
|
||||
end
|
||||
ContestEffect38_contest04:
|
||||
if_turn_eq 4, ContestEffect38_score2
|
||||
if_turn_eq 0, ContestEffect38_random
|
||||
if_last_appeal ContestEffect38_score2
|
||||
if_appeal_num_eq 0, ContestEffect38_random
|
||||
if_move_used_count_eq 1, ContestEffectEnd
|
||||
if_random 125, ContestEffectEnd
|
||||
score +10
|
||||
|
|
@ -341,7 +344,7 @@ ContestEffect47:
|
|||
if_move_used_count_eq 1, ContestEffectEnd
|
||||
if_user_order_eq MON_1, ContestEffect47_random
|
||||
if_user_order_eq MON_2, ContestEffect47_random
|
||||
if_turn_not_eq 4, ContestEffectEnd
|
||||
if_not_last_appeal ContestEffectEnd
|
||||
if_user_has_exciting_move ContestEffectEnd
|
||||
if_excitement_less_than 1, ContestEffectEnd
|
||||
score +10
|
||||
|
|
@ -408,7 +411,7 @@ ContestEffect46:
|
|||
if_user_order_more_than MON_1, ContestEffect46_score4
|
||||
end
|
||||
ContestEffect46_05:
|
||||
if_turn_not_eq 0, ContestEffect46_score1
|
||||
if_appeal_num_not_eq 0, ContestEffect46_score1
|
||||
if_excitement_eq 4, ContestEffect46_score2
|
||||
if_excitement_eq 3, ContestEffect46_score3
|
||||
end
|
||||
|
|
@ -565,7 +568,7 @@ ContestEffect_FollowingMonsNervous_CheckMon2:
|
|||
end
|
||||
|
||||
ContestEffect18:
|
||||
if_turn_eq 4, ContestEffect18_score1
|
||||
if_last_appeal ContestEffect18_score1
|
||||
jump ContestEffect18_0E
|
||||
end
|
||||
ContestEffect18_score1:
|
||||
|
|
@ -599,9 +602,9 @@ ContestEffectEnd:
|
|||
|
||||
@ Randomly encourage moves in Cute, Smart, and Tough contests.
|
||||
AI_Erratic:
|
||||
if_contest_type_eq CONTEST_CUTE, Erratic_CuteSmartTough
|
||||
if_contest_type_eq CONTEST_SMART, Erratic_CuteSmartTough
|
||||
if_contest_type_eq CONTEST_TOUGH, Erratic_CuteSmartTough
|
||||
if_contest_type_eq CONTEST_CATEGORY_CUTE, Erratic_CuteSmartTough
|
||||
if_contest_type_eq CONTEST_CATEGORY_SMART, Erratic_CuteSmartTough
|
||||
if_contest_type_eq CONTEST_CATEGORY_TOUGH, Erratic_CuteSmartTough
|
||||
end
|
||||
Erratic_CuteSmartTough:
|
||||
if_random 125, Erratic_NoScoreIncrease
|
||||
|
|
@ -762,11 +765,11 @@ ContestEffect2_4_score3:
|
|||
end
|
||||
|
||||
ContestEffect2_2:
|
||||
if_turn_eq 0, ContestEffect2_2_score1
|
||||
if_turn_eq 1, ContestEffect2_2_score2
|
||||
if_turn_eq 2, ContestEffect2_2_score3
|
||||
if_turn_eq 3, ContestEffect2_2_score4
|
||||
if_turn_eq 4, ContestEffect2_2_score5
|
||||
if_appeal_num_eq 0, ContestEffect2_2_score1
|
||||
if_appeal_num_eq 1, ContestEffect2_2_score2
|
||||
if_appeal_num_eq 2, ContestEffect2_2_score3
|
||||
if_appeal_num_eq 3, ContestEffect2_2_score4
|
||||
if_last_appeal ContestEffect2_2_score5
|
||||
end
|
||||
ContestEffect2_2_score1:
|
||||
if_random 20, ContestEffectEnd2
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ ContestHall_OnTransition: @ 823B79F
|
|||
|
||||
ContestHall_EventScript_ReadyContestMusic:: @ 823B7AF
|
||||
call ContestHall_EventScript_TryWaitForLink
|
||||
special ScriptGetMultiplayerId
|
||||
special GetContestMultiplayerId
|
||||
compare VAR_RESULT, 0
|
||||
call_if_eq ContestHall_EventScript_SaveContestMusicPlayer1
|
||||
compare VAR_RESULT, 1
|
||||
|
|
@ -136,7 +136,7 @@ ContestHall_EventScript_SetRandomAudience7:: @ 823B8ED
|
|||
|
||||
ContestHall_EventScript_GetRandomAudienceGfxId:: @ 823B8F8
|
||||
setvar VAR_RESULT, 32
|
||||
special ScriptRandom
|
||||
special GenerateContestRand
|
||||
addvar VAR_RESULT, 1
|
||||
switch VAR_RESULT
|
||||
case 1, ContestHall_EventScript_RandomAudienceNinjaBoy
|
||||
|
|
|
|||
|
|
@ -542,7 +542,7 @@ ContestHall_EventScript_AudienceHeartEmotes:: @ 827A34F
|
|||
|
||||
ContestHall_EventScript_DisplayHearts:: @ 827A3E5
|
||||
setvar VAR_RESULT, 8
|
||||
special ScriptRandom
|
||||
special GenerateContestRand
|
||||
compare VAR_RESULT, 0
|
||||
call_if_eq ContestHall_EventScript_TryDisplayHeartAudienceMember1
|
||||
compare VAR_RESULT, 1
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ gSpecials:: @ 81DBA64
|
|||
def_special SaveMuseumContestPainting
|
||||
def_special DoesContestCategoryHaveWinner
|
||||
def_special CountPlayerContestPaintings
|
||||
def_special ShowContestWinner
|
||||
def_special ShowContestWinnerPainting
|
||||
def_special MauvilleGymSetDefaultBarriers
|
||||
def_special MauvilleGymPressSwitch
|
||||
def_special ShowFieldMessageStringVar4
|
||||
|
|
@ -336,7 +336,7 @@ gSpecials:: @ 81DBA64
|
|||
def_special BattleSetup_StartLatiBattle
|
||||
def_special SetRoute119Weather
|
||||
def_special SetRoute123Weather
|
||||
def_special ScriptGetMultiplayerId
|
||||
def_special GetContestMultiplayerId
|
||||
def_special ScriptGetPartyMonSpecies
|
||||
def_special IsSelectedMonEgg
|
||||
def_special TryInitBattleTowerAwardManObjectEvent
|
||||
|
|
@ -350,7 +350,7 @@ gSpecials:: @ 81DBA64
|
|||
def_special BufferLottoTicketNumber
|
||||
def_special TryHideBattleTowerReporter
|
||||
def_special DoesPartyHaveEnigmaBerry
|
||||
def_special ScriptRandom
|
||||
def_special GenerateContestRand
|
||||
def_special SetChampionSaveWarp
|
||||
def_special TryPutTreasureInvestigatorsOnAir
|
||||
def_special TryPutLotteryWinnerReportOnAir
|
||||
|
|
|
|||
|
|
@ -2436,7 +2436,7 @@ gTVSafariFanClubText10:: @ 08289D33
|
|||
.string "and make the challenge yourself!\p"
|
||||
.string "Until next time, cheerio!$"
|
||||
|
||||
gTVContestLiveUpdatesText00:: @ 08289DD6
|
||||
ContestLiveUpdates_Text_Intro:: @ 08289DD6
|
||||
.string "“POKéMON CONTEST LIVE UPDATES!”\p"
|
||||
.string "MC: Thanks for joining us!\p"
|
||||
.string "We're live from the just-ended\n"
|
||||
|
|
@ -2455,117 +2455,117 @@ gTVContestLiveUpdatesText00:: @ 08289DD6
|
|||
.string "MC: Let's hear what the fans have\n"
|
||||
.string "to say about this CONTEST.$"
|
||||
|
||||
gTVContestLiveUpdatesText01:: @ 08289F53
|
||||
ContestLiveUpdates_Text_WonBothRounds:: @ 08289F53
|
||||
.string "Spectator: The {STR_VAR_2} was tops in\n"
|
||||
.string "both primary and secondary judging!\p"
|
||||
.string "That {STR_VAR_2} will keep winning!$"
|
||||
|
||||
gTVContestLiveUpdatesText02:: @ 08289FB0
|
||||
ContestLiveUpdates_Text_BetterRound2:: @ 08289FB0
|
||||
.string "Spectator: The {STR_VAR_2} didn't do\n"
|
||||
.string "well in the primary judging, but it\l"
|
||||
.string "cleaned up in the secondary judging!\p"
|
||||
.string "It was a miraculous comeback\n"
|
||||
.string "for that {STR_VAR_2}. Yippee!$"
|
||||
|
||||
gTVContestLiveUpdatesText03:: @ 0828A047
|
||||
ContestLiveUpdates_Text_EqualRounds:: @ 0828A047
|
||||
.string "Spectator: The {STR_VAR_2} remained\n"
|
||||
.string "consistent throughout both primary\l"
|
||||
.string "and secondary judging.\p"
|
||||
.string "{STR_VAR_3} and the {STR_VAR_2},\n"
|
||||
.string "they're no ordinary combo!$"
|
||||
|
||||
gTVContestLiveUpdatesText04:: @ 0828A0C6
|
||||
ContestLiveUpdates_Text_BetterRound1:: @ 0828A0C6
|
||||
.string "Spectator: In terms of being {STR_VAR_1},\n"
|
||||
.string "that {STR_VAR_2} was outstanding.\p"
|
||||
.string "I hope it makes better appeals\n"
|
||||
.string "next time, though.$"
|
||||
|
||||
gTVContestLiveUpdatesText05:: @ 0828A132
|
||||
ContestLiveUpdates_Text_GotNervous:: @ 0828A132
|
||||
.string "Spectator: When the {STR_VAR_2} got\n"
|
||||
.string "nervous, I couldn't stop myself from\l"
|
||||
.string "shouting encouragement.\p"
|
||||
.string "I'd like to say this to that\n"
|
||||
.string "{STR_VAR_2}, “Congratulations!”$"
|
||||
|
||||
gTVContestLiveUpdatesText06:: @ 0828A1BE
|
||||
ContestLiveUpdates_Text_StartledFoes:: @ 0828A1BE
|
||||
.string "Spectator: That {STR_VAR_2}'s appeal\n"
|
||||
.string "startled even me!\p"
|
||||
.string "{STR_VAR_2}, you were awesome!$"
|
||||
|
||||
gTVContestLiveUpdatesText07:: @ 0828A202
|
||||
ContestLiveUpdates_Text_UsedCombo:: @ 0828A202
|
||||
.string "Spectator: That {STR_VAR_2}'s combo\n"
|
||||
.string "appeal was stunning!\p"
|
||||
.string "It's shaken me to the core!$"
|
||||
|
||||
gTVContestLiveUpdatesText08:: @ 0828A24E
|
||||
ContestLiveUpdates_Text_ExcitingAppeal:: @ 0828A24E
|
||||
.string "Spectator: The winning {STR_VAR_2}'s\n"
|
||||
.string "appeal got my heart pounding!$"
|
||||
|
||||
gTVContestLiveUpdatesText09:: @ 0828A288
|
||||
ContestLiveUpdates_Text_WasCool:: @ 0828A288
|
||||
.string "{STR_VAR_2}!\n"
|
||||
.string "You were cool!$"
|
||||
|
||||
gTVContestLiveUpdatesText10:: @ 0828A29B
|
||||
ContestLiveUpdates_Text_WasBeautiful:: @ 0828A29B
|
||||
.string "{STR_VAR_2}!\n"
|
||||
.string "You were beautiful!$"
|
||||
|
||||
gTVContestLiveUpdatesText11:: @ 0828A2B3
|
||||
ContestLiveUpdates_Text_WasCute:: @ 0828A2B3
|
||||
.string "{STR_VAR_2}!\n"
|
||||
.string "You were cute!$"
|
||||
|
||||
gTVContestLiveUpdatesText12:: @ 0828A2C6
|
||||
ContestLiveUpdates_Text_WasSmart:: @ 0828A2C6
|
||||
.string "{STR_VAR_2}!\n"
|
||||
.string "You were smart!$"
|
||||
|
||||
gTVContestLiveUpdatesText13:: @ 0828A2DA
|
||||
ContestLiveUpdates_Text_WasTough:: @ 0828A2DA
|
||||
.string "{STR_VAR_2}!\n"
|
||||
.string "You were tough!$"
|
||||
|
||||
gTVContestLiveUpdatesText14:: @ 0828A2EE
|
||||
ContestLiveUpdates_Text_VeryExcitingAppeal:: @ 0828A2EE
|
||||
.string "Spectator: The winning {STR_VAR_2}'s\n"
|
||||
.string "appeal still has my heart pounding!$"
|
||||
|
||||
gTVContestLiveUpdatesText15:: @ 0828A32E
|
||||
ContestLiveUpdates_Text_VeryCool:: @ 0828A32E
|
||||
.string "{STR_VAR_2}!\n"
|
||||
.string "You're the last word in cool!$"
|
||||
|
||||
gTVContestLiveUpdatesText16:: @ 0828A350
|
||||
ContestLiveUpdates_Text_VeryBeautiful:: @ 0828A350
|
||||
.string "{STR_VAR_2}!\n"
|
||||
.string "You're the most beautiful!$"
|
||||
|
||||
gTVContestLiveUpdatesText17:: @ 0828A36F
|
||||
ContestLiveUpdates_Text_VeryCute:: @ 0828A36F
|
||||
.string "{STR_VAR_2}!\n"
|
||||
.string "You're simply the cutest!$"
|
||||
|
||||
gTVContestLiveUpdatesText18:: @ 0828A38D
|
||||
ContestLiveUpdates_Text_VerySmart:: @ 0828A38D
|
||||
.string "{STR_VAR_2}!\n"
|
||||
.string "You're the smartest among the smart!$"
|
||||
|
||||
gTVContestLiveUpdatesText19:: @ 0828A3B6
|
||||
ContestLiveUpdates_Text_VeryTough:: @ 0828A3B6
|
||||
.string "{STR_VAR_2}!\n"
|
||||
.string "You're the toughest of the tough!$"
|
||||
|
||||
gTVContestLiveUpdatesText20:: @ 0828A3DC
|
||||
ContestLiveUpdates_Text_TookBreak:: @ 0828A3DC
|
||||
.string "Spectator: Even when the {STR_VAR_2}\n"
|
||||
.string "took a break from making appeals,\l"
|
||||
.string "I couldn't take my eyes off it.\p"
|
||||
.string "I'm captivated by that {STR_VAR_2}.$"
|
||||
|
||||
gTVContestLiveUpdatesText21:: @ 0828A455
|
||||
ContestLiveUpdates_Text_GotStartled:: @ 0828A455
|
||||
.string "Spectator: When the {STR_VAR_2} was\n"
|
||||
.string "startled by another POKéMON's appeal,\l"
|
||||
.string "I was close to tears.\p"
|
||||
.string "{STR_VAR_2}, you were resilient!\n"
|
||||
.string "Way to go!$"
|
||||
|
||||
gTVContestLiveUpdatesText22:: @ 0828A4CF
|
||||
ContestLiveUpdates_Text_MoveWonderful:: @ 0828A4CF
|
||||
.string "Spectator: Oh…\n"
|
||||
.string "That {STR_VAR_2}'s {STR_VAR_3}!\l"
|
||||
.string "{STR_VAR_2}'s {STR_VAR_3}!\l"
|
||||
.string "{STR_VAR_2}'s {STR_VAR_3}!\l"
|
||||
.string "How could it be so wonderful?$"
|
||||
|
||||
gTVContestLiveUpdatesText23:: @ 0828A51C
|
||||
ContestLiveUpdates_Text_TalkAboutAnotherMon:: @ 0828A51C
|
||||
.string "MC: Well, there you have it. This place\n"
|
||||
.string "is full of the {STR_VAR_1}'s fans!\p"
|
||||
.string "I should also mention that another\n"
|
||||
|
|
@ -2573,20 +2573,20 @@ gTVContestLiveUpdatesText23:: @ 0828A51C
|
|||
.string "caught my eye.\p"
|
||||
.string "{STR_VAR_2}'s {STR_VAR_3}…$"
|
||||
|
||||
gTVContestLiveUpdatesText24:: @ 0828A5AC
|
||||
ContestLiveUpdates_Text_FailedToAppeal:: @ 0828A5AC
|
||||
.string "It failed to make a single appeal during\n"
|
||||
.string "secondary judging out of nervousness.\p"
|
||||
.string "Next time, I would like to see this\n"
|
||||
.string "{STR_VAR_1} make even one appeal.$"
|
||||
|
||||
gTVContestLiveUpdatesText25:: @ 0828A638
|
||||
ContestLiveUpdates_Text_LastInBothRounds:: @ 0828A638
|
||||
.string "It came dead last in both primary\n"
|
||||
.string "and secondary judging.\p"
|
||||
.string "I hope that {STR_VAR_1} will retrain this\n"
|
||||
.string "{STR_VAR_2} and erase the shame of\l"
|
||||
.string "this undisputed last-place finish.$"
|
||||
|
||||
gTVContestLiveUpdatesText26:: @ 0828A6CF
|
||||
ContestLiveUpdates_Text_NotExcitingEnough:: @ 0828A6CF
|
||||
.string "It failed to take advantage of\n"
|
||||
.string "the audience's excitement and make\l"
|
||||
.string "an appropriate appeal.\p"
|
||||
|
|
@ -2594,7 +2594,7 @@ gTVContestLiveUpdatesText26:: @ 0828A6CF
|
|||
.string "a feel for the audience and whip their\l"
|
||||
.string "excitement to a fever pitch next time.$"
|
||||
|
||||
gTVContestLiveUpdatesText27:: @ 0828A797
|
||||
ContestLiveUpdates_Text_LostAfterWinningRound1:: @ 0828A797
|
||||
.string "While finishing first in the primary\n"
|
||||
.string "judging, its appeals in the secondary\l"
|
||||
.string "judging failed to click.\p"
|
||||
|
|
@ -2603,14 +2603,14 @@ gTVContestLiveUpdatesText27:: @ 0828A797
|
|||
.string "I'm sure {STR_VAR_1} is studying how to\n"
|
||||
.string "make more effective appeals now.$"
|
||||
|
||||
gTVContestLiveUpdatesText28:: @ 0828A86D
|
||||
ContestLiveUpdates_Text_NeverExciting:: @ 0828A86D
|
||||
.string "The audience never got excited by its\n"
|
||||
.string "appeals during the secondary judging.\p"
|
||||
.string "We hope it will stop worrying about\n"
|
||||
.string "other POKéMON and learn to pitch\l"
|
||||
.string "its appeals to the audience more.$"
|
||||
|
||||
gTVContestLiveUpdatesText29:: @ 0828A920
|
||||
ContestLiveUpdates_Text_LostBySmallMargin:: @ 0828A920
|
||||
.string "It lost to {STR_VAR_1}'s {STR_VAR_2}\n"
|
||||
.string "by only a small margin.\p"
|
||||
.string "It must be heartbreaking to come\n"
|
||||
|
|
@ -2618,7 +2618,7 @@ gTVContestLiveUpdatesText29:: @ 0828A920
|
|||
.string "I wouldn't be surprised if {STR_VAR_3}\n"
|
||||
.string "were weeping over this outcome.$"
|
||||
|
||||
gTVContestLiveUpdatesText30:: @ 0828A9CC
|
||||
ContestLiveUpdates_Text_RepeatedAppeals:: @ 0828A9CC
|
||||
.string "It disappointed the JUDGE by\n"
|
||||
.string "repeating the same appeals.\p"
|
||||
.string "It's an unforgivable error in any\n"
|
||||
|
|
@ -2626,14 +2626,14 @@ gTVContestLiveUpdatesText30:: @ 0828A9CC
|
|||
.string "{STR_VAR_1} should feel guilty for\n"
|
||||
.string "this sorry showing.$"
|
||||
|
||||
gTVContestLiveUpdatesText31:: @ 0828AA74
|
||||
ContestLiveUpdates_Text_ValiantEffortButLost:: @ 0828AA74
|
||||
.string "{STR_VAR_1} turned in a valiant effort,\n"
|
||||
.string "but…\p"
|
||||
.string "It was all for naught, finishing last.\p"
|
||||
.string "{STR_VAR_1} should learn from this loss\n"
|
||||
.string "and put the knowledge to good use.$"
|
||||
|
||||
gTVContestLiveUpdatesText32:: @ 0828AB01
|
||||
ContestLiveUpdates_Text_Outro:: @ 0828AB01
|
||||
.string "I'd like to end this program with our\n"
|
||||
.string "usual farewell to the winners.\p"
|
||||
.string "This time, it's {STR_VAR_1} and\n"
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 873 B After Width: | Height: | Size: 873 B |
|
|
@ -1,9 +1,9 @@
|
|||
#ifndef GUARD_CONSTANTS_CONTEST_H
|
||||
#define GUARD_CONSTANTS_CONTEST_H
|
||||
|
||||
#define CONTESTANT_COUNT 4
|
||||
#define APPLAUSE_METER_SIZE 5
|
||||
#define CONTEST_TURN_COUNT 5
|
||||
#define CONTEST_NUM_APPEALS 5
|
||||
#define CONTEST_LAST_APPEAL (CONTEST_NUM_APPEALS - 1)
|
||||
|
||||
#define LINK_CONTEST_FLAG_IS_LINK (1 << 0)
|
||||
#define LINK_CONTEST_FLAG_IS_WIRELESS (1 << 1)
|
||||
|
|
@ -22,13 +22,6 @@
|
|||
#define CONTEST_TYPE_NPC_MASTER (CONTEST_RANK_MASTER + 1)
|
||||
#define CONTEST_TYPE_LINK (CONTEST_RANK_LINK + 1)
|
||||
|
||||
#define CONTEST_CATEGORY_COOL 0
|
||||
#define CONTEST_CATEGORY_BEAUTY 1
|
||||
#define CONTEST_CATEGORY_CUTE 2
|
||||
#define CONTEST_CATEGORY_SMART 3
|
||||
#define CONTEST_CATEGORY_TOUGH 4
|
||||
#define CONTEST_CATEGORIES_COUNT 5
|
||||
|
||||
#define CONTEST_WINNER_ARTIST 0 // Winner shown by the artist, painting not necessarily saved
|
||||
#define CONTEST_WINNER_HALL_1 1
|
||||
#define CONTEST_WINNER_HALL_2 2
|
||||
|
|
@ -52,4 +45,124 @@
|
|||
#define CANT_ENTER_CONTEST_EGG 3
|
||||
#define CANT_ENTER_CONTEST_FAINTED 4
|
||||
|
||||
#define CONTEST_AI_CHECK_BAD_MOVE (1 << 0)
|
||||
#define CONTEST_AI_CHECK_COMBO (1 << 1)
|
||||
#define CONTEST_AI_CHECK_BORING (1 << 2)
|
||||
#define CONTEST_AI_CHECK_EXCITEMENT (1 << 3)
|
||||
#define CONTEST_AI_CHECK_ORDER (1 << 4)
|
||||
#define CONTEST_AI_CHECK_GOOD_MOVE (1 << 5)
|
||||
#define CONTEST_AI_ERRATIC (1 << 6)
|
||||
|
||||
#define CONTEST_EFFECT_HIGHLY_APPEALING 0
|
||||
#define CONTEST_EFFECT_USER_MORE_EASILY_STARTLED 1
|
||||
#define CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES 2
|
||||
#define CONTEST_EFFECT_REPETITION_NOT_BORING 3
|
||||
#define CONTEST_EFFECT_AVOID_STARTLE_ONCE 4
|
||||
#define CONTEST_EFFECT_AVOID_STARTLE 5
|
||||
#define CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY 6
|
||||
#define CONTEST_EFFECT_USER_LESS_EASILY_STARTLED 7
|
||||
#define CONTEST_EFFECT_STARTLE_FRONT_MON 8
|
||||
#define CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS 9
|
||||
#define CONTEST_EFFECT_STARTLE_PREV_MON 10
|
||||
#define CONTEST_EFFECT_STARTLE_PREV_MONS 11
|
||||
#define CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON 12
|
||||
#define CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS 13
|
||||
#define CONTEST_EFFECT_STARTLE_PREV_MON_2 14
|
||||
#define CONTEST_EFFECT_STARTLE_PREV_MONS_2 15
|
||||
#define CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION 16
|
||||
#define CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION 17
|
||||
#define CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN 18
|
||||
#define CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL 19
|
||||
#define CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL 20
|
||||
#define CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL 21
|
||||
#define CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL 22
|
||||
#define CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL 23
|
||||
#define CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL 24
|
||||
#define CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS 25
|
||||
#define CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS 26
|
||||
#define CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS 27
|
||||
#define CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION 28
|
||||
#define CONTEST_EFFECT_BETTER_IF_FIRST 29
|
||||
#define CONTEST_EFFECT_BETTER_IF_LAST 30
|
||||
#define CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES 31
|
||||
#define CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE 32
|
||||
#define CONTEST_EFFECT_BETTER_WHEN_LATER 33
|
||||
#define CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING 34
|
||||
#define CONTEST_EFFECT_BETTER_IF_SAME_TYPE 35
|
||||
#define CONTEST_EFFECT_BETTER_IF_DIFF_TYPE 36
|
||||
#define CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL 37
|
||||
#define CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS 38
|
||||
#define CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION 39
|
||||
#define CONTEST_EFFECT_NEXT_APPEAL_EARLIER 40
|
||||
#define CONTEST_EFFECT_NEXT_APPEAL_LATER 41
|
||||
#define CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER 42
|
||||
#define CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER 43
|
||||
#define CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST 44
|
||||
#define CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS 45
|
||||
#define CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED 46
|
||||
#define CONTEST_EFFECT_DONT_EXCITE_AUDIENCE 47
|
||||
|
||||
#define COMBO_STARTER_RAIN_DANCE 1
|
||||
#define COMBO_STARTER_RAGE 2
|
||||
#define COMBO_STARTER_FOCUS_ENERGY 3
|
||||
#define COMBO_STARTER_HYPNOSIS 4
|
||||
#define COMBO_STARTER_ENDURE 5
|
||||
#define COMBO_STARTER_HORN_ATTACK 6
|
||||
#define COMBO_STARTER_SWORDS_DANCE 7
|
||||
#define COMBO_STARTER_STOCKPILE 8
|
||||
#define COMBO_STARTER_SUNNY_DAY 9
|
||||
#define COMBO_STARTER_REST 10
|
||||
#define COMBO_STARTER_VICE_GRIP 11
|
||||
#define COMBO_STARTER_DEFENSE_CURL 12
|
||||
#define COMBO_STARTER_CHARGE 13
|
||||
#define COMBO_STARTER_ROCK_THROW 14
|
||||
#define COMBO_STARTER_YAWN 15
|
||||
#define COMBO_STARTER_SCARY_FACE 16
|
||||
#define COMBO_STARTER_POWDER_SNOW 17
|
||||
#define COMBO_STARTER_LOCK_ON 18
|
||||
#define COMBO_STARTER_SOFT_BOILED 19
|
||||
#define COMBO_STARTER_MEAN_LOOK 20
|
||||
#define COMBO_STARTER_SCRATCH 21
|
||||
#define COMBO_STARTER_GROWTH 22
|
||||
#define COMBO_STARTER_HAIL 23
|
||||
#define COMBO_STARTER_SANDSTORM 24
|
||||
#define COMBO_STARTER_BELLY_DRUM 25
|
||||
#define COMBO_STARTER_MIND_READER 26
|
||||
#define COMBO_STARTER_DRAGON_BREATH 27
|
||||
#define COMBO_STARTER_DRAGON_RAGE 28
|
||||
#define COMBO_STARTER_DRAGON_DANCE 29
|
||||
#define COMBO_STARTER_SURF 30
|
||||
#define COMBO_STARTER_DIVE 31
|
||||
#define COMBO_STARTER_STRING_SHOT 32
|
||||
#define COMBO_STARTER_LEER 33
|
||||
#define COMBO_STARTER_TAUNT 34
|
||||
#define COMBO_STARTER_CHARM 35
|
||||
#define COMBO_STARTER_HARDEN 36
|
||||
#define COMBO_STARTER_SING 37
|
||||
#define COMBO_STARTER_EARTHQUAKE 38
|
||||
#define COMBO_STARTER_DOUBLE_TEAM 39
|
||||
#define COMBO_STARTER_CURSE 40
|
||||
#define COMBO_STARTER_SWEET_SCENT 41
|
||||
#define COMBO_STARTER_SLUDGE 42
|
||||
#define COMBO_STARTER_SLUDGE_BOMB 43
|
||||
#define COMBO_STARTER_THUNDER_PUNCH 44
|
||||
#define COMBO_STARTER_FIRE_PUNCH 45
|
||||
#define COMBO_STARTER_ICE_PUNCH 46
|
||||
#define COMBO_STARTER_PECK 47
|
||||
#define COMBO_STARTER_METAL_SOUND 48
|
||||
#define COMBO_STARTER_MUD_SPORT 49
|
||||
#define COMBO_STARTER_WATER_SPORT 50
|
||||
#define COMBO_STARTER_BONE_CLUB 51
|
||||
#define COMBO_STARTER_BONEMERANG 52
|
||||
#define COMBO_STARTER_BONE_RUSH 53
|
||||
#define COMBO_STARTER_SAND_ATTACK 54
|
||||
#define COMBO_STARTER_MUD_SLAP 55
|
||||
#define COMBO_STARTER_FAKE_OUT 56
|
||||
#define COMBO_STARTER_PSYCHIC 57
|
||||
#define COMBO_STARTER_KINESIS 58
|
||||
#define COMBO_STARTER_CONFUSION 59
|
||||
#define COMBO_STARTER_POUND 60
|
||||
#define COMBO_STARTER_SMOG 61
|
||||
#define COMBO_STARTER_CALM_MIND 62
|
||||
|
||||
#endif // GUARD_CONSTANTS_CONTEST_H
|
||||
|
|
|
|||
|
|
@ -60,6 +60,14 @@
|
|||
#define MAX_MON_MOVES 4
|
||||
#define NUM_STATS 6
|
||||
|
||||
#define CONTESTANT_COUNT 4
|
||||
#define CONTEST_CATEGORY_COOL 0
|
||||
#define CONTEST_CATEGORY_BEAUTY 1
|
||||
#define CONTEST_CATEGORY_CUTE 2
|
||||
#define CONTEST_CATEGORY_SMART 3
|
||||
#define CONTEST_CATEGORY_TOUGH 4
|
||||
#define CONTEST_CATEGORIES_COUNT 5
|
||||
|
||||
// party sizes
|
||||
#define PARTY_SIZE 6
|
||||
#define MULTI_PARTY_SIZE PARTY_SIZE / 2
|
||||
|
|
|
|||
|
|
@ -133,5 +133,59 @@
|
|||
|
||||
#define NUM_SECRET_BASE_FLAGS 32 // by definition, bitfield of 2 u16s
|
||||
|
||||
// TV Show states for Pokemon Contest Live Updates
|
||||
#define CONTESTLIVE_STATE_INTRO 0
|
||||
#define CONTESTLIVE_STATE_WON_BOTH_ROUNDS 1
|
||||
#define CONTESTLIVE_STATE_BETTER_ROUND2 2
|
||||
#define CONTESTLIVE_STATE_EQUAL_ROUNDS 3
|
||||
#define CONTESTLIVE_STATE_BETTER_ROUND1 4
|
||||
#define CONTESTLIVE_STATE_GOT_NERVOUS 5
|
||||
#define CONTESTLIVE_STATE_STARTLED_OTHER 6
|
||||
#define CONTESTLIVE_STATE_USED_COMBO 7
|
||||
#define CONTESTLIVE_STATE_EXCITING_APPEAL 8
|
||||
#define CONTESTLIVE_STATE_COOL 9
|
||||
#define CONTESTLIVE_STATE_BEAUTIFUL 10
|
||||
#define CONTESTLIVE_STATE_CUTE 11
|
||||
#define CONTESTLIVE_STATE_SMART 12
|
||||
#define CONTESTLIVE_STATE_TOUGH 13
|
||||
#define CONTESTLIVE_STATE_VERY_EXCITING_APPEAL 14
|
||||
#define CONTESTLIVE_STATE_VERY_COOL 15
|
||||
#define CONTESTLIVE_STATE_VERY_BEAUTIFUL 16
|
||||
#define CONTESTLIVE_STATE_VERY_CUTE 17
|
||||
#define CONTESTLIVE_STATE_VERY_SMART 18
|
||||
#define CONTESTLIVE_STATE_VERY_TOUGH 19
|
||||
#define CONTESTLIVE_STATE_TOOK_BREAK 20
|
||||
#define CONTESTLIVE_STATE_GOT_STARTLED 21
|
||||
#define CONTESTLIVE_STATE_USED_MOVE 22
|
||||
#define CONTESTLIVE_STATE_TALK_ABOUT_LOSER 23
|
||||
#define CONTESTLIVE_STATE_NO_APPEALS 24
|
||||
#define CONTESTLIVE_STATE_LAST_BOTH 25
|
||||
#define CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH 26
|
||||
#define CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN 27
|
||||
#define CONTESTLIVE_STATE_NO_EXCITING_APPEALS 28
|
||||
#define CONTESTLIVE_STATE_LOST_SMALL_MARGIN 29
|
||||
#define CONTESTLIVE_STATE_REPEATED_APPEALS 30
|
||||
#define CONTESTLIVE_STATE_LOST 31
|
||||
#define CONTESTLIVE_STATE_OUTRO 32
|
||||
|
||||
// Flags used to comment on winner
|
||||
#define CONTESTLIVE_FLAG_EXCITING_APPEAL (1 << 0)
|
||||
#define CONTESTLIVE_FLAG_GOT_NERVOUS (1 << 1)
|
||||
#define CONTESTLIVE_FLAG_MAXED_EXCITEMENT (1 << 2)
|
||||
#define CONTESTLIVE_FLAG_USED_COMBO (1 << 3)
|
||||
#define CONTESTLIVE_FLAG_STARTLED_OTHER (1 << 4)
|
||||
#define CONTESTLIVE_FLAG_SKIPPED_TURN (1 << 5)
|
||||
#define CONTESTLIVE_FLAG_GOT_STARTLED (1 << 6)
|
||||
#define CONTESTLIVE_FLAG_MADE_APPEAL (1 << 7)
|
||||
|
||||
// Flags used to comment on loser
|
||||
#define CONTESTLIVE_FLAG_LOST (1 << 0)
|
||||
#define CONTESTLIVE_FLAG_REPEATED_MOVE (1 << 1)
|
||||
#define CONTESTLIVE_FLAG_LOST_SMALL_MARGIN (1 << 2)
|
||||
#define CONTESTLIVE_FLAG_NO_EXCITEMENT (1 << 3)
|
||||
#define CONTESTLIVE_FLAG_BLEW_LEAD (1 << 4)
|
||||
#define CONTESTLIVE_FLAG_MISSED_EXCITEMENT (1 << 5)
|
||||
#define CONTESTLIVE_FLAG_LAST_BOTH_ROUNDS (1 << 6)
|
||||
#define CONTESTLIVE_FLAG_NO_APPEALS (1 << 7)
|
||||
|
||||
#endif //GUARD_CONSTANTS_TV_H
|
||||
|
|
|
|||
|
|
@ -4,135 +4,6 @@
|
|||
#include "palette.h"
|
||||
#include "constants/contest.h"
|
||||
|
||||
enum
|
||||
{
|
||||
CONTEST_DEBUG_MODE_OFF,
|
||||
// Prints the totalPoints value for each contestant.
|
||||
CONTEST_DEBUG_MODE_PRINT_POINT_TOTAL,
|
||||
// Prints the ContestResourcesField1C::unk_C value as a bitstring for each contestant.
|
||||
CONTEST_DEBUG_MODE_PRINT_UNK_C,
|
||||
// Prints the ContestResourcesField1C::unk_D value as a bitstring for each contestant.
|
||||
CONTEST_DEBUG_MODE_PRINT_UNK_D
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
CONTEST_EFFECT_HIGHLY_APPEALING,
|
||||
CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
|
||||
CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
|
||||
CONTEST_EFFECT_REPETITION_NOT_BORING,
|
||||
CONTEST_EFFECT_AVOID_STARTLE_ONCE,
|
||||
CONTEST_EFFECT_AVOID_STARTLE,
|
||||
CONTEST_EFFECT_AVOID_STARTLE_SLIGHTLY,
|
||||
CONTEST_EFFECT_USER_LESS_EASILY_STARTLED,
|
||||
CONTEST_EFFECT_STARTLE_FRONT_MON,
|
||||
CONTEST_EFFECT_SLIGHTLY_STARTLE_PREV_MONS,
|
||||
CONTEST_EFFECT_STARTLE_PREV_MON,
|
||||
CONTEST_EFFECT_STARTLE_PREV_MONS,
|
||||
CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
|
||||
CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
|
||||
CONTEST_EFFECT_STARTLE_PREV_MON_2,
|
||||
CONTEST_EFFECT_STARTLE_PREV_MONS_2,
|
||||
CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
|
||||
CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
|
||||
CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
|
||||
CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
|
||||
CONTEST_EFFECT_STARTLE_MONS_COOL_APPEAL,
|
||||
CONTEST_EFFECT_STARTLE_MONS_BEAUTY_APPEAL,
|
||||
CONTEST_EFFECT_STARTLE_MONS_CUTE_APPEAL,
|
||||
CONTEST_EFFECT_STARTLE_MONS_SMART_APPEAL,
|
||||
CONTEST_EFFECT_STARTLE_MONS_TOUGH_APPEAL,
|
||||
CONTEST_EFFECT_MAKE_FOLLOWING_MON_NERVOUS,
|
||||
CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
|
||||
CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
|
||||
CONTEST_EFFECT_BADLY_STARTLES_MONS_IN_GOOD_CONDITION,
|
||||
CONTEST_EFFECT_BETTER_IF_FIRST,
|
||||
CONTEST_EFFECT_BETTER_IF_LAST,
|
||||
CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
|
||||
CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
|
||||
CONTEST_EFFECT_BETTER_WHEN_LATER,
|
||||
CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING,
|
||||
CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
|
||||
CONTEST_EFFECT_BETTER_IF_DIFF_TYPE,
|
||||
CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
|
||||
CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
|
||||
CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION,
|
||||
CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
|
||||
CONTEST_EFFECT_NEXT_APPEAL_LATER,
|
||||
CONTEST_EFFECT_MAKE_SCRAMBLING_TURN_ORDER_EASIER,
|
||||
CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
|
||||
CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST,
|
||||
CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
|
||||
CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
|
||||
CONTEST_EFFECT_DONT_EXCITE_AUDIENCE
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
COMBO_STARTER_RAIN_DANCE = 1,
|
||||
COMBO_STARTER_RAGE,
|
||||
COMBO_STARTER_FOCUS_ENERGY,
|
||||
COMBO_STARTER_HYPNOSIS,
|
||||
COMBO_STARTER_ENDURE,
|
||||
COMBO_STARTER_HORN_ATTACK,
|
||||
COMBO_STARTER_SWORDS_DANCE,
|
||||
COMBO_STARTER_STOCKPILE,
|
||||
COMBO_STARTER_SUNNY_DAY,
|
||||
COMBO_STARTER_REST,
|
||||
COMBO_STARTER_VICE_GRIP,
|
||||
COMBO_STARTER_DEFENSE_CURL,
|
||||
COMBO_STARTER_CHARGE,
|
||||
COMBO_STARTER_ROCK_THROW,
|
||||
COMBO_STARTER_YAWN,
|
||||
COMBO_STARTER_SCARY_FACE,
|
||||
COMBO_STARTER_POWDER_SNOW,
|
||||
COMBO_STARTER_LOCK_ON,
|
||||
COMBO_STARTER_SOFT_BOILED,
|
||||
COMBO_STARTER_MEAN_LOOK,
|
||||
COMBO_STARTER_SCRATCH,
|
||||
COMBO_STARTER_GROWTH,
|
||||
COMBO_STARTER_HAIL,
|
||||
COMBO_STARTER_SANDSTORM,
|
||||
COMBO_STARTER_BELLY_DRUM,
|
||||
COMBO_STARTER_MIND_READER,
|
||||
COMBO_STARTER_DRAGON_BREATH,
|
||||
COMBO_STARTER_DRAGON_RAGE,
|
||||
COMBO_STARTER_DRAGON_DANCE,
|
||||
COMBO_STARTER_SURF,
|
||||
COMBO_STARTER_DIVE,
|
||||
COMBO_STARTER_STRING_SHOT,
|
||||
COMBO_STARTER_LEER,
|
||||
COMBO_STARTER_TAUNT,
|
||||
COMBO_STARTER_CHARM,
|
||||
COMBO_STARTER_HARDEN,
|
||||
COMBO_STARTER_SING,
|
||||
COMBO_STARTER_EARTHQUAKE,
|
||||
COMBO_STARTER_DOUBLE_TEAM,
|
||||
COMBO_STARTER_CURSE,
|
||||
COMBO_STARTER_SWEET_SCENT,
|
||||
COMBO_STARTER_SLUDGE,
|
||||
COMBO_STARTER_SLUDGE_BOMB,
|
||||
COMBO_STARTER_THUNDER_PUNCH,
|
||||
COMBO_STARTER_FIRE_PUNCH,
|
||||
COMBO_STARTER_ICE_PUNCH,
|
||||
COMBO_STARTER_PECK,
|
||||
COMBO_STARTER_METAL_SOUND,
|
||||
COMBO_STARTER_MUD_SPORT,
|
||||
COMBO_STARTER_WATER_SPORT,
|
||||
COMBO_STARTER_BONE_CLUB,
|
||||
COMBO_STARTER_BONEMERANG,
|
||||
COMBO_STARTER_BONE_RUSH,
|
||||
COMBO_STARTER_SAND_ATTACK,
|
||||
COMBO_STARTER_MUD_SLAP,
|
||||
COMBO_STARTER_FAKE_OUT,
|
||||
COMBO_STARTER_PSYCHIC,
|
||||
COMBO_STARTER_KINESIS,
|
||||
COMBO_STARTER_CONFUSION,
|
||||
COMBO_STARTER_POUND,
|
||||
COMBO_STARTER_SMOG,
|
||||
COMBO_STARTER_CALM_MIND
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
CONTEST_STRING_MORE_CONSCIOUS,
|
||||
|
|
@ -206,29 +77,38 @@ enum {
|
|||
CONTEST_FILTER_ONLY_POSTGAME
|
||||
};
|
||||
|
||||
// Constants for changing in-contest Condition (the stars that appear during appeals)
|
||||
enum {
|
||||
CONDITION_NO_CHANGE,
|
||||
CONDITION_GAIN,
|
||||
CONDITION_LOSE,
|
||||
};
|
||||
|
||||
struct ContestPokemon
|
||||
{
|
||||
/*0x00*/ u16 species;
|
||||
/*0x02*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
|
||||
/*0x0D*/ u8 trainerName[PLAYER_NAME_LENGTH + 1];
|
||||
/*0x15*/ u8 trainerGfxId;
|
||||
/*0x18*/ u32 aiChecks;
|
||||
/*0x1C*/ u8 whichRank:2; // 0x1 0x2
|
||||
u8 aiPool_Cool:1; // 0x4
|
||||
u8 aiPool_Beauty:1; // 0x8
|
||||
u8 aiPool_Cute:1; // 0x10
|
||||
u8 aiPool_Smart:1; // 0x20
|
||||
u8 aiPool_Tough:1; // 0x40
|
||||
/*0x1E*/ u16 moves[MAX_MON_MOVES]; // moves
|
||||
/*0x26*/ u8 cool; // cool
|
||||
/*0x27*/ u8 beauty; // beauty
|
||||
/*0x28*/ u8 cute; // cute
|
||||
/*0x29*/ u8 smart; // smart
|
||||
/*0x2A*/ u8 tough; // tough
|
||||
/*0x2B*/ u8 sheen; // sheen
|
||||
/*0x2C*/ u8 unk2C[12];
|
||||
/*0x38*/ u32 personality; // personality
|
||||
/*0x3C*/ u32 otId; // otId
|
||||
u16 species;
|
||||
u8 nickname[POKEMON_NAME_LENGTH + 1];
|
||||
u8 trainerName[PLAYER_NAME_LENGTH + 1];
|
||||
u8 trainerGfxId;
|
||||
u32 aiChecks;
|
||||
u8 whichRank:2;
|
||||
u8 aiPool_Cool:1;
|
||||
u8 aiPool_Beauty:1;
|
||||
u8 aiPool_Cute:1;
|
||||
u8 aiPool_Smart:1;
|
||||
u8 aiPool_Tough:1;
|
||||
u16 moves[MAX_MON_MOVES];
|
||||
u8 cool;
|
||||
u8 beauty;
|
||||
u8 cute;
|
||||
u8 smart;
|
||||
u8 tough;
|
||||
u8 sheen;
|
||||
u8 highestRank;
|
||||
bool8 gameCleared;
|
||||
u8 unused[10];
|
||||
u32 personality;
|
||||
u32 otId;
|
||||
};
|
||||
|
||||
struct Shared1A004
|
||||
|
|
@ -239,101 +119,101 @@ struct Shared1A004
|
|||
u8 savedJunk[0x800];
|
||||
};
|
||||
|
||||
struct ContestStruct_field_18
|
||||
struct ContestMoveAnimData
|
||||
{
|
||||
u16 species;
|
||||
u16 unk2;
|
||||
u8 unk4_0:1;
|
||||
u8 unk5;
|
||||
u32 unk8;
|
||||
u32 unkC;
|
||||
u32 unk10;
|
||||
u16 targetSpecies;
|
||||
bool8 hasTargetAnim:1;
|
||||
u8 contestant;
|
||||
u32 personality;
|
||||
u32 otId;
|
||||
u32 targetPersonality;
|
||||
};
|
||||
|
||||
struct Contest
|
||||
{
|
||||
/*0x0*/ u8 playerMoveChoice;
|
||||
/*0x1*/ u8 turnNumber;
|
||||
/*0x2*/ u8 unused2[CONTESTANT_COUNT];
|
||||
/*0x6*/ u16 unk1920A_0:1; // Task active flags?
|
||||
u16 unk1920A_1:1;
|
||||
u16 unk1920A_2:1;
|
||||
u16 unk1920A_3:1;
|
||||
u16 unk1920A_4:1;
|
||||
u16 isShowingApplauseMeter:1;
|
||||
u16 applauseMeterIsMoving:1;
|
||||
u16 unk1920A_7:1;
|
||||
/*0x7*/ u16 unk1920B_0:1;
|
||||
u16 unk1920B_1:1;
|
||||
u16 unk1920B_2:1;
|
||||
/*0x8*/ u8 mainTaskId;
|
||||
/*0x9*/ u8 unk1920D[4];
|
||||
/*0xD*/ u8 unk19211;
|
||||
/*0xE*/ u8 unk19212;
|
||||
/*0xF*/ u8 filler19213;
|
||||
/*0x10*/ u8 unk19214;
|
||||
/*0x11*/ u8 unk19215;
|
||||
/*0x12*/ u8 unk19216; // sprite ID
|
||||
/*0x13*/ s8 applauseLevel;
|
||||
/*0x19218*/ u8 prevTurnOrder[CONTESTANT_COUNT];
|
||||
/*0x1921C*/ u32 unk1921C; // saved RNG value?
|
||||
u16 moveHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT];
|
||||
u8 excitementHistory[CONTEST_TURN_COUNT][CONTESTANT_COUNT];
|
||||
u8 playerMoveChoice;
|
||||
u8 appealNumber;
|
||||
u8 unk[CONTESTANT_COUNT]; // never read
|
||||
bool16 unused1:1;
|
||||
bool16 unused2:1;
|
||||
bool16 unused3:1;
|
||||
bool16 unused4:1;
|
||||
bool16 waitForJudgeSpeechBubble:1;
|
||||
bool16 isShowingApplauseMeter:1;
|
||||
bool16 applauseMeterIsMoving:1;
|
||||
bool16 animatingAudience:1;
|
||||
bool16 waitForAudienceBlend:1;
|
||||
bool16 sliderHeartsAnimating:1; // When the slider heart is appearing/disappearing
|
||||
bool16 waitForLink:1;
|
||||
u8 mainTaskId;
|
||||
u8 filler1[4];
|
||||
u8 judgeAttentionTaskId;
|
||||
u8 blendTaskId;
|
||||
u8 filler2;
|
||||
u8 turnNumber;
|
||||
u8 currentContestant;
|
||||
u8 judgeSpeechBubbleSpriteId;
|
||||
s8 applauseLevel;
|
||||
u8 prevTurnOrder[CONTESTANT_COUNT];
|
||||
u32 unusedRng;
|
||||
u16 moveHistory[CONTEST_NUM_APPEALS][CONTESTANT_COUNT];
|
||||
u8 excitementHistory[CONTEST_NUM_APPEALS][CONTESTANT_COUNT];
|
||||
u8 applauseMeterSpriteId;
|
||||
/*0x1925D*/ u8 contestSetupState;
|
||||
/*0x1925E*/ u8 unk1925E;
|
||||
u8 contestSetupState;
|
||||
u8 moveAnimTurnCount;
|
||||
};
|
||||
|
||||
struct ContestantStatus
|
||||
{
|
||||
/*0x00*/ s16 appeal1; // move appeal?
|
||||
/*0x02*/ s16 appeal2; // final appeal after end of turn, maybe?
|
||||
/*0x04*/ s16 pointTotal;
|
||||
/*0x06*/ u16 currMove;
|
||||
/*0x08*/ u16 prevMove;
|
||||
/*0x0A*/ u8 moveCategory;
|
||||
/*0x0B*/ u8 ranking:2;
|
||||
u8 unkB_2:2;
|
||||
s16 baseAppeal;
|
||||
s16 appeal;
|
||||
s16 pointTotal;
|
||||
u16 currMove;
|
||||
u16 prevMove;
|
||||
u8 moveCategory;
|
||||
u8 ranking:2;
|
||||
u8 unused1:2;
|
||||
u8 moveRepeatCount:3;
|
||||
u8 noMoreTurns:1; // used a one-time move?
|
||||
/*0x0C*/ u8 nervous:1;
|
||||
bool8 noMoreTurns:1; // used a one-time move?
|
||||
bool8 nervous:1;
|
||||
u8 numTurnsSkipped:2;
|
||||
/*0x0D*/ s8 condition;
|
||||
/*0x0E*/ u8 jam;
|
||||
/*0x0F*/ u8 jamReduction;
|
||||
s8 condition;
|
||||
u8 jam;
|
||||
u8 jamReduction;
|
||||
|
||||
// Flags set by move effect
|
||||
/*0x10*/ u8 resistant:1;
|
||||
u8 immune:1;
|
||||
u8 moreEasilyStartled:1;
|
||||
u8 usedRepeatableMove:1;
|
||||
bool8 resistant:1;
|
||||
bool8 immune:1;
|
||||
bool8 moreEasilyStartled:1;
|
||||
bool8 usedRepeatableMove:1;
|
||||
u8 conditionMod:2; // 1: just raised condition; 2: appeal greatly improved by condition
|
||||
u8 turnOrderMod:2; // 1: defined; 2: random
|
||||
/*0x11*/ u8 turnOrderModAction:2; // 1: made first; 2: made last; 3: made random
|
||||
u8 turnSkipped:1;
|
||||
u8 exploded:1;
|
||||
u8 overrideCategoryExcitementMod:1;
|
||||
u8 appealTripleCondition:1;
|
||||
u8 turnOrderModAction:2; // 1: made first; 2: made last; 3: made random
|
||||
bool8 turnSkipped:1;
|
||||
bool8 exploded:1;
|
||||
bool8 overrideCategoryExcitementMod:1;
|
||||
bool8 appealTripleCondition:1;
|
||||
|
||||
/*0x12*/ u8 jamSafetyCount;
|
||||
/*0x13*/ u8 effectStringId; // status action?
|
||||
/*0x14*/ u8 effectStringId2;
|
||||
/*0x15*/ u8 disappointedRepeat:1;
|
||||
u8 unk15_1:1;
|
||||
u8 unk15_2:1;
|
||||
u8 unk15_3:1;
|
||||
u8 hasJudgesAttention:1;
|
||||
u8 judgesAttentionWasRemoved:1;
|
||||
u8 unk15_6:1;
|
||||
/*0x16*/ u8 unk16;
|
||||
/*0x17*/ u8 unk17;
|
||||
/*0x18*/ u8 unk18;
|
||||
/*0x19*/ u8 nextTurnOrder; // turn position
|
||||
/*0x1A*/ u8 attentionLevel; // How much the Pokemon "stood out"
|
||||
/*0x1B*/ u8 unk1B;
|
||||
u8 jamSafetyCount;
|
||||
u8 effectStringId; // status action?
|
||||
u8 effectStringId2;
|
||||
bool8 repeatedMove:1;
|
||||
bool8 unused2:1;
|
||||
bool8 repeatedPrevMove:1; // never read
|
||||
bool8 unk15_3:1;
|
||||
bool8 hasJudgesAttention:1;
|
||||
bool8 judgesAttentionWasRemoved:1;
|
||||
bool8 usedComboMove:1;
|
||||
bool8 completedCombo;
|
||||
u8 comboAppealBonus;
|
||||
u8 repeatJam;
|
||||
u8 nextTurnOrder; // turn position
|
||||
u8 attentionLevel; // How much the Pokemon "stood out"
|
||||
u8 contestantAnimTarget;
|
||||
};
|
||||
|
||||
struct UnknownContestStruct7
|
||||
struct ContestAppealMoveResults
|
||||
{
|
||||
u8 turnOrder[CONTESTANT_COUNT];
|
||||
s16 jam;
|
||||
|
|
@ -348,9 +228,9 @@ struct ContestAIInfo
|
|||
/*0x00*/ u8 aiState;
|
||||
/*0x02*/ u16 nextMove;
|
||||
/*0x04*/ u8 nextMoveIndex;
|
||||
/*0x05*/ u8 unk5[4];
|
||||
/*0x05*/ u8 moveScores[MAX_MON_MOVES];
|
||||
/*0x09*/ u8 aiAction;
|
||||
/*0x0A*/ u8 fillerA[0x6]; // TODO: don't know what's here
|
||||
/*0x0A*/ u8 filler[6];
|
||||
/*0x10*/ u8 currentAICheck;
|
||||
/*0x14*/ u32 aiChecks;
|
||||
/*0x18*/ s16 scriptResult;
|
||||
|
|
@ -360,85 +240,85 @@ struct ContestAIInfo
|
|||
/*0x41*/ u8 contestantId;
|
||||
};
|
||||
|
||||
struct UnknownContestStruct5
|
||||
struct ContestExcitement
|
||||
{
|
||||
s8 bits_0; // current move excitement?
|
||||
u8 excitementFrozen:1;
|
||||
u8 excitementFreezer:3;
|
||||
s8 unk2;
|
||||
s8 moveExcitement;
|
||||
u8 frozen:1;
|
||||
u8 freezer:3;
|
||||
s8 excitementAppealBonus;
|
||||
};
|
||||
|
||||
struct UnknownContestStruct4
|
||||
struct ContestGraphicsState
|
||||
{
|
||||
u8 unk0; // sprite ID
|
||||
u8 unk1; // sprite ID
|
||||
u8 unk2_0:1;
|
||||
u8 unk2_1:1;
|
||||
u8 unk2_2:1;
|
||||
u8 sliderHeartSpriteId;
|
||||
u8 nextTurnSpriteId;
|
||||
bool8 sliderUpdating:1;
|
||||
bool8 boxBlinking:1;
|
||||
bool8 updatingAppealHearts:1;
|
||||
};
|
||||
|
||||
struct UnknownContestStruct6
|
||||
struct ContestFinalStandings
|
||||
{
|
||||
s32 unk0;
|
||||
s32 unk4;
|
||||
s32 unk8;
|
||||
s32 unkC;
|
||||
s32 totalPoints;
|
||||
s32 round1Points;
|
||||
s32 random;
|
||||
s32 contestant;
|
||||
};
|
||||
|
||||
struct ContestResourcesField1C
|
||||
struct ContestTV
|
||||
{
|
||||
u16 unk0[5];
|
||||
s16 unkA;
|
||||
u8 unkC;
|
||||
u8 unkD;
|
||||
u8 unkE_1:1;
|
||||
u8 unkE_2:1;
|
||||
u16 appeals[CONTEST_NUM_APPEALS];
|
||||
s16 move;
|
||||
u8 winnerFlags;
|
||||
u8 loserFlags;
|
||||
bool8 madeAppeal:1;
|
||||
bool8 madeExcitingAppeal:1;
|
||||
};
|
||||
|
||||
struct ContestResourcesField20
|
||||
struct ContestUnused
|
||||
{
|
||||
u8 filler_00[0x0C];
|
||||
u8 filler[12];
|
||||
};
|
||||
|
||||
struct ContestResources
|
||||
{
|
||||
struct Contest *contest;
|
||||
struct ContestantStatus *status;
|
||||
struct UnknownContestStruct7 *field_8;
|
||||
struct ContestAppealMoveResults *appealResults;
|
||||
struct ContestAIInfo *aiData;
|
||||
struct UnknownContestStruct5 *field_10;
|
||||
struct UnknownContestStruct4 *field_14;
|
||||
struct ContestStruct_field_18 *field_18;
|
||||
struct ContestResourcesField1C * field_1c;
|
||||
struct ContestResourcesField20 * field_20;
|
||||
struct ContestExcitement *excitement;
|
||||
struct ContestGraphicsState *gfxState;
|
||||
struct ContestMoveAnimData *moveAnim;
|
||||
struct ContestTV *tv;
|
||||
struct ContestUnused * unused;
|
||||
u8 * contestBgTilemaps[CONTESTANT_COUNT];
|
||||
void * field_34;
|
||||
void * field_38;
|
||||
void * boxBlinkTiles1;
|
||||
void * boxBlinkTiles2;
|
||||
void * field_3c;
|
||||
};
|
||||
|
||||
#define eContest (*gContestResources->contest)
|
||||
#define eContestantStatus (gContestResources->status)
|
||||
#define eContestResources8 (*gContestResources->field_8)
|
||||
#define eContestAppealResults (*gContestResources->appealResults)
|
||||
#define eContestAI (*gContestResources->aiData)
|
||||
#define eContestResources10 (*gContestResources->field_10)
|
||||
#define eContestResources14 (*gContestResources->field_14)
|
||||
#define eUnzippedContestAudienceGfx (gHeap + 0x18000)
|
||||
#define eUnknownHeap19000 (gHeap + 0x19000)
|
||||
#define eContestExcitement (*gContestResources->excitement)
|
||||
#define eContestGfxState (gContestResources->gfxState)
|
||||
#define eUnzippedContestAudience_Gfx (gHeap + 0x18000)
|
||||
#define eContestAudienceFrame2_Gfx (gHeap + 0x19000)
|
||||
#define eContestDebugMode (gHeap[0x1a000])
|
||||
#define eUnknownHeap1A004 (*(struct Shared1A004 *)(gHeap + 0x1a004))
|
||||
|
||||
extern struct ContestPokemon gContestMons[CONTESTANT_COUNT];
|
||||
extern s16 gContestMonConditions[CONTESTANT_COUNT];
|
||||
extern s16 gContestMonRound1Points[CONTESTANT_COUNT];
|
||||
extern s16 gContestMonTotalPoints[CONTESTANT_COUNT];
|
||||
extern s16 gUnknown_02039F10[CONTESTANT_COUNT];
|
||||
extern s16 gContestMonAppealPointTotals[CONTESTANT_COUNT];
|
||||
extern s16 gContestMonRound2Points[CONTESTANT_COUNT];
|
||||
extern u8 gContestFinalStandings[CONTESTANT_COUNT];
|
||||
extern u8 gContestMonPartyIndex;
|
||||
extern u8 gContestPlayerMonIndex;
|
||||
extern u8 gContestantTurnOrder[CONTESTANT_COUNT];
|
||||
extern u8 gLinkContestFlags;
|
||||
extern u8 gUnknown_02039F2B;
|
||||
extern u8 gContestLinkLeaderIndex;
|
||||
extern u16 gSpecialVar_ContestCategory;
|
||||
extern u16 gSpecialVar_ContestRank;
|
||||
extern u8 gNumLinkContestPlayers;
|
||||
|
|
@ -454,11 +334,11 @@ extern u32 gContestRngValue;
|
|||
void ResetLinkContestBoolean(void);
|
||||
void LoadContestBgAfterMoveAnim(void);
|
||||
void CB2_StartContest(void);
|
||||
void sub_80DA8C8(u8 partyIndex);
|
||||
void sub_80DAB8C(u8 contestType, u8 rank);
|
||||
void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame);
|
||||
void CreateContestMonFromParty(u8 partyIndex);
|
||||
void SetContestants(u8 contestType, u8 rank);
|
||||
void SetLinkAIContestants(u8 contestType, u8 rank, bool32 isPostgame);
|
||||
u8 GetContestEntryEligibility(struct Pokemon *pkmn);
|
||||
void sub_80DB09C(u8 contestCategory);
|
||||
void CalculateRound1Points(u8 contestCategory);
|
||||
bool8 IsSpeciesNotUnown(u16 species);
|
||||
bool8 Contest_IsMonsTurnDisabled(u8 a);
|
||||
void SaveLinkContestResults(void);
|
||||
|
|
@ -468,24 +348,12 @@ void SetContestantEffectStringID2(u8 a, u8 b);
|
|||
void SetStartledString(u8 contestant, u8 jam);
|
||||
void MakeContestantNervous(u8 p);
|
||||
s8 Contest_GetMoveExcitement(u16 move);
|
||||
bool8 sub_80DE1E8(u8 a);
|
||||
bool8 IsContestantAllowedToCombo(u8 contestant);
|
||||
void Contest_PrintTextToBg0WindowAt(u32 windowId, u8 *currChar, s32 x, s32 y, s32 fontId);
|
||||
void ResetContestLinkResults(void);
|
||||
bool8 sub_80DEDA8(u8 a);
|
||||
u8 sub_80DEFA8(u8 a, u8 b);
|
||||
void ClearContestWinnerPicsInContestHall(void);
|
||||
void sub_80DFA08(struct ContestPokemon *mon, s32 language);
|
||||
|
||||
// contest link
|
||||
void sub_81D9DE4(u8 taskId);
|
||||
void sub_80FCF40(u8);
|
||||
void sub_80FCFD0(u8);
|
||||
void sub_80F8714(u8);
|
||||
bool32 sub_80FC670(s16 *);
|
||||
bool32 sub_80FC4F4(void *, u16);
|
||||
bool8 sub_80FC55C(void);
|
||||
bool8 sub_80FC530(u8);
|
||||
u8 sub_80F86E0(u8 *);
|
||||
void sub_80FC9F8(u8 taskId);
|
||||
void StripPlayerAndMonNamesForLinkContest(struct ContestPokemon *mon, s32 language);
|
||||
|
||||
#endif //GUARD_CONTEST_H
|
||||
|
|
|
|||
|
|
@ -1,13 +1,23 @@
|
|||
#ifndef GUARD_CONTEST_LINK_H
|
||||
#define GUARD_CONTEST_LINK_H
|
||||
|
||||
void sub_80FCC88(u8);
|
||||
void sub_80FCC88(u8);
|
||||
void sub_80FCACC(u8);
|
||||
void sub_80FC580(u8);
|
||||
void sub_80FC6BC(u8);
|
||||
void sub_80FC804(u8);
|
||||
void sub_80FCE48(u8);
|
||||
void sub_80FC894(u8);
|
||||
void Task_LinkContest_CommunicateAppealsState(u8);
|
||||
void Task_LinkContest_CommunicateFinalStandings(u8);
|
||||
void Task_LinkContest_Init(u8);
|
||||
void Task_LinkContest_CommunicateMonsRS(u8);
|
||||
void Task_LinkContest_CommunicateRngRS(u8);
|
||||
void Task_LinkContest_CommunicateLeaderIdsRS(u8);
|
||||
void Task_LinkContest_CommunicateCategoryRS(u8);
|
||||
void Task_LinkContest_CommunicateMonIdxs(u8);
|
||||
void Task_LinkContest_StartCommunicationEm(u8);
|
||||
void Task_LinkContest_CommunicateRound1Points(u8);
|
||||
void Task_LinkContest_CommunicateTurnOrder(u8);
|
||||
void Task_LinkContest_FinalizeConnection(u8);
|
||||
void Task_LinkContest_CommunicateMoveSelections(u8);
|
||||
bool32 LinkContest_TryLinkStandby(s16 *);
|
||||
bool32 LinkContest_SendBlock(void *, u16);
|
||||
bool8 LinkContest_GetBlockReceivedFromAllPlayers(void);
|
||||
bool8 LinkContest_GetBlockReceived(u8);
|
||||
u8 LinkContest_GetLeaderIndex(u8 *);
|
||||
|
||||
#endif //GUARD_CONTEST_LINK_H
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ void StartContest(void);
|
|||
void BufferContestantMonSpecies(void);
|
||||
void ShowContestResults(void);
|
||||
void ContestLinkTransfer(u8);
|
||||
void sub_80FC998(u8 taskId);
|
||||
void ShowContestWinnerPainting(void);
|
||||
u16 GetContestRand(void);
|
||||
u8 CountPlayerContestPaintings(void);
|
||||
|
||||
#endif // GUARD_CONTEST_UTIL_H
|
||||
|
|
|
|||
|
|
@ -294,39 +294,39 @@ extern const u8 gTVSafariFanClubText07[];
|
|||
extern const u8 gTVSafariFanClubText08[];
|
||||
extern const u8 gTVSafariFanClubText09[];
|
||||
extern const u8 gTVSafariFanClubText10[];
|
||||
extern const u8 gTVContestLiveUpdatesText00[];
|
||||
extern const u8 gTVContestLiveUpdatesText01[];
|
||||
extern const u8 gTVContestLiveUpdatesText02[];
|
||||
extern const u8 gTVContestLiveUpdatesText03[];
|
||||
extern const u8 gTVContestLiveUpdatesText04[];
|
||||
extern const u8 gTVContestLiveUpdatesText05[];
|
||||
extern const u8 gTVContestLiveUpdatesText06[];
|
||||
extern const u8 gTVContestLiveUpdatesText07[];
|
||||
extern const u8 gTVContestLiveUpdatesText08[];
|
||||
extern const u8 gTVContestLiveUpdatesText09[];
|
||||
extern const u8 gTVContestLiveUpdatesText10[];
|
||||
extern const u8 gTVContestLiveUpdatesText11[];
|
||||
extern const u8 gTVContestLiveUpdatesText12[];
|
||||
extern const u8 gTVContestLiveUpdatesText13[];
|
||||
extern const u8 gTVContestLiveUpdatesText14[];
|
||||
extern const u8 gTVContestLiveUpdatesText15[];
|
||||
extern const u8 gTVContestLiveUpdatesText16[];
|
||||
extern const u8 gTVContestLiveUpdatesText17[];
|
||||
extern const u8 gTVContestLiveUpdatesText18[];
|
||||
extern const u8 gTVContestLiveUpdatesText19[];
|
||||
extern const u8 gTVContestLiveUpdatesText20[];
|
||||
extern const u8 gTVContestLiveUpdatesText21[];
|
||||
extern const u8 gTVContestLiveUpdatesText22[];
|
||||
extern const u8 gTVContestLiveUpdatesText23[];
|
||||
extern const u8 gTVContestLiveUpdatesText24[];
|
||||
extern const u8 gTVContestLiveUpdatesText25[];
|
||||
extern const u8 gTVContestLiveUpdatesText26[];
|
||||
extern const u8 gTVContestLiveUpdatesText27[];
|
||||
extern const u8 gTVContestLiveUpdatesText28[];
|
||||
extern const u8 gTVContestLiveUpdatesText29[];
|
||||
extern const u8 gTVContestLiveUpdatesText30[];
|
||||
extern const u8 gTVContestLiveUpdatesText31[];
|
||||
extern const u8 gTVContestLiveUpdatesText32[];
|
||||
extern const u8 ContestLiveUpdates_Text_Intro[];
|
||||
extern const u8 ContestLiveUpdates_Text_WonBothRounds[];
|
||||
extern const u8 ContestLiveUpdates_Text_BetterRound2[];
|
||||
extern const u8 ContestLiveUpdates_Text_EqualRounds[];
|
||||
extern const u8 ContestLiveUpdates_Text_BetterRound1[];
|
||||
extern const u8 ContestLiveUpdates_Text_GotNervous[];
|
||||
extern const u8 ContestLiveUpdates_Text_StartledFoes[];
|
||||
extern const u8 ContestLiveUpdates_Text_UsedCombo[];
|
||||
extern const u8 ContestLiveUpdates_Text_ExcitingAppeal[];
|
||||
extern const u8 ContestLiveUpdates_Text_WasCool[];
|
||||
extern const u8 ContestLiveUpdates_Text_WasBeautiful[];
|
||||
extern const u8 ContestLiveUpdates_Text_WasCute[];
|
||||
extern const u8 ContestLiveUpdates_Text_WasSmart[];
|
||||
extern const u8 ContestLiveUpdates_Text_WasTough[];
|
||||
extern const u8 ContestLiveUpdates_Text_VeryExcitingAppeal[];
|
||||
extern const u8 ContestLiveUpdates_Text_VeryCool[];
|
||||
extern const u8 ContestLiveUpdates_Text_VeryBeautiful[];
|
||||
extern const u8 ContestLiveUpdates_Text_VeryCute[];
|
||||
extern const u8 ContestLiveUpdates_Text_VerySmart[];
|
||||
extern const u8 ContestLiveUpdates_Text_VeryTough[];
|
||||
extern const u8 ContestLiveUpdates_Text_TookBreak[];
|
||||
extern const u8 ContestLiveUpdates_Text_GotStartled[];
|
||||
extern const u8 ContestLiveUpdates_Text_MoveWonderful[];
|
||||
extern const u8 ContestLiveUpdates_Text_TalkAboutAnotherMon[];
|
||||
extern const u8 ContestLiveUpdates_Text_FailedToAppeal[];
|
||||
extern const u8 ContestLiveUpdates_Text_LastInBothRounds[];
|
||||
extern const u8 ContestLiveUpdates_Text_NotExcitingEnough[];
|
||||
extern const u8 ContestLiveUpdates_Text_LostAfterWinningRound1[];
|
||||
extern const u8 ContestLiveUpdates_Text_NeverExciting[];
|
||||
extern const u8 ContestLiveUpdates_Text_LostBySmallMargin[];
|
||||
extern const u8 ContestLiveUpdates_Text_RepeatedAppeals[];
|
||||
extern const u8 ContestLiveUpdates_Text_ValiantEffortButLost[];
|
||||
extern const u8 ContestLiveUpdates_Text_Outro[];
|
||||
extern const u8 gTVPokemonBattleUpdateText00[];
|
||||
extern const u8 gTVPokemonBattleUpdateText01[];
|
||||
extern const u8 gTVPokemonBattleUpdateText02[];
|
||||
|
|
|
|||
|
|
@ -480,7 +480,7 @@ struct SaveBlock2
|
|||
/*0x20C*/ struct BerryPickingResults berryPick;
|
||||
/*0x21C*/ struct RankingHall1P hallRecords1P[HALL_FACILITIES_COUNT][2][3]; // From record mixing.
|
||||
/*0x57C*/ struct RankingHall2P hallRecords2P[2][3]; // From record mixing.
|
||||
/*0x624*/ u16 contestLinkResults[5][4]; // 4 positions for 5 categories.
|
||||
/*0x624*/ u16 contestLinkResults[CONTEST_CATEGORIES_COUNT][CONTESTANT_COUNT];
|
||||
/*0x64C*/ struct BattleFrontier frontier;
|
||||
}; // sizeof=0xF2C
|
||||
|
||||
|
|
@ -489,7 +489,7 @@ extern struct SaveBlock2 *gSaveBlock2Ptr;
|
|||
struct SecretBaseParty
|
||||
{
|
||||
u32 personality[PARTY_SIZE];
|
||||
u16 moves[PARTY_SIZE * 4];
|
||||
u16 moves[PARTY_SIZE * MAX_MON_MOVES];
|
||||
u16 species[PARTY_SIZE];
|
||||
u16 heldItems[PARTY_SIZE];
|
||||
u8 levels[PARTY_SIZE];
|
||||
|
|
|
|||
|
|
@ -124,18 +124,18 @@ typedef union // size = 0x24
|
|||
struct {
|
||||
/*0x00*/ u8 kind;
|
||||
/*0x01*/ bool8 active;
|
||||
/*0x02*/ u16 winningSpecies;
|
||||
/*0x04*/ u8 winningTrainerName[8];
|
||||
/*0x0C*/ u8 appealFlags2;
|
||||
/*0x0D*/ u8 round1Rank;
|
||||
/*0x0e*/ u8 round2Rank;
|
||||
/*0x0f*/ u8 appealFlags1;
|
||||
/*0x02*/ u16 losingSpecies;
|
||||
/*0x04*/ u8 losingTrainerName[8];
|
||||
/*0x0C*/ u8 loserAppealFlag;
|
||||
/*0x0D*/ u8 round1Placing;
|
||||
/*0x0e*/ u8 round2Placing;
|
||||
/*0x0f*/ u8 winnerAppealFlag;
|
||||
/*0x10*/ u16 move;
|
||||
/*0x12*/ u16 species;
|
||||
/*0x14*/ u8 playerName[8];
|
||||
/*0x12*/ u16 winningSpecies;
|
||||
/*0x14*/ u8 winningTrainerName[8];
|
||||
/*0x1C*/ u8 category;
|
||||
/*0x1D*/ u8 language;
|
||||
/*0x1E*/ u8 winningTrainerLanguage;
|
||||
/*0x1D*/ u8 winningTrainerLanguage;
|
||||
/*0x1E*/ u8 losingTrainerLanguage;
|
||||
} contestLiveUpdates;
|
||||
|
||||
// TVSHOW_3_CHEERS_FOR_POKEBLOCKS
|
||||
|
|
|
|||
|
|
@ -4786,10 +4786,10 @@ extern const u32 gOldContestGfx[];
|
|||
extern const u32 gOldContestPalette[];
|
||||
extern const u32 gUnknown_08C17170[];
|
||||
extern const u32 gUnknown_08C17980[];
|
||||
extern const u32 gTiles_8C19450[];
|
||||
extern const u32 gContestSliderHeart_Gfx[];
|
||||
extern const u32 gContestNextTurnGfx[];
|
||||
extern const u16 gContestPal[];
|
||||
extern const u32 gUnknown_08C19168[];
|
||||
extern const u32 gContestFaces_Gfx[];
|
||||
extern const u32 gContestApplauseGfx[];
|
||||
extern const u32 gContestJudgeGfx[];
|
||||
extern const u32 gContestJudgeSymbolsGfx[];
|
||||
|
|
|
|||
|
|
@ -49,11 +49,11 @@
|
|||
(((status) & LINK_STAT_ERRORS) >> LINK_STAT_ERRORS_SHIFT)
|
||||
|
||||
#define LINKCMD_SEND_LINK_TYPE 0x2222
|
||||
#define LINKCMD_0x2FFE 0x2FFE
|
||||
#define LINKCMD_READY_EXIT_STANDBY 0x2FFE
|
||||
#define LINKCMD_SEND_HELD_KEYS 0x4444
|
||||
#define LINKCMD_0x5555 0x5555
|
||||
#define LINKCMD_0x5566 0x5566
|
||||
#define LINKCMD_0x5FFF 0x5FFF
|
||||
#define LINKCMD_READY_CLOSE_LINK 0x5FFF
|
||||
#define LINKCMD_0x6666 0x6666
|
||||
#define LINKCMD_0x7777 0x7777
|
||||
#define LINKCMD_CONT_BLOCK 0x8888
|
||||
|
|
@ -64,7 +64,7 @@
|
|||
#define LINKCMD_INIT_BLOCK 0xBBBB
|
||||
#define LINKCMD_READY_CANCEL_TRADE 0xBBCC
|
||||
#define LINKCMD_SEND_HELD_KEYS_2 0xCAFE
|
||||
#define LINKCMD_0xCCCC 0xCCCC
|
||||
#define LINKCMD_SEND_BLOCK_REQ 0xCCCC
|
||||
#define LINKCMD_START_TRADE 0xCCDD
|
||||
#define LINKCMD_CONFIRM_FINISH_TRADE 0xDCBA
|
||||
#define LINKCMD_SET_MONS_TO_TRADE 0xDDDD
|
||||
|
|
@ -273,11 +273,11 @@ bool32 InUnionRoom(void);
|
|||
void LoadWirelessStatusIndicatorSpriteGfx(void);
|
||||
bool8 IsLinkTaskFinished(void);
|
||||
void CreateWirelessStatusIndicatorSprite(u8, u8);
|
||||
void sub_800ADF8(void);
|
||||
void SetLinkStandbyCallback(void);
|
||||
void SetWirelessCommType1(void);
|
||||
void CheckShouldAdvanceLinkState(void);
|
||||
u8 IsLinkMaster(void);
|
||||
void sub_800AC34(void);
|
||||
void SetCloseLinkCallback(void);
|
||||
bool8 HandleLinkConnection(void);
|
||||
void SetLinkDebugValues(u32 seed, u32 flags);
|
||||
void sub_800A418(void);
|
||||
|
|
@ -305,9 +305,9 @@ extern u16 gLinkHeldKeys;
|
|||
extern u32 gLinkStatus;
|
||||
extern u8 gUnknown_030030E4;
|
||||
extern u8 gUnknown_030030E8;
|
||||
extern u8 gUnknown_030030EC[MAX_LINK_PLAYERS];
|
||||
extern u8 gUnknown_030030F0[MAX_LINK_PLAYERS];
|
||||
extern u16 gUnknown_030030F4;
|
||||
extern bool8 gReadyToExitStandby[MAX_LINK_PLAYERS];
|
||||
extern bool8 gReadyToCloseLink[MAX_LINK_PLAYERS];
|
||||
extern u16 gReadyCloseLinkType;
|
||||
extern u8 gSuppressLinkErrorMessage;
|
||||
extern u8 gWirelessCommType;
|
||||
extern bool8 gSavedLinkPlayerCount;
|
||||
|
|
@ -334,15 +334,15 @@ bool32 LinkDummy_Return2(void);
|
|||
void SetLocalLinkPlayerId(u8);
|
||||
u8 GetSavedPlayerCount(void);
|
||||
void sub_8009FAC(void);
|
||||
bool8 sub_800A4D8(u8 a0);
|
||||
bool8 SendBlockRequest(u8 type);
|
||||
u8 GetLinkPlayerCountAsBitFlags(void);
|
||||
u8 sub_800A0C8(s32, s32);
|
||||
u8 GetSavedLinkPlayerCountAsBitFlags(void);
|
||||
void sub_800AD10(void);
|
||||
void SetCloseLinkCallbackHandleJP(void);
|
||||
void CheckLinkPlayersMatchSaved(void);
|
||||
void StartSendingKeysToLink(void);
|
||||
bool8 DoesLinkPlayerCountMatchSaved(void);
|
||||
void sub_800ABF4(u16 a0);
|
||||
void SetCloseLinkCallbackAndType(u16 type);
|
||||
bool32 IsSendingKeysToLink(void);
|
||||
u32 GetLinkRecvQueueLength(void);
|
||||
|
||||
|
|
|
|||
|
|
@ -8,11 +8,11 @@
|
|||
#define RFU_COMMAND_0x4400 0x4400
|
||||
#define RFU_COMMAND_0x8800 0x8800
|
||||
#define RFU_COMMAND_0x8900 0x8900
|
||||
#define RFU_COMMAND_0xA100 0xA100
|
||||
#define RFU_COMMAND_SEND_BLOCK_REQ 0xA100
|
||||
#define RFU_COMMAND_0x7700 0x7700
|
||||
#define RFU_COMMAND_0x7800 0x7800
|
||||
#define RFU_COMMAND_0x6600 0x6600
|
||||
#define RFU_COMMAND_0x5F00 0x5F00
|
||||
#define RFU_COMMAND_READY_EXIT_STANDBY 0x6600
|
||||
#define RFU_COMMAND_READY_CLOSE_LINK 0x5F00
|
||||
#define RFU_COMMAND_0x2F00 0x2F00
|
||||
#define RFU_COMMAND_0xBE00 0xBE00
|
||||
#define RFU_COMMAND_0xEE00 0xEE00
|
||||
|
|
@ -125,7 +125,7 @@ struct GFRfuManager
|
|||
/* 0x012 */ u16 unk_12;
|
||||
/* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14];
|
||||
/* 0x04c */ u8 unk_4c[14];
|
||||
/* 0x05a */ u8 unk_5a;
|
||||
/* 0x05a */ u8 blockRequestType;
|
||||
/* 0x05b */ u8 unk_5b;
|
||||
/* 0x05c */ bool8 blockReceived[MAX_RFU_PLAYERS];
|
||||
/* 0x061 */ bool8 numBlocksReceived[MAX_RFU_PLAYERS];
|
||||
|
|
@ -134,14 +134,14 @@ struct GFRfuManager
|
|||
/* 0x068 */ u8 filler_68[4];
|
||||
/* 0x06c */ struct RfuBlockSend sendBlock;
|
||||
/* 0x080 */ struct RfuBlockSend recvBlock[MAX_RFU_PLAYERS];
|
||||
/* 0x0e4 */ u8 unk_e4[5];
|
||||
/* 0x0e9 */ u8 unk_e9[5];
|
||||
/* 0x0e4 */ bool8 readyCloseLink[MAX_RFU_PLAYERS];
|
||||
/* 0x0e9 */ bool8 readyExitStandby[MAX_RFU_PLAYERS];
|
||||
/* 0x0ee */ vu8 errorState;
|
||||
/* 0x0ef */ bool8 isShuttingDown;
|
||||
/* 0x0f0 */ u8 linkLossRecoveryState;
|
||||
/* 0x0f1 */ u8 status;
|
||||
/* 0x0f2 */ u16 unk_f2[6];
|
||||
/* 0x0fe */ u16 unk_fe;
|
||||
/* 0x0fe */ u16 resendExitStandbyTimer;
|
||||
/* 0x100 */ u16 unk_100;
|
||||
/* 0x102 */ u8 unk_102;
|
||||
/* 0x103 */ u8 filler_103[0x10A - 0x103];
|
||||
|
|
@ -203,11 +203,11 @@ bool32 Rfu_InitBlockSend(const u8 *src, size_t size);
|
|||
void ClearLinkRfuCallback(void);
|
||||
u8 Rfu_GetLinkPlayerCount(void);
|
||||
u8 Rfu_GetMultiplayerId(void);
|
||||
bool8 sub_8010100(u8 a0);
|
||||
bool8 Rfu_SendBlockRequest(u8 type);
|
||||
bool8 IsLinkRfuTaskFinished(void);
|
||||
bool8 Rfu_IsMaster(void);
|
||||
void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
|
||||
void sub_8010434(void);
|
||||
void Rfu_SetCloseLinkCallback(void);
|
||||
void Rfu_SetLinkStandbyCallback(void);
|
||||
void ResetLinkRfuGFLayer(void);
|
||||
void UpdateWirelessStatusIndicatorSprite(void);
|
||||
void InitRFU(void);
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
#ifndef GUARD_SCRIPTPOKE80F8_H
|
||||
#define GUARD_SCRIPTPOKE80F8_H
|
||||
|
||||
void ShowContestWinner(void);
|
||||
u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8);
|
||||
u8 ScriptGiveEgg(u16);
|
||||
void CreateScriptedWildMon(u16, u8, u16);
|
||||
void ScriptSetMonMoveSlot(u8, u16, u8);
|
||||
|
||||
#endif
|
||||
11
include/script_pokemon_util.h
Normal file
11
include/script_pokemon_util.h
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
#ifndef GUARD_SCRIPT_POKEMON_UTIL
|
||||
#define GUARD_SCRIPT_POKEMON_UTIL
|
||||
|
||||
u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8);
|
||||
u8 ScriptGiveEgg(u16);
|
||||
void CreateScriptedWildMon(u16, u8, u16);
|
||||
void ScriptSetMonMoveSlot(u8, u16, u8);
|
||||
void ReducePlayerPartyToSelectedMons(void);
|
||||
void HealPlayerParty(void);
|
||||
|
||||
#endif // GUARD_SCRIPT_POKEMON_UTIL
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
#ifndef GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H
|
||||
#define GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H
|
||||
|
||||
u16 GetContestRand(void);
|
||||
void ReducePlayerPartyToSelectedMons(void);
|
||||
void HealPlayerParty(void);
|
||||
u8 CountPlayerContestPaintings(void);
|
||||
|
||||
#endif // GUARD_SCRIPT_POKEMON_UTIL_80F87D8_H
|
||||
10
include/tv.h
10
include/tv.h
|
|
@ -59,11 +59,11 @@ void SaveRecordedItemPurchasesForTVShow(void);
|
|||
bool8 ShouldAirFrontierTVShow(void);
|
||||
void sub_80EE8C8(u16 winStreak, u8 facilityAndMode);
|
||||
void BravoTrainerPokemonProfile_BeforeInterview2(u8 contestStandingPlace);
|
||||
void ContestLiveUpdates_BeforeInterview_1(u8 a0);
|
||||
void ContestLiveUpdates_BeforeInterview_2(u8 a0);
|
||||
void ContestLiveUpdates_BeforeInterview_3(u8 a0);
|
||||
void ContestLiveUpdates_BeforeInterview_4(u16 a0);
|
||||
void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1);
|
||||
void ContestLiveUpdates_Init(u8 round1Placing);
|
||||
void ContestLiveUpdates_SetRound2Placing(u8 round2Placing);
|
||||
void ContestLiveUpdates_SetWinnerAppealFlag(u8 flag);
|
||||
void ContestLiveUpdates_SetWinnerMoveUsed(u16 move);
|
||||
void ContestLiveUpdates_SetLoserData(u8 flag, u8 loser);
|
||||
void ResetGabbyAndTy(void);
|
||||
|
||||
#endif //GUARD_TV_H
|
||||
|
|
|
|||
|
|
@ -170,7 +170,7 @@ SECTIONS {
|
|||
src/secret_base.o(.text);
|
||||
src/tv.o(.text);
|
||||
src/contest_util.o(.text);
|
||||
src/script_pokemon_util_80F87D8.o(.text);
|
||||
src/script_pokemon_util.o(.text);
|
||||
src/field_poison.o(.text);
|
||||
src/pokemon_size_record.o(.text);
|
||||
src/fldeff_misc.o(.text);
|
||||
|
|
@ -545,7 +545,7 @@ SECTIONS {
|
|||
src/secret_base.o(.rodata);
|
||||
src/tv.o(.rodata);
|
||||
src/contest_util.o(.rodata);
|
||||
src/script_pokemon_util_80F87D8.o(.rodata);
|
||||
src/script_pokemon_util.o(.rodata);
|
||||
src/pokemon_size_record.o(.rodata)
|
||||
src/fldeff_misc.o(.rodata);
|
||||
src/field_special_scene.o(.rodata);
|
||||
|
|
|
|||
|
|
@ -1849,8 +1849,8 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
|
|||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
gAnimBattlerSpecies[i] = gContestResources->field_18->species;
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
gAnimBattlerSpecies[i] = gContestResources->moveAnim->species;
|
||||
}
|
||||
|
||||
if (!isMoveAnim)
|
||||
|
|
@ -2311,7 +2311,7 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
|
|||
battlerSpriteId = gBattlerSpriteIds[battlerId];
|
||||
|
||||
gBattle_BG1_X = -(gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x) + 0x20;
|
||||
if (IsContest() && IsSpeciesNotUnown(gContestResources->field_18->species))
|
||||
if (IsContest() && IsSpeciesNotUnown(gContestResources->moveAnim->species))
|
||||
gBattle_BG1_X--;
|
||||
|
||||
gBattle_BG1_Y = -(gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y) + 0x20;
|
||||
|
|
@ -2369,7 +2369,7 @@ static void sub_80A46A0(void)
|
|||
struct BattleAnimBgData animBg;
|
||||
u16 *ptr;
|
||||
|
||||
if (IsSpeciesNotUnown(gContestResources->field_18->species))
|
||||
if (IsSpeciesNotUnown(gContestResources->moveAnim->species))
|
||||
{
|
||||
sub_80A6B30(&animBg);
|
||||
ptr = animBg.bgTilemap;
|
||||
|
|
|
|||
|
|
@ -849,7 +849,7 @@ void AnimTask_MetallicShine(u8 taskId)
|
|||
|
||||
if (IsContest())
|
||||
{
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2297,7 +2297,7 @@ void AnimTask_TransformMon(u8 taskId)
|
|||
LoadBgTiles(1, animBg.bgTiles, 0x800, animBg.tilesOffset);
|
||||
if (IsContest())
|
||||
{
|
||||
if (IsSpeciesNotUnown(gContestResources->field_18->species) != IsSpeciesNotUnown(gContestResources->field_18->unk2))
|
||||
if (IsSpeciesNotUnown(gContestResources->moveAnim->species) != IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies))
|
||||
{
|
||||
bgTilemap = (u16 *)animBg.bgTilemap;
|
||||
for (i = 0; i < 8; i++)
|
||||
|
|
@ -2319,7 +2319,7 @@ void AnimTask_TransformMon(u8 taskId)
|
|||
}
|
||||
}
|
||||
|
||||
if (IsSpeciesNotUnown(gContestResources->field_18->unk2))
|
||||
if (IsSpeciesNotUnown(gContestResources->moveAnim->targetSpecies))
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0;
|
||||
else
|
||||
gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF694;
|
||||
|
|
@ -3196,10 +3196,10 @@ void AnimTask_RolePlaySilhouette(u8 taskId)
|
|||
GetAnimBattlerSpriteId(ANIM_ATTACKER);
|
||||
if (IsContest())
|
||||
{
|
||||
isBackPic = 1;
|
||||
personality = gContestResources->field_18->unk10;
|
||||
otId = gContestResources->field_18->unkC;
|
||||
species = gContestResources->field_18->unk2;
|
||||
isBackPic = TRUE;
|
||||
personality = gContestResources->moveAnim->targetPersonality;
|
||||
otId = gContestResources->moveAnim->otId;
|
||||
species = gContestResources->moveAnim->targetSpecies;
|
||||
xOffset = 20;
|
||||
priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
|
||||
}
|
||||
|
|
@ -5031,9 +5031,9 @@ void AnimTask_SnatchOpposingMonMove(u8 taskId)
|
|||
case 1:
|
||||
if (IsContest())
|
||||
{
|
||||
personality = gContestResources->field_18->unk8;
|
||||
otId = gContestResources->field_18->unkC;
|
||||
species = gContestResources->field_18->species;
|
||||
personality = gContestResources->moveAnim->personality;
|
||||
otId = gContestResources->moveAnim->otId;
|
||||
species = gContestResources->moveAnim->species;
|
||||
subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
|
||||
isBackPic = 0;
|
||||
x = -32;
|
||||
|
|
|
|||
|
|
@ -141,10 +141,10 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
|
|||
default:
|
||||
if (IsContest())
|
||||
{
|
||||
if (gContestResources->field_18->unk4_0)
|
||||
species = gContestResources->field_18->unk2;
|
||||
if (gContestResources->moveAnim->hasTargetAnim)
|
||||
species = gContestResources->moveAnim->targetSpecies;
|
||||
else
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -189,10 +189,10 @@ u8 GetBattlerYDelta(u8 battlerId, u16 species)
|
|||
{
|
||||
if (IsContest())
|
||||
{
|
||||
if (gContestResources->field_18->unk4_0)
|
||||
personality = gContestResources->field_18->unk10;
|
||||
if (gContestResources->moveAnim->hasTargetAnim)
|
||||
personality = gContestResources->moveAnim->targetPersonality;
|
||||
else
|
||||
personality = gContestResources->field_18->unk8;
|
||||
personality = gContestResources->moveAnim->personality;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -306,10 +306,10 @@ u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType)
|
|||
{
|
||||
if (IsContest())
|
||||
{
|
||||
if (gContestResources->field_18->unk4_0)
|
||||
species = gContestResources->field_18->unk2;
|
||||
if (gContestResources->moveAnim->hasTargetAnim)
|
||||
species = gContestResources->moveAnim->targetSpecies;
|
||||
else
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1851,7 +1851,7 @@ static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId)
|
|||
{
|
||||
if (IsContest())
|
||||
{
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
return gMonBackPicCoords[species].y_offset;
|
||||
}
|
||||
else
|
||||
|
|
@ -2103,15 +2103,15 @@ s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr)
|
|||
|
||||
if (IsContest())
|
||||
{
|
||||
if (gContestResources->field_18->unk4_0)
|
||||
if (gContestResources->moveAnim->hasTargetAnim)
|
||||
{
|
||||
species = gContestResources->field_18->unk2;
|
||||
personality = gContestResources->field_18->unk10;
|
||||
species = gContestResources->moveAnim->targetSpecies;
|
||||
personality = gContestResources->moveAnim->targetPersonality;
|
||||
}
|
||||
else
|
||||
{
|
||||
species = gContestResources->field_18->species;
|
||||
personality = gContestResources->field_18->unk8;
|
||||
species = gContestResources->moveAnim->species;
|
||||
personality = gContestResources->moveAnim->personality;
|
||||
}
|
||||
if (species == SPECIES_UNOWN)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ void SoundTask_PlayCryHighPitch(u8 taskId)
|
|||
if (IsContest())
|
||||
{
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
else
|
||||
DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task.
|
||||
}
|
||||
|
|
@ -180,7 +180,7 @@ void SoundTask_PlayDoubleCry(u8 taskId)
|
|||
if (IsContest())
|
||||
{
|
||||
if (gBattleAnimArgs[0] == ANIM_ATTACKER)
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
else
|
||||
DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task.
|
||||
}
|
||||
|
|
@ -284,7 +284,7 @@ void SoundTask_PlayCryWithEcho(u8 taskId)
|
|||
pan = BattleAnimAdjustPanning(SOUND_PAN_ATTACKER);
|
||||
|
||||
if (IsContest())
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
else
|
||||
species = gAnimBattlerSpecies[gBattleAnimAttacker];
|
||||
|
||||
|
|
|
|||
|
|
@ -318,7 +318,7 @@ void AnimTask_DrawFallingWhiteLinesOnAttacker(u8 taskId)
|
|||
|
||||
if (IsContest())
|
||||
{
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -440,7 +440,7 @@ static void sub_8116F04(u8 taskId)
|
|||
|
||||
if (IsContest())
|
||||
{
|
||||
sAnimStatsChangeData->species = gContestResources->field_18->species;
|
||||
sAnimStatsChangeData->species = gContestResources->moveAnim->species;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -810,7 +810,7 @@ void sub_8117854(u8 taskId, int unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5,
|
|||
|
||||
if (IsContest())
|
||||
{
|
||||
species = gContestResources->field_18->species;
|
||||
species = gContestResources->moveAnim->species;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -886,9 +886,9 @@ void sub_80587B0(void)
|
|||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (gWirelessCommType == 0)
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
else
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_80586F8;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
#include "international_string_util.h"
|
||||
#include "trainer_pokemon_sprites.h"
|
||||
#include "scanline_effect.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "graphics.h"
|
||||
#include "constants/battle_dome.h"
|
||||
#include "constants/frontier_util.h"
|
||||
|
|
|
|||
|
|
@ -916,14 +916,14 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool8 notTransform
|
|||
if (IsContest())
|
||||
{
|
||||
position = 0;
|
||||
targetSpecies = gContestResources->field_18->unk2;
|
||||
personalityValue = gContestResources->field_18->unk8;
|
||||
otId = gContestResources->field_18->unkC;
|
||||
targetSpecies = gContestResources->moveAnim->targetSpecies;
|
||||
personalityValue = gContestResources->moveAnim->personality;
|
||||
otId = gContestResources->moveAnim->otId;
|
||||
|
||||
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[targetSpecies],
|
||||
gMonSpritesGfxPtr->sprites[0],
|
||||
targetSpecies,
|
||||
gContestResources->field_18->unk10);
|
||||
gContestResources->moveAnim->targetPersonality);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1484,9 +1484,9 @@ static void CB2_PreInitMultiBattle(void)
|
|||
{
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
if (gWirelessCommType)
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
else
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
|
|
@ -2368,7 +2368,7 @@ static void sub_8038F34(void)
|
|||
case 6:
|
||||
if (IsLinkTaskFinished() == TRUE)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
BattlePutTextOnWindow(gText_LinkStandby3, 0);
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
|
|
@ -2382,7 +2382,7 @@ static void sub_8038F34(void)
|
|||
break;
|
||||
case 8:
|
||||
if (!gWirelessCommType)
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
break;
|
||||
case 9:
|
||||
|
|
@ -2556,7 +2556,7 @@ static void sub_803939C(void)
|
|||
HandleBattleWindow(0x18, 8, 0x1D, 0xD, WINDOW_CLEAR);
|
||||
if (gMain.field_439_x4)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
BattlePutTextOnWindow(gText_LinkStandby3, 0);
|
||||
}
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
|
|
@ -2566,7 +2566,7 @@ static void sub_803939C(void)
|
|||
if (--gBattleCommunication[1] == 0)
|
||||
{
|
||||
if (gMain.field_439_x4 && !gWirelessCommType)
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
}
|
||||
break;
|
||||
|
|
@ -2605,7 +2605,7 @@ static void sub_803939C(void)
|
|||
{
|
||||
if (gMain.field_439_x4)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
BattlePutTextOnWindow(gText_LinkStandby3, 0);
|
||||
}
|
||||
gBattleCommunication[MULTIUSE_STATE]++;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
#include "fieldmap.h"
|
||||
#include "random.h"
|
||||
#include "starter_choose.h"
|
||||
#include "script_pokemon_80F8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "palette.h"
|
||||
#include "window.h"
|
||||
#include "event_object_movement.h"
|
||||
|
|
|
|||
|
|
@ -2627,7 +2627,7 @@ static void LoadLinkMultiOpponentsData(void)
|
|||
}
|
||||
break;
|
||||
case 4:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gSpecialVar_Result = 5;
|
||||
break;
|
||||
case 5:
|
||||
|
|
@ -2644,7 +2644,7 @@ static void LoadLinkMultiOpponentsData(void)
|
|||
static void sub_8164DCC(void)
|
||||
{
|
||||
if (gWirelessCommType != 0)
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
}
|
||||
|
||||
static void SetMultiPartnerGfx(void)
|
||||
|
|
|
|||
|
|
@ -1230,7 +1230,7 @@ static void sub_8080018(void)
|
|||
sBerryBlenderData->field_114 = 0;
|
||||
Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
|
||||
memcpy(gBlockSendBuffer, &sBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry));
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
sBerryBlenderData->framesToWait = 0;
|
||||
break;
|
||||
case 9:
|
||||
|
|
@ -1238,7 +1238,7 @@ static void sub_8080018(void)
|
|||
{
|
||||
ResetBlockReceivedFlags();
|
||||
if (GetMultiplayerId() == 0)
|
||||
sub_800A4D8(4);
|
||||
SendBlockRequest(4);
|
||||
sBerryBlenderData->mainState++;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1332,7 +1332,7 @@ static void sub_8080018(void)
|
|||
sBerryBlenderData->mainState++;
|
||||
break;
|
||||
case 19:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
sBerryBlenderData->mainState++;
|
||||
break;
|
||||
case 20:
|
||||
|
|
@ -2587,7 +2587,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
|
|||
switch (sBerryBlenderData->field_1A0)
|
||||
{
|
||||
case 0:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
sBerryBlenderData->field_1A0 = 1;
|
||||
sBerryBlenderData->framesToWait = 0;
|
||||
break;
|
||||
|
|
@ -2606,7 +2606,7 @@ static bool8 LinkPlayAgainHandleSaving(void)
|
|||
case 3:
|
||||
if (++sBerryBlenderData->framesToWait == 10)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
sBerryBlenderData->field_1A0++;
|
||||
}
|
||||
break;
|
||||
|
|
@ -2682,7 +2682,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
|
|||
break;
|
||||
case 5:
|
||||
Blender_PrintText(&sBerryBlenderData->textState, gText_SavingDontTurnOff2, 0);
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
sBerryBlenderData->gameEndState++;
|
||||
break;
|
||||
case 6:
|
||||
|
|
@ -2702,7 +2702,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
|
|||
break;
|
||||
case 8:
|
||||
sBerryBlenderData->gameEndState++;
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
break;
|
||||
case 9:
|
||||
if (IsLinkTaskFinished())
|
||||
|
|
@ -2732,7 +2732,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
|
|||
case 11:
|
||||
if (++sBerryBlenderData->framesToWait > 30)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
sBerryBlenderData->gameEndState++;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1125,7 +1125,7 @@ int sub_802130C(void)
|
|||
switch (var0->unkC)
|
||||
{
|
||||
case 0:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 1:
|
||||
if (!IsLinkTaskFinished())
|
||||
|
|
@ -2027,7 +2027,7 @@ static u32 sub_8022CB0(struct BerryCrushGame *r4, u8 *r5)
|
|||
r4->unkC = 3;
|
||||
return 0;
|
||||
case 1:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
++r4->unkC;
|
||||
return 0;
|
||||
case 2:
|
||||
|
|
@ -2110,7 +2110,7 @@ static u32 sub_8022E5C(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
|
|||
switch (r4->unkC)
|
||||
{
|
||||
case 0:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 1:
|
||||
if (IsLinkTaskFinished())
|
||||
|
|
@ -2167,7 +2167,7 @@ static u32 sub_8022F1C(struct BerryCrushGame *r5, u8 *r2)
|
|||
sub_8022BEC(3, 1, NULL);
|
||||
return 0;
|
||||
case 1:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 2:
|
||||
if (!IsLinkTaskFinished())
|
||||
|
|
@ -2213,7 +2213,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
|
|||
{
|
||||
case 0:
|
||||
sub_80214A8(r4, &r4->unk138);
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 1:
|
||||
if (!IsLinkTaskFinished())
|
||||
|
|
@ -2233,7 +2233,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
|
|||
return 0;
|
||||
r4->unk138.unk38[r4->unk138.unk0] = NULL;
|
||||
++r4->unk138.unk0;
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 4:
|
||||
if (!IsLinkTaskFinished())
|
||||
|
|
@ -2247,7 +2247,7 @@ static u32 sub_8023070(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
|
|||
break;
|
||||
case 5:
|
||||
sub_80216A8(r4, &r4->unk138);
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 6:
|
||||
if (!IsLinkTaskFinished())
|
||||
|
|
@ -2295,7 +2295,7 @@ static u32 sub_80231B8(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
|
|||
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
|
||||
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
|
||||
SetGpuReg(REG_OFFSET_BG3VOFS, 0);
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 3:
|
||||
if (!IsLinkTaskFinished())
|
||||
|
|
@ -2323,7 +2323,7 @@ static u32 sub_80232EC(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
|
|||
return 0;
|
||||
// fallthrough
|
||||
case 0:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 3:
|
||||
if (!IsLinkTaskFinished())
|
||||
|
|
@ -2703,7 +2703,7 @@ static u32 sub_8023A30(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
|
|||
case 4:
|
||||
if (!sub_80218D4(r4, &r4->unk138))
|
||||
return 0;
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
r4->unk10 = 0;
|
||||
break;
|
||||
case 5:
|
||||
|
|
@ -2737,7 +2737,7 @@ static u32 sub_8023BC0(struct BerryCrushGame *r5, u8 *r6)
|
|||
case 2:
|
||||
if (!sub_80218D4(r5, &r5->unk138))
|
||||
return 0;
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
r5->unk10 = 0;
|
||||
SetGpuReg(REG_OFFSET_BG0VOFS, 0);
|
||||
SetGpuReg(REG_OFFSET_BG2VOFS, 0);
|
||||
|
|
@ -3005,7 +3005,7 @@ static u32 sub_8024134(struct BerryCrushGame *r5, u8 *r4)
|
|||
r5->unkC = 0;
|
||||
return 0;
|
||||
case 1:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 2:
|
||||
if (!IsLinkTaskFinished())
|
||||
|
|
@ -3084,7 +3084,7 @@ static u32 sub_80242E0(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r1
|
|||
switch (r4->unkC)
|
||||
{
|
||||
case 0:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 1:
|
||||
if (!IsLinkTaskFinished())
|
||||
|
|
@ -3184,12 +3184,12 @@ static u32 sub_8024508(struct BerryCrushGame *r5, __attribute__((unused)) u8 *r1
|
|||
switch (r5->unkC)
|
||||
{
|
||||
case 0:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
break;
|
||||
case 1:
|
||||
if (!IsLinkTaskFinished())
|
||||
return 0;
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
break;
|
||||
case 2:
|
||||
if (gReceivedRemoteLinkPlayers != 0)
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
#include "union_room.h"
|
||||
#include "mevent2.h"
|
||||
#include "script.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "sound.h"
|
||||
#include "start_menu.h"
|
||||
#include "string_util.h"
|
||||
|
|
@ -203,7 +203,7 @@ static void sub_80B2600(u8 taskId)
|
|||
gTasks[taskId].data[0]++;
|
||||
if (gTasks[taskId].data[0] == 10)
|
||||
{
|
||||
sub_800A4D8(2);
|
||||
SendBlockRequest(2);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
|
@ -357,7 +357,7 @@ static void Task_LinkupExchangeDataWithLeader(u8 taskId)
|
|||
if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS
|
||||
|| gSpecialVar_Result == LINKUP_WRONG_NUM_PLAYERS)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
HideFieldMessageBox();
|
||||
gTasks[taskId].func = Task_StopLinkup;
|
||||
}
|
||||
|
|
@ -392,7 +392,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
|
|||
{
|
||||
if (!Link_AnyPartnersPlayingRubyOrSapphire())
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
HideFieldMessageBox();
|
||||
gTasks[taskId].func = Task_StopLinkup;
|
||||
}
|
||||
|
|
@ -405,7 +405,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
|
|||
}
|
||||
else if (gSpecialVar_Result == LINKUP_DIFF_SELECTIONS)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
HideFieldMessageBox();
|
||||
gTasks[taskId].func = Task_StopLinkup;
|
||||
}
|
||||
|
|
@ -426,7 +426,7 @@ static void Task_LinkupCheckStatusAfterConfirm(u8 taskId)
|
|||
card->monSpecies[0] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[0] - 1], MON_DATA_SPECIES, NULL);
|
||||
card->monSpecies[1] = GetMonData(&gPlayerParty[gSelectedOrderFromParty[1] - 1], MON_DATA_SPECIES, NULL);
|
||||
gTasks[taskId].func = Task_LinkupAwaitTrainerCardData;
|
||||
sub_800A4D8(2);
|
||||
SendBlockRequest(2);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -481,7 +481,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId)
|
|||
{
|
||||
// Unsuccessful battle tower linkup
|
||||
*linkupStatus = LINKUP_FAILED_BATTLE_TOWER;
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gTasks[taskId].func = Task_StopLinkup;
|
||||
}
|
||||
else
|
||||
|
|
@ -503,7 +503,7 @@ static void FinishLinkup(u16 *linkupStatus, u32 taskId)
|
|||
else
|
||||
{
|
||||
// Unsuccessful linkup
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gTasks[taskId].func = Task_StopLinkup;
|
||||
}
|
||||
}
|
||||
|
|
@ -686,7 +686,7 @@ static void Task_ValidateMixingGameLanguage(u8 taskId)
|
|||
if (mixingForeignGames)
|
||||
{
|
||||
gSpecialVar_Result = LINKUP_FOREIGN_GAME;
|
||||
sub_800AD10();
|
||||
SetCloseLinkCallbackHandleJP();
|
||||
gTasks[taskId].tState = 1;
|
||||
return;
|
||||
}
|
||||
|
|
@ -856,7 +856,7 @@ static void Task_StartWiredCableClubBattle(u8 taskId)
|
|||
task->tState++;
|
||||
break;
|
||||
case 3:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
task->tState++;
|
||||
break;
|
||||
case 4:
|
||||
|
|
@ -919,7 +919,7 @@ static void Task_StartWirelessCableClubBattle(u8 taskId)
|
|||
tState = 5;
|
||||
break;
|
||||
case 5:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
tState = 6;
|
||||
break;
|
||||
case 6:
|
||||
|
|
@ -974,7 +974,7 @@ static void CB2_ReturnFromUnionRoomBattle(void)
|
|||
}
|
||||
else
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gMain.state = 1;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1113,7 +1113,7 @@ static void Task_StartWiredTrade(u8 taskId)
|
|||
gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
|
||||
gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
|
||||
m4aMPlayAllStop();
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
task->tState++;
|
||||
break;
|
||||
case 3:
|
||||
|
|
@ -1146,7 +1146,7 @@ static void Task_StartWirelessTrade(u8 taskId)
|
|||
gSelectedTradeMonPositions[TRADE_PLAYER] = 0;
|
||||
gSelectedTradeMonPositions[TRADE_PARTNER] = 0;
|
||||
m4aMPlayAllStop();
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
tState++;
|
||||
break;
|
||||
case 3:
|
||||
|
|
@ -1264,7 +1264,7 @@ static void sub_80B3AAC(u8 taskId)
|
|||
// Unused
|
||||
static void sub_80B3AD0(u8 taskId)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gTasks[taskId].func = sub_80B3AAC;
|
||||
}
|
||||
|
||||
|
|
|
|||
3345
src/contest.c
3345
src/contest.c
File diff suppressed because it is too large
Load Diff
129
src/contest_ai.c
129
src/contest_ai.c
|
|
@ -4,16 +4,17 @@
|
|||
#include "random.h"
|
||||
#include "contest_ai.h"
|
||||
#include "contest_effect.h"
|
||||
#include "constants/moves.h"
|
||||
|
||||
extern const u8 *gAIScriptPtr;
|
||||
extern const u8 *gContestAIChecks[];
|
||||
|
||||
static void ContestAICmd_score(void);
|
||||
static void ContestAICmd_get_turn(void);
|
||||
static void ContestAICmd_if_turn_less_than(void);
|
||||
static void ContestAICmd_if_turn_more_than(void);
|
||||
static void ContestAICmd_if_turn_eq(void);
|
||||
static void ContestAICmd_if_turn_not_eq(void);
|
||||
static void ContestAICmd_get_appeal_num(void);
|
||||
static void ContestAICmd_if_appeal_num_less_than(void);
|
||||
static void ContestAICmd_if_appeal_num_more_than(void);
|
||||
static void ContestAICmd_if_appeal_num_eq(void);
|
||||
static void ContestAICmd_if_appeal_num_not_eq(void);
|
||||
static void ContestAICmd_get_excitement(void);
|
||||
static void ContestAICmd_if_excitement_less_than(void);
|
||||
static void ContestAICmd_if_excitement_more_than(void);
|
||||
|
|
@ -150,11 +151,11 @@ typedef void (* ContestAICmdFunc)(void);
|
|||
static const ContestAICmdFunc sContestAICmdTable[] =
|
||||
{
|
||||
ContestAICmd_score, // 0x00
|
||||
ContestAICmd_get_turn, // 0x01
|
||||
ContestAICmd_if_turn_less_than, // 0x02
|
||||
ContestAICmd_if_turn_more_than, // 0x03
|
||||
ContestAICmd_if_turn_eq, // 0x04
|
||||
ContestAICmd_if_turn_not_eq, // 0x05
|
||||
ContestAICmd_get_appeal_num, // 0x01
|
||||
ContestAICmd_if_appeal_num_less_than, // 0x02
|
||||
ContestAICmd_if_appeal_num_more_than, // 0x03
|
||||
ContestAICmd_if_appeal_num_eq, // 0x04
|
||||
ContestAICmd_if_appeal_num_not_eq, // 0x05
|
||||
ContestAICmd_get_excitement, // 0x06
|
||||
ContestAICmd_if_excitement_less_than, // 0x07
|
||||
ContestAICmd_if_excitement_more_than, // 0x08
|
||||
|
|
@ -288,7 +289,7 @@ static const ContestAICmdFunc sContestAICmdTable[] =
|
|||
};
|
||||
|
||||
static void ContestAI_DoAIProcessing(void);
|
||||
static bool8 sub_81563B0(u8);
|
||||
static bool8 GetContestantIdByTurn(u8);
|
||||
static void AIStackPushVar(const u8 *);
|
||||
static u8 AIStackPop(void);
|
||||
|
||||
|
|
@ -297,8 +298,8 @@ void ContestAI_ResetAI(u8 contestantAI)
|
|||
int i;
|
||||
memset(&eContestAI, 0, sizeof(struct ContestAIInfo));
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
eContestAI.unk5[i] = 100;
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
eContestAI.moveScores[i] = 100;
|
||||
|
||||
eContestAI.contestantId = contestantAI;
|
||||
eContestAI.stackSize = 0;
|
||||
|
|
@ -321,16 +322,18 @@ u8 ContestAI_GetActionToUse(void)
|
|||
|
||||
while (1)
|
||||
{
|
||||
u8 rval = Random() & 3;
|
||||
u8 r2 = eContestAI.unk5[rval];
|
||||
// Randomly choose a move index. If it's the move
|
||||
// with the highest (or tied highest) score, return
|
||||
u8 moveIdx = Random() & (MAX_MON_MOVES - 1); // % MAX_MON_MOVES doesn't match
|
||||
u8 score = eContestAI.moveScores[moveIdx];
|
||||
int i;
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < MAX_MON_MOVES; i++)
|
||||
{
|
||||
if (r2 < eContestAI.unk5[i])
|
||||
if (score < eContestAI.moveScores[i])
|
||||
break;
|
||||
}
|
||||
if (i == 4)
|
||||
return rval;
|
||||
if (i == MAX_MON_MOVES)
|
||||
return moveIdx;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -345,26 +348,26 @@ static void ContestAI_DoAIProcessing(void)
|
|||
case CONTESTAI_SETTING_UP:
|
||||
gAIScriptPtr = gContestAIChecks[eContestAI.currentAICheck];
|
||||
|
||||
if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == 0)
|
||||
eContestAI.nextMove = 0; // don't process a move that doesn't exist.
|
||||
if (gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex] == MOVE_NONE)
|
||||
eContestAI.nextMove = MOVE_NONE; // don't process a move that doesn't exist.
|
||||
else
|
||||
eContestAI.nextMove = gContestMons[eContestAI.contestantId].moves[eContestAI.nextMoveIndex];
|
||||
eContestAI.aiState++;
|
||||
break;
|
||||
case CONTESTAI_PROCESSING:
|
||||
if (eContestAI.nextMove != 0)
|
||||
if (eContestAI.nextMove != MOVE_NONE)
|
||||
{
|
||||
sContestAICmdTable[*gAIScriptPtr](); // run the command.
|
||||
}
|
||||
else
|
||||
{
|
||||
eContestAI.unk5[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist.
|
||||
eContestAI.moveScores[eContestAI.nextMoveIndex] = 0; // don't consider a move that doesn't exist.
|
||||
eContestAI.aiAction |= 1;
|
||||
}
|
||||
if (eContestAI.aiAction & 1)
|
||||
{
|
||||
eContestAI.nextMoveIndex++;
|
||||
if (eContestAI.nextMoveIndex < 4)
|
||||
if (eContestAI.nextMoveIndex < MAX_MON_MOVES)
|
||||
eContestAI.aiState = 0;
|
||||
else
|
||||
// aiState = CONTESTAI_FINISHED
|
||||
|
|
@ -376,12 +379,12 @@ static void ContestAI_DoAIProcessing(void)
|
|||
}
|
||||
}
|
||||
|
||||
static u8 sub_81563B0(u8 var)
|
||||
static u8 GetContestantIdByTurn(u8 turn)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
if (eContestResources8.turnOrder[i] == var)
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
if (eContestAppealResults.turnOrder[i] == turn)
|
||||
break;
|
||||
|
||||
return i;
|
||||
|
|
@ -389,27 +392,27 @@ static u8 sub_81563B0(u8 var)
|
|||
|
||||
static void ContestAICmd_score(void)
|
||||
{
|
||||
s16 score = eContestAI.unk5[eContestAI.nextMoveIndex] + (s8)gAIScriptPtr[1];
|
||||
s16 score = eContestAI.moveScores[eContestAI.nextMoveIndex] + (s8)gAIScriptPtr[1];
|
||||
|
||||
if (score > 255)
|
||||
score = 255;
|
||||
else if (score < 0)
|
||||
score = 0;
|
||||
|
||||
eContestAI.unk5[eContestAI.nextMoveIndex] = score;
|
||||
eContestAI.moveScores[eContestAI.nextMoveIndex] = score;
|
||||
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
static void ContestAICmd_get_turn(void)
|
||||
static void ContestAICmd_get_appeal_num(void)
|
||||
{
|
||||
eContestAI.scriptResult = eContest.turnNumber;
|
||||
eContestAI.scriptResult = eContest.appealNumber;
|
||||
gAIScriptPtr += 1;
|
||||
}
|
||||
|
||||
static void ContestAICmd_if_turn_less_than(void)
|
||||
static void ContestAICmd_if_appeal_num_less_than(void)
|
||||
{
|
||||
ContestAICmd_get_turn();
|
||||
ContestAICmd_get_appeal_num();
|
||||
|
||||
if (eContestAI.scriptResult < gAIScriptPtr[0])
|
||||
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
|
||||
|
|
@ -417,9 +420,9 @@ static void ContestAICmd_if_turn_less_than(void)
|
|||
gAIScriptPtr += 5;
|
||||
}
|
||||
|
||||
static void ContestAICmd_if_turn_more_than(void)
|
||||
static void ContestAICmd_if_appeal_num_more_than(void)
|
||||
{
|
||||
ContestAICmd_get_turn();
|
||||
ContestAICmd_get_appeal_num();
|
||||
|
||||
if (eContestAI.scriptResult > gAIScriptPtr[0])
|
||||
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
|
||||
|
|
@ -427,9 +430,9 @@ static void ContestAICmd_if_turn_more_than(void)
|
|||
gAIScriptPtr += 5;
|
||||
}
|
||||
|
||||
static void ContestAICmd_if_turn_eq(void)
|
||||
static void ContestAICmd_if_appeal_num_eq(void)
|
||||
{
|
||||
ContestAICmd_get_turn();
|
||||
ContestAICmd_get_appeal_num();
|
||||
|
||||
if (eContestAI.scriptResult == gAIScriptPtr[0])
|
||||
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
|
||||
|
|
@ -437,9 +440,9 @@ static void ContestAICmd_if_turn_eq(void)
|
|||
gAIScriptPtr += 5;
|
||||
}
|
||||
|
||||
static void ContestAICmd_if_turn_not_eq(void)
|
||||
static void ContestAICmd_if_appeal_num_not_eq(void)
|
||||
{
|
||||
ContestAICmd_get_turn();
|
||||
ContestAICmd_get_appeal_num();
|
||||
|
||||
if (eContestAI.scriptResult != gAIScriptPtr[0])
|
||||
gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
|
||||
|
|
@ -495,7 +498,7 @@ static void ContestAICmd_if_excitement_not_eq(void)
|
|||
|
||||
static void ContestAICmd_get_user_order(void)
|
||||
{
|
||||
eContestAI.scriptResult = eContestResources8.turnOrder[eContestAI.contestantId];
|
||||
eContestAI.scriptResult = eContestAppealResults.turnOrder[eContestAI.contestantId];
|
||||
gAIScriptPtr += 1;
|
||||
}
|
||||
|
||||
|
|
@ -633,7 +636,7 @@ static void ContestAICmd_unk_19(void)
|
|||
|
||||
static void ContestAICmd_unk_1A(void)
|
||||
{
|
||||
eContestAI.scriptResult = gContestMonConditions[eContestAI.contestantId];
|
||||
eContestAI.scriptResult = gContestMonRound1Points[eContestAI.contestantId];
|
||||
gAIScriptPtr += 1;
|
||||
}
|
||||
|
||||
|
|
@ -1146,9 +1149,9 @@ static void ContestAICmd_if_would_not_finish_combo(void)
|
|||
|
||||
static void ContestAICmd_get_condition(void)
|
||||
{
|
||||
int var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
|
||||
eContestAI.scriptResult = eContestantStatus[var].condition / 10;
|
||||
eContestAI.scriptResult = eContestantStatus[contestant].condition / 10;
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
|
|
@ -1194,11 +1197,11 @@ static void ContestAICmd_if_condition_not_eq(void)
|
|||
|
||||
static void ContestAICmd_get_used_combo_starter(void)
|
||||
{
|
||||
u16 result = 0;
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u16 result = FALSE;
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
|
||||
if (sub_80DE1E8(var))
|
||||
result = gContestMoves[eContestantStatus[var].prevMove].comboStarterId ? 1 : 0;
|
||||
if (IsContestantAllowedToCombo(contestant))
|
||||
result = gContestMoves[eContestantStatus[contestant].prevMove].comboStarterId ? TRUE : FALSE;
|
||||
|
||||
eContestAI.scriptResult = result;
|
||||
gAIScriptPtr += 2;
|
||||
|
|
@ -1246,7 +1249,7 @@ static void ContestAICmd_if_used_combo_starter_not_eq(void)
|
|||
|
||||
static void ContestAICmd_check_can_participate(void)
|
||||
{
|
||||
if (Contest_IsMonsTurnDisabled(sub_81563B0(gAIScriptPtr[1])))
|
||||
if (Contest_IsMonsTurnDisabled(GetContestantIdByTurn(gAIScriptPtr[1])))
|
||||
eContestAI.scriptResult = FALSE;
|
||||
else
|
||||
eContestAI.scriptResult = TRUE;
|
||||
|
|
@ -1276,9 +1279,9 @@ static void ContestAICmd_if_cannot_participate(void)
|
|||
|
||||
static void ContestAICmd_get_val_812A188(void)
|
||||
{
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
|
||||
eContestAI.scriptResult = eContestantStatus[var].unk15_3;
|
||||
eContestAI.scriptResult = eContestantStatus[contestant].unk15_3;
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
|
|
@ -1304,9 +1307,9 @@ static void ContestAICmd_contest_58(void)
|
|||
|
||||
static void ContestAICmd_unk_59(void)
|
||||
{
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
|
||||
eContestAI.scriptResult = eContestantStatus[var].pointTotal - eContestantStatus[eContestAI.contestantId].pointTotal;
|
||||
eContestAI.scriptResult = eContestantStatus[contestant].pointTotal - eContestantStatus[eContestAI.contestantId].pointTotal;
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
|
|
@ -1352,9 +1355,9 @@ static void ContestAICmd_unk_5D(void)
|
|||
|
||||
static void ContestAICmd_unk_5E(void)
|
||||
{
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
|
||||
eContestAI.scriptResult = gContestMonConditions[var] - gContestMonConditions[eContestAI.contestantId];
|
||||
eContestAI.scriptResult = gContestMonRound1Points[contestant] - gContestMonRound1Points[eContestAI.contestantId];
|
||||
gAIScriptPtr += 2;
|
||||
}
|
||||
|
||||
|
|
@ -1400,9 +1403,9 @@ static void ContestAICmd_unk_62(void)
|
|||
|
||||
static void ContestAICmd_unk_63(void)
|
||||
{
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 var2 = gAIScriptPtr[2];
|
||||
u16 move = eContest.moveHistory[var2][var];
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
u8 turn = gAIScriptPtr[2];
|
||||
u16 move = eContest.moveHistory[turn][contestant];
|
||||
|
||||
eContestAI.scriptResult = gContestMoves[move].effect;
|
||||
gAIScriptPtr += 3;
|
||||
|
|
@ -1450,9 +1453,9 @@ static void ContestAICmd_unk_67(void)
|
|||
|
||||
static void ContestAICmd_unk_68(void)
|
||||
{
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 var2 = gAIScriptPtr[2];
|
||||
s8 result = eContest.excitementHistory[var2][var];
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
u8 turn = gAIScriptPtr[2];
|
||||
s8 result = eContest.excitementHistory[turn][contestant];
|
||||
|
||||
eContestAI.scriptResult = result;
|
||||
gAIScriptPtr += 3;
|
||||
|
|
@ -1500,9 +1503,9 @@ static void ContestAICmd_unk_6C(void)
|
|||
|
||||
static void ContestAICmd_unk_6D(void)
|
||||
{
|
||||
u8 var = sub_81563B0(gAIScriptPtr[1]);
|
||||
u8 var2 = gAIScriptPtr[2];
|
||||
u16 move = eContest.moveHistory[var2][var];
|
||||
u8 contestant = GetContestantIdByTurn(gAIScriptPtr[1]);
|
||||
u8 turn = gAIScriptPtr[2];
|
||||
u16 move = eContest.moveHistory[turn][contestant];
|
||||
|
||||
eContestAI.scriptResult = gContestEffects[gContestMoves[move].effect].effectType;
|
||||
gAIScriptPtr += 3;
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -8,10 +8,18 @@
|
|||
#include "task.h"
|
||||
#include "contest_link.h"
|
||||
|
||||
static void sub_80FC5C0(u8);
|
||||
static void sub_80FC5DC(u8);
|
||||
static void Task_LinkContest_StartInitFlags(u8);
|
||||
static void Task_LinkContest_InitFlags(u8);
|
||||
|
||||
bool32 sub_80FC4F4(void *src, u16 size)
|
||||
#define tState data[0]
|
||||
#define tDelayTimer data[1]
|
||||
#define tCategories(i) data[(i) + 1]
|
||||
#define tLeaderIds(i) data[(i) + 5]
|
||||
#define tCategory data[9]
|
||||
#define tTimer data[11]
|
||||
#define tStandbyState data[12]
|
||||
|
||||
bool32 LinkContest_SendBlock(void *src, u16 size)
|
||||
{
|
||||
memcpy(gDecompressionBuffer, src, size);
|
||||
if (SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, size))
|
||||
|
|
@ -20,21 +28,21 @@ bool32 sub_80FC4F4(void *src, u16 size)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 sub_80FC530(u8 arg0)
|
||||
bool8 LinkContest_GetBlockReceived(u8 flag)
|
||||
{
|
||||
u8 mask = (1 << arg0);
|
||||
u8 mask = (1 << flag);
|
||||
if (!(GetBlockReceivedStatus() & mask))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
ResetBlockReceivedFlag(arg0);
|
||||
ResetBlockReceivedFlag(flag);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_80FC55C(void)
|
||||
bool8 LinkContest_GetBlockReceivedFromAllPlayers(void)
|
||||
{
|
||||
if (GetBlockReceivedStatus() == GetLinkPlayerCountAsBitFlags())
|
||||
{
|
||||
|
|
@ -47,23 +55,23 @@ bool8 sub_80FC55C(void)
|
|||
}
|
||||
}
|
||||
|
||||
void sub_80FC580(u8 taskId)
|
||||
void Task_LinkContest_Init(u8 taskId)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
gBlockRecvBuffer[i][0] = 0xFF;
|
||||
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].func = sub_80FC5C0;
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].func = Task_LinkContest_StartInitFlags;
|
||||
}
|
||||
|
||||
static void sub_80FC5C0(u8 taskId)
|
||||
static void Task_LinkContest_StartInitFlags(u8 taskId)
|
||||
{
|
||||
gTasks[taskId].func = sub_80FC5DC;
|
||||
gTasks[taskId].func = Task_LinkContest_InitFlags;
|
||||
}
|
||||
|
||||
static void sub_80FC5DC(u8 taskId)
|
||||
static void Task_LinkContest_InitFlags(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
@ -76,6 +84,7 @@ static void sub_80FC5DC(u8 taskId)
|
|||
if (gWirelessCommType == 1)
|
||||
gLinkContestFlags = LINK_CONTEST_FLAG_IS_LINK | LINK_CONTEST_FLAG_IS_WIRELESS;
|
||||
|
||||
// Get number of players using Emerald/FRLG
|
||||
for (i = 0; i < gNumLinkContestPlayers && (u32)(gLinkPlayers[i].version & 0xFF) - 1 > VERSION_RUBY - 1; i++)
|
||||
;
|
||||
|
||||
|
|
@ -85,22 +94,23 @@ static void sub_80FC5DC(u8 taskId)
|
|||
SwitchTaskToFollowupFunc(taskId);
|
||||
}
|
||||
|
||||
bool32 sub_80FC670(s16 *arg0)
|
||||
bool32 LinkContest_TryLinkStandby(s16 *state)
|
||||
{
|
||||
// Skip standby for RS cabled links
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
|
||||
return TRUE;
|
||||
|
||||
switch (*arg0)
|
||||
switch (*state)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
sub_800ADF8();
|
||||
(*arg0)++;
|
||||
SetLinkStandbyCallback();
|
||||
(*state)++;
|
||||
}
|
||||
return FALSE;
|
||||
case 1:
|
||||
(*arg0)++;
|
||||
(*state)++;
|
||||
return FALSE;
|
||||
default:
|
||||
if (IsLinkTaskFinished() != TRUE)
|
||||
|
|
@ -110,438 +120,443 @@ bool32 sub_80FC670(s16 *arg0)
|
|||
}
|
||||
}
|
||||
|
||||
void sub_80FC6BC(u8 taskId)
|
||||
void Task_LinkContest_CommunicateMonsRS(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
// Send players mon
|
||||
if (GetMultiplayerId() == 0)
|
||||
{
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
|
||||
gTasks[taskId].data[0] = 10;
|
||||
gTasks[taskId].tState = 10;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy(gBlockSendBuffer, &gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon));
|
||||
gTasks[taskId].data[0] = 1;
|
||||
gTasks[taskId].tState = 1;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
// Wait for other players data
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
|
||||
sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language);
|
||||
StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[i].language);
|
||||
}
|
||||
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (++gTasks[taskId].data[11] > 300)
|
||||
// Only if leader. Request other players data
|
||||
if (++gTasks[taskId].tTimer > 300)
|
||||
{
|
||||
sub_800A4D8(2);
|
||||
gTasks[taskId].data[0] = 1;
|
||||
SendBlockRequest(2);
|
||||
gTasks[taskId].tState = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[11] = 0;
|
||||
gTasks[taskId].data[12] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].tTimer = 0;
|
||||
gTasks[taskId].tStandbyState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FC804(u8 taskId)
|
||||
void Task_LinkContest_CommunicateRngRS(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (GetMultiplayerId() == 0)
|
||||
{
|
||||
if (IsLinkTaskFinished() && sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == TRUE)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (IsLinkTaskFinished() && LinkContest_SendBlock(&gRngValue, sizeof(gRngValue)) == TRUE)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC530(0))
|
||||
if (LinkContest_GetBlockReceived(0))
|
||||
{
|
||||
memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
|
||||
memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue));
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FC894(u8 taskId)
|
||||
void Task_LinkContest_CommunicateCategoryRS(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
gBlockSendBuffer[0] = gTasks[taskId].data[9];
|
||||
gBlockSendBuffer[0] = gTasks[taskId].tCategory;
|
||||
if (GetMultiplayerId() == 0)
|
||||
{
|
||||
if (IsLinkTaskFinished())
|
||||
gTasks[taskId].data[0] = 10;
|
||||
gTasks[taskId].tState = 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
gTasks[taskId].data[i + 1] = gBlockRecvBuffer[i][0];
|
||||
gTasks[taskId].tCategories(i) = gBlockRecvBuffer[i][0];
|
||||
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (++gTasks[taskId].data[11] > 10)
|
||||
if (++gTasks[taskId].tTimer > 10)
|
||||
{
|
||||
sub_800A4D8(2);
|
||||
gTasks[taskId].data[0] = 1;
|
||||
SendBlockRequest(2);
|
||||
gTasks[taskId].tState = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[11] = 0;
|
||||
gTasks[taskId].data[12] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].tTimer = 0;
|
||||
gTasks[taskId].tStandbyState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FC998(u8 taskId)
|
||||
void Task_LinkContest_CommunicateMonIdxs(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(&gContestPlayerMonIndex, sizeof(gContestPlayerMonIndex)) == TRUE)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
gTasks[taskId].tState++;
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FC9F8(u8 taskId)
|
||||
void Task_LinkContest_CommunicateMoveSelections(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE)
|
||||
gTasks[taskId].data[0]++;
|
||||
// Send player's move selection
|
||||
if (LinkContest_SendBlock(&eContestantStatus[gContestPlayerMonIndex].currMove, sizeof(eContestantStatus[gContestPlayerMonIndex].currMove)) == TRUE)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
// Receive partners' move selections
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
eContestantStatus[i].currMove = gBlockRecvBuffer[i][0];
|
||||
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FCACC(u8 taskId)
|
||||
void Task_LinkContest_CommunicateFinalStandings(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestMonTotalPoints, sizeof(gContestMonTotalPoints)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestMonTotalPoints, sizeof(gContestMonTotalPoints)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonTotalPoints));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestMonTotalPoints, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonTotalPoints));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case 5:
|
||||
case 8:
|
||||
case 11:
|
||||
if (gTasks[taskId].data[1]++ > 10)
|
||||
if (gTasks[taskId].tDelayTimer++ > 10)
|
||||
{
|
||||
gTasks[taskId].data[1] = 0;
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tDelayTimer = 0;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gUnknown_02039F10, sizeof(gUnknown_02039F10)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestMonAppealPointTotals, sizeof(gContestMonAppealPointTotals)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gUnknown_02039F10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gUnknown_02039F10));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestMonAppealPointTotals, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonAppealPointTotals));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestMonRound2Points, sizeof(gContestMonRound2Points)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestMonRound2Points, sizeof(gContestMonRound2Points)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestMonRound2Points, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonRound2Points));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestMonRound2Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound2Points));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestFinalStandings, sizeof(gContestFinalStandings)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestFinalStandings));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestFinalStandings, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestFinalStandings));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FCC88(u8 taskId)
|
||||
void Task_LinkContest_CommunicateAppealsState(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(eContestantStatus, 4 * sizeof(struct ContestantStatus)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(eContestantStatus, CONTESTANT_COUNT * sizeof(struct ContestantStatus)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(eContestantStatus, gBlockRecvBuffer[gUnknown_02039F2B], 4 * sizeof(struct ContestantStatus));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(eContestantStatus, gBlockRecvBuffer[gContestLinkLeaderIndex], CONTESTANT_COUNT * sizeof(struct ContestantStatus));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
case 5:
|
||||
case 8:
|
||||
case 11:
|
||||
if (gTasks[taskId].data[1]++ > 10)
|
||||
if (gTasks[taskId].tDelayTimer++ > 10)
|
||||
{
|
||||
gTasks[taskId].data[1] = 0;
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tDelayTimer = 0;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestResources->field_8, sizeof(struct UnknownContestStruct7)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestResources->appealResults, sizeof(struct ContestAppealMoveResults)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestResources->field_8, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct7));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestResources->appealResults, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct ContestAppealMoveResults));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestResources->field_10, sizeof(struct UnknownContestStruct5)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestResources->excitement, sizeof(struct ContestExcitement)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestResources->field_10, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(struct UnknownContestStruct5));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestResources->excitement, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(struct ContestExcitement));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 9:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FCE48(u8 taskId)
|
||||
void Task_LinkContest_CommunicateLeaderIdsRS(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
gBlockSendBuffer[0] = 0x6E;
|
||||
if (GetMultiplayerId() == 0)
|
||||
{
|
||||
if (IsLinkTaskFinished())
|
||||
gTasks[taskId].data[0] = 10;
|
||||
gTasks[taskId].tState = 10;
|
||||
}
|
||||
else
|
||||
{
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
for (i = 0; i < 4; i++)
|
||||
gTasks[taskId].data[i + 5] = gBlockRecvBuffer[i][0];
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
gTasks[taskId].tLeaderIds(i) = gBlockRecvBuffer[i][0];
|
||||
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
if (++gTasks[taskId].data[11] > 10)
|
||||
if (++gTasks[taskId].tTimer > 10)
|
||||
{
|
||||
sub_800A4D8(2);
|
||||
gTasks[taskId].data[0] = 1;
|
||||
SendBlockRequest(2);
|
||||
gTasks[taskId].tState = 1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[11] = 0;
|
||||
gTasks[taskId].data[12] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].tTimer = 0;
|
||||
gTasks[taskId].tStandbyState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FCF40(u8 taskId)
|
||||
void Task_LinkContest_CommunicateRound1Points(u8 taskId)
|
||||
{
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestMonConditions, sizeof(gContestMonConditions)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestMonRound1Points, sizeof(gContestMonRound1Points)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestMonConditions, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestMonConditions));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestMonRound1Points, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestMonRound1Points));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[12] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].tStandbyState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FCFD0(u8 taskId)
|
||||
void Task_LinkContest_CommunicateTurnOrder(u8 taskId)
|
||||
{
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].tStandbyState))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
if (LinkContest_SendBlock(gContestantTurnOrder, sizeof(gContestantTurnOrder)) == 1)
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
memcpy(gContestantTurnOrder, gBlockRecvBuffer[gUnknown_02039F2B], sizeof(gContestantTurnOrder));
|
||||
gTasks[taskId].data[0]++;
|
||||
memcpy(gContestantTurnOrder, gBlockRecvBuffer[gContestLinkLeaderIndex], sizeof(gContestantTurnOrder));
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[12] = 0;
|
||||
gTasks[taskId].tState = 0;
|
||||
gTasks[taskId].tStandbyState = 0;
|
||||
SwitchTaskToFollowupFunc(taskId);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,148 +1,158 @@
|
|||
#include "global.h"
|
||||
#include "contest.h"
|
||||
#include "contest_link.h"
|
||||
#include "event_data.h"
|
||||
#include "link.h"
|
||||
#include "random.h"
|
||||
#include "task.h"
|
||||
|
||||
static void sub_81D9F14(u8);
|
||||
static void sub_81D9F30(u8);
|
||||
static void sub_81D9F4C(u8);
|
||||
static void sub_81D9F68(u8);
|
||||
static void sub_81DA10C(u8);
|
||||
static void sub_81DA138(u8);
|
||||
static void sub_81DA160(u8);
|
||||
static void sub_81DA244(u8);
|
||||
static void sub_81DA2E8(u8);
|
||||
static void sub_81DA3B8(u8);
|
||||
static void sub_81DA488(u8);
|
||||
/*
|
||||
The functions in this file handle preliminary communication
|
||||
for Emerald-only link contests. If the link contest has an RS
|
||||
player linked, none of these functions are used.
|
||||
|
||||
void sub_81D9DE4(u8 taskId)
|
||||
The equivalent functions for RS-linked contests are spread
|
||||
between contest_link.c and contest_util.c, and are suffixed RS
|
||||
instead of Em
|
||||
*/
|
||||
|
||||
static void Task_LinkContest_CommunicateMonsEm(u8);
|
||||
static void Task_LinkContest_StartCommunicateRngEm(u8);
|
||||
static void Task_LinkContest_CommunicateRngEm(u8);
|
||||
static void Task_LinkContest_StartCommunicateLeaderIdsEm(u8);
|
||||
static void Task_LinkContest_CommunicateLeaderIdsEm(u8);
|
||||
static void Task_LinkContest_StartCommunicateCategoryEm(u8);
|
||||
static void Task_LinkContest_CommunicateCategoryEm(u8);
|
||||
static void Task_LinkContest_SetUpContestEm(u8);
|
||||
static void Task_LinkContest_CommunicateAIMonsEm(u8);
|
||||
static void Task_LinkContest_CalculateRound1Em(u8);
|
||||
static void Task_LinkContest_CalculateTurnOrderEm(u8);
|
||||
|
||||
#define tCategory data[9]
|
||||
|
||||
void Task_LinkContest_StartCommunicationEm(u8 taskId)
|
||||
{
|
||||
int gameCleared;
|
||||
|
||||
switch (gTasks[taskId].data[9])
|
||||
switch (gTasks[taskId].tCategory)
|
||||
{
|
||||
case 0:
|
||||
case CONTEST_CATEGORY_COOL:
|
||||
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_COOL_RIBBON);
|
||||
break;
|
||||
case 1:
|
||||
case CONTEST_CATEGORY_BEAUTY:
|
||||
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_BEAUTY_RIBBON);
|
||||
break;
|
||||
case 2:
|
||||
case CONTEST_CATEGORY_CUTE:
|
||||
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_CUTE_RIBBON);
|
||||
break;
|
||||
case 3:
|
||||
case CONTEST_CATEGORY_SMART:
|
||||
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SMART_RIBBON);
|
||||
break;
|
||||
case 4:
|
||||
case CONTEST_CATEGORY_TOUGH:
|
||||
default:
|
||||
gHighestRibbonRank = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_TOUGH_RIBBON);
|
||||
break;
|
||||
}
|
||||
|
||||
gContestMons[gContestPlayerMonIndex].unk2C[0] = gHighestRibbonRank;
|
||||
gContestMons[gContestPlayerMonIndex].highestRank = gHighestRibbonRank;
|
||||
gameCleared = FlagGet(FLAG_SYS_GAME_CLEAR) > 0;
|
||||
gContestMons[gContestPlayerMonIndex].unk2C[1] = gameCleared;
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_81DA160, sub_81D9F14);
|
||||
gContestMons[gContestPlayerMonIndex].gameCleared = gameCleared;
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsEm, Task_LinkContest_StartCommunicateRngEm);
|
||||
}
|
||||
|
||||
static void sub_81D9F14(u8 taskId)
|
||||
static void Task_LinkContest_StartCommunicateRngEm(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_81DA244, sub_81D9F30);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngEm, Task_LinkContest_StartCommunicateLeaderIdsEm);
|
||||
}
|
||||
|
||||
static void sub_81D9F30(u8 taskId)
|
||||
static void Task_LinkContest_StartCommunicateLeaderIdsEm(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_81DA2E8, sub_81D9F4C);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsEm, Task_LinkContest_StartCommunicateCategoryEm);
|
||||
}
|
||||
|
||||
static void sub_81D9F4C(u8 taskId)
|
||||
static void Task_LinkContest_StartCommunicateCategoryEm(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_81DA3B8, sub_81D9F68);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryEm, Task_LinkContest_SetUpContestEm);
|
||||
}
|
||||
|
||||
static void sub_81D9F68(u8 taskId)
|
||||
static void Task_LinkContest_SetUpContestEm(u8 taskId)
|
||||
{
|
||||
u8 i;
|
||||
u8 rank;
|
||||
int gameCleared;
|
||||
u8 data1[4];
|
||||
u8 data2[4];
|
||||
u8 categories[CONTESTANT_COUNT];
|
||||
u8 leaderIds[CONTESTANT_COUNT];
|
||||
|
||||
memset(data1, 0, sizeof(data1));
|
||||
memset(data2, 0, sizeof(data2));
|
||||
memset(categories, 0, sizeof(categories));
|
||||
memset(leaderIds, 0, sizeof(leaderIds));
|
||||
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
data1[i] = gTasks[taskId].data[i + 1];
|
||||
categories[i] = gTasks[taskId].data[i + 1];
|
||||
|
||||
i = 0;
|
||||
if (i < gNumLinkContestPlayers)
|
||||
{
|
||||
while (++i < gNumLinkContestPlayers)
|
||||
{
|
||||
if (data1[0] != data1[i])
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Ensure all players are doing the same category
|
||||
for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++)
|
||||
;
|
||||
|
||||
if (i == gNumLinkContestPlayers)
|
||||
gSpecialVar_0x8004 = 0;
|
||||
gSpecialVar_0x8004 = FALSE; // Category choices the same
|
||||
else
|
||||
gSpecialVar_0x8004 = 1;
|
||||
gSpecialVar_0x8004 = TRUE; // Category choices differ
|
||||
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
data2[i] = gTasks[taskId].data[i + 5];
|
||||
leaderIds[i] = gTasks[taskId].data[i + 5];
|
||||
|
||||
if (gNumLinkContestPlayers != 4 && GetMultiplayerId() == 0)
|
||||
// If < 4 players and player is leader, set AI contestants based on rank and game clear
|
||||
if (gNumLinkContestPlayers != CONTESTANT_COUNT && GetMultiplayerId() == 0)
|
||||
{
|
||||
rank = gContestMons[0].unk2C[0];
|
||||
rank = gContestMons[0].highestRank;
|
||||
for (i = 1; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
if (rank < gContestMons[i].unk2C[0])
|
||||
rank = gContestMons[i].unk2C[0];
|
||||
if (rank < gContestMons[i].highestRank)
|
||||
rank = gContestMons[i].highestRank;
|
||||
}
|
||||
|
||||
if (rank)
|
||||
rank--;
|
||||
|
||||
gameCleared = 1;
|
||||
gameCleared = TRUE;
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
if (!gContestMons[i].unk2C[1])
|
||||
if (!gContestMons[i].gameCleared)
|
||||
{
|
||||
gameCleared = 0;
|
||||
gameCleared = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
sub_80DACBC(data1[0], rank, gameCleared);
|
||||
SetLinkAIContestants(categories[0], rank, gameCleared);
|
||||
}
|
||||
|
||||
gUnknown_02039F2B = sub_80F86E0(data2);
|
||||
if (gNumLinkContestPlayers < 4)
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_81DA488, sub_81DA10C);
|
||||
// Assign link leader. After initial communication all players will read data only from them
|
||||
gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(leaderIds);
|
||||
|
||||
if (gNumLinkContestPlayers < CONTESTANT_COUNT)
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateAIMonsEm, Task_LinkContest_CalculateRound1Em);
|
||||
else
|
||||
gTasks[taskId].func = sub_81DA10C;
|
||||
gTasks[taskId].func = Task_LinkContest_CalculateRound1Em;
|
||||
}
|
||||
|
||||
static void sub_81DA10C(u8 taskId)
|
||||
static void Task_LinkContest_CalculateRound1Em(u8 taskId)
|
||||
{
|
||||
sub_80DB09C(gSpecialVar_ContestCategory);
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_81DA138);
|
||||
CalculateRound1Points(gSpecialVar_ContestCategory);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderEm);
|
||||
}
|
||||
|
||||
static void sub_81DA138(u8 taskId)
|
||||
static void Task_LinkContest_CalculateTurnOrderEm(u8 taskId)
|
||||
{
|
||||
SortContestants(FALSE);
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection);
|
||||
}
|
||||
|
||||
static void sub_81DA160(u8 taskId)
|
||||
static void Task_LinkContest_CommunicateMonsEm(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
|
|
@ -155,17 +165,17 @@ static void sub_81DA160(u8 taskId)
|
|||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
if (sub_80FC4F4(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1)
|
||||
if (LinkContest_SendBlock(&gContestMons[gContestPlayerMonIndex], sizeof(struct ContestPokemon)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
memcpy(&gContestMons[i], gBlockRecvBuffer[i], sizeof(struct ContestPokemon));
|
||||
sub_80DFA08(&gContestMons[i], gLinkPlayers[i].language);
|
||||
StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[i].language);
|
||||
}
|
||||
|
||||
gTasks[taskId].data[0]++;
|
||||
|
|
@ -174,9 +184,9 @@ static void sub_81DA160(u8 taskId)
|
|||
}
|
||||
}
|
||||
|
||||
static void sub_81DA244(u8 taskId)
|
||||
static void Task_LinkContest_CommunicateRngEm(u8 taskId)
|
||||
{
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
|
|
@ -189,19 +199,22 @@ static void sub_81DA244(u8 taskId)
|
|||
case 0:
|
||||
if (GetMultiplayerId() == 0)
|
||||
{
|
||||
// Only the leader sends the RNG seed
|
||||
if (!IsLinkTaskFinished())
|
||||
return;
|
||||
|
||||
if (sub_80FC4F4(&gRngValue, sizeof(gRngValue)) == 1)
|
||||
if (LinkContest_SendBlock(&gRngValue, sizeof(gRngValue)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Other link members skip to waiting
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC530(0))
|
||||
// Wait to receive RNG data
|
||||
if (LinkContest_GetBlockReceived(0))
|
||||
{
|
||||
memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(gRngValue));
|
||||
memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(gContestRngValue));
|
||||
|
|
@ -211,13 +224,13 @@ static void sub_81DA244(u8 taskId)
|
|||
}
|
||||
}
|
||||
|
||||
static void sub_81DA2E8(u8 taskId)
|
||||
static void Task_LinkContest_CommunicateLeaderIdsEm(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
u16 data[4];
|
||||
u16 var0;
|
||||
u16 data[CONTESTANT_COUNT];
|
||||
u16 leaderId;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
|
|
@ -230,13 +243,13 @@ static void sub_81DA2E8(u8 taskId)
|
|||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
var0 = 0x6E;
|
||||
if (sub_80FC4F4(&var0, sizeof(var0)) == 1)
|
||||
leaderId = 0x6E;
|
||||
if (LinkContest_SendBlock(&leaderId, sizeof(leaderId)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
|
|
@ -250,13 +263,13 @@ static void sub_81DA2E8(u8 taskId)
|
|||
}
|
||||
}
|
||||
|
||||
static void sub_81DA3B8(u8 taskId)
|
||||
static void Task_LinkContest_CommunicateCategoryEm(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
u16 data[4];
|
||||
u16 var0;
|
||||
u16 data[CONTESTANT_COUNT];
|
||||
u16 category;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
|
|
@ -269,13 +282,13 @@ static void sub_81DA3B8(u8 taskId)
|
|||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
var0 = gTasks[taskId].data[9];
|
||||
if (sub_80FC4F4(&var0, sizeof(var0)) == 1)
|
||||
category = gTasks[taskId].tCategory;
|
||||
if (LinkContest_SendBlock(&category, sizeof(category)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC55C())
|
||||
if (LinkContest_GetBlockReceivedFromAllPlayers())
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
|
|
@ -289,11 +302,11 @@ static void sub_81DA3B8(u8 taskId)
|
|||
}
|
||||
}
|
||||
|
||||
static void sub_81DA488(u8 taskId)
|
||||
static void Task_LinkContest_CommunicateAIMonsEm(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!sub_80FC670(&gTasks[taskId].data[12]))
|
||||
if (!LinkContest_TryLinkStandby(&gTasks[taskId].data[12]))
|
||||
return;
|
||||
|
||||
switch (gTasks[taskId].data[0])
|
||||
|
|
@ -309,7 +322,7 @@ static void sub_81DA488(u8 taskId)
|
|||
if (!IsLinkTaskFinished())
|
||||
return;
|
||||
|
||||
if (sub_80FC4F4(&gContestMons[gNumLinkContestPlayers], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1)
|
||||
if (LinkContest_SendBlock(&gContestMons[gNumLinkContestPlayers], (CONTESTANT_COUNT - gNumLinkContestPlayers) * sizeof(struct ContestPokemon)) == 1)
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
else
|
||||
|
|
@ -318,11 +331,11 @@ static void sub_81DA488(u8 taskId)
|
|||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_80FC530(0))
|
||||
if (LinkContest_GetBlockReceived(0))
|
||||
{
|
||||
memcpy(&gContestMons[gNumLinkContestPlayers], gBlockRecvBuffer[0], (4 - gNumLinkContestPlayers) * sizeof(struct ContestPokemon));
|
||||
for (i = gNumLinkContestPlayers; i < 4; i++)
|
||||
sub_80DFA08(&gContestMons[i], gLinkPlayers[0].language);
|
||||
memcpy(&gContestMons[gNumLinkContestPlayers], gBlockRecvBuffer[0], (CONTESTANT_COUNT - gNumLinkContestPlayers) * sizeof(struct ContestPokemon));
|
||||
for (i = gNumLinkContestPlayers; i < CONTESTANT_COUNT; i++)
|
||||
StripPlayerAndMonNamesForLinkContest(&gContestMons[i], gLinkPlayers[0].language);
|
||||
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,10 +6,12 @@
|
|||
#include "contest.h"
|
||||
#include "contest_util.h"
|
||||
#include "contest_link.h"
|
||||
#include "contest_painting.h"
|
||||
#include "data.h"
|
||||
#include "decompress.h"
|
||||
#include "dma3.h"
|
||||
#include "event_data.h"
|
||||
#include "event_object_movement.h"
|
||||
#include "field_specials.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "graphics.h"
|
||||
|
|
@ -27,6 +29,7 @@
|
|||
#include "save.h"
|
||||
#include "scanline_effect.h"
|
||||
#include "script.h"
|
||||
#include "script_menu.h"
|
||||
#include "sound.h"
|
||||
#include "string_util.h"
|
||||
#include "strings.h"
|
||||
|
|
@ -36,6 +39,7 @@
|
|||
#include "tv.h"
|
||||
#include "util.h"
|
||||
#include "window.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/field_specials.h"
|
||||
#include "constants/game_stat.h"
|
||||
#include "constants/rgb.h"
|
||||
|
|
@ -117,8 +121,8 @@ static void CB2_ShowContestResults(void);
|
|||
static void VBlankCB_ShowContestResults(void);
|
||||
static void Task_SlideContestResultsBg(u8);
|
||||
static void Task_WaitForLinkPartnersBeforeResults(u8);
|
||||
static void sub_80F5F14(u8);
|
||||
static void sub_80F5F30(u8);
|
||||
static void Task_CommunicateMonIdxsForResults(u8);
|
||||
static void Task_WaitForLinkPartnerMonIdxs(u8);
|
||||
static void Task_AnnouncePreliminaryResults(u8);
|
||||
static void Task_FlashStarsAndHearts(u8);
|
||||
static void Task_ShowPreliminaryResults(u8);
|
||||
|
|
@ -150,15 +154,22 @@ static void Task_CreateConfetti(u8);
|
|||
static void SpriteCB_TextBoxSlideIn(struct Sprite *);
|
||||
static void SpriteCB_TextBoxSlideOut(struct Sprite *);
|
||||
static void SpriteCB_EndTextBoxSlideIn(struct Sprite *);
|
||||
static void sub_80F8508(u8);
|
||||
static void sub_80F8568(u8);
|
||||
static void sub_80F8584(u8);
|
||||
static void sub_80F85A0(u8);
|
||||
static void sub_80F85BC(u8);
|
||||
static void sub_80F86B8(u8);
|
||||
static void sub_80F878C(u8);
|
||||
static void sub_80F87B4(u8);
|
||||
static void Task_StartCommunication(u8);
|
||||
static void Task_StartCommunicateRngRS(u8);
|
||||
static void Task_StartCommunicateLeaderIdsRS(u8);
|
||||
static void Task_StartCommunicateCategoryRS(u8);
|
||||
static void Task_LinkContest_SetUpContestRS(u8);
|
||||
static void Task_LinkContest_CalculateTurnOrderRS(u8);
|
||||
static void Task_LinkContest_Disconnect(u8);
|
||||
static void Task_LinkContest_WaitDisconnect(u8);
|
||||
static void SpriteCB_Confetti(struct Sprite *sprite);
|
||||
static void Task_ShowContestEntryMonPic(u8 taskId);
|
||||
static void Task_LinkContestWaitForConnection(u8 taskId);
|
||||
|
||||
extern const u16 gObjectEventPalette8[];
|
||||
extern const u16 gObjectEventPalette17[];
|
||||
extern const u16 gObjectEventPalette33[];
|
||||
extern const u16 gObjectEventPalette34[];
|
||||
|
||||
static const u16 sUnknown_0858D6B0[] = INCBIN_U16("graphics/unknown/unknown_58D6B0.gbapal");
|
||||
static const u8 sUnknown_0858D6D0[] = INCBIN_U8("graphics/unknown/unknown_58D6D0.4bpp");
|
||||
|
|
@ -601,7 +612,7 @@ static void Task_ShowContestResults(u8 taskId)
|
|||
case 2:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
gTasks[taskId].tState++;
|
||||
}
|
||||
return;
|
||||
|
|
@ -645,17 +656,17 @@ static void Task_WaitForLinkPartnersBeforeResults(u8 taskId)
|
|||
{
|
||||
if (gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
CreateTask(sub_80F5F14, 0);
|
||||
CreateTask(Task_CommunicateMonIdxsForResults, 0);
|
||||
gTasks[taskId].func = TaskDummy;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80F5F14(u8 taskId)
|
||||
static void Task_CommunicateMonIdxsForResults(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FC998, sub_80F5F30);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonIdxs, Task_WaitForLinkPartnerMonIdxs);
|
||||
}
|
||||
|
||||
static void sub_80F5F30(u8 taskId)
|
||||
static void Task_WaitForLinkPartnerMonIdxs(u8 taskId)
|
||||
{
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
|
|
@ -974,7 +985,7 @@ static void Task_TryDisconnectLinkPartners(u8 taskId)
|
|||
if (!gTasks[taskId].data[10])
|
||||
{
|
||||
ShowLinkResultsTextBox(gText_CommunicationStandby);
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gTasks[taskId].func = Task_WaitForLinkPartnersDisconnect;
|
||||
}
|
||||
}
|
||||
|
|
@ -1717,7 +1728,7 @@ static void LoadContestResultsTilemaps(void)
|
|||
// Represented on results board as stars
|
||||
static u8 GetNumPreliminaryPoints(u8 monIndex, bool8 capPoints)
|
||||
{
|
||||
u32 condition = gContestMonConditions[monIndex] << 16;
|
||||
u32 condition = gContestMonRound1Points[monIndex] << 16;
|
||||
u32 numStars = condition / 0x3F;
|
||||
|
||||
if (numStars & 0xFFFF)
|
||||
|
|
@ -1965,7 +1976,7 @@ static void CalculateContestantsResultData(void)
|
|||
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
relativePoints = (gContestMonConditions[i] * 1000) / abs(highestPoints);
|
||||
relativePoints = (gContestMonRound1Points[i] * 1000) / abs(highestPoints);
|
||||
if (relativePoints % 10 > 4)
|
||||
relativePoints += 10;
|
||||
(*sContestResults->monResults)[i].relativePreliminaryPoints = relativePoints / 10;
|
||||
|
|
@ -2205,8 +2216,8 @@ void TryEnterContestMon(void)
|
|||
// Nonzero eligibility can still be non-eligibile, if mon is fainted or egg
|
||||
if (eligibility)
|
||||
{
|
||||
sub_80DAB8C(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
|
||||
sub_80DB09C(gSpecialVar_ContestCategory);
|
||||
SetContestants(gSpecialVar_ContestCategory, gSpecialVar_ContestRank);
|
||||
CalculateRound1Points(gSpecialVar_ContestCategory);
|
||||
}
|
||||
|
||||
gSpecialVar_Result = eligibility;
|
||||
|
|
@ -2323,7 +2334,7 @@ void GetContestMonConditionRanking(void)
|
|||
|
||||
for (i = 0, rank = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (gContestMonConditions[gSpecialVar_0x8006] < gContestMonConditions[i])
|
||||
if (gContestMonRound1Points[gSpecialVar_0x8006] < gContestMonRound1Points[i])
|
||||
rank++;
|
||||
}
|
||||
|
||||
|
|
@ -2332,7 +2343,7 @@ void GetContestMonConditionRanking(void)
|
|||
|
||||
void GetContestMonCondition(void)
|
||||
{
|
||||
gSpecialVar_0x8004 = gContestMonConditions[gSpecialVar_0x8006];
|
||||
gSpecialVar_0x8004 = gContestMonRound1Points[gSpecialVar_0x8006];
|
||||
}
|
||||
|
||||
void GetContestWinnerId(void)
|
||||
|
|
@ -2404,107 +2415,106 @@ void GetContestPlayerId(void)
|
|||
gSpecialVar_0x8004 = gContestPlayerMonIndex;
|
||||
}
|
||||
|
||||
void ContestLinkTransfer(u8 taskId)
|
||||
void ContestLinkTransfer(u8 category)
|
||||
{
|
||||
u8 newTaskId;
|
||||
ScriptContext2_Enable();
|
||||
newTaskId = CreateTask(sub_80FC580, 0);
|
||||
SetTaskFuncWithFollowupFunc(newTaskId, sub_80FC580, sub_80F8508);
|
||||
gTasks[newTaskId].data[9] = taskId;
|
||||
newTaskId = CreateTask(Task_LinkContest_Init, 0);
|
||||
SetTaskFuncWithFollowupFunc(newTaskId, Task_LinkContest_Init, Task_StartCommunication);
|
||||
gTasks[newTaskId].data[9] = category;
|
||||
}
|
||||
|
||||
static void sub_80F8508(u8 taskId)
|
||||
static void Task_StartCommunication(u8 taskId)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
|
||||
{
|
||||
sub_80DA8C8(gContestMonPartyIndex);
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FC6BC, sub_80F8568);
|
||||
CreateContestMonFromParty(gContestMonPartyIndex);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateMonsRS, Task_StartCommunicateRngRS);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_80DA8C8(gContestMonPartyIndex);
|
||||
gTasks[taskId].func = sub_81D9DE4;
|
||||
CreateContestMonFromParty(gContestMonPartyIndex);
|
||||
gTasks[taskId].func = Task_LinkContest_StartCommunicationEm;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80F8568(u8 taskId)
|
||||
static void Task_StartCommunicateRngRS(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FC804, sub_80F8584);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRngRS, Task_StartCommunicateLeaderIdsRS);
|
||||
}
|
||||
|
||||
static void sub_80F8584(u8 taskId)
|
||||
static void Task_StartCommunicateLeaderIdsRS(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FCE48, sub_80F85A0);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateLeaderIdsRS, Task_StartCommunicateCategoryRS);
|
||||
}
|
||||
|
||||
static void sub_80F85A0(u8 taskId)
|
||||
static void Task_StartCommunicateCategoryRS(u8 taskId)
|
||||
{
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FC894, sub_80F85BC);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateCategoryRS, Task_LinkContest_SetUpContestRS);
|
||||
}
|
||||
|
||||
static void sub_80F85BC(u8 taskId)
|
||||
static void Task_LinkContest_SetUpContestRS(u8 taskId)
|
||||
{
|
||||
u8 i;
|
||||
u8 sp0[4];
|
||||
u8 sp4[4];
|
||||
u8 categories[CONTESTANT_COUNT];
|
||||
u8 leaderIds[CONTESTANT_COUNT];
|
||||
|
||||
memset(sp0, 0, sizeof(sp0));
|
||||
memset(sp4, 0, sizeof(sp4));
|
||||
memset(categories, 0, sizeof(categories));
|
||||
memset(leaderIds, 0, sizeof(leaderIds));
|
||||
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
sp0[i] = gTasks[taskId].data[i + 1];
|
||||
categories[i] = gTasks[taskId].data[i + 1];
|
||||
|
||||
for (i = 0; i < gNumLinkContestPlayers;)
|
||||
{
|
||||
i++;
|
||||
if (i >= gNumLinkContestPlayers || sp0[0] != sp0[i])
|
||||
break;
|
||||
}
|
||||
// Ensure all players are doing the same category
|
||||
for (i = 0; i < gNumLinkContestPlayers && categories[0] == categories[i]; i++)
|
||||
;
|
||||
|
||||
if (i == gNumLinkContestPlayers)
|
||||
gSpecialVar_0x8004 = 0;
|
||||
gSpecialVar_0x8004 = FALSE; // Category choices the same
|
||||
else
|
||||
gSpecialVar_0x8004 = 1;
|
||||
gSpecialVar_0x8004 = TRUE; // Category choices differ
|
||||
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
sp4[i] = gTasks[taskId].data[i + 5];
|
||||
leaderIds[i] = gTasks[taskId].data[i + 5];
|
||||
|
||||
gUnknown_02039F2B = sub_80F86E0(sp4);
|
||||
sub_80DB09C(gSpecialVar_ContestCategory);
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FCF40, sub_80F86B8);
|
||||
gContestLinkLeaderIndex = LinkContest_GetLeaderIndex(leaderIds);
|
||||
CalculateRound1Points(gSpecialVar_ContestCategory);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateRound1Points, Task_LinkContest_CalculateTurnOrderRS);
|
||||
}
|
||||
|
||||
static void sub_80F86B8(u8 taskId)
|
||||
static void Task_LinkContest_CalculateTurnOrderRS(u8 taskId)
|
||||
{
|
||||
SortContestants(FALSE);
|
||||
SetTaskFuncWithFollowupFunc(taskId, sub_80FCFD0, sub_80F8714);
|
||||
SetTaskFuncWithFollowupFunc(taskId, Task_LinkContest_CommunicateTurnOrder, Task_LinkContest_FinalizeConnection);
|
||||
}
|
||||
|
||||
u8 sub_80F86E0(u8 *arg0)
|
||||
u8 LinkContest_GetLeaderIndex(u8 *ids)
|
||||
{
|
||||
int i;
|
||||
u8 result = 0;
|
||||
u8 leaderIdx = 0;
|
||||
|
||||
for (i = 1; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
if (arg0[result] < arg0[i])
|
||||
result = i;
|
||||
if (ids[leaderIdx] < ids[i])
|
||||
leaderIdx = i;
|
||||
}
|
||||
|
||||
return result;
|
||||
return leaderIdx;
|
||||
}
|
||||
|
||||
void sub_80F8714(u8 taskId)
|
||||
void Task_LinkContest_FinalizeConnection(u8 taskId)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (gSpecialVar_0x8004 == 1)
|
||||
if (gSpecialVar_0x8004 == TRUE)
|
||||
{
|
||||
// Link partner data doesn't agree, disconnect
|
||||
if (IsLinkTaskFinished())
|
||||
gTasks[taskId].func = sub_80F878C;
|
||||
gTasks[taskId].func = Task_LinkContest_Disconnect;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Succesfully connected
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
StringGetEnd10(gContestMons[i].nickname);
|
||||
|
||||
|
|
@ -2515,13 +2525,13 @@ void sub_80F8714(u8 taskId)
|
|||
}
|
||||
}
|
||||
|
||||
static void sub_80F878C(u8 taskId)
|
||||
static void Task_LinkContest_Disconnect(u8 taskId)
|
||||
{
|
||||
sub_800AC34();
|
||||
gTasks[taskId].func = sub_80F87B4;
|
||||
SetCloseLinkCallback();
|
||||
gTasks[taskId].func = Task_LinkContest_WaitDisconnect;
|
||||
}
|
||||
|
||||
static void sub_80F87B4(u8 taskId)
|
||||
static void Task_LinkContest_WaitDisconnect(u8 taskId)
|
||||
{
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
|
|
@ -2530,3 +2540,479 @@ static void sub_80F87B4(u8 taskId)
|
|||
EnableBothScriptContexts();
|
||||
}
|
||||
}
|
||||
|
||||
void SetContestTrainerGfxIds(void)
|
||||
{
|
||||
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId;
|
||||
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_1 - VARS_START] = gContestMons[1].trainerGfxId;
|
||||
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId;
|
||||
}
|
||||
|
||||
// Unused
|
||||
void sub_80F8814(void)
|
||||
{
|
||||
u16 var1;
|
||||
u8 var0 = gSpecialVar_0x8005;
|
||||
switch (var0)
|
||||
{
|
||||
case 0:
|
||||
var1 = 3;
|
||||
break;
|
||||
case 1:
|
||||
var1 = 4;
|
||||
break;
|
||||
case 2:
|
||||
var1 = 5;
|
||||
break;
|
||||
default:
|
||||
var1 = 100;
|
||||
break;
|
||||
}
|
||||
|
||||
gSpecialVar_0x8004 = var1;
|
||||
}
|
||||
|
||||
void BufferContestTrainerAndMonNames(void)
|
||||
{
|
||||
BufferContestantTrainerName();
|
||||
BufferContestantMonNickname();
|
||||
BufferContestantMonSpecies();
|
||||
}
|
||||
|
||||
// Unused
|
||||
void DoesContestCategoryHaveWinner(void)
|
||||
{
|
||||
int contestWinner;
|
||||
switch (gSpecialVar_ContestCategory)
|
||||
{
|
||||
case CONTEST_CATEGORY_COOL:
|
||||
contestWinner = 8;
|
||||
break;
|
||||
case CONTEST_CATEGORY_BEAUTY:
|
||||
contestWinner = 9;
|
||||
break;
|
||||
case CONTEST_CATEGORY_CUTE:
|
||||
contestWinner = 10;
|
||||
break;
|
||||
case CONTEST_CATEGORY_SMART:
|
||||
contestWinner = 11;
|
||||
break;
|
||||
case CONTEST_CATEGORY_TOUGH:
|
||||
default:
|
||||
contestWinner = 12;
|
||||
break;
|
||||
}
|
||||
|
||||
if (gSaveBlock1Ptr->contestWinners[contestWinner].species == SPECIES_NONE)
|
||||
gSpecialVar_0x8004 = FALSE;
|
||||
else
|
||||
gSpecialVar_0x8004 = TRUE;
|
||||
}
|
||||
|
||||
void SaveMuseumContestPainting(void)
|
||||
{
|
||||
sub_80DEDA8(0xFF);
|
||||
}
|
||||
|
||||
void ShouldReadyContestArtist(void)
|
||||
{
|
||||
if (gContestFinalStandings[gContestPlayerMonIndex] == 0
|
||||
&& gSpecialVar_ContestRank == CONTEST_RANK_MASTER
|
||||
&& gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
|
||||
{
|
||||
gSpecialVar_0x8004 = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
gSpecialVar_0x8004 = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
u8 CountPlayerContestPaintings(void)
|
||||
{
|
||||
int i;
|
||||
u8 count = 0;
|
||||
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
if (gSaveBlock1Ptr->contestWinners[8 + i].species)
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
// Unused
|
||||
void sub_80F8970(void)
|
||||
{
|
||||
s16 conditions[CONTESTANT_COUNT];
|
||||
int i, j;
|
||||
s16 condition;
|
||||
s8 var0;
|
||||
u8 var2;
|
||||
u8 r8;
|
||||
u8 r7;
|
||||
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
conditions[i] = gContestMonRound1Points[i];
|
||||
|
||||
for (i = 0; i < CONTESTANT_COUNT - 1; i++)
|
||||
{
|
||||
for (j = CONTESTANT_COUNT - 1; j > i; j--)
|
||||
{
|
||||
if (conditions[j - 1] < conditions[j])
|
||||
{
|
||||
int temp;
|
||||
SWAP(conditions[j], conditions[j - 1], temp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
condition = conditions[gSpecialVar_0x8006];
|
||||
var0 = 0;
|
||||
r8 = 0;
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (conditions[i] == condition)
|
||||
{
|
||||
var0++;
|
||||
if (i == gSpecialVar_0x8006)
|
||||
r8 = var0;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (conditions[i] == condition)
|
||||
break;
|
||||
}
|
||||
|
||||
r7 = i;
|
||||
var2 = r8;
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (condition == gContestMonRound1Points[i])
|
||||
{
|
||||
if (var2 == 1)
|
||||
break;
|
||||
var2--;
|
||||
}
|
||||
}
|
||||
|
||||
StringCopy(gStringVar1, gContestMons[i].nickname);
|
||||
StringCopy(gStringVar2, gContestMons[i].trainerName);
|
||||
sub_81DB5AC(gStringVar2);
|
||||
|
||||
if (var0 == 1)
|
||||
gSpecialVar_0x8006 = r7;
|
||||
else if (r8 == var0)
|
||||
gSpecialVar_0x8006 = r7;
|
||||
else
|
||||
gSpecialVar_0x8006 = r7 + 4;
|
||||
}
|
||||
|
||||
static void ExitContestWinnerPainting(void)
|
||||
{
|
||||
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
void ShowContestWinnerPainting(void)
|
||||
{
|
||||
SetMainCallback2(CB2_ContestPainting);
|
||||
gMain.savedCallback = ExitContestWinnerPainting;
|
||||
}
|
||||
|
||||
void SetLinkContestPlayerGfx(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
int version = (u8)gLinkPlayers[i].version;
|
||||
if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
|
||||
{
|
||||
if (gLinkPlayers[i].gender == MALE)
|
||||
gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_BRENDAN;
|
||||
else
|
||||
gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_MAY;
|
||||
}
|
||||
}
|
||||
|
||||
VarSet(VAR_OBJ_GFX_ID_0, gContestMons[0].trainerGfxId);
|
||||
VarSet(VAR_OBJ_GFX_ID_1, gContestMons[1].trainerGfxId);
|
||||
VarSet(VAR_OBJ_GFX_ID_2, gContestMons[2].trainerGfxId);
|
||||
VarSet(VAR_OBJ_GFX_ID_3, gContestMons[3].trainerGfxId);
|
||||
}
|
||||
}
|
||||
|
||||
void LoadLinkContestPlayerPalettes(void)
|
||||
{
|
||||
int i;
|
||||
u8 objectEventId;
|
||||
int version;
|
||||
struct Sprite *sprite;
|
||||
static const u8 sContestantLocalIds[CONTESTANT_COUNT] = { 3, 4, 5, 14 };
|
||||
|
||||
gReservedSpritePaletteCount = 12;
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
objectEventId = GetObjectEventIdByLocalIdAndMap(sContestantLocalIds[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
|
||||
sprite = &gSprites[gObjectEvents[objectEventId].spriteId];
|
||||
sprite->oam.paletteNum = 6 + i;
|
||||
version = (u8)gLinkPlayers[i].version;
|
||||
if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
|
||||
{
|
||||
if (gLinkPlayers[i].gender == MALE)
|
||||
LoadPalette(gObjectEventPalette33, 0x160 + i * 0x10, 0x20);
|
||||
else
|
||||
LoadPalette(gObjectEventPalette34, 0x160 + i * 0x10, 0x20);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkPlayers[i].gender == MALE)
|
||||
LoadPalette(gObjectEventPalette8, 0x160 + i * 0x10, 0x20);
|
||||
else
|
||||
LoadPalette(gObjectEventPalette17, 0x160 + i * 0x10, 0x20);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 GiveMonArtistRibbon(void)
|
||||
{
|
||||
u8 hasArtistRibbon;
|
||||
|
||||
hasArtistRibbon = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
|
||||
if (!hasArtistRibbon
|
||||
&& gContestFinalStandings[gContestPlayerMonIndex] == 0
|
||||
&& gSpecialVar_ContestRank == CONTEST_RANK_MASTER
|
||||
&& gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
|
||||
{
|
||||
hasArtistRibbon = 1;
|
||||
SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon);
|
||||
if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
|
||||
TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 IsContestDebugActive(void)
|
||||
{
|
||||
return FALSE; // gUnknown_0203856C in pokeruby
|
||||
}
|
||||
|
||||
void ShowContestEntryMonPic(void)
|
||||
{
|
||||
const struct CompressedSpritePalette *palette;
|
||||
u32 personality, otId;
|
||||
u16 species;
|
||||
u8 spriteId;
|
||||
u8 taskId;
|
||||
u8 left, top;
|
||||
|
||||
if (FindTaskIdByFunc(Task_ShowContestEntryMonPic) == 0xFF)
|
||||
{
|
||||
AllocateMonSpritesGfx();
|
||||
left = 10;
|
||||
top = 3;
|
||||
species = gContestMons[gSpecialVar_0x8006].species;
|
||||
personality = gContestMons[gSpecialVar_0x8006].personality;
|
||||
otId = gContestMons[gSpecialVar_0x8006].otId;
|
||||
taskId = CreateTask(Task_ShowContestEntryMonPic, 0x50);
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[1] = species;
|
||||
if (gSpecialVar_0x8006 == gContestPlayerMonIndex)
|
||||
HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
|
||||
else
|
||||
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
|
||||
|
||||
palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
|
||||
LoadCompressedSpritePalette(palette);
|
||||
SetMultiuseSpriteTemplateToPokemon(species, 1);
|
||||
gMultiuseSpriteTemplate.paletteTag = palette->tag;
|
||||
spriteId = CreateSprite(&gMultiuseSpriteTemplate, (left + 1) * 8 + 32, (top * 8) + 40, 0);
|
||||
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER))
|
||||
DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
|
||||
}
|
||||
|
||||
gTasks[taskId].data[2] = spriteId;
|
||||
gTasks[taskId].data[3] = left;
|
||||
gTasks[taskId].data[4] = top;
|
||||
gSprites[spriteId].callback = SpriteCallbackDummy;
|
||||
gSprites[spriteId].oam.priority = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void HideContestEntryMonPic(void)
|
||||
{
|
||||
u8 taskId = FindTaskIdByFunc(Task_ShowContestEntryMonPic);
|
||||
if (taskId != 0xFF)
|
||||
{
|
||||
gTasks[taskId].data[0]++;
|
||||
FreeMonSpritesGfx();
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_ShowContestEntryMonPic(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
struct Sprite *sprite;
|
||||
|
||||
switch(task->data[0])
|
||||
{
|
||||
case 0:
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
task->data[5] = CreateWindowFromRect(10, 3, 8, 8);
|
||||
SetStandardWindowBorderStyle(task->data[5], 1);
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
case 3:
|
||||
sprite = &gSprites[task->data[2]];
|
||||
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
|
||||
|
||||
if(sprite->oam.affineMode)
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
|
||||
DestroySprite(sprite);
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 4:
|
||||
ClearToTransparentAndRemoveWindow(gTasks[taskId].data[5]);
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void GetContestMultiplayerId(void)
|
||||
{
|
||||
if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
&& gNumLinkContestPlayers == CONTESTANT_COUNT
|
||||
&& !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
|
||||
gSpecialVar_Result = GetMultiplayerId();
|
||||
else
|
||||
gSpecialVar_Result = MAX_LINK_PLAYERS;
|
||||
}
|
||||
|
||||
void GenerateContestRand(void)
|
||||
{
|
||||
u16 random;
|
||||
u16 *result;
|
||||
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
|
||||
random = gContestRngValue >> 16;
|
||||
result = &gSpecialVar_Result;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = &gSpecialVar_Result;
|
||||
random = Random();
|
||||
}
|
||||
*result = random % *result;
|
||||
}
|
||||
|
||||
u16 GetContestRand(void)
|
||||
{
|
||||
gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
|
||||
return gContestRngValue >> 16;
|
||||
}
|
||||
|
||||
bool8 LinkContestWaitForConnection(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
{
|
||||
CreateTask(Task_LinkContestWaitForConnection, 5);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_LinkContestWaitForConnection(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
SetLinkStandbyCallback();
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
default:
|
||||
if (IsLinkTaskFinished() == 1)
|
||||
{
|
||||
EnableBothScriptContexts();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void LinkContestTryShowWirelessIndicator(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
LoadWirelessStatusIndicatorSpriteGfx();
|
||||
CreateWirelessStatusIndicatorSprite(8, 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LinkContestTryHideWirelessIndicator(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers)
|
||||
DestroyWirelessStatusIndicatorSprite();
|
||||
}
|
||||
}
|
||||
|
||||
bool8 IsContestWithRSPlayer(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void ClearLinkContestFlags(void)
|
||||
{
|
||||
gLinkContestFlags = 0;
|
||||
}
|
||||
|
||||
bool8 IsWirelessContest(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -203,7 +203,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 3,
|
||||
.tough = 4,
|
||||
.sheen = 50,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -232,7 +231,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 1,
|
||||
.tough = 2,
|
||||
.sheen = 60,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -261,7 +259,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 12,
|
||||
.tough = 4,
|
||||
.sheen = 70,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -290,7 +287,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 2,
|
||||
.tough = 7,
|
||||
.sheen = 80,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -319,7 +315,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 5,
|
||||
.tough = 4,
|
||||
.sheen = 90,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -348,7 +343,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 7,
|
||||
.tough = 8,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -377,7 +371,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 2,
|
||||
.tough = 2,
|
||||
.sheen = 50,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -406,7 +399,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 10,
|
||||
.tough = 10,
|
||||
.sheen = 60,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -435,7 +427,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 5,
|
||||
.tough = 18,
|
||||
.sheen = 70,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -464,7 +455,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 2,
|
||||
.tough = 7,
|
||||
.sheen = 80,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -493,7 +483,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 8,
|
||||
.tough = 1,
|
||||
.sheen = 90,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -522,7 +511,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 10,
|
||||
.tough = 2,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -551,7 +539,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 2,
|
||||
.tough = 10,
|
||||
.sheen = 50,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -580,7 +567,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 10,
|
||||
.tough = 5,
|
||||
.sheen = 60,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -609,7 +595,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 1,
|
||||
.tough = 1,
|
||||
.sheen = 70,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -638,7 +623,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 10,
|
||||
.tough = 4,
|
||||
.sheen = 50,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -667,7 +651,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 10,
|
||||
.tough = 4,
|
||||
.sheen = 60,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -696,7 +679,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 2,
|
||||
.tough = 3,
|
||||
.sheen = 70,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -725,7 +707,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 5,
|
||||
.tough = 10,
|
||||
.sheen = 80,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -754,7 +735,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 3,
|
||||
.tough = 10,
|
||||
.sheen = 90,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -783,7 +763,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 1,
|
||||
.tough = 5,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -812,7 +791,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 6,
|
||||
.tough = 2,
|
||||
.sheen = 90,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -841,7 +819,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 5,
|
||||
.tough = 3,
|
||||
.sheen = 80,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -870,7 +847,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 8,
|
||||
.tough = 10,
|
||||
.sheen = 70,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -899,7 +875,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 10,
|
||||
.tough = 20,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -928,7 +903,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 85,
|
||||
.tough = 35,
|
||||
.sheen = 110,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -957,7 +931,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 10,
|
||||
.tough = 25,
|
||||
.sheen = 120,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -986,7 +959,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 65,
|
||||
.tough = 25,
|
||||
.sheen = 130,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1015,7 +987,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 10,
|
||||
.tough = 100,
|
||||
.sheen = 140,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1044,7 +1015,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 35,
|
||||
.tough = 35,
|
||||
.sheen = 150,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1073,7 +1043,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 40,
|
||||
.tough = 40,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1102,7 +1071,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 10,
|
||||
.tough = 25,
|
||||
.sheen = 110,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1131,7 +1099,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 30,
|
||||
.tough = 25,
|
||||
.sheen = 120,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1160,7 +1127,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 40,
|
||||
.tough = 30,
|
||||
.sheen = 130,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1189,7 +1155,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 75,
|
||||
.tough = 35,
|
||||
.sheen = 140,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1218,7 +1183,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 30,
|
||||
.tough = 25,
|
||||
.sheen = 150,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1247,7 +1211,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 25,
|
||||
.tough = 15,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1276,7 +1239,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 60,
|
||||
.tough = 20,
|
||||
.sheen = 110,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1305,7 +1267,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 15,
|
||||
.tough = 75,
|
||||
.sheen = 120,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1334,7 +1295,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 30,
|
||||
.tough = 20,
|
||||
.sheen = 100,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1363,7 +1323,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 20,
|
||||
.tough = 20,
|
||||
.sheen = 110,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1392,7 +1351,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 20,
|
||||
.tough = 20,
|
||||
.sheen = 120,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1421,7 +1379,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 30,
|
||||
.tough = 45,
|
||||
.sheen = 130,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1450,7 +1407,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 20,
|
||||
.tough = 45,
|
||||
.sheen = 140,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1479,7 +1435,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 20,
|
||||
.tough = 20,
|
||||
.sheen = 150,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1508,7 +1463,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 25,
|
||||
.tough = 25,
|
||||
.sheen = 140,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1537,7 +1491,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 20,
|
||||
.tough = 20,
|
||||
.sheen = 130,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1566,7 +1519,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 45,
|
||||
.tough = 20,
|
||||
.sheen = 120,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1595,7 +1547,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 100,
|
||||
.tough = 90,
|
||||
.sheen = 200,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1624,7 +1575,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 35,
|
||||
.tough = 70,
|
||||
.sheen = 210,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1653,7 +1603,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 70,
|
||||
.tough = 70,
|
||||
.sheen = 220,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1682,7 +1631,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 75,
|
||||
.tough = 40,
|
||||
.sheen = 230,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1711,7 +1659,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 70,
|
||||
.tough = 70,
|
||||
.sheen = 240,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1740,7 +1687,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 80,
|
||||
.tough = 100,
|
||||
.sheen = 250,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1769,7 +1715,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 70,
|
||||
.tough = 90,
|
||||
.sheen = 200,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1798,7 +1743,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 50,
|
||||
.tough = 65,
|
||||
.sheen = 210,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1827,7 +1771,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 60,
|
||||
.tough = 50,
|
||||
.sheen = 220,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1856,7 +1799,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 45,
|
||||
.tough = 70,
|
||||
.sheen = 230,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1885,7 +1827,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 40,
|
||||
.tough = 100,
|
||||
.sheen = 240,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1914,7 +1855,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 50,
|
||||
.tough = 30,
|
||||
.sheen = 250,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1943,7 +1883,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 50,
|
||||
.tough = 160,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -1972,7 +1911,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 70,
|
||||
.tough = 50,
|
||||
.sheen = 210,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2001,7 +1939,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 35,
|
||||
.tough = 35,
|
||||
.sheen = 220,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2030,7 +1967,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 100,
|
||||
.tough = 80,
|
||||
.sheen = 200,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2059,7 +1995,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 35,
|
||||
.tough = 100,
|
||||
.sheen = 210,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2088,7 +2023,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 50,
|
||||
.tough = 100,
|
||||
.sheen = 220,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2117,7 +2051,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 40,
|
||||
.tough = 95,
|
||||
.sheen = 230,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2146,7 +2079,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 50,
|
||||
.tough = 100,
|
||||
.sheen = 240,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2175,7 +2107,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 80,
|
||||
.tough = 80,
|
||||
.sheen = 250,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2204,7 +2135,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 40,
|
||||
.tough = 110,
|
||||
.sheen = 240,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2233,7 +2163,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 25,
|
||||
.tough = 80,
|
||||
.sheen = 230,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2262,7 +2191,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 35,
|
||||
.tough = 40,
|
||||
.sheen = 220,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2291,7 +2219,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 40,
|
||||
.tough = 160,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2320,7 +2247,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 150,
|
||||
.tough = 160,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2349,7 +2275,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 185,
|
||||
.tough = 60,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2378,7 +2303,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 110,
|
||||
.tough = 150,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2407,7 +2331,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 30,
|
||||
.tough = 90,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2436,7 +2359,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 230,
|
||||
.tough = 80,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2465,7 +2387,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 130,
|
||||
.tough = 40,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2494,7 +2415,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 150,
|
||||
.tough = 160,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2523,7 +2443,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 130,
|
||||
.tough = 170,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2552,7 +2471,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 75,
|
||||
.tough = 100,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2581,7 +2499,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 40,
|
||||
.tough = 190,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2610,7 +2527,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 240,
|
||||
.tough = 140,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2639,7 +2555,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 35,
|
||||
.tough = 50,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2668,7 +2583,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 115,
|
||||
.tough = 120,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2697,7 +2611,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 220,
|
||||
.tough = 210,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2726,7 +2639,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 80,
|
||||
.tough = 180,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2755,7 +2667,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 130,
|
||||
.tough = 130,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2784,7 +2695,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 120,
|
||||
.tough = 150,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2813,7 +2723,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 170,
|
||||
.tough = 80,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2842,7 +2751,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 150,
|
||||
.tough = 120,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2871,7 +2779,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 120,
|
||||
.tough = 80,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2900,7 +2807,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 80,
|
||||
.tough = 150,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2929,7 +2835,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 110,
|
||||
.tough = 170,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
},
|
||||
|
|
@ -2958,7 +2863,6 @@ const struct ContestPokemon gContestOpponents[] =
|
|||
.smart = 80,
|
||||
.tough = 190,
|
||||
.sheen = 255,
|
||||
.unk2C = {0},
|
||||
.personality = 0,
|
||||
.otId = 0xFFFF
|
||||
}
|
||||
|
|
|
|||
|
|
@ -558,7 +558,7 @@ static void sub_8024BC8(u8 taskId)
|
|||
case 2:
|
||||
if (!sub_802A770())
|
||||
{
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
gUnknown_02022C98->unk0C++;
|
||||
}
|
||||
break;
|
||||
|
|
@ -671,7 +671,7 @@ static void sub_8024E38(void)
|
|||
gUnknown_02022C98->unk10++;
|
||||
break;
|
||||
case 1:
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
gUnknown_02022C98->unk10++;
|
||||
break;
|
||||
case 2:
|
||||
|
|
@ -690,7 +690,7 @@ static void sub_8024E38(void)
|
|||
case 4:
|
||||
if (++gUnknown_02022C98->unk30 > 5)
|
||||
{
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
gUnknown_02022C98->unk10++;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1081,7 +1081,7 @@ static void sub_8025644(void)
|
|||
switch (gUnknown_02022C98->unk10)
|
||||
{
|
||||
case 0:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
sub_80292E0(7);
|
||||
gUnknown_02022C98->unk10++;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -192,7 +192,7 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1)
|
|||
}
|
||||
break;
|
||||
case 4:
|
||||
sub_800ABF4(0);
|
||||
SetCloseLinkCallbackAndType(0);
|
||||
*arg0 = 5;
|
||||
break;
|
||||
case 5:
|
||||
|
|
@ -403,7 +403,7 @@ static void sub_81D5084(u8 taskId)
|
|||
break;
|
||||
case 15:
|
||||
data->unkE = EReader_IsReceivedDataValid((struct EReaderTrainerHillSet *)gDecompressionBuffer);
|
||||
sub_800ABF4(data->unkE);
|
||||
SetCloseLinkCallbackAndType(data->unkE);
|
||||
data->unk8 = 16;
|
||||
break;
|
||||
case 16:
|
||||
|
|
|
|||
|
|
@ -194,7 +194,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
|
|||
switch (task->data[0])
|
||||
{
|
||||
case 0:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
|
|
@ -227,7 +227,7 @@ void Task_ReturnToFieldRecordMixing(u8 taskId)
|
|||
switch (task->data[0])
|
||||
{
|
||||
case 0:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
|
|
@ -625,7 +625,7 @@ static void Task_ReturnToWorldFromLinkRoom(u8 taskId)
|
|||
case 1:
|
||||
if (!PaletteFadeActive() && BGMusicStopped())
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
data[0]++;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -3864,7 +3864,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
|
|||
case 7:
|
||||
if (IsLinkTaskFinished() == 1)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
|
|
@ -3877,7 +3877,7 @@ static void Task_LinkRetireStatusWithBattleTowerPartner(u8 taskId)
|
|||
case 9:
|
||||
if (gWirelessCommType == 0)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
}
|
||||
gBattleTypeFlags = sBattleTowerMultiBattleTypeFlags;
|
||||
EnableBothScriptContexts();
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
#include "battle_tower.h"
|
||||
#include "field_specials.h"
|
||||
#include "battle.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "main.h"
|
||||
#include "window.h"
|
||||
#include "menu.h"
|
||||
|
|
|
|||
|
|
@ -461,12 +461,12 @@ const u32 gContestMiscGfx[] = INCBIN_U32("graphics/contest/misc.4bpp.lz");
|
|||
|
||||
const u32 gContestAudienceGfx[] = INCBIN_U32("graphics/contest/audience.4bpp.lz");
|
||||
|
||||
const u32 gUnknown_08C19168[] = INCBIN_U32("graphics/contest/faces.4bpp.lz");
|
||||
const u32 gContestFaces_Gfx[] = INCBIN_U32("graphics/contest/faces.4bpp.lz");
|
||||
|
||||
const u32 gContestJudgeSymbolsGfx[] = INCBIN_U32("graphics/contest/judge_symbols.4bpp.lz");
|
||||
const u32 gContest3Pal[] = INCBIN_U32("graphics/contest/judge_symbols.gbapal.lz");
|
||||
|
||||
const u8 gTiles_8C19450[] = INCBIN_U8("graphics/contest/heart.4bpp");
|
||||
const u8 gContestSliderHeart_Gfx[] = INCBIN_U8("graphics/contest/slider_heart.4bpp");
|
||||
|
||||
const u32 gUnknownGfx_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.4bpp.lz");
|
||||
const u32 gUnknownPal_C19470[] = INCBIN_U32("graphics/unknown/unknown_C19470.gbapal.lz");
|
||||
|
|
|
|||
156
src/link.c
156
src/link.c
|
|
@ -75,9 +75,9 @@ u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
|
|||
u32 gLinkStatus;
|
||||
bool8 gLinkDummy1; // Never read
|
||||
bool8 gLinkDummy2; // Never read
|
||||
bool8 gUnknown_030030EC[MAX_LINK_PLAYERS];
|
||||
bool8 gUnknown_030030F0[MAX_LINK_PLAYERS];
|
||||
u16 gUnknown_030030F4;
|
||||
bool8 gReadyToExitStandby[MAX_LINK_PLAYERS];
|
||||
bool8 gReadyToCloseLink[MAX_LINK_PLAYERS];
|
||||
u16 gReadyCloseLinkType; // Never read
|
||||
u8 gSuppressLinkErrorMessage;
|
||||
bool8 gWirelessCommType;
|
||||
bool8 gSavedLinkPlayerCount;
|
||||
|
|
@ -114,7 +114,7 @@ EWRAM_DATA struct {
|
|||
u8 lastSendQueueCount;
|
||||
u8 unk_06;
|
||||
} sLinkErrorBuffer = {};
|
||||
static EWRAM_DATA u16 sUnknown_02022B08 = 0;
|
||||
static EWRAM_DATA u16 sReadyCloseLinkAttempts = 0; // never read
|
||||
static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL;
|
||||
|
||||
// Static ROM declarations
|
||||
|
|
@ -135,12 +135,12 @@ static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
|
|||
static void LinkCB_RequestPlayerDataExchange(void);
|
||||
static void Task_PrintTestData(u8 taskId);
|
||||
|
||||
static void sub_800AC80(void);
|
||||
static void sub_800ACAC(void);
|
||||
static void sub_800AD5C(void);
|
||||
static void sub_800AD88(void);
|
||||
static void sub_800AE30(void);
|
||||
static void sub_800AE5C(void);
|
||||
static void LinkCB_ReadyCloseLink(void);
|
||||
static void LinkCB_WaitCloseLink(void);
|
||||
static void LinkCB_ReadyCloseLinkWithJP(void);
|
||||
static void LinkCB_WaitCloseLinkWithJP(void);
|
||||
static void LinkCB_Standby(void);
|
||||
static void LinkCB_StandbyForAll(void);
|
||||
|
||||
static void CheckErrorStatus(void);
|
||||
static void CB2_PrintErrorMessage(void);
|
||||
|
|
@ -379,7 +379,7 @@ void OpenLink(void)
|
|||
sDummy1 = FALSE;
|
||||
gLinkDummy2 = FALSE;
|
||||
gLinkDummy1 = FALSE;
|
||||
gUnknown_030030F4 = 0;
|
||||
gReadyCloseLinkType = 0;
|
||||
CreateTask(Task_TriggerHandshake, 2);
|
||||
}
|
||||
else
|
||||
|
|
@ -390,8 +390,8 @@ void OpenLink(void)
|
|||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
gRemoteLinkPlayersNotReceived[i] = TRUE;
|
||||
gUnknown_030030F0[i] = FALSE;
|
||||
gUnknown_030030EC[i] = FALSE;
|
||||
gReadyToCloseLink[i] = FALSE;
|
||||
gReadyToExitStandby[i] = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -467,7 +467,7 @@ static void LinkTestProcessKeyInput(void)
|
|||
}
|
||||
if (gMain.newKeys & SELECT_BUTTON)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
}
|
||||
if (gLinkTestDebugValuesEnabled)
|
||||
{
|
||||
|
|
@ -630,16 +630,16 @@ static void ProcessRecvCmds(u8 unused)
|
|||
}
|
||||
}
|
||||
break;
|
||||
case LINKCMD_0x5FFF:
|
||||
gUnknown_030030F0[i] = TRUE;
|
||||
case LINKCMD_READY_CLOSE_LINK:
|
||||
gReadyToCloseLink[i] = TRUE;
|
||||
break;
|
||||
case LINKCMD_0x2FFE:
|
||||
gUnknown_030030EC[i] = TRUE;
|
||||
case LINKCMD_READY_EXIT_STANDBY:
|
||||
gReadyToExitStandby[i] = TRUE;
|
||||
break;
|
||||
case LINKCMD_0xAAAA:
|
||||
sub_800A418();
|
||||
break;
|
||||
case LINKCMD_0xCCCC:
|
||||
case LINKCMD_SEND_BLOCK_REQ:
|
||||
SendBlock(0, sBlockRequests[gRecvCmds[i][1]].address, sBlockRequests[gRecvCmds[i][1]].size);
|
||||
break;
|
||||
case LINKCMD_SEND_HELD_KEYS_2:
|
||||
|
|
@ -657,8 +657,8 @@ static void BuildSendCmd(u16 command)
|
|||
gSendCmd[0] = LINKCMD_SEND_LINK_TYPE;
|
||||
gSendCmd[1] = gLinkType;
|
||||
break;
|
||||
case LINKCMD_0x2FFE:
|
||||
gSendCmd[0] = LINKCMD_0x2FFE;
|
||||
case LINKCMD_READY_EXIT_STANDBY:
|
||||
gSendCmd[0] = LINKCMD_READY_EXIT_STANDBY;
|
||||
break;
|
||||
case LINKCMD_SEND_HELD_KEYS:
|
||||
gSendCmd[0] = LINKCMD_SEND_HELD_KEYS;
|
||||
|
|
@ -694,13 +694,13 @@ static void BuildSendCmd(u16 command)
|
|||
gSendCmd[0] = LINKCMD_0xAAAB;
|
||||
gSendCmd[1] = gSpecialVar_ItemId;
|
||||
break;
|
||||
case LINKCMD_0xCCCC:
|
||||
gSendCmd[0] = LINKCMD_0xCCCC;
|
||||
case LINKCMD_SEND_BLOCK_REQ:
|
||||
gSendCmd[0] = LINKCMD_SEND_BLOCK_REQ;
|
||||
gSendCmd[1] = gBlockRequestType;
|
||||
break;
|
||||
case LINKCMD_0x5FFF:
|
||||
gSendCmd[0] = LINKCMD_0x5FFF;
|
||||
gSendCmd[1] = gUnknown_030030F4;
|
||||
case LINKCMD_READY_CLOSE_LINK:
|
||||
gSendCmd[0] = LINKCMD_READY_CLOSE_LINK;
|
||||
gSendCmd[1] = gReadyCloseLinkType;
|
||||
break;
|
||||
case LINKCMD_0x5566:
|
||||
gSendCmd[0] = LINKCMD_0x5566;
|
||||
|
|
@ -1065,16 +1065,16 @@ bool8 SendBlock(u8 unused, const void *src, u16 size)
|
|||
return InitBlockSend(src, size);
|
||||
}
|
||||
|
||||
bool8 sub_800A4D8(u8 a0)
|
||||
bool8 SendBlockRequest(u8 blockReqType)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
return sub_8010100(a0);
|
||||
return Rfu_SendBlockRequest(blockReqType);
|
||||
}
|
||||
if (gLinkCallback == NULL)
|
||||
{
|
||||
gBlockRequestType = a0;
|
||||
BuildSendCmd(LINKCMD_0xCCCC);
|
||||
gBlockRequestType = blockReqType;
|
||||
BuildSendCmd(LINKCMD_SEND_BLOCK_REQ);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
|
|
@ -1423,70 +1423,70 @@ static u8 GetDummy2(void)
|
|||
return sDummy2;
|
||||
}
|
||||
|
||||
void sub_800ABF4(u16 a0)
|
||||
void SetCloseLinkCallbackAndType(u16 type)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_SetCloseLinkCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkCallback == NULL)
|
||||
{
|
||||
gLinkCallback = sub_800AC80;
|
||||
gLinkCallback = LinkCB_ReadyCloseLink;
|
||||
gLinkDummy1 = FALSE;
|
||||
gUnknown_030030F4 = a0;
|
||||
gReadyCloseLinkType = type;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800AC34(void)
|
||||
void SetCloseLinkCallback(void)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_SetCloseLinkCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkCallback != NULL)
|
||||
{
|
||||
sUnknown_02022B08++;
|
||||
sReadyCloseLinkAttempts++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gLinkCallback = sub_800AC80;
|
||||
gLinkCallback = LinkCB_ReadyCloseLink;
|
||||
gLinkDummy1 = FALSE;
|
||||
gUnknown_030030F4 = 0;
|
||||
gReadyCloseLinkType = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AC80(void)
|
||||
static void LinkCB_ReadyCloseLink(void)
|
||||
{
|
||||
if (gLastRecvQueueCount == 0)
|
||||
{
|
||||
BuildSendCmd(LINKCMD_0x5FFF);
|
||||
gLinkCallback = sub_800ACAC;
|
||||
BuildSendCmd(LINKCMD_READY_CLOSE_LINK);
|
||||
gLinkCallback = LinkCB_WaitCloseLink;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800ACAC(void)
|
||||
static void LinkCB_WaitCloseLink(void)
|
||||
{
|
||||
int i;
|
||||
unsigned count;
|
||||
u8 linkPlayerCount;
|
||||
|
||||
linkPlayerCount = GetLinkPlayerCount();
|
||||
// Wait for all players to be ready
|
||||
u8 linkPlayerCount = GetLinkPlayerCount();
|
||||
count = 0;
|
||||
for (i = 0; i < linkPlayerCount; i++)
|
||||
{
|
||||
if (gUnknown_030030F0[i])
|
||||
{
|
||||
if (gReadyToCloseLink[i])
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
if (count == linkPlayerCount)
|
||||
{
|
||||
// All ready, close link
|
||||
gBattleTypeFlags &= ~BATTLE_TYPE_20;
|
||||
gLinkVSyncDisabled = TRUE;
|
||||
CloseLink();
|
||||
|
|
@ -1495,37 +1495,38 @@ static void sub_800ACAC(void)
|
|||
}
|
||||
}
|
||||
|
||||
void sub_800AD10(void)
|
||||
// Used instead of SetCloseLinkCallback when disconnecting from an attempt to link with a foreign game
|
||||
void SetCloseLinkCallbackHandleJP(void)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_SetCloseLinkCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkCallback != NULL)
|
||||
{
|
||||
sUnknown_02022B08++;
|
||||
sReadyCloseLinkAttempts++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gLinkCallback = sub_800AD5C;
|
||||
gLinkCallback = LinkCB_ReadyCloseLinkWithJP;
|
||||
gLinkDummy1 = FALSE;
|
||||
gUnknown_030030F4 = 0;
|
||||
gReadyCloseLinkType = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AD5C(void)
|
||||
static void LinkCB_ReadyCloseLinkWithJP(void)
|
||||
{
|
||||
if (gLastRecvQueueCount == 0)
|
||||
{
|
||||
BuildSendCmd(LINKCMD_0x5FFF);
|
||||
gLinkCallback = sub_800AD88;
|
||||
BuildSendCmd(LINKCMD_READY_CLOSE_LINK);
|
||||
gLinkCallback = LinkCB_WaitCloseLinkWithJP;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AD88(void)
|
||||
static void LinkCB_WaitCloseLinkWithJP(void)
|
||||
{
|
||||
int i;
|
||||
unsigned count;
|
||||
|
|
@ -1533,19 +1534,21 @@ static void sub_800AD88(void)
|
|||
|
||||
linkPlayerCount = GetLinkPlayerCount();
|
||||
count = 0;
|
||||
|
||||
// Wait for all non-foreign players to be ready
|
||||
for (i = 0; i < linkPlayerCount; i++)
|
||||
{
|
||||
// Rather than communicate with the foreign game
|
||||
// just assume they're ready to disconnect
|
||||
if (gLinkPlayers[i].language == LANGUAGE_JAPANESE)
|
||||
{
|
||||
count++;
|
||||
}
|
||||
else if (gUnknown_030030F0[i])
|
||||
{
|
||||
else if (gReadyToCloseLink[i])
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
if (count == linkPlayerCount)
|
||||
{
|
||||
// All ready, close link
|
||||
gBattleTypeFlags &= ~BATTLE_TYPE_20;
|
||||
gLinkVSyncDisabled = TRUE;
|
||||
CloseLink();
|
||||
|
|
@ -1554,50 +1557,47 @@ static void sub_800AD88(void)
|
|||
}
|
||||
}
|
||||
|
||||
void sub_800ADF8(void)
|
||||
void SetLinkStandbyCallback(void)
|
||||
{
|
||||
if (gWirelessCommType == TRUE)
|
||||
{
|
||||
sub_8010434();
|
||||
Rfu_SetLinkStandbyCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkCallback == NULL)
|
||||
{
|
||||
gLinkCallback = sub_800AE30;
|
||||
gLinkCallback = LinkCB_Standby;
|
||||
}
|
||||
gLinkDummy1 = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AE30(void)
|
||||
static void LinkCB_Standby(void)
|
||||
{
|
||||
if (gLastRecvQueueCount == 0)
|
||||
{
|
||||
BuildSendCmd(LINKCMD_0x2FFE);
|
||||
gLinkCallback = sub_800AE5C;
|
||||
BuildSendCmd(LINKCMD_READY_EXIT_STANDBY);
|
||||
gLinkCallback = LinkCB_StandbyForAll;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AE5C(void)
|
||||
static void LinkCB_StandbyForAll(void)
|
||||
{
|
||||
u8 i;
|
||||
u8 linkPlayerCount;
|
||||
|
||||
linkPlayerCount = GetLinkPlayerCount();
|
||||
u8 linkPlayerCount = GetLinkPlayerCount();
|
||||
for (i = 0; i < linkPlayerCount; i++)
|
||||
{
|
||||
if (!gUnknown_030030EC[i])
|
||||
{
|
||||
if (!gReadyToExitStandby[i])
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If true, all players ready to exit standby
|
||||
if (i == linkPlayerCount)
|
||||
{
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
gUnknown_030030EC[i] = FALSE;
|
||||
}
|
||||
gReadyToExitStandby[i] = FALSE;
|
||||
|
||||
gLinkCallback = NULL;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
109
src/link_rfu_2.c
109
src/link_rfu_2.c
|
|
@ -148,10 +148,7 @@ static const u8 sUnknown_082ED6A5[] = {
|
|||
0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
|
||||
};
|
||||
|
||||
static const struct {
|
||||
u8 *buffer;
|
||||
u32 size;
|
||||
} sUnknown_082ED6B8[] = {
|
||||
static const struct BlockRequest sBlockRequests[] = {
|
||||
{ gBlockSendBuffer, 200 },
|
||||
{ gBlockSendBuffer, 200 },
|
||||
{ gBlockSendBuffer, 100 },
|
||||
|
|
@ -1072,15 +1069,15 @@ static void RfuHandleReceiveCommand(u8 unused)
|
|||
}
|
||||
}
|
||||
break;
|
||||
case RFU_COMMAND_0xA100:
|
||||
Rfu_InitBlockSend(sUnknown_082ED6B8[gRecvCmds[i][1]].buffer, (u16)sUnknown_082ED6B8[gRecvCmds[i][1]].size);
|
||||
case RFU_COMMAND_SEND_BLOCK_REQ:
|
||||
Rfu_InitBlockSend(sBlockRequests[gRecvCmds[i][1]].address, (u16)sBlockRequests[gRecvCmds[i][1]].size);
|
||||
break;
|
||||
case RFU_COMMAND_0x5F00:
|
||||
Rfu.unk_e4[i] = 1;
|
||||
case RFU_COMMAND_READY_CLOSE_LINK:
|
||||
Rfu.readyCloseLink[i] = TRUE;
|
||||
break;
|
||||
case RFU_COMMAND_0x6600:
|
||||
case RFU_COMMAND_READY_EXIT_STANDBY:
|
||||
if (Rfu.unk_100 == gRecvCmds[i][1])
|
||||
Rfu.unk_e9[i] = 1;
|
||||
Rfu.readyExitStandby[i] = TRUE;
|
||||
break;
|
||||
case RFU_COMMAND_0xED00:
|
||||
if (Rfu.parentChild == MODE_CHILD)
|
||||
|
|
@ -1194,9 +1191,9 @@ static void RfuPrepareSendBuffer(u16 command)
|
|||
gSendCmd[1] = Rfu.sendBlock.count;
|
||||
gSendCmd[2] = Rfu.sendBlock.owner + 0x80;
|
||||
break;
|
||||
case RFU_COMMAND_0xA100:
|
||||
case RFU_COMMAND_SEND_BLOCK_REQ:
|
||||
if (AreNoPlayersReceiving())
|
||||
gSendCmd[1] = Rfu.unk_5a;
|
||||
gSendCmd[1] = Rfu.blockRequestType;
|
||||
break;
|
||||
case RFU_COMMAND_0x7700:
|
||||
case RFU_COMMAND_0x7800:
|
||||
|
|
@ -1207,8 +1204,8 @@ static void RfuPrepareSendBuffer(u16 command)
|
|||
for (i = 0; i < RFU_CHILD_MAX; i++)
|
||||
buff[i] = Rfu.linkPlayerIdx[i];
|
||||
break;
|
||||
case RFU_COMMAND_0x6600:
|
||||
case RFU_COMMAND_0x5F00:
|
||||
case RFU_COMMAND_READY_EXIT_STANDBY:
|
||||
case RFU_COMMAND_READY_CLOSE_LINK:
|
||||
gSendCmd[1] = Rfu.unk_100;
|
||||
break;
|
||||
case RFU_COMMAND_0x4400:
|
||||
|
|
@ -1327,10 +1324,10 @@ static void SendLastBlock(void)
|
|||
Rfu.callback = NULL;
|
||||
}
|
||||
|
||||
bool8 sub_8010100(u8 blockRequestType)
|
||||
bool8 Rfu_SendBlockRequest(u8 type)
|
||||
{
|
||||
Rfu.unk_5a = blockRequestType;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0xA100);
|
||||
Rfu.blockRequestType = type;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_SEND_BLOCK_REQ);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
|
@ -1343,14 +1340,14 @@ static void sub_801011C(void)
|
|||
Rfu.callback = NULL;
|
||||
}
|
||||
|
||||
static void sub_8010148(void)
|
||||
static void DisconnectRfu(void)
|
||||
{
|
||||
rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag);
|
||||
rfu_waitREQComplete();
|
||||
sub_801011C();
|
||||
}
|
||||
|
||||
static void sub_8010168(void)
|
||||
static void TryDisconnectRfu(void)
|
||||
{
|
||||
if (Rfu.parentChild == MODE_CHILD)
|
||||
{
|
||||
|
|
@ -1358,7 +1355,7 @@ static void sub_8010168(void)
|
|||
Rfu.unk_ce4 = 2;
|
||||
}
|
||||
else
|
||||
Rfu.callback = sub_8010148;
|
||||
Rfu.callback = DisconnectRfu;
|
||||
}
|
||||
|
||||
void LinkRfu_FatalError(void)
|
||||
|
|
@ -1368,131 +1365,137 @@ void LinkRfu_FatalError(void)
|
|||
Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag;
|
||||
}
|
||||
|
||||
static void sub_80101CC(void)
|
||||
// RFU equivalent of LinkCB_WaitCloseLink
|
||||
static void WaitAllReadyToCloseLink(void)
|
||||
{
|
||||
s32 i;
|
||||
u8 playerCount = Rfu.playerCount;
|
||||
s32 count = 0;
|
||||
|
||||
// Wait for all players to be ready
|
||||
for (i = 0; i < MAX_RFU_PLAYERS; i++)
|
||||
{
|
||||
if (Rfu.unk_e4[i])
|
||||
if (Rfu.readyCloseLink[i])
|
||||
count++;
|
||||
}
|
||||
if (count == playerCount)
|
||||
{
|
||||
// All ready, close link
|
||||
gBattleTypeFlags &= ~BATTLE_TYPE_20;
|
||||
if (Rfu.parentChild == MODE_CHILD)
|
||||
{
|
||||
Rfu.errorState = 3;
|
||||
sub_8010168();
|
||||
TryDisconnectRfu();
|
||||
}
|
||||
else
|
||||
Rfu.callback = sub_8010168;
|
||||
Rfu.callback = TryDisconnectRfu;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_801022C(void)
|
||||
static void SendReadyCloseLink(void)
|
||||
{
|
||||
if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0)
|
||||
{
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0x5F00);
|
||||
Rfu.callback = sub_80101CC;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_READY_CLOSE_LINK);
|
||||
Rfu.callback = WaitAllReadyToCloseLink;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8010264(u8 taskId)
|
||||
static void Task_TryReadyCloseLink(u8 taskId)
|
||||
{
|
||||
if (Rfu.callback == NULL)
|
||||
{
|
||||
Rfu.unk_cd9 = 1;
|
||||
Rfu.callback = sub_801022C;
|
||||
Rfu.callback = SendReadyCloseLink;
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
}
|
||||
|
||||
void task_add_05_task_del_08FA224_when_no_RfuFunc(void)
|
||||
void Rfu_SetCloseLinkCallback(void)
|
||||
{
|
||||
if (!FuncIsActiveTask(sub_8010264))
|
||||
CreateTask(sub_8010264, 5);
|
||||
if (!FuncIsActiveTask(Task_TryReadyCloseLink))
|
||||
CreateTask(Task_TryReadyCloseLink, 5);
|
||||
}
|
||||
|
||||
static void sub_80102B8(void)
|
||||
static void SendReadyExitStandbyUntilAllReady(void)
|
||||
{
|
||||
u8 playerCount;
|
||||
u8 i;
|
||||
|
||||
if (GetMultiplayerId() != 0)
|
||||
{
|
||||
if (Rfu.recvQueue.count == 0 && Rfu.unk_fe > 60)
|
||||
if (Rfu.recvQueue.count == 0 && Rfu.resendExitStandbyTimer > 60)
|
||||
{
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
|
||||
Rfu.unk_fe = 0;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
|
||||
Rfu.resendExitStandbyTimer = 0;
|
||||
}
|
||||
}
|
||||
playerCount = GetLinkPlayerCount();
|
||||
for (i = 0; i < playerCount; i++)
|
||||
{
|
||||
if (Rfu.unk_e9[i] == 0)
|
||||
if (!Rfu.readyExitStandby[i])
|
||||
break;
|
||||
}
|
||||
if (i == playerCount)
|
||||
{
|
||||
for (i = 0; i < MAX_RFU_PLAYERS; i++)
|
||||
Rfu.unk_e9[i] = 0;
|
||||
Rfu.readyExitStandby[i] = FALSE;
|
||||
Rfu.unk_100++;
|
||||
Rfu.callback = NULL;
|
||||
}
|
||||
Rfu.unk_fe++;
|
||||
Rfu.resendExitStandbyTimer++;
|
||||
}
|
||||
|
||||
static void sub_8010358(void)
|
||||
static void LinkLeaderReadyToExitStandby(void)
|
||||
{
|
||||
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
|
||||
{
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
|
||||
Rfu.callback = sub_80102B8;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
|
||||
Rfu.callback = SendReadyExitStandbyUntilAllReady;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8010390(void)
|
||||
// RFU equivalent of LinkCB_Standby and LinkCB_StandbyForAll
|
||||
static void Rfu_LinkStandby(void)
|
||||
{
|
||||
u8 i;
|
||||
u8 playerCount;
|
||||
|
||||
if (GetMultiplayerId() != 0)
|
||||
{
|
||||
// Not link leader, send exit standby when ready
|
||||
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
|
||||
{
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
|
||||
Rfu.callback = sub_80102B8;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
|
||||
Rfu.callback = SendReadyExitStandbyUntilAllReady;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Link leader, wait for all members to send exit ready
|
||||
playerCount = GetLinkPlayerCount();
|
||||
for (i = 1; i < playerCount; i++)
|
||||
{
|
||||
if (Rfu.unk_e9[i] == 0)
|
||||
if (!Rfu.readyExitStandby[i])
|
||||
break;
|
||||
}
|
||||
if (i == playerCount)
|
||||
{
|
||||
if (Rfu.recvQueue.count == 0 && gSendCmd[0] == 0)
|
||||
{
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0x6600);
|
||||
Rfu.callback = sub_8010358;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_READY_EXIT_STANDBY);
|
||||
Rfu.callback = LinkLeaderReadyToExitStandby;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8010434(void)
|
||||
void Rfu_SetLinkStandbyCallback(void)
|
||||
{
|
||||
if (Rfu.callback == NULL)
|
||||
{
|
||||
Rfu.callback = sub_8010390;
|
||||
Rfu.unk_fe = 0;
|
||||
Rfu.callback = Rfu_LinkStandby;
|
||||
Rfu.resendExitStandbyTimer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1724,8 +1727,8 @@ static void sub_801084C(u8 taskId)
|
|||
{
|
||||
if (AreNoPlayersReceiving())
|
||||
{
|
||||
Rfu.unk_5a = 0;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_0xA100);
|
||||
Rfu.blockRequestType = 0;
|
||||
RfuPrepareSendBuffer(RFU_COMMAND_SEND_BLOCK_REQ);
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -208,7 +208,7 @@ static void CB2_MysteryEventMenu(void)
|
|||
{
|
||||
if (GetLinkPlayerDataExchangeStatusTimed(2, 2) == EXCHANGE_DIFF_SELECTIONS)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
GetEventLoadMessage(gStringVar4, 1);
|
||||
PrintMysteryMenuText(0, gStringVar4, 1, 2, 1);
|
||||
gMain.state = 13;
|
||||
|
|
@ -249,7 +249,7 @@ static void CB2_MysteryEventMenu(void)
|
|||
gMain.state++;
|
||||
break;
|
||||
case 10:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gMain.state++;
|
||||
break;
|
||||
case 11:
|
||||
|
|
|
|||
|
|
@ -1284,7 +1284,7 @@ void task00_mystery_gift(u8 taskId)
|
|||
switch (mevent_client_do_exec(&data->curPromptWindowId))
|
||||
{
|
||||
case 6:
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_SetCloseLinkCallback();
|
||||
data->prevPromptWindowId = data->curPromptWindowId;
|
||||
data->state = 13;
|
||||
break;
|
||||
|
|
@ -1647,7 +1647,7 @@ void task00_mystery_gift(u8 taskId)
|
|||
}
|
||||
break;
|
||||
case 33:
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_SetCloseLinkCallback();
|
||||
StringCopy(gStringVar1, gLinkPlayers[1].name);
|
||||
data->state = 34;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
#include "save.h"
|
||||
#include "save_location.h"
|
||||
#include "script.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "secret_base.h"
|
||||
#include "sound.h"
|
||||
#include "start_menu.h"
|
||||
|
|
|
|||
|
|
@ -4499,8 +4499,8 @@ void CreateSecretBaseEnemyParty(struct SecretBase *secretBaseRecord)
|
|||
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * 4 + j]);
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * 4 + j]].pp);
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_MOVE1 + j, &gBattleResources->secretBase->party.moves[i * MAX_MON_MOVES + j]);
|
||||
SetMonData(&gEnemyParty[i], MON_DATA_PP1 + j, &gBattleMoves[gBattleResources->secretBase->party.moves[i * MAX_MON_MOVES + j]].pp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1463,7 +1463,7 @@ static bool32 sub_802BC60(void)
|
|||
case 4:
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
gUnknown_02022CFC->unkA++;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
#include "hall_of_fame.h"
|
||||
#include "load_save.h"
|
||||
#include "overworld.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "tv.h"
|
||||
#include "constants/heal_locations.h"
|
||||
#include "constants/tv.h"
|
||||
|
|
|
|||
|
|
@ -501,7 +501,7 @@ static void Task_SendPacket(u8 taskId)
|
|||
break;
|
||||
case 1:
|
||||
if (GetMultiplayerId() == 0)
|
||||
sub_800A4D8(1);
|
||||
SendBlockRequest(1);
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 2:
|
||||
|
|
@ -973,7 +973,7 @@ static void Task_DoRecordMixing(u8 taskId)
|
|||
case 4: // Wait 10 frames
|
||||
if (++task->data[1] > 10)
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
task->data[0] ++;
|
||||
}
|
||||
break;
|
||||
|
|
@ -1005,7 +1005,7 @@ static void Task_DoRecordMixing(u8 taskId)
|
|||
}
|
||||
break;
|
||||
case 8:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
task->data[0] ++;
|
||||
break;
|
||||
case 9:
|
||||
|
|
|
|||
|
|
@ -912,7 +912,7 @@ void Task_LinkSave(u8 taskId)
|
|||
tState = 1;
|
||||
break;
|
||||
case 1:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
tState = 2;
|
||||
break;
|
||||
case 2:
|
||||
|
|
@ -949,7 +949,7 @@ void Task_LinkSave(u8 taskId)
|
|||
case 7:
|
||||
if (!tPartialSave)
|
||||
ClearContinueGameWarpStatus2();
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
tState = 8;
|
||||
break;
|
||||
case 8:
|
||||
|
|
@ -960,7 +960,7 @@ void Task_LinkSave(u8 taskId)
|
|||
}
|
||||
break;
|
||||
case 9:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
tState = 10;
|
||||
break;
|
||||
case 10:
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
#include "script.h"
|
||||
#include "script_menu.h"
|
||||
#include "script_movement.h"
|
||||
#include "script_pokemon_80F8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "shop.h"
|
||||
#include "slot_machine.h"
|
||||
#include "sound.h"
|
||||
|
|
@ -1475,7 +1475,7 @@ bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx)
|
|||
if (contestWinnerId != CONTEST_WINNER_ARTIST)
|
||||
SetContestWinnerForPainting(contestWinnerId);
|
||||
|
||||
ShowContestWinner();
|
||||
ShowContestWinnerPainting();
|
||||
ScriptContext1_Stop();
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
224
src/script_pokemon_util.c
Executable file
224
src/script_pokemon_util.c
Executable file
|
|
@ -0,0 +1,224 @@
|
|||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_gfx_sfx_util.h"
|
||||
#include "berry.h"
|
||||
#include "data.h"
|
||||
#include "daycare.h"
|
||||
#include "decompress.h"
|
||||
#include "event_data.h"
|
||||
#include "international_string_util.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "main.h"
|
||||
#include "menu.h"
|
||||
#include "overworld.h"
|
||||
#include "palette.h"
|
||||
#include "party_menu.h"
|
||||
#include "pokedex.h"
|
||||
#include "pokemon.h"
|
||||
#include "random.h"
|
||||
#include "script.h"
|
||||
#include "sprite.h"
|
||||
#include "string_util.h"
|
||||
#include "tv.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/tv.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
|
||||
static void CB2_ReturnFromChooseHalfParty(void);
|
||||
static void CB2_ReturnFromChooseBattleFrontierParty(void);
|
||||
|
||||
void HealPlayerParty(void)
|
||||
{
|
||||
u8 i, j;
|
||||
u8 ppBonuses;
|
||||
u8 arg[4];
|
||||
|
||||
// restore HP.
|
||||
for(i = 0; i < gPlayerPartyCount; i++)
|
||||
{
|
||||
u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
|
||||
arg[0] = maxHP;
|
||||
arg[1] = maxHP >> 8;
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_HP, arg);
|
||||
ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES);
|
||||
|
||||
// restore PP.
|
||||
for(j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j);
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg);
|
||||
}
|
||||
|
||||
// since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData.
|
||||
arg[0] = 0;
|
||||
arg[1] = 0;
|
||||
arg[2] = 0;
|
||||
arg[3] = 0;
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg);
|
||||
}
|
||||
}
|
||||
|
||||
u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3)
|
||||
{
|
||||
u16 nationalDexNum;
|
||||
int sentToPc;
|
||||
u8 heldItem[2];
|
||||
struct Pokemon mon;
|
||||
|
||||
CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
heldItem[0] = item;
|
||||
heldItem[1] = item >> 8;
|
||||
SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem);
|
||||
sentToPc = GiveMonToPlayer(&mon);
|
||||
nationalDexNum = SpeciesToNationalPokedexNum(species);
|
||||
|
||||
switch(sentToPc)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
|
||||
GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
|
||||
break;
|
||||
}
|
||||
return sentToPc;
|
||||
}
|
||||
|
||||
u8 ScriptGiveEgg(u16 species)
|
||||
{
|
||||
struct Pokemon mon;
|
||||
u8 isEgg;
|
||||
|
||||
CreateEgg(&mon, species, TRUE);
|
||||
isEgg = TRUE;
|
||||
SetMonData(&mon, MON_DATA_IS_EGG, &isEgg);
|
||||
|
||||
return GiveMonToPlayer(&mon);
|
||||
}
|
||||
|
||||
void HasEnoughMonsForDoubleBattle(void)
|
||||
{
|
||||
switch (GetMonsStateToDoubles())
|
||||
{
|
||||
case PLAYER_HAS_TWO_USABLE_MONS:
|
||||
gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS;
|
||||
break;
|
||||
case PLAYER_HAS_ONE_MON:
|
||||
gSpecialVar_Result = PLAYER_HAS_ONE_MON;
|
||||
break;
|
||||
case PLAYER_HAS_ONE_USABLE_MON:
|
||||
gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 CheckPartyMonHasHeldItem(u16 item)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
|
||||
if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item)
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 DoesPartyHaveEnigmaBerry(void)
|
||||
{
|
||||
bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
|
||||
if (hasItem == TRUE)
|
||||
GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1);
|
||||
|
||||
return hasItem;
|
||||
}
|
||||
|
||||
void CreateScriptedWildMon(u16 species, u8 level, u16 item)
|
||||
{
|
||||
u8 heldItem[2];
|
||||
|
||||
ZeroEnemyPartyMons();
|
||||
CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
if (item)
|
||||
{
|
||||
heldItem[0] = item;
|
||||
heldItem[1] = item >> 8;
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
|
||||
{
|
||||
if (monIndex > PARTY_SIZE)
|
||||
monIndex = gPlayerPartyCount - 1;
|
||||
|
||||
SetMonMoveSlot(&gPlayerParty[monIndex], move, slot);
|
||||
}
|
||||
|
||||
// Note: When control returns to the event script, gSpecialVar_Result will be
|
||||
// TRUE if the party selection was successful.
|
||||
void ChooseHalfPartyForBattle(void)
|
||||
{
|
||||
gMain.savedCallback = CB2_ReturnFromChooseHalfParty;
|
||||
VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER);
|
||||
InitChooseHalfPartyForBattle(0);
|
||||
}
|
||||
|
||||
static void CB2_ReturnFromChooseHalfParty(void)
|
||||
{
|
||||
switch (gSelectedOrderFromParty[0])
|
||||
{
|
||||
case 0:
|
||||
gSpecialVar_Result = FALSE;
|
||||
break;
|
||||
default:
|
||||
gSpecialVar_Result = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
void ChoosePartyForBattleFrontier(void)
|
||||
{
|
||||
gMain.savedCallback = CB2_ReturnFromChooseBattleFrontierParty;
|
||||
InitChooseHalfPartyForBattle(gSpecialVar_0x8004 + 1);
|
||||
}
|
||||
|
||||
static void CB2_ReturnFromChooseBattleFrontierParty(void)
|
||||
{
|
||||
switch (gSelectedOrderFromParty[0])
|
||||
{
|
||||
case 0:
|
||||
gSpecialVar_Result = FALSE;
|
||||
break;
|
||||
default:
|
||||
gSpecialVar_Result = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
void ReducePlayerPartyToSelectedMons(void)
|
||||
{
|
||||
struct Pokemon party[MAX_FRONTIER_PARTY_SIZE];
|
||||
int i;
|
||||
|
||||
CpuFill32(0, party, sizeof party);
|
||||
|
||||
// copy the selected pokemon according to the order.
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
|
||||
party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal
|
||||
|
||||
CpuFill32(0, gPlayerParty, sizeof gPlayerParty);
|
||||
|
||||
// overwrite the first 4 with the order copied to.
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
gPlayerParty[i] = party[i];
|
||||
|
||||
CalculatePlayerPartyCount();
|
||||
}
|
||||
|
|
@ -1,725 +0,0 @@
|
|||
#include "global.h"
|
||||
#include "battle.h"
|
||||
#include "battle_gfx_sfx_util.h"
|
||||
#include "berry.h"
|
||||
#include "contest.h"
|
||||
#include "contest_util.h"
|
||||
#include "contest_painting.h"
|
||||
#include "data.h"
|
||||
#include "daycare.h"
|
||||
#include "decompress.h"
|
||||
#include "event_data.h"
|
||||
#include "event_object_movement.h"
|
||||
#include "international_string_util.h"
|
||||
#include "link.h"
|
||||
#include "link_rfu.h"
|
||||
#include "main.h"
|
||||
#include "menu.h"
|
||||
#include "overworld.h"
|
||||
#include "palette.h"
|
||||
#include "party_menu.h"
|
||||
#include "pokedex.h"
|
||||
#include "pokemon.h"
|
||||
#include "random.h"
|
||||
#include "script.h"
|
||||
#include "script_menu.h"
|
||||
#include "sprite.h"
|
||||
#include "string_util.h"
|
||||
#include "tv.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/tv.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
|
||||
extern const u16 gObjectEventPalette8[];
|
||||
extern const u16 gObjectEventPalette17[];
|
||||
extern const u16 gObjectEventPalette33[];
|
||||
extern const u16 gObjectEventPalette34[];
|
||||
|
||||
static const u8 gUnknown_0858D8EC[] = { 3, 4, 5, 14 };
|
||||
|
||||
static void Task_ShowContestEntryMonPic(u8 taskId);
|
||||
static void Task_LinkContestWaitForConnection(u8 taskId);
|
||||
static void CB2_ReturnFromChooseHalfParty(void);
|
||||
static void CB2_ReturnFromChooseBattleFrontierParty(void);
|
||||
|
||||
void SetContestTrainerGfxIds(void)
|
||||
{
|
||||
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_0 - VARS_START] = gContestMons[0].trainerGfxId;
|
||||
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_1 - VARS_START] = gContestMons[1].trainerGfxId;
|
||||
gSaveBlock1Ptr->vars[VAR_OBJ_GFX_ID_2 - VARS_START] = gContestMons[2].trainerGfxId;
|
||||
}
|
||||
|
||||
// Unused
|
||||
void sub_80F8814(void)
|
||||
{
|
||||
u16 var1;
|
||||
u8 var0 = gSpecialVar_0x8005;
|
||||
switch (var0)
|
||||
{
|
||||
case 0:
|
||||
var1 = 3;
|
||||
break;
|
||||
case 1:
|
||||
var1 = 4;
|
||||
break;
|
||||
case 2:
|
||||
var1 = 5;
|
||||
break;
|
||||
default:
|
||||
var1 = 100;
|
||||
break;
|
||||
}
|
||||
|
||||
gSpecialVar_0x8004 = var1;
|
||||
}
|
||||
|
||||
void BufferContestTrainerAndMonNames(void)
|
||||
{
|
||||
BufferContestantTrainerName();
|
||||
BufferContestantMonNickname();
|
||||
BufferContestantMonSpecies();
|
||||
}
|
||||
|
||||
// Unused
|
||||
void DoesContestCategoryHaveWinner(void)
|
||||
{
|
||||
int contestWinner;
|
||||
switch (gSpecialVar_ContestCategory)
|
||||
{
|
||||
case CONTEST_CATEGORY_COOL:
|
||||
contestWinner = 8;
|
||||
break;
|
||||
case CONTEST_CATEGORY_BEAUTY:
|
||||
contestWinner = 9;
|
||||
break;
|
||||
case CONTEST_CATEGORY_CUTE:
|
||||
contestWinner = 10;
|
||||
break;
|
||||
case CONTEST_CATEGORY_SMART:
|
||||
contestWinner = 11;
|
||||
break;
|
||||
case CONTEST_CATEGORY_TOUGH:
|
||||
default:
|
||||
contestWinner = 12;
|
||||
break;
|
||||
}
|
||||
|
||||
if (gSaveBlock1Ptr->contestWinners[contestWinner].species == SPECIES_NONE)
|
||||
gSpecialVar_0x8004 = FALSE;
|
||||
else
|
||||
gSpecialVar_0x8004 = TRUE;
|
||||
}
|
||||
|
||||
void SaveMuseumContestPainting(void)
|
||||
{
|
||||
sub_80DEDA8(0xFF);
|
||||
}
|
||||
|
||||
void ShouldReadyContestArtist(void)
|
||||
{
|
||||
if (gContestFinalStandings[gContestPlayerMonIndex] == 0
|
||||
&& gSpecialVar_ContestRank == CONTEST_RANK_MASTER
|
||||
&& gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
|
||||
{
|
||||
gSpecialVar_0x8004 = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
gSpecialVar_0x8004 = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
u8 CountPlayerContestPaintings(void)
|
||||
{
|
||||
int i;
|
||||
u8 count = 0;
|
||||
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
if (gSaveBlock1Ptr->contestWinners[8 + i].species)
|
||||
count++;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
// Unused
|
||||
void sub_80F8970(void)
|
||||
{
|
||||
s16 conditions[CONTESTANT_COUNT];
|
||||
int i, j;
|
||||
s16 condition;
|
||||
s8 var0;
|
||||
u8 var2;
|
||||
u8 r8;
|
||||
u8 r7;
|
||||
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
conditions[i] = gContestMonConditions[i];
|
||||
|
||||
for (i = 0; i < CONTESTANT_COUNT - 1; i++)
|
||||
{
|
||||
for (j = CONTESTANT_COUNT - 1; j > i; j--)
|
||||
{
|
||||
if (conditions[j - 1] < conditions[j])
|
||||
{
|
||||
int temp;
|
||||
SWAP(conditions[j], conditions[j - 1], temp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
condition = conditions[gSpecialVar_0x8006];
|
||||
var0 = 0;
|
||||
r8 = 0;
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (conditions[i] == condition)
|
||||
{
|
||||
var0++;
|
||||
if (i == gSpecialVar_0x8006)
|
||||
r8 = var0;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (conditions[i] == condition)
|
||||
break;
|
||||
}
|
||||
|
||||
r7 = i;
|
||||
var2 = r8;
|
||||
for (i = 0; i < CONTESTANT_COUNT; i++)
|
||||
{
|
||||
if (condition == gContestMonConditions[i])
|
||||
{
|
||||
if (var2 == 1)
|
||||
break;
|
||||
var2--;
|
||||
}
|
||||
}
|
||||
|
||||
StringCopy(gStringVar1, gContestMons[i].nickname);
|
||||
StringCopy(gStringVar2, gContestMons[i].trainerName);
|
||||
sub_81DB5AC(gStringVar2);
|
||||
|
||||
if (var0 == 1)
|
||||
gSpecialVar_0x8006 = r7;
|
||||
else if (r8 == var0)
|
||||
gSpecialVar_0x8006 = r7;
|
||||
else
|
||||
gSpecialVar_0x8006 = r7 + 4;
|
||||
}
|
||||
|
||||
static void ShowContestWinnerCleanup(void)
|
||||
{
|
||||
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
void ShowContestWinner(void)
|
||||
{
|
||||
/*
|
||||
if(gUnknown_0203856C)
|
||||
{
|
||||
sub_80AAF30();
|
||||
gBattleStruct->unk15DDF = 1;
|
||||
gBattleStruct->unk15DDE = sub_80B2C4C(254, 0);
|
||||
Contest_SaveWinner(3);
|
||||
gUnknown_0203856C = 0;
|
||||
}
|
||||
*/
|
||||
|
||||
SetMainCallback2(CB2_ContestPainting);
|
||||
gMain.savedCallback = ShowContestWinnerCleanup;
|
||||
}
|
||||
|
||||
void SetLinkContestPlayerGfx(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
int version = (u8)gLinkPlayers[i].version;
|
||||
if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
|
||||
{
|
||||
if (gLinkPlayers[i].gender == MALE)
|
||||
gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_BRENDAN;
|
||||
else
|
||||
gContestMons[i].trainerGfxId = OBJ_EVENT_GFX_LINK_RS_MAY;
|
||||
}
|
||||
}
|
||||
|
||||
VarSet(VAR_OBJ_GFX_ID_0, gContestMons[0].trainerGfxId);
|
||||
VarSet(VAR_OBJ_GFX_ID_1, gContestMons[1].trainerGfxId);
|
||||
VarSet(VAR_OBJ_GFX_ID_2, gContestMons[2].trainerGfxId);
|
||||
VarSet(VAR_OBJ_GFX_ID_3, gContestMons[3].trainerGfxId);
|
||||
}
|
||||
}
|
||||
|
||||
void LoadLinkContestPlayerPalettes(void)
|
||||
{
|
||||
int i;
|
||||
u8 objectEventId;
|
||||
int version;
|
||||
struct Sprite *sprite;
|
||||
|
||||
gReservedSpritePaletteCount = 12;
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
for (i = 0; i < gNumLinkContestPlayers; i++)
|
||||
{
|
||||
objectEventId = GetObjectEventIdByLocalIdAndMap(gUnknown_0858D8EC[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
|
||||
sprite = &gSprites[gObjectEvents[objectEventId].spriteId];
|
||||
sprite->oam.paletteNum = 6 + i;
|
||||
version = (u8)gLinkPlayers[i].version;
|
||||
if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
|
||||
{
|
||||
if (gLinkPlayers[i].gender == MALE)
|
||||
LoadPalette(gObjectEventPalette33, 0x160 + i * 0x10, 0x20);
|
||||
else
|
||||
LoadPalette(gObjectEventPalette34, 0x160 + i * 0x10, 0x20);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkPlayers[i].gender == MALE)
|
||||
LoadPalette(gObjectEventPalette8, 0x160 + i * 0x10, 0x20);
|
||||
else
|
||||
LoadPalette(gObjectEventPalette17, 0x160 + i * 0x10, 0x20);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
u8 GiveMonArtistRibbon(void)
|
||||
{
|
||||
u8 hasArtistRibbon;
|
||||
|
||||
hasArtistRibbon = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
|
||||
if (!hasArtistRibbon
|
||||
&& gContestFinalStandings[gContestPlayerMonIndex] == 0
|
||||
&& gSpecialVar_ContestRank == CONTEST_RANK_MASTER
|
||||
&& gContestMonTotalPoints[gContestPlayerMonIndex] >= 800)
|
||||
{
|
||||
hasArtistRibbon = 1;
|
||||
SetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON, &hasArtistRibbon);
|
||||
if (GetRibbonCount(&gPlayerParty[gContestMonPartyIndex]) > NUM_CUTIES_RIBBONS)
|
||||
TryPutSpotTheCutiesOnAir(&gPlayerParty[gContestMonPartyIndex], MON_DATA_ARTIST_RIBBON);
|
||||
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 IsContestDebugActive(void)
|
||||
{
|
||||
return FALSE; // gUnknown_0203856C in pokeruby
|
||||
}
|
||||
|
||||
void ShowContestEntryMonPic(void)
|
||||
{
|
||||
const struct CompressedSpritePalette *palette;
|
||||
u32 personality, otId;
|
||||
u16 species;
|
||||
u8 spriteId;
|
||||
u8 taskId;
|
||||
u8 left, top;
|
||||
|
||||
if (FindTaskIdByFunc(Task_ShowContestEntryMonPic) == 0xFF)
|
||||
{
|
||||
AllocateMonSpritesGfx();
|
||||
left = 10;
|
||||
top = 3;
|
||||
species = gContestMons[gSpecialVar_0x8006].species;
|
||||
personality = gContestMons[gSpecialVar_0x8006].personality;
|
||||
otId = gContestMons[gSpecialVar_0x8006].otId;
|
||||
taskId = CreateTask(Task_ShowContestEntryMonPic, 0x50);
|
||||
gTasks[taskId].data[0] = 0;
|
||||
gTasks[taskId].data[1] = species;
|
||||
if (gSpecialVar_0x8006 == gContestPlayerMonIndex)
|
||||
HandleLoadSpecialPokePic_2(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
|
||||
else
|
||||
HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], gMonSpritesGfxPtr->sprites[1], species, personality);
|
||||
|
||||
palette = GetMonSpritePalStructFromOtIdPersonality(species, otId, personality);
|
||||
LoadCompressedSpritePalette(palette);
|
||||
SetMultiuseSpriteTemplateToPokemon(species, 1);
|
||||
gMultiuseSpriteTemplate.paletteTag = palette->tag;
|
||||
spriteId = CreateSprite(&gMultiuseSpriteTemplate, (left + 1) * 8 + 32, (top * 8) + 40, 0);
|
||||
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
if (!(gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER))
|
||||
DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
DoMonFrontSpriteAnimation(&gSprites[spriteId], species, FALSE, 0);
|
||||
}
|
||||
|
||||
gTasks[taskId].data[2] = spriteId;
|
||||
gTasks[taskId].data[3] = left;
|
||||
gTasks[taskId].data[4] = top;
|
||||
gSprites[spriteId].callback = SpriteCallbackDummy;
|
||||
gSprites[spriteId].oam.priority = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void HideContestEntryMonPic(void)
|
||||
{
|
||||
u8 taskId = FindTaskIdByFunc(Task_ShowContestEntryMonPic);
|
||||
if (taskId != 0xFF)
|
||||
{
|
||||
gTasks[taskId].data[0]++;
|
||||
FreeMonSpritesGfx();
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_ShowContestEntryMonPic(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
struct Sprite *sprite;
|
||||
|
||||
switch(task->data[0])
|
||||
{
|
||||
case 0:
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
task->data[5] = CreateWindowFromRect(10, 3, 8, 8);
|
||||
SetStandardWindowBorderStyle(task->data[5], 1);
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
case 3:
|
||||
sprite = &gSprites[task->data[2]];
|
||||
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
|
||||
|
||||
if(sprite->oam.affineMode)
|
||||
FreeOamMatrix(sprite->oam.matrixNum);
|
||||
|
||||
DestroySprite(sprite);
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 4:
|
||||
ClearToTransparentAndRemoveWindow(gTasks[taskId].data[5]);
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptGetMultiplayerId(void)
|
||||
{
|
||||
if ((gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
&& gNumLinkContestPlayers == CONTESTANT_COUNT
|
||||
&& !(gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS))
|
||||
gSpecialVar_Result = GetMultiplayerId();
|
||||
else
|
||||
gSpecialVar_Result = MAX_LINK_PLAYERS;
|
||||
}
|
||||
|
||||
void ScriptRandom(void)
|
||||
{
|
||||
u16 random;
|
||||
u16 *scriptPtr;
|
||||
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
|
||||
{
|
||||
gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
|
||||
random = gContestRngValue >> 16;
|
||||
scriptPtr = &gSpecialVar_Result;
|
||||
}
|
||||
else
|
||||
{
|
||||
scriptPtr = &gSpecialVar_Result;
|
||||
random = Random();
|
||||
}
|
||||
*scriptPtr = random % *scriptPtr;
|
||||
}
|
||||
|
||||
u16 GetContestRand(void)
|
||||
{
|
||||
gContestRngValue = ISO_RANDOMIZE1(gContestRngValue);
|
||||
return gContestRngValue >> 16;
|
||||
}
|
||||
|
||||
bool8 LinkContestWaitForConnection(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
{
|
||||
CreateTask(Task_LinkContestWaitForConnection, 5);
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void Task_LinkContestWaitForConnection(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
{
|
||||
case 0:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
sub_800ADF8();
|
||||
gTasks[taskId].data[0]++;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
default:
|
||||
if (IsLinkTaskFinished() == 1)
|
||||
{
|
||||
EnableBothScriptContexts();
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void LinkContestTryShowWirelessIndicator(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers)
|
||||
{
|
||||
LoadWirelessStatusIndicatorSpriteGfx();
|
||||
CreateWirelessStatusIndicatorSprite(8, 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LinkContestTryHideWirelessIndicator(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers)
|
||||
DestroyWirelessStatusIndicatorSprite();
|
||||
}
|
||||
}
|
||||
|
||||
bool8 IsContestWithRSPlayer(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_HAS_RS_PLAYER)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void ClearLinkContestFlags(void)
|
||||
{
|
||||
gLinkContestFlags = 0;
|
||||
}
|
||||
|
||||
bool8 IsWirelessContest(void)
|
||||
{
|
||||
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_WIRELESS)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void HealPlayerParty(void)
|
||||
{
|
||||
u8 i, j;
|
||||
u8 ppBonuses;
|
||||
u8 arg[4];
|
||||
|
||||
// restore HP.
|
||||
for(i = 0; i < gPlayerPartyCount; i++)
|
||||
{
|
||||
u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
|
||||
arg[0] = maxHP;
|
||||
arg[1] = maxHP >> 8;
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_HP, arg);
|
||||
ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES);
|
||||
|
||||
// restore PP.
|
||||
for(j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j);
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg);
|
||||
}
|
||||
|
||||
// since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData.
|
||||
arg[0] = 0;
|
||||
arg[1] = 0;
|
||||
arg[2] = 0;
|
||||
arg[3] = 0;
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg);
|
||||
}
|
||||
}
|
||||
|
||||
u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3)
|
||||
{
|
||||
u16 nationalDexNum;
|
||||
int sentToPc;
|
||||
u8 heldItem[2];
|
||||
struct Pokemon mon;
|
||||
|
||||
CreateMon(&mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
heldItem[0] = item;
|
||||
heldItem[1] = item >> 8;
|
||||
SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem);
|
||||
sentToPc = GiveMonToPlayer(&mon);
|
||||
nationalDexNum = SpeciesToNationalPokedexNum(species);
|
||||
|
||||
switch(sentToPc)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
|
||||
GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
|
||||
break;
|
||||
}
|
||||
return sentToPc;
|
||||
}
|
||||
|
||||
u8 ScriptGiveEgg(u16 species)
|
||||
{
|
||||
struct Pokemon mon;
|
||||
u8 isEgg;
|
||||
|
||||
CreateEgg(&mon, species, TRUE);
|
||||
isEgg = TRUE;
|
||||
SetMonData(&mon, MON_DATA_IS_EGG, &isEgg);
|
||||
|
||||
return GiveMonToPlayer(&mon);
|
||||
}
|
||||
|
||||
void HasEnoughMonsForDoubleBattle(void)
|
||||
{
|
||||
switch (GetMonsStateToDoubles())
|
||||
{
|
||||
case PLAYER_HAS_TWO_USABLE_MONS:
|
||||
gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS;
|
||||
break;
|
||||
case PLAYER_HAS_ONE_MON:
|
||||
gSpecialVar_Result = PLAYER_HAS_ONE_MON;
|
||||
break;
|
||||
case PLAYER_HAS_ONE_USABLE_MON:
|
||||
gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 CheckPartyMonHasHeldItem(u16 item)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
|
||||
if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item)
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 DoesPartyHaveEnigmaBerry(void)
|
||||
{
|
||||
bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
|
||||
if (hasItem == TRUE)
|
||||
GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1);
|
||||
|
||||
return hasItem;
|
||||
}
|
||||
|
||||
void CreateScriptedWildMon(u16 species, u8 level, u16 item)
|
||||
{
|
||||
u8 heldItem[2];
|
||||
|
||||
ZeroEnemyPartyMons();
|
||||
CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
if (item)
|
||||
{
|
||||
heldItem[0] = item;
|
||||
heldItem[1] = item >> 8;
|
||||
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
|
||||
{
|
||||
if (monIndex > PARTY_SIZE)
|
||||
monIndex = gPlayerPartyCount - 1;
|
||||
|
||||
SetMonMoveSlot(&gPlayerParty[monIndex], move, slot);
|
||||
}
|
||||
|
||||
// Note: When control returns to the event script, gSpecialVar_Result will be
|
||||
// TRUE if the party selection was successful.
|
||||
void ChooseHalfPartyForBattle(void)
|
||||
{
|
||||
gMain.savedCallback = CB2_ReturnFromChooseHalfParty;
|
||||
VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER);
|
||||
InitChooseHalfPartyForBattle(0);
|
||||
}
|
||||
|
||||
static void CB2_ReturnFromChooseHalfParty(void)
|
||||
{
|
||||
switch (gSelectedOrderFromParty[0])
|
||||
{
|
||||
case 0:
|
||||
gSpecialVar_Result = FALSE;
|
||||
break;
|
||||
default:
|
||||
gSpecialVar_Result = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
void ChoosePartyForBattleFrontier(void)
|
||||
{
|
||||
gMain.savedCallback = CB2_ReturnFromChooseBattleFrontierParty;
|
||||
InitChooseHalfPartyForBattle(gSpecialVar_0x8004 + 1);
|
||||
}
|
||||
|
||||
static void CB2_ReturnFromChooseBattleFrontierParty(void)
|
||||
{
|
||||
switch (gSelectedOrderFromParty[0])
|
||||
{
|
||||
case 0:
|
||||
gSpecialVar_Result = FALSE;
|
||||
break;
|
||||
default:
|
||||
gSpecialVar_Result = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
|
||||
}
|
||||
|
||||
void ReducePlayerPartyToSelectedMons(void)
|
||||
{
|
||||
struct Pokemon party[MAX_FRONTIER_PARTY_SIZE];
|
||||
int i;
|
||||
|
||||
CpuFill32(0, party, sizeof party);
|
||||
|
||||
// copy the selected pokemon according to the order.
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
|
||||
party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal
|
||||
|
||||
CpuFill32(0, gPlayerParty, sizeof gPlayerParty);
|
||||
|
||||
// overwrite the first 4 with the order copied to.
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
gPlayerParty[i] = party[i];
|
||||
|
||||
CalculatePlayerPartyCount();
|
||||
}
|
||||
46
src/trade.c
46
src/trade.c
|
|
@ -246,9 +246,9 @@ static bool8 SendLinkData(const void *linkData, u32 size)
|
|||
}
|
||||
}
|
||||
|
||||
static void sub_80771AC(u8 a0)
|
||||
static void RequestLinkData(u8 type)
|
||||
{
|
||||
sub_800A4D8(a0);
|
||||
SendBlockRequest(type);
|
||||
}
|
||||
|
||||
static bool32 sub_80771BC(void)
|
||||
|
|
@ -295,9 +295,9 @@ static bool32 IsWirelessTrade(void)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_8077288(u8 unused)
|
||||
static void SetTradeLinkStandbyCallback(u8 unused)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
}
|
||||
|
||||
static bool32 _IsLinkTaskFinished(void)
|
||||
|
|
@ -445,7 +445,7 @@ static void CB2_CreateTradeMenu(void)
|
|||
if (gWirelessCommType)
|
||||
{
|
||||
sub_801048C(TRUE);
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
@ -825,7 +825,7 @@ static void LinkTradeWaitForFade(void)
|
|||
}
|
||||
else
|
||||
{
|
||||
sub_800ABF4(32);
|
||||
SetCloseLinkCallbackAndType(32);
|
||||
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
|
||||
}
|
||||
}
|
||||
|
|
@ -983,7 +983,7 @@ static bool8 BufferTradeParties(void)
|
|||
case 3:
|
||||
if (id == 0)
|
||||
{
|
||||
sub_80771AC(1);
|
||||
RequestLinkData(1);
|
||||
}
|
||||
sTradeMenuData->bufferPartyState++;
|
||||
break;
|
||||
|
|
@ -1002,7 +1002,7 @@ static bool8 BufferTradeParties(void)
|
|||
case 7:
|
||||
if (id == 0)
|
||||
{
|
||||
sub_80771AC(1);
|
||||
RequestLinkData(1);
|
||||
}
|
||||
sTradeMenuData->bufferPartyState++;
|
||||
break;
|
||||
|
|
@ -1021,7 +1021,7 @@ static bool8 BufferTradeParties(void)
|
|||
case 11:
|
||||
if (id == 0)
|
||||
{
|
||||
sub_80771AC(1);
|
||||
RequestLinkData(1);
|
||||
}
|
||||
sTradeMenuData->bufferPartyState++;
|
||||
break;
|
||||
|
|
@ -1040,7 +1040,7 @@ static bool8 BufferTradeParties(void)
|
|||
case 15:
|
||||
if (id == 0)
|
||||
{
|
||||
sub_80771AC(3);
|
||||
RequestLinkData(3);
|
||||
}
|
||||
sTradeMenuData->bufferPartyState++;
|
||||
break;
|
||||
|
|
@ -1059,7 +1059,7 @@ static bool8 BufferTradeParties(void)
|
|||
case 19:
|
||||
if (id == 0)
|
||||
{
|
||||
sub_80771AC(4);
|
||||
RequestLinkData(4);
|
||||
}
|
||||
sTradeMenuData->bufferPartyState++;
|
||||
break;
|
||||
|
|
@ -1652,11 +1652,11 @@ static void CancelTrade_1(void)
|
|||
{
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800ABF4(12);
|
||||
SetCloseLinkCallbackAndType(12);
|
||||
}
|
||||
|
||||
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_CANCEL_TRADE_2;
|
||||
|
|
@ -1692,7 +1692,7 @@ static void LinkTradeWaitForQueue(void)
|
|||
{
|
||||
if (!sub_801048C(FALSE) && GetNumQueuedActions() == 0)
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
sTradeMenuData->tradeMenuFunc = TRADEMENUFUNC_START_LINK_TRADE;
|
||||
}
|
||||
}
|
||||
|
|
@ -4566,7 +4566,7 @@ static void CB2_SaveAndEndTrade(void)
|
|||
DrawTextOnTradeWindow(0, gStringVar4, 0);
|
||||
break;
|
||||
case 1:
|
||||
sub_8077288(0);
|
||||
SetTradeLinkStandbyCallback(0);
|
||||
gMain.state = 100;
|
||||
sTradeData->timer = 0;
|
||||
break;
|
||||
|
|
@ -4644,7 +4644,7 @@ static void CB2_SaveAndEndTrade(void)
|
|||
case 41:
|
||||
if (sTradeData->timer == 0)
|
||||
{
|
||||
sub_8077288(1);
|
||||
SetTradeLinkStandbyCallback(1);
|
||||
gMain.state = 42;
|
||||
}
|
||||
else
|
||||
|
|
@ -4663,7 +4663,7 @@ static void CB2_SaveAndEndTrade(void)
|
|||
if (++sTradeData->timer > 60)
|
||||
{
|
||||
gMain.state++;
|
||||
sub_8077288(2);
|
||||
SetTradeLinkStandbyCallback(2);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
|
|
@ -4685,11 +4685,11 @@ static void CB2_SaveAndEndTrade(void)
|
|||
{
|
||||
if (gWirelessCommType && gMain.savedCallback == CB2_StartCreateTradeMenu)
|
||||
{
|
||||
sub_8077288(3);
|
||||
SetTradeLinkStandbyCallback(3);
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
}
|
||||
gMain.state++;
|
||||
}
|
||||
|
|
@ -4902,7 +4902,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
|
|||
DrawTextOnTradeWindow(0, gStringVar4, 0);
|
||||
break;
|
||||
case 1:
|
||||
sub_8077288(0);
|
||||
SetTradeLinkStandbyCallback(0);
|
||||
gMain.state = 2;
|
||||
sTradeData->timer = 0;
|
||||
break;
|
||||
|
|
@ -4950,7 +4950,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
|
|||
case 7:
|
||||
if (sTradeData->timer == 0)
|
||||
{
|
||||
sub_8077288(1);
|
||||
SetTradeLinkStandbyCallback(1);
|
||||
gMain.state = 8;
|
||||
}
|
||||
else
|
||||
|
|
@ -4969,7 +4969,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
|
|||
if (++sTradeData->timer > 60)
|
||||
{
|
||||
gMain.state++;
|
||||
sub_8077288(2);
|
||||
SetTradeLinkStandbyCallback(2);
|
||||
}
|
||||
break;
|
||||
case 10:
|
||||
|
|
@ -4983,7 +4983,7 @@ static void CB2_SaveAndEndWirelessTrade(void)
|
|||
case 11:
|
||||
if (!gPaletteFade.active && IsBGMStopped() == TRUE)
|
||||
{
|
||||
sub_8077288(3);
|
||||
SetTradeLinkStandbyCallback(3);
|
||||
gMain.state = 12;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
#include "graphics.h"
|
||||
#include "pokemon_icon.h"
|
||||
#include "trainer_pokemon_sprites.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "contest_util.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/game_stat.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
|
|
@ -497,7 +497,7 @@ static void Task_TrainerCard(u8 taskId)
|
|||
}
|
||||
break;
|
||||
case STATE_WAIT_LINK_PARTNER:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
DrawDialogueFrame(0, 1);
|
||||
AddTextPrinterParameterized(0, 1, gText_WaitingTrainerFinishReading, 0, 1, 255, 0);
|
||||
CopyWindowToVram(0, 3);
|
||||
|
|
|
|||
729
src/tv.c
729
src/tv.c
|
|
@ -387,39 +387,39 @@ static const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = {
|
|||
};
|
||||
|
||||
static const u8 *const sTVContestLiveUpdatesTextGroup[] = {
|
||||
gTVContestLiveUpdatesText00,
|
||||
gTVContestLiveUpdatesText01,
|
||||
gTVContestLiveUpdatesText02,
|
||||
gTVContestLiveUpdatesText03,
|
||||
gTVContestLiveUpdatesText04,
|
||||
gTVContestLiveUpdatesText05,
|
||||
gTVContestLiveUpdatesText06,
|
||||
gTVContestLiveUpdatesText07,
|
||||
gTVContestLiveUpdatesText08,
|
||||
gTVContestLiveUpdatesText09,
|
||||
gTVContestLiveUpdatesText10,
|
||||
gTVContestLiveUpdatesText11,
|
||||
gTVContestLiveUpdatesText12,
|
||||
gTVContestLiveUpdatesText13,
|
||||
gTVContestLiveUpdatesText14,
|
||||
gTVContestLiveUpdatesText15,
|
||||
gTVContestLiveUpdatesText16,
|
||||
gTVContestLiveUpdatesText17,
|
||||
gTVContestLiveUpdatesText18,
|
||||
gTVContestLiveUpdatesText19,
|
||||
gTVContestLiveUpdatesText20,
|
||||
gTVContestLiveUpdatesText21,
|
||||
gTVContestLiveUpdatesText22,
|
||||
gTVContestLiveUpdatesText23,
|
||||
gTVContestLiveUpdatesText24,
|
||||
gTVContestLiveUpdatesText25,
|
||||
gTVContestLiveUpdatesText26,
|
||||
gTVContestLiveUpdatesText27,
|
||||
gTVContestLiveUpdatesText28,
|
||||
gTVContestLiveUpdatesText29,
|
||||
gTVContestLiveUpdatesText30,
|
||||
gTVContestLiveUpdatesText31,
|
||||
gTVContestLiveUpdatesText32
|
||||
[CONTESTLIVE_STATE_INTRO] = ContestLiveUpdates_Text_Intro,
|
||||
[CONTESTLIVE_STATE_WON_BOTH_ROUNDS] = ContestLiveUpdates_Text_WonBothRounds,
|
||||
[CONTESTLIVE_STATE_BETTER_ROUND2] = ContestLiveUpdates_Text_BetterRound2,
|
||||
[CONTESTLIVE_STATE_EQUAL_ROUNDS] = ContestLiveUpdates_Text_EqualRounds,
|
||||
[CONTESTLIVE_STATE_BETTER_ROUND1] = ContestLiveUpdates_Text_BetterRound1,
|
||||
[CONTESTLIVE_STATE_GOT_NERVOUS] = ContestLiveUpdates_Text_GotNervous,
|
||||
[CONTESTLIVE_STATE_STARTLED_OTHER] = ContestLiveUpdates_Text_StartledFoes,
|
||||
[CONTESTLIVE_STATE_USED_COMBO] = ContestLiveUpdates_Text_UsedCombo,
|
||||
[CONTESTLIVE_STATE_EXCITING_APPEAL] = ContestLiveUpdates_Text_ExcitingAppeal,
|
||||
[CONTESTLIVE_STATE_COOL] = ContestLiveUpdates_Text_WasCool,
|
||||
[CONTESTLIVE_STATE_BEAUTIFUL] = ContestLiveUpdates_Text_WasBeautiful,
|
||||
[CONTESTLIVE_STATE_CUTE] = ContestLiveUpdates_Text_WasCute,
|
||||
[CONTESTLIVE_STATE_SMART] = ContestLiveUpdates_Text_WasSmart,
|
||||
[CONTESTLIVE_STATE_TOUGH] = ContestLiveUpdates_Text_WasTough,
|
||||
[CONTESTLIVE_STATE_VERY_EXCITING_APPEAL] = ContestLiveUpdates_Text_VeryExcitingAppeal,
|
||||
[CONTESTLIVE_STATE_VERY_COOL] = ContestLiveUpdates_Text_VeryCool,
|
||||
[CONTESTLIVE_STATE_VERY_BEAUTIFUL] = ContestLiveUpdates_Text_VeryBeautiful,
|
||||
[CONTESTLIVE_STATE_VERY_CUTE] = ContestLiveUpdates_Text_VeryCute,
|
||||
[CONTESTLIVE_STATE_VERY_SMART] = ContestLiveUpdates_Text_VerySmart,
|
||||
[CONTESTLIVE_STATE_VERY_TOUGH] = ContestLiveUpdates_Text_VeryTough,
|
||||
[CONTESTLIVE_STATE_TOOK_BREAK] = ContestLiveUpdates_Text_TookBreak,
|
||||
[CONTESTLIVE_STATE_GOT_STARTLED] = ContestLiveUpdates_Text_GotStartled,
|
||||
[CONTESTLIVE_STATE_USED_MOVE] = ContestLiveUpdates_Text_MoveWonderful,
|
||||
[CONTESTLIVE_STATE_TALK_ABOUT_LOSER] = ContestLiveUpdates_Text_TalkAboutAnotherMon,
|
||||
[CONTESTLIVE_STATE_NO_APPEALS] = ContestLiveUpdates_Text_FailedToAppeal,
|
||||
[CONTESTLIVE_STATE_LAST_BOTH] = ContestLiveUpdates_Text_LastInBothRounds,
|
||||
[CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH] = ContestLiveUpdates_Text_NotExcitingEnough,
|
||||
[CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN] = ContestLiveUpdates_Text_LostAfterWinningRound1,
|
||||
[CONTESTLIVE_STATE_NO_EXCITING_APPEALS] = ContestLiveUpdates_Text_NeverExciting,
|
||||
[CONTESTLIVE_STATE_LOST_SMALL_MARGIN] = ContestLiveUpdates_Text_LostBySmallMargin,
|
||||
[CONTESTLIVE_STATE_REPEATED_APPEALS] = ContestLiveUpdates_Text_RepeatedAppeals,
|
||||
[CONTESTLIVE_STATE_LOST] = ContestLiveUpdates_Text_ValiantEffortButLost,
|
||||
[CONTESTLIVE_STATE_OUTRO] = ContestLiveUpdates_Text_Outro
|
||||
};
|
||||
|
||||
static const u8 *const sTVPokemonBattleUpdateTextGroup[] = {
|
||||
|
|
@ -1268,19 +1268,19 @@ static void InterviewAfter_ContestLiveUpdates(void)
|
|||
show2 = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
|
||||
show2->contestLiveUpdates.kind = TVSHOW_CONTEST_LIVE_UPDATES;
|
||||
show2->contestLiveUpdates.active = TRUE;
|
||||
StringCopy(show2->contestLiveUpdates.playerName, gSaveBlock2Ptr->playerName);
|
||||
StringCopy(show2->contestLiveUpdates.winningTrainerName, gSaveBlock2Ptr->playerName); // Show only begins running if player won, so always load players name
|
||||
show2->contestLiveUpdates.category = gSpecialVar_ContestCategory;
|
||||
show2->contestLiveUpdates.species = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL);
|
||||
show2->contestLiveUpdates.winningSpecies = show->contestLiveUpdates.winningSpecies;
|
||||
show2->contestLiveUpdates.appealFlags2 = show->contestLiveUpdates.appealFlags2;
|
||||
show2->contestLiveUpdates.round1Rank = show->contestLiveUpdates.round1Rank;
|
||||
show2->contestLiveUpdates.round2Rank = show->contestLiveUpdates.round2Rank;
|
||||
show2->contestLiveUpdates.winningSpecies = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL);
|
||||
show2->contestLiveUpdates.losingSpecies = show->contestLiveUpdates.losingSpecies;
|
||||
show2->contestLiveUpdates.loserAppealFlag = show->contestLiveUpdates.loserAppealFlag;
|
||||
show2->contestLiveUpdates.round1Placing = show->contestLiveUpdates.round1Placing;
|
||||
show2->contestLiveUpdates.round2Placing = show->contestLiveUpdates.round2Placing;
|
||||
show2->contestLiveUpdates.move = show->contestLiveUpdates.move;
|
||||
show2->contestLiveUpdates.appealFlags1 = show->contestLiveUpdates.appealFlags1;
|
||||
StringCopy(show2->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerName);
|
||||
show2->contestLiveUpdates.winnerAppealFlag = show->contestLiveUpdates.winnerAppealFlag;
|
||||
StringCopy(show2->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerName);
|
||||
tv_store_id_2x(show2);
|
||||
show2->contestLiveUpdates.language = gGameLanguage;
|
||||
show2->contestLiveUpdates.winningTrainerLanguage = show->contestLiveUpdates.winningTrainerLanguage;
|
||||
show2->contestLiveUpdates.winningTrainerLanguage = gGameLanguage;
|
||||
show2->contestLiveUpdates.losingTrainerLanguage = show->contestLiveUpdates.losingTrainerLanguage;
|
||||
DeleteTVShowInArrayByIdx(gSaveBlock1Ptr->tvShows, LAST_TVSHOW_IDX);
|
||||
}
|
||||
}
|
||||
|
|
@ -1399,7 +1399,7 @@ void PutFanClubSpecialOnTheAir(void)
|
|||
}
|
||||
}
|
||||
|
||||
void ContestLiveUpdates_BeforeInterview_1(u8 a0)
|
||||
void ContestLiveUpdates_Init(u8 round1Placing)
|
||||
{
|
||||
TVShow *show;
|
||||
|
||||
|
|
@ -1408,12 +1408,12 @@ void ContestLiveUpdates_BeforeInterview_1(u8 a0)
|
|||
if (sCurTVShowSlot != -1)
|
||||
{
|
||||
show = &gSaveBlock1Ptr->tvShows[LAST_TVSHOW_IDX];
|
||||
show->contestLiveUpdates.round1Rank = a0;
|
||||
show->contestLiveUpdates.round1Placing = round1Placing;
|
||||
show->contestLiveUpdates.kind = TVSHOW_CONTEST_LIVE_UPDATES;
|
||||
}
|
||||
}
|
||||
|
||||
void ContestLiveUpdates_BeforeInterview_2(u8 a0)
|
||||
void ContestLiveUpdates_SetRound2Placing(u8 round2Placing)
|
||||
{
|
||||
TVShow *show;
|
||||
|
||||
|
|
@ -1421,11 +1421,11 @@ void ContestLiveUpdates_BeforeInterview_2(u8 a0)
|
|||
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
|
||||
if (sCurTVShowSlot != -1)
|
||||
{
|
||||
show->contestLiveUpdates.round2Rank = a0;
|
||||
show->contestLiveUpdates.round2Placing = round2Placing;
|
||||
}
|
||||
}
|
||||
|
||||
void ContestLiveUpdates_BeforeInterview_3(u8 a0)
|
||||
void ContestLiveUpdates_SetWinnerAppealFlag(u8 flag)
|
||||
{
|
||||
TVShow *show;
|
||||
|
||||
|
|
@ -1433,11 +1433,11 @@ void ContestLiveUpdates_BeforeInterview_3(u8 a0)
|
|||
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
|
||||
if (sCurTVShowSlot != -1)
|
||||
{
|
||||
show->contestLiveUpdates.appealFlags1 = a0;
|
||||
show->contestLiveUpdates.winnerAppealFlag = flag;
|
||||
}
|
||||
}
|
||||
|
||||
void ContestLiveUpdates_BeforeInterview_4(u16 a0)
|
||||
void ContestLiveUpdates_SetWinnerMoveUsed(u16 move)
|
||||
{
|
||||
TVShow *show;
|
||||
|
||||
|
|
@ -1445,11 +1445,11 @@ void ContestLiveUpdates_BeforeInterview_4(u16 a0)
|
|||
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
|
||||
if (sCurTVShowSlot != -1)
|
||||
{
|
||||
show->contestLiveUpdates.move = a0;
|
||||
show->contestLiveUpdates.move = move;
|
||||
}
|
||||
}
|
||||
|
||||
void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1)
|
||||
void ContestLiveUpdates_SetLoserData(u8 flag, u8 loser)
|
||||
{
|
||||
TVShow *show;
|
||||
|
||||
|
|
@ -1457,21 +1457,21 @@ void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1)
|
|||
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
|
||||
if (sCurTVShowSlot != -1)
|
||||
{
|
||||
show->contestLiveUpdates.winningSpecies = gContestMons[a1].species;
|
||||
StringCopy(show->contestLiveUpdates.winningTrainerName, gContestMons[a1].trainerName);
|
||||
StripExtCtrlCodes(show->contestLiveUpdates.winningTrainerName);
|
||||
show->contestLiveUpdates.appealFlags2 = a0;
|
||||
if (a1 + 1 > gNumLinkContestPlayers)
|
||||
show->contestLiveUpdates.losingSpecies = gContestMons[loser].species;
|
||||
StringCopy(show->contestLiveUpdates.losingTrainerName, gContestMons[loser].trainerName);
|
||||
StripExtCtrlCodes(show->contestLiveUpdates.losingTrainerName);
|
||||
show->contestLiveUpdates.loserAppealFlag = flag;
|
||||
if (loser + 1 > gNumLinkContestPlayers)
|
||||
{
|
||||
show->contestLiveUpdates.winningTrainerLanguage = gLinkPlayers[0].language;
|
||||
show->contestLiveUpdates.losingTrainerLanguage = gLinkPlayers[0].language;
|
||||
}
|
||||
else if (gGameLanguage == LANGUAGE_JAPANESE || gLinkPlayers[a1].language == LANGUAGE_JAPANESE)
|
||||
else if (gGameLanguage == LANGUAGE_JAPANESE || gLinkPlayers[loser].language == LANGUAGE_JAPANESE)
|
||||
{
|
||||
show->contestLiveUpdates.winningTrainerLanguage = LANGUAGE_JAPANESE;
|
||||
show->contestLiveUpdates.losingTrainerLanguage = LANGUAGE_JAPANESE;
|
||||
}
|
||||
else
|
||||
{
|
||||
show->contestLiveUpdates.winningTrainerLanguage = gLinkPlayers[a1].language;
|
||||
show->contestLiveUpdates.losingTrainerLanguage = gLinkPlayers[loser].language;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3804,10 +3804,10 @@ static void sub_80F0708(void) // FIXME: register allocation shenanigans
|
|||
switch (gSaveBlock1Ptr->tvShows[i].common.kind)
|
||||
{
|
||||
case TVSHOW_CONTEST_LIVE_UPDATES:
|
||||
j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.species;
|
||||
sub_80F0B24(j, i);
|
||||
j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.winningSpecies;
|
||||
sub_80F0B24(j, i);
|
||||
j = (&gSaveBlock1Ptr->tvShows[i])->contestLiveUpdates.losingSpecies;
|
||||
sub_80F0B24(j, i);
|
||||
break;
|
||||
case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
|
||||
break;
|
||||
|
|
@ -4301,8 +4301,8 @@ static void sub_80F12A4(TVShow *shows)
|
|||
curShow->bravoTrainerTower.pokemonNameLanguage = TV_GetStringLanguage(curShow->bravoTrainerTower.pokemonName);
|
||||
break;
|
||||
case TVSHOW_CONTEST_LIVE_UPDATES:
|
||||
curShow->contestLiveUpdates.language = TV_GetStringLanguage(curShow->contestLiveUpdates.playerName);
|
||||
curShow->contestLiveUpdates.winningTrainerLanguage = TV_GetStringLanguage(curShow->contestLiveUpdates.winningTrainerName);
|
||||
curShow->contestLiveUpdates.losingTrainerLanguage = TV_GetStringLanguage(curShow->contestLiveUpdates.losingTrainerName);
|
||||
break;
|
||||
case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
|
||||
curShow->threeCheers.language = TV_GetStringLanguage(curShow->threeCheers.playerName);
|
||||
|
|
@ -5167,6 +5167,12 @@ static void DoTVShowPokemonNewsMassOutbreak(void)
|
|||
ShowFieldMessage(sTVMassOutbreakTextGroup[sTVShowState]);
|
||||
}
|
||||
|
||||
// TV Show that plays after a Link Contest.
|
||||
// First talks about the winner and something they did, then about a losing player and something they did
|
||||
// The show is only generated when the player wins, but can be record mixed to other games
|
||||
// Each state buffers any needed data for a message to print from sTVContestLiveUpdatesTextGroup
|
||||
// Many cases in this function are identical, and its size can be reduced a good deal by collapsing them
|
||||
// Can't get this to match while collapsing them though
|
||||
static void DoTVShowPokemonContestLiveUpdates(void)
|
||||
{
|
||||
TVShow *show;
|
||||
|
|
@ -5177,339 +5183,338 @@ static void DoTVShowPokemonContestLiveUpdates(void)
|
|||
state = sTVShowState;
|
||||
switch (state)
|
||||
{
|
||||
case 0:
|
||||
BufferContestName(gStringVar1, show->contestLiveUpdates.category);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
|
||||
if (show->contestLiveUpdates.round1Rank == show->contestLiveUpdates.round2Rank)
|
||||
case CONTESTLIVE_STATE_INTRO:
|
||||
BufferContestName(gStringVar1, show->contestLiveUpdates.category);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
if (show->contestLiveUpdates.round1Placing == show->contestLiveUpdates.round2Placing)
|
||||
{
|
||||
if (show->contestLiveUpdates.round1Placing == 0)
|
||||
{
|
||||
if (show->contestLiveUpdates.round1Rank == 0)
|
||||
{
|
||||
sTVShowState = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sTVShowState = 3;
|
||||
}
|
||||
}
|
||||
else if (show->contestLiveUpdates.round1Rank > show->contestLiveUpdates.round2Rank)
|
||||
{
|
||||
sTVShowState = 2;
|
||||
sTVShowState = CONTESTLIVE_STATE_WON_BOTH_ROUNDS;
|
||||
}
|
||||
else
|
||||
{
|
||||
sTVShowState = 4;
|
||||
sTVShowState = CONTESTLIVE_STATE_EQUAL_ROUNDS;
|
||||
}
|
||||
}
|
||||
else if (show->contestLiveUpdates.round1Placing > show->contestLiveUpdates.round2Placing)
|
||||
{
|
||||
sTVShowState = CONTESTLIVE_STATE_BETTER_ROUND2;
|
||||
}
|
||||
else
|
||||
{
|
||||
sTVShowState = CONTESTLIVE_STATE_BETTER_ROUND1;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_WON_BOTH_ROUNDS:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
switch (show->contestLiveUpdates.winnerAppealFlag)
|
||||
{
|
||||
case CONTESTLIVE_FLAG_EXCITING_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
|
||||
break;
|
||||
case 1:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
switch (show->contestLiveUpdates.appealFlags1)
|
||||
{
|
||||
case 0x01:
|
||||
sTVShowState = 8;
|
||||
break;
|
||||
case 0x02:
|
||||
sTVShowState = 5;
|
||||
break;
|
||||
case 0x04:
|
||||
sTVShowState = 14;
|
||||
break;
|
||||
case 0x08:
|
||||
sTVShowState = 7;
|
||||
break;
|
||||
case 0x10:
|
||||
sTVShowState = 6;
|
||||
break;
|
||||
case 0x20:
|
||||
sTVShowState = 20;
|
||||
break;
|
||||
case 0x40:
|
||||
sTVShowState = 21;
|
||||
break;
|
||||
case 0x80:
|
||||
sTVShowState = 22;
|
||||
break;
|
||||
}
|
||||
case CONTESTLIVE_FLAG_GOT_NERVOUS:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
|
||||
break;
|
||||
case 2:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
switch (show->contestLiveUpdates.appealFlags1)
|
||||
{
|
||||
case 0x01:
|
||||
sTVShowState = 8;
|
||||
break;
|
||||
case 0x02:
|
||||
sTVShowState = 5;
|
||||
break;
|
||||
case 0x04:
|
||||
sTVShowState = 14;
|
||||
break;
|
||||
case 0x08:
|
||||
sTVShowState = 7;
|
||||
break;
|
||||
case 0x10:
|
||||
sTVShowState = 6;
|
||||
break;
|
||||
case 0x20:
|
||||
sTVShowState = 20;
|
||||
break;
|
||||
case 0x40:
|
||||
sTVShowState = 21;
|
||||
break;
|
||||
case 0x80:
|
||||
sTVShowState = 22;
|
||||
break;
|
||||
}
|
||||
case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
|
||||
break;
|
||||
case 3:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
|
||||
switch (show->contestLiveUpdates.appealFlags1)
|
||||
{
|
||||
case 0x01:
|
||||
sTVShowState = 8;
|
||||
break;
|
||||
case 0x02:
|
||||
sTVShowState = 5;
|
||||
break;
|
||||
case 0x04:
|
||||
sTVShowState = 14;
|
||||
break;
|
||||
case 0x08:
|
||||
sTVShowState = 7;
|
||||
break;
|
||||
case 0x10:
|
||||
sTVShowState = 6;
|
||||
break;
|
||||
case 0x20:
|
||||
sTVShowState = 20;
|
||||
break;
|
||||
case 0x40:
|
||||
sTVShowState = 21;
|
||||
break;
|
||||
case 0x80:
|
||||
sTVShowState = 22;
|
||||
break;
|
||||
}
|
||||
case CONTESTLIVE_FLAG_USED_COMBO:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
|
||||
break;
|
||||
case 4:
|
||||
switch (show->contestLiveUpdates.category)
|
||||
{
|
||||
case 0:
|
||||
StringCopy(gStringVar1, gText_Cool);
|
||||
break;
|
||||
case 1:
|
||||
StringCopy(gStringVar1, gText_Beauty);
|
||||
break;
|
||||
case 2:
|
||||
StringCopy(gStringVar1, gText_Cute);
|
||||
break;
|
||||
case 3:
|
||||
StringCopy(gStringVar1, gText_Smart);
|
||||
break;
|
||||
case 4:
|
||||
StringCopy(gStringVar1, gText_Tough);
|
||||
break;
|
||||
}
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
switch (show->contestLiveUpdates.appealFlags1)
|
||||
{
|
||||
case 0x01:
|
||||
sTVShowState = 8;
|
||||
break;
|
||||
case 0x02:
|
||||
sTVShowState = 5;
|
||||
break;
|
||||
case 0x04:
|
||||
sTVShowState = 14;
|
||||
break;
|
||||
case 0x08:
|
||||
sTVShowState = 7;
|
||||
break;
|
||||
case 0x10:
|
||||
sTVShowState = 6;
|
||||
break;
|
||||
case 0x20:
|
||||
sTVShowState = 20;
|
||||
break;
|
||||
case 0x40:
|
||||
sTVShowState = 21;
|
||||
break;
|
||||
case 0x80:
|
||||
sTVShowState = 22;
|
||||
break;
|
||||
}
|
||||
case CONTESTLIVE_FLAG_STARTLED_OTHER:
|
||||
sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
|
||||
break;
|
||||
case 5:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_SKIPPED_TURN:
|
||||
sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
|
||||
break;
|
||||
case 6:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_GOT_STARTLED:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
|
||||
break;
|
||||
case 7:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_MADE_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
|
||||
break;
|
||||
case 8:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
switch (show->contestLiveUpdates.category)
|
||||
{
|
||||
case 0:
|
||||
sTVShowState = 9;
|
||||
break;
|
||||
case 1:
|
||||
sTVShowState = 10;
|
||||
break;
|
||||
case 2:
|
||||
sTVShowState = 11;
|
||||
break;
|
||||
case 3:
|
||||
sTVShowState = 12;
|
||||
break;
|
||||
case 4:
|
||||
sTVShowState = 13;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_BETTER_ROUND2:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
switch (show->contestLiveUpdates.winnerAppealFlag)
|
||||
{
|
||||
case CONTESTLIVE_FLAG_EXCITING_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
|
||||
break;
|
||||
case 9:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_GOT_NERVOUS:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
|
||||
break;
|
||||
case 10:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
|
||||
break;
|
||||
case 11:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_USED_COMBO:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
|
||||
break;
|
||||
case 12:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_STARTLED_OTHER:
|
||||
sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
|
||||
break;
|
||||
case 13:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_SKIPPED_TURN:
|
||||
sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
|
||||
break;
|
||||
case 14:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
switch (show->contestLiveUpdates.category)
|
||||
{
|
||||
case 0:
|
||||
sTVShowState = 15;
|
||||
break;
|
||||
case 1:
|
||||
sTVShowState = 16;
|
||||
break;
|
||||
case 2:
|
||||
sTVShowState = 17;
|
||||
break;
|
||||
case 3:
|
||||
sTVShowState = 18;
|
||||
break;
|
||||
case 4:
|
||||
sTVShowState = 19;
|
||||
break;
|
||||
}
|
||||
case CONTESTLIVE_FLAG_GOT_STARTLED:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
|
||||
break;
|
||||
case 15:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_MADE_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
|
||||
break;
|
||||
case 16:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_EQUAL_ROUNDS:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
switch (show->contestLiveUpdates.winnerAppealFlag)
|
||||
{
|
||||
case CONTESTLIVE_FLAG_EXCITING_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
|
||||
break;
|
||||
case 17:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_GOT_NERVOUS:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
|
||||
break;
|
||||
case 18:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
|
||||
break;
|
||||
case 19:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_USED_COMBO:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
|
||||
break;
|
||||
case 20:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_STARTLED_OTHER:
|
||||
sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
|
||||
break;
|
||||
case 21:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_SKIPPED_TURN:
|
||||
sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
|
||||
break;
|
||||
case 22:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
StringCopy(gStringVar3, gMoveNames[show->contestLiveUpdates.move]);
|
||||
sTVShowState = 23;
|
||||
case CONTESTLIVE_FLAG_GOT_STARTLED:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
|
||||
break;
|
||||
case 23:
|
||||
StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
TVShowConvertInternationalString(gStringVar2, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
StringCopy(gStringVar3, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
switch (show->contestLiveUpdates.appealFlags2)
|
||||
{
|
||||
case 0x01:
|
||||
sTVShowState = 31;
|
||||
break;
|
||||
case 0x02:
|
||||
sTVShowState = 30;
|
||||
break;
|
||||
case 0x04:
|
||||
sTVShowState = 29;
|
||||
break;
|
||||
case 0x08:
|
||||
sTVShowState = 28;
|
||||
break;
|
||||
case 0x10:
|
||||
sTVShowState = 27;
|
||||
break;
|
||||
case 0x20:
|
||||
sTVShowState = 26;
|
||||
break;
|
||||
case 0x40:
|
||||
sTVShowState = 25;
|
||||
break;
|
||||
case 0x80:
|
||||
sTVShowState = 24;
|
||||
break;
|
||||
}
|
||||
case CONTESTLIVE_FLAG_MADE_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
|
||||
break;
|
||||
case 24:
|
||||
StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = 32;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_BETTER_ROUND1:
|
||||
switch (show->contestLiveUpdates.category)
|
||||
{
|
||||
case CONTEST_CATEGORY_COOL:
|
||||
StringCopy(gStringVar1, gText_Cool);
|
||||
break;
|
||||
case 25:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = 32;
|
||||
case CONTEST_CATEGORY_BEAUTY:
|
||||
StringCopy(gStringVar1, gText_Beauty);
|
||||
break;
|
||||
case 28:
|
||||
sTVShowState = 32;
|
||||
case CONTEST_CATEGORY_CUTE:
|
||||
StringCopy(gStringVar1, gText_Cute);
|
||||
break;
|
||||
case 29:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
sTVShowState = 32;
|
||||
case CONTEST_CATEGORY_SMART:
|
||||
StringCopy(gStringVar1, gText_Smart);
|
||||
break;
|
||||
case 26:
|
||||
case 27:
|
||||
case 30:
|
||||
case 31:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
sTVShowState = 32;
|
||||
case CONTEST_CATEGORY_TOUGH:
|
||||
StringCopy(gStringVar1, gText_Tough);
|
||||
break;
|
||||
case 32:
|
||||
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.playerName, show->contestLiveUpdates.language);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.species]);
|
||||
TVShowDone();
|
||||
}
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
switch (show->contestLiveUpdates.winnerAppealFlag)
|
||||
{
|
||||
case CONTESTLIVE_FLAG_EXCITING_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_EXCITING_APPEAL;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_GOT_NERVOUS:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_NERVOUS;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_MAXED_EXCITEMENT:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_EXCITING_APPEAL;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_USED_COMBO:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_COMBO;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_STARTLED_OTHER:
|
||||
sTVShowState = CONTESTLIVE_STATE_STARTLED_OTHER;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_SKIPPED_TURN:
|
||||
sTVShowState = CONTESTLIVE_STATE_TOOK_BREAK;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_GOT_STARTLED:
|
||||
sTVShowState = CONTESTLIVE_STATE_GOT_STARTLED;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_MADE_APPEAL:
|
||||
sTVShowState = CONTESTLIVE_STATE_USED_MOVE;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_GOT_NERVOUS:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_STARTLED_OTHER:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_USED_COMBO:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_EXCITING_APPEAL:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
switch (show->contestLiveUpdates.category)
|
||||
{
|
||||
case CONTEST_CATEGORY_COOL:
|
||||
sTVShowState = CONTESTLIVE_STATE_COOL;
|
||||
break;
|
||||
case CONTEST_CATEGORY_BEAUTY:
|
||||
sTVShowState = CONTESTLIVE_STATE_BEAUTIFUL;
|
||||
break;
|
||||
case CONTEST_CATEGORY_CUTE:
|
||||
sTVShowState = CONTESTLIVE_STATE_CUTE;
|
||||
break;
|
||||
case CONTEST_CATEGORY_SMART:
|
||||
sTVShowState = CONTESTLIVE_STATE_SMART;
|
||||
break;
|
||||
case CONTEST_CATEGORY_TOUGH:
|
||||
sTVShowState = CONTESTLIVE_STATE_TOUGH;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_COOL:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_BEAUTIFUL:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_CUTE:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_SMART:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_TOUGH:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_VERY_EXCITING_APPEAL:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
switch (show->contestLiveUpdates.category)
|
||||
{
|
||||
case CONTEST_CATEGORY_COOL:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_COOL;
|
||||
break;
|
||||
case CONTEST_CATEGORY_BEAUTY:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_BEAUTIFUL;
|
||||
break;
|
||||
case CONTEST_CATEGORY_CUTE:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_CUTE;
|
||||
break;
|
||||
case CONTEST_CATEGORY_SMART:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_SMART;
|
||||
break;
|
||||
case CONTEST_CATEGORY_TOUGH:
|
||||
sTVShowState = CONTESTLIVE_STATE_VERY_TOUGH;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_VERY_COOL:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_VERY_BEAUTIFUL:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_VERY_CUTE:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_VERY_SMART:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_VERY_TOUGH:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_TOOK_BREAK:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_GOT_STARTLED:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_USED_MOVE:
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
StringCopy(gStringVar3, gMoveNames[show->contestLiveUpdates.move]);
|
||||
sTVShowState = CONTESTLIVE_STATE_TALK_ABOUT_LOSER;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_TALK_ABOUT_LOSER:
|
||||
StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
TVShowConvertInternationalString(gStringVar2, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
|
||||
StringCopy(gStringVar3, gSpeciesNames[show->contestLiveUpdates.losingSpecies]);
|
||||
switch (show->contestLiveUpdates.loserAppealFlag)
|
||||
{
|
||||
case CONTESTLIVE_FLAG_LOST:
|
||||
sTVShowState = CONTESTLIVE_STATE_LOST;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_REPEATED_MOVE:
|
||||
sTVShowState = CONTESTLIVE_STATE_REPEATED_APPEALS;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_LOST_SMALL_MARGIN:
|
||||
sTVShowState = CONTESTLIVE_STATE_LOST_SMALL_MARGIN;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_NO_EXCITEMENT:
|
||||
sTVShowState = CONTESTLIVE_STATE_NO_EXCITING_APPEALS;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_BLEW_LEAD:
|
||||
sTVShowState = CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_MISSED_EXCITEMENT:
|
||||
sTVShowState = CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_LAST_BOTH_ROUNDS:
|
||||
sTVShowState = CONTESTLIVE_STATE_LAST_BOTH;
|
||||
break;
|
||||
case CONTESTLIVE_FLAG_NO_APPEALS:
|
||||
sTVShowState = CONTESTLIVE_STATE_NO_APPEALS;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CONTESTLIVE_STATE_NO_APPEALS:
|
||||
StringCopy(gStringVar1, gSpeciesNames[show->contestLiveUpdates.losingSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_OUTRO;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_LAST_BOTH:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.losingSpecies]);
|
||||
sTVShowState = CONTESTLIVE_STATE_OUTRO;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_NO_EXCITING_APPEALS:
|
||||
sTVShowState = CONTESTLIVE_STATE_OUTRO;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_LOST_SMALL_MARGIN:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
TVShowConvertInternationalString(gStringVar3, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
|
||||
sTVShowState = CONTESTLIVE_STATE_OUTRO;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_NOT_EXCITING_ENOUGH:
|
||||
case CONTESTLIVE_STATE_LOST_AFTER_ROUND1_WIN:
|
||||
case CONTESTLIVE_STATE_REPEATED_APPEALS:
|
||||
case CONTESTLIVE_STATE_LOST:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.losingTrainerName, show->contestLiveUpdates.losingTrainerLanguage);
|
||||
sTVShowState = CONTESTLIVE_STATE_OUTRO;
|
||||
break;
|
||||
case CONTESTLIVE_STATE_OUTRO:
|
||||
TVShowConvertInternationalString(gStringVar1, show->contestLiveUpdates.winningTrainerName, show->contestLiveUpdates.winningTrainerLanguage);
|
||||
StringCopy(gStringVar2, gSpeciesNames[show->contestLiveUpdates.winningSpecies]);
|
||||
TVShowDone();
|
||||
break;
|
||||
}
|
||||
ShowFieldMessage(sTVContestLiveUpdatesTextGroup[state]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
#include "random.h"
|
||||
#include "save_location.h"
|
||||
#include "script.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "script_pokemon_util.h"
|
||||
#include "sound.h"
|
||||
#include "start_menu.h"
|
||||
#include "string_util.h"
|
||||
|
|
@ -1483,7 +1483,7 @@ static void Task_ExchangeCards(u8 taskId)
|
|||
{
|
||||
case 0:
|
||||
if (GetMultiplayerId() == 0)
|
||||
sub_800A4D8(2);
|
||||
SendBlockRequest(2);
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
|
|
@ -1759,7 +1759,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
|
|||
}
|
||||
else
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
data[0] = 3;
|
||||
}
|
||||
}
|
||||
|
|
@ -1795,7 +1795,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId)
|
|||
DestroyTask(taskId);
|
||||
break;
|
||||
case 7:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
data[0] = 8;
|
||||
break;
|
||||
case 8:
|
||||
|
|
@ -2018,7 +2018,7 @@ static void Task_MEvent_Leader(u8 taskId)
|
|||
Free(data->field_8);
|
||||
Free(data->field_0);
|
||||
Free(data->field_4);
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
data->state++;
|
||||
break;
|
||||
case 17:
|
||||
|
|
@ -2188,7 +2188,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId)
|
|||
break;
|
||||
case 11:
|
||||
data->state++;
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
break;
|
||||
case 12:
|
||||
if (IsLinkTaskFinished())
|
||||
|
|
@ -2367,7 +2367,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId)
|
|||
break;
|
||||
case 13:
|
||||
data->state++;
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
break;
|
||||
case 14:
|
||||
if (IsLinkTaskFinished())
|
||||
|
|
@ -2714,7 +2714,7 @@ static void Task_RunUnionRoom(u8 taskId)
|
|||
}
|
||||
break;
|
||||
case UR_STATE_REQUEST_DECLINED:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
|
||||
break;
|
||||
case UR_STATE_SEND_TRADE_REQUST:
|
||||
|
|
@ -2763,7 +2763,7 @@ static void Task_RunUnionRoom(u8 taskId)
|
|||
if (PrintOnTextbox(&uroom->textState, gStringVar4))
|
||||
{
|
||||
uroom->state = UR_STATE_WAIT_FINISH_READING_CARD;
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
uroom->partnerYesNoResponse = 0;
|
||||
uroom->recvActivityRequest[0] = 0;
|
||||
}
|
||||
|
|
@ -2940,7 +2940,7 @@ static void Task_RunUnionRoom(u8 taskId)
|
|||
}
|
||||
break;
|
||||
case UR_STATE_DECLINE_ACTIVITY_REQUEST:
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
|
||||
break;
|
||||
case UR_STATE_CANCEL_REQUEST_PRINT_MSG:
|
||||
|
|
@ -2962,7 +2962,7 @@ static void Task_RunUnionRoom(u8 taskId)
|
|||
ScheduleFieldMessageWithFollowupState(UR_STATE_START_ACTIVITY_LINK, gStringVar4);
|
||||
break;
|
||||
case UR_STATE_START_ACTIVITY_LINK:
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
uroom->state = UR_STATE_START_ACTIVITY_WAIT_FOR_LINK;
|
||||
break;
|
||||
case UR_STATE_START_ACTIVITY_WAIT_FOR_LINK:
|
||||
|
|
@ -3231,7 +3231,7 @@ static bool32 UnionRoom_HandleContactFromOtherPlayer(struct WirelessLink_URoom *
|
|||
else if (id == 2) // No activity
|
||||
{
|
||||
uroom->state = UR_STATE_CANCEL_REQUEST_PRINT_MSG;
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ void CB2_UnionRoomBattle(void)
|
|||
}
|
||||
else
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | IN_UNION_ROOM))
|
||||
{
|
||||
gMain.state = 6;
|
||||
|
|
@ -190,7 +190,7 @@ void CB2_UnionRoomBattle(void)
|
|||
case 50:
|
||||
if (!UpdatePaletteFade())
|
||||
{
|
||||
sub_800ADF8();
|
||||
SetLinkStandbyCallback();
|
||||
gMain.state++;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1267,7 +1267,7 @@ static void Chat_Exit(void)
|
|||
case 5:
|
||||
if (IsLinkTaskFinished() && !sub_8011A9C())
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
sChat->exitDelayTimer = 0;
|
||||
sChat->funcState++;
|
||||
}
|
||||
|
|
@ -1302,7 +1302,7 @@ static void Chat_Drop(void)
|
|||
case 1:
|
||||
if (!IsDisplaySubtaskActive(0) && IsLinkTaskFinished() && !sub_8011A9C())
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
sChat->exitDelayTimer = 0;
|
||||
sChat->funcState++;
|
||||
}
|
||||
|
|
@ -1348,7 +1348,7 @@ static void Chat_Disbanded(void)
|
|||
case 2:
|
||||
if (IsDisplaySubtaskActive(0) != TRUE && IsLinkTaskFinished() && !sub_8011A9C())
|
||||
{
|
||||
sub_800AC34();
|
||||
SetCloseLinkCallback();
|
||||
sChat->exitDelayTimer = 0;
|
||||
sChat->funcState++;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user