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

Other branches to check!

  • psf

  • merrp

    • 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

pic

New Main Menu with Mudskip

main_menu

Full Screen Start Menu

Adds a new start menu UI with gender color difference, clock and party menu

316280491-79d4fd72-ec2f-4b1b-bbe3-6792f284adbb

Fully Custom Starters

Adds fully customizable starter options and expands the number to 9!

multiplestarters

Gen 5ish Party Menu

Written for base pokeemerald

  • Basically a reskin of theXamans gen 4 party menu

summary_screen

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.

start_menu_clock

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.

https://github.com/Pawkkie/Team-Aquas-Asset-Repo/assets/61265402/b6a53e0a-c06b-4f39-9e3c-6b14706f47b0

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).

image


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.

Morning Day Night

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. FixingYellow

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.):

image

Fixing issues related to field effects palettes

image

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.

https://github.com/Pawkkie/Team-Aquas-Asset-Repo/assets/75729017/6560c961-3e14-439e-a5e4-1de7b29ca2d9


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

with-modified-calc

Without 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:

pokeemerald

pokeemerald-expansion

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

ui-complete

(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:

pokeemerald

pokeemerald-expansion

https://github.com/Pawkkie/Team-Aquas-Asset-Repo/assets/105766191/b3463725-f7d6-4671-a614-898a8c367c5b

https://github.com/Pawkkie/Team-Aquas-Asset-Repo/assets/105766191/05ee10b7-ae92-4083-8dd5-7796325d8b85

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

image

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.

TIP 1: If you are not using the emotes system (basically the EMOTE_NORMAL and the gang) at all, you can write the escape string as simple as {CREATE_MUGSHOT YOUR_MUGSHOT_CONSTANT 0}.

TIP 2: If you have added mugshots prior to these escape strings, you need to add your custom mugshot constants in 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!)

Result of the strings above in-game:

control-codes-showcase

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.

IMPORTANT NOTE: 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!

How to add new mugshots

In this guide, we'll use this Cynthia sprite as the new mugshot.

image

  1. Add a folder called name inside graphics/field_mugshots/, where name is your character's name e.g. graphics/field_mugshots/cynthia. After doing so, we'll save the sprite inside that as normal.png.

  2. Add a new constant called something like MUGSHOT_CYNTHIA and increase the value of MUGSHOT_COUNT by one or so depending on how many mugshots you're trying to add at once in include/constants/field_mugshots.h, like so:

#define MUGSHOT_TEST  1
+#define MUGSHOT_CYNTHIA 2
-#define MUGSHOT_COUNT 2
+#define MUGSHOT_COUNT 3
  1. In src/data/field_mugshots.h, add the INCBIN(s) for the sprite(s) after sFieldMugshotPal_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");
  1. Still inside src/data/field_mugshots.h, add a new entry of mugshot for Cynthia in the sFieldMugshots array after MUGSHOT_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,
+        },
+    },
};
  1. Go to charmap.txt and add your new mugshot constant(s), it should have the same value as their respective MUGSHOT_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:

image


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.

StartMenu debug

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.

2023-09-24 19-06-58.mp4


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! alt text alt text

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

newbwss1 newbwss2 newbwss3

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

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

Map popup demonstration

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:
    1. Add your primary (top) pop-up image, secondary (bottom) pop-up image, and palette to the graphics/map_popup/ folder.
    2. In map_name_popup.c, add the theme to the MapPopUp_Themes enum.
    3. Next, add your images and palettes with their file path following the example of the black theme right above sRegionMapSectionId_To_PopUpThemeIdMapping.
    4. Finally, add your theme to the switch statement in LoadMapNamePopUpWindowBgs(void).
    5. Now just assign your theme to any map section you want it to be used for.

HGSS Pokedex Darkest Mode

Darkest mode screenshot

  • !! 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

ow_debug_demonstration

  • 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.

apricot_tree


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.

battlespeed


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:

  1. If the follower has been recalled to ball, show no follower
  2. If no preferred follower has been set or the player is in battle facility or contest hall, use default behavior
  3. Use preferred follower
  4. If preferred follower is fainted, use default behavior

Default behavior is to show the first conscious Pokemon in the player's party.

follower

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!

mart

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

The diff can be found here. variable_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

Here is the diff.

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

kyphii-dynpals

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.

summer fall winter

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 of sounds.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 in sound/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!

registeritemsxaman

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!

registeritems

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.

map_preview_example