Merge branch 'master' into flatten_sprite_pos

This commit is contained in:
GriffinR 2021-07-12 01:39:28 -04:00 committed by GitHub
commit a274cc6a76
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
44 changed files with 775 additions and 893 deletions

View File

@ -71,4 +71,4 @@ jobs:
branch: symbols branch: symbols
cwd: "./symbols" cwd: "./symbols"
add: "*.sym" add: "*.sym"
message: ${{ github.event.commits[0].message }} message: ${{ github.event.pull_request.title }}

View File

@ -28,6 +28,7 @@ LD := $(PREFIX)ld
# note: the makefile must be set up so MODERNCC is never called # note: the makefile must be set up so MODERNCC is never called
# if MODERN=0 # if MODERN=0
MODERNCC := $(PREFIX)gcc MODERNCC := $(PREFIX)gcc
PATH_MODERNCC := PATH=$(TOOLCHAIN)/bin:PATH $(MODERNCC)
ifeq ($(OS),Windows_NT) ifeq ($(OS),Windows_NT)
EXE := .exe EXE := .exe
@ -105,11 +106,11 @@ OBJ_DIR := $(OBJ_DIR_NAME)
LIBPATH := -L ../../tools/agbcc/lib LIBPATH := -L ../../tools/agbcc/lib
LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall
else else
CC1 = $(shell $(MODERNCC) --print-prog-name=cc1) -quiet CC1 = $(shell $(PATH_MODERNCC) --print-prog-name=cc1) -quiet
override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g override CFLAGS += -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast -g
ROM := $(MODERN_ROM_NAME) ROM := $(MODERN_ROM_NAME)
OBJ_DIR := $(MODERN_OBJ_DIR_NAME) OBJ_DIR := $(MODERN_OBJ_DIR_NAME)
LIBPATH := -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(MODERNCC) -mthumb -print-file-name=libc.a))" LIBPATH := -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libgcc.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libnosys.a))" -L "$(dir $(shell $(PATH_MODERNCC) -mthumb -print-file-name=libc.a))"
LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall LIB := $(LIBPATH) -lc -lnosys -lgcc -L../../libagbsyscall -lagbsyscall
endif endif

View File

@ -813,12 +813,12 @@
.byte 0x68 .byte 0x68
.endm .endm
@ Ceases movement for all Objects on-screen. @ Freezes all objects immediately except the player. The player is frozen once their movement is finished.
.macro lockall .macro lockall
.byte 0x69 .byte 0x69
.endm .endm
@ If the script was called by an Object, then that Object's movement will cease. @ Freezes all objects immediately except the player and the selected object. The player and selected object are frozen once their movement is finished.
.macro lock .macro lock
.byte 0x6a .byte 0x6a
.endm .endm

File diff suppressed because it is too large Load Diff

View File

@ -17,243 +17,221 @@
.align 2 .align 2
gBattleScriptsForMoveEffects:: @ 82D86A8 gBattleScriptsForMoveEffects:: @ 82D86A8
.4byte BattleScript_EffectHit .4byte BattleScript_EffectHit @ EFFECT_HIT
.4byte BattleScript_EffectSleep .4byte BattleScript_EffectSleep @ EFFECT_SLEEP
.4byte BattleScript_EffectPoisonHit .4byte BattleScript_EffectPoisonHit @ EFFECT_POISON_HIT
.4byte BattleScript_EffectAbsorb .4byte BattleScript_EffectAbsorb @ EFFECT_ABSORB
.4byte BattleScript_EffectBurnHit .4byte BattleScript_EffectBurnHit @ EFFECT_BURN_HIT
.4byte BattleScript_EffectFreezeHit .4byte BattleScript_EffectFreezeHit @ EFFECT_FREEZE_HIT
.4byte BattleScript_EffectParalyzeHit .4byte BattleScript_EffectParalyzeHit @ EFFECT_PARALYZE_HIT
.4byte BattleScript_EffectExplosion .4byte BattleScript_EffectExplosion @ EFFECT_EXPLOSION
.4byte BattleScript_EffectDreamEater .4byte BattleScript_EffectDreamEater @ EFFECT_DREAM_EATER
.4byte BattleScript_EffectMirrorMove .4byte BattleScript_EffectMirrorMove @ EFFECT_MIRROR_MOVE
.4byte BattleScript_EffectAttackUp .4byte BattleScript_EffectAttackUp @ EFFECT_ATTACK_UP
.4byte BattleScript_EffectDefenseUp .4byte BattleScript_EffectDefenseUp @ EFFECT_DEFENSE_UP
.4byte BattleScript_EffectSpeedUp .4byte BattleScript_EffectHit @ EFFECT_SPEED_UP
.4byte BattleScript_EffectSpecialAttackUp .4byte BattleScript_EffectSpecialAttackUp @ EFFECT_SPECIAL_ATTACK_UP
.4byte BattleScript_EffectSpecialDefenseUp .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_DEFENSE_UP
.4byte BattleScript_EffectAccuracyUp .4byte BattleScript_EffectHit @ EFFECT_ACCURACY_UP
.4byte BattleScript_EffectEvasionUp .4byte BattleScript_EffectEvasionUp @ EFFECT_EVASION_UP
.4byte BattleScript_EffectAlwaysHit .4byte BattleScript_EffectHit @ EFFECT_ALWAYS_HIT
.4byte BattleScript_EffectAttackDown .4byte BattleScript_EffectAttackDown @ EFFECT_ATTACK_DOWN
.4byte BattleScript_EffectDefenseDown .4byte BattleScript_EffectDefenseDown @ EFFECT_DEFENSE_DOWN
.4byte BattleScript_EffectSpeedDown .4byte BattleScript_EffectSpeedDown @ EFFECT_SPEED_DOWN
.4byte BattleScript_EffectSpecialAttackDown .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_ATTACK_DOWN
.4byte BattleScript_EffectSpecialDefenseDown .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_DEFENSE_DOWN
.4byte BattleScript_EffectAccuracyDown .4byte BattleScript_EffectAccuracyDown @ EFFECT_ACCURACY_DOWN
.4byte BattleScript_EffectEvasionDown .4byte BattleScript_EffectEvasionDown @ EFFECT_EVASION_DOWN
.4byte BattleScript_EffectHaze .4byte BattleScript_EffectHaze @ EFFECT_HAZE
.4byte BattleScript_EffectBide .4byte BattleScript_EffectBide @ EFFECT_BIDE
.4byte BattleScript_EffectRampage .4byte BattleScript_EffectRampage @ EFFECT_RAMPAGE
.4byte BattleScript_EffectRoar .4byte BattleScript_EffectRoar @ EFFECT_ROAR
.4byte BattleScript_EffectMultiHit .4byte BattleScript_EffectMultiHit @ EFFECT_MULTI_HIT
.4byte BattleScript_EffectConversion .4byte BattleScript_EffectConversion @ EFFECT_CONVERSION
.4byte BattleScript_EffectFlinchHit .4byte BattleScript_EffectFlinchHit @ EFFECT_FLINCH_HIT
.4byte BattleScript_EffectRestoreHp .4byte BattleScript_EffectRestoreHp @ EFFECT_RESTORE_HP
.4byte BattleScript_EffectToxic .4byte BattleScript_EffectToxic @ EFFECT_TOXIC
.4byte BattleScript_EffectPayDay .4byte BattleScript_EffectPayDay @ EFFECT_PAY_DAY
.4byte BattleScript_EffectLightScreen .4byte BattleScript_EffectLightScreen @ EFFECT_LIGHT_SCREEN
.4byte BattleScript_EffectTriAttack .4byte BattleScript_EffectTriAttack @ EFFECT_TRI_ATTACK
.4byte BattleScript_EffectRest .4byte BattleScript_EffectRest @ EFFECT_REST
.4byte BattleScript_EffectOHKO .4byte BattleScript_EffectOHKO @ EFFECT_OHKO
.4byte BattleScript_EffectRazorWind .4byte BattleScript_EffectRazorWind @ EFFECT_RAZOR_WIND
.4byte BattleScript_EffectSuperFang .4byte BattleScript_EffectSuperFang @ EFFECT_SUPER_FANG
.4byte BattleScript_EffectDragonRage .4byte BattleScript_EffectDragonRage @ EFFECT_DRAGON_RAGE
.4byte BattleScript_EffectTrap .4byte BattleScript_EffectTrap @ EFFECT_TRAP
.4byte BattleScript_EffectHighCritical .4byte BattleScript_EffectHit @ EFFECT_HIGH_CRITICAL
.4byte BattleScript_EffectDoubleHit .4byte BattleScript_EffectDoubleHit @ EFFECT_DOUBLE_HIT
.4byte BattleScript_EffectRecoilIfMiss .4byte BattleScript_EffectRecoilIfMiss @ EFFECT_RECOIL_IF_MISS
.4byte BattleScript_EffectMist .4byte BattleScript_EffectMist @ EFFECT_MIST
.4byte BattleScript_EffectFocusEnergy .4byte BattleScript_EffectFocusEnergy @ EFFECT_FOCUS_ENERGY
.4byte BattleScript_EffectRecoil .4byte BattleScript_EffectRecoil @ EFFECT_RECOIL
.4byte BattleScript_EffectConfuse .4byte BattleScript_EffectConfuse @ EFFECT_CONFUSE
.4byte BattleScript_EffectAttackUp2 .4byte BattleScript_EffectAttackUp2 @ EFFECT_ATTACK_UP_2
.4byte BattleScript_EffectDefenseUp2 .4byte BattleScript_EffectDefenseUp2 @ EFFECT_DEFENSE_UP_2
.4byte BattleScript_EffectSpeedUp2 .4byte BattleScript_EffectSpeedUp2 @ EFFECT_SPEED_UP_2
.4byte BattleScript_EffectSpecialAttackUp2 .4byte BattleScript_EffectSpecialAttackUp2 @ EFFECT_SPECIAL_ATTACK_UP_2
.4byte BattleScript_EffectSpecialDefenseUp2 .4byte BattleScript_EffectSpecialDefenseUp2 @ EFFECT_SPECIAL_DEFENSE_UP_2
.4byte BattleScript_EffectAccuracyUp2 .4byte BattleScript_EffectHit @ EFFECT_ACCURACY_UP_2
.4byte BattleScript_EffectEvasionUp2 .4byte BattleScript_EffectHit @ EFFECT_EVASION_UP_2
.4byte BattleScript_EffectTransform .4byte BattleScript_EffectTransform @ EFFECT_TRANSFORM
.4byte BattleScript_EffectAttackDown2 .4byte BattleScript_EffectAttackDown2 @ EFFECT_ATTACK_DOWN_2
.4byte BattleScript_EffectDefenseDown2 .4byte BattleScript_EffectDefenseDown2 @ EFFECT_DEFENSE_DOWN_2
.4byte BattleScript_EffectSpeedDown2 .4byte BattleScript_EffectSpeedDown2 @ EFFECT_SPEED_DOWN_2
.4byte BattleScript_EffectSpecialAttackDown2 .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_ATTACK_DOWN_2
.4byte BattleScript_EffectSpecialDefenseDown2 .4byte BattleScript_EffectSpecialDefenseDown2 @ EFFECT_SPECIAL_DEFENSE_DOWN_2
.4byte BattleScript_EffectAccuracyDown2 .4byte BattleScript_EffectHit @ EFFECT_ACCURACY_DOWN_2
.4byte BattleScript_EffectEvasionDown2 .4byte BattleScript_EffectHit @ EFFECT_EVASION_DOWN_2
.4byte BattleScript_EffectReflect .4byte BattleScript_EffectReflect @ EFFECT_REFLECT
.4byte BattleScript_EffectPoison .4byte BattleScript_EffectPoison @ EFFECT_POISON
.4byte BattleScript_EffectParalyze .4byte BattleScript_EffectParalyze @ EFFECT_PARALYZE
.4byte BattleScript_EffectAttackDownHit .4byte BattleScript_EffectAttackDownHit @ EFFECT_ATTACK_DOWN_HIT
.4byte BattleScript_EffectDefenseDownHit .4byte BattleScript_EffectDefenseDownHit @ EFFECT_DEFENSE_DOWN_HIT
.4byte BattleScript_EffectSpeedDownHit .4byte BattleScript_EffectSpeedDownHit @ EFFECT_SPEED_DOWN_HIT
.4byte BattleScript_EffectSpecialAttackDownHit .4byte BattleScript_EffectSpecialAttackDownHit @ EFFECT_SPECIAL_ATTACK_DOWN_HIT
.4byte BattleScript_EffectSpecialDefenseDownHit .4byte BattleScript_EffectSpecialDefenseDownHit @ EFFECT_SPECIAL_DEFENSE_DOWN_HIT
.4byte BattleScript_EffectAccuracyDownHit .4byte BattleScript_EffectAccuracyDownHit @ EFFECT_ACCURACY_DOWN_HIT
.4byte BattleScript_EffectEvasionDownHit .4byte BattleScript_EffectHit @ EFFECT_EVASION_DOWN_HIT
.4byte BattleScript_EffectSkyAttack .4byte BattleScript_EffectSkyAttack @ EFFECT_SKY_ATTACK
.4byte BattleScript_EffectConfuseHit .4byte BattleScript_EffectConfuseHit @ EFFECT_CONFUSE_HIT
.4byte BattleScript_EffectTwineedle .4byte BattleScript_EffectTwineedle @ EFFECT_TWINEEDLE
.4byte BattleScript_EffectVitalThrow .4byte BattleScript_EffectHit @ EFFECT_VITAL_THROW
.4byte BattleScript_EffectSubstitute .4byte BattleScript_EffectSubstitute @ EFFECT_SUBSTITUTE
.4byte BattleScript_EffectRecharge .4byte BattleScript_EffectRecharge @ EFFECT_RECHARGE
.4byte BattleScript_EffectRage .4byte BattleScript_EffectRage @ EFFECT_RAGE
.4byte BattleScript_EffectMimic .4byte BattleScript_EffectMimic @ EFFECT_MIMIC
.4byte BattleScript_EffectMetronome .4byte BattleScript_EffectMetronome @ EFFECT_METRONOME
.4byte BattleScript_EffectLeechSeed .4byte BattleScript_EffectLeechSeed @ EFFECT_LEECH_SEED
.4byte BattleScript_EffectSplash .4byte BattleScript_EffectSplash @ EFFECT_SPLASH
.4byte BattleScript_EffectDisable .4byte BattleScript_EffectDisable @ EFFECT_DISABLE
.4byte BattleScript_EffectLevelDamage .4byte BattleScript_EffectLevelDamage @ EFFECT_LEVEL_DAMAGE
.4byte BattleScript_EffectPsywave .4byte BattleScript_EffectPsywave @ EFFECT_PSYWAVE
.4byte BattleScript_EffectCounter .4byte BattleScript_EffectCounter @ EFFECT_COUNTER
.4byte BattleScript_EffectEncore .4byte BattleScript_EffectEncore @ EFFECT_ENCORE
.4byte BattleScript_EffectPainSplit .4byte BattleScript_EffectPainSplit @ EFFECT_PAIN_SPLIT
.4byte BattleScript_EffectSnore .4byte BattleScript_EffectSnore @ EFFECT_SNORE
.4byte BattleScript_EffectConversion2 .4byte BattleScript_EffectConversion2 @ EFFECT_CONVERSION_2
.4byte BattleScript_EffectLockOn .4byte BattleScript_EffectLockOn @ EFFECT_LOCK_ON
.4byte BattleScript_EffectSketch .4byte BattleScript_EffectSketch @ EFFECT_SKETCH
.4byte BattleScript_EffectUnused60//Thaw .4byte BattleScript_EffectHit @ EFFECT_UNUSED_60
.4byte BattleScript_EffectSleepTalk .4byte BattleScript_EffectSleepTalk @ EFFECT_SLEEP_TALK
.4byte BattleScript_EffectDestinyBond .4byte BattleScript_EffectDestinyBond @ EFFECT_DESTINY_BOND
.4byte BattleScript_EffectFlail .4byte BattleScript_EffectFlail @ EFFECT_FLAIL
.4byte BattleScript_EffectSpite .4byte BattleScript_EffectSpite @ EFFECT_SPITE
.4byte BattleScript_EffectFalseSwipe .4byte BattleScript_EffectHit @ EFFECT_FALSE_SWIPE
.4byte BattleScript_EffectHealBell .4byte BattleScript_EffectHealBell @ EFFECT_HEAL_BELL
.4byte BattleScript_EffectQuickAttack .4byte BattleScript_EffectHit @ EFFECT_QUICK_ATTACK
.4byte BattleScript_EffectTripleKick .4byte BattleScript_EffectTripleKick @ EFFECT_TRIPLE_KICK
.4byte BattleScript_EffectThief .4byte BattleScript_EffectThief @ EFFECT_THIEF
.4byte BattleScript_EffectMeanLook .4byte BattleScript_EffectMeanLook @ EFFECT_MEAN_LOOK
.4byte BattleScript_EffectNightmare .4byte BattleScript_EffectNightmare @ EFFECT_NIGHTMARE
.4byte BattleScript_EffectMinimize .4byte BattleScript_EffectMinimize @ EFFECT_MINIMIZE
.4byte BattleScript_EffectCurse .4byte BattleScript_EffectCurse @ EFFECT_CURSE
.4byte BattleScript_EffectUnused6e .4byte BattleScript_EffectHit @ EFFECT_UNUSED_6E
.4byte BattleScript_EffectProtect .4byte BattleScript_EffectProtect @ EFFECT_PROTECT
.4byte BattleScript_EffectSpikes .4byte BattleScript_EffectSpikes @ EFFECT_SPIKES
.4byte BattleScript_EffectForesight .4byte BattleScript_EffectForesight @ EFFECT_FORESIGHT
.4byte BattleScript_EffectPerishSong .4byte BattleScript_EffectPerishSong @ EFFECT_PERISH_SONG
.4byte BattleScript_EffectSandstorm .4byte BattleScript_EffectSandstorm @ EFFECT_SANDSTORM
.4byte BattleScript_EffectEndure .4byte BattleScript_EffectEndure @ EFFECT_ENDURE
.4byte BattleScript_EffectRollout .4byte BattleScript_EffectRollout @ EFFECT_ROLLOUT
.4byte BattleScript_EffectSwagger .4byte BattleScript_EffectSwagger @ EFFECT_SWAGGER
.4byte BattleScript_EffectFuryCutter .4byte BattleScript_EffectFuryCutter @ EFFECT_FURY_CUTTER
.4byte BattleScript_EffectAttract .4byte BattleScript_EffectAttract @ EFFECT_ATTRACT
.4byte BattleScript_EffectReturn .4byte BattleScript_EffectReturn @ EFFECT_RETURN
.4byte BattleScript_EffectPresent .4byte BattleScript_EffectPresent @ EFFECT_PRESENT
.4byte BattleScript_EffectFrustration .4byte BattleScript_EffectFrustration @ EFFECT_FRUSTRATION
.4byte BattleScript_EffectSafeguard .4byte BattleScript_EffectSafeguard @ EFFECT_SAFEGUARD
.4byte BattleScript_EffectThawHit .4byte BattleScript_EffectThawHit @ EFFECT_THAW_HIT
.4byte BattleScript_EffectMagnitude .4byte BattleScript_EffectMagnitude @ EFFECT_MAGNITUDE
.4byte BattleScript_EffectBatonPass .4byte BattleScript_EffectBatonPass @ EFFECT_BATON_PASS
.4byte BattleScript_EffectPursuit .4byte BattleScript_EffectHit @ EFFECT_PURSUIT
.4byte BattleScript_EffectRapidSpin .4byte BattleScript_EffectRapidSpin @ EFFECT_RAPID_SPIN
.4byte BattleScript_EffectSonicboom .4byte BattleScript_EffectSonicboom @ EFFECT_SONICBOOM
.4byte BattleScript_EffectUnused83 .4byte BattleScript_EffectHit @ EFFECT_UNUSED_83
.4byte BattleScript_EffectMorningSun .4byte BattleScript_EffectMorningSun @ EFFECT_MORNING_SUN
.4byte BattleScript_EffectSynthesis .4byte BattleScript_EffectSynthesis @ EFFECT_SYNTHESIS
.4byte BattleScript_EffectMoonlight .4byte BattleScript_EffectMoonlight @ EFFECT_MOONLIGHT
.4byte BattleScript_EffectHiddenPower .4byte BattleScript_EffectHiddenPower @ EFFECT_HIDDEN_POWER
.4byte BattleScript_EffectRainDance .4byte BattleScript_EffectRainDance @ EFFECT_RAIN_DANCE
.4byte BattleScript_EffectSunnyDay .4byte BattleScript_EffectSunnyDay @ EFFECT_SUNNY_DAY
.4byte BattleScript_EffectDefenseUpHit .4byte BattleScript_EffectDefenseUpHit @ EFFECT_DEFENSE_UP_HIT
.4byte BattleScript_EffectAttackUpHit .4byte BattleScript_EffectAttackUpHit @ EFFECT_ATTACK_UP_HIT
.4byte BattleScript_EffectAllStatsUpHit .4byte BattleScript_EffectAllStatsUpHit @ EFFECT_ALL_STATS_UP_HIT
.4byte BattleScript_EffectUnused8d .4byte BattleScript_EffectHit @ EFFECT_UNUSED_8D
.4byte BattleScript_EffectBellyDrum .4byte BattleScript_EffectBellyDrum @ EFFECT_BELLY_DRUM
.4byte BattleScript_EffectPsychUp .4byte BattleScript_EffectPsychUp @ EFFECT_PSYCH_UP
.4byte BattleScript_EffectMirrorCoat .4byte BattleScript_EffectMirrorCoat @ EFFECT_MIRROR_COAT
.4byte BattleScript_EffectSkullBash .4byte BattleScript_EffectSkullBash @ EFFECT_SKULL_BASH
.4byte BattleScript_EffectTwister .4byte BattleScript_EffectTwister @ EFFECT_TWISTER
.4byte BattleScript_EffectEarthquake .4byte BattleScript_EffectEarthquake @ EFFECT_EARTHQUAKE
.4byte BattleScript_EffectFutureSight .4byte BattleScript_EffectFutureSight @ EFFECT_FUTURE_SIGHT
.4byte BattleScript_EffectGust .4byte BattleScript_EffectGust @ EFFECT_GUST
.4byte BattleScript_EffectStomp .4byte BattleScript_EffectStomp @ EFFECT_FLINCH_MINIMIZE_HIT
.4byte BattleScript_EffectSolarbeam .4byte BattleScript_EffectSolarbeam @ EFFECT_SOLARBEAM
.4byte BattleScript_EffectThunder .4byte BattleScript_EffectThunder @ EFFECT_THUNDER
.4byte BattleScript_EffectTeleport .4byte BattleScript_EffectTeleport @ EFFECT_TELEPORT
.4byte BattleScript_EffectBeatUp .4byte BattleScript_EffectBeatUp @ EFFECT_BEAT_UP
.4byte BattleScript_EffectSemiInvulnerable .4byte BattleScript_EffectSemiInvulnerable @ EFFECT_SEMI_INVULNERABLE
.4byte BattleScript_EffectDefenseCurl .4byte BattleScript_EffectDefenseCurl @ EFFECT_DEFENSE_CURL
.4byte BattleScript_EffectSoftboiled .4byte BattleScript_EffectSoftboiled @ EFFECT_SOFTBOILED
.4byte BattleScript_EffectFakeOut .4byte BattleScript_EffectFakeOut @ EFFECT_FAKE_OUT
.4byte BattleScript_EffectUproar .4byte BattleScript_EffectUproar @ EFFECT_UPROAR
.4byte BattleScript_EffectStockpile .4byte BattleScript_EffectStockpile @ EFFECT_STOCKPILE
.4byte BattleScript_EffectSpitUp .4byte BattleScript_EffectSpitUp @ EFFECT_SPIT_UP
.4byte BattleScript_EffectSwallow .4byte BattleScript_EffectSwallow @ EFFECT_SWALLOW
.4byte BattleScript_EffectUnusedA3 .4byte BattleScript_EffectHit @ EFFECT_UNUSED_A3
.4byte BattleScript_EffectHail .4byte BattleScript_EffectHail @ EFFECT_HAIL
.4byte BattleScript_EffectTorment .4byte BattleScript_EffectTorment @ EFFECT_TORMENT
.4byte BattleScript_EffectFlatter .4byte BattleScript_EffectFlatter @ EFFECT_FLATTER
.4byte BattleScript_EffectWillOWisp .4byte BattleScript_EffectWillOWisp @ EFFECT_WILL_O_WISP
.4byte BattleScript_EffectMemento .4byte BattleScript_EffectMemento @ EFFECT_MEMENTO
.4byte BattleScript_EffectFacade .4byte BattleScript_EffectFacade @ EFFECT_FACADE
.4byte BattleScript_EffectFocusPunch .4byte BattleScript_EffectFocusPunch @ EFFECT_FOCUS_PUNCH
.4byte BattleScript_EffectSmellingsalt .4byte BattleScript_EffectSmellingsalt @ EFFECT_SMELLINGSALT
.4byte BattleScript_EffectFollowMe .4byte BattleScript_EffectFollowMe @ EFFECT_FOLLOW_ME
.4byte BattleScript_EffectNaturePower .4byte BattleScript_EffectNaturePower @ EFFECT_NATURE_POWER
.4byte BattleScript_EffectCharge .4byte BattleScript_EffectCharge @ EFFECT_CHARGE
.4byte BattleScript_EffectTaunt .4byte BattleScript_EffectTaunt @ EFFECT_TAUNT
.4byte BattleScript_EffectHelpingHand .4byte BattleScript_EffectHelpingHand @ EFFECT_HELPING_HAND
.4byte BattleScript_EffectTrick .4byte BattleScript_EffectTrick @ EFFECT_TRICK
.4byte BattleScript_EffectRolePlay .4byte BattleScript_EffectRolePlay @ EFFECT_ROLE_PLAY
.4byte BattleScript_EffectWish .4byte BattleScript_EffectWish @ EFFECT_WISH
.4byte BattleScript_EffectAssist .4byte BattleScript_EffectAssist @ EFFECT_ASSIST
.4byte BattleScript_EffectIngrain .4byte BattleScript_EffectIngrain @ EFFECT_INGRAIN
.4byte BattleScript_EffectSuperpower .4byte BattleScript_EffectSuperpower @ EFFECT_SUPERPOWER
.4byte BattleScript_EffectMagicCoat .4byte BattleScript_EffectMagicCoat @ EFFECT_MAGIC_COAT
.4byte BattleScript_EffectRecycle .4byte BattleScript_EffectRecycle @ EFFECT_RECYCLE
.4byte BattleScript_EffectRevenge .4byte BattleScript_EffectRevenge @ EFFECT_REVENGE
.4byte BattleScript_EffectBrickBreak .4byte BattleScript_EffectBrickBreak @ EFFECT_BRICK_BREAK
.4byte BattleScript_EffectYawn .4byte BattleScript_EffectYawn @ EFFECT_YAWN
.4byte BattleScript_EffectKnockOff .4byte BattleScript_EffectKnockOff @ EFFECT_KNOCK_OFF
.4byte BattleScript_EffectEndeavor .4byte BattleScript_EffectEndeavor @ EFFECT_ENDEAVOR
.4byte BattleScript_EffectEruption .4byte BattleScript_EffectEruption @ EFFECT_ERUPTION
.4byte BattleScript_EffectSkillSwap .4byte BattleScript_EffectSkillSwap @ EFFECT_SKILL_SWAP
.4byte BattleScript_EffectImprison .4byte BattleScript_EffectImprison @ EFFECT_IMPRISON
.4byte BattleScript_EffectRefresh .4byte BattleScript_EffectRefresh @ EFFECT_REFRESH
.4byte BattleScript_EffectGrudge .4byte BattleScript_EffectGrudge @ EFFECT_GRUDGE
.4byte BattleScript_EffectSnatch .4byte BattleScript_EffectSnatch @ EFFECT_SNATCH
.4byte BattleScript_EffectLowKick .4byte BattleScript_EffectLowKick @ EFFECT_LOW_KICK
.4byte BattleScript_EffectSecretPower .4byte BattleScript_EffectSecretPower @ EFFECT_SECRET_POWER
.4byte BattleScript_EffectDoubleEdge .4byte BattleScript_EffectDoubleEdge @ EFFECT_DOUBLE_EDGE
.4byte BattleScript_EffectTeeterDance .4byte BattleScript_EffectTeeterDance @ EFFECT_TEETER_DANCE
.4byte BattleScript_EffectBlazeKick .4byte BattleScript_EffectBurnHit @ EFFECT_BLAZE_KICK
.4byte BattleScript_EffectMudSport .4byte BattleScript_EffectMudSport @ EFFECT_MUD_SPORT
.4byte BattleScript_EffectPoisonFang .4byte BattleScript_EffectPoisonFang @ EFFECT_POISON_FANG
.4byte BattleScript_EffectWeatherBall .4byte BattleScript_EffectWeatherBall @ EFFECT_WEATHER_BALL
.4byte BattleScript_EffectOverheat .4byte BattleScript_EffectOverheat @ EFFECT_OVERHEAT
.4byte BattleScript_EffectTickle .4byte BattleScript_EffectTickle @ EFFECT_TICKLE
.4byte BattleScript_EffectCosmicPower .4byte BattleScript_EffectCosmicPower @ EFFECT_COSMIC_POWER
.4byte BattleScript_EffectSkyUppercut .4byte BattleScript_EffectSkyUppercut @ EFFECT_SKY_UPPERCUT
.4byte BattleScript_EffectBulkUp .4byte BattleScript_EffectBulkUp @ EFFECT_BULK_UP
.4byte BattleScript_EffectPoisonTail .4byte BattleScript_EffectPoisonHit @ EFFECT_POISON_TAIL
.4byte BattleScript_EffectWaterSport .4byte BattleScript_EffectWaterSport @ EFFECT_WATER_SPORT
.4byte BattleScript_EffectCalmMind .4byte BattleScript_EffectCalmMind @ EFFECT_CALM_MIND
.4byte BattleScript_EffectDragonDance .4byte BattleScript_EffectDragonDance @ EFFECT_DRAGON_DANCE
.4byte BattleScript_EffectCamouflage .4byte BattleScript_EffectCamouflage @ EFFECT_CAMOUFLAGE
BattleScript_EffectSpeedUp::
BattleScript_EffectSpecialDefenseUp::
BattleScript_EffectAccuracyUp::
BattleScript_EffectAlwaysHit::
BattleScript_EffectSpecialAttackDown::
BattleScript_EffectSpecialDefenseDown::
BattleScript_EffectHighCritical::
BattleScript_EffectAccuracyUp2::
BattleScript_EffectEvasionUp2::
BattleScript_EffectSpecialAttackDown2::
BattleScript_EffectAccuracyDown2::
BattleScript_EffectEvasionDown2::
BattleScript_EffectEvasionDownHit::
BattleScript_EffectVitalThrow::
BattleScript_EffectUnused60::
BattleScript_EffectFalseSwipe::
BattleScript_EffectQuickAttack::
BattleScript_EffectUnused6e::
BattleScript_EffectPursuit::
BattleScript_EffectUnused83::
BattleScript_EffectUnused8d::
BattleScript_EffectUnusedA3::
BattleScript_EffectHit:: BattleScript_EffectHit::
jumpifnotmove MOVE_SURF, BattleScript_HitFromAtkCanceler jumpifnotmove MOVE_SURF, BattleScript_HitFromAtkCanceler
jumpifnostatus3 BS_TARGET, STATUS3_UNDERWATER, BattleScript_HitFromAtkCanceler jumpifnostatus3 BS_TARGET, STATUS3_UNDERWATER, BattleScript_HitFromAtkCanceler
@ -338,7 +316,6 @@ BattleScript_CantMakeAsleep::
goto BattleScript_MoveEnd goto BattleScript_MoveEnd
BattleScript_EffectPoisonHit:: BattleScript_EffectPoisonHit::
BattleScript_EffectPoisonTail::
setmoveeffect MOVE_EFFECT_POISON setmoveeffect MOVE_EFFECT_POISON
goto BattleScript_EffectHit goto BattleScript_EffectHit
@ -382,7 +359,6 @@ BattleScript_AbsorbTryFainting::
goto BattleScript_MoveEnd goto BattleScript_MoveEnd
BattleScript_EffectBurnHit:: BattleScript_EffectBurnHit::
BattleScript_EffectBlazeKick::
setmoveeffect MOVE_EFFECT_BURN setmoveeffect MOVE_EFFECT_BURN
goto BattleScript_EffectHit goto BattleScript_EffectHit

