Merge with master

This commit is contained in:
DizzyEggg 2020-04-11 19:48:24 +02:00
commit 060b795d8e
139 changed files with 8405 additions and 8305 deletions

View File

@ -14,8 +14,10 @@ cache:
apt: true apt: true
install: install:
- pushd $HOME - pushd $HOME
- travis_retry wget https://github.com/devkitPro/buildscripts/releases/download/devkitARM_r50/devkitARM_r50-linux.tar.xz - travis_retry wget https://github.com/devkitPro/buildscripts/releases/download/devkitARM_r52/devkitARM_r52-linux.tar.xz
- tar xJf devkitARM*.tar.xz - tar xJf devkitARM*.tar.xz
- travis_retry wget https://github.com/devkitPro/devkitarm-rules/releases/download/v1.0.0/devkitarm-rules-1.0.0.tar.xz
- tar xJf devkitarm-rules-*.tar.xz -C $DEVKITARM
- travis_retry git clone https://github.com/pret/agbcc.git - travis_retry git clone https://github.com/pret/agbcc.git
- cd agbcc && ./build.sh && ./install.sh $TRAVIS_BUILD_DIR - cd agbcc && ./build.sh && ./install.sh $TRAVIS_BUILD_DIR
- popd - popd

View File

@ -1,2 +1,2 @@
gUnusedPokedexU8 gUnusedPokedexU8
gUnknown_030060B4 gPokedexVBlankCB

View File

@ -3,7 +3,7 @@
"name": "AlteringCave", "name": "AlteringCave",
"layout": "LAYOUT_ALTERING_CAVE", "layout": "LAYOUT_ALTERING_CAVE",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_ALTERING_CAVE_2", "region_map_section": "MAPSEC_ALTERING_CAVE",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "BirthIsland_Exterior", "name": "BirthIsland_Exterior",
"layout": "LAYOUT_BIRTH_ISLAND_EXTERIOR", "layout": "LAYOUT_BIRTH_ISLAND_EXTERIOR",
"music": "MUS_NONE", "music": "MUS_NONE",
"region_map_section": "MAPSEC_BIRTH_ISLAND_2", "region_map_section": "MAPSEC_BIRTH_ISLAND",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_INDOOR", "map_type": "MAP_TYPE_INDOOR",

View File

@ -3,7 +3,7 @@
"name": "BirthIsland_Harbor", "name": "BirthIsland_Harbor",
"layout": "LAYOUT_ISLAND_HARBOR", "layout": "LAYOUT_ISLAND_HARBOR",
"music": "MUS_NONE", "music": "MUS_NONE",
"region_map_section": "MAPSEC_BIRTH_ISLAND_2", "region_map_section": "MAPSEC_BIRTH_ISLAND",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_INDOOR", "map_type": "MAP_TYPE_INDOOR",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_B1F", "name": "NavelRock_B1F",
"layout": "LAYOUT_NAVEL_ROCK_B1F", "layout": "LAYOUT_NAVEL_ROCK_B1F",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Bottom", "name": "NavelRock_Bottom",
"layout": "LAYOUT_NAVEL_ROCK_BOTTOM", "layout": "LAYOUT_NAVEL_ROCK_BOTTOM",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Down01", "name": "NavelRock_Down01",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Down02", "name": "NavelRock_Down02",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Down03", "name": "NavelRock_Down03",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Down04", "name": "NavelRock_Down04",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Down05", "name": "NavelRock_Down05",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Down06", "name": "NavelRock_Down06",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Down07", "name": "NavelRock_Down07",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Down08", "name": "NavelRock_Down08",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Down09", "name": "NavelRock_Down09",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Down10", "name": "NavelRock_Down10",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Down11", "name": "NavelRock_Down11",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Entrance", "name": "NavelRock_Entrance",
"layout": "LAYOUT_NAVEL_ROCK_ENTRANCE", "layout": "LAYOUT_NAVEL_ROCK_ENTRANCE",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Exterior", "name": "NavelRock_Exterior",
"layout": "LAYOUT_NAVEL_ROCK_EXTERIOR", "layout": "LAYOUT_NAVEL_ROCK_EXTERIOR",
"music": "MUS_RG_NANASHIMA", "music": "MUS_RG_NANASHIMA",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_INDOOR", "map_type": "MAP_TYPE_INDOOR",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Fork", "name": "NavelRock_Fork",
"layout": "LAYOUT_NAVEL_ROCK_FORK", "layout": "LAYOUT_NAVEL_ROCK_FORK",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Harbor", "name": "NavelRock_Harbor",
"layout": "LAYOUT_ISLAND_HARBOR", "layout": "LAYOUT_ISLAND_HARBOR",
"music": "MUS_RG_NANASHIMA", "music": "MUS_RG_NANASHIMA",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_INDOOR", "map_type": "MAP_TYPE_INDOOR",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Top", "name": "NavelRock_Top",
"layout": "LAYOUT_NAVEL_ROCK_TOP", "layout": "LAYOUT_NAVEL_ROCK_TOP",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_SHADE", "weather": "WEATHER_SHADE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Up1", "name": "NavelRock_Up1",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Up2", "name": "NavelRock_Up2",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Up3", "name": "NavelRock_Up3",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM1",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -3,7 +3,7 @@
"name": "NavelRock_Up4", "name": "NavelRock_Up4",
"layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2", "layout": "LAYOUT_NAVEL_ROCK_LADDER_ROOM2",
"music": "MUS_RG_NANADUNGEON", "music": "MUS_RG_NANADUNGEON",
"region_map_section": "MAPSEC_NAVEL_ROCK2", "region_map_section": "MAPSEC_NAVEL_ROCK",
"requires_flash": false, "requires_flash": false,
"weather": "WEATHER_NONE", "weather": "WEATHER_NONE",
"map_type": "MAP_TYPE_UNDERGROUND", "map_type": "MAP_TYPE_UNDERGROUND",

View File

@ -172,7 +172,7 @@ AbnormalWeather_StartGroudonWeather:: @ 8273D1B
AbnormalWeather_EventScript_EndEventAndCleanup_1:: @ 8273D1F AbnormalWeather_EventScript_EndEventAndCleanup_1:: @ 8273D1F
lockall lockall
compare VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_KYOGRE_LOCATIONS_START compare VAR_ABNORMAL_WEATHER_LOCATION, MARINE_CAVE_LOCATIONS_START
goto_if_ge AbnormalWeather_EventScript_ShowRainEndedMessage goto_if_ge AbnormalWeather_EventScript_ShowRainEndedMessage
goto AbnormalWeather_EventScript_ShowSunEndedMessage goto AbnormalWeather_EventScript_ShowSunEndedMessage
end end

View File

@ -301,7 +301,7 @@ SecretBase_EventScript_PutAwayDecoration:: @ 8275D2E
end end
SecretBase_EventScript_PutAwayDecorationLoop:: @ 8275D39 SecretBase_EventScript_PutAwayDecorationLoop:: @ 8275D39
special sub_8129708 special PutAwayDecorationIteration
compare VAR_RESULT, 1 compare VAR_RESULT, 1
goto_if_eq SecretBase_EventScript_PutAwayDecorationEnd goto_if_eq SecretBase_EventScript_PutAwayDecorationEnd
addvar VAR_0x8004, 1 addvar VAR_0x8004, 1

View File

@ -31,7 +31,7 @@ gSpecials:: @ 81DBA64
def_special GetObjectEventLocalIdByFlag def_special GetObjectEventLocalIdByFlag
def_special GetSecretBaseTypeInFrontOfPlayer def_special GetSecretBaseTypeInFrontOfPlayer
def_special SetSecretBaseOwnerGfxId def_special SetSecretBaseOwnerGfxId
def_special sub_8129708 def_special PutAwayDecorationIteration
def_special EnterNewlyCreatedSecretBase def_special EnterNewlyCreatedSecretBase
def_special SetBattledOwnerFromResult def_special SetBattledOwnerFromResult
def_special DoSecretBasePCTurnOffEffect def_special DoSecretBasePCTurnOffEffect

View File

Before

Width:  |  Height:  |  Size: 815 B

After

Width:  |  Height:  |  Size: 815 B

View File

Before

Width:  |  Height:  |  Size: 778 B

After

Width:  |  Height:  |  Size: 778 B

View File

Before

Width:  |  Height:  |  Size: 87 B

After

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 135 B

After

Width:  |  Height:  |  Size: 135 B

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 536 B

After

Width:  |  Height:  |  Size: 536 B

View File

@ -67,6 +67,7 @@
#define FRONTIER_DOUBLES_PARTY_SIZE 4 #define FRONTIER_DOUBLES_PARTY_SIZE 4
#define FRONTIER_MULTI_PARTY_SIZE 2 #define FRONTIER_MULTI_PARTY_SIZE 2
#define MAX_FRONTIER_PARTY_SIZE FRONTIER_DOUBLES_PARTY_SIZE #define MAX_FRONTIER_PARTY_SIZE FRONTIER_DOUBLES_PARTY_SIZE
#define UNION_ROOM_PARTY_SIZE 2
// string lengths // string lengths
#define ITEM_NAME_LENGTH 14 #define ITEM_NAME_LENGTH 14

View File

@ -175,7 +175,7 @@
#define MAPSEC_SEVII_ISLE_22 0xAB #define MAPSEC_SEVII_ISLE_22 0xAB
#define MAPSEC_SEVII_ISLE_23 0xAC #define MAPSEC_SEVII_ISLE_23 0xAC
#define MAPSEC_SEVII_ISLE_24 0xAD #define MAPSEC_SEVII_ISLE_24 0xAD
#define MAPSEC_NAVEL_ROCK 0xAE #define MAPSEC_NAVEL_ROCK_FRLG 0xAE
#define MAPSEC_MT_EMBER 0xAF #define MAPSEC_MT_EMBER 0xAF
#define MAPSEC_BERRY_FOREST 0xB0 #define MAPSEC_BERRY_FOREST 0xB0
#define MAPSEC_ICEFALL_CAVE 0xB1 #define MAPSEC_ICEFALL_CAVE 0xB1
@ -184,11 +184,11 @@
#define MAPSEC_DOTTED_HOLE 0xB4 #define MAPSEC_DOTTED_HOLE 0xB4
#define MAPSEC_LOST_CAVE 0xB5 #define MAPSEC_LOST_CAVE 0xB5
#define MAPSEC_PATTERN_BUSH 0xB6 #define MAPSEC_PATTERN_BUSH 0xB6
#define MAPSEC_ALTERING_CAVE 0xB7 #define MAPSEC_ALTERING_CAVE_FRLG 0xB7
#define MAPSEC_TANOBY_CHAMBERS 0xB8 #define MAPSEC_TANOBY_CHAMBERS 0xB8
#define MAPSEC_THREE_ISLE_PATH 0xB9 #define MAPSEC_THREE_ISLE_PATH 0xB9
#define MAPSEC_TANOBY_KEY 0xBA #define MAPSEC_TANOBY_KEY 0xBA
#define MAPSEC_BIRTH_ISLAND 0xBB #define MAPSEC_BIRTH_ISLAND_FRLG 0xBB
#define MAPSEC_MONEAN_CHAMBER 0xBC #define MAPSEC_MONEAN_CHAMBER 0xBC
#define MAPSEC_LIPTOO_CHAMBER 0xBD #define MAPSEC_LIPTOO_CHAMBER 0xBD
#define MAPSEC_WEEPTH_CHAMBER 0xBE #define MAPSEC_WEEPTH_CHAMBER 0xBE
@ -201,7 +201,7 @@
#define MAPSEC_AQUA_HIDEOUT 0xC5 #define MAPSEC_AQUA_HIDEOUT 0xC5
#define MAPSEC_MAGMA_HIDEOUT 0xC6 #define MAPSEC_MAGMA_HIDEOUT 0xC6
#define MAPSEC_MIRAGE_TOWER 0xC7 #define MAPSEC_MIRAGE_TOWER 0xC7
#define MAPSEC_BIRTH_ISLAND_2 0xC8 #define MAPSEC_BIRTH_ISLAND 0xC8
#define MAPSEC_FARAWAY_ISLAND 0xC9 #define MAPSEC_FARAWAY_ISLAND 0xC9
#define MAPSEC_ARTISAN_CAVE 0xCA #define MAPSEC_ARTISAN_CAVE 0xCA
#define MAPSEC_MARINE_CAVE 0xCB #define MAPSEC_MARINE_CAVE 0xCB
@ -211,8 +211,8 @@
#define MAPSEC_UNDERWATER_UNK1 0xCF #define MAPSEC_UNDERWATER_UNK1 0xCF
#define MAPSEC_UNDERWATER_129 0xD0 #define MAPSEC_UNDERWATER_129 0xD0
#define MAPSEC_DESERT_UNDERPASS 0xD1 #define MAPSEC_DESERT_UNDERPASS 0xD1
#define MAPSEC_ALTERING_CAVE_2 0xD2 #define MAPSEC_ALTERING_CAVE 0xD2
#define MAPSEC_NAVEL_ROCK2 0xD3 #define MAPSEC_NAVEL_ROCK 0xD3
#define MAPSEC_TRAINER_HILL 0xD4 #define MAPSEC_TRAINER_HILL 0xD4
#define MAPSEC_NONE 0xD5 #define MAPSEC_NONE 0xD5

File diff suppressed because it is too large Load Diff

View File

@ -39,28 +39,31 @@
// These are the "abnormal weather events" that are used // These are the "abnormal weather events" that are used
// to find Kyogre and Groudon. // to find Kyogre and Groudon.
#define ABNORMAL_WEATHER_COUNT_PER_LEGENDARY 8 #define ABNORMAL_WEATHER_LOCATIONS (MARINE_CAVE_LOCATIONS + TERRA_CAVE_LOCATIONS)
#define ABNORMAL_WEATHER_GROUDON_LOCATIONS_START 1 #define ABNORMAL_WEATHER_NONE 0
#define ABNORMAL_WEATHER_KYOGRE_LOCATIONS_START 1 + ABNORMAL_WEATHER_COUNT_PER_LEGENDARY
#define ABNORMAL_WEATHER_NONE 0 // Groudon/Terra Cave locations
// Groudon locations #define TERRA_CAVE_LOCATIONS_START 1
#define ABNORMAL_WEATHER_ROUTE_114_NORTH 1 #define ABNORMAL_WEATHER_ROUTE_114_NORTH (TERRA_CAVE_LOCATIONS_START + 0)
#define ABNORMAL_WEATHER_ROUTE_114_SOUTH 2 #define ABNORMAL_WEATHER_ROUTE_114_SOUTH (TERRA_CAVE_LOCATIONS_START + 1)
#define ABNORMAL_WEATHER_ROUTE_115_WEST 3 #define ABNORMAL_WEATHER_ROUTE_115_WEST (TERRA_CAVE_LOCATIONS_START + 2)
#define ABNORMAL_WEATHER_ROUTE_115_EAST 4 #define ABNORMAL_WEATHER_ROUTE_115_EAST (TERRA_CAVE_LOCATIONS_START + 3)
#define ABNORMAL_WEATHER_ROUTE_116_NORTH 5 #define ABNORMAL_WEATHER_ROUTE_116_NORTH (TERRA_CAVE_LOCATIONS_START + 4)
#define ABNORMAL_WEATHER_ROUTE_116_SOUTH 6 #define ABNORMAL_WEATHER_ROUTE_116_SOUTH (TERRA_CAVE_LOCATIONS_START + 5)
#define ABNORMAL_WEATHER_ROUTE_118_EAST 7 #define ABNORMAL_WEATHER_ROUTE_118_EAST (TERRA_CAVE_LOCATIONS_START + 6)
#define ABNORMAL_WEATHER_ROUTE_118_WEST 8 #define ABNORMAL_WEATHER_ROUTE_118_WEST (TERRA_CAVE_LOCATIONS_START + 7)
// Kyogre locations #define TERRA_CAVE_LOCATIONS 8
#define ABNORMAL_WEATHER_ROUTE_105_NORTH 9
#define ABNORMAL_WEATHER_ROUTE_105_SOUTH 10 // Kyogre/Marina Cave locations
#define ABNORMAL_WEATHER_ROUTE_125_WEST 11 #define MARINE_CAVE_LOCATIONS_START (TERRA_CAVE_LOCATIONS_START + TERRA_CAVE_LOCATIONS)
#define ABNORMAL_WEATHER_ROUTE_125_EAST 12 #define ABNORMAL_WEATHER_ROUTE_105_NORTH (MARINE_CAVE_LOCATIONS_START + 0)
#define ABNORMAL_WEATHER_ROUTE_127_NORTH 13 #define ABNORMAL_WEATHER_ROUTE_105_SOUTH (MARINE_CAVE_LOCATIONS_START + 1)
#define ABNORMAL_WEATHER_ROUTE_127_SOUTH 14 #define ABNORMAL_WEATHER_ROUTE_125_WEST (MARINE_CAVE_LOCATIONS_START + 2)
#define ABNORMAL_WEATHER_ROUTE_129_WEST 15 #define ABNORMAL_WEATHER_ROUTE_125_EAST (MARINE_CAVE_LOCATIONS_START + 3)
#define ABNORMAL_WEATHER_ROUTE_129_EAST 16 #define ABNORMAL_WEATHER_ROUTE_127_NORTH (MARINE_CAVE_LOCATIONS_START + 4)
#define ABNORMAL_WEATHER_ROUTE_127_SOUTH (MARINE_CAVE_LOCATIONS_START + 5)
#define ABNORMAL_WEATHER_ROUTE_129_WEST (MARINE_CAVE_LOCATIONS_START + 6)
#define ABNORMAL_WEATHER_ROUTE_129_EAST (MARINE_CAVE_LOCATIONS_START + 7)
#define MARINE_CAVE_LOCATIONS 8
#endif // GUARD_CONSTANTS_WEATHER_H #endif // GUARD_CONSTANTS_WEATHER_H

