summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2021-07-12 01:39:28 -0400
committerGitHub <noreply@github.com>2021-07-12 01:39:28 -0400
commita274cc6a76a59768bcfaef345d55a39f6c1ddbac (patch)
treee6977a9d8066e946148b8d1dfcf95e721b59e54f
parent810ca5f8ff79aeec6ffe8e982f4786aade616b4d (diff)
parent876a89eba4903e5ef1ccad22b1ee52023fb24513 (diff)
Merge branch 'master' into flatten_sprite_pos
-rw-r--r--.github/workflows/build.yml2
-rw-r--r--Makefile5
-rw-r--r--asm/macros/event.inc4
-rw-r--r--data/battle_ai_scripts.s255
-rw-r--r--data/battle_scripts_1.s454
-rw-r--r--data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc2
-rw-r--r--data/maps/BattleFrontier_BattleTowerLobby/scripts.inc2
-rw-r--r--data/maps/BirthIsland_Exterior/scripts.inc9
-rw-r--r--data/maps/FarawayIsland_Interior/scripts.inc22
-rw-r--r--data/maps/Route111/scripts.inc7
-rw-r--r--data/maps/UnionRoom/scripts.inc25
-rw-r--r--data/text/tv.inc26
-rw-r--r--graphics/misc/fossil.pngbin298 -> 0 bytes
-rw-r--r--include/constants/battle_ai.h28
-rw-r--r--include/constants/event_objects.h30
-rw-r--r--include/constants/tv.h15
-rw-r--r--include/event_object_lock.h4
-rw-r--r--include/event_scripts.h26
-rw-r--r--include/list_menu.h2
-rw-r--r--include/region_map.h2
-rw-r--r--src/battle_ai_script_commands.c29
-rw-r--r--src/battle_dome.c8
-rw-r--r--src/battle_pyramid_bag.c4
-rw-r--r--src/battle_tv.c4
-rw-r--r--src/daycare.c4
-rw-r--r--src/decoration.c6
-rw-r--r--src/event_object_lock.c8
-rwxr-xr-xsrc/faraway_island.c2
-rw-r--r--src/field_special_scene.c30
-rw-r--r--src/field_specials.c32
-rw-r--r--src/hall_of_fame.c23
-rwxr-xr-xsrc/item_menu.c4
-rw-r--r--src/item_menu_icons.c4
-rw-r--r--src/menu_specialized.c2
-rw-r--r--src/mirage_tower.c384
-rw-r--r--src/player_pc.c8
-rw-r--r--src/pokeblock.c8
-rwxr-xr-xsrc/pokenav_region_map.c4
-rw-r--r--src/region_map.c18
-rw-r--r--src/scrcmd.c10
-rwxr-xr-xsrc/shop.c10
-rw-r--r--src/tv.c102
-rw-r--r--src/union_room.c19
-rw-r--r--src/union_room_player_avatar.c33
44 files changed, 779 insertions, 897 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index de3a35c40..a8bd016cb 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -71,4 +71,4 @@ jobs:
branch: symbols
cwd: "./symbols"
add: "*.sym"
- message: ${{ github.event.commits[0].message }}
+ message: ${{ github.event.pull_request.title }}
diff --git a/Makefile b/Makefile
index 2e5afdf0c..7b2f79877 100644
--- a/Makefile
+++ b/Makefile
@@ -28,6 +28,7 @@ LD := $(PREFIX)ld
# note: the makefile must be set up so MODERNCC is never called
# if MODERN=0
MODERNCC := $(PREFIX)gcc
+PATH_MODERNCC := PATH=$(TOOLCHAIN)/bin:PATH $(MODERNCC)
ifeq ($(OS),Windows_NT)
EXE := .exe
@@ -105,11 +106,11 @@ OBJ_DIR := $(OBJ_DIR_NAME)
LIBPATH := -L ../../tools/agbcc/lib
LIB := $(LIBPATH) -lgcc -lc -L../../libagbsyscall -lagbsyscall
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
ROM := $(MODERN_ROM_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
endif
diff --git a/asm/macros/event.inc b/asm/macros/event.inc
index 915fc7142..73aef33b5 100644
--- a/asm/macros/event.inc
+++ b/asm/macros/event.inc
@@ -813,12 +813,12 @@
.byte 0x68
.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
.byte 0x69
.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
.byte 0x6a
.endm
diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s
index 56be92c5e..4867f4261 100644
--- a/data/battle_ai_scripts.s
+++ b/data/battle_ai_scripts.s
@@ -7,6 +7,7 @@
#include "constants/hold_effects.h"
#include "constants/pokemon.h"
.include "asm/macros/battle_ai_script.inc"
+ .include "constants/constants.inc"
.section script_data, "aw", %progbits
@@ -17,11 +18,11 @@ gBattleAI_ScriptsTable:: @ 82DBEF8
.4byte AI_CheckViability @ AI_SCRIPT_CHECK_VIABILITY
.4byte AI_SetupFirstTurn @ AI_SCRIPT_SETUP_FIRST_TURN
.4byte AI_Risky @ AI_SCRIPT_RISKY
- .4byte AI_PreferStrongestMove @ AI_SCRIPT_PREFER_STRONGEST_MOVE
+ .4byte AI_PreferPowerExtremes @ AI_SCRIPT_PREFER_POWER_EXTREMES
.4byte AI_PreferBatonPass @ AI_SCRIPT_PREFER_BATON_PASS
.4byte AI_DoubleBattle @ AI_SCRIPT_DOUBLE_BATTLE
.4byte AI_HPAware @ AI_SCRIPT_HP_AWARE
- .4byte AI_Unknown @ AI_SCRIPT_UNKNOWN
+ .4byte AI_TrySunnyDayStart @ AI_SCRIPT_TRY_SUNNY_DAY_START
.4byte AI_Ret
.4byte AI_Ret
.4byte AI_Ret
@@ -50,8 +51,7 @@ AI_CheckBadMove:
if_move MOVE_FISSURE, AI_CBM_CheckIfNegatesType
if_move MOVE_HORN_DRILL, AI_CBM_CheckIfNegatesType
get_how_powerful_move_is
- if_equal 0, AI_CheckBadMove_CheckSoundproof
-
+ if_equal MOVE_POWER_OTHER, AI_CheckBadMove_CheckSoundproof
AI_CBM_CheckIfNegatesType: @ 82DBF92
if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
get_ability AI_TARGET
@@ -84,11 +84,9 @@ CheckIfWonderGuardCancelsMove: @ 82DBFE4
CheckIfLevitateCancelsGroundMove: @ 82DBFEF
get_curr_move_type
if_equal_ TYPE_GROUND, Score_Minus10
-
AI_CheckBadMove_CheckSoundproof_: @ 82DBFF7
get_how_powerful_move_is
- if_equal 0, AI_CheckBadMove_CheckSoundproof
-
+ if_equal MOVE_POWER_OTHER, AI_CheckBadMove_CheckSoundproof @ Pointless check
AI_CheckBadMove_CheckSoundproof: @ 82DBFFE
get_ability AI_TARGET
if_not_equal ABILITY_SOUNDPROOF, AI_CheckBadMove_CheckEffect
@@ -101,7 +99,6 @@ AI_CheckBadMove_CheckSoundproof: @ 82DBFFE
if_move MOVE_UPROAR, Score_Minus10
if_move MOVE_METAL_SOUND, Score_Minus10
if_move MOVE_GRASS_WHISTLE, Score_Minus10
-
AI_CheckBadMove_CheckEffect: @ 82DC045
if_effect EFFECT_SLEEP, AI_CBM_Sleep
if_effect EFFECT_EXPLOSION, AI_CBM_Explosion
@@ -247,7 +244,6 @@ AI_CBM_DreamEater: @ 82DC330
AI_CBM_BellyDrum: @ 82DC341
if_hp_less_than AI_USER, 51, Score_Minus10
-
AI_CBM_AttackUp: @ 82DC348
if_stat_level_equal AI_USER, STAT_ATK, MAX_STAT_STAGE, Score_Minus10
end
@@ -307,7 +303,6 @@ AI_CBM_AccDown: @ 82DC3D9
AI_CBM_EvasionDown: @ 82DC3EE
if_stat_level_equal AI_TARGET, STAT_EVASION, MIN_STAT_STAGE, Score_Minus10
-
CheckIfAbilityBlocksStatChange: @ 82DC3F6
get_ability AI_TARGET
if_equal ABILITY_CLEAR_BODY, Score_Minus10
@@ -368,7 +363,6 @@ AI_CBM_OneHitKO: @ 82DC4D0
AI_CBM_Magnitude: @ 82DC4E5
get_ability AI_TARGET
if_equal ABILITY_LEVITATE, Score_Minus10
-
AI_CBM_HighRiskForDamage: @ 82DC4ED
if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
get_ability AI_TARGET
@@ -486,7 +480,6 @@ AI_CBM_Safeguard: @ 82DC635
AI_CBM_Memento: @ 82DC640
if_stat_level_equal AI_TARGET, STAT_ATK, MIN_STAT_STAGE, Score_Minus10
if_stat_level_equal AI_TARGET, STAT_SPATK, MIN_STAT_STAGE, Score_Minus8
-
AI_CBM_BatonPass: @ 82DC650
count_usable_party_mons AI_USER
if_equal 0, Score_Minus10
@@ -510,7 +503,7 @@ AI_CBM_FutureSight: @ 82DC669
AI_CBM_FakeOut: @ 82DC680
is_first_turn_for AI_USER
- if_equal 0, Score_Minus10
+ if_equal FALSE, Score_Minus10
end
AI_CBM_Stockpile: @ 82DC689
@@ -558,7 +551,7 @@ AI_CBM_Ingrain: @ 82DC6F4
AI_CBM_Recycle: @ 82DC6FF
get_used_held_item AI_USER
- if_equal 0, Score_Minus10
+ if_equal ITEM_NONE, Score_Minus10
end
AI_CBM_Imprison: @ 82DC708
@@ -788,7 +781,6 @@ AI_CV_Sleep: @ 82DCA92
AI_CV_SleepEncourageSlpDamage: @ 82DCAA5
if_random_less_than 128, AI_CV_Sleep_End
score +1
-
AI_CV_Sleep_End: @ 82DCAAD
end
@@ -800,7 +792,6 @@ AI_CV_Absorb: @ 82DCAAE
AI_CV_AbsorbEncourageMaybe: @ 82DCABF
if_random_less_than 50, AI_CV_Absorb_End
score -3
-
AI_CV_Absorb_End: @ 82DCAC7
end
@@ -810,7 +801,6 @@ AI_CV_SelfKO: @ 82DCAC8
if_stat_level_less_than AI_TARGET, STAT_EVASION, 10, AI_CV_SelfKO_Encourage1
if_random_less_than 128, AI_CV_SelfKO_Encourage1
score -1
-
AI_CV_SelfKO_Encourage1: @ 82DCAE2
if_hp_less_than AI_USER, 80, AI_CV_SelfKO_Encourage2
if_target_faster AI_CV_SelfKO_Encourage2
@@ -821,7 +811,6 @@ AI_CV_SelfKO_Encourage2: @ 82DCAFA
if_hp_more_than AI_USER, 50, AI_CV_SelfKO_Encourage4
if_random_less_than 128, AI_CV_SelfKO_Encourage3
score +1
-
AI_CV_SelfKO_Encourage3: @ 82DCB09
if_hp_more_than AI_USER, 30, AI_CV_SelfKO_End
if_random_less_than 50, AI_CV_SelfKO_End
@@ -831,7 +820,6 @@ AI_CV_SelfKO_Encourage3: @ 82DCB09
AI_CV_SelfKO_Encourage4: @ 82DCB1D
if_random_less_than 50, AI_CV_SelfKO_End
score -1
-
AI_CV_SelfKO_End: @ 82DCB25
end
@@ -842,7 +830,6 @@ AI_CV_DreamEater: @ 82DCB26
AI_CV_DreamEater_ScoreDown1: @ 82DCB37
score -1
-
AI_CV_DreamEater_End: @ 82DCB39
end
@@ -859,7 +846,6 @@ AI_CV_MirrorMove2: @ 82DCB58
if_in_hwords AI_CV_MirrorMove_EncouragedMovesToMirror, AI_CV_MirrorMove_End
if_random_less_than 80, AI_CV_MirrorMove_End
score -1
-
AI_CV_MirrorMove_End: @ 82DCB6B
end
@@ -915,15 +901,12 @@ AI_CV_AttackUp2: @ 82DCBD1
if_hp_not_equal AI_USER, 100, AI_CV_AttackUp3
if_random_less_than 128, AI_CV_AttackUp3
score +2
-
AI_CV_AttackUp3: @ 82DCBE0
if_hp_more_than AI_USER, 70, AI_CV_AttackUp_End
if_hp_less_than AI_USER, 40, AI_CV_AttackUp_ScoreDown2
if_random_less_than 40, AI_CV_AttackUp_End
-
AI_CV_AttackUp_ScoreDown2: @ 82DCBF4
score -2
-
AI_CV_AttackUp_End: @ 82DCBF6
end
@@ -937,11 +920,9 @@ AI_CV_DefenseUp2: @ 82DCC0C
if_hp_not_equal AI_USER, 100, AI_CV_DefenseUp3
if_random_less_than 128, AI_CV_DefenseUp3
score +2
-
AI_CV_DefenseUp3: @ 82DCC1B
if_hp_less_than AI_USER, 70, AI_CV_DefenseUp4
if_random_less_than 200, AI_CV_DefenseUp_End
-
AI_CV_DefenseUp4: @ 82DCC28
if_hp_less_than AI_USER, 40, AI_CV_DefenseUp_ScoreDown2
get_last_used_bank_move AI_TARGET
@@ -951,13 +932,10 @@ AI_CV_DefenseUp4: @ 82DCC28
get_move_type_from_result
if_not_in_bytes AI_CV_DefenseUp_PhysicalTypes, AI_CV_DefenseUp_ScoreDown2
if_random_less_than 60, AI_CV_DefenseUp_End
-
AI_CV_DefenseUp5: @ 82DCC4A
if_random_less_than 60, AI_CV_DefenseUp_End
-
AI_CV_DefenseUp_ScoreDown2: @ 82DCC50
score -2
-
AI_CV_DefenseUp_End: @ 82DCC52
end
@@ -981,7 +959,6 @@ AI_CV_SpeedUp: @ 82DCC5D
AI_CV_SpeedUp2: @ 82DCC6A
if_random_less_than 70, AI_CV_SpeedUp_End
score +3
-
AI_CV_SpeedUp_End: @ 82DCC72
end
@@ -995,15 +972,12 @@ AI_CV_SpAtkUp2: @ 82DCC88
if_hp_not_equal AI_USER, 100, AI_CV_SpAtkUp3
if_random_less_than 128, AI_CV_SpAtkUp3
score +2
-
AI_CV_SpAtkUp3: @ 82DCC97
if_hp_more_than AI_USER, 70, AI_CV_SpAtkUp_End
if_hp_less_than AI_USER, 40, AI_CV_SpAtkUp_ScoreDown2
if_random_less_than 70, AI_CV_SpAtkUp_End
-
AI_CV_SpAtkUp_ScoreDown2: @ 82DCCAB
score -2
-
AI_CV_SpAtkUp_End: @ 82DCCAD
end
@@ -1017,11 +991,9 @@ AI_CV_SpDefUp2: @ 82DCCC3
if_hp_not_equal AI_USER, 100, AI_CV_SpDefUp3
if_random_less_than 128, AI_CV_SpDefUp3
score +2
-
AI_CV_SpDefUp3: @ 82DCCD2
if_hp_less_than AI_USER, 70, AI_CV_SpDefUp4
if_random_less_than 200, AI_CV_SpDefUp_End
-
AI_CV_SpDefUp4: @ 82DCCDF
if_hp_less_than AI_USER, 40, AI_CV_SpDefUp_ScoreDown2
get_last_used_bank_move AI_TARGET
@@ -1031,13 +1003,10 @@ AI_CV_SpDefUp4: @ 82DCCDF
get_move_type_from_result
if_in_bytes AI_CV_SpDefUp_PhysicalTypes, AI_CV_SpDefUp_ScoreDown2
if_random_less_than 60, AI_CV_SpDefUp_End
-
AI_CV_SpDefUp5: @ 82DCD01
if_random_less_than 60, AI_CV_SpDefUp_End
-
AI_CV_SpDefUp_ScoreDown2: @ 82DCD07
score -2
-
AI_CV_SpDefUp_End: @ 82DCD09
end
@@ -1057,11 +1026,9 @@ AI_CV_AccuracyUp:
if_stat_level_less_than AI_USER, STAT_ACC, 9, AI_CV_AccuracyUp2
if_random_less_than 50, AI_CV_AccuracyUp2
score -2
-
AI_CV_AccuracyUp2:
if_hp_more_than AI_USER, 70, AI_CV_AccuracyUp_End
score -2
-
AI_CV_AccuracyUp_End:
end
@@ -1069,46 +1036,37 @@ AI_CV_EvasionUp:
if_hp_less_than AI_USER, 90, AI_CV_EvasionUp2
if_random_less_than 100, AI_CV_EvasionUp2
score +3
-
AI_CV_EvasionUp2:
if_stat_level_less_than AI_USER, STAT_EVASION, 9, AI_CV_EvasionUp3
if_random_less_than 128, AI_CV_EvasionUp3
score -1
-
AI_CV_EvasionUp3:
if_not_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_EvasionUp5
if_hp_more_than AI_USER, 50, AI_CV_EvasionUp4
if_random_less_than 80, AI_CV_EvasionUp5
-
AI_CV_EvasionUp4:
if_random_less_than 50, AI_CV_EvasionUp5
score +3
-
AI_CV_EvasionUp5:
if_not_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_EvasionUp6
if_random_less_than 70, AI_CV_EvasionUp6
score +3
-
AI_CV_EvasionUp6:
if_not_status3 AI_USER, STATUS3_ROOTED, AI_CV_EvasionUp7
if_random_less_than 128, AI_CV_EvasionUp7
score +2
-
AI_CV_EvasionUp7:
if_not_status2 AI_TARGET, STATUS2_CURSED, AI_CV_EvasionUp8
if_random_less_than 70, AI_CV_EvasionUp8
score +3
-
AI_CV_EvasionUp8:
if_hp_more_than AI_USER, 70, AI_CV_EvasionUp_End
if_stat_level_equal AI_USER, STAT_EVASION, DEFAULT_STAT_STAGE, AI_CV_EvasionUp_End
if_hp_less_than AI_USER, 40, AI_CV_EvasionUp_ScoreDown2
if_hp_less_than AI_TARGET, 40, AI_CV_EvasionUp_ScoreDown2
if_random_less_than 70, AI_CV_EvasionUp_End
-
AI_CV_EvasionUp_ScoreDown2:
score -2
-
AI_CV_EvasionUp_End:
end
@@ -1121,11 +1079,9 @@ AI_CV_AlwaysHit:
AI_CV_AlwaysHit_ScoreUp1:
score +1
-
AI_CV_AlwaysHit2:
if_random_less_than 100, AI_CV_AlwaysHit_End
score +1
-
AI_CV_AlwaysHit_End:
end
@@ -1134,16 +1090,13 @@ AI_CV_AttackDown: @ 82DCDF8
score -1
if_hp_more_than AI_USER, 90, AI_CV_AttackDown2
score -1
-
AI_CV_AttackDown2: @ 82DCE0B
if_stat_level_more_than AI_TARGET, STAT_ATK, 3, AI_CV_AttackDown3
if_random_less_than 50, AI_CV_AttackDown3
score -2
-
AI_CV_AttackDown3: @ 82DCE1B
if_hp_more_than AI_TARGET, 70, AI_CV_AttackDown4
score -2
-
AI_CV_AttackDown4: @ 82DCE24
get_target_type1
if_in_bytes AI_CV_AttackDown_UnknownTypeList, AI_CV_AttackDown_End
@@ -1151,7 +1104,6 @@ AI_CV_AttackDown4: @ 82DCE24
if_in_bytes AI_CV_AttackDown_UnknownTypeList, AI_CV_AttackDown_End
if_random_less_than 50, AI_CV_AttackDown_End
score -2
-
AI_CV_AttackDown_End: @ 82DCE42
end
@@ -1167,15 +1119,12 @@ AI_CV_AttackDown_UnknownTypeList:
AI_CV_DefenseDown:
if_hp_less_than AI_USER, 70, AI_CV_DefenseDown2
if_stat_level_more_than AI_TARGET, STAT_DEF, 3, AI_CV_DefenseDown3
-
AI_CV_DefenseDown2:
if_random_less_than 50, AI_CV_DefenseDown3
score -2
-
AI_CV_DefenseDown3:
if_hp_more_than AI_TARGET, 70, AI_CV_DefenseDown_End
score -2
-
AI_CV_DefenseDown_End:
end
@@ -1193,7 +1142,6 @@ AI_CV_SpeedDown: @ 82DCE81
AI_CV_SpeedDown2: @ 82DCE8E
if_random_less_than 70, AI_CV_SpeedDown_End
score +2
-
AI_CV_SpeedDown_End: @ 82DCE96
end
@@ -1202,16 +1150,13 @@ AI_CV_SpAtkDown:
score -1
if_hp_more_than AI_USER, 90, AI_CV_SpAtkDown2
score -1
-
AI_CV_SpAtkDown2:
if_stat_level_more_than AI_TARGET, STAT_SPATK, 3, AI_CV_SpAtkDown3
if_random_less_than 50, AI_CV_SpAtkDown3
score -2
-
AI_CV_SpAtkDown3:
if_hp_more_than AI_TARGET, 70, AI_CV_SpAtkDown4
score -2
-
AI_CV_SpAtkDown4:
get_target_type1
if_in_bytes AI_CV_SpAtkDown_SpecialTypeList, AI_CV_SpAtkDown_End
@@ -1219,7 +1164,6 @@ AI_CV_SpAtkDown4:
if_in_bytes AI_CV_SpAtkDown_SpecialTypeList, AI_CV_SpAtkDown_End
if_random_less_than 50, AI_CV_SpAtkDown_End
score -2
-
AI_CV_SpAtkDown_End: @ 82DCEE1
end
@@ -1237,76 +1181,61 @@ AI_CV_SpAtkDown_SpecialTypeList: @ 82DCEE2
AI_CV_SpDefDown: @ 82DCEEB
if_hp_less_than AI_USER, 70, AI_CV_SpDefDown2
if_stat_level_more_than AI_TARGET, STAT_SPDEF, 3, AI_CV_SpDefDown3
-
AI_CV_SpDefDown2: @ 82DCEFA
if_random_less_than 50, AI_CV_SpDefDown3
score -2
-
AI_CV_SpDefDown3: @ 82DCF02
if_hp_more_than AI_TARGET, 70, AI_CV_SpDefDown_End
score -2
-
AI_CV_SpDefDown_End: @ 82DCF0B
end
AI_CV_AccuracyDown: @ 82DCF0C
if_hp_less_than AI_USER, 70, AI_CV_AccuracyDown2
if_hp_more_than AI_TARGET, 70, AI_CV_AccuracyDown3
-
AI_CV_AccuracyDown2:
if_random_less_than 100, AI_CV_AccuracyDown3
score -1
-
AI_CV_AccuracyDown3:
if_stat_level_more_than AI_USER, STAT_ACC, 4, AI_CV_AccuracyDown4
if_random_less_than 80, AI_CV_AccuracyDown4
score -2
-
AI_CV_AccuracyDown4:
if_not_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_AccuracyDown5
if_random_less_than 70, AI_CV_AccuracyDown5
score +2
-
AI_CV_AccuracyDown5:
if_not_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_AccuracyDown6
if_random_less_than 70, AI_CV_AccuracyDown6
score +2
-
AI_CV_AccuracyDown6:
if_not_status3 AI_USER, STATUS3_ROOTED, AI_CV_AccuracyDown7
if_random_less_than 128, AI_CV_AccuracyDown7
score +1
-
AI_CV_AccuracyDown7:
if_not_status2 AI_TARGET, STATUS2_CURSED, AI_CV_AccuracyDown8
if_random_less_than 70, AI_CV_AccuracyDown8
score +2
-
AI_CV_AccuracyDown8:
if_hp_more_than AI_USER, 70, AI_CV_AccuracyDown_End
if_stat_level_equal AI_TARGET, STAT_ACC, DEFAULT_STAT_STAGE, AI_CV_AccuracyDown_End
if_hp_less_than AI_USER, 40, AI_CV_AccuracyDown_ScoreDown2
if_hp_less_than AI_TARGET, 40, AI_CV_AccuracyDown_ScoreDown2
if_random_less_than 70, AI_CV_AccuracyDown_End
-
AI_CV_AccuracyDown_ScoreDown2:
score -2
-
AI_CV_AccuracyDown_End:
end
AI_CV_EvasionDown:
if_hp_less_than AI_USER, 70, AI_CV_EvasionDown2
if_stat_level_more_than AI_TARGET, STAT_EVASION, 3, AI_CV_EvasionDown3
-
AI_CV_EvasionDown2:
if_random_less_than 50, AI_CV_EvasionDown3
score -2
-
AI_CV_EvasionDown3:
if_hp_more_than AI_TARGET, 70, AI_CV_EvasionDown_End
score -2
-
AI_CV_EvasionDown_End:
end
@@ -1326,7 +1255,6 @@ AI_CV_Haze:
AI_CV_Haze2:
if_random_less_than 50, AI_CV_Haze3
score -3
-
AI_CV_Haze3:
if_stat_level_more_than AI_TARGET, STAT_ATK, 8, AI_CV_Haze4
if_stat_level_more_than AI_TARGET, STAT_DEF, 8, AI_CV_Haze4
@@ -1345,14 +1273,12 @@ AI_CV_Haze3:
AI_CV_Haze4:
if_random_less_than 50, AI_CV_Haze_End
score +3
-
AI_CV_Haze_End:
end
AI_CV_Bide:
if_hp_more_than AI_USER, 90, AI_CV_Bide_End
score -2
-
AI_CV_Bide_End:
end
@@ -1368,19 +1294,16 @@ AI_CV_Roar:
AI_CV_Roar2:
if_random_less_than 128, AI_CV_Roar_End
score +2
-
AI_CV_Roar_End:
end
AI_CV_Conversion:
if_hp_more_than AI_USER, 90, AI_CV_Conversion2
score -2
-
AI_CV_Conversion2:
get_turn_count
if_equal 0, AI_CV_Conversion_End
if_random_less_than 200, Score_Minus2
-
AI_CV_Conversion_End:
end
@@ -1393,7 +1316,6 @@ AI_CV_HealWeather:
AI_CV_HealWeather_ScoreDown2:
score -2
-
AI_CV_Heal:
if_hp_equal AI_USER, 100, AI_CV_Heal3
if_target_faster AI_CV_Heal4
@@ -1404,7 +1326,6 @@ AI_CV_Heal2:
if_hp_less_than AI_USER, 50, AI_CV_Heal5
if_hp_more_than AI_USER, 80, AI_CV_Heal3
if_random_less_than 70, AI_CV_Heal5
-
AI_CV_Heal3:
score -3
goto AI_CV_Heal_End
@@ -1418,11 +1339,9 @@ AI_CV_Heal4:
AI_CV_Heal5:
if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, AI_CV_Heal6
if_random_less_than 100, AI_CV_Heal_End
-
AI_CV_Heal6:
if_random_less_than 20, AI_CV_Heal_End
score +2
-
AI_CV_Heal_End:
end
@@ -1431,12 +1350,10 @@ AI_CV_Toxic:
if_hp_more_than AI_USER, 50, AI_CV_Toxic2
if_random_less_than 50, AI_CV_Toxic2
score -3
-
AI_CV_Toxic2:
if_hp_more_than AI_TARGET, 50, AI_CV_Toxic3
if_random_less_than 50, AI_CV_Toxic3
score -3
-
AI_CV_Toxic3:
if_has_move_with_effect AI_USER, EFFECT_SPECIAL_DEFENSE_UP, AI_CV_Toxic4
if_has_move_with_effect AI_USER, EFFECT_PROTECT, AI_CV_Toxic4
@@ -1445,7 +1362,6 @@ AI_CV_Toxic3:
AI_CV_Toxic4:
if_random_less_than 60, AI_CV_Toxic_End
score +2
-
AI_CV_Toxic_End:
end
@@ -1456,10 +1372,8 @@ AI_CV_LightScreen:
get_target_type2
if_in_bytes AI_CV_LightScreen_SpecialTypeList, AI_CV_LightScreen_End
if_random_less_than 50, AI_CV_LightScreen_End
-
AI_CV_LightScreen_ScoreDown2:
score -2
-
AI_CV_LightScreen_End:
end
@@ -1484,7 +1398,6 @@ AI_CV_Rest2:
if_hp_less_than AI_USER, 40, AI_CV_Rest6
if_hp_more_than AI_USER, 50, AI_CV_Rest3
if_random_less_than 70, AI_CV_Rest6
-
AI_CV_Rest3:
score -3
goto AI_CV_Rest_End
@@ -1493,7 +1406,6 @@ AI_CV_Rest4:
if_hp_less_than AI_USER, 60, AI_CV_Rest6
if_hp_more_than AI_USER, 70, AI_CV_Rest5
if_random_less_than 50, AI_CV_Rest6
-
AI_CV_Rest5:
score -3
goto AI_CV_Rest_End
@@ -1501,11 +1413,9 @@ AI_CV_Rest5:
AI_CV_Rest6:
if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, AI_CV_Rest7
if_random_less_than 50, AI_CV_Rest_End
-
AI_CV_Rest7:
if_random_less_than 10, AI_CV_Rest_End
score +3
-
AI_CV_Rest_End:
end
@@ -1515,7 +1425,6 @@ AI_CV_OneHitKO:
AI_CV_SuperFang:
if_hp_more_than AI_TARGET, 50, AI_CV_SuperFang_End
score -1
-
AI_CV_SuperFang_End:
end
@@ -1529,7 +1438,6 @@ AI_CV_Trap:
AI_CV_Trap2:
if_random_less_than 128, AI_CV_Trap_End
score +1
-
AI_CV_Trap_End:
end
@@ -1543,28 +1451,23 @@ AI_CV_HighCrit:
AI_CV_HighCrit2:
if_random_less_than 128, AI_CV_HighCrit_End
score +1
-
AI_CV_HighCrit_End:
end
AI_CV_Swagger:
if_has_move AI_USER, MOVE_PSYCH_UP, AI_CV_SwaggerHasPsychUp
-
AI_CV_Flatter:
if_random_less_than 128, AI_CV_Confuse
score +1
-
AI_CV_Confuse:
if_hp_more_than AI_TARGET, 70, AI_CV_Confuse_End
if_random_less_than 128, AI_CV_Confuse2
score -1
-
AI_CV_Confuse2:
if_hp_more_than AI_TARGET, 50, AI_CV_Confuse_End
score -1
if_hp_more_than AI_TARGET, 30, AI_CV_Confuse_End
score -1
-
AI_CV_Confuse_End:
end
@@ -1578,7 +1481,6 @@ AI_CV_SwaggerHasPsychUp:
AI_CV_SwaggerHasPsychUp_Minus5:
score -5
-
AI_CV_SwaggerHasPsychUp_End:
end
@@ -1589,10 +1491,8 @@ AI_CV_Reflect:
get_target_type2
if_in_bytes AI_CV_Reflect_PhysicalTypeList, AI_CV_Reflect_End
if_random_less_than 50, AI_CV_Reflect_End
-
AI_CV_Reflect_ScoreDown2:
score -2
-
AI_CV_Reflect_End:
end
@@ -1611,10 +1511,8 @@ AI_CV_Reflect_PhysicalTypeList:
AI_CV_Poison:
if_hp_less_than AI_USER, 50, AI_CV_Poison_ScoreDown1
if_hp_more_than AI_TARGET, 50, AI_CV_Poison_End
-
AI_CV_Poison_ScoreDown1:
score -1
-
AI_CV_Poison_End:
end
@@ -1627,7 +1525,6 @@ AI_CV_Paralyze:
AI_CV_Paralyze2:
if_random_less_than 20, AI_CV_Paralyze_End
score +3
-
AI_CV_Paralyze_End:
end
@@ -1636,11 +1533,9 @@ AI_CV_VitalThrow:
if_hp_more_than AI_USER, 60, AI_CV_VitalThrow_End
if_hp_less_than AI_USER, 40, AI_CV_VitalThrow2
if_random_less_than 180, AI_CV_VitalThrow_End
-
AI_CV_VitalThrow2:
if_random_less_than 50, AI_CV_VitalThrow_End
score -1
-
AI_CV_VitalThrow_End:
end
@@ -1650,15 +1545,12 @@ AI_CV_Substitute:
if_hp_more_than AI_USER, 50, AI_CV_Substitute2
if_random_less_than 100, AI_CV_Substitute2
score -1
-
AI_CV_Substitute2:
if_random_less_than 100, AI_CV_Substitute3
score -1
-
AI_CV_Substitute3:
if_random_less_than 100, AI_CV_Substitute4
score -1
-
AI_CV_Substitute4:
if_target_faster AI_CV_Substitute_End
get_last_used_bank_move AI_TARGET
@@ -1682,11 +1574,9 @@ AI_CV_Substitute6:
AI_CV_Substitute7:
if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_Substitute_End
-
AI_CV_Substitute8:
if_random_less_than 100, AI_CV_Substitute_End
score +1
-
AI_CV_Substitute_End:
end
@@ -1699,10 +1589,8 @@ AI_CV_Recharge:
AI_CV_Recharge2:
if_hp_less_than AI_USER, 60, AI_CV_Recharge_End
-
AI_CV_Recharge_ScoreDown1:
score -1
-
AI_CV_Recharge_End:
end
@@ -1717,7 +1605,6 @@ AI_CV_Disable:
AI_CV_Disable2:
if_random_less_than 100, AI_CV_Disable_End
score -1
-
AI_CV_Disable_End:
end
@@ -1728,12 +1615,10 @@ AI_CV_Counter:
if_hp_more_than AI_USER, 30, AI_CV_Counter2
if_random_less_than 10, AI_CV_Counter2
score -1
-
AI_CV_Counter2:
if_hp_more_than AI_USER, 50, AI_CV_Counter3
if_random_less_than 100, AI_CV_Counter3
score -1
-
AI_CV_Counter3:
if_has_move AI_USER, MOVE_MIRROR_COAT, AI_CV_Counter7
get_last_used_bank_move AI_TARGET
@@ -1742,7 +1627,6 @@ AI_CV_Counter3:
if_target_not_taunted AI_CV_Counter4
if_random_less_than 100, AI_CV_Counter4
score +1
-
AI_CV_Counter4:
get_last_used_bank_move AI_TARGET
get_move_type_from_result
@@ -1755,24 +1639,20 @@ AI_CV_Counter5:
if_target_not_taunted AI_CV_Counter6
if_random_less_than 100, AI_CV_Counter6
score +1
-
AI_CV_Counter6:
get_target_type1
if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End
get_target_type2
if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End
if_random_less_than 50, AI_CV_Counter_End
-
AI_CV_Counter7:
if_random_less_than 100, AI_CV_Counter8
score +4
-
AI_CV_Counter8:
end
AI_CV_Counter_ScoreDown1:
score -1
-
AI_CV_Counter_End:
end
@@ -1794,7 +1674,6 @@ AI_CV_Encore:
get_last_used_bank_move AI_TARGET
get_move_effect_from_result
if_not_in_bytes AI_CV_Encore_EncouragedMovesToEncore, AI_CV_Encore_ScoreDown2
-
AI_CV_Encore2:
if_random_less_than 30, AI_CV_Encore_End
score +3
@@ -1802,7 +1681,6 @@ AI_CV_Encore2:
AI_CV_Encore_ScoreDown2:
score -2
-
AI_CV_Encore_End:
end
@@ -1885,7 +1763,6 @@ AI_CV_PainSplit2:
AI_CV_PainSplit_ScoreDown1:
score -1
-
AI_CV_PainSplit_End:
end
@@ -1896,7 +1773,6 @@ AI_CV_Snore:
AI_CV_LockOn:
if_random_less_than 128, AI_CV_LockOn_End
score +2
-
AI_CV_LockOn_End:
end
@@ -1911,17 +1787,14 @@ AI_CV_DestinyBond:
if_hp_more_than AI_USER, 70, AI_CV_DestinyBond_End
if_random_less_than 128, AI_CV_DestinyBond2
score +1
-
AI_CV_DestinyBond2:
if_hp_more_than AI_USER, 50, AI_CV_DestinyBond_End
if_random_less_than 128, AI_CV_DestinyBond3
score +1
-
AI_CV_DestinyBond3:
if_hp_more_than AI_USER, 30, AI_CV_DestinyBond_End
if_random_less_than 100, AI_CV_DestinyBond_End
score +2
-
AI_CV_DestinyBond_End:
end
@@ -1939,7 +1812,6 @@ AI_CV_Flail2:
AI_CV_Flail_ScoreUp1:
score +1
-
AI_CV_Flail3:
if_random_less_than 100, AI_CV_Flail_End
score +1
@@ -1947,7 +1819,6 @@ AI_CV_Flail3:
AI_CV_Flail_ScoreDown1:
score -1
-
AI_CV_Flail_End:
end
@@ -1955,7 +1826,6 @@ AI_CV_HealBell:
if_status AI_TARGET, STATUS1_ANY, AI_CV_HealBell_End
if_status_in_party AI_TARGET, STATUS1_ANY, AI_CV_HealBell_End
score -5
-
AI_CV_HealBell_End:
end
@@ -1968,7 +1838,6 @@ AI_CV_Thief:
AI_CV_Thief_ScoreDown2:
score -2
-
AI_CV_Thief_End:
end
@@ -1990,12 +1859,10 @@ AI_CV_Curse:
if_stat_level_more_than AI_USER, STAT_DEF, 9, AI_CV_Curse_End
if_random_less_than 128, AI_CV_Curse2
score +1
-
AI_CV_Curse2:
if_stat_level_more_than AI_USER, STAT_DEF, 7, AI_CV_Curse_End
if_random_less_than 128, AI_CV_Curse3
score +1
-
AI_CV_Curse3:
if_stat_level_more_than AI_USER, STAT_DEF, DEFAULT_STAT_STAGE, AI_CV_Curse_End
if_random_less_than 128, AI_CV_Curse_End
@@ -2005,7 +1872,6 @@ AI_CV_Curse3:
AI_CV_Curse4:
if_hp_more_than AI_USER, 80, AI_CV_Curse_End
score -1
-
AI_CV_Curse_End:
end
@@ -2033,11 +1899,9 @@ AI_CV_Protect:
AI_CV_Protect_ScoreUp2:
score +2
-
AI_CV_Protect2:
if_random_less_than 128, AI_CV_Protect4
score -1
-
AI_CV_Protect4:
get_protect_count AI_USER
if_equal 0, AI_CV_Protect_End
@@ -2050,10 +1914,8 @@ AI_CV_Protect3:
get_last_used_bank_move AI_TARGET
get_move_effect_from_result
if_not_equal EFFECT_LOCK_ON, AI_CV_Protect_End
-
AI_CV_Protect_ScoreDown2:
score -2
-
AI_CV_Protect_End:
end
@@ -2078,18 +1940,15 @@ AI_CV_Foresight:
AI_CV_Foresight2:
if_random_less_than 80, AI_CV_Foresight_End
-
AI_CV_Foresight3:
if_random_less_than 80, AI_CV_Foresight_End
score +2
-
AI_CV_Foresight_End:
end
AI_CV_Endure:
if_hp_less_than AI_USER, 4, AI_CV_Endure2
if_hp_less_than AI_USER, 35, AI_CV_Endure3
-
AI_CV_Endure2:
score -1
goto AI_CV_Endure_End
@@ -2097,7 +1956,6 @@ AI_CV_Endure2:
AI_CV_Endure3:
if_random_less_than 70, AI_CV_Endure_End
score +1
-
AI_CV_Endure_End:
end
@@ -2116,7 +1974,6 @@ AI_CV_BatonPass2:
AI_CV_BatonPass3:
if_hp_more_than AI_USER, 70, AI_CV_BatonPass_End
-
AI_CV_BatonPass4:
if_random_less_than 80, AI_CV_BatonPass_End
score +2
@@ -2137,10 +1994,8 @@ AI_CV_BatonPass7:
AI_CV_BatonPass8:
if_hp_less_than AI_USER, 70, AI_CV_BatonPass_End
-
AI_CV_BatonPass_ScoreDown2:
score -2
-
AI_CV_BatonPass_End:
end
@@ -2160,7 +2015,6 @@ AI_CV_Pursuit:
AI_CV_Pursuit2:
if_random_less_than 128, AI_CV_Pursuit_End
score +1
-
AI_CV_Pursuit_End:
end
@@ -2168,7 +2022,6 @@ AI_CV_RainDance:
if_user_faster AI_CV_RainDance2
get_ability AI_USER
if_equal ABILITY_SWIFT_SWIM, AI_CV_RainDance3
-
AI_CV_RainDance2:
if_hp_less_than AI_USER, 40, AI_CV_RainDance_ScoreDown1
get_weather
@@ -2185,7 +2038,6 @@ AI_CV_RainDance3:
AI_CV_RainDance_ScoreDown1:
score -1
-
AI_CV_RainDance_End:
end
@@ -2203,7 +2055,6 @@ AI_CV_SunnyDay2:
AI_CV_SunnyDay_ScoreDown1:
score -1
-
AI_CV_SunnyDay_End:
end
@@ -2213,7 +2064,6 @@ AI_CV_BellyDrum:
AI_CV_BellyDrum_ScoreDown2:
score -2
-
AI_CV_BellyDrum_End:
end
@@ -2236,14 +2086,12 @@ AI_CV_PsychUp2:
AI_CV_PsychUp_ScoreUp1:
score +1
-
AI_CV_PsychUp3:
score +1
end
AI_CV_PsychUp_ScoreDown2:
score -2
-
AI_CV_PsychUp_End:
end
@@ -2254,12 +2102,10 @@ AI_CV_MirrorCoat:
if_hp_more_than AI_USER, 30, AI_CV_MirrorCoat2
if_random_less_than 10, AI_CV_MirrorCoat2
score -1
-
AI_CV_MirrorCoat2:
if_hp_more_than AI_USER, 50, AI_CV_MirrorCoat3
if_random_less_than 100, AI_CV_MirrorCoat3
score -1
-
AI_CV_MirrorCoat3:
if_has_move AI_USER, MOVE_COUNTER, AI_CV_MirrorCoat_ScoreUp4
get_last_used_bank_move AI_TARGET
@@ -2268,7 +2114,6 @@ AI_CV_MirrorCoat3:
if_target_not_taunted AI_CV_MirrorCoat4
if_random_less_than 100, AI_CV_MirrorCoat4
score +1
-
AI_CV_MirrorCoat4:
get_last_used_bank_move AI_TARGET
get_move_type_from_result
@@ -2281,24 +2126,20 @@ AI_CV_MirrorCoat5:
if_target_not_taunted AI_CV_MirrorCoat6
if_random_less_than 100, AI_CV_MirrorCoat6
score +1
-
AI_CV_MirrorCoat6:
get_target_type1
if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End
get_target_type2
if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End
if_random_less_than 50, AI_CV_MirrorCoat_End
-
AI_CV_MirrorCoat_ScoreUp4:
if_random_less_than 100, AI_CV_MirrorCoat_ScoreUp4_End
score +4
-
AI_CV_MirrorCoat_ScoreUp4_End:
end
AI_CV_MirrorCoat_ScoreDown1:
score -1
-
AI_CV_MirrorCoat_End:
end
@@ -2323,7 +2164,6 @@ AI_CV_ChargeUpMove:
AI_CV_ChargeUpMove_ScoreDown2:
score -2
-
AI_CV_ChargeUpMove_End:
end
@@ -2360,7 +2200,6 @@ AI_CV_SemiInvulnerable_CheckIceType:
if_equal TYPE_ICE, AI_CV_SemiInvulnerable_TryEncourage
get_user_type2
if_equal TYPE_ICE, AI_CV_SemiInvulnerable_TryEncourage
-
AI_CV_SemiInvulnerable5:
if_target_faster AI_CV_SemiInvulnerable_End
get_last_used_bank_move AI_TARGET
@@ -2371,7 +2210,6 @@ AI_CV_SemiInvulnerable5:
AI_CV_SemiInvulnerable_TryEncourage:
if_random_less_than 80, AI_CV_SemiInvulnerable_End
score +1
-
AI_CV_SemiInvulnerable_End:
end
@@ -2390,7 +2228,6 @@ AI_CV_SpitUp:
if_less_than 2, AI_CV_SpitUp_End
if_random_less_than 80, AI_CV_SpitUp_End
score +2
-
AI_CV_SpitUp_End:
end
@@ -2408,7 +2245,6 @@ AI_CV_Hail2:
AI_CV_Hail_ScoreDown1:
score -1
-
AI_CV_Hail_End:
end
@@ -2442,10 +2278,8 @@ AI_CV_FocusPunch2:
AI_CV_FocusPunch3:
if_random_less_than 100, AI_CV_FocusPunch_End
if_status2 AI_USER, STATUS2_SUBSTITUTE, Score_Plus5
-
AI_CV_FocusPunch_ScoreUp1:
score +1
-
AI_CV_FocusPunch_End:
end
@@ -2455,7 +2289,6 @@ AI_CV_SmellingSalt:
AI_CV_SmellingSalt_ScoreUp1:
score +1
-
AI_CV_SmellingSalt_End:
end
@@ -2463,7 +2296,6 @@ AI_CV_Trick:
get_hold_effect AI_USER
if_in_bytes AI_CV_Trick_EffectsToEncourage2, AI_CV_Trick3
if_in_bytes AI_CV_Trick_EffectsToEncourage, AI_CV_Trick4
-
AI_CV_Trick2:
score -3
goto AI_CV_Trick_End
@@ -2479,7 +2311,6 @@ AI_CV_Trick4:
if_in_bytes AI_CV_Trick_EffectsToEncourage, AI_CV_Trick2
if_random_less_than 50, AI_CV_Trick_End
score +2
-
AI_CV_Trick_End:
end
@@ -2502,7 +2333,6 @@ AI_CV_ChangeSelfAbility:
if_in_bytes AI_CV_ChangeSelfAbility_AbilitiesToEncourage, AI_CV_ChangeSelfAbility2
get_ability AI_TARGET
if_in_bytes AI_CV_ChangeSelfAbility_AbilitiesToEncourage, AI_CV_ChangeSelfAbility3
-
AI_CV_ChangeSelfAbility2:
score -1
goto AI_CV_ChangeSelfAbility_End
@@ -2510,7 +2340,6 @@ AI_CV_ChangeSelfAbility2:
AI_CV_ChangeSelfAbility3:
if_random_less_than 50, AI_CV_ChangeSelfAbility_End
score +2
-
AI_CV_ChangeSelfAbility_End:
end
@@ -2543,10 +2372,8 @@ AI_CV_Superpower:
AI_CV_Superpower2:
if_hp_less_than AI_USER, 60, AI_CV_Superpower_End
-
AI_CV_Superpower_ScoreDown1:
score -1
-
AI_CV_Superpower_End:
end
@@ -2554,21 +2381,18 @@ AI_CV_MagicCoat:
if_hp_more_than AI_TARGET, 30, AI_CV_MagicCoat2
if_random_less_than 100, AI_CV_MagicCoat2
score -1
-
AI_CV_MagicCoat2:
is_first_turn_for AI_USER
- if_equal 0, AI_CV_MagicCoat4
+ if_equal FALSE, AI_CV_MagicCoat4
if_random_less_than 150, AI_CV_MagicCoat_End
score +1
goto AI_CV_MagicCoat_End
AI_CV_MagicCoat3:
if_random_less_than 50, AI_CV_MagicCoat_End
-
AI_CV_MagicCoat4:
if_random_less_than 30, AI_CV_MagicCoat_End
score -1
-
AI_CV_MagicCoat_End:
end
@@ -2581,7 +2405,6 @@ AI_CV_Recycle:
AI_CV_Recycle_ScoreDown2:
score -2
-
AI_CV_Recycle_End:
end
@@ -2601,7 +2424,6 @@ AI_CV_Revenge:
AI_CV_Revenge_ScoreDown2:
score -2
-
AI_CV_Revenge_End:
end
@@ -2611,7 +2433,6 @@ AI_CV_BrickBreak:
AI_CV_BrickBreak_ScoreUp1:
score +1
-
AI_CV_BrickBreak_End:
end
@@ -2621,7 +2442,6 @@ AI_CV_KnockOff:
if_more_than 0, AI_CV_KnockOff_End
if_random_less_than 180, AI_CV_KnockOff_End
score +1
-
AI_CV_KnockOff_End:
end
@@ -2639,7 +2459,6 @@ AI_CV_Endeavor2:
AI_CV_Endeavor_ScoreDown1:
score -1
-
AI_CV_Endeavor_End:
end
@@ -2652,10 +2471,8 @@ AI_CV_Eruption:
AI_CV_Eruption2:
if_hp_more_than AI_TARGET, 70, AI_CV_Eruption_End
-
AI_CV_Eruption_ScoreDown1:
score -1
-
AI_CV_Eruption_End:
end
@@ -2664,7 +2481,6 @@ AI_CV_Imprison:
if_more_than 0, AI_CV_Imprison_End
if_random_less_than 100, AI_CV_Imprison_End
score +2
-
AI_CV_Imprison_End:
end
@@ -2674,13 +2490,12 @@ AI_CV_Refresh:
AI_CV_Refresh_ScoreDown1:
score -1
-
AI_CV_Refresh_End:
end
AI_CV_Snatch:
is_first_turn_for AI_USER
- if_equal 1, AI_CV_Snatch3
+ if_equal TRUE, AI_CV_Snatch3
if_random_less_than 30, AI_CV_Snatch_End
if_target_faster AI_CV_Snatch2
if_hp_not_equal AI_USER, 100, AI_CV_Snatch5
@@ -2707,7 +2522,6 @@ AI_CV_Snatch4:
AI_CV_Snatch5:
if_random_less_than 30, AI_CV_Snatch_End
score -2
-
AI_CV_Snatch_End:
end
@@ -2725,7 +2539,6 @@ AI_CV_MudSport2:
AI_CV_MudSport_ScoreDown1:
score -1
-
AI_CV_MudSport_End:
end
@@ -2738,10 +2551,8 @@ AI_CV_Overheat:
AI_CV_Overheat2:
if_hp_more_than AI_USER, 80, AI_CV_Overheat_End
-
AI_CV_Overheat_ScoreDown1:
score -1
-
AI_CV_Overheat_End:
end
@@ -2759,7 +2570,6 @@ AI_CV_WaterSport2:
AI_CV_WaterSport_ScoreDown1:
score -1
-
AI_CV_WaterSport_End:
end
@@ -2773,7 +2583,6 @@ AI_CV_DragonDance:
AI_CV_DragonDance2:
if_random_less_than 128, AI_CV_DragonDance_End
score +1
-
AI_CV_DragonDance_End:
end
@@ -2794,10 +2603,8 @@ AI_TryToFaint_TryToEncourageQuickAttack:
if_effect EFFECT_EXPLOSION, AI_TryToFaint_End
if_not_effect EFFECT_QUICK_ATTACK, AI_TryToFaint_ScoreUp4
score +2
-
AI_TryToFaint_ScoreUp4:
score +4
-
AI_TryToFaint_End:
end
@@ -2809,7 +2616,6 @@ AI_SetupFirstTurn:
if_not_in_bytes AI_SetupFirstTurn_SetupEffectsToEncourage, AI_SetupFirstTurn_End
if_random_less_than 80, AI_SetupFirstTurn_End
score +2
-
AI_SetupFirstTurn_End:
end
@@ -2871,14 +2677,15 @@ AI_SetupFirstTurn_SetupEffectsToEncourage:
.byte EFFECT_CAMOUFLAGE
.byte -1
-AI_PreferStrongestMove:
+@ ~60% chance to prefer moves that do 0 or 1 damage, or are in sIgnoredPowerfulMoveEffects
+@ Oddly this group includes moves like Explosion and Eruption, so the AI strategy isn't very coherent
+AI_PreferPowerExtremes:
if_target_is_ally AI_Ret
get_how_powerful_move_is
- if_not_equal 0, AI_PreferStrongestMove_End
- if_random_less_than 100, AI_PreferStrongestMove_End
+ if_not_equal MOVE_POWER_OTHER, AI_PreferPowerExtremes_End
+ if_random_less_than 100, AI_PreferPowerExtremes_End
score +2
-
-AI_PreferStrongestMove_End:
+AI_PreferPowerExtremes_End:
end
AI_Risky:
@@ -2887,7 +2694,6 @@ AI_Risky:
if_not_in_bytes AI_Risky_EffectsToEncourage, AI_Risky_End
if_random_less_than 128, AI_Risky_End
score +2
-
AI_Risky_End:
end
@@ -2918,10 +2724,9 @@ AI_PreferBatonPass:
count_usable_party_mons AI_USER
if_equal 0, AI_PreferBatonPassEnd
get_how_powerful_move_is
- if_not_equal 0, AI_PreferBatonPassEnd
+ if_not_equal MOVE_POWER_OTHER, AI_PreferBatonPassEnd
if_has_move_with_effect AI_USER, EFFECT_BATON_PASS, AI_PreferBatonPass_GoForBatonPass
if_random_less_than 80, AI_Risky_End
-
AI_PreferBatonPass_GoForBatonPass:
if_move MOVE_SWORDS_DANCE, AI_PreferBatonPass2
if_move MOVE_DRAGON_DANCE, AI_PreferBatonPass2
@@ -2930,7 +2735,6 @@ AI_PreferBatonPass_GoForBatonPass:
if_move MOVE_BATON_PASS, AI_PreferBatonPass_EncourageIfHighStats
if_random_less_than 20, AI_Risky_End
score +3
-
AI_PreferBatonPass2:
get_turn_count
if_equal 0, Score_Plus5
@@ -2977,7 +2781,7 @@ AI_DoubleBattle:
AI_DoubleBattlePartnerHasHelpingHand:
get_how_powerful_move_is
- if_not_equal 0, Score_Plus1
+ if_not_equal MOVE_POWER_OTHER, Score_Plus1
end
AI_DoubleBattleCheckUserStatus:
@@ -2986,7 +2790,7 @@ AI_DoubleBattleCheckUserStatus:
AI_DoubleBattleCheckUserStatus2:
get_how_powerful_move_is
- if_equal MOVE_POWER_DISCOURAGED, Score_Minus5
+ if_equal MOVE_POWER_OTHER, Score_Minus5
score +1
if_equal MOVE_MOST_POWERFUL, Score_Plus2
end
@@ -3013,7 +2817,6 @@ AI_DoubleBattleElectricMove:
score -2
if_no_type AI_TARGET_PARTNER, TYPE_GROUND, AI_DoubleBattleElectricMoveEnd
score -8
-
AI_DoubleBattleElectricMoveEnd:
end
@@ -3026,10 +2829,9 @@ AI_DoubleBattleFireMove2:
AI_TryOnAlly:
get_how_powerful_move_is
- if_equal 0, AI_TryStatusMoveOnAlly
+ if_equal MOVE_POWER_OTHER, AI_TryStatusMoveOnAlly
get_curr_move_type
if_equal TYPE_FIRE, AI_TryFireMoveOnAlly
-
AI_DiscourageOnAlly:
goto Score_Minus30
@@ -3096,7 +2898,6 @@ AI_TrySwaggerOnAlly:
AI_TrySwaggerOnAlly2:
if_stat_level_more_than AI_TARGET, STAT_ATK, 7, AI_TrySwaggerOnAlly_End
score +3
-
AI_TrySwaggerOnAlly_End:
end
@@ -3125,7 +2926,6 @@ AI_HPAware_UserHasMediumHP:
AI_HPAware_TryToDiscourage:
if_random_less_than 50, AI_HPAware_ConsiderTarget
score -2
-
AI_HPAware_ConsiderTarget:
if_hp_more_than AI_TARGET, 70, AI_HPAware_TargetHasHighHP
if_hp_more_than AI_TARGET, 30, AI_HPAware_TargetHasMediumHP
@@ -3146,7 +2946,6 @@ AI_HPAware_TargetHasMediumHP:
AI_HPAware_TargetTryToDiscourage:
if_random_less_than 50, AI_HPAware_End
score -2
-
AI_HPAware_End:
end
@@ -3368,15 +3167,18 @@ AI_HPAware_DiscouragedEffectsWhenTargetLowHP: @ 82DE2B1
.byte EFFECT_DRAGON_DANCE
.byte -1
-AI_Unknown:
+@ Given the AI_TryOnAlly at the beginning it's possible that this was the start of a more
+@ comprehensive double battle AI script
+AI_TrySunnyDayStart:
if_target_is_ally AI_TryOnAlly
- if_not_effect EFFECT_SUNNY_DAY, AI_Unknown_End
- if_equal 0, AI_Unknown_End
+ if_not_effect EFFECT_SUNNY_DAY, AI_TrySunnyDayStart_End
+.ifndef BUGFIX @ funcResult has not been set in this script yet, below call is nonsense
+ if_equal FALSE, AI_TrySunnyDayStart_End
+.endif
is_first_turn_for AI_USER
- if_equal 0, AI_Unknown_End
+ if_equal FALSE, AI_TrySunnyDayStart_End
score +5
-
-AI_Unknown_End: @ 82DE308
+AI_TrySunnyDayStart_End: @ 82DE308
end
AI_Roaming:
@@ -3388,7 +3190,6 @@ AI_Roaming:
if_equal ABILITY_LEVITATE, AI_Roaming_Flee
get_ability AI_TARGET
if_equal ABILITY_ARENA_TRAP, AI_Roaming_End
-
AI_Roaming_Flee: @ 82DE335
flee
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index b15c29cfe..1577765cd 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -17,243 +17,221 @@
.align 2
gBattleScriptsForMoveEffects:: @ 82D86A8
- .4byte BattleScript_EffectHit
- .4byte BattleScript_EffectSleep
- .4byte BattleScript_EffectPoisonHit
- .4byte BattleScript_EffectAbsorb
- .4byte BattleScript_EffectBurnHit
- .4byte BattleScript_EffectFreezeHit
- .4byte BattleScript_EffectParalyzeHit
- .4byte BattleScript_EffectExplosion
- .4byte BattleScript_EffectDreamEater
- .4byte BattleScript_EffectMirrorMove
- .4byte BattleScript_EffectAttackUp
- .4byte BattleScript_EffectDefenseUp
- .4byte BattleScript_EffectSpeedUp
- .4byte BattleScript_EffectSpecialAttackUp
- .4byte BattleScript_EffectSpecialDefenseUp
- .4byte BattleScript_EffectAccuracyUp
- .4byte BattleScript_EffectEvasionUp
- .4byte BattleScript_EffectAlwaysHit
- .4byte BattleScript_EffectAttackDown
- .4byte BattleScript_EffectDefenseDown
- .4byte BattleScript_EffectSpeedDown
- .4byte BattleScript_EffectSpecialAttackDown
- .4byte BattleScript_EffectSpecialDefenseDown
- .4byte BattleScript_EffectAccuracyDown
- .4byte BattleScript_EffectEvasionDown
- .4byte BattleScript_EffectHaze
- .4byte BattleScript_EffectBide
- .4byte BattleScript_EffectRampage
- .4byte BattleScript_EffectRoar
- .4byte BattleScript_EffectMultiHit
- .4byte BattleScript_EffectConversion
- .4byte BattleScript_EffectFlinchHit
- .4byte BattleScript_EffectRestoreHp
- .4byte BattleScript_EffectToxic
- .4byte BattleScript_EffectPayDay
- .4byte BattleScript_EffectLightScreen
- .4byte BattleScript_EffectTriAttack
- .4byte BattleScript_EffectRest
- .4byte BattleScript_EffectOHKO
- .4byte BattleScript_EffectRazorWind
- .4byte BattleScript_EffectSuperFang
- .4byte BattleScript_EffectDragonRage
- .4byte BattleScript_EffectTrap
- .4byte BattleScript_EffectHighCritical
- .4byte BattleScript_EffectDoubleHit
- .4byte BattleScript_EffectRecoilIfMiss
- .4byte BattleScript_EffectMist
- .4byte BattleScript_EffectFocusEnergy
- .4byte BattleScript_EffectRecoil
- .4byte BattleScript_EffectConfuse
- .4byte BattleScript_EffectAttackUp2
- .4byte BattleScript_EffectDefenseUp2
- .4byte BattleScript_EffectSpeedUp2
- .4byte BattleScript_EffectSpecialAttackUp2
- .4byte BattleScript_EffectSpecialDefenseUp2
- .4byte BattleScript_EffectAccuracyUp2
- .4byte BattleScript_EffectEvasionUp2
- .4byte BattleScript_EffectTransform
- .4byte BattleScript_EffectAttackDown2
- .4byte BattleScript_EffectDefenseDown2
- .4byte BattleScript_EffectSpeedDown2
- .4byte BattleScript_EffectSpecialAttackDown2
- .4byte BattleScript_EffectSpecialDefenseDown2
- .4byte BattleScript_EffectAccuracyDown2
- .4byte BattleScript_EffectEvasionDown2
- .4byte BattleScript_EffectReflect
- .4byte BattleScript_EffectPoison
- .4byte BattleScript_EffectParalyze
- .4byte BattleScript_EffectAttackDownHit
- .4byte BattleScript_EffectDefenseDownHit
- .4byte BattleScript_EffectSpeedDownHit
- .4byte BattleScript_EffectSpecialAttackDownHit
- .4byte BattleScript_EffectSpecialDefenseDownHit
- .4byte BattleScript_EffectAccuracyDownHit
- .4byte BattleScript_EffectEvasionDownHit
- .4byte BattleScript_EffectSkyAttack
- .4byte BattleScript_EffectConfuseHit
- .4byte BattleScript_EffectTwineedle
- .4byte BattleScript_EffectVitalThrow
- .4byte BattleScript_EffectSubstitute
- .4byte BattleScript_EffectRecharge
- .4byte BattleScript_EffectRage
- .4byte BattleScript_EffectMimic
- .4byte BattleScript_EffectMetronome
- .4byte BattleScript_EffectLeechSeed
- .4byte BattleScript_EffectSplash
- .4byte BattleScript_EffectDisable
- .4byte BattleScript_EffectLevelDamage
- .4byte BattleScript_EffectPsywave
- .4byte BattleScript_EffectCounter
- .4byte BattleScript_EffectEncore
- .4byte BattleScript_EffectPainSplit
- .4byte BattleScript_EffectSnore
- .4byte BattleScript_EffectConversion2
- .4byte BattleScript_EffectLockOn
- .4byte BattleScript_EffectSketch
- .4byte BattleScript_EffectUnused60//Thaw
- .4byte BattleScript_EffectSleepTalk
- .4byte BattleScript_EffectDestinyBond
- .4byte BattleScript_EffectFlail
- .4byte BattleScript_EffectSpite
- .4byte BattleScript_EffectFalseSwipe
- .4byte BattleScript_EffectHealBell
- .4byte BattleScript_EffectQuickAttack
- .4byte BattleScript_EffectTripleKick
- .4byte BattleScript_EffectThief
- .4byte BattleScript_EffectMeanLook
- .4byte BattleScript_EffectNightmare
- .4byte BattleScript_EffectMinimize
- .4byte BattleScript_EffectCurse
- .4byte BattleScript_EffectUnused6e
- .4byte BattleScript_EffectProtect
- .4byte BattleScript_EffectSpikes
- .4byte BattleScript_EffectForesight
- .4byte BattleScript_EffectPerishSong
- .4byte BattleScript_EffectSandstorm
- .4byte BattleScript_EffectEndure
- .4byte BattleScript_EffectRollout
- .4byte BattleScript_EffectSwagger
- .4byte BattleScript_EffectFuryCutter
- .4byte BattleScript_EffectAttract
- .4byte BattleScript_EffectReturn
- .4byte BattleScript_EffectPresent
- .4byte BattleScript_EffectFrustration
- .4byte BattleScript_EffectSafeguard
- .4byte BattleScript_EffectThawHit
- .4byte BattleScript_EffectMagnitude
- .4byte BattleScript_EffectBatonPass
- .4byte BattleScript_EffectPursuit
- .4byte BattleScript_EffectRapidSpin
- .4byte BattleScript_EffectSonicboom
- .4byte BattleScript_EffectUnused83
- .4byte BattleScript_EffectMorningSun
- .4byte BattleScript_EffectSynthesis
- .4byte BattleScript_EffectMoonlight
- .4byte BattleScript_EffectHiddenPower
- .4byte BattleScript_EffectRainDance
- .4byte BattleScript_EffectSunnyDay
- .4byte BattleScript_EffectDefenseUpHit
- .4byte BattleScript_EffectAttackUpHit
- .4byte BattleScript_EffectAllStatsUpHit
- .4byte BattleScript_EffectUnused8d
- .4byte BattleScript_EffectBellyDrum
- .4byte BattleScript_EffectPsychUp
- .4byte BattleScript_EffectMirrorCoat
- .4byte BattleScript_EffectSkullBash
- .4byte BattleScript_EffectTwister
- .4byte BattleScript_EffectEarthquake
- .4byte BattleScript_EffectFutureSight
- .4byte BattleScript_EffectGust
- .4byte BattleScript_EffectStomp
- .4byte BattleScript_EffectSolarbeam
- .4byte BattleScript_EffectThunder
- .4byte BattleScript_EffectTeleport
- .4byte BattleScript_EffectBeatUp
- .4byte BattleScript_EffectSemiInvulnerable
- .4byte BattleScript_EffectDefenseCurl
- .4byte BattleScript_EffectSoftboiled
- .4byte BattleScript_EffectFakeOut
- .4byte BattleScript_EffectUproar
- .4byte BattleScript_EffectStockpile
- .4byte BattleScript_EffectSpitUp
- .4byte BattleScript_EffectSwallow
- .4byte BattleScript_EffectUnusedA3
- .4byte BattleScript_EffectHail
- .4byte BattleScript_EffectTorment
- .4byte BattleScript_EffectFlatter
- .4byte BattleScript_EffectWillOWisp
- .4byte BattleScript_EffectMemento
- .4byte BattleScript_EffectFacade
- .4byte BattleScript_EffectFocusPunch
- .4byte BattleScript_EffectSmellingsalt
- .4byte BattleScript_EffectFollowMe
- .4byte BattleScript_EffectNaturePower
- .4byte BattleScript_EffectCharge
- .4byte BattleScript_EffectTaunt
- .4byte BattleScript_EffectHelpingHand
- .4byte BattleScript_EffectTrick
- .4byte BattleScript_EffectRolePlay
- .4byte BattleScript_EffectWish
- .4byte BattleScript_EffectAssist
- .4byte BattleScript_EffectIngrain
- .4byte BattleScript_EffectSuperpower
- .4byte BattleScript_EffectMagicCoat
- .4byte BattleScript_EffectRecycle
- .4byte BattleScript_EffectRevenge
- .4byte BattleScript_EffectBrickBreak
- .4byte BattleScript_EffectYawn
- .4byte BattleScript_EffectKnockOff
- .4byte BattleScript_EffectEndeavor
- .4byte BattleScript_EffectEruption
- .4byte BattleScript_EffectSkillSwap
- .4byte BattleScript_EffectImprison
- .4byte BattleScript_EffectRefresh
- .4byte BattleScript_EffectGrudge
- .4byte BattleScript_EffectSnatch
- .4byte BattleScript_EffectLowKick
- .4byte BattleScript_EffectSecretPower
- .4byte BattleScript_EffectDoubleEdge
- .4byte BattleScript_EffectTeeterDance
- .4byte BattleScript_EffectBlazeKick
- .4byte BattleScript_EffectMudSport
- .4byte BattleScript_EffectPoisonFang
- .4byte BattleScript_EffectWeatherBall
- .4byte BattleScript_EffectOverheat
- .4byte BattleScript_EffectTickle
- .4byte BattleScript_EffectCosmicPower
- .4byte BattleScript_EffectSkyUppercut
- .4byte BattleScript_EffectBulkUp
- .4byte BattleScript_EffectPoisonTail
- .4byte BattleScript_EffectWaterSport
- .4byte BattleScript_EffectCalmMind
- .4byte BattleScript_EffectDragonDance
- .4byte BattleScript_EffectCamouflage
-
-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::
+ .4byte BattleScript_EffectHit @ EFFECT_HIT
+ .4byte BattleScript_EffectSleep @ EFFECT_SLEEP
+ .4byte BattleScript_EffectPoisonHit @ EFFECT_POISON_HIT
+ .4byte BattleScript_EffectAbsorb @ EFFECT_ABSORB
+ .4byte BattleScript_EffectBurnHit @ EFFECT_BURN_HIT
+ .4byte BattleScript_EffectFreezeHit @ EFFECT_FREEZE_HIT
+ .4byte BattleScript_EffectParalyzeHit @ EFFECT_PARALYZE_HIT
+ .4byte BattleScript_EffectExplosion @ EFFECT_EXPLOSION
+ .4byte BattleScript_EffectDreamEater @ EFFECT_DREAM_EATER
+ .4byte BattleScript_EffectMirrorMove @ EFFECT_MIRROR_MOVE
+ .4byte BattleScript_EffectAttackUp @ EFFECT_ATTACK_UP
+ .4byte BattleScript_EffectDefenseUp @ EFFECT_DEFENSE_UP
+ .4byte BattleScript_EffectHit @ EFFECT_SPEED_UP
+ .4byte BattleScript_EffectSpecialAttackUp @ EFFECT_SPECIAL_ATTACK_UP
+ .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_DEFENSE_UP
+ .4byte BattleScript_EffectHit @ EFFECT_ACCURACY_UP
+ .4byte BattleScript_EffectEvasionUp @ EFFECT_EVASION_UP
+ .4byte BattleScript_EffectHit @ EFFECT_ALWAYS_HIT
+ .4byte BattleScript_EffectAttackDown @ EFFECT_ATTACK_DOWN
+ .4byte BattleScript_EffectDefenseDown @ EFFECT_DEFENSE_DOWN
+ .4byte BattleScript_EffectSpeedDown @ EFFECT_SPEED_DOWN
+ .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_ATTACK_DOWN
+ .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_DEFENSE_DOWN
+ .4byte BattleScript_EffectAccuracyDown @ EFFECT_ACCURACY_DOWN
+ .4byte BattleScript_EffectEvasionDown @ EFFECT_EVASION_DOWN
+ .4byte BattleScript_EffectHaze @ EFFECT_HAZE
+ .4byte BattleScript_EffectBide @ EFFECT_BIDE
+ .4byte BattleScript_EffectRampage @ EFFECT_RAMPAGE
+ .4byte BattleScript_EffectRoar @ EFFECT_ROAR
+ .4byte BattleScript_EffectMultiHit @ EFFECT_MULTI_HIT
+ .4byte BattleScript_EffectConversion @ EFFECT_CONVERSION
+ .4byte BattleScript_EffectFlinchHit @ EFFECT_FLINCH_HIT
+ .4byte BattleScript_EffectRestoreHp @ EFFECT_RESTORE_HP
+ .4byte BattleScript_EffectToxic @ EFFECT_TOXIC
+ .4byte BattleScript_EffectPayDay @ EFFECT_PAY_DAY
+ .4byte BattleScript_EffectLightScreen @ EFFECT_LIGHT_SCREEN
+ .4byte BattleScript_EffectTriAttack @ EFFECT_TRI_ATTACK
+ .4byte BattleScript_EffectRest @ EFFECT_REST
+ .4byte BattleScript_EffectOHKO @ EFFECT_OHKO
+ .4byte BattleScript_EffectRazorWind @ EFFECT_RAZOR_WIND
+ .4byte BattleScript_EffectSuperFang @ EFFECT_SUPER_FANG
+ .4byte BattleScript_EffectDragonRage @ EFFECT_DRAGON_RAGE
+ .4byte BattleScript_EffectTrap @ EFFECT_TRAP
+ .4byte BattleScript_EffectHit @ EFFECT_HIGH_CRITICAL
+ .4byte BattleScript_EffectDoubleHit @ EFFECT_DOUBLE_HIT
+ .4byte BattleScript_EffectRecoilIfMiss @ EFFECT_RECOIL_IF_MISS
+ .4byte BattleScript_EffectMist @ EFFECT_MIST
+ .4byte BattleScript_EffectFocusEnergy @ EFFECT_FOCUS_ENERGY
+ .4byte BattleScript_EffectRecoil @ EFFECT_RECOIL
+ .4byte BattleScript_EffectConfuse @ EFFECT_CONFUSE
+ .4byte BattleScript_EffectAttackUp2 @ EFFECT_ATTACK_UP_2
+ .4byte BattleScript_EffectDefenseUp2 @ EFFECT_DEFENSE_UP_2
+ .4byte BattleScript_EffectSpeedUp2 @ EFFECT_SPEED_UP_2
+ .4byte BattleScript_EffectSpecialAttackUp2 @ EFFECT_SPECIAL_ATTACK_UP_2
+ .4byte BattleScript_EffectSpecialDefenseUp2 @ EFFECT_SPECIAL_DEFENSE_UP_2
+ .4byte BattleScript_EffectHit @ EFFECT_ACCURACY_UP_2
+ .4byte BattleScript_EffectHit @ EFFECT_EVASION_UP_2
+ .4byte BattleScript_EffectTransform @ EFFECT_TRANSFORM
+ .4byte BattleScript_EffectAttackDown2 @ EFFECT_ATTACK_DOWN_2
+ .4byte BattleScript_EffectDefenseDown2 @ EFFECT_DEFENSE_DOWN_2
+ .4byte BattleScript_EffectSpeedDown2 @ EFFECT_SPEED_DOWN_2
+ .4byte BattleScript_EffectHit @ EFFECT_SPECIAL_ATTACK_DOWN_2
+ .4byte BattleScript_EffectSpecialDefenseDown2 @ EFFECT_SPECIAL_DEFENSE_DOWN_2
+ .4byte BattleScript_EffectHit @ EFFECT_ACCURACY_DOWN_2
+ .4byte BattleScript_EffectHit @ EFFECT_EVASION_DOWN_2
+ .4byte BattleScript_EffectReflect @ EFFECT_REFLECT
+ .4byte BattleScript_EffectPoison @ EFFECT_POISON
+ .4byte BattleScript_EffectParalyze @ EFFECT_PARALYZE
+ .4byte BattleScript_EffectAttackDownHit @ EFFECT_ATTACK_DOWN_HIT
+ .4byte BattleScript_EffectDefenseDownHit @ EFFECT_DEFENSE_DOWN_HIT
+ .4byte BattleScript_EffectSpeedDownHit @ EFFECT_SPEED_DOWN_HIT
+ .4byte BattleScript_EffectSpecialAttackDownHit @ EFFECT_SPECIAL_ATTACK_DOWN_HIT
+ .4byte BattleScript_EffectSpecialDefenseDownHit @ EFFECT_SPECIAL_DEFENSE_DOWN_HIT
+ .4byte BattleScript_EffectAccuracyDownHit @ EFFECT_ACCURACY_DOWN_HIT
+ .4byte BattleScript_EffectHit @ EFFECT_EVASION_DOWN_HIT
+ .4byte BattleScript_EffectSkyAttack @ EFFECT_SKY_ATTACK
+ .4byte BattleScript_EffectConfuseHit @ EFFECT_CONFUSE_HIT
+ .4byte BattleScript_EffectTwineedle @ EFFECT_TWINEEDLE
+ .4byte BattleScript_EffectHit @ EFFECT_VITAL_THROW
+ .4byte BattleScript_EffectSubstitute @ EFFECT_SUBSTITUTE
+ .4byte BattleScript_EffectRecharge @ EFFECT_RECHARGE
+ .4byte BattleScript_EffectRage @ EFFECT_RAGE
+ .4byte BattleScript_EffectMimic @ EFFECT_MIMIC
+ .4byte BattleScript_EffectMetronome @ EFFECT_METRONOME
+ .4byte BattleScript_EffectLeechSeed @ EFFECT_LEECH_SEED
+ .4byte BattleScript_EffectSplash @ EFFECT_SPLASH
+ .4byte BattleScript_EffectDisable @ EFFECT_DISABLE
+ .4byte BattleScript_EffectLevelDamage @ EFFECT_LEVEL_DAMAGE
+ .4byte BattleScript_EffectPsywave @ EFFECT_PSYWAVE
+ .4byte BattleScript_EffectCounter @ EFFECT_COUNTER
+ .4byte BattleScript_EffectEncore @ EFFECT_ENCORE
+ .4byte BattleScript_EffectPainSplit @ EFFECT_PAIN_SPLIT
+ .4byte BattleScript_EffectSnore @ EFFECT_SNORE
+ .4byte BattleScript_EffectConversion2 @ EFFECT_CONVERSION_2
+ .4byte BattleScript_EffectLockOn @ EFFECT_LOCK_ON
+ .4byte BattleScript_EffectSketch @ EFFECT_SKETCH
+ .4byte BattleScript_EffectHit @ EFFECT_UNUSED_60
+ .4byte BattleScript_EffectSleepTalk @ EFFECT_SLEEP_TALK
+ .4byte BattleScript_EffectDestinyBond @ EFFECT_DESTINY_BOND
+ .4byte BattleScript_EffectFlail @ EFFECT_FLAIL
+ .4byte BattleScript_EffectSpite @ EFFECT_SPITE
+ .4byte BattleScript_EffectHit @ EFFECT_FALSE_SWIPE
+ .4byte BattleScript_EffectHealBell @ EFFECT_HEAL_BELL
+ .4byte BattleScript_EffectHit @ EFFECT_QUICK_ATTACK
+ .4byte BattleScript_EffectTripleKick @ EFFECT_TRIPLE_KICK
+ .4byte BattleScript_EffectThief @ EFFECT_THIEF
+ .4byte BattleScript_EffectMeanLook @ EFFECT_MEAN_LOOK
+ .4byte BattleScript_EffectNightmare @ EFFECT_NIGHTMARE
+ .4byte BattleScript_EffectMinimize @ EFFECT_MINIMIZE
+ .4byte BattleScript_EffectCurse @ EFFECT_CURSE
+ .4byte BattleScript_EffectHit @ EFFECT_UNUSED_6E
+ .4byte BattleScript_EffectProtect @ EFFECT_PROTECT
+ .4byte BattleScript_EffectSpikes @ EFFECT_SPIKES
+ .4byte BattleScript_EffectForesight @ EFFECT_FORESIGHT
+ .4byte BattleScript_EffectPerishSong @ EFFECT_PERISH_SONG
+ .4byte BattleScript_EffectSandstorm @ EFFECT_SANDSTORM
+ .4byte BattleScript_EffectEndure @ EFFECT_ENDURE
+ .4byte BattleScript_EffectRollout @ EFFECT_ROLLOUT
+ .4byte BattleScript_EffectSwagger @ EFFECT_SWAGGER
+ .4byte BattleScript_EffectFuryCutter @ EFFECT_FURY_CUTTER
+ .4byte BattleScript_EffectAttract @ EFFECT_ATTRACT
+ .4byte BattleScript_EffectReturn @ EFFECT_RETURN
+ .4byte BattleScript_EffectPresent @ EFFECT_PRESENT
+ .4byte BattleScript_EffectFrustration @ EFFECT_FRUSTRATION
+ .4byte BattleScript_EffectSafeguard @ EFFECT_SAFEGUARD
+ .4byte BattleScript_EffectThawHit @ EFFECT_THAW_HIT
+ .4byte BattleScript_EffectMagnitude @ EFFECT_MAGNITUDE
+ .4byte BattleScript_EffectBatonPass @ EFFECT_BATON_PASS
+ .4byte BattleScript_EffectHit @ EFFECT_PURSUIT
+ .4byte BattleScript_EffectRapidSpin @ EFFECT_RAPID_SPIN
+ .4byte BattleScript_EffectSonicboom @ EFFECT_SONICBOOM
+ .4byte BattleScript_EffectHit @ EFFECT_UNUSED_83
+ .4byte BattleScript_EffectMorningSun @ EFFECT_MORNING_SUN
+ .4byte BattleScript_EffectSynthesis @ EFFECT_SYNTHESIS
+ .4byte BattleScript_EffectMoonlight @ EFFECT_MOONLIGHT
+ .4byte BattleScript_EffectHiddenPower @ EFFECT_HIDDEN_POWER
+ .4byte BattleScript_EffectRainDance @ EFFECT_RAIN_DANCE
+ .4byte BattleScript_EffectSunnyDay @ EFFECT_SUNNY_DAY
+ .4byte BattleScript_EffectDefenseUpHit @ EFFECT_DEFENSE_UP_HIT
+ .4byte BattleScript_EffectAttackUpHit @ EFFECT_ATTACK_UP_HIT
+ .4byte BattleScript_EffectAllStatsUpHit @ EFFECT_ALL_STATS_UP_HIT
+ .4byte BattleScript_EffectHit @ EFFECT_UNUSED_8D
+ .4byte BattleScript_EffectBellyDrum @ EFFECT_BELLY_DRUM
+ .4byte BattleScript_EffectPsychUp @ EFFECT_PSYCH_UP
+ .4byte BattleScript_EffectMirrorCoat @ EFFECT_MIRROR_COAT
+ .4byte BattleScript_EffectSkullBash @ EFFECT_SKULL_BASH
+ .4byte BattleScript_EffectTwister @ EFFECT_TWISTER
+ .4byte BattleScript_EffectEarthquake @ EFFECT_EARTHQUAKE
+ .4byte BattleScript_EffectFutureSight @ EFFECT_FUTURE_SIGHT
+ .4byte BattleScript_EffectGust @ EFFECT_GUST
+ .4byte BattleScript_EffectStomp @ EFFECT_FLINCH_MINIMIZE_HIT
+ .4byte BattleScript_EffectSolarbeam @ EFFECT_SOLARBEAM
+ .4byte BattleScript_EffectThunder @ EFFECT_THUNDER
+ .4byte BattleScript_EffectTeleport @ EFFECT_TELEPORT
+ .4byte BattleScript_EffectBeatUp @ EFFECT_BEAT_UP
+ .4byte BattleScript_EffectSemiInvulnerable @ EFFECT_SEMI_INVULNERABLE
+ .4byte BattleScript_EffectDefenseCurl @ EFFECT_DEFENSE_CURL
+ .4byte BattleScript_EffectSoftboiled @ EFFECT_SOFTBOILED
+ .4byte BattleScript_EffectFakeOut @ EFFECT_FAKE_OUT
+ .4byte BattleScript_EffectUproar @ EFFECT_UPROAR
+ .4byte BattleScript_EffectStockpile @ EFFECT_STOCKPILE
+ .4byte BattleScript_EffectSpitUp @ EFFECT_SPIT_UP
+ .4byte BattleScript_EffectSwallow @ EFFECT_SWALLOW
+ .4byte BattleScript_EffectHit @ EFFECT_UNUSED_A3
+ .4byte BattleScript_EffectHail @ EFFECT_HAIL
+ .4byte BattleScript_EffectTorment @ EFFECT_TORMENT
+ .4byte BattleScript_EffectFlatter @ EFFECT_FLATTER
+ .4byte BattleScript_EffectWillOWisp @ EFFECT_WILL_O_WISP
+ .4byte BattleScript_EffectMemento @ EFFECT_MEMENTO
+ .4byte BattleScript_EffectFacade @ EFFECT_FACADE
+ .4byte BattleScript_EffectFocusPunch @ EFFECT_FOCUS_PUNCH
+ .4byte BattleScript_EffectSmellingsalt @ EFFECT_SMELLINGSALT
+ .4byte BattleScript_EffectFollowMe @ EFFECT_FOLLOW_ME
+ .4byte BattleScript_EffectNaturePower @ EFFECT_NATURE_POWER
+ .4byte BattleScript_EffectCharge @ EFFECT_CHARGE
+ .4byte BattleScript_EffectTaunt @ EFFECT_TAUNT
+ .4byte BattleScript_EffectHelpingHand @ EFFECT_HELPING_HAND
+ .4byte BattleScript_EffectTrick @ EFFECT_TRICK
+ .4byte BattleScript_EffectRolePlay @ EFFECT_ROLE_PLAY
+ .4byte BattleScript_EffectWish @ EFFECT_WISH
+ .4byte BattleScript_EffectAssist @ EFFECT_ASSIST
+ .4byte BattleScript_EffectIngrain @ EFFECT_INGRAIN
+ .4byte BattleScript_EffectSuperpower @ EFFECT_SUPERPOWER
+ .4byte BattleScript_EffectMagicCoat @ EFFECT_MAGIC_COAT
+ .4byte BattleScript_EffectRecycle @ EFFECT_RECYCLE
+ .4byte BattleScript_EffectRevenge @ EFFECT_REVENGE
+ .4byte BattleScript_EffectBrickBreak @ EFFECT_BRICK_BREAK
+ .4byte BattleScript_EffectYawn @ EFFECT_YAWN
+ .4byte BattleScript_EffectKnockOff @ EFFECT_KNOCK_OFF
+ .4byte BattleScript_EffectEndeavor @ EFFECT_ENDEAVOR
+ .4byte BattleScript_EffectEruption @ EFFECT_ERUPTION
+ .4byte BattleScript_EffectSkillSwap @ EFFECT_SKILL_SWAP
+ .4byte BattleScript_EffectImprison @ EFFECT_IMPRISON
+ .4byte BattleScript_EffectRefresh @ EFFECT_REFRESH
+ .4byte BattleScript_EffectGrudge @ EFFECT_GRUDGE
+ .4byte BattleScript_EffectSnatch @ EFFECT_SNATCH
+ .4byte BattleScript_EffectLowKick @ EFFECT_LOW_KICK
+ .4byte BattleScript_EffectSecretPower @ EFFECT_SECRET_POWER
+ .4byte BattleScript_EffectDoubleEdge @ EFFECT_DOUBLE_EDGE
+ .4byte BattleScript_EffectTeeterDance @ EFFECT_TEETER_DANCE
+ .4byte BattleScript_EffectBurnHit @ EFFECT_BLAZE_KICK
+ .4byte BattleScript_EffectMudSport @ EFFECT_MUD_SPORT
+ .4byte BattleScript_EffectPoisonFang @ EFFECT_POISON_FANG
+ .4byte BattleScript_EffectWeatherBall @ EFFECT_WEATHER_BALL
+ .4byte BattleScript_EffectOverheat @ EFFECT_OVERHEAT
+ .4byte BattleScript_EffectTickle @ EFFECT_TICKLE
+ .4byte BattleScript_EffectCosmicPower @ EFFECT_COSMIC_POWER
+ .4byte BattleScript_EffectSkyUppercut @ EFFECT_SKY_UPPERCUT
+ .4byte BattleScript_EffectBulkUp @ EFFECT_BULK_UP
+ .4byte BattleScript_EffectPoisonHit @ EFFECT_POISON_TAIL
+ .4byte BattleScript_EffectWaterSport @ EFFECT_WATER_SPORT
+ .4byte BattleScript_EffectCalmMind @ EFFECT_CALM_MIND
+ .4byte BattleScript_EffectDragonDance @ EFFECT_DRAGON_DANCE
+ .4byte BattleScript_EffectCamouflage @ EFFECT_CAMOUFLAGE
+
BattleScript_EffectHit::
jumpifnotmove MOVE_SURF, BattleScript_HitFromAtkCanceler
jumpifnostatus3 BS_TARGET, STATUS3_UNDERWATER, BattleScript_HitFromAtkCanceler
@@ -338,7 +316,6 @@ BattleScript_CantMakeAsleep::
goto BattleScript_MoveEnd
BattleScript_EffectPoisonHit::
-BattleScript_EffectPoisonTail::
setmoveeffect MOVE_EFFECT_POISON
goto BattleScript_EffectHit
@@ -382,7 +359,6 @@ BattleScript_AbsorbTryFainting::
goto BattleScript_MoveEnd
BattleScript_EffectBurnHit::
-BattleScript_EffectBlazeKick::
setmoveeffect MOVE_EFFECT_BURN
goto BattleScript_EffectHit
diff --git a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc
index b01d5314b..f9cc466a2 100644
--- a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc
+++ b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc
@@ -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_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_WOMAN_5, 31, 8, 2, 3, 1
+ createvobject OBJ_EVENT_GFX_WOMAN_5, 31, 8, 2, 3, DIR_SOUTH
return
BattleFrontier_BattleDomeBattleRoom_EventScript_AddFinalAudience:: @ 824C652
diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc
index 465b04f78..5bc18e000 100644
--- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc
@@ -3,6 +3,8 @@
.set LOCALID_ATTENDANT_MULTIS, 8
.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
map_script MAP_SCRIPT_ON_RESUME, BattleFrontier_BattleTowerLobby_OnResume
map_script MAP_SCRIPT_ON_TRANSITION, BattleFrontier_BattleTowerLobby_OnTransition
diff --git a/data/maps/BirthIsland_Exterior/scripts.inc b/data/maps/BirthIsland_Exterior/scripts.inc
index 5871709ac..58a74f8c4 100644
--- a/data/maps/BirthIsland_Exterior/scripts.inc
+++ b/data/maps/BirthIsland_Exterior/scripts.inc
@@ -1,6 +1,7 @@
-.set LOCALID_DEOXYS_ROCK, 1
.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
map_script MAP_SCRIPT_ON_TRANSITION, BirthIsland_Exterior_OnTransition
map_script MAP_SCRIPT_ON_RESUME, BirthIsland_Exterior_OnResume
@@ -68,9 +69,9 @@ BirthIsland_Exterior_EventScript_NotSolved3:: @ 8267FBF
BirthIsland_Exterior_EventScript_Deoxys:: @ 8267FC1
waitse
- setfieldeffectargument 0, LOCALID_DEOXYS_ROCK
- setfieldeffectargument 1, 58
- setfieldeffectargument 2, 26
+ setfieldeffectargument 0, LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK
+ setfieldeffectargument 1, MAP_NUM(BIRTH_ISLAND_EXTERIOR)
+ setfieldeffectargument 2, MAP_GROUP(BIRTH_ISLAND_EXTERIOR)
dofieldeffect FLDEFF_DESTROY_DEOXYS_ROCK
playbgm MUS_RG_ENCOUNTER_DEOXYS, FALSE
waitfieldeffect FLDEFF_DESTROY_DEOXYS_ROCK
diff --git a/data/maps/FarawayIsland_Interior/scripts.inc b/data/maps/FarawayIsland_Interior/scripts.inc
index 108bc12e6..59a90e357 100644
--- a/data/maps/FarawayIsland_Interior/scripts.inc
+++ b/data/maps/FarawayIsland_Interior/scripts.inc
@@ -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
map_script MAP_SCRIPT_ON_RESUME, FarawayIsland_Interior_OnResume
@@ -58,13 +58,13 @@ FarawayIsland_Interior_OnFrame: @ 8267D98
FarawayIsland_Interior_EventScript_FindMew:: @ 8267DA2
lockall
playse SE_PIN
- applymovement LOCALID_MEW, Common_Movement_ExclamationMark
+ applymovement LOCALID_FARAWAY_ISLAND_MEW, Common_Movement_ExclamationMark
waitmovement 0
- applymovement LOCALID_MEW, Common_Movement_Delay48
+ applymovement LOCALID_FARAWAY_ISLAND_MEW, Common_Movement_Delay48
waitmovement 0
- applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewMoveAndHide
+ applymovement LOCALID_FARAWAY_ISLAND_MEW, FarawayIsland_Interior_Movement_MewMoveAndHide
waitmovement 0
- copyobjectxytoperm LOCALID_MEW
+ copyobjectxytoperm LOCALID_FARAWAY_ISLAND_MEW
setvar VAR_TEMP_1, 1
releaseall
end
@@ -120,7 +120,7 @@ FarawayIsland_Interior_Movement_MewFloatUpEast: @ 8267DEB
FarawayIsland_Interior_EventScript_Mew:: @ 8267DF2
lock
faceplayer
- applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewAppear
+ applymovement LOCALID_FARAWAY_ISLAND_MEW, FarawayIsland_Interior_Movement_MewAppear
waitmovement 0
setvar VAR_0x8004, 0
special SetMewAboveGrass
@@ -171,22 +171,22 @@ FarawayIsland_Interior_EventScript_PlayerOrMewRan:: @ 8267EA4
end
FarawayIsland_Interior_EventScript_FoundMewNorth:: @ 8267EAF
- applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewFloatUpNorth
+ applymovement LOCALID_FARAWAY_ISLAND_MEW, FarawayIsland_Interior_Movement_MewFloatUpNorth
waitmovement 0
return
FarawayIsland_Interior_EventScript_FoundMewSouth:: @ 8267EBA
- applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewFloatUpSouth
+ applymovement LOCALID_FARAWAY_ISLAND_MEW, FarawayIsland_Interior_Movement_MewFloatUpSouth
waitmovement 0
return
FarawayIsland_Interior_EventScript_FoundMewWest:: @ 8267EC5
- applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewFloatUpWest
+ applymovement LOCALID_FARAWAY_ISLAND_MEW, FarawayIsland_Interior_Movement_MewFloatUpWest
waitmovement 0
return
FarawayIsland_Interior_EventScript_FoundMewEast:: @ 8267ED0
- applymovement LOCALID_MEW, FarawayIsland_Interior_Movement_MewFloatUpEast
+ applymovement LOCALID_FARAWAY_ISLAND_MEW, FarawayIsland_Interior_Movement_MewFloatUpEast
waitmovement 0
return
@@ -194,7 +194,7 @@ FarawayIsland_Interior_EventScript_HideMewWhenGrassCut:: @ 8267EDB
lockall
fadescreenswapbuffers FADE_TO_BLACK
setflag FLAG_HIDE_MEW
- removeobject LOCALID_MEW
+ removeobject LOCALID_FARAWAY_ISLAND_MEW
fadescreenswapbuffers FADE_FROM_BLACK
msgbox FarawayIsland_Interior_Text_TheFeelingOfBeingWatchedFaded, MSGBOX_DEFAULT
closemessage
diff --git a/data/maps/Route111/scripts.inc b/data/maps/Route111/scripts.inc
index 322c9a2b7..428011645 100644
--- a/data/maps/Route111/scripts.inc
+++ b/data/maps/Route111/scripts.inc
@@ -2,9 +2,10 @@
.set LOCALID_VICTORIA, 2
.set LOCALID_VIVI, 3
.set LOCALID_VICKY, 4
-.set LOCALID_PLAYER_FALLING, 45
.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
map_script MAP_SCRIPT_ON_LOAD, Route111_OnLoad
map_script MAP_SCRIPT_ON_TRANSITION, Route111_OnTransition
@@ -127,11 +128,11 @@ Route111_EventScript_MirageTowerDisappear:: @ 81F0E60
waitstate
delay 24
playse SE_FALL
- addobject LOCALID_PLAYER_FALLING
+ addobject LOCALID_ROUTE111_PLAYER_FALLING
special StartPlayerDescendMirageTower
waitstate
showobjectat OBJ_EVENT_ID_PLAYER, MAP_LITTLEROOT_TOWN
- removeobject LOCALID_PLAYER_FALLING
+ removeobject LOCALID_ROUTE111_PLAYER_FALLING
delay 16
turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH
delay 16
diff --git a/data/maps/UnionRoom/scripts.inc b/data/maps/UnionRoom/scripts.inc
index f25e7acb6..13d7e1007 100644
--- a/data/maps/UnionRoom/scripts.inc
+++ b/data/maps/UnionRoom/scripts.inc
@@ -1,11 +1,4 @@
-.set LOCALID_UR_PLAYER_4, 2
-.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
+@ Note: LOCALID_UNION_ROOM_PLAYER_# are local ids for this map used elsewhere. They're defined in event_objects.h
UnionRoom_MapScripts:: @ 823D1A6
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_7
setflag FLAG_HIDE_UNION_ROOM_PLAYER_8
- removeobject LOCALID_UR_PLAYER_1
- removeobject LOCALID_UR_PLAYER_2
- removeobject LOCALID_UR_PLAYER_3
- removeobject LOCALID_UR_PLAYER_4
- removeobject LOCALID_UR_PLAYER_5
- removeobject LOCALID_UR_PLAYER_6
- removeobject LOCALID_UR_PLAYER_7
- removeobject LOCALID_UR_PLAYER_8
+ removeobject LOCALID_UNION_ROOM_PLAYER_1
+ removeobject LOCALID_UNION_ROOM_PLAYER_2
+ removeobject LOCALID_UNION_ROOM_PLAYER_3
+ removeobject LOCALID_UNION_ROOM_PLAYER_4
+ removeobject LOCALID_UNION_ROOM_PLAYER_5
+ removeobject LOCALID_UNION_ROOM_PLAYER_6
+ removeobject LOCALID_UNION_ROOM_PLAYER_7
+ removeobject LOCALID_UNION_ROOM_PLAYER_8
special RunUnionRoom
end
diff --git a/data/text/tv.inc b/data/text/tv.inc
index 287ce7f00..311f2ddd2 100644
--- a/data/text/tv.inc
+++ b/data/text/tv.inc
@@ -1027,7 +1027,7 @@ gTVPokemonTodaySuccessfulText11:: @ 08283A5F
.string "BIG BRO: Remember, it could be your\n"
.string "POKéMON in the spotlight next time!$"
-gTVTodaysSmartShopperText00:: @ 08283B05
+SmartShopper_Text_Intro:: @ 08283B05
.string "Hello!\p"
.string "It's time for TODAY'S SMART SHOPPER.\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 "have been recently.$"
-gTVTodaysSmartShopperText01:: @ 08283BAF
+SmartShopper_Text_ClerkNormal:: @ 08283BAF
.string "Let's interview the clerk to get the\n"
.string "lowdown.\p"
.string "Hi, how's your business?\p"
@@ -1046,7 +1046,7 @@ gTVTodaysSmartShopperText01:: @ 08283BAF
.string "Why, just the other day a TRAINER\n"
.string "named {STR_VAR_1} bought {STR_VAR_3}.$"
-gTVTodaysSmartShopperText02:: @ 08283C81
+SmartShopper_Text_RandomComment1:: @ 08283C81
.string "INTERVIEWER: The TRAINER bought\n"
.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"
@@ -1055,13 +1055,13 @@ gTVTodaysSmartShopperText02:: @ 08283C81
.string "For traveling, {STR_VAR_2}S are so\n"
.string "important!$"
-gTVTodaysSmartShopperText03:: @ 08283D32
+SmartShopper_Text_RandomComment2:: @ 08283D32
.string "INTERVIEWER: Speaking of the item\n"
.string "{STR_VAR_2}, I just bought {STR_VAR_3} of\l"
.string "them recently.\p"
.string "After all, {STR_VAR_2}'s a great item!$"
-gTVTodaysSmartShopperText04:: @ 08283D99
+SmartShopper_Text_RandomComment3:: @ 08283D99
.string "INTERVIEWER: {STR_VAR_2}?!\n"
.string "But {STR_VAR_3} of them?!\p"
.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 "two at a time…$"
-gTVTodaysSmartShopperText05:: @ 08283E28
+SmartShopper_Text_RandomComment4:: @ 08283E28
.string "INTERVIEWER: One time, I bought\n"
.string "a whole lot of the item {STR_VAR_2}.\p"
.string "But it turned out to be too many.\n"
@@ -1079,21 +1079,21 @@ gTVTodaysSmartShopperText05:: @ 08283E28
.string "Oops!\p"
.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 "{STR_VAR_2} in bulk, taking {STR_VAR_3}.\p"
.string "INTERVIEWER: Oh, that's smart.\n"
.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 "{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 "That's smart shopping.$"
-gTVTodaysSmartShopperText09:: @ 08283FE7
+SmartShopper_Text_OutroNormal:: @ 08283FE7
.string "INTERVIEWER: Hmm… {STR_VAR_1} sounds like\n"
.string "quite the shrewd bargain hunter!\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 "See you on our next broadcast!$"
-gTVTodaysSmartShopperText10:: @ 0828409E
+SmartShopper_Text_IsVIP:: @ 0828409E
.string "CLERK: {STR_VAR_1} is a VIP customer,\n"
.string "no doubt about it.$"
-gTVTodaysSmartShopperText11:: @ 082840CE
+SmartShopper_Text_ClerkMax:: @ 082840CE
.string "Let's interview the clerk to get the\n"
.string "lowdown.\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 "no doubt about it.$"
-gTVTodaysSmartShopperText12:: @ 082842E6
+SmartShopper_Text_OutroMax:: @ 082842E6
.string "INTERVIEWER: Hmm…\n"
.string "That is amazing.\p"
.string "But why would the TRAINER need to buy\n"
diff --git a/graphics/misc/fossil.png b/graphics/misc/fossil.png
deleted file mode 100644
index f92649e98..000000000
--- a/graphics/misc/fossil.png
+++ /dev/null
Binary files differ
diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h
index 4c3a45dc6..5ade58d50 100644
--- a/include/constants/battle_ai.h
+++ b/include/constants/battle_ai.h
@@ -29,24 +29,24 @@
#define AI_WEATHER_HAIL 3
// get_how_powerful_move_is
-#define MOVE_POWER_DISCOURAGED 0
+#define MOVE_POWER_OTHER 0
#define MOVE_NOT_MOST_POWERFUL 1
#define MOVE_MOST_POWERFUL 2
// script's table id to bit
-#define AI_SCRIPT_CHECK_BAD_MOVE (1 << 0)
-#define AI_SCRIPT_TRY_TO_FAINT (1 << 1)
-#define AI_SCRIPT_CHECK_VIABILITY (1 << 2)
-#define AI_SCRIPT_SETUP_FIRST_TURN (1 << 3)
-#define AI_SCRIPT_RISKY (1 << 4)
-#define AI_SCRIPT_PREFER_STRONGEST_MOVE (1 << 5)
-#define AI_SCRIPT_PREFER_BATON_PASS (1 << 6)
-#define AI_SCRIPT_DOUBLE_BATTLE (1 << 7)
-#define AI_SCRIPT_HP_AWARE (1 << 8)
-#define AI_SCRIPT_UNKNOWN (1 << 9)
+#define AI_SCRIPT_CHECK_BAD_MOVE (1 << 0)
+#define AI_SCRIPT_TRY_TO_FAINT (1 << 1)
+#define AI_SCRIPT_CHECK_VIABILITY (1 << 2)
+#define AI_SCRIPT_SETUP_FIRST_TURN (1 << 3)
+#define AI_SCRIPT_RISKY (1 << 4)
+#define AI_SCRIPT_PREFER_POWER_EXTREMES (1 << 5)
+#define AI_SCRIPT_PREFER_BATON_PASS (1 << 6)
+#define AI_SCRIPT_DOUBLE_BATTLE (1 << 7)
+#define AI_SCRIPT_HP_AWARE (1 << 8)
+#define AI_SCRIPT_TRY_SUNNY_DAY_START (1 << 9)
// 10 - 28 are not used
-#define AI_SCRIPT_ROAMING (1 << 29)
-#define AI_SCRIPT_SAFARI (1 << 30)
-#define AI_SCRIPT_FIRST_BATTLE (1 << 31)
+#define AI_SCRIPT_ROAMING (1 << 29)
+#define AI_SCRIPT_SAFARI (1 << 30)
+#define AI_SCRIPT_FIRST_BATTLE (1 << 31)
#endif // GUARD_CONSTANTS_BATTLE_AI_H
diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h
index 7a224940f..1958c792e 100644
--- a/include/constants/event_objects.h
+++ b/include/constants/event_objects.h
@@ -279,7 +279,37 @@
#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_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
diff --git a/include/constants/tv.h b/include/constants/tv.h
index 1b28f6e6e..095a6ddca 100644
--- a/include/constants/tv.h
+++ b/include/constants/tv.h
@@ -249,6 +249,21 @@
#define CONTESTLADYLIVE_STATE_LOST 2
#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
#endif //GUARD_CONSTANTS_TV_H
diff --git a/include/event_object_lock.h b/include/event_object_lock.h
index 9d31a25fd..0b1f5f098 100644
--- a/include/event_object_lock.h
+++ b/include/event_object_lock.h
@@ -2,9 +2,9 @@
#define GUARD_EVENT_OBJECT_LOCK_H
bool8 IsFreezePlayerFinished(void);
-void ScriptFreezeObjectEvents(void);
bool8 IsFreezeSelectedObjectAndPlayerFinished(void);
-void LockSelectedObjectEvent(void);
+void FreezeObjects_WaitForPlayer(void);
+void FreezeObjects_WaitForPlayerAndSelected(void);
void FreezeForApproachingTrainers(void);
bool8 IsFreezeObjectAndPlayerFinished(void);
void ScriptUnfreezeObjectEvents(void);
diff --git a/include/event_scripts.h b/include/event_scripts.h
index 925b4389d..3340da6f5 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -108,19 +108,19 @@ extern const u8 gTVPokemonTodaySuccessfulText08[];
extern const u8 gTVPokemonTodaySuccessfulText09[];
extern const u8 gTVPokemonTodaySuccessfulText10[];
extern const u8 gTVPokemonTodaySuccessfulText11[];
-extern const u8 gTVTodaysSmartShopperText00[];
-extern const u8 gTVTodaysSmartShopperText01[];
-extern const u8 gTVTodaysSmartShopperText02[];
-extern const u8 gTVTodaysSmartShopperText03[];
-extern const u8 gTVTodaysSmartShopperText04[];
-extern const u8 gTVTodaysSmartShopperText05[];
-extern const u8 gTVTodaysSmartShopperText06[];
-extern const u8 gTVTodaysSmartShopperText07[];
-extern const u8 gTVTodaysSmartShopperText08[];
-extern const u8 gTVTodaysSmartShopperText09[];
-extern const u8 gTVTodaysSmartShopperText10[];
-extern const u8 gTVTodaysSmartShopperText11[];
-extern const u8 gTVTodaysSmartShopperText12[];
+extern const u8 SmartShopper_Text_Intro[];
+extern const u8 SmartShopper_Text_ClerkNormal[];
+extern const u8 SmartShopper_Text_RandomComment1[];
+extern const u8 SmartShopper_Text_RandomComment2[];
+extern const u8 SmartShopper_Text_RandomComment3[];
+extern const u8 SmartShopper_Text_RandomComment4[];
+extern const u8 SmartShopper_Text_SecondItem[];
+extern const u8 SmartShopper_Text_ThirdItem[];
+extern const u8 SmartShopper_Text_DuringSale[];
+extern const u8 SmartShopper_Text_OutroNormal[];
+extern const u8 SmartShopper_Text_IsVIP[];
+extern const u8 SmartShopper_Text_ClerkMax[];
+extern const u8 SmartShopper_Text_OutroMax[];
extern const u8 gTVWorldOfMastersText00[];
extern const u8 gTVWorldOfMastersText01[];
extern const u8 gTVWorldOfMastersText02[];
diff --git a/include/list_menu.h b/include/list_menu.h
index 0a54a069a..1c18f3dff 100644
--- a/include/list_menu.h
+++ b/include/list_menu.h
@@ -31,7 +31,7 @@ struct ListMenuTemplate
{
const struct ListMenuItem *items;
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 maxShowed;
u8 windowId;
diff --git a/include/region_map.h b/include/region_map.h
index 97364abd8..02d711afa 100644
--- a/include/region_map.h
+++ b/include/region_map.h
@@ -111,7 +111,7 @@ void PokedexAreaScreen_UpdateRegionMapVariablesAndVideoRegs(s16 x, s16 y);
void CB2_OpenFlyMap(void);
bool8 IsRegionMapZoomed(void);
void TrySetPlayerIconBlink(void);
-void sub_8123030(u16 color, u32 coeff);
+void BlendRegionMap(u16 color, u32 coeff);
void SetRegionMapDataForZoom(void);
extern const struct RegionMapLocation gRegionMapEntries[];
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index b72875036..bb615e497 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -263,7 +263,10 @@ static const BattleAICmdFunc sBattleAICmdTable[] =
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_DREAM_EATER,
@@ -277,7 +280,7 @@ static const u16 sDiscouragedPowerfulMoveEffects[] =
EFFECT_SUPERPOWER,
EFFECT_ERUPTION,
EFFECT_OVERHEAT,
- 0xFFFF
+ IGNORED_MOVES_END
};
// code
@@ -1177,14 +1180,14 @@ static void Cmd_get_how_powerful_move_is(void)
s32 i, checkedMove;
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;
}
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].power > 1
- && sDiscouragedPowerfulMoveEffects[i] == 0xFFFF)
+ && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END)
{
gDynamicBasePower = 0;
*(&gBattleStruct->dynamicMoveType) = 0;
@@ -1192,16 +1195,18 @@ static void Cmd_get_how_powerful_move_is(void)
gMoveResultFlags = 0;
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 (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;
}
if (gBattleMons[sBattler_AI].moves[checkedMove] != MOVE_NONE
- && sDiscouragedPowerfulMoveEffects[i] == 0xFFFF
+ && sIgnoredPowerfulMoveEffects[i] == IGNORED_MOVES_END
&& gBattleMoves[gBattleMons[sBattler_AI].moves[checkedMove]].power > 1)
{
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++)
{
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)
- AI_THINKING_STRUCT->funcResult = MOVE_MOST_POWERFUL; // Is the most powerful.
+ AI_THINKING_STRUCT->funcResult = MOVE_MOST_POWERFUL;
else
- AI_THINKING_STRUCT->funcResult = MOVE_NOT_MOST_POWERFUL; // Not the most powerful.
+ AI_THINKING_STRUCT->funcResult = MOVE_NOT_MOST_POWERFUL;
}
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++;
diff --git a/src/battle_dome.c b/src/battle_dome.c
index f6b4efa95..edd7bf950 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -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};
-// Each tourney trainer has a text describing their potential to win, depending on their seed ranking for the current tourney
-// Dome Ace Tucker has their own separate potential text
+// 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.
static const u8 *const sBattleDomePotentialTexts[DOME_TOURNAMENT_TRAINERS_COUNT + 1] =
{
BattleDome_Text_Potential1, // Highest potential
@@ -1234,7 +1234,7 @@ static const u8 *const sBattleDomePotentialTexts[DOME_TOURNAMENT_TRAINERS_COUNT
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] =
{
[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,
};
-// 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[] =
{
BattleDome_Text_EmphasizesHPAndAtk, // DOME_TEXT_TWO_GOOD_STATS and DOME_TEXT_HP start here
diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c
index face0c188..266b85415 100644
--- a/src/battle_pyramid_bag.c
+++ b/src/battle_pyramid_bag.c
@@ -106,7 +106,7 @@ static void BagAction_Give(u8);
static void BagAction_Cancel(u8);
static void BagAction_UseInBattle(u8);
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 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;
if (itemIndex == LIST_CANCEL)
diff --git a/src/battle_tv.c b/src/battle_tv.c
index a61f5ff29..8c1f8044a 100644
--- a/src/battle_tv.c
+++ b/src/battle_tv.c
@@ -1246,7 +1246,7 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
break;
case PTS_REFLECT:
// 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;
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;
case PTS_LIGHT_SCREEN:
// 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;
movePoints->points[defSide][id + tvPtr->side[defSide].lightScreenMoveSlot] += sPointsArray[caseId][0];
diff --git a/src/daycare.c b/src/daycare.c
index 4199bfda6..6a1715049 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -29,7 +29,7 @@ extern const struct Evolution gEvolutionTable[][EVOS_PER_MON];
static void ClearDaycareMonMail(struct DaycareMail *mail);
static void SetInitialEggData(struct Pokemon *mon, u16 species, 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()
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);
}
-static void DaycarePrintMonInfo(u8 windowId, s32 daycareSlotId, u8 y)
+static void DaycarePrintMonInfo(u8 windowId, u32 daycareSlotId, u8 y)
{
if (daycareSlotId < (unsigned) DAYCARE_MON_COUNT)
{
diff --git a/src/decoration.c b/src/decoration.c
index cbdd99234..62d1966bf 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -147,7 +147,7 @@ static void ReturnToActionsMenuFromCategories(u8 taskId);
static void ExitTraderDecorationMenu(u8 taskId);
static void CopyDecorationMenuItemName(u8 *dest, u16 decoration);
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 HandleDecorationItemsMenuInput(u8 taskId);
static void PrintDecorationItemDescription(s32 itemIndex);
@@ -912,9 +912,9 @@ static void DecorationItemsMenu_OnCursorMove(s32 itemIndex, bool8 flag, struct L
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)
BlitMenuInfoIcon(windowId, MENU_INFO_ICON_BALL_RED, 92, y + 2);
diff --git a/src/event_object_lock.c b/src/event_object_lock.c
index dec2d7906..179c72813 100644
--- a/src/event_object_lock.c
+++ b/src/event_object_lock.c
@@ -40,7 +40,7 @@ bool8 IsFreezePlayerFinished(void)
}
-void ScriptFreezeObjectEvents(void)
+void FreezeObjects_WaitForPlayer(void)
{
FreezeObjectEvents();
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;
FreezeObjectEventsExceptOne(gSelectedObjectEvent);
@@ -144,6 +146,8 @@ static void Task_FreezeObjectAndPlayer(u8 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)
{
u8 trainerObjectId1, trainerObjectId2, taskId;
diff --git a/src/faraway_island.c b/src/faraway_island.c
index bc0814652..51ab8def4 100755
--- a/src/faraway_island.c
+++ b/src/faraway_island.c
@@ -38,7 +38,7 @@ static const s16 sFarawayIslandRockCoords[4][2] =
static u8 GetMewObjectEventId(void)
{
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;
}
diff --git a/src/field_special_scene.c b/src/field_special_scene.c
index 6b41c5423..3c7016bd1 100644
--- a/src/field_special_scene.c
+++ b/src/field_special_scene.c
@@ -72,12 +72,12 @@ void Task_Truck1(u8 taskId)
s16 cameraXpan = 0, cameraYpan = 0;
s16 box1, box2, box3;
- box1 = GetTruckBoxMovement(data[0] + 30) * 4; // top box.
- SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
- box2 = GetTruckBoxMovement(data[0]) * 2; // bottom left box.
- SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
- box3 = GetTruckBoxMovement(data[0]) * 4; // bottom right box.
- SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
+ box1 = GetTruckBoxMovement(data[0] + 30) * 4;
+ SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, box1 + 3);
+ box2 = GetTruckBoxMovement(data[0]) * 2;
+ SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, box2 - 3);
+ box3 = GetTruckBoxMovement(data[0]) * 4;
+ SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, box3);
if (++data[0] == SECONDS(500)) // this will never run
data[0] = 0; // reset the timer if it gets stuck.
@@ -116,11 +116,11 @@ void Task_Truck2(u8 taskId)
cameraYpan = GetTruckCameraBobbingY(data[2]);
SetCameraPanning(cameraXpan, cameraYpan);
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;
- 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;
- 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]];
cameraYpan = 0;
SetCameraPanning(cameraXpan, 0);
- SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, cameraYpan + 3);
- SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, cameraYpan - 3);
- SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3 - cameraXpan, cameraYpan);
+ SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3 - cameraXpan, cameraYpan + 3);
+ SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -cameraXpan, cameraYpan - 3);
+ 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))
{
- SetObjectEventSpritePosByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, 3);
- SetObjectEventSpritePosByLocalIdAndMap(2, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, -3);
- SetObjectEventSpritePosByLocalIdAndMap(3, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3, 0);
+ SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_TOP, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 3, 3);
+ SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_L, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, 0, -3);
+ SetObjectEventSpritePosByLocalIdAndMap(LOCALID_TRUCK_BOX_BOTTOM_R, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, -3, 0);
}
}
diff --git a/src/field_specials.c b/src/field_specials.c
index 627e95330..46f8e7fe8 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -3429,7 +3429,7 @@ static void ChangeDeoxysRockLevel(u8 rockLevel)
{
u8 objectEventId;
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)
PlaySE(SE_M_CONFUSE_RAY);
@@ -3437,9 +3437,9 @@ static void ChangeDeoxysRockLevel(u8 rockLevel)
PlaySE(SE_RG_DEOXYS_MOVE);
CreateTask(WaitForDeoxysRockMovement, 8);
- gFieldEffectArguments[0] = 1;
- gFieldEffectArguments[1] = 58;
- gFieldEffectArguments[2] = 26;
+ gFieldEffectArguments[0] = LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK;
+ gFieldEffectArguments[1] = MAP_NUM(BIRTH_ISLAND_EXTERIOR);
+ gFieldEffectArguments[2] = MAP_GROUP(BIRTH_ISLAND_EXTERIOR);
gFieldEffectArguments[3] = sDeoxysRockCoords[rockLevel][0];
gFieldEffectArguments[4] = sDeoxysRockCoords[rockLevel][1];
@@ -3686,18 +3686,18 @@ u32 GetMartEmployeeObjectEventId(void)
{
static const u8 sPokeMarts[][3] =
{
- { MAP_GROUP(OLDALE_TOWN_MART), MAP_NUM(OLDALE_TOWN_MART), 1 },
- { MAP_GROUP(LAVARIDGE_TOWN_MART), MAP_NUM(LAVARIDGE_TOWN_MART), 1 },
- { MAP_GROUP(FALLARBOR_TOWN_MART), MAP_NUM(FALLARBOR_TOWN_MART), 1 },
- { MAP_GROUP(VERDANTURF_TOWN_MART), MAP_NUM(VERDANTURF_TOWN_MART), 1 },
- { MAP_GROUP(PETALBURG_CITY_MART), MAP_NUM(PETALBURG_CITY_MART), 1 },
- { MAP_GROUP(SLATEPORT_CITY_MART), MAP_NUM(SLATEPORT_CITY_MART), 1 },
- { MAP_GROUP(MAUVILLE_CITY_MART), MAP_NUM(MAUVILLE_CITY_MART), 1 },
- { MAP_GROUP(RUSTBORO_CITY_MART), MAP_NUM(RUSTBORO_CITY_MART), 1 },
- { MAP_GROUP(FORTREE_CITY_MART), MAP_NUM(FORTREE_CITY_MART), 1 },
- { MAP_GROUP(MOSSDEEP_CITY_MART), MAP_NUM(MOSSDEEP_CITY_MART), 1 },
- { MAP_GROUP(SOOTOPOLIS_CITY_MART), MAP_NUM(SOOTOPOLIS_CITY_MART), 1 },
- { MAP_GROUP(BATTLE_FRONTIER_MART), MAP_NUM(BATTLE_FRONTIER_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), LOCALID_LAVARIDGE_MART_CLERK },
+ { MAP_GROUP(FALLARBOR_TOWN_MART), MAP_NUM(FALLARBOR_TOWN_MART), LOCALID_FALLARBOR_MART_CLERK },
+ { MAP_GROUP(VERDANTURF_TOWN_MART), MAP_NUM(VERDANTURF_TOWN_MART), LOCALID_VERDANTURF_MART_CLERK },
+ { MAP_GROUP(PETALBURG_CITY_MART), MAP_NUM(PETALBURG_CITY_MART), LOCALID_PETALBURG_MART_CLERK },
+ { MAP_GROUP(SLATEPORT_CITY_MART), MAP_NUM(SLATEPORT_CITY_MART), LOCALID_SLATEPORT_MART_CLERK },
+ { MAP_GROUP(MAUVILLE_CITY_MART), MAP_NUM(MAUVILLE_CITY_MART), LOCALID_MAUVILLE_MART_CLERK },
+ { MAP_GROUP(RUSTBORO_CITY_MART), MAP_NUM(RUSTBORO_CITY_MART), LOCALID_RUSTBORO_MART_CLERK },
+ { MAP_GROUP(FORTREE_CITY_MART), MAP_NUM(FORTREE_CITY_MART), LOCALID_FORTREE_MART_CLERK },
+ { MAP_GROUP(MOSSDEEP_CITY_MART), MAP_NUM(MOSSDEEP_CITY_MART), LOCALID_MOSSDEEP_MART_CLERK },
+ { MAP_GROUP(SOOTOPOLIS_CITY_MART), MAP_NUM(SOOTOPOLIS_CITY_MART), LOCALID_SOOTOPOLIS_MART_CLERK },
+ { MAP_GROUP(BATTLE_FRONTIER_MART), MAP_NUM(BATTLE_FRONTIER_MART), LOCALID_BATTLE_FRONTIER_MART_CLERK }
};
u8 i;
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index bfe4beb94..590c0d01d 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -66,13 +66,12 @@ static EWRAM_DATA struct HofGfx *sHofGfxPtr = NULL;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
-// this file's functions
static void ClearVramOamPltt_LoadHofPal(void);
static void LoadHofGfx(void);
static void InitHofBgs(void);
static bool8 CreateHofConfettiSprite(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_InitTeamSaveData(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 SpriteCB_HofConfetti(struct Sprite* sprite);
-// const rom data
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 sPlayerInfoTextColors[4] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_LIGHT_GRAY};
-
-static const u8 sUnused_085E538C[] = {4, 5, 0, 0};
+static const u8 sUnusedTextColors[4] = {TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_TRANSPARENT};
static const struct CompressedSpriteSheet sSpriteSheet_Confetti[] =
{
@@ -383,7 +388,7 @@ static bool8 InitHallOfFameScreen(void)
gMain.state++;
break;
case 3:
- if (!sub_8175024())
+ if (!LoadHofBgs())
{
SetVBlankCallback(VBlankCB_HallOfFame);
BeginNormalPaletteFade(PALETTES_ALL, 0, 0x10, 0, RGB_BLACK);
@@ -819,7 +824,7 @@ void CB2_DoHallOfFamePC(void)
gMain.state++;
break;
case 3:
- if (!sub_8175024())
+ if (!LoadHofBgs())
{
struct HallofFameTeam *fameTeam = (struct HallofFameTeam*)(gDecompressionBuffer);
fameTeam->mon[0] = sDummyFameMon;
@@ -1301,7 +1306,7 @@ static void InitHofBgs(void)
ChangeBgY(3, 0, 0);
}
-static bool8 sub_8175024(void)
+static bool8 LoadHofBgs(void)
{
switch (sHofGfxPtr->state)
{
diff --git a/src/item_menu.c b/src/item_menu.c
index de4d82e9b..39abf883a 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -133,7 +133,7 @@ void UpdatePocketScrollPositions(void);
u8 CreateBagInputHandlerTask(u8);
void sub_81AC23C(u8);
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_Toss(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 itemQuantity;
diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c
index 7f6acd60f..5c0849eef 100644
--- a/src/item_menu_icons.c
+++ b/src/item_menu_icons.c
@@ -244,7 +244,7 @@ static const struct OamData sBerryPicRotatingOamData =
.affineParam = 0
};
-static const union AnimCmd sSpriteAnim_857FBD8[] =
+static const union AnimCmd sAnim_BerryPic[] =
{
ANIMCMD_FRAME(0, 0),
ANIMCMD_END
@@ -252,7 +252,7 @@ static const union AnimCmd sSpriteAnim_857FBD8[] =
static const union AnimCmd *const sBerryPicSpriteAnimTable[] =
{
- sSpriteAnim_857FBD8
+ sAnim_BerryPic
};
static const struct SpriteFrameImage sBerryPicSpriteImageTable[] =
diff --git a/src/menu_specialized.c b/src/menu_specialized.c
index 1ca5c4d33..eb8cae72f 100644
--- a/src/menu_specialized.c
+++ b/src/menu_specialized.c
@@ -253,7 +253,7 @@ static u8 sub_81D1D34(u8 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];
u16 length;
diff --git a/src/mirage_tower.c b/src/mirage_tower.c
index 1d57c2177..9b6d0d887 100644
--- a/src/mirage_tower.c
+++ b/src/mirage_tower.c
@@ -14,12 +14,14 @@
#include "sprite.h"
#include "task.h"
#include "window.h"
+#include "constants/event_objects.h"
#include "constants/maps.h"
#include "constants/rgb.h"
#include "constants/songs.h"
#include "constants/metatile_labels.h"
-struct MirageTowerPulseBlend {
+struct MirageTowerPulseBlend
+{
u8 taskId;
struct PulseBlend pulseBlend;
};
@@ -37,59 +39,51 @@ struct BgRegOffsets
u16 bgVOFS;
};
-struct Struct203CF10
+struct FallAnim_Tower
{
- u8 *buffer;
- u8 currIndex;
+ u8 *disintegrateRand;
+ u8 disintegrateIdx;
};
-struct DynamicSpriteFrameImage
-{
- u8 *data;
- u16 size;
-};
-
-struct Struct203CF0C
+struct FallAnim_Fossil
{
u8 *frameImageTiles;
- struct DynamicSpriteFrameImage *frameImage;
+ struct SpriteFrameImage *frameImage;
u8 spriteId;
- u16 *unkC;
- u16 unk10;
+ u16 *disintegrateRand;
+ u16 disintegrateIdx;
};
+#define TAG_CEILING_CRUMBLE 4000
+
#define MIRAGE_TOWER_GFX_LENGTH (sizeof(sBlankTile_Gfx) + sizeof(sMirageTower_Gfx))
-#define ROOT_FOSSIL_GFX_LENGTH sizeof(sRootFossil_Gfx)
-#define ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH 0x100
+#define FOSSIL_DISINTEGRATE_LENGTH 0x100
-// extern data
-extern const struct SpriteSheet gMirageTowerCeilingCrumbleSpriteSheets[];
-extern const s16 sCeilingCrumblePositions[][3];
+static const struct SpriteSheet sCeilingCrumbleSpriteSheets[];
+static const s16 sCeilingCrumblePositions[][3];
-// static functions
-static void PlayerDescendMirageTower(u8 taskId);
-static void DoScreenShake(u8 taskId);
+static void PlayerDescendMirageTower(u8);
+static void DoScreenShake(u8);
static void IncrementCeilingCrumbleFinishedCount(void);
-static void WaitCeilingCrumble(u8 taskId);
-static void FinishCeilingCrumbleTask(u8 taskId);
+static void WaitCeilingCrumble(u8);
+static void FinishCeilingCrumbleTask(u8);
static void CreateCeilingCrumbleSprites(void);
-static void MoveCeilingCrumbleSprite(struct Sprite* sprite);
-static void DoMirageTowerDisintegration(u8 taskId);
-static void InitMirageTowerShake(u8 taskId);
-static void DoFossilFallAndSink(u8 taskId);
-static void sub_81BF248(struct Sprite *);
-static void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e);
-
-// rodata
+static void SpriteCB_CeilingCrumble(struct Sprite*);
+static void DoMirageTowerDisintegration(u8);
+static void InitMirageTowerShake(u8);
+static void Task_FossilFallAndSink(u8);
+static void SpriteCB_FallingFossil(struct Sprite *);
+static void UpdateDisintegrationEffect(u8*, u16, u8, u8, u8);
+
static const u8 sBlankTile_Gfx[32] = {0};
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 sRootFossil_Pal[] = INCBIN_U16("graphics/misc/fossil.gbapal");
-static const u8 sRootFossil_Gfx[] = INCBIN_U8("graphics/misc/fossil.4bpp");
+static const u16 sFossil_Pal[] = INCBIN_U16("graphics/object_events/pics/misc/fossil.gbapal"); // Unused
+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 u16 sMirageTowerCrumbles_Palette[] = INCBIN_U16("graphics/misc/mirage_tower_crumbles.gbapal");
-const s16 sCeilingCrumblePositions[][3] =
+static const s16 sCeilingCrumblePositions[][3] =
{
{ 0, 10, 65},
{ 17, 3, 50},
@@ -101,10 +95,10 @@ const s16 sCeilingCrumblePositions[][3] =
{-24, -4, 65},
};
-const struct SpriteSheet gMirageTowerCeilingCrumbleSpriteSheets[] =
+static const struct SpriteSheet sCeilingCrumbleSpriteSheets[] =
{
- {sMirageTowerCrumbles_Gfx, 0x0080, 4000},
- {NULL}
+ {sMirageTowerCrumbles_Gfx, 0x80, TAG_CEILING_CRUMBLE},
+ {}
};
static const struct MetatileCoords sInvisibleMirageTowerMetatiles[] =
@@ -129,13 +123,13 @@ static const struct MetatileCoords sInvisibleMirageTowerMetatiles[] =
{20, 58, METATILE_General_SandPit_Center},
};
-static const union AnimCmd gSpriteAnim_8617DEC[] =
+static const union AnimCmd sAnim_FallingFossil[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_END,
};
-static const struct OamData gOamData_8617DF4 =
+static const struct OamData sOamData_FallingFossil =
{
.y = 0,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -152,14 +146,20 @@ static const struct OamData gOamData_8617DF4 =
.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 = {
@@ -174,18 +174,18 @@ const struct PulseBlendSettings gMirageTowerPulseBlendSettings = {
.unk7_7 = 1,
};
-static const union AnimCmd sCeilingCrumble2AnimCmd[] =
+static const union AnimCmd sAnim_CeilingCrumbleSmall[] =
{
ANIMCMD_FRAME(0, 12),
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,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -202,28 +202,28 @@ static const struct OamData sCeilingCrumble2OamData =
.affineParam = 0,
};
-static const struct SpriteTemplate sCeilingCrumbleSpriteTemplate2 = {
- .tileTag = 4000,
+static const struct SpriteTemplate sSpriteTemplate_CeilingCrumbleSmall = {
+ .tileTag = TAG_CEILING_CRUMBLE,
.paletteTag = 0xFFFF,
- .oam = &sCeilingCrumble2OamData,
- .anims = sCeilingCrumble2AnimCmds,
+ .oam = &sOamData_CeilingCrumbleSmall,
+ .anims = sAnims_CeilingCrumbleSmall,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = MoveCeilingCrumbleSprite
+ .callback = SpriteCB_CeilingCrumble
};
-static const union AnimCmd sCeilingCrumble1AnimCmd[] =
+static const union AnimCmd sAnim_CeilingCrumbleLarge[] =
{
ANIMCMD_FRAME(0, 12),
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,
.affineMode = ST_OAM_AFFINE_OFF,
@@ -240,24 +240,26 @@ static const struct OamData sCeilingCrumble1OamData =
.affineParam = 0,
};
-static const struct SpriteTemplate sCeilingCrumbleSpriteTemplate1 = {
- .tileTag = 4000,
+static const struct SpriteTemplate sSpriteTemplate_CeilingCrumbleLarge = {
+ .tileTag = TAG_CEILING_CRUMBLE,
.paletteTag = 0xFFFF,
- .oam = &sCeilingCrumble1OamData,
- .anims = sCeilingCrumble1AnimCmds,
+ .oam = &sOamData_CeilingCrumbleLarge,
+ .anims = sAnims_CeilingCrumbleLarge,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
- .callback = MoveCeilingCrumbleSprite
+ .callback = SpriteCB_CeilingCrumble
};
EWRAM_DATA static u8* sMirageTowerGfxBuffer = NULL;
EWRAM_DATA static u8* sMirageTowerTilemapBuffer = NULL;
-EWRAM_DATA static struct Struct203CF0C *sUnknown_0203CF0C = NULL;
-EWRAM_DATA static struct Struct203CF10 *sUnknown_0203CF10 = NULL;
+EWRAM_DATA static struct FallAnim_Fossil *sFallingFossil = NULL;
+EWRAM_DATA static struct FallAnim_Tower *sFallingTower = 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)
{
@@ -319,6 +321,7 @@ void SetMirageTowerVisibility(void)
if (VarGet(VAR_MIRAGE_TOWER_STATE))
{
+ // Mirage Tower event has already been completed, hide it
FlagClear(FLAG_MIRAGE_TOWER_VISIBLE);
return;
}
@@ -343,32 +346,40 @@ void StartPlayerDescendMirageTower(void)
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)
{
u8 objectEventId;
- struct ObjectEvent *fakePlayerObjectEvent;
- struct ObjectEvent *playerObjectEvent;
-
- TryGetObjectEventIdByLocalIdAndMap(45, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId);
- fakePlayerObjectEvent = &gObjectEvents[objectEventId];
- gSprites[fakePlayerObjectEvent->spriteId].y2 += 4;
- playerObjectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
- if ((gSprites[fakePlayerObjectEvent->spriteId].y + gSprites[fakePlayerObjectEvent->spriteId].y2) >=
- (gSprites[playerObjectEvent->spriteId].y + gSprites[playerObjectEvent->spriteId].y2))
+ struct ObjectEvent *fallingPlayer;
+ struct ObjectEvent *player;
+
+ TryGetObjectEventIdByLocalIdAndMap(LOCALID_ROUTE111_PLAYER_FALLING, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId);
+ fallingPlayer = &gObjectEvents[objectEventId];
+ gSprites[fallingPlayer->spriteId].y2 += 4;
+ player = &gObjectEvents[gPlayerAvatar.objectEventId];
+ if ((gSprites[fallingPlayer->spriteId].y + gSprites[fallingPlayer->spriteId].y2) >=
+ (gSprites[player->spriteId].y + gSprites[player->spriteId].y2))
{
DestroyTask(taskId);
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)
{
u8 taskId = CreateTask(DoScreenShake, 9);
- gTasks[taskId].data[0] = xShakeOffset;
- gTasks[taskId].data[1] = 0;
- gTasks[taskId].data[2] = numShakes;
- gTasks[taskId].data[3] = shakeDelay;
- gTasks[taskId].data[4] = yShakeOffset;
+ gTasks[taskId].tXShakeOffset = xShakeOffset;
+ gTasks[taskId].tTimer = 0;
+ gTasks[taskId].tNumShakes = numShakes;
+ gTasks[taskId].tShakeDelay = shakeDelay;
+ gTasks[taskId].tYShakeOffset = yShakeOffset;
SetCameraPanningCallback(NULL);
PlaySE(SE_M_STRENGTH);
}
@@ -378,15 +389,15 @@ static void DoScreenShake(u8 taskId)
s16 *data;
data = gTasks[taskId].data;
- data[1]++;
- if (data[1] % data[3] == 0)
+ tTimer++;
+ if (tTimer % tShakeDelay == 0)
{
- data[1] = 0;
- data[2]--;
- data[0] = -data[0];
- data[4] = -data[4];
- SetCameraPanning(data[0], data[4]);
- if (data[2] == 0)
+ tTimer = 0;
+ tNumShakes--;
+ tXShakeOffset = -tXShakeOffset;
+ tYShakeOffset = -tYShakeOffset;
+ SetCameraPanning(tXShakeOffset, tYShakeOffset);
+ if (tNumShakes == 0)
{
IncrementCeilingCrumbleFinishedCount();
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)
{
u8 taskId = FindTaskIdByFunc(WaitCeilingCrumble);
@@ -404,7 +421,7 @@ static void IncrementCeilingCrumbleFinishedCount(void)
void DoMirageTowerCeilingCrumble(void)
{
- LoadSpriteSheets(gMirageTowerCeilingCrumbleSpriteSheets);
+ LoadSpriteSheets(sCeilingCrumbleSpriteSheets);
CreateCeilingCrumbleSprites();
CreateTask(WaitCeilingCrumble, 8);
StartScreenShake(2, 1, 16, 3);
@@ -421,7 +438,7 @@ static void WaitCeilingCrumble(u8 taskId)
static void FinishCeilingCrumbleTask(u8 taskId)
{
- FreeSpriteTilesByTag(4000);
+ FreeSpriteTilesByTag(TAG_CEILING_CRUMBLE);
DestroyTask(taskId);
EnableBothScriptContexts();
}
@@ -433,21 +450,21 @@ static void CreateCeilingCrumbleSprites(void)
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.paletteNum = 0;
gSprites[spriteId].data[0] = 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.paletteNum = 0;
gSprites[spriteId].data[0] = i;
}
}
-static void MoveCeilingCrumbleSprite(struct Sprite* sprite)
+static void SpriteCB_CeilingCrumble(struct Sprite* sprite)
{
sprite->data[1] += 2;
sprite->y2 = sprite->data[1] / 2;
@@ -478,7 +495,7 @@ void StartMirageTowerShake(void)
void StartMirageTowerFossilFallAndSink(void)
{
- CreateTask(DoFossilFallAndSink, 9);
+ CreateTask(Task_FossilFallAndSink, 9);
}
static void SetBgShakeOffsets(void)
@@ -501,42 +518,44 @@ static void UpdateBgShake(u8 taskId)
}
}
+#define tState data[0]
+
static void InitMirageTowerShake(u8 taskId)
{
u8 zero;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 0:
FreeAllWindowBuffers();
SetBgAttribute(0, BG_ATTR_PRIORITY, 2);
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 1:
sMirageTowerGfxBuffer = (u8 *)AllocZeroed(MIRAGE_TOWER_GFX_LENGTH);
sMirageTowerTilemapBuffer = (u8 *)AllocZeroed(BG_SCREEN_SIZE);
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 2:
CpuSet(sBlankTile_Gfx, sMirageTowerGfxBuffer, MIRAGE_TOWER_GFX_LENGTH / 2);
LoadBgTiles(0, sMirageTowerGfxBuffer, MIRAGE_TOWER_GFX_LENGTH, 0);
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 3:
SetBgTilemapBuffer(0, sMirageTowerTilemapBuffer);
CopyToBgTilemapBufferRect_ChangePalette(0, &sMirageTowerTilemap, 12, 29, 6, 12, 17);
CopyBgTilemapBufferToVram(0);
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 4:
ShowBg(0);
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 5:
SetInvisibleMirageTowerMetatiles();
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
break;
case 6:
sBgShakeOffsets = Alloc(sizeof(*sBgShakeOffsets));
@@ -558,27 +577,29 @@ static void DoMirageTowerDisintegration(u8 taskId)
u16 i;
u8 index;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 1:
- sUnknown_0203CF10 = AllocZeroed(OUTER_BUFFER_LENGTH * sizeof(struct Struct203CF10));
+ sFallingTower = AllocZeroed(OUTER_BUFFER_LENGTH * sizeof(struct FallAnim_Tower));
break;
case 3:
if (gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1))
{
if (gTasks[taskId].data[1] > 1)
{
+ // Initialize disintegration pattern
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++)
- sUnknown_0203CF10[index].buffer[i] = i;
+ sFallingTower[index].disintegrateRand[i] = i;
+
+ // Randomize disintegration pattern
for (i = 0; i <= (INNER_BUFFER_LENGTH - 1); i++)
{
u16 rand1, rand2, temp;
-
- rand1 = Random() % 0x30;
- rand2 = Random() % 0x30;
- SWAP(sUnknown_0203CF10[index].buffer[rand2], sUnknown_0203CF10[index].buffer[rand1], temp);
+ rand1 = Random() % INNER_BUFFER_LENGTH;
+ rand2 = Random() % INNER_BUFFER_LENGTH;
+ SWAP(sFallingTower[index].disintegrateRand[rand2], sFallingTower[index].disintegrateRand[rand1], temp);
}
if (gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1))
gTasks[taskId].data[3]++;
@@ -591,20 +612,20 @@ static void DoMirageTowerDisintegration(u8 taskId)
{
for (j = 0; j < 1; j++)
{
- sub_81BF2B8(sMirageTowerGfxBuffer,
- ((((OUTER_BUFFER_LENGTH - 1) - i) * INNER_BUFFER_LENGTH) + sUnknown_0203CF10[i].buffer[(sUnknown_0203CF10[i].currIndex)++]),
+ UpdateDisintegrationEffect(sMirageTowerGfxBuffer,
+ (OUTER_BUFFER_LENGTH - 1 - i) * INNER_BUFFER_LENGTH + sFallingTower[i].disintegrateRand[sFallingTower[i].disintegrateIdx++],
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]++;
if ((i % 2) == 1)
sBgShakeOffsets->bgVOFS--;
}
}
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;
return;
case 4:
@@ -617,7 +638,7 @@ static void DoMirageTowerDisintegration(u8 taskId)
break;
case 5:
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(sMirageTowerTilemapBuffer);
break;
@@ -635,127 +656,128 @@ static void DoMirageTowerDisintegration(u8 taskId)
EnableBothScriptContexts();
break;
}
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
-static void DoFossilFallAndSink(u8 taskId)
+static void Task_FossilFallAndSink(u8 taskId)
{
u16 i;
u8 *buffer;
- switch (gTasks[taskId].data[0])
+ switch (gTasks[taskId].tState)
{
case 1:
- sUnknown_0203CF0C = AllocZeroed(sizeof(*sUnknown_0203CF0C));
- sUnknown_0203CF0C->frameImageTiles = AllocZeroed(ROOT_FOSSIL_GFX_LENGTH);
- sUnknown_0203CF0C->frameImage = AllocZeroed(sizeof(*sUnknown_0203CF0C->frameImage));
- sUnknown_0203CF0C->unkC = AllocZeroed(ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16));
- sUnknown_0203CF0C->unk10 = 0;
+ sFallingFossil = AllocZeroed(sizeof(*sFallingFossil));
+ sFallingFossil->frameImageTiles = AllocZeroed(sizeof(sFossil_Gfx));
+ sFallingFossil->frameImage = AllocZeroed(sizeof(*sFallingFossil->frameImage));
+ sFallingFossil->disintegrateRand = AllocZeroed(FOSSIL_DISINTEGRATE_LENGTH * sizeof(u16));
+ sFallingFossil->disintegrateIdx = 0;
break;
case 2:
- buffer = sUnknown_0203CF0C->frameImageTiles;
- for (i = 0; i < ROOT_FOSSIL_GFX_LENGTH; i++, buffer++)
- *buffer = sRootFossil_Gfx[i];
+ buffer = sFallingFossil->frameImageTiles;
+ for (i = 0; i < sizeof(sFossil_Gfx); i++, buffer++)
+ *buffer = sFossil_Gfx[i];
break;
case 3:
- sUnknown_0203CF0C->frameImage->data = sUnknown_0203CF0C->frameImageTiles;
- sUnknown_0203CF0C->frameImage->size = ROOT_FOSSIL_GFX_LENGTH;
+ sFallingFossil->frameImage->data = sFallingFossil->frameImageTiles;
+ sFallingFossil->frameImage->size = sizeof(sFossil_Gfx);
break;
case 4:
{
- struct SpriteTemplate fossilTemplate;
-
- fossilTemplate = gUnknown_08617E00;
- fossilTemplate.images = (struct SpriteFrameImage *)(sUnknown_0203CF0C->frameImage);
- sUnknown_0203CF0C->spriteId = CreateSprite(&fossilTemplate, 128, -16, 1);
- gSprites[sUnknown_0203CF0C->spriteId].centerToCornerVecX = 0;
- gSprites[sUnknown_0203CF0C->spriteId].data[0] = gSprites[sUnknown_0203CF0C->spriteId].x;
- gSprites[sUnknown_0203CF0C->spriteId].data[1] = 1;
+ struct SpriteTemplate fossilTemplate = sSpriteTemplate_FallingFossil;
+ fossilTemplate.images = sFallingFossil->frameImage;
+ sFallingFossil->spriteId = CreateSprite(&fossilTemplate, 128, -16, 1);
+ gSprites[sFallingFossil->spriteId].centerToCornerVecX = 0;
+ gSprites[sFallingFossil->spriteId].data[0] = gSprites[sFallingFossil->spriteId].x;
+ gSprites[sFallingFossil->spriteId].data[1] = 1;
}
case 5:
- for (i = 0; i < ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH; i++)
- sUnknown_0203CF0C->unkC[i] = i;
+ // Initialize disintegration pattern
+ for (i = 0; i < FOSSIL_DISINTEGRATE_LENGTH; i++)
+ sFallingFossil->disintegrateRand[i] = i;
break;
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;
-
- rand1 = Random() % 0x100;
- rand2 = Random() % 0x100;
- SWAP(sUnknown_0203CF0C->unkC[rand2], sUnknown_0203CF0C->unkC[rand1], temp);
+ rand1 = Random() % FOSSIL_DISINTEGRATE_LENGTH;
+ rand2 = Random() % FOSSIL_DISINTEGRATE_LENGTH;
+ SWAP(sFallingFossil->disintegrateRand[rand2], sFallingFossil->disintegrateRand[rand1], temp);
}
- gSprites[sUnknown_0203CF0C->spriteId].callback = sub_81BF248;
+ gSprites[sFallingFossil->spriteId].callback = SpriteCB_FallingFossil;
break;
case 7:
- if (gSprites[sUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy)
+ // Wait for fossil to finish falling / disintegrating
+ if (gSprites[sFallingFossil->spriteId].callback != SpriteCallbackDummy)
return;
- DestroySprite(&gSprites[sUnknown_0203CF0C->spriteId]);
- FREE_AND_SET_NULL(sUnknown_0203CF0C->unkC);;
- FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImage);
- FREE_AND_SET_NULL(sUnknown_0203CF0C->frameImageTiles);
- FREE_AND_SET_NULL(sUnknown_0203CF0C);
+ DestroySprite(&gSprites[sFallingFossil->spriteId]);
+ FREE_AND_SET_NULL(sFallingFossil->disintegrateRand);;
+ FREE_AND_SET_NULL(sFallingFossil->frameImage);
+ FREE_AND_SET_NULL(sFallingFossil->frameImageTiles);
+ FREE_AND_SET_NULL(sFallingFossil);
break;
case 8:
EnableBothScriptContexts();
break;
}
-
- gTasks[taskId].data[0]++;
+ gTasks[taskId].tState++;
}
-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;
}
else if (sprite->y >= 96)
{
+ // Fossil has reached the ground, update disintegration animation
u8 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);
}
else
{
+ // Fossil is still falling
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;
- u16 var, var2;
- u8 r2_1, r4_1;
- u8 b2, c2;
+ u8 heightTiles, height, widthTiles, width;
+ u16 var, baseOffset;
+ u8 col, row;
+ u8 flag, tileMask;
- r4 = b / d;
- gUnknown_030012A8[0] = r4;
+ height = randId / size;
+ sDebug_DisintegrationData[0] = height;
- r2 = b % d;
- gUnknown_030012A8[1] = r2;
+ width = randId % size;
+ sDebug_DisintegrationData[1] = width;
- r4_1 = r4 & 7;
- r2_1 = r2 & 7;
- gUnknown_030012A8[2] = r4 & 7; //should be using r4_1, but that doesn't match
- gUnknown_030012A8[3] = r2 & 7; //"
-
- r0 = r2 / 8;
- r5 = r4 / 8;
+ row = height & 7;
+ col = width & 7;
+ sDebug_DisintegrationData[2] = height & 7;
+ sDebug_DisintegrationData[3] = width & 7;
- gUnknown_030012A8[4] = r2 / 8; //should be using r0, but that doesn't match
- gUnknown_030012A8[5] = r4 / 8; //should be using r5, but that doesn't match
+ widthTiles = width / 8;
+ heightTiles = height / 8;
+ sDebug_DisintegrationData[4] = width / 8;
+ sDebug_DisintegrationData[5] = height / 8;
- var = (d / 8) * (r5 * 64) + (r0 * 64);
- gUnknown_030012A8[6] = var;
+ var = (size / 8) * (heightTiles * 64) + (widthTiles * 64);
+ sDebug_DisintegrationData[6] = var;
- var2 = var + ((r4_1 * 8) + r2_1);
- var2 /= 2;
- gUnknown_030012A8[7] = var + ((r4_1 * 8) + r2_1); //should be using var2 with var2 being divided afterwards, but that doesn't match
+ baseOffset = var + ((row * 8) + col);
+ baseOffset /= 2;
+ sDebug_DisintegrationData[7] = var + ((row * 8) + col);
- b2 = ((b % 2) ^ 1);
- c2 = (c << (b2 << 2)) | 15 << (((b2 ^ 1) << 2));
- a[var2 + (e * 32)] &= c2;
+ flag = ((randId % 2) ^ 1);
+ tileMask = (c << (flag << 2)) | 15 << (((flag ^ 1) << 2));
+ tiles[baseOffset + (offset * 32)] &= tileMask;
}
diff --git a/src/player_pc.c b/src/player_pc.c
index a81fbc537..f44a111b3 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -119,7 +119,7 @@ static void sub_816C060(u16 itemId);
static void sub_816BEF0(s32 id);
static void sub_816B4DC(u8 taskId);
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
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)
{
sub_816C0C8();
- if (id != -2)
+ if (id != LIST_CANCEL)
sub_816C060(gSaveBlock1Ptr->pcItems[id].itemId);
else
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)
{
diff --git a/src/pokeblock.c b/src/pokeblock.c
index daf50a612..fad6858ec 100644
--- a/src/pokeblock.c
+++ b/src/pokeblock.c
@@ -264,7 +264,7 @@ static const union AnimCmd *const sSpriteAnimTable_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, 4),
@@ -273,9 +273,9 @@ static const union AffineAnimCmd sSpriteAffineAnim_85B26C8[] =
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 =
@@ -955,7 +955,7 @@ static void SpriteCB_ShakePokeblockCase(struct Sprite *sprite)
{
case 0:
sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
- sprite->affineAnims = sSpriteAffineAnimTable_85B26F0;
+ sprite->affineAnims = sAffineAnims_PokeblockCaseShake;
InitSpriteAffineAnim(sprite);
sprite->sState = 1;
sprite->sTimer = 0;
diff --git a/src/pokenav_region_map.c b/src/pokenav_region_map.c
index a5c9426db..3c210ed97 100755
--- a/src/pokenav_region_map.c
+++ b/src/pokenav_region_map.c
@@ -327,7 +327,9 @@ static u32 LoopedTask_OpenRegionMap(s32 taskState)
}
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;
case 2:
diff --git a/src/region_map.c b/src/region_map.c
index 6ef991921..1a25d140c 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -71,7 +71,7 @@ static EWRAM_DATA struct {
bool8 choseFlyLocation;
} *sFlyMap = NULL;
-static bool32 gUnknown_03001180;
+static bool32 sDrawFlyDestTextWindow;
// Static ROM declarations
@@ -621,7 +621,7 @@ bool8 LoadRegionMapGfx(void)
return TRUE;
}
-void sub_8123030(u16 color, u32 coeff)
+void BlendRegionMap(u16 color, u32 coeff)
{
BlendPalettes(0x380, coeff, color);
CpuCopy16(gPlttBufferFaded + 0x70, gPlttBufferUnfaded + 0x70, 0x60);
@@ -1696,7 +1696,7 @@ void CB2_OpenFlyMap(void)
CreateRegionMapPlayerIcon(1, 1);
sFlyMap->mapSecId = sFlyMap->regionMap.mapSecId;
StringFill(sFlyMap->nameBuffer, CHAR_SPACE, MAP_NAME_LENGTH);
- gUnknown_03001180 = TRUE;
+ sDrawFlyDestTextWindow = TRUE;
DrawFlyDestTextWindow();
gMain.state++;
break;
@@ -1782,30 +1782,32 @@ static void DrawFlyDestTextWindow(void)
name = sMultiNameFlyDestinations[i].name[sFlyMap->regionMap.posWithinMapSec];
AddTextPrinterParameterized(1, 1, name, GetStringRightAlignXOffset(1, name, 96), 17, 0, NULL);
ScheduleBgCopyTilemapToVram(0);
- gUnknown_03001180 = TRUE;
+ sDrawFlyDestTextWindow = TRUE;
}
break;
}
}
if (!namePrinted)
{
- if (gUnknown_03001180 == TRUE)
+ if (sDrawFlyDestTextWindow == TRUE)
{
ClearStdWindowAndFrameToTransparent(1, FALSE);
DrawStdFrameWithCustomTileAndPalette(0, FALSE, 101, 13);
}
else
{
+ // Window is already drawn, just empty it
FillWindowPixelBuffer(0, PIXEL_FILL(1));
}
AddTextPrinterParameterized(0, 1, sFlyMap->regionMap.mapSecName, 0, 1, 0, NULL);
ScheduleBgCopyTilemapToVram(0);
- gUnknown_03001180 = FALSE;
+ sDrawFlyDestTextWindow = FALSE;
}
}
else
{
- if (gUnknown_03001180 == TRUE)
+ // Selection is on MAPSECTYPE_NONE, draw empty fly destination text window
+ if (sDrawFlyDestTextWindow == TRUE)
{
ClearStdWindowAndFrameToTransparent(1, FALSE);
DrawStdFrameWithCustomTileAndPalette(0, FALSE, 101, 13);
@@ -1813,7 +1815,7 @@ static void DrawFlyDestTextWindow(void)
FillWindowPixelBuffer(0, PIXEL_FILL(1));
CopyWindowToVram(0, 2);
ScheduleBgCopyTilemapToVram(0);
- gUnknown_03001180 = FALSE;
+ sDrawFlyDestTextWindow = FALSE;
}
}
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 0ee20d1c6..f53483978 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -1203,6 +1203,8 @@ bool8 ScrCmd_turnvobject(struct ScriptContext *ctx)
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)
{
if (IsUpdateLinkStateCBActive())
@@ -1211,12 +1213,14 @@ bool8 ScrCmd_lockall(struct ScriptContext *ctx)
}
else
{
- ScriptFreezeObjectEvents();
+ FreezeObjects_WaitForPlayer();
SetupNativeScript(ctx, IsFreezePlayerFinished);
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)
{
if (IsUpdateLinkStateCBActive())
@@ -1227,12 +1231,12 @@ bool8 ScrCmd_lock(struct ScriptContext *ctx)
{
if (gObjectEvents[gSelectedObjectEvent].active)
{
- LockSelectedObjectEvent();
+ FreezeObjects_WaitForPlayerAndSelected();
SetupNativeScript(ctx, IsFreezeSelectedObjectAndPlayerFinished);
}
else
{
- ScriptFreezeObjectEvents();
+ FreezeObjects_WaitForPlayer();
SetupNativeScript(ctx, IsFreezePlayerFinished);
}
return TRUE;
diff --git a/src/shop.c b/src/shop.c
index d534e91f4..f4e3fa2d8 100755
--- a/src/shop.c
+++ b/src/shop.c
@@ -91,7 +91,7 @@ static void Task_ReturnToItemListAfterDecorationPurchase(u8 taskId);
static void Task_HandleShopMenuBuy(u8 taskId);
static void Task_HandleShopMenuSell(u8 taskId);
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 =
{
@@ -552,17 +552,17 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, s
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;
- if (item != LIST_CANCEL)
+ if (itemId != LIST_CANCEL)
{
if (sMartInfo.martType == MART_TYPE_NORMAL)
{
ConvertIntToDecimalStringN(
gStringVar1,
- ItemId_GetPrice(item) >> GetPriceReduction(POKENEWS_SLATEPORT),
+ ItemId_GetPrice(itemId) >> GetPriceReduction(POKENEWS_SLATEPORT),
STR_CONV_MODE_LEFT_ALIGN,
5);
}
@@ -570,7 +570,7 @@ static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y)
{
ConvertIntToDecimalStringN(
gStringVar1,
- gDecorations[item].price,
+ gDecorations[itemId].price,
STR_CONV_MODE_LEFT_ALIGN,
5);
}
diff --git a/src/tv.c b/src/tv.c
index 50adde3f4..14a0dc53f 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -36,6 +36,7 @@
#include "data.h"
#include "constants/battle_frontier.h"
#include "constants/contest.h"
+#include "constants/event_objects.h"
#include "constants/items.h"
#include "constants/layouts.h"
#include "constants/lilycove_lady.h"
@@ -335,19 +336,19 @@ static const u8 *const sTVPokemonTodaySuccessfulTextGroup[] = {
};
static const u8 *const sTVTodaysSmartShopperTextGroup[] = {
- gTVTodaysSmartShopperText00,
- gTVTodaysSmartShopperText01,
- gTVTodaysSmartShopperText02,
- gTVTodaysSmartShopperText03,
- gTVTodaysSmartShopperText04,
- gTVTodaysSmartShopperText05,
- gTVTodaysSmartShopperText06,
- gTVTodaysSmartShopperText07,
- gTVTodaysSmartShopperText08,
- gTVTodaysSmartShopperText09,
- gTVTodaysSmartShopperText10,
- gTVTodaysSmartShopperText11,
- gTVTodaysSmartShopperText12
+ [SMARTSHOPPER_STATE_INTRO] = SmartShopper_Text_Intro,
+ [SMARTSHOPPER_STATE_CLERK_NORMAL] = SmartShopper_Text_ClerkNormal,
+ [SMARTSHOPPER_STATE_RAND_COMMENT_1] = SmartShopper_Text_RandomComment1,
+ [SMARTSHOPPER_STATE_RAND_COMMENT_2] = SmartShopper_Text_RandomComment2,
+ [SMARTSHOPPER_STATE_RAND_COMMENT_3] = SmartShopper_Text_RandomComment3,
+ [SMARTSHOPPER_STATE_RAND_COMMENT_4] = SmartShopper_Text_RandomComment4,
+ [SMARTSHOPPER_STATE_SECOND_ITEM] = SmartShopper_Text_SecondItem,
+ [SMARTSHOPPER_STATE_THIRD_ITEM] = SmartShopper_Text_ThirdItem,
+ [SMARTSHOPPER_STATE_DURING_SALE] = SmartShopper_Text_DuringSale,
+ [SMARTSHOPPER_STATE_OUTRO_NORMAL] = SmartShopper_Text_OutroNormal,
+ [SMARTSHOPPER_STATE_IS_VIP] = SmartShopper_Text_IsVIP,
+ [SMARTSHOPPER_STATE_CLERK_MAX] = SmartShopper_Text_ClerkMax,
+ [SMARTSHOPPER_STATE_OUTRO_MAX] = SmartShopper_Text_OutroMax
};
static const u8 *const sTVBravoTrainerTextGroup[] = {
@@ -2785,7 +2786,7 @@ size_t CountDigits(int value)
return 1;
}
-static void sub_80EF40C(u8 varIdx, TVShow *show)
+static void SmartShopper_BufferPurchaseTotal(u8 varIdx, TVShow *show)
{
u8 i;
int price;
@@ -3421,7 +3422,7 @@ void GetMomOrDadStringForTVMessage(void)
void HideBattleTowerReporter(void)
{
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);
}
@@ -4460,78 +4461,85 @@ static void DoTVShowTodaysSmartShopper(void)
state = sTVShowState;
switch(state)
{
- case 0:
+ case SMARTSHOPPER_STATE_INTRO:
TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
GetMapName(gStringVar2, show->smartshopperShow.shopLocation, 0);
if (show->smartshopperShow.itemAmounts[0] >= 255)
- sTVShowState = 11;
+ sTVShowState = SMARTSHOPPER_STATE_CLERK_MAX;
else
- sTVShowState = 1;
+ sTVShowState = SMARTSHOPPER_STATE_CLERK_NORMAL;
break;
- case 1:
+ case SMARTSHOPPER_STATE_CLERK_NORMAL:
TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[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;
- case 2:
- case 4:
- case 5:
+ case SMARTSHOPPER_STATE_RAND_COMMENT_1:
+ case SMARTSHOPPER_STATE_RAND_COMMENT_3:
+ case SMARTSHOPPER_STATE_RAND_COMMENT_4:
if (show->smartshopperShow.itemIds[1] != ITEM_NONE)
- sTVShowState = 6;
+ sTVShowState = SMARTSHOPPER_STATE_SECOND_ITEM;
else
- sTVShowState = 10;
+ sTVShowState = SMARTSHOPPER_STATE_IS_VIP;
break;
- case 3:
+ case SMARTSHOPPER_STATE_RAND_COMMENT_2:
ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[0] + 1);
if (show->smartshopperShow.itemIds[1] != ITEM_NONE)
- sTVShowState = 6;
+ sTVShowState = SMARTSHOPPER_STATE_SECOND_ITEM;
else
- sTVShowState = 10;
+ sTVShowState = SMARTSHOPPER_STATE_IS_VIP;
break;
- case 6:
+ case SMARTSHOPPER_STATE_SECOND_ITEM:
+ // Clerk describes 2nd type of item player purchased
StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[1]));
ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[1]);
if (show->smartshopperShow.itemIds[2] != ITEM_NONE)
- sTVShowState = 7;
+ sTVShowState = SMARTSHOPPER_STATE_THIRD_ITEM;
else if (show->smartshopperShow.priceReduced == TRUE)
- sTVShowState = 8;
+ sTVShowState = SMARTSHOPPER_STATE_DURING_SALE;
else
- sTVShowState = 9;
+ sTVShowState = SMARTSHOPPER_STATE_OUTRO_NORMAL;
break;
- case 7:
+ case SMARTSHOPPER_STATE_THIRD_ITEM:
+ // Clerk describes 3rd type of item player purchased
StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[2]));
ConvertIntToDecimalString(2, show->smartshopperShow.itemAmounts[2]);
if (show->smartshopperShow.priceReduced == TRUE)
- sTVShowState = 8;
+ sTVShowState = SMARTSHOPPER_STATE_DURING_SALE;
else
- sTVShowState = 9;
+ sTVShowState = SMARTSHOPPER_STATE_OUTRO_NORMAL;
break;
- case 8:
+ case SMARTSHOPPER_STATE_DURING_SALE:
if (show->smartshopperShow.itemAmounts[0] >= 255)
- sTVShowState = 12;
+ sTVShowState = SMARTSHOPPER_STATE_OUTRO_MAX;
else
- sTVShowState = 9;
+ sTVShowState = SMARTSHOPPER_STATE_OUTRO_NORMAL;
break;
- case 9:
- sub_80EF40C(1, show);
+ case SMARTSHOPPER_STATE_OUTRO_NORMAL:
+ SmartShopper_BufferPurchaseTotal(1, show);
TVShowDone();
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)
- sTVShowState = 8;
+ sTVShowState = SMARTSHOPPER_STATE_DURING_SALE;
else
- sTVShowState = 9;
+ sTVShowState = SMARTSHOPPER_STATE_OUTRO_NORMAL;
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);
StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[0]));
if (show->smartshopperShow.priceReduced == TRUE)
- sTVShowState = 8;
+ sTVShowState = SMARTSHOPPER_STATE_DURING_SALE;
else
- sTVShowState = 12;
+ sTVShowState = SMARTSHOPPER_STATE_OUTRO_MAX;
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);
TVShowDone();
break;
diff --git a/src/union_room.c b/src/union_room.c
index bd6b303b9..8d02a260d 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -253,10 +253,10 @@ static bool32 UR_PrintFieldMessage(const u8 *);
static s32 GetChatLeaderActionRequestMessage(u8 *, u32, u16 *, struct WirelessLink_URoom *);
static void Task_InitUnionRoom(u8 taskId);
static bool8 AreGnameUnameDifferent(struct WirelessGnameUnamePair*, const struct WirelessGnameUnamePair*);
-static void ItemPrintFunc_PossibleGroupMembers(u8, s32, u8);
-static void ListMenuItemPrintFunc_UnionRoomGroups(u8, s32, u8);
-static void TradeBoardListMenuItemPrintFunc(u8, s32, u8);
-static void nullsub_14(u8, s32, u8);
+static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, u32 id, u8 y);
+static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, u32 id, u8 y);
+static void TradeBoardListMenuItemPrintFunc(u8 windowId, u32 id, u8 y);
+static void nullsub_14(u8 windowId, u32 id, u8 y);
#include "data/union_room.h"
@@ -835,7 +835,7 @@ static bool8 Leader_SetStateIfMemberListChanged(struct WirelessLink_Leader *data
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;
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;
}
-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;
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)
@@ -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 GFtgtGname *rfu;
@@ -4420,7 +4419,7 @@ static void HandleCancelActivity(bool32 setData)
static void UR_EnableScriptContext2AndFreezeObjectEvents(void)
{
ScriptContext2_Enable();
- ScriptFreezeObjectEvents();
+ FreezeObjects_WaitForPlayer();
}
static u8 GetActivePartnerSpriteGenderParam(struct WirelessLink_URoom *data)
diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c
index c012fd84d..671290e21 100644
--- a/src/union_room_player_avatar.c
+++ b/src/union_room_player_avatar.c
@@ -77,18 +77,27 @@ static const u8 sNextFacingDirection[] = {
[DIR_EAST] = DIR_NORTH
};
-// Local id 1 is the Nurse/Attendant, 2-9 are link players
-static const u8 sUnionRoomLocalIds[] = { 9, 8, 7, 2, 6, 5, 4, 3 };
-
-static const u16 sUnknown[] = {
- 0x2BF,
- 0x2C0,
- 0x2C1,
- 0x2C2,
- 0x2C3,
- 0x2C4,
- 0x2C5,
- 0x2C6
+static const u8 sUnionRoomLocalIds[] = {
+ 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
+};
+
+// Unused
+static const u16 sHidePlayerFlags[] = {
+ FLAG_HIDE_UNION_ROOM_PLAYER_1,
+ FLAG_HIDE_UNION_ROOM_PLAYER_2,
+ FLAG_HIDE_UNION_ROOM_PLAYER_3,
+ FLAG_HIDE_UNION_ROOM_PLAYER_4,
+ FLAG_HIDE_UNION_ROOM_PLAYER_5,
+ FLAG_HIDE_UNION_ROOM_PLAYER_6,
+ FLAG_HIDE_UNION_ROOM_PLAYER_7,
+ FLAG_HIDE_UNION_ROOM_PLAYER_8
};
static const u8 sMovement_UnionPlayerExit[2] = {