View File

@ -563,7 +563,7 @@ BattleFrontier_BattleDomeBattleRoom_EventScript_AddSemifinalAudience:: @ 824C594
createvobject OBJ_EVENT_GFX_HEX_MANIAC, 28, 5, 2, 3, DIR_SOUTH createvobject OBJ_EVENT_GFX_HEX_MANIAC, 28, 5, 2, 3, DIR_SOUTH
createvobject OBJ_EVENT_GFX_SCHOOL_KID_M, 29, 5, 1, 3, DIR_SOUTH createvobject OBJ_EVENT_GFX_SCHOOL_KID_M, 29, 5, 1, 3, DIR_SOUTH
createvobject OBJ_EVENT_GFX_MART_EMPLOYEE, 30, 6, 2, 3, DIR_SOUTH createvobject OBJ_EVENT_GFX_MART_EMPLOYEE, 30, 6, 2, 3, DIR_SOUTH
createvobject OBJ_EVENT_GFX_WOMAN_5, 31, 8, 2, 3, 1 createvobject OBJ_EVENT_GFX_WOMAN_5, 31, 8, 2, 3, DIR_SOUTH
return return
BattleFrontier_BattleDomeBattleRoom_EventScript_AddFinalAudience:: @ 824C652 BattleFrontier_BattleDomeBattleRoom_EventScript_AddFinalAudience:: @ 824C652

View File

@ -3,6 +3,8 @@
.set LOCALID_ATTENDANT_MULTIS, 8 .set LOCALID_ATTENDANT_MULTIS, 8
.set LOCALID_ATTENDANT_LINK_MULTIS, 9 .set LOCALID_ATTENDANT_LINK_MULTIS, 9
@ Note: LOCALID_BATTLE_TOWER_LOBBY_REPORTER is a local id for this map used elsewhere. It's defined in event_objects.h
BattleFrontier_BattleTowerLobby_MapScripts:: @ 823E67B BattleFrontier_BattleTowerLobby_MapScripts:: @ 823E67B
map_script MAP_SCRIPT_ON_RESUME, BattleFrontier_BattleTowerLobby_OnResume map_script MAP_SCRIPT_ON_RESUME, BattleFrontier_BattleTowerLobby_OnResume
map_script MAP_SCRIPT_ON_TRANSITION, BattleFrontier_BattleTowerLobby_OnTransition map_script MAP_SCRIPT_ON_TRANSITION, BattleFrontier_BattleTowerLobby_OnTransition

View File

@ -1,6 +1,7 @@
.set LOCALID_DEOXYS_ROCK, 1
.set LOCALID_DEOXYS, 2 .set LOCALID_DEOXYS, 2
@ Note: LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK is a local id for this map used elsewhere. It's defined in event_objects.h
BirthIsland_Exterior_MapScripts:: @ 8267F15 BirthIsland_Exterior_MapScripts:: @ 8267F15
map_script MAP_SCRIPT_ON_TRANSITION, BirthIsland_Exterior_OnTransition map_script MAP_SCRIPT_ON_TRANSITION, BirthIsland_Exterior_OnTransition
map_script MAP_SCRIPT_ON_RESUME, BirthIsland_Exterior_OnResume map_script MAP_SCRIPT_ON_RESUME, BirthIsland_Exterior_OnResume
@ -68,9 +69,9 @@ BirthIsland_Exterior_EventScript_NotSolved3:: @ 8267FBF
BirthIsland_Exterior_EventScript_Deoxys:: @ 8267FC1 BirthIsland_Exterior_EventScript_Deoxys:: @ 8267FC1
waitse waitse
setfieldeffectargument 0, LOCALID_DEOXYS_ROCK setfieldeffectargument 0, LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK
setfieldeffectargument 1, 58 setfieldeffectargument 1, MAP_NUM(BIRTH_ISLAND_EXTERIOR)
setfieldeffectargument 2, 26 setfieldeffectargument 2, MAP_GROUP(BIRTH_ISLAND_EXTERIOR)
dofieldeffect FLDEFF_DESTROY_DEOXYS_ROCK dofieldeffect FLDEFF_DESTROY_DEOXYS_ROCK
playbgm MUS_RG_ENCOUNTER_DEOXYS, FALSE playbgm MUS_RG_ENCOUNTER_DEOXYS, FALSE
waitfieldeffect FLDEFF_DESTROY_DEOXYS_ROCK waitfieldeffect FLDEFF_DESTROY_DEOXYS_ROCK

View File

@ -1,4 +1,4 @@
.set LOCALID_MEW, 1 @ Note: LOCALID_FARAWAY_ISLAND_MEW is a local id for this map used elsewhere. It's defined in event_objects.h
FarawayIsland_Interior_MapScripts:: @ 8267CFA FarawayIsland_Interior_MapScripts:: @ 8267CFA
map_script MAP_SCRIPT_ON_RESUME, FarawayIsland_Interior_OnResume map_script MAP_SCRIPT_ON_RESUME, FarawayIsland_Interior_OnResume
@ -58,13 +58,13 @@ FarawayIsland_Interior_OnFrame: @ 8267D98
FarawayIsland_Interior_EventScript_FindMew:: @ 8267DA2 FarawayIsland_Interior_EventScript_FindMew:: @ 8267DA2
lockall lockall
playse SE_PIN playse SE_PIN
applymovement LOCALID_MEW, Common_Movement_ExclamationMark applymovement LOCALID_FARAWAY_ISLAND_MEW, Common_Movement_ExclamationMark
waitmovement 0 waitmovement 0
applymovement LOCALID_MEW, Common_Movement_Delay48 applymovement LOCALID_FARAWAY_ISLAND_MEW, Common_Movement_Delay48
waitmovement 0 waitmovement 0
applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewMoveAndHide applymovement LOCALID_FARAWAY_ISLAND_MEW, FarawayIsland_Interior_Movement_MewMoveAndHide
waitmovement 0 waitmovement 0
copyobjectxytoperm LOCALID_MEW copyobjectxytoperm LOCALID_FARAWAY_ISLAND_MEW
setvar VAR_TEMP_1, 1 setvar VAR_TEMP_1, 1
releaseall releaseall
end end
@ -120,7 +120,7 @@ FarawayIsland_Interior_Movement_MewFloatUpEast: @ 8267DEB
FarawayIsland_Interior_EventScript_Mew:: @ 8267DF2 FarawayIsland_Interior_EventScript_Mew:: @ 8267DF2
lock lock
faceplayer faceplayer
applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewAppear applymovement LOCALID_FARAWAY_ISLAND_MEW, FarawayIsland_Interior_Movement_MewAppear
waitmovement 0 waitmovement 0
setvar VAR_0x8004, 0 setvar VAR_0x8004, 0
special SetMewAboveGrass special SetMewAboveGrass
@ -171,22 +171,22 @@ FarawayIsland_Interior_EventScript_PlayerOrMewRan:: @ 8267EA4
end end
FarawayIsland_Interior_EventScript_FoundMewNorth:: @ 8267EAF FarawayIsland_Interior_EventScript_FoundMewNorth:: @ 8267EAF
applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewFloatUpNorth applymovement LOCALID_FARAWAY_ISLAND_MEW, FarawayIsland_Interior_Movement_MewFloatUpNorth
waitmovement 0 waitmovement 0
return return
FarawayIsland_Interior_EventScript_FoundMewSouth:: @ 8267EBA FarawayIsland_Interior_EventScript_FoundMewSouth:: @ 8267EBA
applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewFloatUpSouth applymovement LOCALID_FARAWAY_ISLAND_MEW, FarawayIsland_Interior_Movement_MewFloatUpSouth
waitmovement 0 waitmovement 0
return return
FarawayIsland_Interior_EventScript_FoundMewWest:: @ 8267EC5 FarawayIsland_Interior_EventScript_FoundMewWest:: @ 8267EC5
applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewFloatUpWest applymovement LOCALID_FARAWAY_ISLAND_MEW, FarawayIsland_Interior_Movement_MewFloatUpWest
waitmovement 0 waitmovement 0
return return
FarawayIsland_Interior_EventScript_FoundMewEast:: @ 8267ED0 FarawayIsland_Interior_EventScript_FoundMewEast:: @ 8267ED0
applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewFloatUpEast applymovement LOCALID_FARAWAY_ISLAND_MEW, FarawayIsland_Interior_Movement_MewFloatUpEast
waitmovement 0 waitmovement 0
return return
@ -194,7 +194,7 @@ FarawayIsland_Interior_EventScript_HideMewWhenGrassCut:: @ 8267EDB
lockall lockall
fadescreenswapbuffers FADE_TO_BLACK fadescreenswapbuffers FADE_TO_BLACK
setflag FLAG_HIDE_MEW setflag FLAG_HIDE_MEW
removeobject LOCALID_MEW removeobject LOCALID_FARAWAY_ISLAND_MEW
fadescreenswapbuffers FADE_FROM_BLACK fadescreenswapbuffers FADE_FROM_BLACK
msgbox FarawayIsland_Interior_Text_TheFeelingOfBeingWatchedFaded, MSGBOX_DEFAULT msgbox FarawayIsland_Interior_Text_TheFeelingOfBeingWatchedFaded, MSGBOX_DEFAULT
closemessage closemessage