View File

@ -52,14 +52,6 @@ struct Decoration
const u16 *tiles; const u16 *tiles;
}; };
struct DecorationPCContext
{
u8 *items;
u8 *pos;
u8 size;
u8 isPlayerRoom;
};
extern const struct Decoration gDecorations[]; extern const struct Decoration gDecorations[];
extern EWRAM_DATA u8 *gCurDecorationItems; extern EWRAM_DATA u8 *gCurDecorationItems;
extern EWRAM_DATA u8 gCurDecorationIndex; extern EWRAM_DATA u8 gCurDecorationIndex;

View File

@ -12,10 +12,10 @@ extern struct DecorationInventory gDecorationInventories[];
void SetDecorationInventoriesPointers(void); void SetDecorationInventoriesPointers(void);
void ClearDecorationInventories(void); void ClearDecorationInventories(void);
s8 GetFirstEmptyDecorSlot(u8 category); s8 GetFirstEmptyDecorSlot(u8 category);
u8 CheckHasDecoration(u8); u8 CheckHasDecoration(u8 decor);
u8 DecorationAdd(u8); u8 DecorationAdd(u8 decor);
u8 DecorationCheckSpace(u8); u8 DecorationCheckSpace(u8 decor);
s8 DecorationRemove(u8); s8 DecorationRemove(u8 decor);
void CondenseDecorationsInCategory(u8 category); void CondenseDecorationsInCategory(u8 category);
u8 GetNumOwnedDecorationsInCategory(u8 category); u8 GetNumOwnedDecorationsInCategory(u8 category);
u8 GetNumOwnedDecorations(void); u8 GetNumOwnedDecorations(void);

26
include/digit_obj_util.h Normal file
View File

@ -0,0 +1,26 @@
#ifndef GUARD_DIGIT_OBJ_UTIL_H
#define GUARD_DIGIT_OBJ_UTIL_H
struct DigitObjUtilTemplate
{
u8 strConvMode:2;
u8 shape:2;
u8 size:2;
u8 priority:2;
u8 oamCount;
u8 xDelta;
s16 x;
s16 y;
const struct SpriteSheet *spriteSheet;
const struct SpritePalette *spritePal;
};
bool32 DigitObjUtil_Init(u32 count);
void DigitObjUtil_Free(void);
bool32 DigitObjUtil_CreatePrinter(u32 id, s32 num, const struct DigitObjUtilTemplate *template);
void DigitObjUtil_PrintNumOn(u32 id, s32 arg1);
void DigitObjUtil_DeletePrinter(u32 id);
void DigitObjUtil_HideOrShow(u32 id, bool32 arg1);
u8 GetTilesPerImage(u32 shape, u32 size);
#endif // GUARD_DIGIT_OBJ_UTIL_H

View File

@ -48,7 +48,7 @@ bool8 PartyHasMonWithSurf(void);
bool8 IsPlayerFacingSurfableFishableWater(void); bool8 IsPlayerFacingSurfableFishableWater(void);
bool8 IsPlayerSurfingNorth(void); bool8 IsPlayerSurfingNorth(void);
void sub_808C228(u8 direction); void sub_808C228(u8 direction);
u8 sub_808BCD0(void); u8 GetPlayerAvatarFlags(void);
void sub_808B578(void); void sub_808B578(void);
u8 GetFRLGAvatarGraphicsIdByGender(u8); u8 GetFRLGAvatarGraphicsIdByGender(u8);
u8 GetRSAvatarGraphicsIdByGender(u8); u8 GetRSAvatarGraphicsIdByGender(u8);

View File

