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!

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.

Dynamic move type

Shows the move's dynamic type in the summary screen and battle menu. Ported from Elite Redux!

pokeemerald-117 pokeemerald-118 pokeemerald-120

Fog Weather

Adds the Fog weather from the Gen 4 games and adds fog removing functionality to Defog. Ported from Complete FireRed Upgrade!

defog

Will be outdated when RHH 1.9.0 releases.

Mystery Gift Codes

Adds a new Mystery Gift feature which uses gift codes, rather than E-Car 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


Voluptua

GitHub Repo: https://github.com/Voluptua/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


Yak Attack

GitHub Repo: https://github.com/Petuuuhhh/pokeemerald

CalculateMoveDamage in vanilla

Ports pokeemerald-expansion's CalculateMoveDamage function to vanilla pokeemerald!


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

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

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

Rogue Battle Speed Up

Battle speed up, ported by Alex from Pokemon Emerald Rogue by Pokabbie.

battlespeed

Kaixer

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

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

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

Dynamic Palettes

From the Pokeemerald wiki, "Adds a system to load and unload overworld palettes based on what is on screen, instead of keeping all overworld palettes loaded at once. This enables you to be much more flexible about overworld palettes.

Credits: Slawter666, Xhyzi, ShantyTown, ExpoSeed, UltimaSoul, ShinyDragonHunter"

There's been a lot of iteration on the publicly available dynamic palette system over the years. Here I'm going to link what I understand to be the original by Exposeed, as they deserve credit, though it's quite outdated and I don't recommend its use. Instead I'd recommend using AsparagusEduardo's updated Dynamic Palettes, which is much more up to date. If you're having a hard time merging, here's my commit of merging it into my own project.

Also, if you're using ShinyDragonHunter's update of Sierra's day / night system, you'll need to make some adjustments for compatibility. See the Day/Night section for details.