View File

@ -2,9 +2,10 @@
.set LOCALID_VICTORIA, 2 .set LOCALID_VICTORIA, 2
.set LOCALID_VIVI, 3 .set LOCALID_VIVI, 3
.set LOCALID_VICKY, 4 .set LOCALID_VICKY, 4
.set LOCALID_PLAYER_FALLING, 45
.set LOCALID_ROCK_SMASH_MAN, 46 .set LOCALID_ROCK_SMASH_MAN, 46
@ Note: LOCALID_ROUTE111_PLAYER_FALLING is a local id for this map used elsewhere. It's defined in event_objects.h
Route111_MapScripts:: @ 81F0CA7 Route111_MapScripts:: @ 81F0CA7
map_script MAP_SCRIPT_ON_LOAD, Route111_OnLoad map_script MAP_SCRIPT_ON_LOAD, Route111_OnLoad
map_script MAP_SCRIPT_ON_TRANSITION, Route111_OnTransition map_script MAP_SCRIPT_ON_TRANSITION, Route111_OnTransition
@ -127,11 +128,11 @@ Route111_EventScript_MirageTowerDisappear:: @ 81F0E60
waitstate waitstate
delay 24 delay 24
playse SE_FALL playse SE_FALL
addobject LOCALID_PLAYER_FALLING addobject LOCALID_ROUTE111_PLAYER_FALLING
special StartPlayerDescendMirageTower special StartPlayerDescendMirageTower
waitstate waitstate
showobjectat OBJ_EVENT_ID_PLAYER, MAP_LITTLEROOT_TOWN showobjectat OBJ_EVENT_ID_PLAYER, MAP_LITTLEROOT_TOWN
removeobject LOCALID_PLAYER_FALLING removeobject LOCALID_ROUTE111_PLAYER_FALLING
delay 16 delay 16
turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH
delay 16 delay 16

View File

@ -1,11 +1,4 @@
.set LOCALID_UR_PLAYER_4, 2 @ Note: LOCALID_UNION_ROOM_PLAYER_# are local ids for this map used elsewhere. They're defined in event_objects.h
.set LOCALID_UR_PLAYER_8, 3
.set LOCALID_UR_PLAYER_7, 4
.set LOCALID_UR_PLAYER_6, 5
.set LOCALID_UR_PLAYER_5, 6
.set LOCALID_UR_PLAYER_3, 7
.set LOCALID_UR_PLAYER_2, 8
.set LOCALID_UR_PLAYER_1, 9
UnionRoom_MapScripts:: @ 823D1A6 UnionRoom_MapScripts:: @ 823D1A6
map_script MAP_SCRIPT_ON_RESUME, UnionRoom_OnResume map_script MAP_SCRIPT_ON_RESUME, UnionRoom_OnResume
@ -21,14 +14,14 @@ UnionRoom_OnResume: @ 823D1B1
setflag FLAG_HIDE_UNION_ROOM_PLAYER_6 setflag FLAG_HIDE_UNION_ROOM_PLAYER_6
setflag FLAG_HIDE_UNION_ROOM_PLAYER_7 setflag FLAG_HIDE_UNION_ROOM_PLAYER_7
setflag FLAG_HIDE_UNION_ROOM_PLAYER_8 setflag FLAG_HIDE_UNION_ROOM_PLAYER_8
removeobject LOCALID_UR_PLAYER_1 removeobject LOCALID_UNION_ROOM_PLAYER_1
removeobject LOCALID_UR_PLAYER_2 removeobject LOCALID_UNION_ROOM_PLAYER_2
removeobject LOCALID_UR_PLAYER_3 removeobject LOCALID_UNION_ROOM_PLAYER_3
removeobject LOCALID_UR_PLAYER_4 removeobject LOCALID_UNION_ROOM_PLAYER_4
removeobject LOCALID_UR_PLAYER_5 removeobject LOCALID_UNION_ROOM_PLAYER_5
removeobject LOCALID_UR_PLAYER_6 removeobject LOCALID_UNION_ROOM_PLAYER_6
removeobject LOCALID_UR_PLAYER_7 removeobject LOCALID_UNION_ROOM_PLAYER_7
removeobject LOCALID_UR_PLAYER_8 removeobject LOCALID_UNION_ROOM_PLAYER_8
special RunUnionRoom special RunUnionRoom
end end

View File

@ -1027,7 +1027,7 @@ gTVPokemonTodaySuccessfulText11:: @ 08283A5F
.string "BIG BRO: Remember, it could be your\n" .string "BIG BRO: Remember, it could be your\n"
.string "POKéMON in the spotlight next time!$" .string "POKéMON in the spotlight next time!$"
gTVTodaysSmartShopperText00:: @ 08283B05 SmartShopper_Text_Intro:: @ 08283B05
.string "Hello!\p" .string "Hello!\p"
.string "It's time for TODAY'S SMART SHOPPER.\p" .string "It's time for TODAY'S SMART SHOPPER.\p"
.string "INTERVIEWER: How are you, viewers?\p" .string "INTERVIEWER: How are you, viewers?\p"
@ -1036,7 +1036,7 @@ gTVTodaysSmartShopperText00:: @ 08283B05
.string "Let's check on what the hot sellers\n" .string "Let's check on what the hot sellers\n"
.string "have been recently.$" .string "have been recently.$"
gTVTodaysSmartShopperText01:: @ 08283BAF SmartShopper_Text_ClerkNormal:: @ 08283BAF
.string "Let's interview the clerk to get the\n" .string "Let's interview the clerk to get the\n"
.string "lowdown.\p" .string "lowdown.\p"
.string "Hi, how's your business?\p" .string "Hi, how's your business?\p"
@ -1046,7 +1046,7 @@ gTVTodaysSmartShopperText01:: @ 08283BAF
.string "Why, just the other day a TRAINER\n" .string "Why, just the other day a TRAINER\n"
.string "named {STR_VAR_1} bought {STR_VAR_3}.$" .string "named {STR_VAR_1} bought {STR_VAR_3}.$"
gTVTodaysSmartShopperText02:: @ 08283C81 SmartShopper_Text_RandomComment1:: @ 08283C81
.string "INTERVIEWER: The TRAINER bought\n" .string "INTERVIEWER: The TRAINER bought\n"
.string "{STR_VAR_3} {STR_VAR_2}S? That's a haul!\p" .string "{STR_VAR_3} {STR_VAR_2}S? That's a haul!\p"
.string "If I may say so, {STR_VAR_1} must have\n" .string "If I may say so, {STR_VAR_1} must have\n"
@ -1055,13 +1055,13 @@ gTVTodaysSmartShopperText02:: @ 08283C81
.string "For traveling, {STR_VAR_2}S are so\n" .string "For traveling, {STR_VAR_2}S are so\n"
.string "important!$" .string "important!$"
gTVTodaysSmartShopperText03:: @ 08283D32 SmartShopper_Text_RandomComment2:: @ 08283D32
.string "INTERVIEWER: Speaking of the item\n" .string "INTERVIEWER: Speaking of the item\n"
.string "{STR_VAR_2}, I just bought {STR_VAR_3} of\l" .string "{STR_VAR_2}, I just bought {STR_VAR_3} of\l"
.string "them recently.\p" .string "them recently.\p"
.string "After all, {STR_VAR_2}'s a great item!$" .string "After all, {STR_VAR_2}'s a great item!$"
gTVTodaysSmartShopperText04:: @ 08283D99 SmartShopper_Text_RandomComment3:: @ 08283D99
.string "INTERVIEWER: {STR_VAR_2}?!\n" .string "INTERVIEWER: {STR_VAR_2}?!\n"
.string "But {STR_VAR_3} of them?!\p" .string "But {STR_VAR_3} of them?!\p"
.string "I didn't think there would be anyone\n" .string "I didn't think there would be anyone\n"
@ -1069,7 +1069,7 @@ gTVTodaysSmartShopperText04:: @ 08283D99
.string "My goodness, I can only afford one or\n" .string "My goodness, I can only afford one or\n"
.string "two at a time…$" .string "two at a time…$"
gTVTodaysSmartShopperText05:: @ 08283E28 SmartShopper_Text_RandomComment4:: @ 08283E28
.string "INTERVIEWER: One time, I bought\n" .string "INTERVIEWER: One time, I bought\n"
.string "a whole lot of the item {STR_VAR_2}.\p" .string "a whole lot of the item {STR_VAR_2}.\p"
.string "But it turned out to be too many.\n" .string "But it turned out to be too many.\n"
@ -1079,21 +1079,21 @@ gTVTodaysSmartShopperText05:: @ 08283E28
.string "Oops!\p" .string "Oops!\p"
.string "There's no point talking about me!$" .string "There's no point talking about me!$"
gTVTodaysSmartShopperText06:: @ 08283F01 SmartShopper_Text_SecondItem:: @ 08283F01
.string "CLERK: {STR_VAR_1} also bought the item\n" .string "CLERK: {STR_VAR_1} also bought the item\n"
.string "{STR_VAR_2} in bulk, taking {STR_VAR_3}.\p" .string "{STR_VAR_2} in bulk, taking {STR_VAR_3}.\p"
.string "INTERVIEWER: Oh, that's smart.\n" .string "INTERVIEWER: Oh, that's smart.\n"
.string "{STR_VAR_2}'s a very good item, too.$" .string "{STR_VAR_2}'s a very good item, too.$"
gTVTodaysSmartShopperText07:: @ 08283F72 SmartShopper_Text_ThirdItem:: @ 08283F72
.string "CLERK: And, the TRAINER also bought\n" .string "CLERK: And, the TRAINER also bought\n"
.string "{STR_VAR_3} of the item {STR_VAR_2}.$" .string "{STR_VAR_3} of the item {STR_VAR_2}.$"
gTVTodaysSmartShopperText08:: @ 08283FA9 SmartShopper_Text_DuringSale:: @ 08283FA9
.string "CLERK: Plus, it was during a big sale.\n" .string "CLERK: Plus, it was during a big sale.\n"
.string "That's smart shopping.$" .string "That's smart shopping.$"
gTVTodaysSmartShopperText09:: @ 08283FE7 SmartShopper_Text_OutroNormal:: @ 08283FE7
.string "INTERVIEWER: Hmm… {STR_VAR_1} sounds like\n" .string "INTERVIEWER: Hmm… {STR_VAR_1} sounds like\n"
.string "quite the shrewd bargain hunter!\p" .string "quite the shrewd bargain hunter!\p"
.string "In total, {STR_VAR_1}'s purchases came to…\p" .string "In total, {STR_VAR_1}'s purchases came to…\p"
@ -1102,11 +1102,11 @@ gTVTodaysSmartShopperText09:: @ 08283FE7
.string "Oops! We're out of time!\n" .string "Oops! We're out of time!\n"
.string "See you on our next broadcast!$" .string "See you on our next broadcast!$"
gTVTodaysSmartShopperText10:: @ 0828409E SmartShopper_Text_IsVIP:: @ 0828409E
.string "CLERK: {STR_VAR_1} is a VIP customer,\n" .string "CLERK: {STR_VAR_1} is a VIP customer,\n"
.string "no doubt about it.$" .string "no doubt about it.$"
gTVTodaysSmartShopperText11:: @ 082840CE SmartShopper_Text_ClerkMax:: @ 082840CE
.string "Let's interview the clerk to get the\n" .string "Let's interview the clerk to get the\n"
.string "lowdown.\p" .string "lowdown.\p"
.string "Hi, how's your business?\p" .string "Hi, how's your business?\p"
@ -1127,7 +1127,7 @@ gTVTodaysSmartShopperText11:: @ 082840CE
.string "CLERK: {STR_VAR_1} is a VIP customer,\n" .string "CLERK: {STR_VAR_1} is a VIP customer,\n"
.string "no doubt about it.$" .string "no doubt about it.$"
gTVTodaysSmartShopperText12:: @ 082842E6 SmartShopper_Text_OutroMax:: @ 082842E6
.string "INTERVIEWER: Hmm…\n" .string "INTERVIEWER: Hmm…\n"
.string "That is amazing.\p" .string "That is amazing.\p"
.string "But why would the TRAINER need to buy\n" .string "But why would the TRAINER need to buy\n"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 B

View File

@ -29,24 +29,24 @@
#define AI_WEATHER_HAIL 3 #define AI_WEATHER_HAIL 3
// get_how_powerful_move_is // get_how_powerful_move_is
#define MOVE_POWER_DISCOURAGED 0 #define MOVE_POWER_OTHER 0
#define MOVE_NOT_MOST_POWERFUL 1 #define MOVE_NOT_MOST_POWERFUL 1
#define MOVE_MOST_POWERFUL 2 #define MOVE_MOST_POWERFUL 2
// script's table id to bit // script's table id to bit
#define AI_SCRIPT_CHECK_BAD_MOVE (1 << 0) #define AI_SCRIPT_CHECK_BAD_MOVE (1 << 0)
#define AI_SCRIPT_TRY_TO_FAINT (1 << 1) #define AI_SCRIPT_TRY_TO_FAINT (1 << 1)
#define AI_SCRIPT_CHECK_VIABILITY (1 << 2) #define AI_SCRIPT_CHECK_VIABILITY (1 << 2)
#define AI_SCRIPT_SETUP_FIRST_TURN (1 << 3) #define AI_SCRIPT_SETUP_FIRST_TURN (1 << 3)
#define AI_SCRIPT_RISKY (1 << 4) #define AI_SCRIPT_RISKY (1 << 4)
#define AI_SCRIPT_PREFER_STRONGEST_MOVE (1 << 5) #define AI_SCRIPT_PREFER_POWER_EXTREMES (1 << 5)
#define AI_SCRIPT_PREFER_BATON_PASS (1 << 6) #define AI_SCRIPT_PREFER_BATON_PASS (1 << 6)
#define AI_SCRIPT_DOUBLE_BATTLE (1 << 7) #define AI_SCRIPT_DOUBLE_BATTLE (1 << 7)
#define AI_SCRIPT_HP_AWARE (1 << 8) #define AI_SCRIPT_HP_AWARE (1 << 8)
#define AI_SCRIPT_UNKNOWN (1 << 9) #define AI_SCRIPT_TRY_SUNNY_DAY_START (1 << 9)
// 10 - 28 are not used // 10 - 28 are not used
#define AI_SCRIPT_ROAMING (1 << 29) #define AI_SCRIPT_ROAMING (1 << 29)
#define AI_SCRIPT_SAFARI (1 << 30) #define AI_SCRIPT_SAFARI (1 << 30)
#define AI_SCRIPT_FIRST_BATTLE (1 << 31) #define AI_SCRIPT_FIRST_BATTLE (1 << 31)
#endif // GUARD_CONSTANTS_BATTLE_AI_H #endif // GUARD_CONSTANTS_BATTLE_AI_H

View File

@ -279,7 +279,37 @@
#define FIRST_DECORATION_SPRITE_GFX OBJ_EVENT_GFX_PICHU_DOLL #define FIRST_DECORATION_SPRITE_GFX OBJ_EVENT_GFX_PICHU_DOLL
// Special object event local ids
#define OBJ_EVENT_ID_PLAYER 0xFF #define OBJ_EVENT_ID_PLAYER 0xFF
#define OBJ_EVENT_ID_CAMERA 0x7F #define OBJ_EVENT_ID_CAMERA 0x7F
// Object event local ids referenced in C files
#define LOCALID_ROUTE111_PLAYER_FALLING 45
#define LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK 1
#define LOCALID_FARAWAY_ISLAND_MEW 1
#define LOCALID_UNION_ROOM_PLAYER_4 2
#define LOCALID_UNION_ROOM_PLAYER_8 3
#define LOCALID_UNION_ROOM_PLAYER_7 4
#define LOCALID_UNION_ROOM_PLAYER_6 5
#define LOCALID_UNION_ROOM_PLAYER_5 6
#define LOCALID_UNION_ROOM_PLAYER_3 7
#define LOCALID_UNION_ROOM_PLAYER_2 8
#define LOCALID_UNION_ROOM_PLAYER_1 9
#define LOCALID_BATTLE_TOWER_LOBBY_REPORTER 5
#define LOCALID_TRUCK_BOX_TOP 1
#define LOCALID_TRUCK_BOX_BOTTOM_L 2
#define LOCALID_TRUCK_BOX_BOTTOM_R 3
#define LOCALID_OLDALE_MART_CLERK 1
#define LOCALID_LAVARIDGE_MART_CLERK 1
#define LOCALID_FALLARBOR_MART_CLERK 1
#define LOCALID_VERDANTURF_MART_CLERK 1
#define LOCALID_PETALBURG_MART_CLERK 1
#define LOCALID_SLATEPORT_MART_CLERK 1
#define LOCALID_MAUVILLE_MART_CLERK 1
#define LOCALID_RUSTBORO_MART_CLERK 1
#define LOCALID_FORTREE_MART_CLERK 1
#define LOCALID_MOSSDEEP_MART_CLERK 1
#define LOCALID_SOOTOPOLIS_MART_CLERK 1
#define LOCALID_BATTLE_FRONTIER_MART_CLERK 1
#endif // GUARD_CONSTANTS_EVENT_OBJECTS_H #endif // GUARD_CONSTANTS_EVENT_OBJECTS_H

View File

@ -249,6 +249,21 @@
#define CONTESTLADYLIVE_STATE_LOST 2 #define CONTESTLADYLIVE_STATE_LOST 2
#define CONTESTLADYLIVE_STATE_LOST_BADLY 3 #define CONTESTLADYLIVE_STATE_LOST_BADLY 3
// TV Show states for Smart Shopper
#define SMARTSHOPPER_STATE_INTRO 0
#define SMARTSHOPPER_STATE_CLERK_NORMAL 1
#define SMARTSHOPPER_STATE_RAND_COMMENT_1 2
#define SMARTSHOPPER_STATE_RAND_COMMENT_2 3
#define SMARTSHOPPER_STATE_RAND_COMMENT_3 4
#define SMARTSHOPPER_STATE_RAND_COMMENT_4 5
#define SMARTSHOPPER_STATE_SECOND_ITEM 6
#define SMARTSHOPPER_STATE_THIRD_ITEM 7
#define SMARTSHOPPER_STATE_DURING_SALE 8
#define SMARTSHOPPER_STATE_OUTRO_NORMAL 9
#define SMARTSHOPPER_STATE_IS_VIP 10
#define SMARTSHOPPER_STATE_CLERK_MAX 11
#define SMARTSHOPPER_STATE_OUTRO_MAX 12
#define SMARTSHOPPER_NUM_ITEMS 3 #define SMARTSHOPPER_NUM_ITEMS 3
#endif //GUARD_CONSTANTS_TV_H #endif //GUARD_CONSTANTS_TV_H