@ -304,7 +304,7 @@ enum
struct PlayerAvatar struct PlayerAvatar
{ {
/*0x00*/ u8 flags; /*0x00*/ u8 flags;
/*0x01*/ u8 unk1; // used to be named bike, but its definitely not that. seems to be some transition flags /*0x01*/ u8 transitionFlags; // used to be named bike, but its definitely not that. seems to be some transition flags
/*0x02*/ u8 runningState; // this is a static running state. 00 is not moving, 01 is turn direction, 02 is moving. /*0x02*/ u8 runningState; // this is a static running state. 00 is not moving, 01 is turn direction, 02 is moving.
/*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning. /*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning.
/*0x04*/ u8 spriteId; /*0x04*/ u8 spriteId;

View File

@ -643,7 +643,7 @@ struct MauvilleManHipster
struct MauvilleOldManTrader struct MauvilleOldManTrader
{ {
u8 id; u8 id;
u8 decorIds[NUM_TRADER_ITEMS]; u8 decorations[NUM_TRADER_ITEMS];
u8 playerNames[NUM_TRADER_ITEMS][11]; u8 playerNames[NUM_TRADER_ITEMS][11];
u8 alreadyTraded; u8 alreadyTraded;
u8 language[NUM_TRADER_ITEMS]; u8 language[NUM_TRADER_ITEMS];
@ -934,16 +934,16 @@ struct SaveBlock1
/*0x159C*/ u32 gameStats[NUM_GAME_STATS]; /*0x159C*/ u32 gameStats[NUM_GAME_STATS];
/*0x169C*/ struct BerryTree berryTrees[BERRY_TREES_COUNT]; /*0x169C*/ struct BerryTree berryTrees[BERRY_TREES_COUNT];
/*0x1A9C*/ struct SecretBase secretBases[SECRET_BASES_COUNT]; /*0x1A9C*/ struct SecretBase secretBases[SECRET_BASES_COUNT];
/*0x271C*/ u8 playerRoomDecor[DECOR_MAX_PLAYERS_HOUSE]; /*0x271C*/ u8 playerRoomDecorations[DECOR_MAX_PLAYERS_HOUSE];
/*0x2728*/ u8 playerRoomDecorPos[DECOR_MAX_PLAYERS_HOUSE]; /*0x2728*/ u8 playerRoomDecorationPositions[DECOR_MAX_PLAYERS_HOUSE];
/*0x2734*/ u8 decorDesk[10]; /*0x2734*/ u8 decorationDesks[10];
/*0x273E*/ u8 decorChair[10]; /*0x273E*/ u8 decorationChairs[10];
/*0x2748*/ u8 decorPlant[10]; /*0x2748*/ u8 decorationPlants[10];
/*0x2752*/ u8 decorOrnament[30]; /*0x2752*/ u8 decorationOrnaments[30];
/*0x2770*/ u8 decorMat[30]; /*0x2770*/ u8 decorationMats[30];
/*0x278E*/ u8 decorPoster[10]; /*0x278E*/ u8 decorationPosters[10];
/*0x2798*/ u8 decorDoll[40]; /*0x2798*/ u8 decorationDolls[40];
/*0x27C0*/ u8 decorCushion[10]; /*0x27C0*/ u8 decorationCushions[10];
/*0x27CA*/ u8 padding_27CA[2]; /*0x27CA*/ u8 padding_27CA[2];
/*0x27CC*/ TVShow tvShows[TV_SHOWS_COUNT]; /*0x27CC*/ TVShow tvShows[TV_SHOWS_COUNT];
/*0x2B50*/ PokeNews pokeNews[POKE_NEWS_COUNT]; /*0x2B50*/ PokeNews pokeNews[POKE_NEWS_COUNT];

View File

@ -3282,25 +3282,24 @@ extern const u32 gBattleTerrainPalette_StadiumDrake[];
extern const u32 gBattleTerrainPalette_StadiumWallace[]; extern const u32 gBattleTerrainPalette_StadiumWallace[];
// pokedex // pokedex
extern const u32 gPokedexMenu2_Gfx[]; extern const u32 gPokedexInterface_Gfx[];
extern const u16 gPokedexText_Pal[]; extern const u16 gPokedexBgHoenn_Pal[];
extern const u32 gPokedexMenu_Gfx[]; extern const u32 gPokedexMenu_Gfx[];
extern const u8 gPokedexTilemap_Main[]; extern const u8 gPokedexList_Tilemap[];
extern const u8 gPokedexTilemap_MainUnderlay[]; extern const u8 gPokedexListUnderlay_Tilemap[];
extern const u8 gPokedexTilemap_StartMenu1[]; extern const u8 gPokedexStartMenuMain_Tilemap[];
extern const u8 gPokedexTilemap_StartMenu2[]; extern const u8 gPokedexStartMenuSearchResults_Tilemap[];
extern const u16 gPokedexHoennBg_Pal[]; extern const u16 gPokedexSearchResults_Pal[];
extern const u16 gPokedexText_Pal[]; extern const u16 gPokedexBgNational_Pal[];
extern const u16 gPokedexNationalBg_Pal[]; extern const u8 gPokedexInfoScreen_Tilemap[];
extern const u8 gPokedexTilemap_DescriptionScreen[]; extern const u8 gPokedexCryScreen_Tilemap[];
extern const u8 gPokedexTilemap_CryScreen[]; extern const u8 gPokedexSizeScreen_Tilemap[];
extern const u8 gPokedexTilemap_SizeScreen[]; extern const u8 gPokedexScreenSelectBarMain_Tilemap[];
extern const u8 gPokedexTilemap_ScreenSelectBar1[]; extern const u8 gPokedexScreenSelectBarSubmenu_Tilemap[];
extern const u8 gPokedexTilemap_ScreenSelectBar2[]; extern const u16 gPokedexCaughtScreen_Pal[];
extern const u16 gPokedexCaughtScreenFade_Pal[];
extern const u32 gPokedexSearchMenu_Gfx[]; extern const u32 gPokedexSearchMenu_Gfx[];
extern const u32 gPokedexSearch2_Tilemap[]; extern const u32 gPokedexSearchMenuHoenn_Tilemap[];
extern const u32 gPokedexSearch1_Tilemap[]; extern const u32 gPokedexSearchMenuNational_Tilemap[];
extern const u16 gPokedexSearchMenu_Pal[]; extern const u16 gPokedexSearchMenu_Pal[];
// berry tag screen // berry tag screen

View File

@ -0,0 +1,7 @@
#ifndef GUARD_MINIGAME_COUNTDOWN_H
#define GUARD_MINIGAME_COUNTDOWN_H
void StartMinigameCountdown(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority);
bool32 IsMinigameCountdownRunning(void);
#endif //GUARD_MINIGAME_COUNTDOWN_H

View File

@ -24,8 +24,8 @@ extern struct PartyMenu gPartyMenu;
extern bool8 gPartyMenuUseExitCallback; extern bool8 gPartyMenuUseExitCallback;
extern u8 gSelectedMonPartyId; extern u8 gSelectedMonPartyId;
extern MainCallback gPostMenuFieldCallback; extern MainCallback gPostMenuFieldCallback;
extern u8 gSelectedOrderFromParty[4]; extern u8 gSelectedOrderFromParty[MAX_FRONTIER_PARTY_SIZE];
extern u8 gBattlePartyCurrentOrder[3]; extern u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2];
extern void (*gItemUseCB)(u8, TaskFunc); extern void (*gItemUseCB)(u8, TaskFunc);

View File

@ -2,11 +2,7 @@
#define GUARD_POKEDEX_H #define GUARD_POKEDEX_H
extern u8 gUnusedPokedexU8; extern u8 gUnusedPokedexU8;
extern void (*gUnknown_030060B4)(void); extern void (*gPokedexVBlankCB)(void);
#define KANTO_DEX_COUNT 151
#define HOENN_DEX_COUNT 202
#define NATIONAL_DEX_COUNT 386
enum enum
{ {
@ -39,12 +35,12 @@ void ResetPokedex(void);
u16 GetPokedexHeightWeight(u16 dexNum, u8 data); u16 GetPokedexHeightWeight(u16 dexNum, u8 data);
u16 GetNationalPokedexCount(u8); u16 GetNationalPokedexCount(u8);
u16 GetHoennPokedexCount(u8); u16 GetHoennPokedexCount(u8);
u8 CreateDexDisplayMonDataTask(u16 dexNum, u32 trainerId, u32 personality); u8 DisplayCaughtMonDexPage(u16 dexNum, u32 otId, u32 personality);
s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId); s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId);
u16 CreateMonSpriteFromNationalDexNumber(u16, s16, s16, u16); u16 CreateMonSpriteFromNationalDexNumber(u16, s16, s16, u16);
bool16 HasAllHoennMons(void); bool16 HasAllHoennMons(void);
void ResetPokedexScrollPositions(void); void ResetPokedexScrollPositions(void);
bool16 HasAllMons(void); bool16 HasAllMons(void);
void CB2_Pokedex(void); void CB2_OpenPokedex(void);
#endif // GUARD_POKEDEX_H #endif // GUARD_POKEDEX_H

View File

@ -0,0 +1,17 @@
#ifndef GUARD_POKEDEX_AREA_REGION_MAP_H
#define GUARD_POKEDEX_AREA_REGION_MAP_H
struct PokedexAreaMapTemplate
{
u32 bg:2;
u32 offset:8;
u32 mode:2;
u32 unk:20; // never read
};
void LoadPokedexAreaMapGfx(const struct PokedexAreaMapTemplate *);
bool32 sub_81C4E90(void);
void PokedexAreaMapChangeBgY(u32);
void FreePokedexAreaMapBgNum(void);
#endif // GUARD_POKEDEX_AREA_REGION_MAP_H

View File

@ -1,10 +1,10 @@
#ifndef GUARD_POKEDEX_CRY_SCREEN_H #ifndef GUARD_POKEDEX_CRY_SCREEN_H
#define GUARD_POKEDEX_CRY_SCREEN_H #define GUARD_POKEDEX_CRY_SCREEN_H
struct CryRelatedStruct struct CryScreenWindow
{ {
u16 unk0; u16 unk0; // Assigned to val that's never read
u8 unk2; u8 unk2; // Never read
u8 paletteNo; u8 paletteNo;
u8 xPos; u8 xPos;
u8 yPos; u8 yPos;
@ -12,10 +12,10 @@ struct CryRelatedStruct
extern u8 gDexCryScreenState; extern u8 gDexCryScreenState;
bool8 sub_8145354(struct CryRelatedStruct*, u8); bool8 LoadCryWaveformWindow(struct CryScreenWindow*, u8);
void sub_814545C(u8); void UpdateCryWaveformWindow(u8);
void sub_8145534(u16); void CryScreenPlayButton(u16);
bool8 sub_8145850(struct CryRelatedStruct*, u8); bool8 LoadCryMeter(struct CryScreenWindow*, u8);
void sub_8145914(void); void FreeCryScreen(void);
#endif #endif

View File

@ -8,7 +8,5 @@ bool32 IsSpeciesAllowedInPokemonJump(u16 species);
void IsPokemonJumpSpeciesInParty(void); void IsPokemonJumpSpeciesInParty(void);
void ResetPokeJumpResults(void); void ResetPokeJumpResults(void);
void ShowPokemonJumpRecords(void); void ShowPokemonJumpRecords(void);
void sub_802EB24(s16 tileTag, s16 palTag, s16 x, s16 y, u8 subpriority);
bool32 sub_802EB84(void);
#endif // GUARD_POKEMON_JUMP_H #endif // GUARD_POKEMON_JUMP_H

View File

@ -65,24 +65,44 @@ enum
POKENAV_MODE_FORCE_CALL_EXIT, // Pokenav tutorial after calling Mr. Stone POKENAV_MODE_FORCE_CALL_EXIT, // Pokenav tutorial after calling Mr. Stone
}; };
enum
{
POKENAV_GFX_MAIN_MENU,
POKENAV_GFX_CONDITION_MENU,
POKENAV_GFX_RIBBONS_MENU,
POKENAV_GFX_MATCH_CALL_MENU,
POKENAV_GFX_MAP_MENU_ZOOMED_OUT,
POKENAV_GFX_MAP_MENU_ZOOMED_IN,
POKENAV_GFX_PARTY_MENU,
POKENAV_GFX_SEARCH_MENU,
POKENAV_GFX_COOL_MENU,
POKENAV_GFX_BEAUTY_MENU,
POKENAV_GFX_CUTE_MENU,
POKENAV_GFX_SMART_MENU,
POKENAV_GFX_TOUGH_MENU,
POKENAV_GFX_MENUS_END,
};
#define POKENAV_GFX_SUBMENUS_START POKENAV_GFX_PARTY_MENU
#define POKENAV_MENU_IDS_START 100000 #define POKENAV_MENU_IDS_START 100000
enum enum
{ {
POKENAV_MENU_0 = POKENAV_MENU_IDS_START, POKENAV_MAIN_MENU = POKENAV_MENU_IDS_START,
POKENAV_MENU_1, POKENAV_MAIN_MENU_CURSOR_ON_MAP,
POKENAV_MENU_2, POKENAV_CONDITION_MENU,
POKENAV_MENU_3, POKENAV_CONDITION_SEARCH_MENU,
POKENAV_MENU_4, POKENAV_MAIN_MENU_CURSOR_ON_MATCH_CALL,
POKENAV_MENU_5, POKENAV_MAIN_MENU_CURSOR_ON_RIBBONS,
POKENAV_MENU_6, POKENAV_REGION_MAP,
POKENAV_MENU_7, POKENAV_CONDITION_PARTY,
POKENAV_MENU_8, POKENAV_CONDITION_SEARCH_RESULTS,
POKENAV_MENU_9, POKENAV_MENU_9, // Condition
POKENAV_MENU_A, POKENAV_MENU_A, // Condition
POKENAV_MENU_B, POKENAV_MATCH_CALL,
POKENAV_MENU_C, POKENAV_RIBBONS_MON_LIST,
POKENAV_MENU_D, POKENAV_MENU_D, // Ribbons
POKENAV_MENU_E, POKENAV_MENU_E, // Ribbons
}; };
enum enum
@ -220,6 +240,15 @@ enum
POKENAV_MC_FUNC_EXIT POKENAV_MC_FUNC_EXIT
}; };
enum
{
POKENAV_MAP_FUNC_NONE,
POKENAV_MAP_FUNC_CURSOR_MOVED,
POKENAV_MAP_FUNC_ZOOM_OUT,
POKENAV_MAP_FUNC_ZOOM_IN,
POKENAV_MAP_FUNC_EXIT,
};
// pokenav.c // pokenav.c
void SetSelectedConditionSearch(u32); void SetSelectedConditionSearch(u32);
u32 GetSelectedConditionSearch(void); u32 GetSelectedConditionSearch(void);
@ -275,7 +304,7 @@ void sub_81C7850(u32 a0);
u32 sub_81C786C(void); u32 sub_81C786C(void);
void LoadLeftHeaderGfxForIndex(u32 arg0); void LoadLeftHeaderGfxForIndex(u32 arg0);
void sub_81C7FA0(u32 arg0, bool32 arg1, bool32 arg2); void sub_81C7FA0(u32 arg0, bool32 arg1, bool32 arg2);
void sub_81C7AC0(s32 a0); void PokenavFadeScreen(s32 fadeType);
bool32 sub_81C8010(void); bool32 sub_81C8010(void);
void InitBgTemplates(const struct BgTemplate *templates, int count); void InitBgTemplates(const struct BgTemplate *templates, int count);
bool32 IsPaletteFadeActive(void); bool32 IsPaletteFadeActive(void);
@ -298,30 +327,30 @@ void sub_81C7834(void *func1, void *func2);
void ShutdownPokenav(void); void ShutdownPokenav(void);
// pokenav_menu_handler_1.c // pokenav_menu_handler_1.c
bool32 PokenavCallback_Init_0(void); bool32 PokenavCallback_Init_MainMenuCursorOnMap(void);
bool32 PokenavCallback_Init_4(void); bool32 PokenavCallback_Init_MainMenuCursorOnMatchCall(void);
bool32 PokenavCallback_Init_5(void); bool32 PokenavCallback_Init_MainMenuCursorOnRibbons(void);
bool32 PokenavCallback_Init_2(void); bool32 PokenavCallback_Init_ConditionMenu(void);
bool32 PokenavCallback_Init_3(void); bool32 PokenavCallback_Init_ConditionSearchMenu(void);
u32 sub_81C941C(void); u32 GetMenuHandlerCallback(void);
void sub_81C9430(void); void FreeMenuHandlerSubstruct1(void);
int GetPokenavMenuType(void); int GetPokenavMenuType(void);
int GetPokenavCursorPos(void); int GetPokenavCursorPos(void);
int GetCurrentMenuItemId(void); int GetCurrentMenuItemId(void);
u16 GetHelpBarTextId(void); u16 GetHelpBarTextId(void);
// pokenav_menu_handler_2.c // pokenav_menu_handler_2.c
bool32 sub_81C9924(void); bool32 OpenPokenavMenuInitial(void);
bool32 sub_81C9940(void); bool32 OpenPokenavMenuNotInitial(void);
void CreateMenuHandlerLoopedTask(s32 ltIdx); void CreateMenuHandlerLoopedTask(s32 ltIdx);
bool32 sub_81C99C0(void); bool32 IsMenuHandlerLoopedTaskActive(void);
void sub_81C99D4(void); void FreeMenuHandlerSubstruct2(void);
void sub_81CAADC(void); void sub_81CAADC(void);
// pokenav_match_call_1.c // pokenav_match_call_1.c
bool32 PokenavCallback_Init_11(void); bool32 PokenavCallback_Init_MatchCall(void);
u32 sub_81CAB24(void); u32 GetMatchCallCallback(void);
void sub_81CAB38(void); void FreeMatchCallSubstruct1(void);
int sub_81CAE28(void); int sub_81CAE28(void);
int GetNumberRegistered(void); int GetNumberRegistered(void);
int sub_81CAE48(void); int sub_81CAE48(void);
@ -341,19 +370,19 @@ int GetIndexDeltaOfNextCheckPageUp(int index);
bool32 IsRematchEntryRegistered(int index); bool32 IsRematchEntryRegistered(int index);
// pokenav_match_call_2.c // pokenav_match_call_2.c
bool32 sub_81CB260(void); bool32 OpenMatchCall(void);
void CreateMatchCallLoopedTask(s32 index); void CreateMatchCallLoopedTask(s32 index);
u32 sub_81CB2CC(void); bool32 IsMatchCallLoopedTaskActive(void);
void sub_81CB2E0(void); void FreeMatchCallSubstruct2(void);
// pokenav_region_map.c // pokenav_region_map.c
u32 PokenavCallback_Init_6(void); u32 PokenavCallback_Init_RegionMap(void);
void sub_81CC524(void); u32 GetRegionMapCallback(void);
u32 sub_81CC554(void); bool32 OpenPokenavRegionMap(void);
bool32 sub_81CC5F4(void); void CreateRegionMapLoopedTask(s32);
void sub_81CC62C(s32); bool32 IsRegionMapLoopedTaskActive(void);
u32 sub_81CC65C(void); void FreeRegionMapSubstruct1(void);
void sub_81CC670(void); void FreeRegionMapSubstruct2(void);
// pokenav_conditions_1.c // pokenav_conditions_1.c
u32 PokenavCallback_Init_7(void); u32 PokenavCallback_Init_7(void);

View File

@ -4,20 +4,21 @@
#include "bg.h" #include "bg.h"
// Exported type declarations // Exported type declarations
#define MAP_NAME_LENGTH 16
enum enum
{ {
INPUT_EVENT_NONE, MAP_INPUT_NONE,
INPUT_EVENT_MOVE_START, MAP_INPUT_MOVE_START,
INPUT_EVENT_MOVE_CONT, MAP_INPUT_MOVE_CONT,
INPUT_EVENT_MOVE_END, MAP_INPUT_MOVE_END,
INPUT_EVENT_A_BUTTON, MAP_INPUT_A_BUTTON,
INPUT_EVENT_B_BUTTON, MAP_INPUT_B_BUTTON,
}; };
enum { enum {
MAPSECTYPE_NONE, MAPSECTYPE_NONE,
MAPSECTYPE_PLAIN, MAPSECTYPE_ROUTE,
MAPSECTYPE_CITY_CANFLY, MAPSECTYPE_CITY_CANFLY,
MAPSECTYPE_CITY_CANTFLY, MAPSECTYPE_CITY_CANTFLY,
MAPSECTYPE_BATTLE_FRONTIER MAPSECTYPE_BATTLE_FRONTIER
@ -25,9 +26,9 @@ enum {
struct RegionMap { struct RegionMap {
/*0x000*/ u16 mapSecId; /*0x000*/ u16 mapSecId;
/*0x002*/ u8 iconDrawType; /*0x002*/ u8 mapSecType;
/*0x003*/ u8 posWithinMapSec; /*0x003*/ u8 posWithinMapSec;
/*0x004*/ u8 mapSecName[0x14]; /*0x004*/ u8 mapSecName[20];
/*0x018*/ u8 (*inputCallback)(void); /*0x018*/ u8 (*inputCallback)(void);
/*0x01c*/ struct Sprite *cursorSprite; /*0x01c*/ struct Sprite *cursorSprite;
/*0x020*/ struct Sprite *playerIconSprite; /*0x020*/ struct Sprite *playerIconSprite;
@ -90,28 +91,28 @@ struct RegionMapLocation
// Exported RAM declarations // Exported RAM declarations
// Exported ROM declarations // Exported ROM declarations
void sub_8122CF8(struct RegionMap *regionMap, const struct BgTemplate *template, bool8 zoomed); void InitRegionMapData(struct RegionMap *regionMap, const struct BgTemplate *template, bool8 zoomed);
bool8 sub_8122DB0(void); bool8 LoadRegionMapGfx(void);
void UpdateRegionMapVideoRegs(void); void UpdateRegionMapVideoRegs(void);
void InitRegionMap(struct RegionMap *regionMap, u8 argument); void InitRegionMap(struct RegionMap *regionMap, u8 argument);
u8 sub_81230AC(void); u8 DoRegionMapInputCallback(void);
bool8 sub_8123514(void); bool8 UpdateRegionMapZoom(void);
void FreeRegionMapIconResources(void); void FreeRegionMapIconResources(void);
u16 GetRegionMapSectionIdAt(u16 x, u16 y); u16 GetRegionMapSecIdAt(u16 x, u16 y);
void CreateRegionMapPlayerIcon(u16 x, u16 y); void CreateRegionMapPlayerIcon(u16 x, u16 y);
void CreateRegionMapCursor(u16 tileTag, u16 paletteTag); void CreateRegionMapCursor(u16 tileTag, u16 paletteTag);
bool32 IsEventIslandMapSecId(u8 mapSecId);
u8 *GetMapName(u8 *, u16, u16); u8 *GetMapName(u8 *, u16, u16);
bool32 sub_8124668(u8 mapSecId);
u8 *GetMapNameGeneric(u8 *dest, u16 mapSecId); u8 *GetMapNameGeneric(u8 *dest, u16 mapSecId);
u8 *sub_8124610(u8 *dest, u16 mapSecId); u8 *GetMapNameHandleAquaHideout(u8 *dest, u16 mapSecId);
u16 CorrectSpecialMapSecId(u16 mapSecId); u16 CorrectSpecialMapSecId(u16 mapSecId);
void sub_8122D88(struct RegionMap *regionMap); void ShowRegionMapForPokedexAreaScreen(struct RegionMap *regionMap);
void PokedexAreaScreen_UpdateRegionMapVariablesAndVideoRegs(s16 x, s16 y); void PokedexAreaScreen_UpdateRegionMapVariablesAndVideoRegs(s16 x, s16 y);
void MCB2_FlyMap(void); void CB2_OpenFlyMap(void);
bool8 sub_8124658(void); bool8 IsRegionMapZoomed(void);
void sub_812454C(void); void TrySetPlayerIconBlink(void);
void sub_8123030(u16 a0, u32 a1); void sub_8123030(u16 color, u32 coeff);
void sub_8123418(void); void SetRegionMapDataForZoom(void);
extern const struct RegionMapLocation gRegionMapEntries[]; extern const struct RegionMapLocation gRegionMapEntries[];

View File

@ -1,26 +0,0 @@
#ifndef GUARD_ROM_8034C54_H
#define GUARD_ROM_8034C54_H
struct UnkStruct3
{
u8 field_0_0:2;
u8 shape:2;
u8 size:2;
u8 priority:2;
u8 field_1;
u8 xDelta;
s16 x;
s16 y;
const struct SpriteSheet *spriteSheet;
const struct SpritePalette *spritePal;
};
bool32 sub_8034C54(u32 count);
void sub_8034CC8(void);
bool32 sub_8034D14(u32 id, s32 arg1, const struct UnkStruct3 *arg2);
void sub_8035044(u32 id, s32 arg1);
void sub_80353DC(u32 id);
void sub_803547C(u32 id, bool32 arg1);
u8 sub_80355F8(u32 shape, u32 size);
#endif // GUARD_ROM_8034C54_H

View File

@ -5,7 +5,7 @@
#ifndef GUARD_TRADER_H #ifndef GUARD_TRADER_H
#define GUARD_TRADER_H #define GUARD_TRADER_H
void sub_8133DA0(u8 taskId); void DecorationItemsMenuAction_Trade(u8 taskId);
void ExitTraderMenu(u8 taskId); void ExitTraderMenu(u8 taskId);
void TraderSetup(void); void TraderSetup(void);
void Trader_ResetFlag(void); void Trader_ResetFlag(void);

View File

@ -1,17 +0,0 @@
#ifndef GUARD_UNK_POKEDEX_AREA_SCREEN_HELPER_H
#define GUARD_UNK_POKEDEX_AREA_SCREEN_HELPER_H
struct UnkStruct_1C4D70
{
u32 bg:2;
u32 unk2:8;
u32 unk10:2;
u32 unk12:20;
};
void sub_81C4D70(const struct UnkStruct_1C4D70 *);
bool32 sub_81C4E90(void);
void sub_81C4ED0(u32);
void sub_81C4EB4(void);
#endif // GUARD_UNK_POKEDEX_AREA_SCREEN_HELPER_H

View File

@ -77,11 +77,12 @@ SECTIONS {
src/berry_powder.o(.text); src/berry_powder.o(.text);
src/dodrio_berry_picking.o(.text); src/dodrio_berry_picking.o(.text);
src/pokemon_jump.o(.text); src/pokemon_jump.o(.text);
src/minigame_countdown.o(.text);
src/rtc.o(.text); src/rtc.o(.text);
src/main_menu.o(.text); src/main_menu.o(.text);
src/battle_controllers.o(.text); src/battle_controllers.o(.text);
src/decompress.o(.text); src/decompress.o(.text);
src/rom_8034C54.o(.text); src/digit_obj_util.o(.text);
src/battle_bg.o(.text); src/battle_bg.o(.text);
src/battle_main.o(.text); src/battle_main.o(.text);
src/battle_util.o(.text); src/battle_util.o(.text);
@ -305,7 +306,7 @@ SECTIONS {
src/mirage_tower.o(.text); src/mirage_tower.o(.text);
src/berry_fix_program.o(.text); src/berry_fix_program.o(.text);
src/pokemon_summary_screen.o(.text); src/pokemon_summary_screen.o(.text);
src/unk_pokedex_area_screen_helper.o(.text); src/pokedex_area_region_map.o(.text);
src/battle_pyramid_bag.o(.text); src/battle_pyramid_bag.o(.text);
src/pokenav.o(.text); src/pokenav.o(.text);
src/pokenav_main_menu.o(.text); src/pokenav_main_menu.o(.text);
@ -461,10 +462,11 @@ SECTIONS {
src/berry_powder.o(.rodata); src/berry_powder.o(.rodata);
src/dodrio_berry_picking.o(.rodata); src/dodrio_berry_picking.o(.rodata);
src/pokemon_jump.o(.rodata); src/pokemon_jump.o(.rodata);
src/minigame_countdown.o(.rodata);
src/rtc.o(.rodata); src/rtc.o(.rodata);
src/main_menu.o(.rodata); src/main_menu.o(.rodata);
src/battle_controllers.o(.rodata); src/battle_controllers.o(.rodata);
src/rom_8034C54.o(.rodata); src/digit_obj_util.o(.rodata);
src/data.o(.rodata); src/data.o(.rodata);
src/battle_bg.o(.rodata); src/battle_bg.o(.rodata);
src/battle_main.o(.rodata); src/battle_main.o(.rodata);
@ -660,7 +662,7 @@ SECTIONS {
src/mirage_tower.o(.rodata); src/mirage_tower.o(.rodata);
src/berry_fix_program.o(.rodata); src/berry_fix_program.o(.rodata);
src/pokemon_summary_screen.o(.rodata); src/pokemon_summary_screen.o(.rodata);
src/unk_pokedex_area_screen_helper.o(.rodata); src/pokedex_area_region_map.o(.rodata);
src/battle_pyramid_bag.o(.rodata); src/battle_pyramid_bag.o(.rodata);
src/pokenav.o(.rodata); src/pokenav.o(.rodata);
src/pokenav_main_menu.o(.rodata); src/pokenav_main_menu.o(.rodata);

View File

@ -79,8 +79,8 @@ static void AnimAngel(struct Sprite *);
static void AnimPinkHeart(struct Sprite *); static void AnimPinkHeart(struct Sprite *);
static void AnimDevil(struct Sprite *); static void AnimDevil(struct Sprite *);
static void AnimFurySwipes(struct Sprite *); static void AnimFurySwipes(struct Sprite *);
static void AnimMovmentWaves(struct Sprite *); static void AnimMovementWaves(struct Sprite *);
static void AnimMovmentWaves_Step(struct Sprite *); static void AnimMovementWaves_Step(struct Sprite *);
static void AnimJaggedMusicNote(struct Sprite *); static void AnimJaggedMusicNote(struct Sprite *);
static void AnimJaggedMusicNote_Step(struct Sprite *); static void AnimJaggedMusicNote_Step(struct Sprite *);
static void AnimPerishSongMusicNote2(struct Sprite *); static void AnimPerishSongMusicNote2(struct Sprite *);
@ -1185,7 +1185,7 @@ const struct SpriteTemplate gMovementWavesSpriteTemplate =
.anims = gMovementWavesAnimTable, .anims = gMovementWavesAnimTable,
.images = NULL, .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable, .affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimMovmentWaves, .callback = AnimMovementWaves,
}; };
static const union AffineAnimCmd sAffineAnims_UproarDistortion[] = static const union AffineAnimCmd sAffineAnims_UproarDistortion[] =
@ -3628,7 +3628,7 @@ static void AnimFurySwipes(struct Sprite *sprite)
} }
} }
static void AnimMovmentWaves(struct Sprite *sprite) static void AnimMovementWaves(struct Sprite *sprite)
{ {
if (!gBattleAnimArgs[2]) if (!gBattleAnimArgs[2])
{ {
@ -3655,11 +3655,11 @@ static void AnimMovmentWaves(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[2]; sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = gBattleAnimArgs[1]; sprite->data[1] = gBattleAnimArgs[1];
StartSpriteAnim(sprite, sprite->data[1]); StartSpriteAnim(sprite, sprite->data[1]);
sprite->callback = AnimMovmentWaves_Step; sprite->callback = AnimMovementWaves_Step;
} }
} }
static void AnimMovmentWaves_Step(struct Sprite *sprite) static void AnimMovementWaves_Step(struct Sprite *sprite)
{ {
if (sprite->animEnded) if (sprite->animEnded)
{ {

View File

@ -691,6 +691,25 @@ static const struct BattleBackground gBattleTerrainTable[] =
}, },
}; };
static void sub_8035648(void);
// Unused
static void sub_8035608(void)
{
u8 spriteId;
ResetSpriteData();
spriteId = CreateSprite(&gUnknown_0831AC88, 0, 0, 0);
gSprites[spriteId].invisible = TRUE;
SetMainCallback2(sub_8035648);
}
static void sub_8035648(void)
{
AnimateSprites();
BuildOamBuffer();
}
void BattleInitBgsAndWindows(void) void BattleInitBgsAndWindows(void)
{ {
ResetBgsAndClearDma3BusyFlags(0); ResetBgsAndClearDma3BusyFlags(0);

View File

@ -2578,7 +2578,7 @@ static void CreateDomeOpponentMons(u16 tournamentTrainerId)
// Create mon if it was selected, starting from back // Create mon if it was selected, starting from back
for (i = FRONTIER_PARTY_SIZE - 1; i >= 0; i--) for (i = FRONTIER_PARTY_SIZE - 1; i >= 0; i--)
{ {
if (selectedMonBits & 4) if (selectedMonBits & (1 << (FRONTIER_PARTY_SIZE - 1)))
{ {
CreateDomeOpponentMon(monsCount, tournamentTrainerId, i, otId); CreateDomeOpponentMon(monsCount, tournamentTrainerId, i, otId);
monsCount++; monsCount++;

View File

@ -4011,7 +4011,7 @@ static void HandleTurnActionSelectionState(void)
RecordedBattle_ClearBattlerAction(gActiveBattler, 1); RecordedBattle_ClearBattlerAction(gActiveBattler, 1);
gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT; gBattleCommunication[gActiveBattler] = STATE_SELECTION_SCRIPT;
*(gBattleStruct->selectionScriptFinished + gActiveBattler) = FALSE; *(gBattleStruct->selectionScriptFinished + gActiveBattler) = FALSE;
gBattleResources->bufferB[gActiveBattler][1] = 0; gBattleResources->bufferB[gActiveBattler][1] = B_ACTION_USE_MOVE;
*(gBattleStruct->stateIdAfterSelScript + gActiveBattler) = STATE_WAIT_ACTION_CHOSEN; *(gBattleStruct->stateIdAfterSelScript + gActiveBattler) = STATE_WAIT_ACTION_CHOSEN;
return; return;
} }
@ -4146,7 +4146,7 @@ static void HandleTurnActionSelectionState(void)
case STATE_SELECTION_SCRIPT_MAY_RUN: case STATE_SELECTION_SCRIPT_MAY_RUN:
if (*(gBattleStruct->selectionScriptFinished + gActiveBattler)) if (*(gBattleStruct->selectionScriptFinished + gActiveBattler))
{ {
if (gBattleResources->bufferB[gActiveBattler][1] == 13) if (gBattleResources->bufferB[gActiveBattler][1] == B_ACTION_NOTHING_FAINTED)
{ {
gHitMarker |= HITMARKER_RUN; gHitMarker |= HITMARKER_RUN;
gChosenActionByBattler[gActiveBattler] = B_ACTION_RUN; gChosenActionByBattler[gActiveBattler] = B_ACTION_RUN;

View File

@ -874,20 +874,20 @@ static bool8 TryInflictRandomStatus(void)
{ {
u8 j, i; u8 j, i;
u8 count; u8 count;
u8 indices[3]; u8 indices[FRONTIER_PARTY_SIZE];
u32 status; u32 status;
u16 species; u16 species;
bool8 statusChosen; bool8 statusChosen;
struct Pokemon *mon; struct Pokemon *mon;
for (i = 0; i < 3; i++) for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
indices[i] = i; indices[i] = i;
for (j = 0; j < 10; j++) for (j = 0; j < 10; j++)
{ {
u8 temp, id; u8 temp, id;
i = Random() % 3; i = Random() % FRONTIER_PARTY_SIZE;
id = Random() % 3; id = Random() % FRONTIER_PARTY_SIZE;
SWAP(indices[i], indices[id], temp); SWAP(indices[i], indices[id], temp);
} }
@ -921,7 +921,7 @@ static bool8 TryInflictRandomStatus(void)
{ {
status = sStatusFlags; status = sStatusFlags;
j = 0; j = 0;
for (i = 0; i < 3; i++) for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{ {
mon = &gPlayerParty[indices[i]]; mon = &gPlayerParty[indices[i]];
if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE
@ -963,7 +963,7 @@ static bool8 TryInflictRandomStatus(void)
} }
j = 0; j = 0;
for (i = 0; i < 3; i++) for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{ {
mon = &gPlayerParty[indices[i]]; mon = &gPlayerParty[indices[i]];
if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE
@ -995,7 +995,7 @@ static bool8 AtLeastOneHealthyMon(void)
count = 3; count = 3;
healthyMonsCount = 0; healthyMonsCount = 0;
for (i = 0; i < 3; i++) for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{ {
struct Pokemon *mon = &gPlayerParty[i]; struct Pokemon *mon = &gPlayerParty[i];
if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE if (GetAilmentFromStatus(GetMonData(mon, MON_DATA_STATUS)) == AILMENT_NONE
@ -1262,23 +1262,23 @@ static void Task_DoStatusInflictionScreenFlash(u8 taskId)
static void TryHealMons(u8 healCount) static void TryHealMons(u8 healCount)
{ {
u8 j, i, k; u8 j, i, k;
u8 indices[3]; u8 indices[FRONTIER_PARTY_SIZE];
if (healCount == 0) if (healCount == 0)
return; return;
for (i = 0; i < 3; i++) for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
indices[i] = i; indices[i] = i;
for (k = 0; k < 10; k++) for (k = 0; k < 10; k++)
{ {
u8 temp; u8 temp;
i = Random() % 3; i = Random() % FRONTIER_PARTY_SIZE;
j = Random() % 3; j = Random() % FRONTIER_PARTY_SIZE;
SWAP(indices[i], indices[j], temp); SWAP(indices[i], indices[j], temp);
} }
for (i = 0; i < 3; i++) for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{ {
bool32 canBeHealed = FALSE; bool32 canBeHealed = FALSE;
struct Pokemon *mon = &gPlayerParty[indices[i]]; struct Pokemon *mon = &gPlayerParty[indices[i]];
@ -1483,7 +1483,7 @@ static bool8 AtLeastTwoAliveMons(void)
mon = &gPlayerParty[0]; mon = &gPlayerParty[0];
countDead = 0; countDead = 0;
for (i = 0; i < 3; i++, mon++) for (i = 0; i < FRONTIER_PARTY_SIZE; i++, mon++)
{ {
if (GetMonData(mon, MON_DATA_HP) == 0) if (GetMonData(mon, MON_DATA_HP) == 0)
countDead++; countDead++;

View File

@ -10043,7 +10043,7 @@ static void Cmd_jumpifnopursuitswitchdmg(void)
for (i = 0; i < gBattlersCount; i++) for (i = 0; i < gBattlersCount; i++)
{ {
if (gBattlerByTurnOrder[i] == gBattlerTarget) if (gBattlerByTurnOrder[i] == gBattlerTarget)
gActionsByTurnOrder[i] = 11; gActionsByTurnOrder[i] = B_ACTION_TRY_FINISH;
} }
gCurrentMove = MOVE_PURSUIT; gCurrentMove = MOVE_PURSUIT;
@ -11184,7 +11184,7 @@ static void Cmd_pursuitrelated(void)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
&& !(gAbsentBattlerFlags & gBitTable[gActiveBattler]) && !(gAbsentBattlerFlags & gBitTable[gActiveBattler])
&& gChosenActionByBattler[gActiveBattler] == 0 && gChosenActionByBattler[gActiveBattler] == B_ACTION_USE_MOVE
&& gChosenMoveByBattler[gActiveBattler] == MOVE_PURSUIT) && gChosenMoveByBattler[gActiveBattler] == MOVE_PURSUIT)
{ {
gActionsByTurnOrder[gActiveBattler] = 11; gActionsByTurnOrder[gActiveBattler] = 11;
@ -11450,7 +11450,7 @@ static void Cmd_displaydexinfo(void)
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
FreeAllWindowBuffers(); FreeAllWindowBuffers();
gBattleCommunication[TASK_ID] = CreateDexDisplayMonDataTask(SpeciesToNationalPokedexNum(species), gBattleCommunication[TASK_ID] = DisplayCaughtMonDexPage(SpeciesToNationalPokedexNum(species),
gBattleMons[GetCatchingBattler()].otId, gBattleMons[GetCatchingBattler()].otId,
gBattleMons[GetCatchingBattler()].personality); gBattleMons[GetCatchingBattler()].personality);
gBattleCommunication[0]++; gBattleCommunication[0]++;

View File

@ -24,6 +24,7 @@
#include "tv.h" #include "tv.h"
#include "battle_factory.h" #include "battle_factory.h"
#include "constants/apprentice.h" #include "constants/apprentice.h"
#include "constants/battle_dome.h"
#include "constants/battle_frontier.h" #include "constants/battle_frontier.h"
#include "constants/battle_frontier_mons.h" #include "constants/battle_frontier_mons.h"
#include "constants/battle_tent_mons.h" #include "constants/battle_tent_mons.h"
@ -2070,7 +2071,7 @@ void DoSpecialTrainerBattle(void)
if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES) if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES)
gBattleTypeFlags |= BATTLE_TYPE_DOUBLE; gBattleTypeFlags |= BATTLE_TYPE_DOUBLE;
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
FillFrontierTrainerParty(2); FillFrontierTrainerParty(DOME_BATTLE_PARTY_SIZE);
CreateTask(Task_StartBattleAfterTransition, 1); CreateTask(Task_StartBattleAfterTransition, 1);
sub_806E694(0); sub_806E694(0);
BattleTransition_StartOnField(sub_80B100C(3)); BattleTransition_StartOnField(sub_80B100C(3));
@ -2255,12 +2256,12 @@ static void nullsub_116(void)
static void GetApprenticeMultiPartnerParty(u16 trainerId) static void GetApprenticeMultiPartnerParty(u16 trainerId)
{ {
s32 i, count; s32 i, count;
u32 validSpecies[3]; u32 validSpecies[MULTI_PARTY_SIZE];
u16 species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES, NULL); u16 species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES, NULL);
u16 species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL); u16 species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL);
count = 0; count = 0;
for (i = 0; i < 3; i++) for (i = 0; i < MULTI_PARTY_SIZE; i++)
{ {
u16 apprenticeSpecies = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[i].species; u16 apprenticeSpecies = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].party[i].species;
if (apprenticeSpecies != species1 && apprenticeSpecies != species2) if (apprenticeSpecies != species1 && apprenticeSpecies != species2)
@ -2384,7 +2385,7 @@ static void LoadMultiPartnerCandidatesData(void)
&& gSaveBlock2Ptr->apprentices[i].lvlMode - 1 == lvlMode) && gSaveBlock2Ptr->apprentices[i].lvlMode - 1 == lvlMode)
{ {
k = 0; k = 0;
for (j = 0; j < 3; j++) for (j = 0; j < MULTI_PARTY_SIZE; j++)
{ {
if (species1 != gSaveBlock2Ptr->apprentices[i].party[j].species if (species1 != gSaveBlock2Ptr->apprentices[i].party[j].species
&& species2 != gSaveBlock2Ptr->apprentices[i].party[j].species) && species2 != gSaveBlock2Ptr->apprentices[i].party[j].species)
@ -2992,26 +2993,26 @@ static void FillPartnerParty(u16 trainerId)
if (trainerId == TRAINER_STEVEN_PARTNER) if (trainerId == TRAINER_STEVEN_PARTNER)
{ {
for (i = 0; i < 3; i++) for (i = 0; i < MULTI_PARTY_SIZE; i++)
{ {
do do
{ {
j = Random32(); j = Random32();
} while (IsShinyOtIdPersonality(STEVEN_OTID, j) || sStevenMons[i].nature != GetNatureFromPersonality(j)); } while (IsShinyOtIdPersonality(STEVEN_OTID, j) || sStevenMons[i].nature != GetNatureFromPersonality(j));
CreateMon(&gPlayerParty[3 + i], CreateMon(&gPlayerParty[MULTI_PARTY_SIZE + i],
sStevenMons[i].species, sStevenMons[i].species,
sStevenMons[i].level, sStevenMons[i].level,
sStevenMons[i].fixedIV, sStevenMons[i].fixedIV,
TRUE, i, // BUG: personality was stored in the 'j' variable. As a result, Steven's pokemon do not have the intended natures. TRUE, i, // BUG: personality was stored in the 'j' variable. As a result, Steven's pokemon do not have the intended natures.
OT_ID_PRESET, STEVEN_OTID); OT_ID_PRESET, STEVEN_OTID);
for (j = 0; j < PARTY_SIZE; j++) for (j = 0; j < PARTY_SIZE; j++)
SetMonData(&gPlayerParty[3 + i], MON_DATA_HP_EV + j, &sStevenMons[i].evs[j]); SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_HP_EV + j, &sStevenMons[i].evs[j]);
for (j = 0; j < MAX_MON_MOVES; j++) for (j = 0; j < MAX_MON_MOVES; j++)
SetMonMoveSlot(&gPlayerParty[3 + i], sStevenMons[i].moves[j], j); SetMonMoveSlot(&gPlayerParty[MULTI_PARTY_SIZE + i], sStevenMons[i].moves[j], j);
SetMonData(&gPlayerParty[3 + i], MON_DATA_OT_NAME, gTrainers[TRAINER_STEVEN].trainerName); SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_OT_NAME, gTrainers[TRAINER_STEVEN].trainerName);
j = MALE; j = MALE;
SetMonData(&gPlayerParty[3 + i], MON_DATA_OT_GENDER, &j); SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_OT_GENDER, &j);
CalculateMonStats(&gPlayerParty[3 + i]); CalculateMonStats(&gPlayerParty[MULTI_PARTY_SIZE + i]);
} }
} }
else if (trainerId >= TRAINER_CUSTOM_PARTNER) else if (trainerId >= TRAINER_CUSTOM_PARTNER)
@ -3090,10 +3091,10 @@ static void FillPartnerParty(u16 trainerId)
level = SetFacilityPtrsGetLevel(); level = SetFacilityPtrsGetLevel();
ivs = GetFrontierTrainerFixedIvs(trainerId); ivs = GetFrontierTrainerFixedIvs(trainerId);
otID = Random32(); otID = Random32();
for (i = 0; i < 2; i++) for (i = 0; i < FRONTIER_MULTI_PARTY_SIZE; i++)
{ {
monId = gSaveBlock2Ptr->frontier.trainerIds[i + 18]; monId = gSaveBlock2Ptr->frontier.trainerIds[i + 18];
CreateMonWithEVSpreadNatureOTID(&gPlayerParty[3 + i], CreateMonWithEVSpreadNatureOTID(&gPlayerParty[MULTI_PARTY_SIZE + i],
gFacilityTrainerMons[monId].species, gFacilityTrainerMons[monId].species,
level, level,
gFacilityTrainerMons[monId].nature, gFacilityTrainerMons[monId].nature,
@ -3103,23 +3104,23 @@ static void FillPartnerParty(u16 trainerId)
friendship = MAX_FRIENDSHIP; friendship = MAX_FRIENDSHIP;
for (j = 0; j < MAX_MON_MOVES; j++) for (j = 0; j < MAX_MON_MOVES; j++)
{ {
SetMonMoveSlot(&gPlayerParty[3 + i], gFacilityTrainerMons[monId].moves[j], j); SetMonMoveSlot(&gPlayerParty[MULTI_PARTY_SIZE + i], gFacilityTrainerMons[monId].moves[j], j);
if (gFacilityTrainerMons[monId].moves[j] == MOVE_FRUSTRATION) if (gFacilityTrainerMons[monId].moves[j] == MOVE_FRUSTRATION)
friendship = 0; friendship = 0;
} }
SetMonData(&gPlayerParty[3 + i], MON_DATA_FRIENDSHIP, &friendship); SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_FRIENDSHIP, &friendship);
SetMonData(&gPlayerParty[3 + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]); SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
for (j = 0; j < PLAYER_NAME_LENGTH + 1; j++) for (j = 0; j < PLAYER_NAME_LENGTH + 1; j++)
trainerName[j] = gFacilityTrainers[trainerId].trainerName[j]; trainerName[j] = gFacilityTrainers[trainerId].trainerName[j];
SetMonData(&gPlayerParty[3 + i], MON_DATA_OT_NAME, &trainerName); SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_OT_NAME, &trainerName);
j = IsFrontierTrainerFemale(trainerId); j = IsFrontierTrainerFemale(trainerId);
SetMonData(&gPlayerParty[3 + i], MON_DATA_OT_GENDER, &j); SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_OT_GENDER, &j);
} }
} }
else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE)
{ {
trainerId -= TRAINER_RECORD_MIXING_FRIEND; trainerId -= TRAINER_RECORD_MIXING_FRIEND;
for (i = 0; i < 2; i++) for (i = 0; i < FRONTIER_MULTI_PARTY_SIZE; i++)
{ {
struct EmeraldBattleTowerRecord *record = &gSaveBlock2Ptr->frontier.towerRecords[trainerId]; struct EmeraldBattleTowerRecord *record = &gSaveBlock2Ptr->frontier.towerRecords[trainerId];
struct BattleTowerPokemon monData = record->party[gSaveBlock2Ptr->frontier.trainerIds[18 + i]]; struct BattleTowerPokemon monData = record->party[gSaveBlock2Ptr->frontier.trainerIds[18 + i]];
@ -3137,20 +3138,20 @@ static void FillPartnerParty(u16 trainerId)
if (monData.nickname[0] == EXT_CTRL_CODE_BEGIN && monData.nickname[1] == EXT_CTRL_CODE_JPN) if (monData.nickname[0] == EXT_CTRL_CODE_BEGIN && monData.nickname[1] == EXT_CTRL_CODE_JPN)
trainerName[5] = EOS; trainerName[5] = EOS;
} }
CreateBattleTowerMon2(&gPlayerParty[3 + i], &monData, TRUE); CreateBattleTowerMon2(&gPlayerParty[MULTI_PARTY_SIZE + i], &monData, TRUE);
SetMonData(&gPlayerParty[3 + i], MON_DATA_OT_NAME, trainerName); SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_OT_NAME, trainerName);
j = IsFrontierTrainerFemale(trainerId + TRAINER_RECORD_MIXING_FRIEND); j = IsFrontierTrainerFemale(trainerId + TRAINER_RECORD_MIXING_FRIEND);
SetMonData(&gPlayerParty[3 + i], MON_DATA_OT_GENDER, &j); SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_OT_GENDER, &j);
} }
} }
else else
{ {
trainerId -= TRAINER_RECORD_MIXING_APPRENTICE; trainerId -= TRAINER_RECORD_MIXING_APPRENTICE;
for (i = 0; i < 2; i++) for (i = 0; i < FRONTIER_MULTI_PARTY_SIZE; i++)
{ {
CreateApprenticeMon(&gPlayerParty[3 + i], &gSaveBlock2Ptr->apprentices[trainerId], gSaveBlock2Ptr->frontier.trainerIds[18 + i]); CreateApprenticeMon(&gPlayerParty[MULTI_PARTY_SIZE + i], &gSaveBlock2Ptr->apprentices[trainerId], gSaveBlock2Ptr->frontier.trainerIds[18 + i]);
j = IsFrontierTrainerFemale(trainerId + TRAINER_RECORD_MIXING_APPRENTICE); j = IsFrontierTrainerFemale(trainerId + TRAINER_RECORD_MIXING_APPRENTICE);
SetMonData(&gPlayerParty[3 + i], MON_DATA_OT_GENDER, &j); SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_OT_GENDER, &j);
} }
} }
} }
@ -3461,7 +3462,7 @@ static void SetNextBattleTentOpponent(void)
static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
{ {
s32 i, j; s32 i, j;
u16 chosenMonIndices[4]; u16 chosenMonIndices[MAX_FRONTIER_PARTY_SIZE];
u8 friendship; u8 friendship;
u8 level = SetTentPtrsGetLevel(); u8 level = SetTentPtrsGetLevel();
u8 fixedIV = 0; u8 fixedIV = 0;

View File

@ -19,9 +19,9 @@
#include "menu.h" #include "menu.h"
#include "overworld.h" #include "overworld.h"
#include "palette.h" #include "palette.h"
#include "pokemon_jump.h" #include "minigame_countdown.h"
#include "random.h" #include "random.h"
#include "rom_8034C54.h" #include "digit_obj_util.h"
#include "save.h" #include "save.h"
#include "scanline_effect.h" #include "scanline_effect.h"
#include "script.h" #include "script.h"
@ -714,14 +714,14 @@ static const struct SpriteTemplate gUnknown_082F436C =
.callback = SpriteCallbackDummy .callback = SpriteCallbackDummy
}; };
static const struct UnkStruct3 gUnknown_082F4384[] = static const struct DigitObjUtilTemplate gUnknown_082F4384[] =
{ {
{ {
.field_0_0 = 1, .strConvMode = 1,
.shape = 2, .shape = 2,
.size = 0, .size = 0,
.priority = 0, .priority = 0,
.field_1 = 2, .oamCount = 2,
.xDelta = 8, .xDelta = 8,
.x = 156, .x = 156,
.y = 0, .y = 0,
@ -729,11 +729,11 @@ static const struct UnkStruct3 gUnknown_082F4384[] =
.spritePal = gUnknown_082F422C, .spritePal = gUnknown_082F422C,
}, },
{ {
.field_0_0 = 0, .strConvMode = 0,
.shape = 2, .shape = 2,
.size = 0, .size = 0,
.priority = 0, .priority = 0,
.field_1 = 2, .oamCount = 2,
.xDelta = 8, .xDelta = 8,
.x = 180, .x = 180,
.y = 0, .y = 0,
@ -741,11 +741,11 @@ static const struct UnkStruct3 gUnknown_082F4384[] =
.spritePal = gUnknown_082F422C, .spritePal = gUnknown_082F422C,
}, },
{ {
.field_0_0 = 0, .strConvMode = 0,
.shape = 2, .shape = 2,
.size = 0, .size = 0,
.priority = 0, .priority = 0,
.field_1 = 2, .oamCount = 2,
.xDelta = 8, .xDelta = 8,
.x = 204, .x = 204,
.y = 0, .y = 0,
@ -1036,7 +1036,7 @@ int sub_802104C(void)
case 1: case 1:
CpuFill16(0, (void *)OAM, OAM_SIZE); CpuFill16(0, (void *)OAM, OAM_SIZE);
gReservedSpritePaletteCount = 0; gReservedSpritePaletteCount = 0;
sub_8034C54(3); DigitObjUtil_Init(3);
break; break;
case 2: case 2:
ResetPaletteFade(); ResetPaletteFade();
@ -1165,7 +1165,7 @@ int sub_802130C(void)
case 6: case 6:
DestroyWirelessStatusIndicatorSprite(); DestroyWirelessStatusIndicatorSprite();
sub_8022960(var0); sub_8022960(var0);
sub_8034CC8(); DigitObjUtil_Free();
break; break;
case 7: case 7:
var0->unkC = 0; var0->unkC = 0;
@ -1701,18 +1701,18 @@ void ShowBerryCrushRankings(void)
void sub_8022524(struct BerryCrushGame_138 *r4, u16 r1) void sub_8022524(struct BerryCrushGame_138 *r4, u16 r1)
{ {
sub_8021944(r4, r1); sub_8021944(r4, r1);
sub_8035044(0, r4->unk4); DigitObjUtil_PrintNumOn(0, r4->unk4);
sub_8035044(1, r4->unk6); DigitObjUtil_PrintNumOn(1, r4->unk6);
sub_8035044(2, r4->unk8); DigitObjUtil_PrintNumOn(2, r4->unk8);
} }
void sub_8022554(struct BerryCrushGame_138 *r0) void sub_8022554(struct BerryCrushGame_138 *r0)
{ {
r0->unk78[0]->invisible = TRUE; r0->unk78[0]->invisible = TRUE;
r0->unk78[1]->invisible = TRUE; r0->unk78[1]->invisible = TRUE;
sub_803547C(2, 1); DigitObjUtil_HideOrShow(2, 1);
sub_803547C(1, 1); DigitObjUtil_HideOrShow(1, 1);
sub_803547C(0, 1); DigitObjUtil_HideOrShow(0, 1);
} }
void sub_8022588(struct BerryCrushGame *r5) void sub_8022588(struct BerryCrushGame *r5)
@ -1855,9 +1855,9 @@ void sub_8022730(struct BerryCrushGame *r6)
r6->unk138.unk78[r5]->invisible = FALSE; r6->unk138.unk78[r5]->invisible = FALSE;
r6->unk138.unk78[r5]->animPaused = FALSE; r6->unk138.unk78[r5]->animPaused = FALSE;
} }
sub_8034D14(0, 0, &gUnknown_082F4384[0]); DigitObjUtil_CreatePrinter(0, 0, &gUnknown_082F4384[0]);
sub_8034D14(1, 0, &gUnknown_082F4384[1]); DigitObjUtil_CreatePrinter(1, 0, &gUnknown_082F4384[1]);
sub_8034D14(2, 0, &gUnknown_082F4384[2]); DigitObjUtil_CreatePrinter(2, 0, &gUnknown_082F4384[2]);
if (r6->unk12 == 1) if (r6->unk12 == 1)
sub_8022554(&r6->unk138); sub_8022554(&r6->unk138);
} }
@ -1875,9 +1875,9 @@ void sub_8022960(struct BerryCrushGame *r5)
FreeSpritePaletteByTag(1); FreeSpritePaletteByTag(1);
for (; r4 < ARRAY_COUNT(r5->unk138.unk78); ++r4) for (; r4 < ARRAY_COUNT(r5->unk138.unk78); ++r4)
DestroySprite(r5->unk138.unk78[r4]); DestroySprite(r5->unk138.unk78[r4]);
sub_80353DC(2); DigitObjUtil_DeletePrinter(2);
sub_80353DC(1); DigitObjUtil_DeletePrinter(1);
sub_80353DC(0); DigitObjUtil_DeletePrinter(0);
for (r4 = 0; r4 < ARRAY_COUNT(r5->unk138.unk4C); ++r4) for (r4 = 0; r4 < ARRAY_COUNT(r5->unk138.unk4C); ++r4)
DestroySprite(r5->unk138.unk4C[r4]); DestroySprite(r5->unk138.unk4C[r4]);
for (r4 = 0; r4 < r5->unk9; ++r4) for (r4 = 0; r4 < r5->unk9; ++r4)
@ -2317,10 +2317,10 @@ static u32 sub_80232EC(struct BerryCrushGame *r4, __attribute__((unused)) u8 *r
case 1: case 1:
if (!IsLinkTaskFinished()) if (!IsLinkTaskFinished())
return 0; return 0;
sub_802EB24(0x1000, 0x1000, 120, 80, 0); StartMinigameCountdown(0x1000, 0x1000, 120, 80, 0);
break; break;
case 2: case 2:
if (sub_802EB84()) if (IsMinigameCountdownRunning())
return 0; return 0;
// fallthrough // fallthrough
case 0: case 0:

View File

@ -23,6 +23,7 @@
#include "constants/vars.h" #include "constants/vars.h"
#include "event_data.h" #include "event_data.h"
#include "random.h" #include "random.h"
#include "constants/species.h"
enum enum
{ {

View File

@ -7391,3 +7391,6 @@ const union AnimCmd *const *const gMonFrontAnimsPtrTable[] =
ANIM_CMD(UNOWN_EMARK), ANIM_CMD(UNOWN_EMARK),
ANIM_CMD(UNOWN_QMARK), ANIM_CMD(UNOWN_QMARK),
}; };
#undef ANIM_CMD
#undef ANIM_CMD_FULL

File diff suppressed because it is too large Load Diff

View File

@ -1,112 +1,112 @@
const struct CityMapEntry gPokenavCityMaps[] = static const struct CityMapEntry sPokenavCityMaps[NUM_CITY_MAPS] =
{ {
{ {
.mapSecId = 0, .mapSecId = MAPSEC_LITTLEROOT_TOWN,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Littleroot_0, .tilemap = gPokenavCityMap_Littleroot_0,
}, },
{ {
.mapSecId = 1, .mapSecId = MAPSEC_OLDALE_TOWN,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Oldale_0, .tilemap = gPokenavCityMap_Oldale_0,
}, },
{ {
.mapSecId = 2, .mapSecId = MAPSEC_DEWFORD_TOWN,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Dewford_0, .tilemap = gPokenavCityMap_Dewford_0,
}, },
{ {
.mapSecId = 3, .mapSecId = MAPSEC_LAVARIDGE_TOWN,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Lavarige_0, .tilemap = gPokenavCityMap_Lavarige_0,
}, },
{ {
.mapSecId = 4, .mapSecId = MAPSEC_FALLARBOR_TOWN,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Fallarbor_0, .tilemap = gPokenavCityMap_Fallarbor_0,
}, },
{ {
.mapSecId = 5, .mapSecId = MAPSEC_VERDANTURF_TOWN,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Verdanturf_0, .tilemap = gPokenavCityMap_Verdanturf_0,
}, },
{ {
.mapSecId = 6, .mapSecId = MAPSEC_PACIFIDLOG_TOWN,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Pacifidlog_0, .tilemap = gPokenavCityMap_Pacifidlog_0,
}, },
{ {
.mapSecId = 7, .mapSecId = MAPSEC_PETALBURG_CITY,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Petalburg_0, .tilemap = gPokenavCityMap_Petalburg_0,
}, },
{ {
.mapSecId = 8, .mapSecId = MAPSEC_SLATEPORT_CITY,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Slateport_0, .tilemap = gPokenavCityMap_Slateport_0,
}, },
{ {
.mapSecId = 8, .mapSecId = MAPSEC_SLATEPORT_CITY,
.index = 1, .index = 1,
.tilemap = gPokenavCityMap_Slateport_1, .tilemap = gPokenavCityMap_Slateport_1,
}, },
{ {
.mapSecId = 9, .mapSecId = MAPSEC_MAUVILLE_CITY,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Mauville_0, .tilemap = gPokenavCityMap_Mauville_0,
}, },
{ {
.mapSecId = 9, .mapSecId = MAPSEC_MAUVILLE_CITY,
.index = 1, .index = 1,
.tilemap = gPokenavCityMap_Mauville_1, .tilemap = gPokenavCityMap_Mauville_1,
}, },
{ {
.mapSecId = 10, .mapSecId = MAPSEC_RUSTBORO_CITY,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Rustboro_0, .tilemap = gPokenavCityMap_Rustboro_0,
}, },
{ {
.mapSecId = 10, .mapSecId = MAPSEC_RUSTBORO_CITY,
.index = 1, .index = 1,
.tilemap = gPokenavCityMap_Rustboro_1, .tilemap = gPokenavCityMap_Rustboro_1,
}, },
{ {
.mapSecId = 11, .mapSecId = MAPSEC_FORTREE_CITY,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Fortree_0, .tilemap = gPokenavCityMap_Fortree_0,
}, },
{ {
.mapSecId = 12, .mapSecId = MAPSEC_LILYCOVE_CITY,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Lilycove_0, .tilemap = gPokenavCityMap_Lilycove_0,
}, },
{ {
.mapSecId = 12, .mapSecId = MAPSEC_LILYCOVE_CITY,
.index = 1, .index = 1,
.tilemap = gPokenavCityMap_Lilycove_1, .tilemap = gPokenavCityMap_Lilycove_1,
}, },
{ {
.mapSecId = 13, .mapSecId = MAPSEC_MOSSDEEP_CITY,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Mossdeep_0, .tilemap = gPokenavCityMap_Mossdeep_0,
}, },
{ {
.mapSecId = 13, .mapSecId = MAPSEC_MOSSDEEP_CITY,
.index = 1, .index = 1,
.tilemap = gPokenavCityMap_Mossdeep_1, .tilemap = gPokenavCityMap_Mossdeep_1,
}, },
{ {
.mapSecId = 14, .mapSecId = MAPSEC_SOOTOPOLIS_CITY,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_Sootopolis_0, .tilemap = gPokenavCityMap_Sootopolis_0,
}, },
{ {
.mapSecId = 15, .mapSecId = MAPSEC_EVER_GRANDE_CITY,
.index = 0, .index = 0,
.tilemap = gPokenavCityMap_EverGrande_0, .tilemap = gPokenavCityMap_EverGrande_0,
}, },
{ {
.mapSecId = 15, .mapSecId = MAPSEC_EVER_GRANDE_CITY,
.index = 1, .index = 1,
.tilemap = gPokenavCityMap_EverGrande_1, .tilemap = gPokenavCityMap_EverGrande_1,
}, },

View File

@ -374,7 +374,7 @@ const struct RegionMapLocation gRegionMapEntries[] = {
[MAPSEC_SEVII_ISLE_22] = { 0, 0, 1, 1, sMapName_SeviiIsle22}, [MAPSEC_SEVII_ISLE_22] = { 0, 0, 1, 1, sMapName_SeviiIsle22},
[MAPSEC_SEVII_ISLE_23] = { 0, 0, 1, 1, sMapName_SeviiIsle23}, [MAPSEC_SEVII_ISLE_23] = { 0, 0, 1, 1, sMapName_SeviiIsle23},
[MAPSEC_SEVII_ISLE_24] = { 0, 0, 1, 1, sMapName_SeviiIsle24}, [MAPSEC_SEVII_ISLE_24] = { 0, 0, 1, 1, sMapName_SeviiIsle24},
[MAPSEC_NAVEL_ROCK] = { 0, 0, 1, 1, sMapName_NavelRock}, [MAPSEC_NAVEL_ROCK_FRLG] = { 0, 0, 1, 1, sMapName_NavelRock},
[MAPSEC_MT_EMBER] = { 0, 0, 1, 1, sMapName_MtEmber}, [MAPSEC_MT_EMBER] = { 0, 0, 1, 1, sMapName_MtEmber},
[MAPSEC_BERRY_FOREST] = { 0, 0, 1, 1, sMapName_BerryForest}, [MAPSEC_BERRY_FOREST] = { 0, 0, 1, 1, sMapName_BerryForest},
[MAPSEC_ICEFALL_CAVE] = { 0, 0, 1, 1, sMapName_IcefallCave}, [MAPSEC_ICEFALL_CAVE] = { 0, 0, 1, 1, sMapName_IcefallCave},
@ -383,11 +383,11 @@ const struct RegionMapLocation gRegionMapEntries[] = {
[MAPSEC_DOTTED_HOLE] = { 0, 0, 1, 1, sMapName_DottedHole}, [MAPSEC_DOTTED_HOLE] = { 0, 0, 1, 1, sMapName_DottedHole},
[MAPSEC_LOST_CAVE] = { 0, 0, 1, 1, sMapName_LostCave}, [MAPSEC_LOST_CAVE] = { 0, 0, 1, 1, sMapName_LostCave},
[MAPSEC_PATTERN_BUSH] = { 0, 0, 1, 1, sMapName_PatternBush}, [MAPSEC_PATTERN_BUSH] = { 0, 0, 1, 1, sMapName_PatternBush},
[MAPSEC_ALTERING_CAVE] = { 0, 0, 1, 1, sMapName_AlteringCave}, [MAPSEC_ALTERING_CAVE_FRLG] = { 0, 0, 1, 1, sMapName_AlteringCave},
[MAPSEC_TANOBY_CHAMBERS] = { 0, 0, 1, 1, sMapName_TanobyChambers}, [MAPSEC_TANOBY_CHAMBERS] = { 0, 0, 1, 1, sMapName_TanobyChambers},
[MAPSEC_THREE_ISLE_PATH] = { 0, 0, 1, 1, sMapName_ThreeIslePath}, [MAPSEC_THREE_ISLE_PATH] = { 0, 0, 1, 1, sMapName_ThreeIslePath},
[MAPSEC_TANOBY_KEY] = { 0, 0, 1, 1, sMapName_TanobyKey}, [MAPSEC_TANOBY_KEY] = { 0, 0, 1, 1, sMapName_TanobyKey},
[MAPSEC_BIRTH_ISLAND] = { 0, 0, 1, 1, sMapName_BirthIsland}, [MAPSEC_BIRTH_ISLAND_FRLG] = { 0, 0, 1, 1, sMapName_BirthIsland},
[MAPSEC_MONEAN_CHAMBER] = { 0, 0, 1, 1, sMapName_MoneanChamber}, [MAPSEC_MONEAN_CHAMBER] = { 0, 0, 1, 1, sMapName_MoneanChamber},
[MAPSEC_LIPTOO_CHAMBER] = { 0, 0, 1, 1, sMapName_LiptooChamber}, [MAPSEC_LIPTOO_CHAMBER] = { 0, 0, 1, 1, sMapName_LiptooChamber},
[MAPSEC_WEEPTH_CHAMBER] = { 0, 0, 1, 1, sMapName_WeepthChamber}, [MAPSEC_WEEPTH_CHAMBER] = { 0, 0, 1, 1, sMapName_WeepthChamber},
@ -400,7 +400,7 @@ const struct RegionMapLocation gRegionMapEntries[] = {
[MAPSEC_AQUA_HIDEOUT] = {19, 3, 1, 1, sMapName_AquaHideout}, [MAPSEC_AQUA_HIDEOUT] = {19, 3, 1, 1, sMapName_AquaHideout},
[MAPSEC_MAGMA_HIDEOUT] = { 6, 3, 1, 1, sMapName_MagmaHideout}, [MAPSEC_MAGMA_HIDEOUT] = { 6, 3, 1, 1, sMapName_MagmaHideout},
[MAPSEC_MIRAGE_TOWER] = { 8, 2, 1, 1, sMapName_MirageTower}, [MAPSEC_MIRAGE_TOWER] = { 8, 2, 1, 1, sMapName_MirageTower},
[MAPSEC_BIRTH_ISLAND_2] = { 0, 0, 1, 1, sMapName_BirthIsland}, [MAPSEC_BIRTH_ISLAND] = { 0, 0, 1, 1, sMapName_BirthIsland},
[MAPSEC_FARAWAY_ISLAND] = { 0, 0, 1, 1, sMapName_FarawayIsland}, [MAPSEC_FARAWAY_ISLAND] = { 0, 0, 1, 1, sMapName_FarawayIsland},
[MAPSEC_ARTISAN_CAVE] = {22, 12, 1, 1, sMapName_ArtisanCave}, [MAPSEC_ARTISAN_CAVE] = {22, 12, 1, 1, sMapName_ArtisanCave},
[MAPSEC_MARINE_CAVE] = { 0, 0, 1, 1, sMapName_MarineCave}, [MAPSEC_MARINE_CAVE] = { 0, 0, 1, 1, sMapName_MarineCave},
@ -410,8 +410,8 @@ const struct RegionMapLocation gRegionMapEntries[] = {
[MAPSEC_UNDERWATER_UNK1] = {24, 3, 2, 2, sMapName_Underwater}, [MAPSEC_UNDERWATER_UNK1] = {24, 3, 2, 2, sMapName_Underwater},
[MAPSEC_UNDERWATER_129] = {24, 10, 2, 1, sMapName_Underwater}, [MAPSEC_UNDERWATER_129] = {24, 10, 2, 1, sMapName_Underwater},
[MAPSEC_DESERT_UNDERPASS] = { 2, 0, 1, 1, sMapName_DesertUnderpass}, [MAPSEC_DESERT_UNDERPASS] = { 2, 0, 1, 1, sMapName_DesertUnderpass},
[MAPSEC_ALTERING_CAVE_2] = { 6, 8, 1, 1, sMapName_AlteringCave}, [MAPSEC_ALTERING_CAVE] = { 6, 8, 1, 1, sMapName_AlteringCave},
[MAPSEC_NAVEL_ROCK2] = { 0, 0, 1, 1, sMapName_NavelRock}, [MAPSEC_NAVEL_ROCK] = { 0, 0, 1, 1, sMapName_NavelRock},
[MAPSEC_TRAINER_HILL] = { 8, 4, 1, 1, sMapName_TrainerHill} [MAPSEC_TRAINER_HILL] = { 8, 4, 1, 1, sMapName_TrainerHill}
}; };

File diff suppressed because it is too large Load Diff

View File

@ -1,71 +1,51 @@
// Includes
#include "global.h" #include "global.h"
#include "constants/decorations.h" #include "constants/decorations.h"
#include "decoration.h" #include "decoration.h"
#include "decoration_inventory.h" #include "decoration_inventory.h"
// Static type declarations EWRAM_DATA struct DecorationInventory gDecorationInventories[DECORCAT_COUNT] = {};
// Static RAM declarations
EWRAM_DATA struct DecorationInventory gDecorationInventories[8] = {};
// Static ROM declarations
// .rodata
// .text
#define SET_DECOR_INV(i, ptr) {\ #define SET_DECOR_INV(i, ptr) {\
gDecorationInventories[i].items = ptr;\ gDecorationInventories[i].items = ptr;\
gDecorationInventories[i].size = sizeof(ptr);\ gDecorationInventories[i].size = ARRAY_COUNT(ptr);\
} }
void SetDecorationInventoriesPointers(void) void SetDecorationInventoriesPointers(void)
{ {
SET_DECOR_INV(0, gSaveBlock1Ptr->decorDesk); SET_DECOR_INV(DECORCAT_DESK, gSaveBlock1Ptr->decorationDesks);
SET_DECOR_INV(1, gSaveBlock1Ptr->decorChair); SET_DECOR_INV(DECORCAT_CHAIR, gSaveBlock1Ptr->decorationChairs);
SET_DECOR_INV(2, gSaveBlock1Ptr->decorPlant); SET_DECOR_INV(DECORCAT_PLANT, gSaveBlock1Ptr->decorationPlants);
SET_DECOR_INV(3, gSaveBlock1Ptr->decorOrnament); SET_DECOR_INV(DECORCAT_ORNAMENT, gSaveBlock1Ptr->decorationOrnaments);
SET_DECOR_INV(4, gSaveBlock1Ptr->decorMat); SET_DECOR_INV(DECORCAT_MAT, gSaveBlock1Ptr->decorationMats);
SET_DECOR_INV(5, gSaveBlock1Ptr->decorPoster); SET_DECOR_INV(DECORCAT_POSTER, gSaveBlock1Ptr->decorationPosters);
SET_DECOR_INV(6, gSaveBlock1Ptr->decorDoll); SET_DECOR_INV(DECORCAT_DOLL, gSaveBlock1Ptr->decorationDolls);
SET_DECOR_INV(7, gSaveBlock1Ptr->decorCushion); SET_DECOR_INV(DECORCAT_CUSHION, gSaveBlock1Ptr->decorationCushions);
InitDecorationContextItems(); InitDecorationContextItems();
} }
static void ClearDecorationInventory(u8 idx) static void ClearDecorationInventory(u8 category)
{ {
u8 i; u8 i;
for (i = 0; i < gDecorationInventories[category].size; i ++)
for (i = 0; i < gDecorationInventories[idx].size; i ++) gDecorationInventories[category].items[i] = DECOR_NONE;
{
gDecorationInventories[idx].items[i] = DECOR_NONE;
}
} }
void ClearDecorationInventories(void) void ClearDecorationInventories(void)
{ {
u8 idx; u8 category;
for (category = 0; category < 8; category++)
for (idx = 0; idx < 8; idx ++) ClearDecorationInventory(category);
{
ClearDecorationInventory(idx);
}
} }
s8 GetFirstEmptyDecorSlot(u8 idx) s8 GetFirstEmptyDecorSlot(u8 category)
{ {
s8 i; s8 i;
for (i = 0; i < (s8)gDecorationInventories[category].size; i++)
for (i = 0; i < (s8)gDecorationInventories[idx].size; i ++)
{ {
if (gDecorationInventories[idx].items[i] == DECOR_NONE) if (gDecorationInventories[category].items[i] == DECOR_NONE)
{
return i; return i;
}
} }
return -1; return -1;
} }
@ -78,10 +58,9 @@ bool8 CheckHasDecoration(u8 decor)
for (i = 0; i < gDecorationInventories[category].size; i ++) for (i = 0; i < gDecorationInventories[category].size; i ++)
{ {
if (gDecorationInventories[category].items[i] == decor) if (gDecorationInventories[category].items[i] == decor)
{
return TRUE; return TRUE;
}
} }
return FALSE; return FALSE;
} }
@ -91,15 +70,11 @@ bool8 DecorationAdd(u8 decor)
s8 idx; s8 idx;
if (decor == DECOR_NONE) if (decor == DECOR_NONE)
{
return FALSE; return FALSE;
}
category = gDecorations[decor].category; category = gDecorations[decor].category;
idx = GetFirstEmptyDecorSlot(category); idx = GetFirstEmptyDecorSlot(category);
if (idx == -1) if (idx == -1)
{
return FALSE; return FALSE;
}
gDecorationInventories[category].items[idx] = decor; gDecorationInventories[category].items[idx] = decor;
return TRUE; return TRUE;
} }
@ -107,13 +82,9 @@ bool8 DecorationAdd(u8 decor)
bool8 DecorationCheckSpace(u8 decor) bool8 DecorationCheckSpace(u8 decor)
{ {
if (decor == DECOR_NONE) if (decor == DECOR_NONE)
{
return FALSE; return FALSE;
}
if (GetFirstEmptyDecorSlot(gDecorations[decor].category) == -1) if (GetFirstEmptyDecorSlot(gDecorations[decor].category) == -1)
{
return FALSE; return FALSE;
}
return TRUE; return TRUE;
} }
@ -124,9 +95,8 @@ s8 DecorationRemove(u8 decor)
i = 0; i = 0;
if (decor == DECOR_NONE) if (decor == DECOR_NONE)
{
return 0; return 0;
}
for (i = 0; i < gDecorationInventories[gDecorations[decor].category].size; i ++) for (i = 0; i < gDecorationInventories[gDecorations[decor].category].size; i ++)
{ {
category = gDecorations[decor].category; category = gDecorations[decor].category;
@ -137,6 +107,7 @@ s8 DecorationRemove(u8 decor)
return 1; return 1;
} }
} }
return 0; return 0;
} }
@ -160,19 +131,18 @@ void CondenseDecorationsInCategory(u8 category)
} }
} }
u8 GetNumOwnedDecorationsInCategory(u8 idx) u8 GetNumOwnedDecorationsInCategory(u8 category)
{ {
u8 i; u8 i;
u8 ct; u8 ct;
ct = 0; ct = 0;
for (i = 0; i < gDecorationInventories[idx].size; i ++) for (i = 0; i < gDecorationInventories[category].size; i++)
{ {
if (gDecorationInventories[idx].items[i] != DECOR_NONE) if (gDecorationInventories[category].items[i] != DECOR_NONE)
{ ct++;
ct ++;
}
} }
return ct; return ct;
} }

450
src/digit_obj_util.c Normal file
View File

@ -0,0 +1,450 @@
#include "global.h"
#include "digit_obj_util.h"
#include "malloc.h"
#include "decompress.h"
#include "main.h"
#include "battle_main.h"
struct DigitPrinter
{
bool8 isActive;
u8 firstOamId;
u8 strConvMode;
u8 oamCount;
u8 palTagIndex;
u8 size;
u8 shape;
u8 priority;
u8 xDelta;
u8 tilesPerImage;
u16 tileStart;
s16 x;
s16 y;
u16 tileTag;
u16 palTag;
u32 pow10;
s32 lastPrinted;
};
struct DigitPrinterAlloc
{
u32 count;
struct DigitPrinter *array;
};
// this file's functions
static u8 GetFirstOamId(u8 oamCount);;
static void CopyWorkToOam(struct DigitPrinter *objWork);
static void DrawNumObjsLeadingZeros(struct DigitPrinter *objWork, s32 num, bool32 sign);
static void DrawNumObjsMinusInFront(struct DigitPrinter *objWork, s32 num, bool32 sign);
static void DrawNumObjsMinusInBack(struct DigitPrinter *objWork, s32 num, bool32 sign);
static bool32 SharesTileWithAnyActive(u32 id);
static bool32 SharesPalWithAnyActive(u32 id);
// ewram
static EWRAM_DATA struct DigitPrinterAlloc *sOamWork = {0};
// const rom data
static const u8 sTilesPerImage[4][4] =
{
[ST_OAM_SQUARE] = {
[ST_OAM_SIZE_0] = 0x01, // SPRITE_SIZE_8x8
[ST_OAM_SIZE_1] = 0x04, // SPRITE_SIZE_16x16
[ST_OAM_SIZE_2] = 0x10, // SPRITE_SIZE_32x32
[ST_OAM_SIZE_3] = 0x40 // SPRITE_SIZE_64x64
},
[ST_OAM_H_RECTANGLE] = {
[ST_OAM_SIZE_0] = 0x02, // SPRITE_SIZE_16x8
[ST_OAM_SIZE_1] = 0x04, // SPRITE_SIZE_32x8
[ST_OAM_SIZE_2] = 0x08, // SPRITE_SIZE_32x16
[ST_OAM_SIZE_3] = 0x20 // SPRITE_SIZE_64x32
},
[ST_OAM_V_RECTANGLE] = {
[ST_OAM_SIZE_0] = 0x02, // SPRITE_SIZE_8x16
[ST_OAM_SIZE_1] = 0x04, // SPRITE_SIZE_8x32
[ST_OAM_SIZE_2] = 0x08, // SPRITE_SIZE_16x32
[ST_OAM_SIZE_3] = 0x20 // SPRITE_SIZE_32x64
}
};
// code
bool32 DigitObjUtil_Init(u32 count)
{
u32 i;
if (sOamWork != NULL)
DigitObjUtil_Free();
sOamWork = Alloc(sizeof(*sOamWork));
if (sOamWork == NULL)
return FALSE;
sOamWork->array = Alloc(sizeof(struct DigitPrinter) * count);
if (sOamWork->array == NULL)
{
Free(sOamWork);
return FALSE;
}
sOamWork->count = count;
for (i = 0; i < count; i++)
{
sOamWork->array[i].isActive = FALSE;
sOamWork->array[i].firstOamId = 0xFF;
}
return TRUE;
}
void DigitObjUtil_Free(void)
{
if (sOamWork != NULL)
{
if (sOamWork->array != NULL)
{
u32 i;
for (i = 0; i < sOamWork->count; i++)
DigitObjUtil_DeletePrinter(i);
Free(sOamWork->array);
}
FREE_AND_SET_NULL(sOamWork);
}
}
bool32 DigitObjUtil_CreatePrinter(u32 id, s32 num, const struct DigitObjUtilTemplate *template)
{
u32 i;
if (sOamWork == NULL)
return FALSE;
if (sOamWork->array[id].isActive)
return FALSE;
sOamWork->array[id].firstOamId = GetFirstOamId(template->oamCount);
if (sOamWork->array[id].firstOamId == 0xFF)
return FALSE;
sOamWork->array[id].tileStart = GetSpriteTileStartByTag(template->spriteSheet->tag);
if (sOamWork->array[id].tileStart == 0xFFFF)
{
if (template->spriteSheet->size != 0)
{
sOamWork->array[id].tileStart = LoadSpriteSheet(template->spriteSheet);
}
else
{
struct CompressedSpriteSheet compSpriteSheet;
compSpriteSheet = *(struct CompressedSpriteSheet*)(template->spriteSheet);
compSpriteSheet.size = GetDecompressedDataSize(template->spriteSheet->data);
sOamWork->array[id].tileStart = LoadCompressedSpriteSheet(&compSpriteSheet);
}
if (sOamWork->array[id].tileStart == 0xFFFF)
return FALSE;
}
sOamWork->array[id].palTagIndex = IndexOfSpritePaletteTag(template->spritePal->tag);
if (sOamWork->array[id].palTagIndex == 0xFF)
sOamWork->array[id].palTagIndex = LoadSpritePalette(template->spritePal);
sOamWork->array[id].strConvMode = template->strConvMode;
sOamWork->array[id].oamCount = template->oamCount;
sOamWork->array[id].x = template->x;
sOamWork->array[id].y = template->y;
sOamWork->array[id].shape = template->shape;
sOamWork->array[id].size = template->size;
sOamWork->array[id].priority = template->priority;
sOamWork->array[id].xDelta = template->xDelta;
sOamWork->array[id].tilesPerImage = GetTilesPerImage(template->shape, template->size);
sOamWork->array[id].tileTag = template->spriteSheet->tag;
sOamWork->array[id].palTag = template->spritePal->tag;
sOamWork->array[id].isActive = TRUE;
// Decimal left shift
sOamWork->array[id].pow10 = 1;
for (i = 1; i < template->oamCount; i++)
sOamWork->array[id].pow10 *= 10;
CopyWorkToOam(&sOamWork->array[id]);
DigitObjUtil_PrintNumOn(id, num);
return TRUE;
}
static void CopyWorkToOam(struct DigitPrinter *objWork)
{
u32 i;
u32 oamId = objWork->firstOamId;
u32 x = objWork->x;
u32 oamCount = objWork->oamCount + 1;
CpuFill16(0, &gMain.oamBuffer[oamId], sizeof(struct OamData) * oamCount);
for (i = 0, oamId = objWork->firstOamId; i < oamCount; i++, oamId++)
{
gMain.oamBuffer[oamId].y = objWork->y;
gMain.oamBuffer[oamId].x = x;
gMain.oamBuffer[oamId].shape = objWork->shape;
gMain.oamBuffer[oamId].size = objWork->size;
gMain.oamBuffer[oamId].tileNum = objWork->tileStart;
gMain.oamBuffer[oamId].priority = objWork->priority;
gMain.oamBuffer[oamId].paletteNum = objWork->palTagIndex;
x += objWork->xDelta;
}
oamId--;
gMain.oamBuffer[oamId].x = objWork->x - objWork->xDelta;
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
gMain.oamBuffer[oamId].tileNum = objWork->tileStart + (objWork->tilesPerImage * 10);
}
void DigitObjUtil_PrintNumOn(u32 id, s32 num)
{
bool32 sign;
if (sOamWork == NULL)
return;
if (!sOamWork->array[id].isActive)
return;
sOamWork->array[id].lastPrinted = num;
if (num < 0)
{
sign = TRUE;
num *= -1;
}
else
{
sign = FALSE;
}
switch (sOamWork->array[id].strConvMode)
{
case 0:
default:
DrawNumObjsLeadingZeros(&sOamWork->array[id], num, sign);
break;
case 1:
DrawNumObjsMinusInFront(&sOamWork->array[id], num, sign);
break;
case 2:
DrawNumObjsMinusInBack(&sOamWork->array[id], num, sign);
break;
}
}
static void DrawNumObjsLeadingZeros(struct DigitPrinter *objWork, s32 num, bool32 sign)
{
u32 pow10 = objWork->pow10;
u32 oamId = objWork->firstOamId;
while (pow10 != 0)
{
u32 digit = num / pow10;
num -= (digit * pow10);
pow10 /= 10;
gMain.oamBuffer[oamId].tileNum = (digit * objWork->tilesPerImage) + objWork->tileStart;
oamId++;
}
if (sign)
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
else
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
}
static void DrawNumObjsMinusInFront(struct DigitPrinter *objWork, s32 num, bool32 sign)
{
u32 pow10 = objWork->pow10;
static int oamId;
static int curDigit;
static int firstDigit;
oamId = objWork->firstOamId;
curDigit = 0;
firstDigit = -1;
while (pow10 != 0)
{
u32 digit = num / pow10;
num -= (digit * pow10);
pow10 /= 10;
if (digit != 0 || firstDigit != -1 || pow10 == 0)
{
gMain.oamBuffer[oamId].tileNum = (digit * objWork->tilesPerImage) + objWork->tileStart;
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
if (firstDigit == -1)
firstDigit = curDigit;
}
else
{
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
}
oamId++;
curDigit++;
}
if (sign)
{
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
gMain.oamBuffer[oamId].x = objWork->x + ((firstDigit - 1) * objWork->xDelta);
}
else
{
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
}
}
static void DrawNumObjsMinusInBack(struct DigitPrinter *objWork, s32 num, bool32 sign)
{
u32 pow10 = objWork->pow10;
u32 oamId = objWork->firstOamId;
bool32 printingDigits = FALSE;
s32 nsprites = 0;
while (pow10 != 0)
{
u32 digit = num / pow10;
num -= (digit * pow10);
pow10 /= 10;
if (digit != 0 || printingDigits || pow10 == 0)
{
printingDigits = TRUE;
gMain.oamBuffer[oamId].tileNum = (digit * objWork->tilesPerImage) + objWork->tileStart;
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
oamId++;
nsprites++;
}
}
while (nsprites < objWork->oamCount)
{
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
oamId++;
nsprites++;
}
if (sign)
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
else
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
}
void DigitObjUtil_DeletePrinter(u32 id)
{
s32 oamId, oamCount, i;
if (sOamWork == NULL)
return;
if (!sOamWork->array[id].isActive)
return;
oamCount = sOamWork->array[id].oamCount + 1;
oamId = sOamWork->array[id].firstOamId;
for (i = 0; i < oamCount; i++, oamId++)
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
if (!SharesTileWithAnyActive(id))
FreeSpriteTilesByTag(sOamWork->array[id].tileTag);
if (!SharesPalWithAnyActive(id))
FreeSpritePaletteByTag(sOamWork->array[id].palTag);
sOamWork->array[id].isActive = FALSE;
}
void DigitObjUtil_HideOrShow(u32 id, bool32 hide)
{
s32 oamId, oamCount, i;
if (sOamWork == NULL)
return;
if (!sOamWork->array[id].isActive)
return;
oamCount = sOamWork->array[id].oamCount + 1;
oamId = sOamWork->array[id].firstOamId;
if (hide)
{
for (i = 0; i < oamCount; i++, oamId++)
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
}
else
{
for (i = 0; i < oamCount; i++, oamId++)
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
DigitObjUtil_PrintNumOn(id, sOamWork->array[id].lastPrinted);
}
}
static u8 GetFirstOamId(u8 oamCount)
{
u32 i;
u16 firstOamId = 64;
for (i = 0; i < sOamWork->count; i++)
{
if (!sOamWork->array[i].isActive)
{
if (sOamWork->array[i].firstOamId != 0xFF && sOamWork->array[i].oamCount <= oamCount)
return sOamWork->array[i].firstOamId;
}
else
{
firstOamId += 1 + sOamWork->array[i].oamCount;
}
}
if (firstOamId + oamCount + 1 > 128)
return 0xFF;
else
return firstOamId;
}
static bool32 SharesTileWithAnyActive(u32 id)
{
u32 i;
for (i = 0; i < sOamWork->count; i++)
{
if (sOamWork->array[i].isActive && i != id
&& sOamWork->array[i].tileTag == sOamWork->array[id].tileTag)
{
return TRUE;
}
}
return FALSE;
}
static bool32 SharesPalWithAnyActive(u32 id)
{
u32 i;
for (i = 0; i < sOamWork->count; i++)
{
if (sOamWork->array[i].isActive && i != id
&& sOamWork->array[i].palTag == sOamWork->array[id].palTag)
{
return TRUE;
}
}
return FALSE;
}
u8 GetTilesPerImage(u32 shape, u32 size)
{
return sTilesPerImage[shape][size];
}

View File

@ -12,7 +12,7 @@
#include "m4a.h" #include "m4a.h"
#include "main.h" #include "main.h"
#include "palette.h" #include "palette.h"
#include "pokemon_jump.h" #include "minigame_countdown.h"
#include "random.h" #include "random.h"
#include "save.h" #include "save.h"
#include "script.h" #include "script.h"
@ -667,7 +667,7 @@ static void sub_8024E38(void)
switch (gUnknown_02022C98->unk10) switch (gUnknown_02022C98->unk10)
{ {
case 0: case 0:
sub_802EB24(7, 8, 120, 80, 0); StartMinigameCountdown(7, 8, 120, 80, 0);
gUnknown_02022C98->unk10++; gUnknown_02022C98->unk10++;
break; break;
case 1: case 1:
@ -682,7 +682,7 @@ static void sub_8024E38(void)
} }
break; break;
case 3: case 3:
if (!sub_802EB84()) if (!IsMinigameCountdownRunning())
{ {
gUnknown_02022C98->unk10++; gUnknown_02022C98->unk10++;
} }

View File

@ -1754,7 +1754,7 @@ static void SetPlayerAvatarObjectEventIdAndObjectId(u8 objectEventId, u8 spriteI
gPlayerAvatar.objectEventId = objectEventId; gPlayerAvatar.objectEventId = objectEventId;
gPlayerAvatar.spriteId = spriteId; gPlayerAvatar.spriteId = spriteId;
gPlayerAvatar.gender = GetPlayerAvatarGenderByGraphicsId(gObjectEvents[objectEventId].graphicsId); gPlayerAvatar.gender = GetPlayerAvatarGenderByGraphicsId(gObjectEvents[objectEventId].graphicsId);
SetPlayerAvatarExtraStateTransition(gObjectEvents[objectEventId].graphicsId, 0x20); SetPlayerAvatarExtraStateTransition(gObjectEvents[objectEventId].graphicsId, PLAYER_AVATAR_FLAG_5);
} }
void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId) void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId)

View File

@ -59,8 +59,8 @@ static bool8 ForcedMovement_SlideSouth(void);
static bool8 ForcedMovement_SlideNorth(void); static bool8 ForcedMovement_SlideNorth(void);
static bool8 ForcedMovement_SlideWest(void); static bool8 ForcedMovement_SlideWest(void);
static bool8 ForcedMovement_SlideEast(void); static bool8 ForcedMovement_SlideEast(void);
static bool8 ForcedMovement_0xBB(void); static bool8 ForcedMovement_MatJump(void);
static bool8 ForcedMovement_0xBC(void); static bool8 ForcedMovement_MatSpin(void);
static bool8 ForcedMovement_MuddySlope(void); static bool8 ForcedMovement_MuddySlope(void);
static void MovePlayerNotOnBike(u8, u16); static void MovePlayerNotOnBike(u8, u16);
@ -99,10 +99,10 @@ static void PlayCollisionSoundIfNotFacingWarp(u8 a);
static void sub_808C280(struct ObjectEvent *); static void sub_808C280(struct ObjectEvent *);
static void StartStrengthAnim(u8, u8); static void StartStrengthAnim(u8, u8);
static void Task_BumpBoulder(u8 taskId); static void Task_PushBoulder(u8 taskId);
static u8 sub_808C3A4(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); static u8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
static u8 do_boulder_dust(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); static u8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
static u8 sub_808C484(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject); static u8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject);
static void DoPlayerMatJump(void); static void DoPlayerMatJump(void);
static void DoPlayerAvatarSecretBaseMatJump(u8 taskId); static void DoPlayerAvatarSecretBaseMatJump(u8 taskId);
@ -182,8 +182,8 @@ static bool8 (*const sForcedMovementFuncs[])(void) =
ForcedMovement_SlideWest, ForcedMovement_SlideWest,
ForcedMovement_SlideEast, ForcedMovement_SlideEast,
ForcedMovement_PushedSouthByCurrent, ForcedMovement_PushedSouthByCurrent,
ForcedMovement_0xBB, ForcedMovement_MatJump,
ForcedMovement_0xBC, ForcedMovement_MatSpin,
ForcedMovement_MuddySlope, ForcedMovement_MuddySlope,
}; };
@ -211,16 +211,16 @@ static const u8 sAcroBikeTrickCollisionTypes[] = {
COLLISION_HORIZONTAL_RAIL, COLLISION_HORIZONTAL_RAIL,
}; };
static void (*const gUnknown_084974B8[])(struct ObjectEvent *) = static void (*const sPlayerAvatarTransitionFuncs[])(struct ObjectEvent *) =
{ {
PlayerAvatarTransition_Normal, [PLAYER_AVATAR_STATE_NORMAL] = PlayerAvatarTransition_Normal,
PlayerAvatarTransition_MachBike, [PLAYER_AVATAR_STATE_MACH_BIKE] = PlayerAvatarTransition_MachBike,
PlayerAvatarTransition_AcroBike, [PLAYER_AVATAR_STATE_ACRO_BIKE] = PlayerAvatarTransition_AcroBike,
PlayerAvatarTransition_Surfing, [PLAYER_AVATAR_STATE_SURFING] = PlayerAvatarTransition_Surfing,
PlayerAvatarTransition_Underwater, [PLAYER_AVATAR_STATE_UNDERWATER] = PlayerAvatarTransition_Underwater,
PlayerAvatarTransition_ReturnToField, [PLAYER_AVATAR_STATE_FIELD_MOVE] = PlayerAvatarTransition_ReturnToField,
PlayerAvatarTransition_Dummy, [PLAYER_AVATAR_STATE_FISHING] = PlayerAvatarTransition_Dummy,
PlayerAvatarTransition_Dummy, [PLAYER_AVATAR_STATE_WATERING] = PlayerAvatarTransition_Dummy,
}; };
static bool8 (*const sArrowWarpMetatileBehaviorChecks[])(u8) = static bool8 (*const sArrowWarpMetatileBehaviorChecks[])(u8) =
@ -259,23 +259,23 @@ static const u8 sFRLGAvatarGfxIds[] = {OBJ_EVENT_GFX_RED, OBJ_EVENT_GFX_LEAF};
static const u8 sRSAvatarGfxIds[] = {OBJ_EVENT_GFX_LINK_RS_BRENDAN, OBJ_EVENT_GFX_LINK_RS_MAY}; static const u8 sRSAvatarGfxIds[] = {OBJ_EVENT_GFX_LINK_RS_BRENDAN, OBJ_EVENT_GFX_LINK_RS_MAY};
static const u8 gUnknown_0849750C[2][5][2] = static const u8 sPlayerAvatarGfxToStateFlag[2][5][2] =
{ {
//male [MALE] =
{ {
{OBJ_EVENT_GFX_BRENDAN_NORMAL, 1}, {OBJ_EVENT_GFX_BRENDAN_NORMAL, PLAYER_AVATAR_FLAG_ON_FOOT},
{OBJ_EVENT_GFX_BRENDAN_MACH_BIKE, 2}, {OBJ_EVENT_GFX_BRENDAN_MACH_BIKE, PLAYER_AVATAR_FLAG_MACH_BIKE},
{OBJ_EVENT_GFX_BRENDAN_ACRO_BIKE, 4}, {OBJ_EVENT_GFX_BRENDAN_ACRO_BIKE, PLAYER_AVATAR_FLAG_ACRO_BIKE},
{OBJ_EVENT_GFX_BRENDAN_SURFING, 8}, {OBJ_EVENT_GFX_BRENDAN_SURFING, PLAYER_AVATAR_FLAG_SURFING},
{OBJ_EVENT_GFX_BRENDAN_UNDERWATER, 16}, {OBJ_EVENT_GFX_BRENDAN_UNDERWATER, PLAYER_AVATAR_FLAG_UNDERWATER},
}, },
//female [FEMALE] =
{ {
{OBJ_EVENT_GFX_MAY_NORMAL, 1}, {OBJ_EVENT_GFX_MAY_NORMAL, PLAYER_AVATAR_FLAG_ON_FOOT},
{OBJ_EVENT_GFX_MAY_MACH_BIKE, 2}, {OBJ_EVENT_GFX_MAY_MACH_BIKE, PLAYER_AVATAR_FLAG_MACH_BIKE},
{OBJ_EVENT_GFX_MAY_ACRO_BIKE, 4}, {OBJ_EVENT_GFX_MAY_ACRO_BIKE, PLAYER_AVATAR_FLAG_ACRO_BIKE},
{OBJ_EVENT_GFX_MAY_SURFING, 8}, {OBJ_EVENT_GFX_MAY_SURFING, PLAYER_AVATAR_FLAG_SURFING},
{OBJ_EVENT_GFX_MAY_UNDERWATER, 16}, {OBJ_EVENT_GFX_MAY_UNDERWATER, PLAYER_AVATAR_FLAG_UNDERWATER},
} }
}; };
@ -287,11 +287,11 @@ static bool8 (*const sArrowWarpMetatileBehaviorChecks2[])(u8) = //Duplicate of
MetatileBehavior_IsEastArrowWarp, MetatileBehavior_IsEastArrowWarp,
}; };
static bool8 (*const gUnknown_08497530[])(struct Task *, struct ObjectEvent *, struct ObjectEvent *) = static bool8 (*const sPushBoulderFuncs[])(struct Task *, struct ObjectEvent *, struct ObjectEvent *) =
{ {
sub_808C3A4, PushBoulder_Start,
do_boulder_dust, PushBoulder_Move,
sub_808C484, PushBoulder_End,
}; };
static bool8 (*const sPlayerAvatarSecretBaseMatJump[])(struct Task *, struct ObjectEvent *) = static bool8 (*const sPlayerAvatarSecretBaseMatJump[])(struct Task *, struct ObjectEvent *) =
@ -547,13 +547,13 @@ static bool8 ForcedMovement_SlideEast(void)
return ForcedMovement_Slide(DIR_EAST, PlayerGoSpeed2); return ForcedMovement_Slide(DIR_EAST, PlayerGoSpeed2);
} }
static bool8 ForcedMovement_0xBB(void) static bool8 ForcedMovement_MatJump(void)
{ {
DoPlayerMatJump(); DoPlayerMatJump();
return TRUE; return TRUE;
} }
static bool8 ForcedMovement_0xBC(void) static bool8 ForcedMovement_MatSpin(void)
{ {
DoPlayerMatSpin(); DoPlayerMatSpin();
return TRUE; return TRUE;
@ -807,23 +807,23 @@ bool8 IsPlayerCollidingWithFarawayIslandMew(u8 direction)
void SetPlayerAvatarTransitionFlags(u16 transitionFlags) void SetPlayerAvatarTransitionFlags(u16 transitionFlags)
{ {
gPlayerAvatar.unk1 |= transitionFlags; gPlayerAvatar.transitionFlags |= transitionFlags;
DoPlayerAvatarTransition(); DoPlayerAvatarTransition();
} }
static void DoPlayerAvatarTransition(void) static void DoPlayerAvatarTransition(void)
{ {
u8 i; u8 i;
u8 flags = gPlayerAvatar.unk1; u8 flags = gPlayerAvatar.transitionFlags;
if (flags != 0) if (flags != 0)
{ {
for (i = 0; i < 8; i++, flags >>= 1) for (i = 0; i < ARRAY_COUNT(sPlayerAvatarTransitionFuncs); i++, flags >>= 1)
{ {
if (flags & 1) if (flags & 1)
gUnknown_084974B8[i](&gObjectEvents[gPlayerAvatar.objectEventId]); sPlayerAvatarTransitionFuncs[i](&gObjectEvents[gPlayerAvatar.objectEventId]);
} }
gPlayerAvatar.unk1 = 0; gPlayerAvatar.transitionFlags = 0;
} }
} }
@ -1186,12 +1186,12 @@ void sub_808BC90(s16 x, s16 y)
MoveObjectEventToMapCoords(&gObjectEvents[gPlayerAvatar.objectEventId], x, y); MoveObjectEventToMapCoords(&gObjectEvents[gPlayerAvatar.objectEventId], x, y);
} }
u8 TestPlayerAvatarFlags(u8 a) u8 TestPlayerAvatarFlags(u8 flag)
{ {
return gPlayerAvatar.flags & a; return gPlayerAvatar.flags & flag;
} }
u8 sub_808BCD0(void) u8 GetPlayerAvatarFlags(void)
{ {
return gPlayerAvatar.flags; return gPlayerAvatar.flags;
} }
@ -1335,32 +1335,32 @@ static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender)
{ {
u8 i; u8 i;
for (i = 0; i < 5; i++) for (i = 0; i < ARRAY_COUNT(sPlayerAvatarGfxToStateFlag[0]); i++)
{ {
if (gUnknown_0849750C[gender][i][0] == graphicsId) if (sPlayerAvatarGfxToStateFlag[gender][i][0] == graphicsId)
return gUnknown_0849750C[gender][i][1]; return sPlayerAvatarGfxToStateFlag[gender][i][1];
} }
return 1; return PLAYER_AVATAR_FLAG_ON_FOOT;
} }
u8 GetPlayerAvatarGraphicsIdByCurrentState(void) u8 GetPlayerAvatarGraphicsIdByCurrentState(void)
{ {
u8 i; u8 i;
u8 r5 = gPlayerAvatar.flags; u8 flags = gPlayerAvatar.flags;
for (i = 0; i < 5; i++) for (i = 0; i < ARRAY_COUNT(sPlayerAvatarGfxToStateFlag[0]); i++)
{ {
if (gUnknown_0849750C[gPlayerAvatar.gender][i][1] & r5) if (sPlayerAvatarGfxToStateFlag[gPlayerAvatar.gender][i][1] & flags)
return gUnknown_0849750C[gPlayerAvatar.gender][i][0]; return sPlayerAvatarGfxToStateFlag[gPlayerAvatar.gender][i][0];
} }
return 0; return 0;
} }
void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 b) void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 transitionFlag)
{ {
u8 unk = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender); u8 stateFlag = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender);
gPlayerAvatar.unk1 |= unk | b; gPlayerAvatar.transitionFlags |= stateFlag | transitionFlag;
DoPlayerAvatarTransition(); DoPlayerAvatarTransition();
} }
@ -1384,7 +1384,7 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender)
playerObjEventTemplate.flagId = 0; playerObjEventTemplate.flagId = 0;
objectEventId = SpawnSpecialObjectEvent(&playerObjEventTemplate); objectEventId = SpawnSpecialObjectEvent(&playerObjEventTemplate);
objectEvent = &gObjectEvents[objectEventId]; objectEvent = &gObjectEvents[objectEventId];
objectEvent->isPlayer = 1; objectEvent->isPlayer = TRUE;
objectEvent->warpArrowSpriteId = CreateWarpArrowSprite(); objectEvent->warpArrowSpriteId = CreateWarpArrowSprite();
ObjectEventTurn(objectEvent, direction); ObjectEventTurn(objectEvent, direction);
ClearPlayerAvatarInfo(); ClearPlayerAvatarInfo();
@ -1453,22 +1453,22 @@ static void sub_808C280(struct ObjectEvent *objectEvent)
static void StartStrengthAnim(u8 a, u8 b) static void StartStrengthAnim(u8 a, u8 b)
{ {
u8 taskId = CreateTask(Task_BumpBoulder, 0xFF); u8 taskId = CreateTask(Task_PushBoulder, 0xFF);
gTasks[taskId].data[1] = a; gTasks[taskId].data[1] = a;
gTasks[taskId].data[2] = b; gTasks[taskId].data[2] = b;
Task_BumpBoulder(taskId); Task_PushBoulder(taskId);
} }
static void Task_BumpBoulder(u8 taskId) static void Task_PushBoulder(u8 taskId)
{ {
while (gUnknown_08497530[gTasks[taskId].data[0]](&gTasks[taskId], while (sPushBoulderFuncs[gTasks[taskId].data[0]](&gTasks[taskId],
&gObjectEvents[gPlayerAvatar.objectEventId], &gObjectEvents[gPlayerAvatar.objectEventId],
&gObjectEvents[gTasks[taskId].data[1]])) &gObjectEvents[gTasks[taskId].data[1]]))
; ;
} }
static bool8 sub_808C3A4(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) static bool8 PushBoulder_Start(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
{ {
ScriptContext2_Enable(); ScriptContext2_Enable();
gPlayerAvatar.preventStep = TRUE; gPlayerAvatar.preventStep = TRUE;
@ -1476,7 +1476,7 @@ static bool8 sub_808C3A4(struct Task *task, struct ObjectEvent *playerObject, st
return FALSE; return FALSE;
} }
static bool8 do_boulder_dust(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) static bool8 PushBoulder_Move(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
{ {
if (ObjectEventIsHeldMovementActive(playerObject)) if (ObjectEventIsHeldMovementActive(playerObject))
{ {
@ -1506,7 +1506,7 @@ static bool8 do_boulder_dust(struct Task *task, struct ObjectEvent *playerObject
return FALSE; return FALSE;
} }
static bool8 sub_808C484(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject) static bool8 PushBoulder_End(struct Task *task, struct ObjectEvent *playerObject, struct ObjectEvent *strengthObject)
{ {
if (ObjectEventCheckHeldMovementStatus(playerObject) if (ObjectEventCheckHeldMovementStatus(playerObject)
&& ObjectEventCheckHeldMovementStatus(strengthObject)) && ObjectEventCheckHeldMovementStatus(strengthObject))
@ -1515,7 +1515,7 @@ static bool8 sub_808C484(struct Task *task, struct ObjectEvent *playerObject, st
ObjectEventClearHeldMovementIfFinished(strengthObject); ObjectEventClearHeldMovementIfFinished(strengthObject);
gPlayerAvatar.preventStep = FALSE; gPlayerAvatar.preventStep = FALSE;
ScriptContext2_Disable(); ScriptContext2_Disable();
DestroyTask(FindTaskIdByFunc(Task_BumpBoulder)); DestroyTask(FindTaskIdByFunc(Task_PushBoulder));
} }
return FALSE; return FALSE;
} }
@ -1545,7 +1545,7 @@ static u8 PlayerAvatar_DoSecretBaseMatJump(struct Task *task, struct ObjectEvent
if (task->data[1] > 1) if (task->data[1] > 1)
{ {
gPlayerAvatar.preventStep = FALSE; gPlayerAvatar.preventStep = FALSE;
gPlayerAvatar.unk1 |= 0x20; gPlayerAvatar.transitionFlags |= PLAYER_AVATAR_FLAG_5;
DestroyTask(FindTaskIdByFunc(DoPlayerAvatarSecretBaseMatJump)); DestroyTask(FindTaskIdByFunc(DoPlayerAvatarSecretBaseMatJump));
} }
} }

View File

@ -13,13 +13,23 @@
#include "window.h" #include "window.h"
#include "constants/rgb.h" #include "constants/rgb.h"
/*
* This is the type of map shown when interacting with the metatiles for
* a wall-mounted Region Map (on the wall of the Pokemon Centers near the PC)
* It does not zoom, and pressing A or B closes the map
*
* For the region map in the pokenav, see pokenav_region_map.c
* For the region map in the pokedex, see pokdex_area_screen.c/pokedex_area_region_map.c
* For the fly map, and utility functions all of the maps use, see region_map.c
*/
// Static type declarations // Static type declarations
// Static RAM declarations // Static RAM declarations
static EWRAM_DATA struct { static EWRAM_DATA struct {
MainCallback callback; MainCallback callback;
u32 filler_004; u32 unused;
struct RegionMap regionMap; struct RegionMap regionMap;
u16 state; u16 state;
} *sFieldRegionMapHandler = NULL; } *sFieldRegionMapHandler = NULL;
@ -34,7 +44,7 @@ static void PrintRegionMapSecName(void);
// .rodata // .rodata
static const struct BgTemplate gUnknown_085E5068[] = { static const struct BgTemplate sFieldRegionMapBgTemplates[] = {
{ {
.bg = 0, .bg = 0,
.charBaseIndex = 0, .charBaseIndex = 0,
@ -54,7 +64,7 @@ static const struct BgTemplate gUnknown_085E5068[] = {
} }
}; };
static const struct WindowTemplate gUnknown_085E5070[] = static const struct WindowTemplate sFieldRegionMapWindowTemplates[] =
{ {
{ {
.bg = 0, .bg = 0,
@ -102,8 +112,8 @@ static void MCB2_InitRegionMapRegisters(void)
ResetSpriteData(); ResetSpriteData();
FreeAllSpritePalettes(); FreeAllSpritePalettes();
ResetBgsAndClearDma3BusyFlags(0); ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(1, gUnknown_085E5068, 2); InitBgsFromTemplates(1, sFieldRegionMapBgTemplates, ARRAY_COUNT(sFieldRegionMapBgTemplates));
InitWindows(gUnknown_085E5070); InitWindows(sFieldRegionMapWindowTemplates);
DeactivateAllTextPrinters(); DeactivateAllTextPrinters();
LoadUserWindowBorderGfx(0, 0x27, 0xd0); LoadUserWindowBorderGfx(0, 0x27, 0xd0);
clear_scheduled_bg_copies_to_vram(); clear_scheduled_bg_copies_to_vram();
@ -134,7 +144,7 @@ static void FieldUpdateRegionMap(void)
switch (sFieldRegionMapHandler->state) switch (sFieldRegionMapHandler->state)
{ {
case 0: case 0:
InitRegionMap(&sFieldRegionMapHandler->regionMap, 0); InitRegionMap(&sFieldRegionMapHandler->regionMap, FALSE);
CreateRegionMapPlayerIcon(0, 0); CreateRegionMapPlayerIcon(0, 0);
CreateRegionMapCursor(1, 1); CreateRegionMapCursor(1, 1);
sFieldRegionMapHandler->state++; sFieldRegionMapHandler->state++;
@ -162,13 +172,13 @@ static void FieldUpdateRegionMap(void)
} }
break; break;
case 4: case 4:
switch (sub_81230AC()) switch (DoRegionMapInputCallback())
{ {
case INPUT_EVENT_MOVE_END: case MAP_INPUT_MOVE_END:
PrintRegionMapSecName(); PrintRegionMapSecName();
break; break;
case INPUT_EVENT_A_BUTTON: case MAP_INPUT_A_BUTTON:
case INPUT_EVENT_B_BUTTON: case MAP_INPUT_B_BUTTON:
sFieldRegionMapHandler->state++; sFieldRegionMapHandler->state++;
break; break;
} }
@ -184,8 +194,7 @@ static void FieldUpdateRegionMap(void)
SetMainCallback2(sFieldRegionMapHandler->callback); SetMainCallback2(sFieldRegionMapHandler->callback);
if (sFieldRegionMapHandler != NULL) if (sFieldRegionMapHandler != NULL)
{ {
free(sFieldRegionMapHandler); FREE_AND_SET_NULL(sFieldRegionMapHandler);
sFieldRegionMapHandler = NULL;
} }
FreeAllWindowBuffers(); FreeAllWindowBuffers();
} }
@ -195,7 +204,7 @@ static void FieldUpdateRegionMap(void)
static void PrintRegionMapSecName(void) static void PrintRegionMapSecName(void)
{ {
if (sFieldRegionMapHandler->regionMap.iconDrawType != MAPSECTYPE_NONE) if (sFieldRegionMapHandler->regionMap.mapSecType != MAPSECTYPE_NONE)
{ {
FillWindowPixelBuffer(0, PIXEL_FILL(1)); FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized(0, 1, sFieldRegionMapHandler->regionMap.mapSecName, 0, 1, 0, NULL); AddTextPrinterParameterized(0, 1, sFieldRegionMapHandler->regionMap.mapSecName, 0, 1, 0, NULL);

View File

@ -3550,21 +3550,21 @@ void CreateAbnormalWeatherEvent(void)
if (FlagGet(FLAG_DEFEATED_KYOGRE) == TRUE) if (FlagGet(FLAG_DEFEATED_KYOGRE) == TRUE)
{ {
VarSet(VAR_ABNORMAL_WEATHER_LOCATION, (randomValue % ABNORMAL_WEATHER_COUNT_PER_LEGENDARY) + ABNORMAL_WEATHER_GROUDON_LOCATIONS_START); VarSet(VAR_ABNORMAL_WEATHER_LOCATION, (randomValue % TERRA_CAVE_LOCATIONS) + TERRA_CAVE_LOCATIONS_START);
} }
else if (FlagGet(FLAG_DEFEATED_GROUDON) == TRUE) else if (FlagGet(FLAG_DEFEATED_GROUDON) == TRUE)
{ {
VarSet(VAR_ABNORMAL_WEATHER_LOCATION, (randomValue % ABNORMAL_WEATHER_COUNT_PER_LEGENDARY) + ABNORMAL_WEATHER_KYOGRE_LOCATIONS_START); VarSet(VAR_ABNORMAL_WEATHER_LOCATION, (randomValue % MARINE_CAVE_LOCATIONS) + MARINE_CAVE_LOCATIONS_START);
} }
else if ((randomValue & 1) == 0) else if ((randomValue & 1) == 0)
{ {
randomValue = Random(); randomValue = Random();
VarSet(VAR_ABNORMAL_WEATHER_LOCATION, (randomValue % ABNORMAL_WEATHER_COUNT_PER_LEGENDARY) + ABNORMAL_WEATHER_GROUDON_LOCATIONS_START); VarSet(VAR_ABNORMAL_WEATHER_LOCATION, (randomValue % TERRA_CAVE_LOCATIONS) + TERRA_CAVE_LOCATIONS_START);
} }
else else
{ {
randomValue = Random(); randomValue = Random();
VarSet(VAR_ABNORMAL_WEATHER_LOCATION, (randomValue % ABNORMAL_WEATHER_COUNT_PER_LEGENDARY) + ABNORMAL_WEATHER_KYOGRE_LOCATIONS_START); VarSet(VAR_ABNORMAL_WEATHER_LOCATION, (randomValue % MARINE_CAVE_LOCATIONS) + MARINE_CAVE_LOCATIONS_START);
} }
} }
@ -3595,14 +3595,10 @@ bool32 GetAbnormalWeatherMapNameAndType(void)
GetMapName(gStringVar1, sAbnormalWeatherMapNumbers[abnormalWeather - 1], 0); GetMapName(gStringVar1, sAbnormalWeatherMapNumbers[abnormalWeather - 1], 0);
if (abnormalWeather < ABNORMAL_WEATHER_KYOGRE_LOCATIONS_START) if (abnormalWeather < MARINE_CAVE_LOCATIONS_START)
{
return FALSE; return FALSE;
}
else else
{
return TRUE; return TRUE;
}
} }
bool8 AbnormalWeatherHasExpired(void) bool8 AbnormalWeatherHasExpired(void)

Some files were not shown because too many files have changed in this diff Show More