add dexnav
|
|
@ -1060,3 +1060,5 @@ Common_EventScript_LegendaryFlewAway:: @ 8273776
|
|||
.include "data/text/frontier_brain.inc"
|
||||
.include "data/text/save.inc"
|
||||
.include "data/text/birch_speech.inc"
|
||||
.include "data/scripts/dexnav.inc"
|
||||
|
||||
|
|
|
|||
|
|
@ -24,9 +24,9 @@ gFieldEffectScriptPointers:: @ 82DB9D4
|
|||
.4byte gFieldEffectScript_JumpSmallSplash @ FLDEFF_JUMP_SMALL_SPLASH
|
||||
.4byte gFieldEffectScript_LongGrass @ FLDEFF_LONG_GRASS
|
||||
.4byte gFieldEffectScript_JumpLongGrass @ FLDEFF_JUMP_LONG_GRASS
|
||||
.4byte gFieldEffectScript_UnusedGrass @ FLDEFF_UNUSED_GRASS
|
||||
.4byte gFieldEffectScript_UnusedGrass2 @ FLDEFF_UNUSED_GRASS_2
|
||||
.4byte gFieldEffectScript_UnusedSand @ FLDEFF_UNUSED_SAND
|
||||
.4byte gFieldEffectScript_ShakingGrass @ FLDEFF_SHAKING_GRASS
|
||||
.4byte gFieldEffectScript_ShakingGrass2 @ FLDEFF_SHAKING_LONG_GRASS
|
||||
.4byte gFieldEffectScript_UnusedSand @ FLDEFF_SAND_HOLE
|
||||
.4byte gFieldEffectScript_WaterSurfacing @ FLDEFF_WATER_SURFACING
|
||||
.4byte gFieldEffectScript_BerryTreeGrowthSparkle @ FLDEFF_BERRY_TREE_GROWTH_SPARKLE
|
||||
.4byte gFieldEffectScript_DeepSandFootprints @ FLDEFF_DEEP_SAND_FOOTPRINTS
|
||||
|
|
@ -72,7 +72,8 @@ gFieldEffectScriptPointers:: @ 82DB9D4
|
|||
.4byte gFieldEffectScript_RayquazaSpotlight @ FLDEFF_RAYQUAZA_SPOTLIGHT
|
||||
.4byte gFieldEffectScript_DestroyDeoxysRock @ FLDEFF_DESTROY_DEOXYS_ROCK
|
||||
.4byte gFieldEffectScript_MoveDeoxysRock @ FLDEFF_MOVE_DEOXYS_ROCK
|
||||
|
||||
.4byte gFieldEffectScript_CaveDust @ FLDEFF_CAVE_DUST
|
||||
|
||||
gFieldEffectScript_ExclamationMarkIcon1:: @ 82DBAE0
|
||||
field_eff_callnative FldEff_ExclamationMarkIcon
|
||||
field_eff_end
|
||||
|
|
@ -149,12 +150,12 @@ gFieldEffectScript_JumpLongGrass:: @ 82DBB74
|
|||
field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_JumpLongGrass
|
||||
field_eff_end
|
||||
|
||||
gFieldEffectScript_UnusedGrass:: @ 82DBB7E
|
||||
field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_UnusedGrass
|
||||
gFieldEffectScript_ShakingGrass:: @ 82DBB7E
|
||||
field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_ShakingGrass
|
||||
field_eff_end
|
||||
|
||||
gFieldEffectScript_UnusedGrass2:: @ 82DBB88
|
||||
field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_UnusedGrass2
|
||||
gFieldEffectScript_ShakingGrass2:: @ 82DBB88
|
||||
field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect1, FldEff_ShakingGrass2
|
||||
field_eff_end
|
||||
|
||||
gFieldEffectScript_UnusedSand:: @ 82DBB92
|
||||
|
|
@ -343,3 +344,8 @@ gFieldEffectScript_DestroyDeoxysRock:: @ 82DBCF9
|
|||
gFieldEffectScript_MoveDeoxysRock:: @ 82DBCFF
|
||||
field_eff_callnative FldEff_MoveDeoxysRock
|
||||
field_eff_end
|
||||
|
||||
@ NEW
|
||||
gFieldEffectScript_CaveDust::
|
||||
field_eff_loadfadedpal_callnative gSpritePalette_CaveDust FldEff_CaveDust
|
||||
field_eff_end
|
||||
|
|
|
|||
47
data/scripts/dexnav.inc
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
EventScript_StartDexNavBattle::
|
||||
lock
|
||||
playse 0x15
|
||||
applymovement OBJ_EVENT_ID_PLAYER Common_Movement_ExclamationMark
|
||||
waitmovement 0
|
||||
waitse
|
||||
dowildbattle
|
||||
release
|
||||
end
|
||||
|
||||
|
||||
EventScript_NotFoundNearby::
|
||||
msgbox sText_NotFoundNearby, MSGBOX_SIGN
|
||||
end
|
||||
sText_NotFoundNearby:
|
||||
.string "It couldn't be found nearby.\n"
|
||||
.string "Try looking in a different area!$"
|
||||
|
||||
|
||||
EventScript_MovedTooFast::
|
||||
msgbox sText_TryMovingSlower, MSGBOX_SIGN
|
||||
end
|
||||
sText_TryMovingSlower:
|
||||
.string "The Pokémon got away!\n"
|
||||
.string "Try moving more slowly.$"
|
||||
|
||||
|
||||
EventScript_PokemonGotAway::
|
||||
msgbox sText_PokemonGotAway, MSGBOX_SIGN
|
||||
end
|
||||
sText_PokemonGotAway:
|
||||
.string "The Pokémon got away!$"
|
||||
|
||||
|
||||
EventScript_LostSignal::
|
||||
msgbox sText_LostSignal, MSGBOX_SIGN
|
||||
end
|
||||
sText_LostSignal:
|
||||
.string "There is no reaction.\n"
|
||||
.string "The signal was lost!$"
|
||||
|
||||
|
||||
EventScript_TooDark::
|
||||
msgbox sText_TooDark, MSGBOX_SIGN
|
||||
end
|
||||
sText_TooDark:
|
||||
.string "It's too dark to search\nfor a Pokémon!$"
|
||||
BIN
graphics/dexnav/captured_all.png
Normal file
|
After Width: | Height: | Size: 157 B |
BIN
graphics/dexnav/cursor.png
Normal file
|
After Width: | Height: | Size: 172 B |
19
graphics/dexnav/gui.pal
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
0 0 0
|
||||
255 255 255
|
||||
217 73 73
|
||||
4 4 4
|
||||
1 81 113
|
||||
1 121 193
|
||||
119 177 75
|
||||
93 97 101
|
||||
91 179 211
|
||||
153 32 32
|
||||
111 141 81
|
||||
173 173 173
|
||||
187 217 167
|
||||
75 147 189
|
||||
177 219 235
|
||||
105 22 22
|
||||
BIN
graphics/dexnav/gui_tilemap.bin
Normal file
BIN
graphics/dexnav/gui_tiles.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
graphics/dexnav/hidden.png
Normal file
|
After Width: | Height: | Size: 178 B |
BIN
graphics/dexnav/hidden_search.png
Normal file
|
After Width: | Height: | Size: 359 B |
BIN
graphics/dexnav/no_data.png
Normal file
|
After Width: | Height: | Size: 182 B |
BIN
graphics/dexnav/owned_icon.png
Normal file
|
After Width: | Height: | Size: 159 B |
BIN
graphics/dexnav/star.png
Normal file
|
After Width: | Height: | Size: 170 B |
BIN
graphics/dexnav/vision.png
Normal file
|
After Width: | Height: | Size: 242 B |
19
graphics/field_effects/palettes/cave_dust.pal
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
255 1 255
|
||||
159 122 85
|
||||
207 189 157
|
||||
199 181 149
|
||||
114 88 61
|
||||
132 101 70
|
||||
199 173 141
|
||||
225 209 193
|
||||
189 165 133
|
||||
181 149 115
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
BIN
graphics/field_effects/pics/cave_dust.png
Normal file
|
After Width: | Height: | Size: 409 B |
19
graphics/text_window/dexnav_pal.pal
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
JASC-PAL
|
||||
0100
|
||||
16
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 6
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
0 0 0
|
||||
46 46 46
|
||||
0 0 0
|
||||
255 255 255
|
||||
|
|
@ -20,9 +20,9 @@
|
|||
#define FLDEFF_JUMP_SMALL_SPLASH 16
|
||||
#define FLDEFF_LONG_GRASS 17
|
||||
#define FLDEFF_JUMP_LONG_GRASS 18
|
||||
#define FLDEFF_UNUSED_GRASS 19
|
||||
#define FLDEFF_UNUSED_GRASS_2 20
|
||||
#define FLDEFF_UNUSED_SAND 21
|
||||
#define FLDEFF_SHAKING_GRASS 19
|
||||
#define FLDEFF_SHAKING_LONG_GRASS 20
|
||||
#define FLDEFF_SAND_HOLE 21
|
||||
#define FLDEFF_WATER_SURFACING 22
|
||||
#define FLDEFF_BERRY_TREE_GROWTH_SPARKLE 23
|
||||
#define FLDEFF_DEEP_SAND_FOOTPRINTS 24
|
||||
|
|
@ -68,6 +68,7 @@
|
|||
#define FLDEFF_RAYQUAZA_SPOTLIGHT 64
|
||||
#define FLDEFF_DESTROY_DEOXYS_ROCK 65
|
||||
#define FLDEFF_MOVE_DEOXYS_ROCK 66
|
||||
#define FLDEFF_CAVE_DUST 67
|
||||
|
||||
#define FLDEFFOBJ_SHADOW_S 0
|
||||
#define FLDEFFOBJ_SHADOW_M 1
|
||||
|
|
@ -106,6 +107,7 @@
|
|||
#define FLDEFFOBJ_BUBBLES 34
|
||||
#define FLDEFFOBJ_SMALL_SPARKLE 35
|
||||
#define FLDEFFOBJ_RAYQUAZA 36
|
||||
#define FLDEFFOBJ_CAVE_DUST 37
|
||||
|
||||
#define FLDEFF_PAL_TAG_CUT_GRASS 0x1000
|
||||
#define FLDEFF_PAL_TAG_SECRET_POWER_TREE 0x1003
|
||||
|
|
@ -119,5 +121,6 @@
|
|||
#define FLDEFF_PAL_TAG_SMALL_SPARKLE 0x100F
|
||||
#define FLDEFF_PAL_TAG_HOF_MONITOR 0x1010
|
||||
#define FLDEFF_PAL_TAG_UNKNOWN 0x1011
|
||||
#define FLDEFF_PAL_TAG_CAVE_DUST 0x1012
|
||||
|
||||
#endif // GUARD_FIELD_EFFECT_CONSTANTS_H
|
||||
|
|
|
|||
|
|
@ -1381,7 +1381,7 @@
|
|||
#define FLAG_IS_CHAMPION (SYSTEM_FLAGS + 0x1F) // Seems to be related to linking.
|
||||
#define FLAG_NURSE_UNION_ROOM_REMINDER (SYSTEM_FLAGS + 0x20)
|
||||
|
||||
#define FLAG_UNUSED_0x881 (SYSTEM_FLAGS + 0x21) // Unused Flag
|
||||
#define FLAG_SYS_DEXNAV_SEARCH (SYSTEM_FLAGS + 0x21)
|
||||
#define FLAG_UNUSED_0x882 (SYSTEM_FLAGS + 0x22) // Unused Flag
|
||||
#define FLAG_UNUSED_0x883 (SYSTEM_FLAGS + 0x23) // Unused Flag
|
||||
#define FLAG_UNUSED_0x884 (SYSTEM_FLAGS + 0x24) // Unused Flag
|
||||
|
|
@ -1396,8 +1396,8 @@
|
|||
#define FLAG_SYS_SAFARI_MODE (SYSTEM_FLAGS + 0x2C)
|
||||
#define FLAG_SYS_CRUISE_MODE (SYSTEM_FLAGS + 0x2D)
|
||||
|
||||
#define FLAG_UNUSED_0x88E (SYSTEM_FLAGS + 0x2E) // Unused Flag
|
||||
#define FLAG_UNUSED_0x88F (SYSTEM_FLAGS + 0x2F) // Unused Flag
|
||||
#define FLAG_SYS_DETECTOR_MODE (SYSTEM_FLAGS + 0x2E) // allow player to find hidden mons
|
||||
#define FLAG_SYS_DEXNAV_GET (SYSTEM_FLAGS + 0x2F) // dexnav shows in start menu
|
||||
|
||||
#define FLAG_SYS_TV_HOME (SYSTEM_FLAGS + 0x30)
|
||||
#define FLAG_SYS_TV_WATCH (SYSTEM_FLAGS + 0x31)
|
||||
|
|
|
|||
|
|
@ -53,8 +53,9 @@
|
|||
#define GAME_STAT_ENTERED_HOT_SPRINGS 49
|
||||
#define GAME_STAT_NUM_UNION_ROOM_BATTLES 50
|
||||
#define GAME_STAT_PLAYED_BERRY_CRUSH 51
|
||||
#define GAME_STAT_DEXNAV_SCANNED 52
|
||||
|
||||
#define NUM_USED_GAME_STATS 52
|
||||
#define NUM_USED_GAME_STATS 53
|
||||
#define NUM_GAME_STATS 64
|
||||
|
||||
#endif // GUARD_CONSTANTS_GAME_STAT_H
|
||||
|
|
|
|||
|
|
@ -263,8 +263,8 @@
|
|||
#define VAR_ROXANNE_CALL_STEP_COUNTER 0x40F4
|
||||
#define VAR_SCOTT_BF_CALL_STEP_COUNTER 0x40F5
|
||||
#define VAR_RIVAL_RAYQUAZA_CALL_STEP_COUNTER 0x40F6
|
||||
#define VAR_UNUSED_0x40F7 0x40F7 // Unused Var
|
||||
#define VAR_UNUSED_0x40F8 0x40F8 // Unused Var
|
||||
#define VAR_DEXNAV_SPECIES 0x40F7 // Registered dexnav species
|
||||
#define VAR_DEXNAV_STEP_COUNTER 0x40F8 // steps for finding hidden pokemon
|
||||
#define VAR_UNUSED_0x40F9 0x40F9 // Unused Var
|
||||
#define VAR_UNUSED_0x40FA 0x40FA // Unused Var
|
||||
#define VAR_UNUSED_0x40FB 0x40FB // Unused Var
|
||||
|
|
|
|||
|
|
@ -23,5 +23,6 @@ void SetDaycareCompatibilityString(void);
|
|||
bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio);
|
||||
void ShowDaycareLevelMenu(void);
|
||||
void ChooseSendDaycareMon(void);
|
||||
u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves);
|
||||
|
||||
#endif // GUARD_DAYCARE_H
|
||||
|
|
|
|||
135
include/dexnav.h
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
#ifndef GUARD_DEXNAV_H
|
||||
#define GUARD_DEXNAV_H
|
||||
|
||||
#define DEXNAV_TIMEOUT 15 //15 seconds is the time out. Max of 1092 seconds allowed
|
||||
#define SNEAKING_PROXIMITY 4 //Tile amount
|
||||
#define CREEPING_PROXIMITY 2
|
||||
#define MAX_PROXIMITY 20
|
||||
|
||||
#define DEXNAV_CHAIN_MAX 100
|
||||
|
||||
//hidden pokemon options - no info so I just guessed at values
|
||||
#define HIDDEN_MON_STEP_COUNT 100 //look for hidden pokemon every x steps
|
||||
#define HIDDEN_MON_SEARCH_RATE 25 //x% chance of finding hidden pokemon every x steps
|
||||
#define HIDDEN_MON_PROBABILTY 15 //x% chance of finding hidden mon compared to regular encounter data
|
||||
|
||||
//// SEARCH PROBABILITIES
|
||||
// see https://m.bulbapedia.bulbagarden.net/wiki/DexNav#Benefits
|
||||
//Chance of encountering egg move at search levels
|
||||
#define SEARCHLEVEL0_MOVECHANCE 0
|
||||
#define SEARCHLEVEL5_MOVECHANCE 21
|
||||
#define SEARCHLEVEL10_MOVECHANCE 46
|
||||
#define SEARCHLEVEL25_MOVECHANCE 58
|
||||
#define SEARCHLEVEL50_MOVECHANCE 63
|
||||
#define SEARCHLEVEL100_MOVECHANCE 83
|
||||
//Chance of encountering Hidden Abilities at search levels
|
||||
#define SEARCHLEVEL0_ABILITYCHANCE 0
|
||||
#define SEARCHLEVEL5_ABILITYCHANCE 0
|
||||
#define SEARCHLEVEL10_ABILITYCHANCE 5
|
||||
#define SEARCHLEVEL25_ABILITYCHANCE 15
|
||||
#define SEARCHLEVEL50_ABILITYCHANCE 20
|
||||
#define SEARCHLEVEL100_ABILITYCHANCE 23
|
||||
//Chance of encountering held item
|
||||
#define SEARCHLEVEL0_ITEM 0
|
||||
#define SEARCHLEVEL5_ITEM 0
|
||||
#define SEARCHLEVEL10_ITEM 1
|
||||
#define SEARCHLEVEL25_ITEM 7
|
||||
#define SEARCHLEVEL50_ITEM 6
|
||||
#define SEARCHLEVEL100_ITEM 12
|
||||
//Chance of encountering one star potential
|
||||
#define SEARCHLEVEL0_ONESTAR 0
|
||||
#define SEARCHLEVEL5_ONESTAR 14
|
||||
#define SEARCHLEVEL10_ONESTAR 17
|
||||
#define SEARCHLEVEL25_ONESTAR 17
|
||||
#define SEARCHLEVEL50_ONESTAR 15
|
||||
#define SEARCHLEVEL100_ONESTAR 8
|
||||
//Chance of encountering two star potential
|
||||
#define SEARCHLEVEL0_TWOSTAR 0
|
||||
#define SEARCHLEVEL5_TWOSTAR 1
|
||||
#define SEARCHLEVEL10_TWOSTAR 9
|
||||
#define SEARCHLEVEL25_TWOSTAR 16
|
||||
#define SEARCHLEVEL50_TWOSTAR 17
|
||||
#define SEARCHLEVEL100_TWOSTAR 24
|
||||
//Chance of encountering three star potential
|
||||
#define SEARCHLEVEL0_THREESTAR 0
|
||||
#define SEARCHLEVEL5_THREESTAR 0
|
||||
#define SEARCHLEVEL10_THREESTAR 1
|
||||
#define SEARCHLEVEL25_THREESTAR 7
|
||||
#define SEARCHLEVEL50_THREESTAR 6
|
||||
#define SEARCHLEVEL100_THREESTAR 12
|
||||
|
||||
// GUI Info
|
||||
#define ROW_WATER 0
|
||||
#define ROW_LAND_TOP 1
|
||||
#define ROW_LAND_BOT 2
|
||||
#define ROW_HIDDEN 3
|
||||
#define ROWS_COUNT 4
|
||||
|
||||
#define ROW_WATER_ICON_X 30
|
||||
#define ROW_WATER_ICON_Y 35
|
||||
|
||||
#define ROW_LAND_ICON_X 20
|
||||
#define ROW_LAND_TOP_ICON_Y 72
|
||||
#define ROW_LAND_BOT_ICON_Y (ROW_LAND_TOP_ICON_Y + 28)
|
||||
|
||||
#define ROW_HIDDEN_ICON_X 52
|
||||
#define ROW_HIDDEN_ICON_Y 138
|
||||
|
||||
#define ENCOUNTER_TYPE_LAND 0
|
||||
#define ENCOUNTER_TYPE_WATER 1
|
||||
#define ENCOUNTER_TYPE_HIDDEN 2 //get from species
|
||||
|
||||
#define COL_WATER_COUNT 5
|
||||
#define COL_LAND_COUNT 6
|
||||
#define COL_HIDDEN_COUNT 3
|
||||
|
||||
#define COL_WATER_MAX (COL_WATER_COUNT - 1)
|
||||
#define COL_LAND_MAX (COL_LAND_COUNT - 1)
|
||||
#define COL_HIDDEN_MAX (COL_HIDDEN_COUNT - 1)
|
||||
|
||||
// SEARCH INFO
|
||||
#define SCANSTART_X 0
|
||||
#define SCANSTART_Y 0
|
||||
#define SCANSIZE_X 12
|
||||
#define SCANSIZE_Y 12
|
||||
|
||||
#define SPECIES_INFO_Y 5
|
||||
#define TYPE_ICONS_Y (SPECIES_INFO_Y + 24)
|
||||
#define SEARCH_LEVEL_Y (TYPE_ICONS_Y + 24)
|
||||
#define LEVEL_BONUS_Y (SEARCH_LEVEL_Y + 24)
|
||||
#define HA_INFO_Y (LEVEL_BONUS_Y + 24)
|
||||
|
||||
#define MON_LEVEL_NONEXISTENT 255 //if mon not in area GetEncounterLevel returns this to exit the search
|
||||
|
||||
// gui tags
|
||||
#define ICON_PAL_TAG 56000
|
||||
#define ICON_GFX_TAG 55130
|
||||
#define SELECTION_CURSOR_TAG 0x4005
|
||||
#define CAPTURED_ALL_TAG 0x4002
|
||||
|
||||
//search tags
|
||||
#define OWNED_ICON_TAG 0x4003
|
||||
#define HIDDEN_SEARCH_TAG SELECTION_CURSOR_TAG
|
||||
#define HIDDEN_MON_ICON_TAG 0x4006
|
||||
#define LIT_STAR_TILE_TAG 0x4010
|
||||
//#define SIGHT_TAG 0x5424
|
||||
#define HELD_ITEM_TAG 0xd750
|
||||
|
||||
// dexnav search variable
|
||||
#define MASK_SPECIES 0x3FFF //first 14 bits
|
||||
#define MASK_ENVIRONMENT 0xC000 //last two bit
|
||||
|
||||
//funcs
|
||||
void EndDexNavSearch(u8 taskId);
|
||||
void Task_OpenDexNavFromStartMenu(u8 taskId);
|
||||
bool8 TryStartDexnavSearch(void);
|
||||
void TryIncrementSpeciesSearchLevel(u16 dexNum);
|
||||
void ResetDexNavSearch(void);
|
||||
bool8 TryFindHiddenPokemon(void);
|
||||
bool8 DexNavTryMakeShinyMon(void);
|
||||
|
||||
//ewram
|
||||
extern u8 gCurrentDexNavChain;
|
||||
extern bool8 gDexnavBattle;
|
||||
|
||||
#endif //GUARD_DEXNAV_H
|
||||
|
|
@ -610,4 +610,13 @@ extern const u8 EventScript_TradeCenter_Chair0[];
|
|||
extern const u8 EventScript_ConfirmLeaveTradeRoom[];
|
||||
extern const u8 EventScript_TerminateLink[];
|
||||
|
||||
// Dexnav
|
||||
extern const u8 EventScript_StartDexNavBattle[];
|
||||
extern const u8 EventScript_NotFoundNearby[];
|
||||
extern const u8 EventScript_PokemonGotAway[];
|
||||
extern const u8 EventScript_LostSignal[];
|
||||
extern const u8 EventScript_TooDark[];
|
||||
extern const u8 EventScript_MovedTooFast[];
|
||||
|
||||
|
||||
#endif // GUARD_EVENT_SCRIPTS_H
|
||||
|
|
|
|||
|
|
@ -46,5 +46,8 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b);
|
|||
void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId);
|
||||
u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority);
|
||||
void StartEscapeRopeFieldEffect(void);
|
||||
void FieldEffectFreeGraphicsResources(struct Sprite *sprite);
|
||||
void FieldEff_CaveDust(void);
|
||||
|
||||
|
||||
#endif // GUARD_FIELD_EFFECTS_H
|
||||
|
|
|
|||
|
|
@ -251,6 +251,8 @@ enum {
|
|||
#define PLAYER_AVATAR_FLAG_FORCED_MOVE (1 << 6)
|
||||
#define PLAYER_AVATAR_FLAG_DASH (1 << 7)
|
||||
|
||||
#define PLAYER_AVATAR_FLAG_BIKE (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)
|
||||
|
||||
enum
|
||||
{
|
||||
ACRO_BIKE_NORMAL,
|
||||
|
|
@ -303,7 +305,8 @@ struct PlayerAvatar
|
|||
/*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.
|
||||
/*0x04*/ u8 spriteId;
|
||||
/*0x05*/ u8 objectEventId;
|
||||
/*0x05*/ u8 objectEventId:7;
|
||||
u8 creeping:1;
|
||||
/*0x06*/ bool8 preventStep;
|
||||
/*0x07*/ u8 gender;
|
||||
/*0x08*/ u8 acroBikeState; // 00 is normal, 01 is turning, 02 is standing wheelie, 03 is hopping wheelie
|
||||
|
|
|
|||
|
|
@ -1043,6 +1043,8 @@ struct SaveBlock1
|
|||
/*0x3D5A*/ u8 filler3D5A[0xA];
|
||||
/*0x3D64*/ struct SaveTrainerHill trainerHill;
|
||||
/*0x3D70*/ struct WaldaPhrase waldaPhrase;
|
||||
u8 dexNavSearchLevels[NUM_SPECIES];
|
||||
u8 dexNavChain;
|
||||
// sizeof: 0x3D88
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,11 @@ extern u8 gSelectedMonPartyId;
|
|||
extern MainCallback gPostMenuFieldCallback;
|
||||
extern u8 gSelectedOrderFromParty[MAX_FRONTIER_PARTY_SIZE];
|
||||
extern u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2];
|
||||
extern const struct SpriteSheet sSpriteSheet_HeldItem;
|
||||
extern const struct SpritePalette sSpritePalette_HeldItem;
|
||||
|
||||
extern const struct SpriteSheet gSpriteSheet_HeldItem;
|
||||
extern const u16 gHeldItemPalette[];
|
||||
|
||||
extern void (*gItemUseCB)(u8, TaskFunc);
|
||||
|
||||
|
|
|
|||
|
|
@ -204,7 +204,8 @@ struct BaseStats
|
|||
/* 0x18 */ u8 safariZoneFleeRate;
|
||||
/* 0x19 */ u8 bodyColor : 7;
|
||||
u8 noFlip : 1;
|
||||
};
|
||||
/* 0x1A */ u8 abilityHidden;
|
||||
}; /* size = 28 */
|
||||
|
||||
struct BattleMove
|
||||
{
|
||||
|
|
|
|||
|
|
@ -24,5 +24,6 @@ void sub_80D328C(struct Sprite *sprite);
|
|||
void SpriteCB_MonIcon(struct Sprite *sprite);
|
||||
void SetPartyHPBarSprite(struct Sprite *sprite, u8 animNum);
|
||||
u8 GetMonIconPaletteIndexFromSpecies(u16 species);
|
||||
void SafeFreeMonIconPalette(u16 species);
|
||||
|
||||
#endif // GUARD_POKEMON_ICON_H
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ extern u8 gLastViewedMonIndex;
|
|||
|
||||
extern const u8 *const gMoveDescriptionPointers[];
|
||||
extern const u8 *const gNatureNamePointers[];
|
||||
extern const struct CompressedSpriteSheet gSpriteSheet_MoveTypes;
|
||||
extern const struct SpriteTemplate gSpriteTemplate_MoveTypes;
|
||||
|
||||
void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void));
|
||||
void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove);
|
||||
|
|
|
|||
|
|
@ -19,5 +19,6 @@ u16 Random2(void);
|
|||
//Sets the initial seed value of the pseudorandom number generator
|
||||
void SeedRng(u16 seed);
|
||||
void SeedRng2(u16 seed);
|
||||
u16 RandRange(u16 min, u16 max);
|
||||
|
||||
#endif // GUARD_RANDOM_H
|
||||
|
|
|
|||
|
|
@ -256,6 +256,7 @@ extern const u8 gText_MenuOption[];
|
|||
extern const u8 gText_MenuExit[];
|
||||
extern const u8 gText_MenuRetire[];
|
||||
extern const u8 gText_MenuRest[];
|
||||
extern const u8 gText_MenuDexNav[];
|
||||
extern const u8 gText_Floor1[];
|
||||
extern const u8 gText_Floor2[];
|
||||
extern const u8 gText_Floor3[];
|
||||
|
|
|
|||
|
|
@ -24,4 +24,7 @@ const u16 *GetTextWindowPalette(u8 id);
|
|||
const u16 *GetOverworldTextboxPalettePtr(void);
|
||||
void sub_8098C6C(u8 bg, u16 destOffset, u8 palOffset);
|
||||
|
||||
//NEW
|
||||
void LoadDexNavWindowGfx(u8 windowId, u16 destOffset, u8 palOffset);
|
||||
|
||||
#endif // GUARD_TEXT_WINDOW_H
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#define WATER_WILD_COUNT 5
|
||||
#define ROCK_WILD_COUNT 5
|
||||
#define FISH_WILD_COUNT 10
|
||||
#define HIDDEN_WILD_COUNT 3
|
||||
|
||||
struct WildPokemon
|
||||
{
|
||||
|
|
@ -26,6 +27,7 @@ struct WildPokemonHeader
|
|||
const struct WildPokemonInfo *landMonsInfo;
|
||||
const struct WildPokemonInfo *waterMonsInfo;
|
||||
const struct WildPokemonInfo *rockSmashMonsInfo;
|
||||
const struct WildPokemonInfo *hiddenMonsInfo;
|
||||
const struct WildPokemonInfo *fishingMonsInfo;
|
||||
};
|
||||
|
||||
|
|
@ -40,5 +42,10 @@ void FishingWildEncounter(u8 rod);
|
|||
u16 GetLocalWildMon(bool8 *isWaterMon);
|
||||
u16 GetLocalWaterMon(void);
|
||||
bool8 UpdateRepelCounter(void);
|
||||
void CreateWildMon(u16 species, u8 level);
|
||||
u16 GetCurrentMapWildMonHeaderId(void);
|
||||
u8 ChooseWildMonIndex_Land(void);
|
||||
u8 ChooseWildMonIndex_WaterRock(void);
|
||||
u8 ChooseHiddenMonIndex(void);
|
||||
|
||||
#endif // GUARD_WILD_ENCOUNTER_H
|
||||
|
|
|
|||
|
|
@ -333,6 +333,7 @@ SECTIONS {
|
|||
src/gym_leader_rematch.o(.text);
|
||||
src/battle_transition_frontier.o(.text);
|
||||
src/international_string_util.o(.text);
|
||||
src/dexnav.o(.text);
|
||||
} =0
|
||||
|
||||
script_data :
|
||||
|
|
@ -691,6 +692,7 @@ SECTIONS {
|
|||
data/mystery_event.o(.rodata);
|
||||
src/m4a_tables.o(.rodata);
|
||||
data/sound_data.o(.rodata);
|
||||
src/dexnav.o(.rodata);
|
||||
} =0
|
||||
|
||||
song_data :
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch;
|
|||
const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza;
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_CaveDust;
|
||||
|
||||
const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = {
|
||||
[FLDEFFOBJ_SHADOW_S] = &gFieldEffectObjectTemplate_ShadowSmall,
|
||||
|
|
@ -74,4 +75,5 @@ const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = {
|
|||
[FLDEFFOBJ_BUBBLES] = &gFieldEffectObjectTemplate_Bubbles,
|
||||
[FLDEFFOBJ_SMALL_SPARKLE] = &gFieldEffectObjectTemplate_SmallSparkle,
|
||||
[FLDEFFOBJ_RAYQUAZA] = &gFieldEffectObjectTemplate_Rayquaza,
|
||||
[FLDEFFOBJ_CAVE_DUST] = &gFieldEffectObjectTemplate_CaveDust,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1287,3 +1287,23 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = {
|
|||
};
|
||||
|
||||
static const struct SpritePalette sSpritePalette_Unused = {gObjectEventPal_Npc3, FLDEFF_PAL_TAG_UNKNOWN};
|
||||
|
||||
// cave dust
|
||||
static const struct SpriteFrameImage sPicTable_CaveDust[] =
|
||||
{
|
||||
overworld_frame(gFieldEffectObjectPic_CaveDust, 2, 2, 0),
|
||||
overworld_frame(gFieldEffectObjectPic_CaveDust, 2, 2, 1),
|
||||
overworld_frame(gFieldEffectObjectPic_CaveDust, 2, 2, 2),
|
||||
overworld_frame(gFieldEffectObjectPic_CaveDust, 2, 2, 3),
|
||||
};
|
||||
const struct SpriteTemplate gFieldEffectObjectTemplate_CaveDust = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = FLDEFF_PAL_TAG_CAVE_DUST,
|
||||
.oam = &gObjectEventBaseOam_16x16,
|
||||
.anims = sAnimTable_WaterSurfacing,
|
||||
.images = sPicTable_CaveDust,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = WaitFieldEffectSpriteAnim,
|
||||
};
|
||||
|
||||
const struct SpritePalette gSpritePalette_CaveDust = {gFieldEffectObjectPalette_CaveDust, FLDEFF_PAL_TAG_CAVE_DUST};
|
||||
|
|
|
|||
|
|
@ -360,3 +360,6 @@ const u32 gObjectEventPic_Lugia[] = INCBIN_U32("graphics/object_events/pics/poke
|
|||
const u16 gObjectEventPal_Lugia[] = INCBIN_U16("graphics/object_events/palettes/lugia.gbapal");
|
||||
const u32 gObjectEventPic_HoOh[] = INCBIN_U32("graphics/object_events/pics/pokemon/ho_oh.4bpp");
|
||||
const u16 gObjectEventPal_HoOh[] = INCBIN_U16("graphics/object_events/palettes/ho_oh.gbapal");
|
||||
|
||||
const u32 gFieldEffectObjectPic_CaveDust[] = INCBIN_U32("graphics/field_effects/pics/cave_dust.4bpp");
|
||||
const u16 gFieldEffectObjectPalette_CaveDust[] = INCBIN_U16("graphics/field_effects/palettes/cave_dust.gbapal");
|
||||
|
|
|
|||
|
|
@ -874,7 +874,7 @@ static const u8 *const sUnionRoomTradeMessages[] =
|
|||
};
|
||||
|
||||
static const u32 sHeldItemGfx[] = INCBIN_U32("graphics/interface/hold_icons.4bpp");
|
||||
static const u16 sHeldItemPalette[] = INCBIN_U16("graphics/interface/hold_icons.gbapal");
|
||||
const u16 gHeldItemPalette[] = INCBIN_U16("graphics/interface/hold_icons.gbapal");
|
||||
|
||||
static const struct OamData sOamData_HeldItem =
|
||||
{
|
||||
|
|
@ -911,14 +911,14 @@ static const union AnimCmd *const sSpriteAnimTable_HeldItem[] =
|
|||
sSpriteAnim_HeldMail,
|
||||
};
|
||||
|
||||
static const struct SpriteSheet sSpriteSheet_HeldItem =
|
||||
const struct SpriteSheet gSpriteSheet_HeldItem =
|
||||
{
|
||||
sHeldItemGfx, sizeof(sHeldItemGfx), 0xd750
|
||||
};
|
||||
|
||||
static const struct SpritePalette sSpritePalette_HeldItem =
|
||||
{
|
||||
sHeldItemPalette, 0xd750
|
||||
gHeldItemPalette, 0xd750
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sSpriteTemplate_HeldItem =
|
||||
|
|
|
|||
|
|
@ -603,7 +603,7 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare)
|
|||
|
||||
// Counts the number of egg moves a pokemon learns and stores the moves in
|
||||
// the given array.
|
||||
static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves)
|
||||
u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves)
|
||||
{
|
||||
u16 eggMoveIdx;
|
||||
u16 numEggMoves;
|
||||
|
|
|
|||
2723
src/dexnav.c
Normal file
|
|
@ -3880,3 +3880,18 @@ static void Task_MoveDeoxysRock(u8 taskId)
|
|||
}
|
||||
}
|
||||
|
||||
// new
|
||||
u8 FldEff_CaveDust(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
|
||||
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
|
||||
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_CAVE_DUST], gFieldEffectArguments[0], gFieldEffectArguments[1], 0xFF);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteId].coordOffsetEnabled = TRUE;
|
||||
gSprites[spriteId].data[0] = 22;
|
||||
}
|
||||
|
||||
return spriteId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -808,7 +808,7 @@ void UpdateHotSpringsWaterFieldEffect(struct Sprite *sprite)
|
|||
}
|
||||
}
|
||||
|
||||
u32 FldEff_UnusedGrass(void)
|
||||
u32 FldEff_ShakingGrass(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite *sprite;
|
||||
|
|
@ -820,12 +820,13 @@ u32 FldEff_UnusedGrass(void)
|
|||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = FLDEFF_UNUSED_GRASS;
|
||||
sprite->data[0] = FLDEFF_SHAKING_GRASS;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
u32 FldEff_UnusedGrass2(void)
|
||||
u32 FldEff_ShakingGrass2(void)
|
||||
{
|
||||
u8 spriteId;
|
||||
struct Sprite *sprite;
|
||||
|
|
@ -837,9 +838,10 @@ u32 FldEff_UnusedGrass2(void)
|
|||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = FLDEFF_UNUSED_GRASS_2;
|
||||
sprite->data[0] = FLDEFF_SHAKING_LONG_GRASS;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
u32 FldEff_UnusedSand(void)
|
||||
|
|
@ -854,9 +856,9 @@ u32 FldEff_UnusedSand(void)
|
|||
sprite = &gSprites[spriteId];
|
||||
sprite->coordOffsetEnabled = TRUE;
|
||||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = FLDEFF_UNUSED_SAND;
|
||||
sprite->data[0] = FLDEFF_SAND_HOLE;
|
||||
}
|
||||
return 0;
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
u32 FldEff_WaterSurfacing(void)
|
||||
|
|
@ -873,7 +875,8 @@ u32 FldEff_WaterSurfacing(void)
|
|||
sprite->oam.priority = gFieldEffectArguments[3];
|
||||
sprite->data[0] = FLDEFF_WATER_SURFACING;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
void StartAshFieldEffect(s16 x, s16 y, u16 metatileId, s16 d)
|
||||
|
|
@ -1229,7 +1232,7 @@ u32 FldEff_BerryTreeGrowthSparkle(void)
|
|||
sprite->oam.paletteNum = 5;
|
||||
sprite->data[0] = FLDEFF_BERRY_TREE_GROWTH_SPARKLE;
|
||||
}
|
||||
return 0;
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
u32 ShowTreeDisguiseFieldEffect(void)
|
||||
|
|
@ -1346,7 +1349,7 @@ u32 FldEff_Sparkle(void)
|
|||
gSprites[spriteId].oam.priority = gFieldEffectArguments[2];
|
||||
gSprites[spriteId].coordOffsetEnabled = TRUE;
|
||||
}
|
||||
return 0;
|
||||
return spriteId;
|
||||
}
|
||||
|
||||
void UpdateSparkleFieldEffect(struct Sprite *sprite)
|
||||
|
|
@ -1605,18 +1608,3 @@ static void sub_81561FC(struct Sprite *sprite, u8 z, u8 offset)
|
|||
}
|
||||
}
|
||||
|
||||
// Unused data. Feel free to remove.
|
||||
static const u8 gUnknown_085CDC6E[] =
|
||||
{
|
||||
0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02,
|
||||
0x01, 0x02, 0x02, 0x01, 0x02, 0x02, 0x01, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x02,
|
||||
0x01, 0x01, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
|
||||
0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00,
|
||||
0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01,
|
||||
0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF,
|
||||
0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x00
|
||||
};
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@
|
|||
#include "berry_powder.h"
|
||||
#include "mevent.h"
|
||||
#include "union_room_chat.h"
|
||||
#include "constants/map_groups.h"
|
||||
|
||||
extern const u8 EventScript_ResetAllMapFlags[];
|
||||
|
||||
|
|
@ -206,6 +207,8 @@ void NewGameInitData(void)
|
|||
WipeTrainerNameRecords();
|
||||
ResetTrainerHillResults();
|
||||
ResetContestLinkResults();
|
||||
memset(gSaveBlock1Ptr->dexNavSearchLevels, 0, sizeof(gSaveBlock1Ptr->dexNavSearchLevels));
|
||||
gSaveBlock1Ptr->dexNavChain = 0;
|
||||
}
|
||||
|
||||
static void ResetMiniGamesRecords(void)
|
||||
|
|
|
|||
|
|
@ -3985,7 +3985,7 @@ static void ShowOrHideHeldItemSprite(u16 item, struct PartyMenuBox *menuBox)
|
|||
|
||||
void LoadHeldItemIcons(void)
|
||||
{
|
||||
LoadSpriteSheet(&sSpriteSheet_HeldItem);
|
||||
LoadSpriteSheet(&gSpriteSheet_HeldItem);
|
||||
LoadSpritePalette(&sSpritePalette_HeldItem);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ static u8 CreateMonIconSprite(struct MonIconSpriteTemplate *, s16, s16, u8);
|
|||
|
||||
const u8 *const gMonIconTable[] =
|
||||
{
|
||||
[SPECIES_NONE] = gMonIcon_Bulbasaur,
|
||||
[SPECIES_NONE] = gMonIcon_QuestionMark,
|
||||
[SPECIES_BULBASAUR] = gMonIcon_Bulbasaur,
|
||||
[SPECIES_IVYSAUR] = gMonIcon_Ivysaur,
|
||||
[SPECIES_VENUSAUR] = gMonIcon_Venusaur,
|
||||
|
|
|
|||
|
|
@ -851,13 +851,13 @@ static const union AnimCmd *const sSpriteAnimTable_MoveTypes[NUMBER_OF_MON_TYPES
|
|||
sSpriteAnim_CategoryTough,
|
||||
};
|
||||
|
||||
static const struct CompressedSpriteSheet sSpriteSheet_MoveTypes =
|
||||
const struct CompressedSpriteSheet gSpriteSheet_MoveTypes =
|
||||
{
|
||||
.data = gMoveTypes_Gfx,
|
||||
.size = (NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT) * 0x100,
|
||||
.tag = TAG_MOVE_TYPES
|
||||
};
|
||||
static const struct SpriteTemplate sSpriteTemplate_MoveTypes =
|
||||
const struct SpriteTemplate gSpriteTemplate_MoveTypes =
|
||||
{
|
||||
.tileTag = TAG_MOVE_TYPES,
|
||||
.paletteTag = TAG_MOVE_TYPES,
|
||||
|
|
@ -1319,7 +1319,7 @@ static bool8 DecompressGraphics(void)
|
|||
sMonSummaryScreen->switchCounter++;
|
||||
break;
|
||||
case 7:
|
||||
LoadCompressedSpriteSheet(&sSpriteSheet_MoveTypes);
|
||||
LoadCompressedSpriteSheet(&gSpriteSheet_MoveTypes);
|
||||
sMonSummaryScreen->switchCounter++;
|
||||
break;
|
||||
case 8:
|
||||
|
|
@ -3746,7 +3746,7 @@ static void CreateMoveTypeIcons(void)
|
|||
for (i = SPRITE_ARR_ID_TYPE; i < SPRITE_ARR_ID_TYPE + 5; i++)
|
||||
{
|
||||
if (sMonSummaryScreen->spriteIds[i] == SPRITE_NONE)
|
||||
sMonSummaryScreen->spriteIds[i] = CreateSprite(&sSpriteTemplate_MoveTypes, 0, 0, 2);
|
||||
sMonSummaryScreen->spriteIds[i] = CreateSprite(&gSpriteTemplate_MoveTypes, 0, 0, 2);
|
||||
|
||||
SetSpriteInvisibility(i, TRUE);
|
||||
}
|
||||
|
|
|
|||
11
src/random.c
|
|
@ -31,3 +31,14 @@ u16 Random2(void)
|
|||
gRng2Value = ISO_RANDOMIZE1(gRng2Value);
|
||||
return gRng2Value >> 16;
|
||||
}
|
||||
|
||||
// NEW
|
||||
u16 RandRange(u16 min, u16 max)
|
||||
{
|
||||
if (min == max)
|
||||
return min;
|
||||
|
||||
max++; // make inclusive
|
||||
return (Random() % (max - min)) + min;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@
|
|||
#include "window.h"
|
||||
#include "constants/songs.h"
|
||||
#include "union_room.h"
|
||||
#include "dexnav.h"
|
||||
#include "constants/rgb.h"
|
||||
|
||||
// Menu actions
|
||||
|
|
@ -61,7 +62,8 @@ enum
|
|||
MENU_ACTION_PLAYER_LINK,
|
||||
MENU_ACTION_REST_FRONTIER,
|
||||
MENU_ACTION_RETIRE_FRONTIER,
|
||||
MENU_ACTION_PYRAMID_BAG
|
||||
MENU_ACTION_PYRAMID_BAG,
|
||||
MENU_ACTION_DEXNAV
|
||||
};
|
||||
|
||||
// Save status
|
||||
|
|
@ -102,6 +104,7 @@ static bool8 StartMenuSafariZoneRetireCallback(void);
|
|||
static bool8 StartMenuLinkModePlayerNameCallback(void);
|
||||
static bool8 StartMenuBattlePyramidRetireCallback(void);
|
||||
static bool8 StartMenuBattlePyramidBagCallback(void);
|
||||
static bool8 StartMenuDexNavCallback(void);
|
||||
|
||||
// Menu callbacks
|
||||
static bool8 SaveStartCallback(void);
|
||||
|
|
@ -167,7 +170,8 @@ static const struct MenuAction sStartMenuItems[] =
|
|||
{gText_MenuPlayer, {.u8_void = StartMenuLinkModePlayerNameCallback}},
|
||||
{gText_MenuRest, {.u8_void = StartMenuSaveCallback}},
|
||||
{gText_MenuRetire, {.u8_void = StartMenuBattlePyramidRetireCallback}},
|
||||
{gText_MenuBag, {.u8_void = StartMenuBattlePyramidBagCallback}}
|
||||
{gText_MenuBag, {.u8_void = StartMenuBattlePyramidBagCallback}},
|
||||
{gText_MenuDexNav, {.u8_void = StartMenuDexNavCallback}}
|
||||
};
|
||||
|
||||
static const struct BgTemplate sBgTemplates_LinkBattleSave[] =
|
||||
|
|
@ -287,22 +291,20 @@ static void AddStartMenuAction(u8 action)
|
|||
}
|
||||
|
||||
static void BuildNormalStartMenu(void)
|
||||
{
|
||||
{
|
||||
if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE)
|
||||
{
|
||||
AddStartMenuAction(MENU_ACTION_POKEDEX);
|
||||
}
|
||||
|
||||
if (FlagGet(FLAG_SYS_DEXNAV_GET))
|
||||
AddStartMenuAction(MENU_ACTION_DEXNAV);
|
||||
|
||||
if (FlagGet(FLAG_SYS_POKEMON_GET) == TRUE)
|
||||
{
|
||||
AddStartMenuAction(MENU_ACTION_POKEMON);
|
||||
}
|
||||
|
||||
AddStartMenuAction(MENU_ACTION_BAG);
|
||||
|
||||
if (FlagGet(FLAG_SYS_POKENAV_GET) == TRUE)
|
||||
{
|
||||
AddStartMenuAction(MENU_ACTION_POKENAV);
|
||||
}
|
||||
|
||||
AddStartMenuAction(MENU_ACTION_PLAYER);
|
||||
AddStartMenuAction(MENU_ACTION_SAVE);
|
||||
|
|
@ -586,7 +588,6 @@ static bool8 HandleStartMenuInput(void)
|
|||
if (GetNationalPokedexCount(FLAG_GET_SEEN) == 0)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
gMenuCallback = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void;
|
||||
|
||||
if (gMenuCallback != StartMenuSaveCallback
|
||||
|
|
@ -610,7 +611,7 @@ static bool8 HandleStartMenuInput(void)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 StartMenuPokedexCallback(void)
|
||||
bool8 StartMenuPokedexCallback(void)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
|
|
@ -1411,3 +1412,9 @@ void AppendToList(u8 *list, u8 *pos, u8 newEntry)
|
|||
list[*pos] = newEntry;
|
||||
(*pos)++;
|
||||
}
|
||||
|
||||
static bool8 StartMenuDexNavCallback(void)
|
||||
{
|
||||
CreateTask(Task_OpenDexNavFromStartMenu, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1515,6 +1515,7 @@ const u8 gText_MenuOption[] = _("OPTION");
|
|||
const u8 gText_MenuExit[] = _("EXIT");
|
||||
const u8 gText_MenuRetire[] = _("RETIRE");
|
||||
const u8 gText_MenuRest[] = _("REST");
|
||||
const u8 gText_MenuDexNav[] = _("DEXNAV");
|
||||
const u8 gText_SafariBallStock[] = _("SAFARI BALLS\nStock: {STR_VAR_1}");
|
||||
const u8 gText_BattlePyramidFloor[] = _("Battle Pyramid\n{STR_VAR_1}");
|
||||
const u8 gText_Floor1[] = _("Floor 1");
|
||||
|
|
|
|||
|
|
@ -82,6 +82,9 @@ static const struct TilesPal sWindowFrames[WINDOW_FRAMES_COUNT] =
|
|||
{sTextWindowFrame20_Gfx, sTextWindowFrame20_Pal}
|
||||
};
|
||||
|
||||
static const u16 sTextWindowDexnavFrame[] = INCBIN_U16("graphics/text_window/dexnav_pal.gbapal");
|
||||
static const struct TilesPal sDexnavWindowFrame = {gTextWindowFrame1_Gfx, sTextWindowDexnavFrame};
|
||||
|
||||
// code
|
||||
const struct TilesPal *GetWindowFrameTilesPal(u8 id)
|
||||
{
|
||||
|
|
@ -195,3 +198,10 @@ void sub_8098C6C(u8 bg, u16 destOffset, u8 palOffset)
|
|||
LoadBgTiles(bg, sWindowFrames[gSaveBlock2Ptr->optionsWindowFrameType].tiles, 0x120, destOffset);
|
||||
LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, palOffset, 0x20);
|
||||
}
|
||||
|
||||
void LoadDexNavWindowGfx(u8 windowId, u16 destOffset, u8 palOffset)
|
||||
{
|
||||
LoadBgTiles(GetWindowAttribute(windowId, WINDOW_BG), sDexnavWindowFrame.tiles, 0x120, destOffset);
|
||||
LoadPalette(sDexnavWindowFrame.pal, palOffset, 32);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ static void FeebasSeedRng(u16 seed)
|
|||
sFeebasRngValue = seed;
|
||||
}
|
||||
|
||||
static u8 ChooseWildMonIndex_Land(void)
|
||||
u8 ChooseWildMonIndex_Land(void)
|
||||
{
|
||||
u8 rand = Random() % ENCOUNTER_CHANCE_LAND_MONS_TOTAL;
|
||||
|
||||
|
|
@ -168,7 +168,7 @@ static u8 ChooseWildMonIndex_Land(void)
|
|||
return 11;
|
||||
}
|
||||
|
||||
static u8 ChooseWildMonIndex_WaterRock(void)
|
||||
u8 ChooseWildMonIndex_WaterRock(void)
|
||||
{
|
||||
u8 rand = Random() % ENCOUNTER_CHANCE_WATER_MONS_TOTAL;
|
||||
|
||||
|
|
@ -260,7 +260,7 @@ static u8 ChooseWildMonLevel(const struct WildPokemon *wildPokemon)
|
|||
return min + rand;
|
||||
}
|
||||
|
||||
static u16 GetCurrentMapWildMonHeaderId(void)
|
||||
u16 GetCurrentMapWildMonHeaderId(void)
|
||||
{
|
||||
u16 i;
|
||||
|
||||
|
|
@ -334,7 +334,7 @@ static u8 PickWildMonNature(void)
|
|||
return Random() % NUM_NATURES;
|
||||
}
|
||||
|
||||
static void CreateWildMon(u16 species, u8 level)
|
||||
void CreateWildMon(u16 species, u8 level)
|
||||
{
|
||||
bool32 checkCuteCharm;
|
||||
|
||||
|
|
@ -919,3 +919,20 @@ static void ApplyCleanseTagEncounterRateMod(u32 *encRate)
|
|||
if (GetMonData(&gPlayerParty[0], MON_DATA_HELD_ITEM) == ITEM_CLEANSE_TAG)
|
||||
*encRate = *encRate * 2 / 3;
|
||||
}
|
||||
|
||||
u8 ChooseHiddenMonIndex(void)
|
||||
{
|
||||
#ifdef ENCOUNTER_CHANCE_HIDDEN_MONS_TOTAL
|
||||
u8 rand = Random() % ENCOUNTER_CHANCE_HIDDEN_MONS_TOTAL;
|
||||
|
||||
if (rand < ENCOUNTER_CHANCE_HIDDEN_MONS_SLOT_0)
|
||||
return 0;
|
||||
else if (rand >= ENCOUNTER_CHANCE_HIDDEN_MONS_SLOT_0 && rand < ENCOUNTER_CHANCE_HIDDEN_MONS_SLOT_1)
|
||||
return 1;
|
||||
else
|
||||
return 2;
|
||||
#else
|
||||
return 0xFF;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -148,3 +148,4 @@
|
|||
.include "src/faraway_island.o"
|
||||
.include "src/trainer_hill.o"
|
||||
.include "src/rayquaza_scene.o"
|
||||
.include "src/dexnav.o"
|
||||
|
|
|
|||