View File

@ -2,9 +2,9 @@
#define GUARD_EVENT_OBJECT_LOCK_H #define GUARD_EVENT_OBJECT_LOCK_H
bool8 IsFreezePlayerFinished(void); bool8 IsFreezePlayerFinished(void);
void ScriptFreezeObjectEvents(void);
bool8 IsFreezeSelectedObjectAndPlayerFinished(void); bool8 IsFreezeSelectedObjectAndPlayerFinished(void);
void LockSelectedObjectEvent(void); void FreezeObjects_WaitForPlayer(void);
void FreezeObjects_WaitForPlayerAndSelected(void);
void FreezeForApproachingTrainers(void); void FreezeForApproachingTrainers(void);
bool8 IsFreezeObjectAndPlayerFinished(void); bool8 IsFreezeObjectAndPlayerFinished(void);
void ScriptUnfreezeObjectEvents(void); void ScriptUnfreezeObjectEvents(void);

View File

@ -108,19 +108,19 @@ extern const u8 gTVPokemonTodaySuccessfulText08[];
extern const u8 gTVPokemonTodaySuccessfulText09[]; extern const u8 gTVPokemonTodaySuccessfulText09[];
extern const u8 gTVPokemonTodaySuccessfulText10[]; extern const u8 gTVPokemonTodaySuccessfulText10[];
extern const u8 gTVPokemonTodaySuccessfulText11[]; extern const u8 gTVPokemonTodaySuccessfulText11[];
extern const u8 gTVTodaysSmartShopperText00[]; extern const u8 SmartShopper_Text_Intro[];
extern const u8 gTVTodaysSmartShopperText01[]; extern const u8 SmartShopper_Text_ClerkNormal[];
extern const u8 gTVTodaysSmartShopperText02[]; extern const u8 SmartShopper_Text_RandomComment1[];
extern const u8 gTVTodaysSmartShopperText03[]; extern const u8 SmartShopper_Text_RandomComment2[];
extern const u8 gTVTodaysSmartShopperText04[]; extern const u8 SmartShopper_Text_RandomComment3[];
extern const u8 gTVTodaysSmartShopperText05[]; extern const u8 SmartShopper_Text_RandomComment4[];
extern const u8 gTVTodaysSmartShopperText06[]; extern const u8 SmartShopper_Text_SecondItem[];
extern const u8 gTVTodaysSmartShopperText07[]; extern const u8 SmartShopper_Text_ThirdItem[];
extern const u8 gTVTodaysSmartShopperText08[]; extern const u8 SmartShopper_Text_DuringSale[];
extern const u8 gTVTodaysSmartShopperText09[]; extern const u8 SmartShopper_Text_OutroNormal[];
extern const u8 gTVTodaysSmartShopperText10[]; extern const u8 SmartShopper_Text_IsVIP[];
extern const u8 gTVTodaysSmartShopperText11[]; extern const u8 SmartShopper_Text_ClerkMax[];
extern const u8 gTVTodaysSmartShopperText12[]; extern const u8 SmartShopper_Text_OutroMax[];
extern const u8 gTVWorldOfMastersText00[]; extern const u8 gTVWorldOfMastersText00[];
extern const u8 gTVWorldOfMastersText01[]; extern const u8 gTVWorldOfMastersText01[];
extern const u8 gTVWorldOfMastersText02[]; extern const u8 gTVWorldOfMastersText02[];

View File

@ -31,7 +31,7 @@ struct ListMenuTemplate
{ {
const struct ListMenuItem *items; const struct ListMenuItem *items;
void (* moveCursorFunc)(s32 itemIndex, bool8 onInit, struct ListMenu *list); void (* moveCursorFunc)(s32 itemIndex, bool8 onInit, struct ListMenu *list);
void (* itemPrintFunc)(u8 windowId, s32 itemId, u8 y); void (* itemPrintFunc)(u8 windowId, u32 itemId, u8 y);
u16 totalItems; u16 totalItems;
u16 maxShowed; u16 maxShowed;
u8 windowId; u8 windowId;

View File

@ -111,7 +111,7 @@ void PokedexAreaScreen_UpdateRegionMapVariablesAndVideoRegs(s16 x, s16 y);
void CB2_OpenFlyMap(void); void CB2_OpenFlyMap(void);
bool8 IsRegionMapZoomed(void); bool8 IsRegionMapZoomed(void);
void TrySetPlayerIconBlink(void); void TrySetPlayerIconBlink(void);
void sub_8123030(u16 color, u32 coeff); void BlendRegionMap(u16 color, u32 coeff);
void SetRegionMapDataForZoom(void); void SetRegionMapDataForZoom(void);
extern const struct RegionMapLocation gRegionMapEntries[]; extern const struct RegionMapLocation gRegionMapEntries[];

View File

@ -263,7 +263,10 @@ static const BattleAICmdFunc sBattleAICmdTable[] =
Cmd_if_holds_item, // 0x62 Cmd_if_holds_item, // 0x62
}; };
static const u16 sDiscouragedPowerfulMoveEffects[] = // For the purposes of determining the most powerful move in a moveset, these
// moves are treated the same as having a power of 0 or 1
#define IGNORED_MOVES_END 0xFFFF
static const u16 sIgnoredPowerfulMoveEffects[] =
{ {
EFFECT_EXPLOSION, EFFECT_EXPLOSION,
EFFECT_DREAM_EATER, EFFECT_DREAM_EATER,
@ -277,7 +280,7 @@ static const u16 sDiscouragedPowerfulMoveEffects[] =
EFFECT_SUPERPOWER, EFFECT_SUPERPOWER,
EFFECT_ERUPTION, EFFECT_ERUPTION,
EFFECT_OVERHEAT, EFFECT_OVERHEAT,
0xFFFF IGNORED_MOVES_END
}; };
// code // code
@ -1177,14 +1180,14 @@ static void Cmd_get_how_powerful_move_is(void)
s32 i, checkedMove; s32 i, checkedMove;
s32 moveDmgs[MAX_MON_MOVES]; s32 moveDmgs[MAX_MON_MOVES];
for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++) for (i = 0; sIgnoredPowerfulMoveEffects[i] != IGNORED_MOVES_END; i++)
{ {
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sDiscouragedPowerfulMoveEffects[i]) if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == sIgnoredPowerfulMoveEffects[i])
break; break;
} }
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power > 1 if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power > 1
&& sDiscouragedPowerfulMoveEffects[i] == 0xFFFF) && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END)
{ {
gDynamicBasePower = 0; gDynamicBasePower = 0;
*(&gBattleStruct->dynamicMoveType) = 0; *(&gBattleStruct->dynamicMoveType) = 0;
@ -1192,16 +1195,18 @@ static void Cmd_get_how_powerful_move_is(void)
gMoveResultFlags = 0; gMoveResultFlags = 0;
gCritMultiplier = 1; gCritMultiplier = 1;
// Considered move has power and is not in sIgnoredPowerfulMoveEffects
// Check all other moves and calculate their power
for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++) for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++)
{ {
for (i = 0; sDiscouragedPowerfulMoveEffects[i] != 0xFFFF; i++) for (i = 0; sIgnoredPowerfulMoveEffects[i] != IGNORED_MOVES_END; i++)
{ {
if (gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].effect == sDiscouragedPowerfulMoveEffects[i]) if (gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].effect == sIgnoredPowerfulMoveEffects[i])
break; break;
} }
if (gBattleMons[sBattler_AI].moves[checkedMove] != MOVE_NONE if (gBattleMons[sBattler_AI].moves[checkedMove] != MOVE_NONE
&& sDiscouragedPowerfulMoveEffects[i] == 0xFFFF && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END
&& gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].power > 1) && gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].power > 1)
{ {
gCurrentMove = gBattleMons[sBattler_AI].moves[checkedMove]; gCurrentMove = gBattleMons[sBattler_AI].moves[checkedMove];
@ -1217,6 +1222,7 @@ static void Cmd_get_how_powerful_move_is(void)
} }
} }
// Is the considered move the most powerful move available?
for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++) for (checkedMove = 0; checkedMove < MAX_MON_MOVES; checkedMove++)
{ {
if (moveDmgs[checkedMove] > moveDmgs[AI_THINKING_STRUCT->movesetIndex]) if (moveDmgs[checkedMove] > moveDmgs[AI_THINKING_STRUCT->movesetIndex])
@ -1224,13 +1230,14 @@ static void Cmd_get_how_powerful_move_is(void)
} }
if (checkedMove == MAX_MON_MOVES) if (checkedMove == MAX_MON_MOVES)
AI_THINKING_STRUCT->funcResult = MOVE_MOST_POWERFUL; // Is the most powerful. AI_THINKING_STRUCT->funcResult = MOVE_MOST_POWERFUL;
else else
AI_THINKING_STRUCT->funcResult = MOVE_NOT_MOST_POWERFUL; // Not the most powerful. AI_THINKING_STRUCT->funcResult = MOVE_NOT_MOST_POWERFUL;
} }
else else
{ {
AI_THINKING_STRUCT->funcResult = MOVE_POWER_DISCOURAGED; // Highly discouraged in terms of power. // Move has a power of 0/1, or is in the group sIgnoredPowerfulMoveEffects
AI_THINKING_STRUCT->funcResult = MOVE_POWER_OTHER;
} }
gAIScriptPtr++; gAIScriptPtr++;

View File

@ -1211,8 +1211,8 @@ static const u8 gUnknown_0860D1A0[DOME_TOURNAMENT_TRAINERS_COUNT / 2][DOME_ROUND
static const u8 gUnknown_0860D1C0[DOME_TOURNAMENT_TRAINERS_COUNT] = {0, 15, 8, 7, 3, 12, 11, 4, 1, 14, 9, 6, 2, 13, 10, 5}; static const u8 gUnknown_0860D1C0[DOME_TOURNAMENT_TRAINERS_COUNT] = {0, 15, 8, 7, 3, 12, 11, 4, 1, 14, 9, 6, 2, 13, 10, 5};
// Each tourney trainer has a text describing their potential to win, depending on their seed ranking for the current tourney // The first line of text on a trainers info card. It describes their potential to win, based on their seed in the tournament tree.
// Dome Ace Tucker has their own separate potential text // Dome Ace Tucker has their own separate potential text.
static const u8 *const sBattleDomePotentialTexts[DOME_TOURNAMENT_TRAINERS_COUNT + 1] = static const u8 *const sBattleDomePotentialTexts[DOME_TOURNAMENT_TRAINERS_COUNT + 1] =
{ {
BattleDome_Text_Potential1, // Highest potential BattleDome_Text_Potential1, // Highest potential
@ -1234,7 +1234,7 @@ static const u8 *const sBattleDomePotentialTexts[DOME_TOURNAMENT_TRAINERS_COUNT
BattleDome_Text_PotentialDomeAceTucker, BattleDome_Text_PotentialDomeAceTucker,
}; };
// The first line of text on a trainers info card that gives information about their battle style (dependent on their party's moves) // The second line of text on a trainers info card. It gives information about their battle style (dependent on their party's moves).
static const u8 *const sBattleDomeOpponentStyleTexts[NUM_BATTLE_STYLES] = static const u8 *const sBattleDomeOpponentStyleTexts[NUM_BATTLE_STYLES] =
{ {
[DOME_BATTLE_STYLE_RISKY] = BattleDome_Text_StyleRiskDisaster, [DOME_BATTLE_STYLE_RISKY] = BattleDome_Text_StyleRiskDisaster,
@ -1271,7 +1271,7 @@ static const u8 *const sBattleDomeOpponentStyleTexts[NUM_BATTLE_STYLES] =
[DOME_BATTLE_STYLE_UNUSED4] = BattleDome_Text_StyleSampleMessage4, [DOME_BATTLE_STYLE_UNUSED4] = BattleDome_Text_StyleSampleMessage4,
}; };
// The second line of text on a trainers info card that gives information about their party's stat spread // The third line of text on a trainers info card. It that gives information about their party's stat spread (based on their Pokémon's effort values and Nature).
static const u8 *const sBattleDomeOpponentStatsTexts[] = static const u8 *const sBattleDomeOpponentStatsTexts[] =
{ {
BattleDome_Text_EmphasizesHPAndAtk, // DOME_TEXT_TWO_GOOD_STATS and DOME_TEXT_HP start here BattleDome_Text_EmphasizesHPAndAtk, // DOME_TEXT_TWO_GOOD_STATS and DOME_TEXT_HP start here

View File

@ -106,7 +106,7 @@ static void BagAction_Give(u8);
static void BagAction_Cancel(u8); static void BagAction_Cancel(u8);
static void BagAction_UseInBattle(u8); static void BagAction_UseInBattle(u8);
static void BagCursorMoved(s32, bool8, struct ListMenu *); static void BagCursorMoved(s32, bool8, struct ListMenu *);
static void PrintItemQuantity(u8, s32, u8); static void PrintItemQuantity(u8 windowId, u32 itemId, u8 y);
static void TossItem(u8); static void TossItem(u8);
static void DontTossItem(u8); static void DontTossItem(u8);
@ -651,7 +651,7 @@ static void BagCursorMoved(s32 itemIndex, bool8 onInit, struct ListMenu *list)
} }
} }
static void PrintItemQuantity(u8 windowId, s32 itemIndex, u8 y) static void PrintItemQuantity(u8 windowId, u32 itemIndex, u8 y)
{ {
s32 xAlign; s32 xAlign;
if (itemIndex == LIST_CANCEL) if (itemIndex == LIST_CANCEL)

View File

@ -1246,7 +1246,7 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
break; break;
case PTS_REFLECT: case PTS_REFLECT:
// If hit Reflect with damaging physical move // If hit Reflect with damaging physical move
if (type < TYPE_MYSTERY && power != 0 && tvPtr->side[defSide].reflectMonId != 0) if (IS_TYPE_PHYSICAL(type) && power != 0 && tvPtr->side[defSide].reflectMonId != 0)
{ {
u32 id = (tvPtr->side[defSide].reflectMonId - 1) * 4; u32 id = (tvPtr->side[defSide].reflectMonId - 1) * 4;
movePoints->points[defSide][id + tvPtr->side[defSide].reflectMoveSlot] += sPointsArray[caseId][0]; movePoints->points[defSide][id + tvPtr->side[defSide].reflectMoveSlot] += sPointsArray[caseId][0];
@ -1254,7 +1254,7 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
break; break;
case PTS_LIGHT_SCREEN: case PTS_LIGHT_SCREEN:
// If hit Light Screen with damaging special move // If hit Light Screen with damaging special move
if (type >= TYPE_MYSTERY && power != 0 && tvPtr->side[defSide].lightScreenMonId != 0) if (!IS_TYPE_PHYSICAL(type) && power != 0 && tvPtr->side[defSide].lightScreenMonId != 0)
{ {
u32 id = (tvPtr->side[defSide].lightScreenMonId - 1) * 4; u32 id = (tvPtr->side[defSide].lightScreenMonId - 1) * 4;
movePoints->points[defSide][id + tvPtr->side[defSide].lightScreenMoveSlot] += sPointsArray[caseId][0]; movePoints->points[defSide][id + tvPtr->side[defSide].lightScreenMoveSlot] += sPointsArray[caseId][0];

View File

@ -29,7 +29,7 @@ extern const struct Evolution gEvolutionTable[][EVOS_PER_MON];
static void ClearDaycareMonMail(struct DaycareMail *mail); static void ClearDaycareMonMail(struct DaycareMail *mail);
static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare); static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare);
static u8 GetDaycareCompatibilityScore(struct DayCare *daycare); static u8 GetDaycareCompatibilityScore(struct DayCare *daycare);
static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y); static void DaycarePrintMonInfo(u8 windowId, u32 daycareSlotId, u8 y);
// RAM buffers used to assist with BuildEggMoveset() // RAM buffers used to assist with BuildEggMoveset()
EWRAM_DATA static u16 sHatchedEggLevelUpMoves[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0}; EWRAM_DATA static u16 sHatchedEggLevelUpMoves[EGG_LVL_UP_MOVES_ARRAY_COUNT] = {0};
@ -1226,7 +1226,7 @@ static void DaycarePrintMonLvl(struct DayCare *daycare, u8 windowId, u32 daycare
DaycareAddTextPrinter(windowId, lvlText, x, y); DaycareAddTextPrinter(windowId, lvlText, x, y);
} }
static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y) static void DaycarePrintMonInfo(u8 windowId, u32 daycareSlotId, u8 y)
{ {
if (daycareSlotId < (unsigned) DAYCARE_MON_COUNT) if (daycareSlotId < (unsigned) DAYCARE_MON_COUNT)
{ {

View File

@ -147,7 +147,7 @@ static void ReturnToActionsMenuFromCategories(u8 taskId);
static void ExitTraderDecorationMenu(u8 taskId); static void ExitTraderDecorationMenu(u8 taskId);
static void CopyDecorationMenuItemName(u8 *dest, u16 decoration); static void CopyDecorationMenuItemName(u8 *dest, u16 decoration);
static void DecorationItemsMenu_OnCursorMove(s32 itemIndex, bool8 flag, struct ListMenu *menu); static void DecorationItemsMenu_OnCursorMove(s32 itemIndex, bool8 flag, struct ListMenu *menu);
static void DecorationItemsMenu_PrintDecorationInUse(u8 windowId, s32 itemIndex, u8 y); static void DecorationItemsMenu_PrintDecorationInUse(u8 windowId, u32 itemIndex, u8 y);
static void ShowDecorationItemsWindow(u8 taskId); static void ShowDecorationItemsWindow(u8 taskId);
static void HandleDecorationItemsMenuInput(u8 taskId); static void HandleDecorationItemsMenuInput(u8 taskId);
static void PrintDecorationItemDescription(s32 itemIndex); static void PrintDecorationItemDescription(s32 itemIndex);
@ -912,9 +912,9 @@ static void DecorationItemsMenu_OnCursorMove(s32 itemIndex, bool8 flag, struct L
PrintDecorationItemDescription(itemIndex); PrintDecorationItemDescription(itemIndex);
} }
static void DecorationItemsMenu_PrintDecorationInUse(u8 windowId, s32 itemIndex, u8 y) static void DecorationItemsMenu_PrintDecorationInUse(u8 windowId, u32 itemIndex, u8 y)
{ {
if (itemIndex != -2) if (itemIndex != LIST_CANCEL)
{ {
if (IsDecorationIndexInSecretBase(itemIndex + 1) == TRUE) if (IsDecorationIndexInSecretBase(itemIndex + 1) == TRUE)
BlitMenuInfoIcon(windowId, MENU_INFO_ICON_BALL_RED, 92, y + 2); BlitMenuInfoIcon(windowId, MENU_INFO_ICON_BALL_RED, 92, y + 2);

View File

@ -40,7 +40,7 @@ bool8 IsFreezePlayerFinished(void)
} }
void ScriptFreezeObjectEvents(void) void FreezeObjects_WaitForPlayer(void)
{ {
FreezeObjectEvents(); FreezeObjectEvents();
CreateTask(Task_FreezePlayer, 80); CreateTask(Task_FreezePlayer, 80);
@ -82,7 +82,9 @@ bool8 IsFreezeSelectedObjectAndPlayerFinished(void)
} }
} }
void LockSelectedObjectEvent(void) // Freeze all objects immediately except the selected object and the player.
// The selected object and player are frozen once their movement is finished.
void FreezeObjects_WaitForPlayerAndSelected(void)
{ {
u8 taskId; u8 taskId;
FreezeObjectEventsExceptOne(gSelectedObjectEvent); FreezeObjectEventsExceptOne(gSelectedObjectEvent);
@ -144,6 +146,8 @@ static void Task_FreezeObjectAndPlayer(u8 taskId)
DestroyTask(taskId); DestroyTask(taskId);
} }
// Freeze all objects immediately except the player and the approaching trainers.
// The approaching trainers and player are frozen once their movement is finished
void FreezeForApproachingTrainers(void) void FreezeForApproachingTrainers(void)
{ {
u8 trainerObjectId1, trainerObjectId2, taskId; u8 trainerObjectId1, trainerObjectId2, taskId;

View File

@ -38,7 +38,7 @@ static const s16 sFarawayIslandRockCoords[4][2] =
static u8 GetMewObjectEventId(void) static u8 GetMewObjectEventId(void)
{ {
u8 objectEventId; u8 objectEventId;
TryGetObjectEventIdByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId); TryGetObjectEventIdByLocalIdAndMap(LOCALID_FARAWAY_ISLAND_MEW, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId);
return objectEventId; return objectEventId;
} }

View File

@ -72,12 +72,12 @@ void Task_Truck1(u8 taskId)
s16 cameraXpan = 0, cameraYpan = 0; s16 cameraXpan = 0, cameraYpan = 0;
s16 box1, box2, box3; s16 box1, box2, box3;
box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box. box1 = GetTruckBoxMovement(data[0] + 30) * 4;
SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3); SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
box2 = GetTruckBoxMovement(data[0]) * 2; // bottom left box. box2 = GetTruckBoxMovement(data[0]) * 2;
SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3); SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
box3 = GetTruckBoxMovement(data[0]) * 4; // bottom right box. box3 = GetTruckBoxMovement(data[0]) * 4;
SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3); SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
if (++data[0] == SECONDS(500)) // this will never run if (++data[0] == SECONDS(500)) // this will never run
data[0] = 0; // reset the timer if it gets stuck. data[0] = 0; // reset the timer if it gets stuck.
@ -116,11 +116,11 @@ void Task_Truck2(u8 taskId)
cameraYpan = GetTruckCameraBobbingY(data[2]); cameraYpan = GetTruckCameraBobbingY(data[2]);
SetCameraPanning(cameraXpan, cameraYpan); SetCameraPanning(cameraXpan, cameraYpan);
box1 = GetTruckBoxMovement(data[2] + 30) * 4; box1 = GetTruckBoxMovement(data[2] + 30) * 4;
SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3); SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
box2 = GetTruckBoxMovement(data[2]) * 2; box2 = GetTruckBoxMovement(data[2]) * 2;
SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3); SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
box3 = GetTruckBoxMovement(data[2]) * 4; box3 = GetTruckBoxMovement(data[2]) * 4;
SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3); SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
} }
} }
@ -147,9 +147,9 @@ static void Task_Truck3(u8 taskId)
cameraXpan = gTruckCamera_HorizontalTable[data[1]]; cameraXpan = gTruckCamera_HorizontalTable[data[1]];
cameraYpan = 0; cameraYpan = 0;
SetCameraPanning(cameraXpan, 0); SetCameraPanning(cameraXpan, 0);
SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, cameraYpan + 3); SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, cameraYpan + 3);
SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, cameraYpan - 3); SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, cameraYpan - 3);
SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, cameraYpan); SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, cameraYpan);
} }
} }
@ -242,9 +242,9 @@ void EndTruckSequence(u8 taskId)
{ {
if (!FuncIsActiveTask(Task_HandleTruckSequence)) if (!FuncIsActiveTask(Task_HandleTruckSequence))
{ {
SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, 3); SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, 3);
SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, -3); SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, -3);
SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3, 0); SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3, 0);
} }
} }

