Feature Branches - Pawkkie/Team-Aquas-Asset-Repo GitHub Wiki
What's the Feature Branch wiki?
First, if you want to skip to the Feature Branches, click here!
This wiki page maintains a list of feature branches along with descriptions of what they are and links to the branches themselves. Feature branches are essentially publicly available pokeemerald or pokeemerald-expansion forks that have isolated new features, so they can be more easily incorporated into other projects. Please also see the lists of feature branches in the Tutorials and Feature Branches sections of the Pokeemerald wiki, as we won't be duplicating material here.
How is it organized?
The Feature Branches are organized by developers, and each feature branch links to the branch on the developer's GitHub page where it can be accessed. Please use the Feature Branch Quick Lookup to browse a list of the branches available through this repository.
How do I pull a feature branch?
You use git remote add
and git pull
commands to pull in a feature branch.
That is,
git remote add Pawkkie https://github.com/Pawkkie/pokeemerald-expansion
Here, you can replace Pawkkie
and his GitHub link with other feature branch developers', but you can't use the same remote name for another repo.
git pull Pawkkie start-menu-clock
Here, you can replace start-menu-clock
(and Pawkkie
) with the branch (and remote) you want, from any GitHub, but they should be added as a remote.
Feature Branch List
-
- TheXaman's original "register items in a list menu" (updated for expansion)
- Modified "register items in a list menu"
-
- NPC Followers for expansion 1.9 & 1.10
- FRLG Map Previews (for both vanilla pokeemerald and expansion up to 1.10)
Other branches to check!
-
- These are all links to the appropriate pages of psf's wiki. His documentation is fantastic, we won't be expanding on it here.
- No Whiteout After Player Loss
- pokevial
- QoL-Field-Moves
- Unbound Quest Menu
- There is also an additional tutorial by RubyRaven6 to make the quests dynamically change their description, location, and icon which can be found here.
-
- merrp has branches that include several features all at once. Check their README for details. Followers, dynamic palettes, a day night system, and custom lighting are all available, though you often need to get many of them at once.
Feature Branch Details
Archie
GitHub Repo: https://github.com/TeamAquasHideout/pokeemerald
EV/IV Stat Editor
Adds a stat editor to the game that allows you to modify a Pokémon EVs and IVs
New Main Menu with Mudskip
Full Screen Start Menu
Adds a new start menu UI with gender color difference, clock and party menu
Fully Custom Starters
Adds fully customizable starter options and expands the number to 9!
Gen 5ish Party Menu
Written for base pokeemerald
- Basically a reskin of theXamans gen 4 party menu
Variable Shop Pricing
- Making shopkeepers sell the same item at different prices
- Example use case:
.align 2
TestVariableMart:
.2byte ITEM_PROTEIN, 100
.2byte ITEM_CALCIUM, 120
release
end
pokemart TestVariableMart, 1
Pawkkie
GitHub Repo: https://github.com/Pawkkie/pokeemerald-expansion
Start Menu Clock
Written for pokeemerald-expansion 1.7.X
Adds a clock that tracks the in-game time to the start menu, as seen below. There are comments in the branch if you're interested in full day names vs shortened day names.
Trainer Class Switch Chance
Written for pokeemerald-expansion 1.8.X
HasBadOdds
is a function that, in general terms, prompts mid-battle switches when the AI does not have a good matchup and has a good switchin candidate in their party. This function has always had a hardcoded 50% chance to return FALSE to avoid excessive switching that can bog down gameplay.
I thought it would be fun to tie this switching chance to Trainer Class, so Jugglers could switch constantly if appropriate, Gym Leaders could switch more than the average trainer, and Youngsters could barely switch at all, with all of those switches still being sensible ones based on the HasBadOdds
check.
All of the trainer classes have been set to what was the hardcoded 50% chance by default. There's an example comment you can follow if you search for SAMPLE TRAINER_CLASS to modify the chances as you see fit! Any trainer classes without a specified switch chance will just use the default.
Ability Changer
Written for pokeemerald-expansion 1.7.X
Adds a new Abili-Change item that acts as an Ability Capsule and an Ability Patch in one, letting the player select either ability. Handles 1 and 2 ability mons appropriately.
Gen 1 Crit Chance
This is no longer supported as it fell within expansion's scope and has been PR'd and merged there. It'll be out with the 1.10 release, and in the meantime you can get the updated implementation that was merged from this PR https://github.com/rh-hideout/pokeemerald-expansion/pull/5439
Overworld Character Shadows
Written for pokeemerald-expansion 1.7.X
Both of the implementations here have bugs. Up to you whether the bugs are worth it. Feel free to iterate on the branches and post fixed versions!
Update 2024/07/01 - I DO NOT recommend using this branch on current expansion, and with plans to add merrp's systems to expansion in the roadmap I won't be updating this further. I'm leaving it available in case anyone would like to tinker with it or needs a WIP version of this isolated feature for any reason, but I absolutely do not recommend using it as a complete and functional feature branch. :)
This combines Disturbo's overworld shadows branch with fixes and updates from merrp's lighting branch, isolated as best I can. Dynamic palettes is not required, but the shadows are disabled in sandstorms and fog due to visual bugs I'm unable to fix.
Thanks to Number52 for also pointing out that darkness, such as Granite Cave and Brawly's gym, is entirely turned off by using this branch. I have no idea why.
An alternative is my attempt to isolate just merrp's overworld shadows, which works in most places but there are some reflection bugs without using their dynamic palettes system. This breaks for me in my hack project where I'm using a dynamic palettes system and a day-night system that aren't merrps.
Your mileage may vary for either of these.
Changing BASE_SHADOW_INTENSITY will let you get darker or lighter shadows. The ones in this image are 14 (almost as faint as possible).
ShinyDragonHunter
Github Repo: https://github.com/ShinyDragonHunter/pokeemerald
Sierra's DayNight
Updated Sierra's DayNight branch to be compatible with pokeemerald. This branch requires some additional setup depending on your use case.
Yellow Water Fix:
The DNS adds the yellow lighting by overriding a palette slot, in this case the slot for the blue used in windows and also the water. There's an equivalent blue in another palette, so you just change the tiles you want to stay blue to use the other palette.
Palette Overrides:
const struct PaletteOverride gTilesetPalOverrides_Petalburg[] =
{
{
.slot = 6,
.startHour = HOUR_NIGHT,
.endHour = HOUR_MORNING,
.palette = sTilesetPalOverride_Petalburg06_08,
},
{
.slot = 8,
.startHour = HOUR_NIGHT,
.endHour = HOUR_MORNING,
.palette = sTilesetPalOverride_Petalburg06_08,
},
OVERRIDES_END
};
Basically, you need to make a palette override entry for the tileset.
.slot
is the tileset palette it's overriding, startHour
is the starting hour of when the override is loaded, .endHour
is the hour of which said override unloads and .palette
is the palette itself.
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 0
0 0 0
229 229 163
196 196 106
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
And with your override palette itself, whatever isn't 0 0 0, will be applied to the palette it's overriding.
const struct Tileset gTileset_Petalburg =
{
.isCompressed = TRUE,
.isSecondary = TRUE,
.tiles = gTilesetTiles_Petalburg,
.palettes = gTilesetPalettes_Petalburg,
.metatiles = gMetatiles_Petalburg,
.metatileAttributes = gMetatileAttributes_Petalburg,
.callback = InitTilesetAnim_Petalburg,
.paletteOverrides = gTilesetPalOverrides_Petalburg,
};
And then you update the respective tileset header.
Dynamic Palettes Compatibility:
There are some functionality conflicts when integrating this DNS with dynamic palettes that need to be sorted out. I'd (Pawkkie) recommend using an updated version of the Exposeed dynamic palettes for now, and I'm personally using AsparagusEduardo's updated version here, and here's my commit merging it into my project initially.
In field_effect_scripts.s
:
gFieldEffectScript_SandPile::
- field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_SandPile
+ field_eff_loadfadedpaldaynight_callnative gSpritePalette_GeneralFieldEffect0, FldEff_SandPile
field_eff_end
In event_object_movement.c
:
static u8 LoadSpritePaletteIfTagExists(const struct SpritePalette *spritePalette)
{
if (IndexOfSpritePaletteTag(spritePalette->tag) != 0xFF)
return 0xFF;
- return LoadSpritePalette(spritePalette);
+ return LoadSpritePaletteDayNight(spritePalette);
}
In field_effect_helpers.c
:
void LoadSpecialReflectionPalette(struct Sprite *sprite)
{
u32 R, G, B, i;
u16 color;
u16* pal;
struct SpritePalette reflectionPalette;
CpuCopy16(&gPlttBufferUnfaded[0x100 + sprite->oam.paletteNum * 16], gReflectionPaletteBuffer, 32);
pal = gReflectionPaletteBuffer;
for (i = 0; i < 16; ++i)
{
color = pal[i];
R = GET_R(color) + 8;
G = GET_G(color) + 8;
B = GET_B(color) + 16;
if (R > 31) R = 31;
if (G > 31) G = 31;
if (B > 31) B = 31;
pal[i] = RGB(R, G, B);
}
reflectionPalette.data = gReflectionPaletteBuffer;
reflectionPalette.tag = GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum) + 0x1000;
- LoadSpritePalette(&reflectionPalette);
+ LoadSpritePaletteDayNight(&reflectionPalette);
sprite->oam.paletteNum = IndexOfSpritePaletteTag(reflectionPalette.tag);
UpdatePaletteGammaType(sprite->oam.paletteNum, GAMMA_ALT);
UpdateSpritePaletteWithWeather(sprite->oam.paletteNum);
}
Tinting Battle Backgrounds:
Add #include "day_night.h"
to the top of src/battle_bg.c
, and then swap out LoadCompressedPalette
for LoadCompressedPaletteDayNight
in the appropriate DrawMainBattleBackground
cases.
Here's an example, again in the DrawMainBattleBackground
function:
case MAP_BATTLE_SCENE_NORMAL:
LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tileset, (void *)(BG_CHAR_ADDR(2)));
LZDecompressVram(sBattleTerrainTable[gBattleTerrain].tilemap, (void *)(BG_SCREEN_ADDR(26)));
- LoadCompressedPalette(sBattleTerrainTable[gBattleTerrain].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
+ LoadCompressedPaletteDayNight(sBattleTerrainTable[gBattleTerrain].palette, BG_PLTT_ID(2), 3 * PLTT_SIZE_4BPP);
break;
Tinting Weather:
There are two changes that are needed to tint all weather, one to tint weather using unique palettes (sandstorm etc.) and one to tint weather using the generic fog palette (rain / snow / etc. all use this). Tinting the former is the usual swap; in LoadCustomWeatherSpritePalette
, swap LoadSpritePalette
for LoadSpritePaletteDayNight
.
Tinting the latter is a recent discovery at least to my (Pawkkie) and ShinyDragonHunter's knowledge, so we'd like to add a disclaimer that while I haven't found any issue since discovering it, some certainly may be present.
In field_weather.c
, add #include day_night.h
to the top of the file. In StartWeather
, change CpuCopy32(gFogPalette, &gPlttBufferUnfaded[OBJ_PLTT_ID(index)], PLTT_SIZE_4BPP);
to LoadPaletteDayNight(gFogPalette, OBJ_PLTT_ID(index), PLTT_SIZE_4BPP);
. Again if you find this results in any strange visual bugs, let us know! We aren't away of any at present but this is very new and relatively untested.
Fixing Other Feature Branch OW Palettes (ghoul's Dexnav and Item Headers, etc.):
Fixing issues related to field effects palettes
In ProcessImmediateTimeEvents
at src/day_night.c
:
if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_IN &&
gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_OUT)
{
s32 paletteIndex;
CpuCopy16(gPlttBufferUnfaded, gPlttBufferFaded, PLTT_SIZE);
for (paletteIndex = 0; paletteIndex < NUM_PALS_TOTAL; paletteIndex++)
+ {
ApplyWeatherColorMapToPal(paletteIndex);
+ UpdateSpritePaletteWithWeather(paletteIndex);
+ }
}
GameBoy Sounds
Adds GB music from GSC games.
(TODO: add a video)
Trainer Voices
Adds a new feature for trainer voices.
PCG
Github Repo: https://github.com/PCG06/pokeemerald
Move info
Adds a feature in the battle UI where pressing R shows the move's base power, accuracy and contact/no contact. Ported from Elite Redux!
With Modified Calc
Without Modified Calc
TODO: Support for RHH 1.9.0.
Mystery Gift Codes
Adds a new Mystery Gift feature which uses gift codes, rather than E-Card shenanigans, like in CFRU, although no code was used from there. Credits to Pawkkie for the base implementation, which I modified and made a script for.
https://github.com/user-attachments/assets/f6093662-a7dc-490f-8c9e-33ccbeeb7c9f
mudskip
GitHub repo: https://github.com/mudskipper13/pokeemerald
Outfits System
Branches:
This is an implementation of outfits system, that basically gives you the ability to change your look in-game. For anything else that is also added, check out the README of both branches.
There's two branches I've provided, please use only one of them. outfits
for those who use normal pokeemerald, and outfits-rhh
for those who use pokeemerald-expansion
(TODO: Add a guide for adding new outfit)
Custom (Overworld) Message Box Design
This is a branch that contains my custom message box design from my little project FireFlower, which has its design mixed between FRLG and RSE designs.
Note that some texts from vanilla Emerald or the ones you made may get truncated as the result of decreasing the width size of the new message box; This is something that the user needs to fix on their end to avoid too much conflicts coming from the branch. However, if you are using poryscript and use format()
for your texts (vanilla texts are not included as they're not originally in poryscript format()
), this can be fixed automatically by editing the Makefile on this particular part:
-data/%.inc: data/%.pory; $(SCRIPT) -i $< -o $@ -fc tools/poryscript/font_config.json
+data/%.inc: data/%.pory; $(SCRIPT) -i $< -o $@ -fc tools/poryscript/font_config.json -l 198
This should prevent poryscript from accidentally truncating the texts that uses format()
. As for those who don't use poryscript, you may have to go on your own there. ^^
I put this on a branch so that you only need to implement this by pulling/cherry-picking. I recommend toying around the palette used for the message box to suits your taste and need as I did change them to a reddish theme. And of course, this is free to use/edit with credits.
New Shop Menu UI
Branches:
These branches creates a new interface design for the shop menu and replaces the vanilla one. Notable features include:
- Object Event Graphics ID-based Shopkeeper Mugshots
- Scrolling BG replacing OW view
- 3x2 grid-based item navigation
- New graphics following the original vanilla style
- Assets template folder included for easier configuration
- LGPE+ Premier Balls (for pokeemerald branch, the expansion has one since 1.8.0)
- Support for Decoration Shops
- And likely more I didn't mention here
Similar to the Outfits System, I've provided two branches here as well. This means you may only merge one of the branches provided. Use feature/new-shop-ui
for those using vanilla pret/pokeemerald and use feature/new-shop-ui-rhh
for those using rh-hideout/pokeemerald-expansion respectively.
Field Mugshot System
This branch adds a basic system for showing a mugshot in form of a sprite (instead of a window with anon's system) within a script in the overworld.
Usage in .inc script:
...
createfieldmugshot MUGSHOT_TEST, EMOTE_NORMAL
msgbox test
removefieldmugshot
...
Usage in poryscript:
...
createfieldmugshot(MUGSHOT_TEST, EMOTE_NORMAL)
msgbox("Test 1.")
removefieldmugshot
...
You can also directly use them in strings like so:
InsideOfTruck_Text_BoxPrintedWithMonLogo:
.string "{CREATE_MUGSHOT MUGSHOT_TEST EMOTE_NORMAL}"
.string "The box is printed with a POKéMON logo.\p"
.string "{CREATE_MUGSHOT MUGSHOT_TEST EMOTE_ALT}"
.string "It's a POKéMON brand moving and\n"
.string "delivery service."
.string "{DESTROY_MUGSHOT}$"
Poryscript should also works in similar way:
format(
"{CREATE_MUGSHOT MUGSHOT_TEST EMOTE_NORMAL}"
"The box is printed with a POKéMON logo.\p"
"{CREATE_MUGSHOT MUGSHOT_TEST EMOTE_ALT}"
"It's a POKéMON brand moving and delivery service."
"{DESTROY_MUGSHOT}"
)
{DESTROY_MUGSHOT}
is not necessary to add in these examples here as the mugshot will get removed once the message box is closed and/or there's another CREATE_MUGSHOT call after but it can certainly be useful on its own situation.
EMOTE_NORMAL
and the gang) at all, you can write the escape string as simple as {CREATE_MUGSHOT YOUR_MUGSHOT_CONSTANT 0}
.
TIP 1: If you are not using the emotes system (basically the include/constants/field_mugshots.h
to charmap.txt
so that you can actually do {CREATE_MUGSHOT YOUR_MUGSHOT_CONSTANT 0}
. (Checkout the new step 4 of the adding new mugshot guide below for how to do so!)
TIP 2: If you have added mugshots prior to these escape strings, you need to add your custom mugshot constants in Result of the strings above in-game:
There's only one branch for this so it should work for expansion as well barring a few or so merge conflicts. If you get too much conflicts merging with git, you can also manual merge with the diff here.
createfieldmugshot
uses VAR_TEMP_E
and VAR_TEMP_F
to accept the user's arguments for the mugshot id and emote id respectively, so be careful if you were also using those two variables in your script with the mugshot usage. This does not apply to the escape strings and only for scripting!
IMPORTANT NOTE: How to add new mugshots
In this guide, we'll use this Cynthia sprite as the new mugshot.
-
Add a folder called
name
insidegraphics/field_mugshots/
, wherename
is your character's name e.g.graphics/field_mugshots/cynthia
. After doing so, we'll save the sprite inside that asnormal.png
. -
Add a new constant called something like
MUGSHOT_CYNTHIA
and increase the value ofMUGSHOT_COUNT
by one or so depending on how many mugshots you're trying to add at once ininclude/constants/field_mugshots.h
, like so:
#define MUGSHOT_TEST 1
+#define MUGSHOT_CYNTHIA 2
-#define MUGSHOT_COUNT 2
+#define MUGSHOT_COUNT 3
- In
src/data/field_mugshots.h
, add the INCBIN(s) for the sprite(s) aftersFieldMugshotPal_TestAlt
. Make sure that you make the INCBIN similar to the other INCBINs here (u32 and .4bpp.lz for graphics, u16 and .gbapal for palettes)
static const u32 sFieldMugshotGfx_TestNormal[] = INCBIN_U32("graphics/field_mugshots/test/normal.4bpp.lz");
static const u32 sFieldMugshotGfx_TestAlt[] = INCBIN_U32("graphics/field_mugshots/test/alt.4bpp.lz");
static const u16 sFieldMugshotPal_TestNormal[] = INCBIN_U16("graphics/field_mugshots/test/normal.gbapal");
static const u16 sFieldMugshotPal_TestAlt[] = INCBIN_U16("graphics/field_mugshots/test/alt.gbapal");
+// Cynthia
+static const u32 sFieldMugshotGfx_CynthiaNormal[] = INCBIN_U32("graphics/field_mugshots/cynthia/normal.4bpp.lz");
+static const u16 sFieldMugshotPal_CynthiaNormal[] = INCBIN_U16("graphics/field_mugshots/cynthia/normal.gbapal");
- Still inside
src/data/field_mugshots.h
, add a new entry of mugshot for Cynthia in thesFieldMugshots
array afterMUGSHOT_TEST
.
...
[MUGSHOT_TEST] =
{
[EMOTE_NORMAL] =
{
.gfx = sFieldMugshotGfx_TestNormal,
.pal = sFieldMugshotPal_TestNormal,
},
[EMOTE_ALT] =
{
.gfx = sFieldMugshotGfx_TestAlt,
.pal = sFieldMugshotPal_TestAlt,
},
},
+
+ [MUGSHOT_CYNTHIA] =
+ {
+ {
+ .gfx = sFieldMugshotGfx_CynthiaNormal,
+ .pal = sFieldMugshotPal_CynthiaNormal,
+ },
+ },
};
- Go to
charmap.txt
and add your new mugshot constant(s), it should have the same value as their respectiveMUGSHOT_x
define constants. If you have a mugshot with an id exceeding 9 (nine), use hexadecimal number, basically following the syntax of other constants that already exists there. (This is technically entirely optional, but it is convinient instead of writing something vague like{CREATE_MUGSHOT 1 2}
)
...
@ mugshot stuff begins
MUGSHOT_TEST = 01
+MUGSHOT_CYNTHIA = 02
EMOTE_NORMAL = 00
EMOTE_ALT = 01
@ mugshot stuff ends
...
And that should be it! Now to spawn the mugshot, do something like this in your desired script:
...
createfieldmugshot MUGSHOT_CYNTHIA @ spawn the needed mugshot
... other stuff ...
destroyfieldmugshot @ once you're done showing the sprite, destroy it
...
Or alternatively spawn it directly to the string you want the mugshot to show, your choice:
...
... other stuff ...
.string "{CREATE_MUGSHOT MUGSHOT_CYNTHIA EMOTE_NORMAL}"
... other stuff ...
...
(poryscript should also be similar to this!)
In-game result:
Vol
GitHub Repo: https://github.com/vol8/pokeemerald
Custom Start Menu
Written for base pokeemerald
Adds a custom start menu to the game. It is compatible with DNS and Dynamic OW Palettes, but is missing a branch for expansion.
Town Map port
Written for base pokeemerald
Adds the town map item functionality to the pokeemerald-expansion. Instead of bringing you back to the bag when you leave the town map UI, it brings you back to the field.
Leonix
GitHub Repo: https://github.com/TheLeonix/Pokeemerald-Expansion-TalkAndThink
Talk And Think Icon
T&T is a Feature Branch of Pokeemerald Expansion that adds 2 emotes to use before your msgbox!
How to use
First you have to create some movement scripts for them. Go in any scripts.inc file and do this:
Talk:
emote_walking
step_end
Think:
emote_thinking
step_end
Then you have two methods to use the emote:
1). a combo of applymovement and msgbox, the good ol'method
text::
lockall
applymovement 0, Talk
waitmovement 0
msgbox Lmao
releaseall
end
A bit long isn't it? lets see method 2
2). Using the macro added by me in this Branch! its called msgboxEmote, and you can insert the values for the applymovement and msgbox directly here!
text::
lockall
msgboxEmote 0, Talk, Lmao
releaseall
end
WOAH! Already done! For the first parameter you pass the id, the second one is the movement and the third one is the text!
If you need support for this, want to give an opinion on this Branch for improvements or fixes or simply want to say hello, you can contact me in the discord DMs at the nickname theleonix or you can find me in the RH Hideout discord server!
RavePossum
GitHub Repo: https://github.com/ravepossum/pokeemerald
BW Summary Screen
This is a demake of the Gen 5 summary screen with some extra configuration and features. Please see the wiki links below for more information and credits.
HGSS Battle UI
- !! This is currently only for RHH's pokeemerald-expansion !!
- This is a demake of HGSS's battle UI.
- Single, double, and safari battles are all implemented.
- All of the battle gimmicks in pokeemerald-expansion are implemented.
BSBob's Map Popups
This is a port of BSBob's map pop-ups from Vanadium Version. If you pull this, please credit him.
map_name_popup.h
has configs for alpha blending the pop-ups as well as displaying 24 hour time on the clock.- You can easily add additional pop-up themes by doing the following:
- Add your primary (top) pop-up image, secondary (bottom) pop-up image, and palette to the
graphics/map_popup/
folder. - In
map_name_popup.c
, add the theme to theMapPopUp_Themes
enum. - Next, add your images and palettes with their file path following the example of the black theme right above
sRegionMapSectionId_To_PopUpThemeIdMapping
. - Finally, add your theme to the
switch
statement inLoadMapNamePopUpWindowBgs(void)
. - Now just assign your theme to any map section you want it to be used for.
- Add your primary (top) pop-up image, secondary (bottom) pop-up image, and palette to the
HGSS Pokedex Darkest Mode
- !! This is only for RHH's pokeemerald-expansion !!
- This adds a darkest mode to the HGSS Pokedex and refactors the color modes of the HGSS dex to make it a bit easier to add new color schemes.
- Simply pull the branch and change HGSS_COLOR_MODE to select the color you want. You could make it an in-game option pretty easily too.
pokefirered Debug Menus
- These are a port for pokefirered of the overworld debug, Pokemon debug, and battle debug menus from RHH's pokeemerald-expansion.
- You can pull each menu individually or all 3 at once with the
debug_suite
branch.
Nico
GitHub Repo: https://github.com/NicoSwag/pokeemerald-expansion
Nico's Cool UI
A shiny new battle UI for the expansion. Includes single battles, double battles and safari. Free to use and edit with credits. I can't guarantee there won't be any issues with pulling this, and for anything feel free to contact nico_swag
on Discord.
wiz1989
GitHub Repo: https://github.com/wiz1989/pokeemerald-expansion-master
Castform Weather Change
Here is what's included:
- new sprites for missing sandstorm form by @KyuZee
- weather depending moves now trigger a weather change if the battler is Castform (having Forecast ability) and before executing the attack making them potential STAB moves (Thunder obsly not STAB as it triggers RAIN).
- Primal weather stops this feature
- Gastro Acid et al stop this feature
- Neutralizing Gas et al stop this feature
- Solar Beam recognizes the self inflicted weather change and turns into a single-turn move
- ability pop-up only comes up once per turn - either due to self inflicted weather change or due to regular forecast handling (like in the video the overworld weather is set to RAIN at the start of the fight
- updated stats and movesets for Castform to suit his new concept.
redsquidz
GitHub repo: https://github.com/redsquidz/pokeemerald
Craft Menu
Choose up to four items and craft them together à la Minecraft. Discover recipes or unlock them through flags! Intended to accompany your own custom items, but there's plenty that can be done with vanilla too. Check out the link, there's a bunch more info & screenshots there!
Graion Dilach
GitHub repo: https://github.com/GraionDilach/spinarakgreen
Apricorn Trees
A branch based on pokeeemerald-expansion 1.8.2 and ghoulslash's expanded-overworlds branch to implement the GSC apricorn tree functionality. Includes support for easily adding new apricorns and ghoulslash's Item Description popup branch.
See here for detailed documentation.
AlexOn1ine
GitHub repo: https://github.com/AlexOn1ine/pokeemerald-expansion-1
Rogue Battle Speed Up
Battle speed up, ported by Alex from Pokemon Emerald Rogue by Pokabbie.
Kaixer
GitHub repo: https://github.com/dynasticemerald/pokeemerald-expansion
Custom InGame Codes
WARNING: This does break saves.
If you wanna know how to use the feature in this branch, check out include/config/codes.h. By default the codes feature (UTILITY_CODES) is turned to FALSE, just turn it (UTILITY_CODES) to TRUE if you would like to use the feature. This is my first branch for this Wiki so hope you'll enjoy it! This branch this also based on v1.8.5 for expansion, but will be updates once the next version comes out.
Kasen
GitHub repo: https://github.com/Kasenn/pokeemerald-expansion-kasen
Set preferred follower
Previously known as "Toggle follower from party menu"
Written for pokeemerald-expansion 1.9
Adds a party menu option to change the current following Pokemon. The displayed Pokemon goes as follows:
- If the follower has been recalled to ball, show no follower
- If no preferred follower has been set or the player is in battle facility or contest hall, use default behavior
- Use preferred follower
- If preferred follower is fainted, use default behavior
Default behavior is to show the first conscious Pokemon in the player's party.
Simplified BP vendors
Written for pokeemerald-expansion 1.9
Ever looked at the scripts for Battle Frontier item exchange or move tutor and fell into despair? Then this branch is for you! Simplified BP vendors adds regular Pokémon Mart style menus for both items and moves to be sold for BP. And best of all, they're super easy to use!
How to use:
After pulling the branch, in your script, add bpmart(X, Y)
, where X
is the name of your mart (similar to how you create a regular mart with a list of items) and Y
is TRUE
(move tutor) or FALSE
(item shop).
Here's an example of a move tutor (Use the poryscript playground to convert to non-pory if not using poryscript):
script BP_Mart_MoveTutor{
lock
faceplayer
message(BP_Mart_Greetings)
waitmessage
bpmart(BP_Mart_Moves, TRUE) // TRUE for move tutor, FALSE for item shop
if(var(VAR_RESULT) == FALSE){ // VAR_RESULT is set to TRUE if successfully teaching a move to a mon, FALSE otherwise
msgbox(PleaseSaveSomeBp)
}
else{
msgbox(IllTakeYourBPNow)
}
release
}
mart BP_Mart_Moves{ // If the 2nd argument for bpmart is set to FALSE, simply list items here instead
MOVE_THUNDER_PUNCH
MOVE_SUPER_FANG
...
MOVE_NONE // remember to always end the list with MOVE_NONE or ITEM_NONE to avoid glitches
}
If P_LEARNSET_HELPER_TEACHABLE
is set to TRUE
, you will need to add @hasMoveTutor
(non-pory) or raw`@hasMoveTutor`
(pory) in your
scripts file for the python script to recognize the moves and add them automatically to the teachable moves learnsets.
The move/item prices are handled by a new member bpCost
in both item and move info. Simply add .bpCost = X,
(where X is the cost of the item/move) underneath an item/move in src/data/items.h
, or src/data/moves_info.h
respectively.
Note: The branch already includes default prices for some items/moves from vanilla games. You can always set your own prices if you want but in case you want to pick the default prices from specific generation, edit I_PRICE_BP
in include/config/item.h
or B_MOVE_TUTOR_COSTS
ininclude/config/battle.h
. There's also a I_MOVE_TUTOR_INFO_BOX
in include/config/item.h
for those who want to remove the move tutor info box.
HashtagMarky
GitHub repo: https://github.com/HashtagMarky/pokeemerald
Ikiagi OW Encounter Tools
Checkout the README of this branch to find commits with various tools such as the GetOverworldMonSpecies
function and the startoverworldencounter
and setobjectaswildencounter
macros, designed to help develop you own overworld encounter system.
.set LOCALID_OW_MON 1
PetalburgCity_OnTransition:
… … …
setobjectaswildencounter LOCALID_OW_MON, ENCOUNTER_GOOD_ROD
end
PetalburgCity_EventScript_OverworldMon::
lock
callnative GetOverworldMonSpecies
bufferspeciesname STR_VAR_1, VAR_0x8004
msgbox PetalburgCity_Text_OverworldMon, MSGBOX_DEFAULT
closemessage
startoverworldencounter 5
release
end
Upgradable Fishing Rod
Adds functionality to allow for an upgradable fishing rod through the flags OW_FLAG_VARIABLE_ROD_GOOD_TECHNIQUE
and OW_FLAG_VARIABLE_ROD_SUPER_TECHNIQUE
. I'd recommend repurposing FLAG_RECEIVED_OLD_ROD
, FLAG_RECEIVED_GOOD_ROD
and FLAG_RECEIVED_SUPER_ROD
for these. The variable OW_VAR_VARIABLE_ROD_USE_TECHNIQUE
is used to remember the selected fishing technique and use it in the case of the upgradable fishing rod being used as a registered item.
This currently looks for ITEM_VARIABLE_ROD
as an item, but if you wish to use this with an existing fishing rod, change this to the item id of the existing fishing rod key item that you want to use and remember to give it the field use function ItemUseOutOfBattle_VariableRod
.
Generic Pokémon Cries
Allows for generic cries to be used for all Pokémon when removing cries in pokeemerald-expansion
. Out of the box it uses the Caterpie, Machop, Machoke, Machamp and Tyranitar cries based on a species base stat total. It also includes a few modifications to allow for Porygon to keep it's cry in the RHH intro as well. If you would like to change the any of these cries, this can be done by finding Cry_Generic_Small
, Cry_Generic_Medium
, Cry_Generic_Large
, Cry_Generic_Largest
and Cry_RHH_Intro
in direct_sound_data.inc
.
Yoshord
GitHub repo: https://github.com/rayrobdod/pokeemerald
Technique Manual
The idea with this is to replace TMs with a system in which you complete research tasks to master moves, and upon mastery you can teach that move to your Pokémon. https://github.com/user-attachments/assets/924e5cb7-7d42-4ac4-a401-186baad632a1
Kyphii
GitHub repo: https://github.com/kyphii/pokeemerald
Dynamic Palettes
This modification adds a framework for assembling palettes from a collection of predefined parts, allowing for features such as custom player character colors. This branch includes:
- Dynamic palette framework code
- Sample palette part files and definitions
- Modifications to override base game player palettes with dynamic palettes (overworld, battle back and front, trainer card)
- Several options for a menu interface for custom player colors. A menu in the intro sequence is added. There are also options for individual part menus, both directly through code and callable via script special.
- This modification is not a plug-and-play feature - it will be necessary to make some code changes to use it effectively, as the implementation will be specific to your particular sprite and palette setup.
- See the README.MD in the branch for more info.
Rioluwott
GitHub repo: https://github.com/BelialClover/pokeemerald
Seasons
Adds the GenV seasons feature to pokeemerald.
lordraindance
mega-cries-removal
- Saves space by removing mega cries, and instead of using mega cries for mega evolutions, change the cry mode to
CRY_MODE_HIGH_PITCH
like previously discussed in this ancient thread - Tested on version 1.8.6, with savings of 1.76% (71.79 --> 70.03). Should merge fine to the latest 1.9+ version (tested with 1.9.4).
If you don't want to use
CRY_MODE_HIGH_PITCH
, you can edit this part ofsounds.c
:
// If we're not using extra mega cries, we need to modify the cry mode for mega evolutions.
#if !P_USE_EXTRA_MEGA_CRY
if (gSpeciesInfo[species].isMegaEvolution)
{
mode = CRY_MODE_HIGH_PITCH;
}
#endif //P_USE_EXTRA_MEGA_CRY
bard-phonemes-removal
- Saves space by replacing every bard phoneme with the smallest
.aif
file insound/direct_sound_samples/phonemes
. You can actually save more space by using a 0KB file, but I don't know how to edit .aif files. - Savings of 0.26% space.
iriv24
GitHub Repo: https://github.com/iriv24/pokeemerald-expansion
original_tx_registered_items_menu
This branch is a port of TheXaman's "Register items in a list menu" feature with his original implementation that has been updated for compatibility with more recent expansion versions. This also includes a bugfix from RavePossum.
Written for pokeemerald-expansion 1.10.X
Adds the functionality from TheXaman's original feature to allow for registering multiple key items. See his original post with the feature here.
Please credit TheXaman for the original feature and RavePossum for his bugfix!
iriv24/tx_registered_items_menu
This branch is an updated version of TheXaman's "Register items in a list menu" feature with slightly different behavior than the original which also includes a bugfix from RavePossum.
Written for pokeemerald-expansion 1.10.X
Adds the functionality from TheXaman's original feature to allow for registering multiple key items. See his original post with the feature here. The difference with my implementation in this branch is that instead of registering one item to be used with the "select" button and registering more items to be put in a list accessed by the "L" button (this is the original functionality), I changed it so that all registered items are accessed from the "select" button. With my implementation, if you only have one item registered and press "select", it automatically uses it, and if you have more than one registered and press "select", it opens the list.
Please credit TheXaman for the original feature and RavePossum for his bugfix!
Bivurnum
Github repo: https://github.com/Bivurnum/pokeemerald
NPC Followers
This branch allows you to set any existing NPC to follow behind the player in pokeemerald-expansion.
Some notable features of this branch:
- It automatically hides following Pokémon while a follow-me follower is active.
- A battle partner can be tied to the follower to automatically make all battles multi-battles while with the partner (like in DPP).
- New configs/customization options.
Note: This feature does slightly increase the size of the saveblock.
Click here to go to the in-depth usage guide and install instructions.
Thank you to ghoulslash for the original follow-me feature that this is based on.
Thank you to Kasen and Xiros for your invaluable assistance in bug testing.
FRLG Map Previews
This branch ports FRLG's map preview system to pokeemerald and expansion. New configs and accessibility options have been added, including the ability to trigger map previews from scripts.
Click here to go to the in-depth usage guide and install instructions.
Thank you to psf and Katieix for helping me refine this feature.