View File

@ -3429,7 +3429,7 @@ static void ChangeDeoxysRockLevel(u8 rockLevel)
{ {
u8 objectEventId; u8 objectEventId;
LoadPalette(&sDeoxysRockPalettes[rockLevel], 0x1A0, 8); LoadPalette(&sDeoxysRockPalettes[rockLevel], 0x1A0, 8);
TryGetObjectEventIdByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId); TryGetObjectEventIdByLocalIdAndMap(LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId);
if (rockLevel == 0) if (rockLevel == 0)
PlaySE(SE_M_CONFUSE_RAY); PlaySE(SE_M_CONFUSE_RAY);
@ -3437,9 +3437,9 @@ static void ChangeDeoxysRockLevel(u8 rockLevel)
PlaySE(SE_RG_DEOXYS_MOVE); PlaySE(SE_RG_DEOXYS_MOVE);
CreateTask(WaitForDeoxysRockMovement, 8); CreateTask(WaitForDeoxysRockMovement, 8);
gFieldEffectArguments[0] = 1; gFieldEffectArguments[0] = LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK;
gFieldEffectArguments[1] = 58; gFieldEffectArguments[1] = MAP_NUM(BIRTH_ISLAND_EXTERIOR);
gFieldEffectArguments[2] = 26; gFieldEffectArguments[2] = MAP_GROUP(BIRTH_ISLAND_EXTERIOR);
gFieldEffectArguments[3] = sDeoxysRockCoords[rockLevel][0]; gFieldEffectArguments[3] = sDeoxysRockCoords[rockLevel][0];
gFieldEffectArguments[4] = sDeoxysRockCoords[rockLevel][1]; gFieldEffectArguments[4] = sDeoxysRockCoords[rockLevel][1];
@ -3686,18 +3686,18 @@ u32 GetMartEmployeeObjectEventId(void)
{ {
static const u8 sPokeMarts[][3] = static const u8 sPokeMarts[][3] =
{ {
{ MAP_GROUP(OLDALE_TOWN_MART), MAP_NUM(OLDALE_TOWN_MART), 1 }, { MAP_GROUP(OLDALE_TOWN_MART), MAP_NUM(OLDALE_TOWN_MART), LOCALID_OLDALE_MART_CLERK },
{ MAP_GROUP(LAVARIDGE_TOWN_MART), MAP_NUM(LAVARIDGE_TOWN_MART), 1 }, { MAP_GROUP(LAVARIDGE_TOWN_MART), MAP_NUM(LAVARIDGE_TOWN_MART), LOCALID_LAVARIDGE_MART_CLERK },
{ MAP_GROUP(FALLARBOR_TOWN_MART), MAP_NUM(FALLARBOR_TOWN_MART), 1 }, { MAP_GROUP(FALLARBOR_TOWN_MART), MAP_NUM(FALLARBOR_TOWN_MART), LOCALID_FALLARBOR_MART_CLERK },
{ MAP_GROUP(VERDANTURF_TOWN_MART), MAP_NUM(VERDANTURF_TOWN_MART), 1 }, { MAP_GROUP(VERDANTURF_TOWN_MART), MAP_NUM(VERDANTURF_TOWN_MART), LOCALID_VERDANTURF_MART_CLERK },
{ MAP_GROUP(PETALBURG_CITY_MART), MAP_NUM(PETALBURG_CITY_MART), 1 }, { MAP_GROUP(PETALBURG_CITY_MART), MAP_NUM(PETALBURG_CITY_MART), LOCALID_PETALBURG_MART_CLERK },
{ MAP_GROUP(SLATEPORT_CITY_MART), MAP_NUM(SLATEPORT_CITY_MART), 1 }, { MAP_GROUP(SLATEPORT_CITY_MART), MAP_NUM(SLATEPORT_CITY_MART), LOCALID_SLATEPORT_MART_CLERK },
{ MAP_GROUP(MAUVILLE_CITY_MART), MAP_NUM(MAUVILLE_CITY_MART), 1 }, { MAP_GROUP(MAUVILLE_CITY_MART), MAP_NUM(MAUVILLE_CITY_MART), LOCALID_MAUVILLE_MART_CLERK },
{ MAP_GROUP(RUSTBORO_CITY_MART), MAP_NUM(RUSTBORO_CITY_MART), 1 }, { MAP_GROUP(RUSTBORO_CITY_MART), MAP_NUM(RUSTBORO_CITY_MART), LOCALID_RUSTBORO_MART_CLERK },
{ MAP_GROUP(FORTREE_CITY_MART), MAP_NUM(FORTREE_CITY_MART), 1 }, { MAP_GROUP(FORTREE_CITY_MART), MAP_NUM(FORTREE_CITY_MART), LOCALID_FORTREE_MART_CLERK },
{ MAP_GROUP(MOSSDEEP_CITY_MART), MAP_NUM(MOSSDEEP_CITY_MART), 1 }, { MAP_GROUP(MOSSDEEP_CITY_MART), MAP_NUM(MOSSDEEP_CITY_MART), LOCALID_MOSSDEEP_MART_CLERK },
{ MAP_GROUP(SOOTOPOLIS_CITY_MART), MAP_NUM(SOOTOPOLIS_CITY_MART), 1 }, { MAP_GROUP(SOOTOPOLIS_CITY_MART), MAP_NUM(SOOTOPOLIS_CITY_MART), LOCALID_SOOTOPOLIS_MART_CLERK },
{ MAP_GROUP(BATTLE_FRONTIER_MART), MAP_NUM(BATTLE_FRONTIER_MART), 1 } { MAP_GROUP(BATTLE_FRONTIER_MART), MAP_NUM(BATTLE_FRONTIER_MART), LOCALID_BATTLE_FRONTIER_MART_CLERK }
}; };
u8 i; u8 i;

View File

@ -66,13 +66,12 @@ static EWRAM_DATA struct HofGfx *sHofGfxPtr = NULL;
extern struct MusicPlayerInfo gMPlayInfo_BGM; extern struct MusicPlayerInfo gMPlayInfo_BGM;
// this file's functions
static void ClearVramOamPltt_LoadHofPal(void); static void ClearVramOamPltt_LoadHofPal(void);
static void LoadHofGfx(void); static void LoadHofGfx(void);
static void InitHofBgs(void); static void InitHofBgs(void);
static bool8 CreateHofConfettiSprite(void); static bool8 CreateHofConfettiSprite(void);
static void StartCredits(void); static void StartCredits(void);
static bool8 sub_8175024(void); static bool8 LoadHofBgs(void);
static void Task_Hof_InitMonData(u8 taskId); static void Task_Hof_InitMonData(u8 taskId);
static void Task_Hof_InitTeamSaveData(u8 taskId); static void Task_Hof_InitTeamSaveData(u8 taskId);
static void Task_Hof_SetMonDisplayTask(u8 taskId); static void Task_Hof_SetMonDisplayTask(u8 taskId);
@ -104,7 +103,6 @@ static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2);
static void Task_DoDomeConfetti(u8 taskId); static void Task_DoDomeConfetti(u8 taskId);
static void SpriteCB_HofConfetti(struct Sprite* sprite); static void SpriteCB_HofConfetti(struct Sprite* sprite);
// const rom data
static const struct BgTemplate sHof_BgTemplates[] = static const struct BgTemplate sHof_BgTemplates[] =
{ {
{ {
@ -136,12 +134,19 @@ static const struct BgTemplate sHof_BgTemplates[] =
}, },
}; };
static const struct WindowTemplate sHof_WindowTemplate = {0, 2, 2, 0xE, 6, 0xE, 1}; static const struct WindowTemplate sHof_WindowTemplate = {
.bg = 0,
.tilemapLeft = 2,
.tilemapTop = 2,
.width = 14,
.height = 6,
.paletteNum = 14,
.baseBlock = 1
};
static const u8 sMonInfoTextColors[4] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY}; static const u8 sMonInfoTextColors[4] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GRAY};
static const u8 sPlayerInfoTextColors[4] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY}; static const u8 sPlayerInfoTextColors[4] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY};
static const u8 sUnusedTextColors[4] = {TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_TRANSPARENT};
static const u8 sUnused_085E538C[] = {4, 5, 0, 0};
static const struct CompressedSpriteSheet sSpriteSheet_Confetti[] = static const struct CompressedSpriteSheet sSpriteSheet_Confetti[] =
{ {
@ -383,7 +388,7 @@ static bool8 InitHallOfFameScreen(void)
gMain.state++; gMain.state++;
break; break;
case 3: case 3:
if (!sub_8175024()) if (!LoadHofBgs())
{ {
SetVBlankCallback(VBlankCB_HallOfFame); SetVBlankCallback(VBlankCB_HallOfFame);
BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK); BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK);
@ -819,7 +824,7 @@ void CB2_DoHallOfFamePC(void)
gMain.state++; gMain.state++;
break; break;
case 3: case 3:
if (!sub_8175024()) if (!LoadHofBgs())
{ {
struct HallofFameTeam *fameTeam = (struct HallofFameTeam*)(gDecompressionBuffer); struct HallofFameTeam *fameTeam = (struct HallofFameTeam*)(gDecompressionBuffer);
fameTeam->mon[0] = sDummyFameMon; fameTeam->mon[0] = sDummyFameMon;
@ -1301,7 +1306,7 @@ static void InitHofBgs(void)
ChangeBgY(3, 0, 0); ChangeBgY(3, 0, 0);
} }
static bool8 sub_8175024(void) static bool8 LoadHofBgs(void)
{ {
switch (sHofGfxPtr->state) switch (sHofGfxPtr->state)
{ {

View File

@ -133,7 +133,7 @@ void UpdatePocketScrollPositions(void);
u8 CreateBagInputHandlerTask(u8); u8 CreateBagInputHandlerTask(u8);
void sub_81AC23C(u8); void sub_81AC23C(u8);
void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu*); void BagMenu_MoveCursorCallback(s32 a, bool8 b, struct ListMenu*);
void BagMenu_ItemPrintCallback(u8 windowId, s32 itemIndex, u8 a); void BagMenu_ItemPrintCallback(u8 windowId, u32 itemIndex, u8 a);
void ItemMenu_UseOutOfBattle(u8 taskId); void ItemMenu_UseOutOfBattle(u8 taskId);
void ItemMenu_Toss(u8 taskId); void ItemMenu_Toss(u8 taskId);
void ItemMenu_Register(u8 taskId); void ItemMenu_Register(u8 taskId);
@ -893,7 +893,7 @@ void BagMenu_MoveCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *li
} }
} }
void BagMenu_ItemPrintCallback(u8 windowId, s32 itemIndex, u8 y) void BagMenu_ItemPrintCallback(u8 windowId, u32 itemIndex, u8 y)
{ {
u16 itemId; u16 itemId;
u16 itemQuantity; u16 itemQuantity;

View File

@ -244,7 +244,7 @@ static const struct OamData sBerryPicRotatingOamData =
.affineParam = 0 .affineParam = 0
}; };
static const union AnimCmd sSpriteAnim_857FBD8[] = static const union AnimCmd sAnim_BerryPic[] =
{ {
ANIMCMD_FRAME(0, 0), ANIMCMD_FRAME(0, 0),
ANIMCMD_END ANIMCMD_END
@ -252,7 +252,7 @@ static const union AnimCmd sSpriteAnim_857FBD8[] =
static const union AnimCmd *const sBerryPicSpriteAnimTable[] = static const union AnimCmd *const sBerryPicSpriteAnimTable[] =
{ {
sSpriteAnim_857FBD8 sAnim_BerryPic
}; };
static const struct SpriteFrameImage sBerryPicSpriteImageTable[] = static const struct SpriteFrameImage sBerryPicSpriteImageTable[] =

View File

@ -253,7 +253,7 @@ static u8 sub_81D1D34(u8 a0)
return sUnknown_0203CF48[a0]; return sUnknown_0203CF48[a0];
} }
static void sub_81D1D44(u8 windowId, s32 itemId, u8 y) static void sub_81D1D44(u8 windowId, u32 itemId, u8 y)
{ {
u8 buffer[30]; u8 buffer[30];
u16 length; u16 length;

View File

@ -14,12 +14,14 @@
#include "sprite.h" #include "sprite.h"
#include "task.h" #include "task.h"
#include "window.h" #include "window.h"
#include "constants/event_objects.h"
#include "constants/maps.h" #include "constants/maps.h"
#include "constants/rgb.h" #include "constants/rgb.h"
#include "constants/songs.h" #include "constants/songs.h"
#include "constants/metatile_labels.h" #include "constants/metatile_labels.h"
struct MirageTowerPulseBlend { struct MirageTowerPulseBlend
{
u8 taskId; u8 taskId;
struct PulseBlend pulseBlend; struct PulseBlend pulseBlend;
}; };
@ -37,59 +39,51 @@ struct BgRegOffsets
u16 bgVOFS; u16 bgVOFS;
}; };
struct Struct203CF10 struct FallAnim_Tower
{ {
u8 *buffer; u8 *disintegrateRand;
u8 currIndex; u8 disintegrateIdx;
}; };
struct DynamicSpriteFrameImage struct FallAnim_Fossil
{
u8 *data;
u16 size;
};
struct Struct203CF0C
{ {
u8 *frameImageTiles; u8 *frameImageTiles;
struct DynamicSpriteFrameImage *frameImage; struct SpriteFrameImage *frameImage;
u8 spriteId; u8 spriteId;
u16 *unkC; u16 *disintegrateRand;
u16 unk10; u16 disintegrateIdx;
}; };
#define TAG_CEILING_CRUMBLE 4000
#define MIRAGE_TOWER_GFX_LENGTH (sizeof(sBlankTile_Gfx) + sizeof(sMirageTower_Gfx)) #define MIRAGE_TOWER_GFX_LENGTH (sizeof(sBlankTile_Gfx) + sizeof(sMirageTower_Gfx))
#define ROOT_FOSSIL_GFX_LENGTH sizeof(sRootFossil_Gfx) #define FOSSIL_DISINTEGRATE_LENGTH 0x100
#define ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH 0x100
// extern data static const struct SpriteSheet sCeilingCrumbleSpriteSheets[];
extern const struct SpriteSheet gMirageTowerCeilingCrumbleSpriteSheets[]; static const s16 sCeilingCrumblePositions[][3];
extern const s16 sCeilingCrumblePositions[][3];
// static functions static void PlayerDescendMirageTower(u8);
static void PlayerDescendMirageTower(u8 taskId); static void DoScreenShake(u8);
static void DoScreenShake(u8 taskId);
static void IncrementCeilingCrumbleFinishedCount(void); static void IncrementCeilingCrumbleFinishedCount(void);
static void WaitCeilingCrumble(u8 taskId); static void WaitCeilingCrumble(u8);
static void FinishCeilingCrumbleTask(u8 taskId); static void FinishCeilingCrumbleTask(u8);
static void CreateCeilingCrumbleSprites(void); static void CreateCeilingCrumbleSprites(void);
static void MoveCeilingCrumbleSprite(struct Sprite* sprite); static void SpriteCB_CeilingCrumble(struct Sprite*);
static void DoMirageTowerDisintegration(u8 taskId); static void DoMirageTowerDisintegration(u8);
static void InitMirageTowerShake(u8 taskId); static void InitMirageTowerShake(u8);
static void DoFossilFallAndSink(u8 taskId); static void Task_FossilFallAndSink(u8);
static void sub_81BF248(struct Sprite *); static void SpriteCB_FallingFossil(struct Sprite *);
static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e); static void UpdateDisintegrationEffect(u8*, u16, u8, u8, u8);
// rodata
static const u8 sBlankTile_Gfx[32] = {0}; static const u8 sBlankTile_Gfx[32] = {0};
static const u8 sMirageTower_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower.4bpp"); static const u8 sMirageTower_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower.4bpp");
static const u16 sMirageTowerTilemap[] = INCBIN_U16("graphics/misc/mirage_tower.bin"); static const u16 sMirageTowerTilemap[] = INCBIN_U16("graphics/misc/mirage_tower.bin");
static const u16 sRootFossil_Pal[] = INCBIN_U16("graphics/misc/fossil.gbapal"); static const u16 sFossil_Pal[] = INCBIN_U16("graphics/object_events/pics/misc/fossil.gbapal"); // Unused
static const u8 sRootFossil_Gfx[] = INCBIN_U8("graphics/misc/fossil.4bpp"); static const u8 sFossil_Gfx[] = INCBIN_U8("graphics/object_events/pics/misc/fossil.4bpp"); // Duplicate of gObjectEventPic_Fossil
static const u8 sMirageTowerCrumbles_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower_crumbles.4bpp"); static const u8 sMirageTowerCrumbles_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower_crumbles.4bpp");
static const u16 sMirageTowerCrumbles_Palette[] = INCBIN_U16("graphics/misc/mirage_tower_crumbles.gbapal"); static const u16 sMirageTowerCrumbles_Palette[] = INCBIN_U16("graphics/misc/mirage_tower_crumbles.gbapal");
const s16 sCeilingCrumblePositions[][3] = static const s16 sCeilingCrumblePositions[][3] =
{ {
{ 0, 10, 65}, { 0, 10, 65},
{ 17, 3, 50}, { 17, 3, 50},
@ -101,10 +95,10 @@ const s16 sCeilingCrumblePositions[][3] =
{-24, -4, 65}, {-24, -4, 65},
}; };
const struct SpriteSheet gMirageTowerCeilingCrumbleSpriteSheets[] = static const struct SpriteSheet sCeilingCrumbleSpriteSheets[] =
{ {
{sMirageTowerCrumbles_Gfx, 0x0080, 4000}, {sMirageTowerCrumbles_Gfx, 0x80, TAG_CEILING_CRUMBLE},
{NULL} {}
}; };
static const struct MetatileCoords sInvisibleMirageTowerMetatiles[] = static const struct MetatileCoords sInvisibleMirageTowerMetatiles[] =
@ -129,13 +123,13 @@ static const struct MetatileCoords sInvisibleMirageTowerMetatiles[] =
{20, 58, METATILE_General_SandPit_Center}, {20, 58, METATILE_General_SandPit_Center},
}; };
static const union AnimCmd gSpriteAnim_8617DEC[] = static const union AnimCmd sAnim_FallingFossil[] =
{ {
ANIMCMD_FRAME(0, 1), ANIMCMD_FRAME(0, 1),
ANIMCMD_END, ANIMCMD_END,
}; };
static const struct OamData gOamData_8617DF4 = static const struct OamData sOamData_FallingFossil =
{ {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_OFF, .affineMode = ST_OAM_AFFINE_OFF,
@ -152,14 +146,20 @@ static const struct OamData gOamData_8617DF4 =
.affineParam = 0, .affineParam = 0,
}; };
static const union AnimCmd *const gSpriteAnimTable_8617DFC[] = static const union AnimCmd *const sAnims_FallingFossil[] =
{ {
gSpriteAnim_8617DEC, sAnim_FallingFossil,
}; };
static const struct SpriteTemplate gUnknown_08617E00 = static const struct SpriteTemplate sSpriteTemplate_FallingFossil =
{ {
0xFFFF, 0xFFFF, &gOamData_8617DF4, gSpriteAnimTable_8617DFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy .tileTag = 0xFFFF,
.paletteTag = 0xFFFF,
.oam = &sOamData_FallingFossil,
.anims = sAnims_FallingFossil,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = SpriteCallbackDummy
}; };
const struct PulseBlendSettings gMirageTowerPulseBlendSettings = { const struct PulseBlendSettings gMirageTowerPulseBlendSettings = {
@ -174,18 +174,18 @@ const struct PulseBlendSettings gMirageTowerPulseBlendSettings = {
.unk7_7 = 1, .unk7_7 = 1,
}; };
static const union AnimCmd sCeilingCrumble2AnimCmd[] = static const union AnimCmd sAnim_CeilingCrumbleSmall[] =
{ {
ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(0, 12),
ANIMCMD_JUMP(0), ANIMCMD_JUMP(0),
}; };
static const union AnimCmd *const sCeilingCrumble2AnimCmds[] = static const union AnimCmd *const sAnims_CeilingCrumbleSmall[] =
{ {
sCeilingCrumble2AnimCmd, sAnim_CeilingCrumbleSmall,
}; };
static const struct OamData sCeilingCrumble2OamData = static const struct OamData sOamData_CeilingCrumbleSmall =
{ {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_OFF, .affineMode = ST_OAM_AFFINE_OFF,
@ -202,28 +202,28 @@ static const struct OamData sCeilingCrumble2OamData =
.affineParam = 0, .affineParam = 0,
}; };
static const struct SpriteTemplate sCeilingCrumbleSpriteTemplate2 = { static const struct SpriteTemplate sSpriteTemplate_CeilingCrumbleSmall = {
.tileTag = 4000, .tileTag = TAG_CEILING_CRUMBLE,
.paletteTag = 0xFFFF, .paletteTag = 0xFFFF,
.oam = &sCeilingCrumble2OamData, .oam = &sOamData_CeilingCrumbleSmall,
.anims = sCeilingCrumble2AnimCmds, .anims = sAnims_CeilingCrumbleSmall,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = MoveCeilingCrumbleSprite .callback = SpriteCB_CeilingCrumble
}; };
static const union AnimCmd sCeilingCrumble1AnimCmd[] = static const union AnimCmd sAnim_CeilingCrumbleLarge[] =
{ {
ANIMCMD_FRAME(0, 12), ANIMCMD_FRAME(0, 12),
ANIMCMD_JUMP(0), ANIMCMD_JUMP(0),
}; };
static const union AnimCmd *const sCeilingCrumble1AnimCmds[] = static const union AnimCmd *const sAnims_CeilingCrumbleLarge[] =
{ {
sCeilingCrumble1AnimCmd, sAnim_CeilingCrumbleLarge,
}; };
static const struct OamData sCeilingCrumble1OamData = static const struct OamData sOamData_CeilingCrumbleLarge =
{ {
.y = 0, .y = 0,
.affineMode = ST_OAM_AFFINE_OFF, .affineMode = ST_OAM_AFFINE_OFF,
@ -240,24 +240,26 @@ static const struct OamData sCeilingCrumble1OamData =
.affineParam = 0, .affineParam = 0,
}; };
static const struct SpriteTemplate sCeilingCrumbleSpriteTemplate1 = { static const struct SpriteTemplate sSpriteTemplate_CeilingCrumbleLarge = {
.tileTag = 4000, .tileTag = TAG_CEILING_CRUMBLE,
.paletteTag = 0xFFFF, .paletteTag = 0xFFFF,
.oam = &sCeilingCrumble1OamData, .oam = &sOamData_CeilingCrumbleLarge,
.anims = sCeilingCrumble1AnimCmds, .anims = sAnims_CeilingCrumbleLarge,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = MoveCeilingCrumbleSprite .callback = SpriteCB_CeilingCrumble
}; };
EWRAM_DATA static u8* sMirageTowerGfxBuffer = NULL; EWRAM_DATA static u8* sMirageTowerGfxBuffer = NULL;
EWRAM_DATA static u8* sMirageTowerTilemapBuffer = NULL; EWRAM_DATA static u8* sMirageTowerTilemapBuffer = NULL;
EWRAM_DATA static struct Struct203CF0C *sUnknown_0203CF0C = NULL; EWRAM_DATA static struct FallAnim_Fossil *sFallingFossil = NULL;
EWRAM_DATA static struct Struct203CF10 *sUnknown_0203CF10 = NULL; EWRAM_DATA static struct FallAnim_Tower *sFallingTower = NULL;
EWRAM_DATA static struct BgRegOffsets *sBgShakeOffsets = NULL; EWRAM_DATA static struct BgRegOffsets *sBgShakeOffsets = NULL;
EWRAM_DATA struct MirageTowerPulseBlend *sMirageTowerPulseBlend = NULL; EWRAM_DATA static struct MirageTowerPulseBlend *sMirageTowerPulseBlend = NULL;
static u16 gUnknown_030012A8[8]; // Holds data about the disintegration effect for Mirage Tower / the unchosen fossil.
// Never read, presumably for debugging
static u16 sDebug_DisintegrationData[8];
bool8 IsMirageTowerVisible(void) bool8 IsMirageTowerVisible(void)
{ {
@ -319,6 +321,7 @@ void SetMirageTowerVisibility(void)
if (VarGet(VAR_MIRAGE_TOWER_STATE)) if (VarGet(VAR_MIRAGE_TOWER_STATE))
{ {
// Mirage Tower event has already been completed, hide it
FlagClear(FLAG_MIRAGE_TOWER_VISIBLE); FlagClear(FLAG_MIRAGE_TOWER_VISIBLE);
return; return;
} }
@ -343,32 +346,40 @@ void StartPlayerDescendMirageTower(void)
CreateTask(PlayerDescendMirageTower, 8); CreateTask(PlayerDescendMirageTower, 8);
} }
// As the tower disintegrates, a duplicate object event of the player
// is created at the top of the tower and moved down to show the player falling
static void PlayerDescendMirageTower(u8 taskId) static void PlayerDescendMirageTower(u8 taskId)
{ {
u8 objectEventId; u8 objectEventId;
struct ObjectEvent *fakePlayerObjectEvent; struct ObjectEvent *fallingPlayer;
struct ObjectEvent *playerObjectEvent; struct ObjectEvent *player;
TryGetObjectEventIdByLocalIdAndMap(45, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId); TryGetObjectEventIdByLocalIdAndMap(LOCALID_ROUTE111_PLAYER_FALLING, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId);
fakePlayerObjectEvent = &gObjectEvents[objectEventId]; fallingPlayer = &gObjectEvents[objectEventId];
gSprites[fakePlayerObjectEvent->spriteId].y2 += 4; gSprites[fallingPlayer->spriteId].y2 += 4;
playerObjectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; player = &gObjectEvents[gPlayerAvatar.objectEventId];
if ((gSprites[fakePlayerObjectEvent->spriteId].y + gSprites[fakePlayerObjectEvent->spriteId].y2) >= if ((gSprites[fallingPlayer->spriteId].y + gSprites[fallingPlayer->spriteId].y2) >=
(gSprites[playerObjectEvent->spriteId].y + gSprites[playerObjectEvent->spriteId].y2)) (gSprites[player->spriteId].y + gSprites[player->spriteId].y2))
{ {
DestroyTask(taskId); DestroyTask(taskId);
EnableBothScriptContexts(); EnableBothScriptContexts();
} }
} }
#define tXShakeOffset data[0]
#define tTimer data[1]
#define tNumShakes data[2]
#define tShakeDelay data[3]
#define tYShakeOffset data[4]
static void StartScreenShake(u8 yShakeOffset, u8 xShakeOffset, u8 numShakes, u8 shakeDelay) static void StartScreenShake(u8 yShakeOffset, u8 xShakeOffset, u8 numShakes, u8 shakeDelay)
{ {
u8 taskId = CreateTask(DoScreenShake, 9); u8 taskId = CreateTask(DoScreenShake, 9);
gTasks[taskId].data[0] = xShakeOffset; gTasks[taskId].tXShakeOffset = xShakeOffset;
gTasks[taskId].data[1] = 0; gTasks[taskId].tTimer = 0;
gTasks[taskId].data[2] = numShakes; gTasks[taskId].tNumShakes = numShakes;
gTasks[taskId].data[3] = shakeDelay; gTasks[taskId].tShakeDelay = shakeDelay;
gTasks[taskId].data[4] = yShakeOffset; gTasks[taskId].tYShakeOffset = yShakeOffset;
SetCameraPanningCallback(NULL); SetCameraPanningCallback(NULL);
PlaySE(SE_M_STRENGTH); PlaySE(SE_M_STRENGTH);
} }
@ -378,15 +389,15 @@ static void DoScreenShake(u8 taskId)
s16 *data; s16 *data;
data = gTasks[taskId].data; data = gTasks[taskId].data;
data[1]++; tTimer++;
if (data[1] % data[3] == 0) if (tTimer % tShakeDelay == 0)
{ {
data[1] = 0; tTimer = 0;
data[2]--; tNumShakes--;
data[0] = -data[0]; tXShakeOffset = -tXShakeOffset;
data[4] = -data[4]; tYShakeOffset = -tYShakeOffset;
SetCameraPanning(data[0], data[4]); SetCameraPanning(tXShakeOffset, tYShakeOffset);
if (data[2] == 0) if (tNumShakes == 0)
{ {
IncrementCeilingCrumbleFinishedCount(); IncrementCeilingCrumbleFinishedCount();
DestroyTask(taskId); DestroyTask(taskId);
@ -395,6 +406,12 @@ static void DoScreenShake(u8 taskId)
} }
} }
#undef tXShakeOffset
#undef tTimer
#undef tNumShakes
#undef tShakeDelay
#undef tYShakeOffset
static void IncrementCeilingCrumbleFinishedCount(void) static void IncrementCeilingCrumbleFinishedCount(void)
{ {
u8 taskId = FindTaskIdByFunc(WaitCeilingCrumble); u8 taskId = FindTaskIdByFunc(WaitCeilingCrumble);
@ -404,7 +421,7 @@ static void IncrementCeilingCrumbleFinishedCount(void)
void DoMirageTowerCeilingCrumble(void) void DoMirageTowerCeilingCrumble(void)
{ {
LoadSpriteSheets(gMirageTowerCeilingCrumbleSpriteSheets); LoadSpriteSheets(sCeilingCrumbleSpriteSheets);
CreateCeilingCrumbleSprites(); CreateCeilingCrumbleSprites();
CreateTask(WaitCeilingCrumble, 8); CreateTask(WaitCeilingCrumble, 8);
StartScreenShake(2, 1, 16, 3); StartScreenShake(2, 1, 16, 3);
@ -421,7 +438,7 @@ static void WaitCeilingCrumble(u8 taskId)
static void FinishCeilingCrumbleTask(u8 taskId) static void FinishCeilingCrumbleTask(u8 taskId)
{ {
FreeSpriteTilesByTag(4000); FreeSpriteTilesByTag(TAG_CEILING_CRUMBLE);
DestroyTask(taskId); DestroyTask(taskId);
EnableBothScriptContexts(); EnableBothScriptContexts();
} }
@ -433,21 +450,21 @@ static void CreateCeilingCrumbleSprites(void)
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
spriteId = CreateSprite(&sCeilingCrumbleSpriteTemplate1, sCeilingCrumblePositions[i][0] + 120, sCeilingCrumblePositions[i][1], 8); spriteId = CreateSprite(&sSpriteTemplate_CeilingCrumbleLarge, sCeilingCrumblePositions[i][0] + 120, sCeilingCrumblePositions[i][1], 8);
gSprites[spriteId].oam.priority = 0; gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].oam.paletteNum = 0; gSprites[spriteId].oam.paletteNum = 0;
gSprites[spriteId].data[0] = i; gSprites[spriteId].data[0] = i;
} }
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
spriteId = CreateSprite(&sCeilingCrumbleSpriteTemplate2, sCeilingCrumblePositions[i][0] + 115, sCeilingCrumblePositions[i][1] - 3, 8); spriteId = CreateSprite(&sSpriteTemplate_CeilingCrumbleSmall, sCeilingCrumblePositions[i][0] + 115, sCeilingCrumblePositions[i][1] - 3, 8);
gSprites[spriteId].oam.priority = 0; gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].oam.paletteNum = 0; gSprites[spriteId].oam.paletteNum = 0;
gSprites[spriteId].data[0] = i; gSprites[spriteId].data[0] = i;
} }
} }
static void MoveCeilingCrumbleSprite(struct Sprite* sprite) static void SpriteCB_CeilingCrumble(struct Sprite* sprite)
{ {
sprite->data[1] += 2; sprite->data[1] += 2;
sprite->y2 = sprite->data[1] / 2; sprite->y2 = sprite->data[1] / 2;
@ -478,7 +495,7 @@ void StartMirageTowerShake(void)
void StartMirageTowerFossilFallAndSink(void) void StartMirageTowerFossilFallAndSink(void)
{ {
CreateTask(DoFossilFallAndSink, 9); CreateTask(Task_FossilFallAndSink, 9);
} }
static void SetBgShakeOffsets(void) static void SetBgShakeOffsets(void)
@ -501,42 +518,44 @@ static void UpdateBgShake(u8 taskId)
} }
} }
#define tState data[0]
static void InitMirageTowerShake(u8 taskId) static void InitMirageTowerShake(u8 taskId)
{ {
u8 zero; u8 zero;
switch (gTasks[taskId].data[0]) switch (gTasks[taskId].tState)
{ {
case 0: case 0:
FreeAllWindowBuffers(); FreeAllWindowBuffers();
SetBgAttribute(0, BG_ATTR_PRIORITY, 2); SetBgAttribute(0, BG_ATTR_PRIORITY, 2);
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
break; break;
case 1: case 1:
sMirageTowerGfxBuffer = (u8 *)AllocZeroed(MIRAGE_TOWER_GFX_LENGTH); sMirageTowerGfxBuffer = (u8 *)AllocZeroed(MIRAGE_TOWER_GFX_LENGTH);
sMirageTowerTilemapBuffer = (u8 *)AllocZeroed(BG_SCREEN_SIZE); sMirageTowerTilemapBuffer = (u8 *)AllocZeroed(BG_SCREEN_SIZE);
ChangeBgX(0, 0, 0); ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0); ChangeBgY(0, 0, 0);
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
break; break;
case 2: case 2:
CpuSet(sBlankTile_Gfx, sMirageTowerGfxBuffer, MIRAGE_TOWER_GFX_LENGTH / 2); CpuSet(sBlankTile_Gfx, sMirageTowerGfxBuffer, MIRAGE_TOWER_GFX_LENGTH / 2);
LoadBgTiles(0, sMirageTowerGfxBuffer, MIRAGE_TOWER_GFX_LENGTH, 0); LoadBgTiles(0, sMirageTowerGfxBuffer, MIRAGE_TOWER_GFX_LENGTH, 0);
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
break; break;
case 3: case 3:
SetBgTilemapBuffer(0, sMirageTowerTilemapBuffer); SetBgTilemapBuffer(0, sMirageTowerTilemapBuffer);
CopyToBgTilemapBufferRect_ChangePalette(0, &sMirageTowerTilemap, 12, 29, 6, 12, 17); CopyToBgTilemapBufferRect_ChangePalette(0, &sMirageTowerTilemap, 12, 29, 6, 12, 17);
CopyBgTilemapBufferToVram(0); CopyBgTilemapBufferToVram(0);
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
break; break;
case 4: case 4:
ShowBg(0); ShowBg(0);
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
break; break;
case 5: case 5:
SetInvisibleMirageTowerMetatiles(); SetInvisibleMirageTowerMetatiles();
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
break; break;
case 6: case 6:
sBgShakeOffsets = Alloc(sizeof(*sBgShakeOffsets)); sBgShakeOffsets = Alloc(sizeof(*sBgShakeOffsets));
@ -558,27 +577,29 @@ static void DoMirageTowerDisintegration(u8 taskId)
u16 i; u16 i;
u8 index; u8 index;
switch (gTasks[taskId].data[0]) switch (gTasks[taskId].tState)
{ {
case 1: case 1:
sUnknown_0203CF10 = AllocZeroed(OUTER_BUFFER_LENGTH * sizeof(struct Struct203CF10)); sFallingTower = AllocZeroed(OUTER_BUFFER_LENGTH * sizeof(struct FallAnim_Tower));
break; break;
case 3: case 3:
if (gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1)) if (gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1))
{ {
if (gTasks[taskId].data[1] > 1) if (gTasks[taskId].data[1] > 1)
{ {
// Initialize disintegration pattern
index = gTasks[taskId].data[3]; index = gTasks[taskId].data[3];
sUnknown_0203CF10[index].buffer = Alloc(INNER_BUFFER_LENGTH); sFallingTower[index].disintegrateRand = Alloc(INNER_BUFFER_LENGTH);
for (i = 0; i <= (INNER_BUFFER_LENGTH - 1); i++) for (i = 0; i <= (INNER_BUFFER_LENGTH - 1); i++)
sUnknown_0203CF10[index].buffer[i] = i; sFallingTower[index].disintegrateRand[i] = i;
// Randomize disintegration pattern
for (i = 0; i <= (INNER_BUFFER_LENGTH - 1); i++) for (i = 0; i <= (INNER_BUFFER_LENGTH - 1); i++)
{ {
u16 rand1, rand2, temp; u16 rand1, rand2, temp;
rand1 = Random() % INNER_BUFFER_LENGTH;
rand1 = Random() % 0x30; rand2 = Random() % INNER_BUFFER_LENGTH;
rand2 = Random() % 0x30; SWAP(sFallingTower[index].disintegrateRand[rand2], sFallingTower[index].disintegrateRand[rand1], temp);
SWAP(sUnknown_0203CF10[index].buffer[rand2], sUnknown_0203CF10[index].buffer[rand1], temp);
} }
if (gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1)) if (gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1))
gTasks[taskId].data[3]++; gTasks[taskId].data[3]++;
@ -591,20 +612,20 @@ static void DoMirageTowerDisintegration(u8 taskId)
{ {
for (j = 0; j < 1; j++) for (j = 0; j < 1; j++)
{ {
sub_81BF2B8(sMirageTowerGfxBuffer, UpdateDisintegrationEffect(sMirageTowerGfxBuffer,
((((OUTER_BUFFER_LENGTH - 1) - i) * INNER_BUFFER_LENGTH) + sUnknown_0203CF10[i].buffer[(sUnknown_0203CF10[i].currIndex)++]), (OUTER_BUFFER_LENGTH - 1 - i) * INNER_BUFFER_LENGTH + sFallingTower[i].disintegrateRand[sFallingTower[i].disintegrateIdx++],
0, INNER_BUFFER_LENGTH, 1); 0, INNER_BUFFER_LENGTH, 1);
} }
if (sUnknown_0203CF10[i].currIndex > (INNER_BUFFER_LENGTH - 1)) if (sFallingTower[i].disintegrateIdx > (INNER_BUFFER_LENGTH - 1))
{ {
FREE_AND_SET_NULL(sUnknown_0203CF10[i].buffer); FREE_AND_SET_NULL(sFallingTower[i].disintegrateRand);
gTasks[taskId].data[2]++; gTasks[taskId].data[2]++;
if ((i % 2) == 1) if ((i % 2) == 1)
sBgShakeOffsets->bgVOFS--; sBgShakeOffsets->bgVOFS--;
} }
} }
LoadBgTiles(0, sMirageTowerGfxBuffer, MIRAGE_TOWER_GFX_LENGTH, 0); LoadBgTiles(0, sMirageTowerGfxBuffer, MIRAGE_TOWER_GFX_LENGTH, 0);
if (sUnknown_0203CF10[OUTER_BUFFER_LENGTH - 1].currIndex > (INNER_BUFFER_LENGTH - 1)) if (sFallingTower[OUTER_BUFFER_LENGTH - 1].disintegrateIdx > INNER_BUFFER_LENGTH - 1)
break; break;
return; return;
case 4: case 4:
@ -617,7 +638,7 @@ static void DoMirageTowerDisintegration(u8 taskId)
break; break;
case 5: case 5:
FREE_AND_SET_NULL(sBgShakeOffsets); FREE_AND_SET_NULL(sBgShakeOffsets);
FREE_AND_SET_NULL(sUnknown_0203CF10); FREE_AND_SET_NULL(sFallingTower);
FREE_AND_SET_NULL(sMirageTowerGfxBuffer); FREE_AND_SET_NULL(sMirageTowerGfxBuffer);
FREE_AND_SET_NULL(sMirageTowerTilemapBuffer); FREE_AND_SET_NULL(sMirageTowerTilemapBuffer);
break; break;
@ -635,127 +656,128 @@ static void DoMirageTowerDisintegration(u8 taskId)
EnableBothScriptContexts(); EnableBothScriptContexts();
break; break;
} }
gTasks[taskId].data[0]++; gTasks[taskId].tState++;
} }
static void DoFossilFallAndSink(u8 taskId) static void Task_FossilFallAndSink(u8 taskId)
{ {
u16 i; u16 i;
u8 *buffer; u8 *buffer;
switch (gTasks[taskId].data[0]) switch (gTasks[taskId].tState)
{ {
case 1: case 1:
sUnknown_0203CF0C = AllocZeroed(sizeof(*sUnknown_0203CF0C)); sFallingFossil = AllocZeroed(sizeof(*sFallingFossil));
sUnknown_0203CF0C->frameImageTiles = AllocZeroed(ROOT_FOSSIL_GFX_LENGTH); sFallingFossil->frameImageTiles = AllocZeroed(sizeof(sFossil_Gfx));
sUnknown_0203CF0C->frameImage = AllocZeroed(sizeof(*sUnknown_0203CF0C->frameImage)); sFallingFossil->frameImage = AllocZeroed(sizeof(*sFallingFossil->frameImage));
sUnknown_0203CF0C->unkC = AllocZeroed(ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16)); sFallingFossil->disintegrateRand = AllocZeroed(FOSSIL_DISINTEGRATE_LENGTH * sizeof(u16));
sUnknown_0203CF0C->unk10 = 0; sFallingFossil->disintegrateIdx = 0;
break; break;
case 2: case 2:
buffer = sUnknown_0203CF0C->frameImageTiles; buffer = sFallingFossil->frameImageTiles;
for (i = 0; i < ROOT_FOSSIL_GFX_LENGTH; i++, buffer++) for (i = 0; i < sizeof(sFossil_Gfx); i++, buffer++)
*buffer = sRootFossil_Gfx[i]; *buffer = sFossil_Gfx[i];
break; break;
case 3: case 3:
sUnknown_0203CF0C->frameImage->data = sUnknown_0203CF0C->frameImageTiles; sFallingFossil->frameImage->data = sFallingFossil->frameImageTiles;
sUnknown_0203CF0C->frameImage->size = ROOT_FOSSIL_GFX_LENGTH; sFallingFossil->frameImage->size = sizeof(sFossil_Gfx);
break; break;
case 4: case 4:
{ {
struct SpriteTemplate fossilTemplate; struct SpriteTemplate fossilTemplate = sSpriteTemplate_FallingFossil;
fossilTemplate.images = sFallingFossil->frameImage;
fossilTemplate = gUnknown_08617E00; sFallingFossil->spriteId = CreateSprite(&fossilTemplate, 128, -16, 1);
fossilTemplate.images = (struct SpriteFrameImage *)(sUnknown_0203CF0C->frameImage); gSprites[sFallingFossil->spriteId].centerToCornerVecX = 0;
sUnknown_0203CF0C->spriteId = CreateSprite(&fossilTemplate, 128, -16, 1); gSprites[sFallingFossil->spriteId].data[0] = gSprites[sFallingFossil->spriteId].x;
gSprites[sUnknown_0203CF0C->spriteId].centerToCornerVecX = 0; gSprites[sFallingFossil->spriteId].data[1] = 1;
gSprites[sUnknown_0203CF0C->spriteId].data[0] = gSprites[sUnknown_0203CF0C->spriteId].x;
gSprites[sUnknown_0203CF0C->spriteId].data[1] = 1;
} }
case 5: case 5:
for (i = 0; i < ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH; i++) // Initialize disintegration pattern
sUnknown_0203CF0C->unkC[i] = i; for (i = 0; i < FOSSIL_DISINTEGRATE_LENGTH; i++)
sFallingFossil->disintegrateRand[i] = i;
break; break;
case 6: case 6:
for (i = 0; i < (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16)); i++) // Randomize disintegration pattern
for (i = 0; i < FOSSIL_DISINTEGRATE_LENGTH * sizeof(u16); i++)
{ {
u16 rand1, rand2, temp; u16 rand1, rand2, temp;
rand1 = Random() % FOSSIL_DISINTEGRATE_LENGTH;
rand1 = Random() % 0x100; rand2 = Random() % FOSSIL_DISINTEGRATE_LENGTH;
rand2 = Random() % 0x100; SWAP(sFallingFossil->disintegrateRand[rand2], sFallingFossil->disintegrateRand[rand1], temp);
SWAP(sUnknown_0203CF0C->unkC[rand2], sUnknown_0203CF0C->unkC[rand1], temp);
} }
gSprites[sUnknown_0203CF0C->spriteId].callback = sub_81BF248; gSprites[sFallingFossil->spriteId].callback = SpriteCB_FallingFossil;
break; break;
case 7: case 7:
if (gSprites[sUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy) // Wait for fossil to finish falling / disintegrating
if (gSprites[sFallingFossil->spriteId].callback != SpriteCallbackDummy)
return; return;
DestroySprite(&gSprites[sUnknown_0203CF0C->spriteId]); DestroySprite(&gSprites[sFallingFossil->spriteId]);
FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC);; FREE_AND_SET_NULL(sFallingFossil->disintegrateRand);;
FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImage); FREE_AND_SET_NULL(sFallingFossil->frameImage);
FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImageTiles); FREE_AND_SET_NULL(sFallingFossil->frameImageTiles);
FREE_AND_SET_NULL(sUnknown_0203CF0C); FREE_AND_SET_NULL(sFallingFossil);
break; break;
case 8: case 8:
EnableBothScriptContexts(); EnableBothScriptContexts();
break; break;
} }
gTasks[taskId].tState++;
gTasks[taskId].data[0]++;
} }
static void sub_81BF248(struct Sprite *sprite) static void SpriteCB_FallingFossil(struct Sprite *sprite)
{ {
if (sUnknown_0203CF0C->unk10 >= (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH)) if (sFallingFossil->disintegrateIdx >= FOSSIL_DISINTEGRATE_LENGTH)
{ {
// End animation
sprite->callback = SpriteCallbackDummy; sprite->callback = SpriteCallbackDummy;
} }
else if (sprite->y >= 96) else if (sprite->y >= 96)
{ {
// Fossil has reached the ground, update disintegration animation
u8 i; u8 i;
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
sub_81BF2B8(sUnknown_0203CF0C->frameImageTiles, sUnknown_0203CF0C->unkC[sUnknown_0203CF0C->unk10++], 0, 16, 0); UpdateDisintegrationEffect(sFallingFossil->frameImageTiles, sFallingFossil->disintegrateRand[sFallingFossil->disintegrateIdx++], 0, 16, 0);
StartSpriteAnim(sprite, 0); StartSpriteAnim(sprite, 0);
} }
else else
{ {
// Fossil is still falling
sprite->y++; sprite->y++;
} }
} }
static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e) static void UpdateDisintegrationEffect(u8* tiles, u16 randId, u8 c, u8 size, u8 offset)
{ {
u8 r5, r4, r0, r2; u8 heightTiles, height, widthTiles, width;
u16 var, var2; u16 var, baseOffset;
u8 r2_1, r4_1; u8 col, row;
u8 b2, c2; u8 flag, tileMask;
r4 = b / d; height = randId / size;
gUnknown_030012A8[0] = r4; sDebug_DisintegrationData[0] = height;
r2 = b % d; width = randId % size;
gUnknown_030012A8[1] = r2; sDebug_DisintegrationData[1] = width;
r4_1 = r4 & 7; row = height & 7;
r2_1 = r2 & 7; col = width & 7;
gUnknown_030012A8[2] = r4 & 7; //should be using r4_1, but that doesn't match sDebug_DisintegrationData[2] = height & 7;
gUnknown_030012A8[3] = r2 & 7; //" sDebug_DisintegrationData[3] = width & 7;
r0 = r2 / 8; widthTiles = width / 8;
r5 = r4 / 8; heightTiles = height / 8;
sDebug_DisintegrationData[4] = width / 8;
gUnknown_030012A8[4] = r2 / 8; //should be using r0, but that doesn't match sDebug_DisintegrationData[5] = height / 8;
gUnknown_030012A8[5] = r4 / 8; //should be using r5, but that doesn't match
var = (d / 8) * (r5 * 64) + (r0 * 64); var = (size / 8) * (heightTiles * 64) + (widthTiles * 64);
gUnknown_030012A8[6] = var; sDebug_DisintegrationData[6] = var;
var2 = var + ((r4_1 * 8) + r2_1); baseOffset = var + ((row * 8) + col);
var2 /= 2; baseOffset /= 2;
gUnknown_030012A8[7] = var + ((r4_1 * 8) + r2_1); //should be using var2 with var2 being divided afterwards, but that doesn't match sDebug_DisintegrationData[7] = var + ((row * 8) + col);
b2 = ((b % 2) ^ 1); flag = ((randId % 2) ^ 1);
c2 = (c << (b2 << 2)) | 15 << (((b2 ^ 1) << 2)); tileMask = (c << (flag << 2)) | 15 << (((flag ^ 1) << 2));
a[var2 + (e * 32)] &= c2; tiles[baseOffset + (offset * 32)] &= tileMask;
} }

View File

@ -119,7 +119,7 @@ static void sub_816C060(u16 itemId);
static void sub_816BEF0(s32 id); static void sub_816BEF0(s32 id);
static void sub_816B4DC(u8 taskId); static void sub_816B4DC(u8 taskId);
static void ItemStorage_MoveCursor(s32 id, bool8 b, struct ListMenu * thisMenu); static void ItemStorage_MoveCursor(s32 id, bool8 b, struct ListMenu * thisMenu);
static void fish4_goto_x5_or_x6(u8 windowId, s32 id, u8 yOffset); static void fish4_goto_x5_or_x6(u8 windowId, u32 id, u8 yOffset);
// EWRAM // EWRAM
static EWRAM_DATA const u8 *gPcItemMenuOptionOrder = NULL; static EWRAM_DATA const u8 *gPcItemMenuOptionOrder = NULL;
@ -943,7 +943,7 @@ static void ItemStorage_MoveCursor(s32 id, bool8 b, struct ListMenu *thisMenu)
if (gUnknown_0203BCC4->unk666 == 0xFF) if (gUnknown_0203BCC4->unk666 == 0xFF)
{ {
sub_816C0C8(); sub_816C0C8();
if (id != -2) if (id != LIST_CANCEL)
sub_816C060(gSaveBlock1Ptr->pcItems[id].itemId); sub_816C060(gSaveBlock1Ptr->pcItems[id].itemId);
else else
sub_816C060(ITEMPC_GO_BACK_TO_PREV); sub_816C060(ITEMPC_GO_BACK_TO_PREV);
@ -951,9 +951,9 @@ static void ItemStorage_MoveCursor(s32 id, bool8 b, struct ListMenu *thisMenu)
} }
} }
static void fish4_goto_x5_or_x6(u8 windowId, s32 id, u8 yOffset) static void fish4_goto_x5_or_x6(u8 windowId, u32 id, u8 yOffset)
{ {
if (id != -2) if (id != LIST_CANCEL)
{ {
if (gUnknown_0203BCC4->unk666 != 0xFF) if (gUnknown_0203BCC4->unk666 != 0xFF)
{ {

View File

@ -264,7 +264,7 @@ static const union AnimCmd *const sSpriteAnimTable_PokeblockCase[] =
sSpriteAnim_PokeblockCase sSpriteAnim_PokeblockCase
}; };
static const union AffineAnimCmd sSpriteAffineAnim_85B26C8[] = static const union AffineAnimCmd sAffineAnim_PokeblockCaseShake[] =
{ {
AFFINEANIMCMD_FRAME(0, 0, -2, 2), AFFINEANIMCMD_FRAME(0, 0, -2, 2),
AFFINEANIMCMD_FRAME(0, 0, 2, 4), AFFINEANIMCMD_FRAME(0, 0, 2, 4),
@ -273,9 +273,9 @@ static const union AffineAnimCmd sSpriteAffineAnim_85B26C8[] =
AFFINEANIMCMD_END AFFINEANIMCMD_END
}; };
static const union AffineAnimCmd *const sSpriteAffineAnimTable_85B26F0[] = static const union AffineAnimCmd *const sAffineAnims_PokeblockCaseShake[] =
{ {
sSpriteAffineAnim_85B26C8 sAffineAnim_PokeblockCaseShake
}; };
const struct CompressedSpriteSheet gPokeblockCase_SpriteSheet = const struct CompressedSpriteSheet gPokeblockCase_SpriteSheet =
@ -955,7 +955,7 @@ static void SpriteCB_ShakePokeblockCase(struct Sprite *sprite)
{ {
case 0: case 0:
sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL; sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
sprite->affineAnims = sSpriteAffineAnimTable_85B26F0; sprite->affineAnims = sAffineAnims_PokeblockCaseShake;
InitSpriteAffineAnim(sprite); InitSpriteAffineAnim(sprite);
sprite->sState = 1; sprite->sState = 1;
sprite->sTimer = 0; sprite->sTimer = 0;

View File

@ -327,7 +327,9 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState)
} }
else else
{ {
sub_8123030(RGB_BLACK, 6); // Dim the region map when zoom is disabled
// (when the player is off the map)
BlendRegionMap(RGB_BLACK, 6);
} }
return LT_INC_AND_PAUSE; return LT_INC_AND_PAUSE;
case 2: case 2:

View File

@ -71,7 +71,7 @@ static EWRAM_DATA struct {
bool8 choseFlyLocation; bool8 choseFlyLocation;
} *sFlyMap = NULL; } *sFlyMap = NULL;
static bool32 gUnknown_03001180; static bool32 sDrawFlyDestTextWindow;
// Static ROM declarations // Static ROM declarations
@ -621,7 +621,7 @@ bool8 LoadRegionMapGfx(void)
return TRUE; return TRUE;
} }
void sub_8123030(u16 color, u32 coeff) void BlendRegionMap(u16 color, u32 coeff)
{ {
BlendPalettes(0x380, coeff, color); BlendPalettes(0x380, coeff, color);
CpuCopy16(gPlttBufferFaded + 0x70, gPlttBufferUnfaded + 0x70, 0x60); CpuCopy16(gPlttBufferFaded + 0x70, gPlttBufferUnfaded + 0x70, 0x60);
@ -1696,7 +1696,7 @@ void CB2_OpenFlyMap(void)
CreateRegionMapPlayerIcon(1, 1); CreateRegionMapPlayerIcon(1, 1);
sFlyMap->mapSecId = sFlyMap->regionMap.mapSecId; sFlyMap->mapSecId = sFlyMap->regionMap.mapSecId;
StringFill(sFlyMap->nameBuffer, CHAR_SPACE, MAP_NAME_LENGTH); StringFill(sFlyMap->nameBuffer, CHAR_SPACE, MAP_NAME_LENGTH);
gUnknown_03001180 = TRUE; sDrawFlyDestTextWindow = TRUE;
DrawFlyDestTextWindow(); DrawFlyDestTextWindow();
gMain.state++; gMain.state++;
break; break;
@ -1782,30 +1782,32 @@ static void DrawFlyDestTextWindow(void)
name = sMultiNameFlyDestinations[i].name[sFlyMap->regionMap.posWithinMapSec]; name = sMultiNameFlyDestinations[i].name[sFlyMap->regionMap.posWithinMapSec];
AddTextPrinterParameterized(1, 1, name, GetStringRightAlignXOffset(1, name, 96), 17, 0, NULL); AddTextPrinterParameterized(1, 1, name, GetStringRightAlignXOffset(1, name, 96), 17, 0, NULL);
ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(0);
gUnknown_03001180 = TRUE; sDrawFlyDestTextWindow = TRUE;
} }
break; break;
} }
} }
if (!namePrinted) if (!namePrinted)
{ {
if (gUnknown_03001180 == TRUE) if (sDrawFlyDestTextWindow == TRUE)
{ {
ClearStdWindowAndFrameToTransparent(1, FALSE); ClearStdWindowAndFrameToTransparent(1, FALSE);
DrawStdFrameWithCustomTileAndPalette(0, FALSE, 101, 13); DrawStdFrameWithCustomTileAndPalette(0, FALSE, 101, 13);
} }
else else
{ {
// Window is already drawn, just empty it
FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillWindowPixelBuffer(0, PIXEL_FILL(1));
} }
AddTextPrinterParameterized(0, 1, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL); AddTextPrinterParameterized(0, 1, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL);
ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(0);
gUnknown_03001180 = FALSE; sDrawFlyDestTextWindow = FALSE;
} }
} }
else else
{ {
if (gUnknown_03001180 == TRUE) // Selection is on MAPSECTYPE_NONE, draw empty fly destination text window
if (sDrawFlyDestTextWindow == TRUE)
{ {
ClearStdWindowAndFrameToTransparent(1, FALSE); ClearStdWindowAndFrameToTransparent(1, FALSE);
DrawStdFrameWithCustomTileAndPalette(0, FALSE, 101, 13); DrawStdFrameWithCustomTileAndPalette(0, FALSE, 101, 13);
@ -1813,7 +1815,7 @@ static void DrawFlyDestTextWindow(void)
FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillWindowPixelBuffer(0, PIXEL_FILL(1));
CopyWindowToVram(0, 2); CopyWindowToVram(0, 2);
ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(0);
gUnknown_03001180 = FALSE; sDrawFlyDestTextWindow = FALSE;
} }
} }

View File

@ -1203,6 +1203,8 @@ bool8 ScrCmd_turnvobject(struct ScriptContext *ctx)
return FALSE; return FALSE;
} }
// lockall freezes all object events except the player immediately.
// The player is frozen after waiting for their current movement to finish.
bool8 ScrCmd_lockall(struct ScriptContext *ctx) bool8 ScrCmd_lockall(struct ScriptContext *ctx)
{ {
if (IsUpdateLinkStateCBActive()) if (IsUpdateLinkStateCBActive())
@ -1211,12 +1213,14 @@ bool8 ScrCmd_lockall(struct ScriptContext *ctx)
} }
else else
{ {
ScriptFreezeObjectEvents(); FreezeObjects_WaitForPlayer();
SetupNativeScript(ctx, IsFreezePlayerFinished); SetupNativeScript(ctx, IsFreezePlayerFinished);
return TRUE; return TRUE;
} }
} }
// lock freezes all object events except the player and the selected object immediately.
// The player and selected object are frozen after waiting for their current movement to finish.
bool8 ScrCmd_lock(struct ScriptContext *ctx) bool8 ScrCmd_lock(struct ScriptContext *ctx)
{ {
if (IsUpdateLinkStateCBActive()) if (IsUpdateLinkStateCBActive())
@ -1227,12 +1231,12 @@ bool8 ScrCmd_lock(struct ScriptContext *ctx)
{ {
if (gObjectEvents[gSelectedObjectEvent].active) if (gObjectEvents[gSelectedObjectEvent].active)
{ {
LockSelectedObjectEvent(); FreezeObjects_WaitForPlayerAndSelected();
SetupNativeScript(ctx, IsFreezeSelectedObjectAndPlayerFinished); SetupNativeScript(ctx, IsFreezeSelectedObjectAndPlayerFinished);
} }
else else
{ {
ScriptFreezeObjectEvents(); FreezeObjects_WaitForPlayer();
SetupNativeScript(ctx, IsFreezePlayerFinished); SetupNativeScript(ctx, IsFreezePlayerFinished);
} }
return TRUE; return TRUE;

View File

@ -91,7 +91,7 @@ static void Task_ReturnToItemListAfterDecorationPurchase(u8 taskId);
static void Task_HandleShopMenuBuy(u8 taskId); static void Task_HandleShopMenuBuy(u8 taskId);
static void Task_HandleShopMenuSell(u8 taskId); static void Task_HandleShopMenuSell(u8 taskId);
static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list); static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list);
static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y); static void BuyMenuPrintPriceInList(u8 windowId, u32 itemId, u8 y);
static const struct YesNoFuncTable sShopPurchaseYesNoFuncs = static const struct YesNoFuncTable sShopPurchaseYesNoFuncs =
{ {
@ -552,17 +552,17 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, s
BuyMenuPrint(2, description, 3, 1, 0, 0); BuyMenuPrint(2, description, 3, 1, 0, 0);
} }
static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) static void BuyMenuPrintPriceInList(u8 windowId, u32 itemId, u8 y)
{ {
u8 x; u8 x;
if (item != LIST_CANCEL) if (itemId != LIST_CANCEL)
{ {
if (sMartInfo.martType == MART_TYPE_NORMAL) if (sMartInfo.martType == MART_TYPE_NORMAL)
{ {
ConvertIntToDecimalStringN( ConvertIntToDecimalStringN(
gStringVar1, gStringVar1,
ItemId_GetPrice(item) >> GetPriceReduction(POKENEWS_SLATEPORT), ItemId_GetPrice(itemId) >> GetPriceReduction(POKENEWS_SLATEPORT),
STR_CONV_MODE_LEFT_ALIGN, STR_CONV_MODE_LEFT_ALIGN,
5); 5);
} }
@ -570,7 +570,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y)
{ {
ConvertIntToDecimalStringN( ConvertIntToDecimalStringN(
gStringVar1, gStringVar1,
gDecorations[item].price, gDecorations[itemId].price,
STR_CONV_MODE_LEFT_ALIGN, STR_CONV_MODE_LEFT_ALIGN,
5); 5);
} }

102
src/tv.c
View File

@ -36,6 +36,7 @@
#include "data.h" #include "data.h"
#include "constants/battle_frontier.h" #include "constants/battle_frontier.h"
#include "constants/contest.h" #include "constants/contest.h"
#include "constants/event_objects.h"
#include "constants/items.h" #include "constants/items.h"
#include "constants/layouts.h" #include "constants/layouts.h"
#include "constants/lilycove_lady.h" #include "constants/lilycove_lady.h"
@ -335,19 +336,19 @@ static const u8 *const sTVPokemonTodaySuccessfulTextGroup[] = {
}; };
static const u8 *const sTVTodaysSmartShopperTextGroup[] = { static const u8 *const sTVTodaysSmartShopperTextGroup[] = {
gTVTodaysSmartShopperText00, [SMARTSHOPPER_STATE_INTRO] = SmartShopper_Text_Intro,
gTVTodaysSmartShopperText01, [SMARTSHOPPER_STATE_CLERK_NORMAL] = SmartShopper_Text_ClerkNormal,
gTVTodaysSmartShopperText02, [SMARTSHOPPER_STATE_RAND_COMMENT_1] = SmartShopper_Text_RandomComment1,
gTVTodaysSmartShopperText03, [SMARTSHOPPER_STATE_RAND_COMMENT_2] = SmartShopper_Text_RandomComment2,
gTVTodaysSmartShopperText04, [SMARTSHOPPER_STATE_RAND_COMMENT_3] = SmartShopper_Text_RandomComment3,
gTVTodaysSmartShopperText05, [SMARTSHOPPER_STATE_RAND_COMMENT_4] = SmartShopper_Text_RandomComment4,
gTVTodaysSmartShopperText06, [SMARTSHOPPER_STATE_SECOND_ITEM] = SmartShopper_Text_SecondItem,
gTVTodaysSmartShopperText07, [SMARTSHOPPER_STATE_THIRD_ITEM] = SmartShopper_Text_ThirdItem,
gTVTodaysSmartShopperText08, [SMARTSHOPPER_STATE_DURING_SALE] = SmartShopper_Text_DuringSale,
gTVTodaysSmartShopperText09, [SMARTSHOPPER_STATE_OUTRO_NORMAL] = SmartShopper_Text_OutroNormal,
gTVTodaysSmartShopperText10, [SMARTSHOPPER_STATE_IS_VIP] = SmartShopper_Text_IsVIP,
gTVTodaysSmartShopperText11, [SMARTSHOPPER_STATE_CLERK_MAX] = SmartShopper_Text_ClerkMax,
gTVTodaysSmartShopperText12 [SMARTSHOPPER_STATE_OUTRO_MAX] = SmartShopper_Text_OutroMax
}; };
static const u8 *const sTVBravoTrainerTextGroup[] = { static const u8 *const sTVBravoTrainerTextGroup[] = {
@ -2785,7 +2786,7 @@ size_t CountDigits(int value)
return 1; return 1;
} }
static void sub_80EF40C(u8 varIdx, TVShow *show) static void SmartShopper_BufferPurchaseTotal(u8 varIdx, TVShow *show)
{ {
u8 i; u8 i;
int price; int price;
@ -3421,7 +3422,7 @@ void GetMomOrDadStringForTVMessage(void)
void HideBattleTowerReporter(void) void HideBattleTowerReporter(void)
{ {
VarSet(VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, 0); VarSet(VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, 0);
RemoveObjectEventByLocalIdAndMap(5, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); RemoveObjectEventByLocalIdAndMap(LOCALID_BATTLE_TOWER_LOBBY_REPORTER, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
FlagSet(FLAG_HIDE_BATTLE_TOWER_REPORTER); FlagSet(FLAG_HIDE_BATTLE_TOWER_REPORTER);
} }
@ -4460,78 +4461,85 @@ static void DoTVShowTodaysSmartShopper(void)
state = sTVShowState; state = sTVShowState;
switch(state) switch(state)
{ {
case 0: case SMARTSHOPPER_STATE_INTRO:
TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language); TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
GetMapName(gStringVar2, show->smartshopperShow.shopLocation, 0); GetMapName(gStringVar2, show->smartshopperShow.shopLocation, 0);
if (show->smartshopperShow.itemAmounts[0] >= 255) if (show->smartshopperShow.itemAmounts[0] >= 255)
sTVShowState = 11; sTVShowState = SMARTSHOPPER_STATE_CLERK_MAX;
else else
sTVShowState = 1; sTVShowState = SMARTSHOPPER_STATE_CLERK_NORMAL;
break; break;
case 1: case SMARTSHOPPER_STATE_CLERK_NORMAL:
TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language); TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[0])); StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[0]));
ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[0]); ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[0]);
sTVShowState += 1 + (Random() % 4); // Pick a random comment (SMARTSHOPPER_STATE_RAND_COMMENT_#)
sTVShowState += SMARTSHOPPER_STATE_CLERK_NORMAL + (Random() % (SMARTSHOPPER_STATE_RAND_COMMENT_4 - SMARTSHOPPER_STATE_RAND_COMMENT_1 + 1));
break; break;
case 2: case SMARTSHOPPER_STATE_RAND_COMMENT_1:
case 4: case SMARTSHOPPER_STATE_RAND_COMMENT_3:
case 5: case SMARTSHOPPER_STATE_RAND_COMMENT_4:
if (show->smartshopperShow.itemIds[1] != ITEM_NONE) if (show->smartshopperShow.itemIds[1] != ITEM_NONE)
sTVShowState = 6; sTVShowState = SMARTSHOPPER_STATE_SECOND_ITEM;
else else
sTVShowState = 10; sTVShowState = SMARTSHOPPER_STATE_IS_VIP;
break; break;
case 3: case SMARTSHOPPER_STATE_RAND_COMMENT_2:
ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[0] + 1); ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[0] + 1);
if (show->smartshopperShow.itemIds[1] != ITEM_NONE) if (show->smartshopperShow.itemIds[1] != ITEM_NONE)
sTVShowState = 6; sTVShowState = SMARTSHOPPER_STATE_SECOND_ITEM;
else else
sTVShowState = 10; sTVShowState = SMARTSHOPPER_STATE_IS_VIP;
break; break;
case 6: case SMARTSHOPPER_STATE_SECOND_ITEM:
// Clerk describes 2nd type of item player purchased
StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[1])); StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[1]));
ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[1]); ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[1]);
if (show->smartshopperShow.itemIds[2] != ITEM_NONE) if (show->smartshopperShow.itemIds[2] != ITEM_NONE)
sTVShowState = 7; sTVShowState = SMARTSHOPPER_STATE_THIRD_ITEM;
else if (show->smartshopperShow.priceReduced == TRUE) else if (show->smartshopperShow.priceReduced == TRUE)
sTVShowState = 8; sTVShowState = SMARTSHOPPER_STATE_DURING_SALE;
else else
sTVShowState = 9; sTVShowState = SMARTSHOPPER_STATE_OUTRO_NORMAL;
break; break;
case 7: case SMARTSHOPPER_STATE_THIRD_ITEM:
// Clerk describes 3rd type of item player purchased
StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[2])); StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[2]));
ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[2]); ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[2]);
if (show->smartshopperShow.priceReduced == TRUE) if (show->smartshopperShow.priceReduced == TRUE)
sTVShowState = 8; sTVShowState = SMARTSHOPPER_STATE_DURING_SALE;
else else
sTVShowState = 9; sTVShowState = SMARTSHOPPER_STATE_OUTRO_NORMAL;
break; break;
case 8: case SMARTSHOPPER_STATE_DURING_SALE:
if (show->smartshopperShow.itemAmounts[0] >= 255) if (show->smartshopperShow.itemAmounts[0] >= 255)
sTVShowState = 12; sTVShowState = SMARTSHOPPER_STATE_OUTRO_MAX;
else else
sTVShowState = 9; sTVShowState = SMARTSHOPPER_STATE_OUTRO_NORMAL;
break; break;
case 9: case SMARTSHOPPER_STATE_OUTRO_NORMAL:
sub_80EF40C(1, show); SmartShopper_BufferPurchaseTotal(1, show);
TVShowDone(); TVShowDone();
break; break;
case 10: case SMARTSHOPPER_STATE_IS_VIP:
// Clerk says customer is a VIP
// Said if player only purchased one type of item
if (show->smartshopperShow.priceReduced == TRUE) if (show->smartshopperShow.priceReduced == TRUE)
sTVShowState = 8; sTVShowState = SMARTSHOPPER_STATE_DURING_SALE;
else else
sTVShowState = 9; sTVShowState = SMARTSHOPPER_STATE_OUTRO_NORMAL;
break; break;
case 11: case SMARTSHOPPER_STATE_CLERK_MAX:
// Clerk's comments if player purchased maximum number of 1st item
TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language); TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[0])); StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[0]));
if (show->smartshopperShow.priceReduced == TRUE) if (show->smartshopperShow.priceReduced == TRUE)
sTVShowState = 8; sTVShowState = SMARTSHOPPER_STATE_DURING_SALE;
else else
sTVShowState = 12; sTVShowState = SMARTSHOPPER_STATE_OUTRO_MAX;
break; break;
case 12: case SMARTSHOPPER_STATE_OUTRO_MAX:
// Outro comments if player purchased maximum number of 1st item
TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language); TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
TVShowDone(); TVShowDone();
break; break;

View File

@ -253,10 +253,10 @@ static bool32 UR_PrintFieldMessage(const u8 *);
static s32 GetChatLeaderActionRequestMessage(u8 *, u32, u16 *, struct WirelessLink_URoom *); static s32 GetChatLeaderActionRequestMessage(u8 *, u32, u16 *, struct WirelessLink_URoom *);
static void Task_InitUnionRoom(u8 taskId); static void Task_InitUnionRoom(u8 taskId);
static bool8 AreGnameUnameDifferent(struct WirelessGnameUnamePair*, const struct WirelessGnameUnamePair*); static bool8 AreGnameUnameDifferent(struct WirelessGnameUnamePair*, const struct WirelessGnameUnamePair*);
static void ItemPrintFunc_PossibleGroupMembers(u8, s32, u8); static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, u32 id, u8 y);
static void ListMenuItemPrintFunc_UnionRoomGroups(u8, s32, u8); static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, u32 id, u8 y);
static void TradeBoardListMenuItemPrintFunc(u8, s32, u8); static void TradeBoardListMenuItemPrintFunc(u8 windowId, u32 id, u8 y);
static void nullsub_14(u8, s32, u8); static void nullsub_14(u8 windowId, u32 id, u8 y);
#include "data/union_room.h" #include "data/union_room.h"
@ -835,7 +835,7 @@ static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *data
return FALSE; return FALSE;
} }
static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, s32 id, u8 y) static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, u32 id, u8 y)
{ {
struct WirelessLink_Leader *data = sWirelessLinkMain.leader; struct WirelessLink_Leader *data = sWirelessLinkMain.leader;
u8 colorIdx = UR_COLOR_DKE_WHT_LTE; u8 colorIdx = UR_COLOR_DKE_WHT_LTE;
@ -1363,7 +1363,7 @@ static u8 URoomGroupListGetTextColor(struct WirelessLink_Group *data, u32 id)
return UR_COLOR_DKE_WHT_LTE; return UR_COLOR_DKE_WHT_LTE;
} }
static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, s32 id, u8 y) static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, u32 id, u8 y)
{ {
struct WirelessLink_Group *data = sWirelessLinkMain.group; struct WirelessLink_Group *data = sWirelessLinkMain.group;
u8 colorId = URoomGroupListGetTextColor(data, id); u8 colorId = URoomGroupListGetTextColor(data, id);
@ -4074,9 +4074,8 @@ static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 *main0,
} }
} }
void nullsub_14(u8 windowId, s32 itemId, u8 y) void nullsub_14(u8 windowId, u32 itemId, u8 y)
{ {
} }
static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx) static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx)
@ -4100,7 +4099,7 @@ static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct GFtgtGname * gname
} }
} }
static void TradeBoardListMenuItemPrintFunc(u8 windowId, s32 itemId, u8 y) static void TradeBoardListMenuItemPrintFunc(u8 windowId, u32 itemId, u8 y)
{ {
struct WirelessLink_Leader *data = sWirelessLinkMain.leader; struct WirelessLink_Leader *data = sWirelessLinkMain.leader;
struct GFtgtGname *rfu; struct GFtgtGname *rfu;
@ -4420,7 +4419,7 @@ static void HandleCancelActivity(bool32 setData)
static void UR_EnableScriptContext2AndFreezeObjectEvents(void) static void UR_EnableScriptContext2AndFreezeObjectEvents(void)
{ {
ScriptContext2_Enable(); ScriptContext2_Enable();
ScriptFreezeObjectEvents(); FreezeObjects_WaitForPlayer();
} }
static u8 GetActivePartnerSpriteGenderParam(struct WirelessLink_URoom *data) static u8 GetActivePartnerSpriteGenderParam(struct WirelessLink_URoom *data)

View File

@ -77,18 +77,27 @@ static const u8 sNextFacingDirection[] = {
[DIR_EAST] = DIR_NORTH [DIR_EAST] = DIR_NORTH
}; };
// Local id 1 is the Nurse/Attendant, 2-9 are link players static const u8 sUnionRoomLocalIds[] = {
static const u8 sUnionRoomLocalIds[] = { 9, 8, 7, 2, 6, 5, 4, 3 }; LOCALID_UNION_ROOM_PLAYER_1,
LOCALID_UNION_ROOM_PLAYER_2,
LOCALID_UNION_ROOM_PLAYER_3,
LOCALID_UNION_ROOM_PLAYER_4,
LOCALID_UNION_ROOM_PLAYER_5,
LOCALID_UNION_ROOM_PLAYER_6,
LOCALID_UNION_ROOM_PLAYER_7,
LOCALID_UNION_ROOM_PLAYER_8
};
static const u16 sUnknown[] = { // Unused
0x2BF, static const u16 sHidePlayerFlags[] = {
0x2C0, FLAG_HIDE_UNION_ROOM_PLAYER_1,
0x2C1, FLAG_HIDE_UNION_ROOM_PLAYER_2,
0x2C2, FLAG_HIDE_UNION_ROOM_PLAYER_3,
0x2C3, FLAG_HIDE_UNION_ROOM_PLAYER_4,
0x2C4, FLAG_HIDE_UNION_ROOM_PLAYER_5,
0x2C5, FLAG_HIDE_UNION_ROOM_PLAYER_6,
0x2C6 FLAG_HIDE_UNION_ROOM_PLAYER_7,
FLAG_HIDE_UNION_ROOM_PLAYER_8
}; };
static const u8 sMovement_UnionPlayerExit[2] = { static const u8 sMovement_UnionPlayerExit[2] = {