• Our software update is now concluded. You will need to reset your password to log in. In order to do this, you will have to click "Log in" in the top right corner and then "Forgot your password?".
  • Welcome to PokéCommunity! Register now and join one of the best fan communities on the 'net to talk Pokémon and more! We are not affiliated with The Pokémon Company or Nintendo.

Simple Modifications Directory

Make sure you did declare those MON_DATA variables at include/pokemon.h.

That one's unrelated.
Your project's struct RecordedBattleSave is bigger than its maximum allocated size, so the Assert put in place to notify the user of this prevents the compiler from building a ROM.

I got it working, the problem was a / and } adjacent to each other in pokemon.h

The second has been fixed by reducing Filler.11 to a lower number. I hope that doesnt break other things.
 
Hi Sir!!! i have a question on shopdata is it shopdata c or h?...and if its shop.c where is this "maxquantity" located...sorry im just a newbie... im having a hard time to find this because of quick or just shortcut guide... thanks!!!!

I'm sorry for not replying to you in a timely manner.
"shopdata" is a struct in shop.h
 
[Pokeemerald] Stair Warps

This feature ports the stair warping effect from FRLG to Emerald:
(sorry for the bad tiles)
[PokeCommunity.com] Simple Modifications Directory


Options:

Hello! your Sideways stairs port from FRLG is outdated, please update it and make a new guide! Thank you!
 
Mid-battle Evolutions (Emerald)
Hi everyone, this is my first contribution to this thread, I've had a lot of fun doing this and I hope to add some more!

Features:
  • allows your Pokémon to evolve (if it can) in the middle of a battle when it has levelled up in battle and is currently out. If they learn any moves, they will be ready to be used in battle as well.
  • works with single battles, both left and right Pokémon in double battles and in multi battles (i.e. your partner's Pokémon). Your partner's Pokémon should not evolve in normal gameplay since the player can't normally get Steven's (the only trainer with whom you can gain experience) Pokémon (Metang is the only one who could theoretically evolve) to evolve anyway in the Multi Battle against Team Magma.
  • If you don't want either of your left or right Pokémon to evolve, the game will stop trying to evolve them in-battle if they gain any more levels.

Preview:
Spoiler:

Source
To pull the branch:
Code:
git remote add cfp https://github.com/CtrlFootPrint/pokeemerald
git pull cfp MidBattleEvo
Alternatively, here are the changes made: https://github.com/pret/pokeemerald/compare/master...CtrlFootPrint:MidBattleEvo

I have tested these changes in a variety of different scenarios and with different teams and it seems to be working fine. If you do spot any flaws or bugs or have any questions or queries, please let me know! Any other feedback or comment is much appreciated!

-----------
Hi, how are you? This feature is incredible, it makes perfect sense for pokemon to evolve in the middle of the battle and continue fighting, but I couldn't implement it. I'm using the rhh pokemon expansion.

Could you tell me if it's compatible? and what changes would be needed to implement this? Thank you very much.
 
[Pokeemerald] Use Fly/Flash from party menu if Pokémon is compatible

The following changes allow Fly and/or Flash to be used in the field if the Pokémon is able to learn the relevant HMs, without them needing to be taught. Of course, the necessary gym badges are still required.

All of the changes are made in src\party_menu.c (SetPartyMonFieldSelectionActions) and can be found in this commit:
https://github.com/Scyrous/pokeemerald/commit/2b263a419784b63252ecdd3f576472ee0b3ce136

Demonstration:
[PokeCommunity.com] Simple Modifications Directory

Both Xatu and Latios are compatible with Fly/Flash. Because Latios already knows 3 HM moves, only Fly is added to the action list.

Notes:
If the Pokémon already knows fly or flash, the moves will show up as usual.
If the Pokémon already knows 4 field moves, no new moves will be added to the action list.
If the Pokémon knows less than 4 field moves, Fly will be prioritized over Flash.

==========

Hello, I tried to implement this change in rhh pokemon expansion, but without success.
it looks like "CanMonLearnTMHM" is no longer used. The same is happening for the hm usage tutorial without learning them. I don't know what to replace it with. Could you give me a light. Thanks
 
Show Type Effectiveness In-Battle [EM]​
[PokeCommunity.com] Simple Modifications Directory
[PokeCommunity.com] Simple Modifications Directory
[PokeCommunity.com] Simple Modifications Directory
[PokeCommunity.com] Simple Modifications Directory

[PokeCommunity.com] Simple Modifications Directory
[PokeCommunity.com] Simple Modifications Directory
[PokeCommunity.com] Simple Modifications Directory
[PokeCommunity.com] Simple Modifications Directory

[PokeCommunity.com] Simple Modifications Directory


Now with Doubles, Flying Press/two-typed moves, and Inverse Battles support!

First thing you're going to want to do is to go into graphics\battle_interface, move text.pal to somewhere safe (I don't think the edits I made to this file harm anything, but better to be safe than sorry) and delete text.gbapal and text.gbapal.lz. Now, download the attached text.zip file, and move its contents (which is just a new text.pal) into the graphics\battle_interface folder.

Now, we get to the fun coding part!
Open up src\battle_message.c, search for sTextOnWindowsInfo_Normal, and add this to the bottom of this array:
Spoiler:


Now, open src\battle_bg.c, and add this to the bottom of gStandardBattleWindowTemplates (make sure you paste this before DUMMY_WIN_TEMPLATE, though):
Spoiler:


The final bit for this code belongs in src\battle_controller_player.c.
We're going to start by adding these defines at the end of the list of defines toward the top of the file:
Code:
#include "constants/battle_move_effects.h"
#include "event_data.h"
This is necessary for getting the Inverse Battle flag later on, and for getting the move effects for two-typed moves.

Next, define a new method at the top of the file. You can place it anywhere, but I searched for:
Code:
static void MoveSelectionDisplayMoveType(void);
And placed it above it. The method we are defining is:
Code:
static void MoveSelectionDisplayMoveTypeDoubles(u8 targetId);
The reason we're defining a whole new method for this here is because it's a bit easier than adding a 1 to every MoveSelectionDisplayMoveType call that happens in this file. If you wanted to, you could replace every MoveSelectionDisplayMoveType(); in the file to MoveSelectionDisplayMoveType(1); and replace the MoveSelectionDisplayMoveType method with the MoveSelectionDisplayMoveTypeDoubles method from later in this post and everything should work the same.

Now, we're going to be copying over the effectiveness table from src\battle_util.c of DizzyEgg's Battle Engine.
I placed this toward the top of the file, under "unknown unused data".
Spoiler:

(If you're not using DizzyEgg's Battle Engine for whatever reason, just eliminate the last line and the last column of this table to get rid of Fairy and it should work fine.)

Now, search for MoveSelectionDisplayMoveType(void), and add these three methods above it:
Spoiler:

Obviously, you can remove the whole two-type move check if you're not using DizzyEgg's Battle Engine.

And in MoveSelectionDisplayMoveType, change this line:
Code:
BattlePutTextOnWindow(gDisplayedStringBattle, 10);
To this:
Code:
BattlePutTextOnWindow(gDisplayedStringBattle, TypeEffectiveness(moveInfo, 1));

Now, we just need to add calls for MoveSelectionDisplayMoveTypeDoubles. Search for HandleInputChooseTarget(void) and find the two places that use this switch statement:
Code:
switch (GetBattlerPosition(gMultiUsePlayerCursor))
Immediately after these switch statements, add this line:
Code:
MoveSelectionDisplayMoveTypeDoubles(GetBattlerPosition(gMultiUsePlayerCursor));

And you should be good to go!
Thanks to DizzyEgg for his hard work on the Battle Engine upgrade. The type effectiveness table and the MulModifier method made things very easy once I figured out how the palettes worked. I for sure would not have been able to do this without those.

============
Hi, how are you?
I think I found an error. I'm using the RHH expansion and in individual battles the code works perfectly. When I arrive in double battles, the effectiveness is appearing before selecting the attack and the opponent's first pokemon is commanding the effectiveness. For example: In a double battle against a lotad (left) and a geodude (right) all attacks that have no effect are already being accused, ignoring the lotad. When selecting "Peck" it remains red in the geodude but in the lotad it is green (correct operation). The problem is that before selecting the attack in the double balance, the pokemon on the right controls the effectiveness and the colors already appear.

I'm starting now on Decomp, I also couldn't implement a part of the code:
static void MulModifier(u16 *modifier, u16 val)
{
*modifier = UQ_4_12_TO_INT((*modifier * val) + UQ_4_12_ROUND);
}

He complains that it should be non-static. I completely removed that part and the rest worked perfectly, but I don't know if this is affecting the double battle. Thanks in advance for the help.
 
-----------
Hi, how are you? This feature is incredible, it makes perfect sense for pokemon to evolve in the middle of the battle and continue fighting, but I couldn't implement it. I'm using the rhh pokemon expansion.

Could you tell me if it's compatible? and what changes would be needed to implement this? Thank you very much.
Yes, it is compatible. I implemented it myself for someone else a while back.
https://github.com/rh-hideout/pokee...ster...LOuroboros:pokeemerald:expMidBattleEvo
Hello, I tried to implement this change in rhh pokemon expansion, but without success.
it looks like "CanMonLearnTMHM" is no longer used. The same is happening for the hm usage tutorial without learning them. I don't know what to replace it with. Could you give me a light. Thanks
CanMonLearnTMHM has been replaced by CanLearnTeachableMove when teachable learnsets were implemented.
 
Yes, it is compatible. I implemented it myself for someone else a while back.
https://github.com/rh-hideout/pokee...ster...LOuroboros:pokeemerald:expMidBattleEvo

==========


It worked perfectly, thank you so much Lunos.

===============

CanMonLearnTMHM has been replaced by CanLearnTeachableMove when teachable learnsets were implemented.

================

I have the following error when I substitute for "CanLearnTeachableMove".

"Warning: passing arg 1 of 'CanLearnTeachableMove' makes integer from pointer without a cast"

I'm new to decomp and I'm venturing into my first rom hack. This is the code that gave the error:


if (sPartyMenuInternal->numActions < 5 && CanLearnTeachableMove(&mons[slotId], ITEM_HM02 - ITEM_TM01)) // If Mon can learn HM02 and action list consists of < 4 moves, add FLY to action list
AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, 5 + MENU_FIELD_MOVES);
if (sPartyMenuInternal->numActions < 5 && CanLearnTeachableMove(&mons[slotId], ITEM_HM05 - ITEM_TM01)) // If Mon can learn HM05 and action list consists of < 4 moves, add FLASH to action list
AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, 1 + MENU_FIELD_MOVES);

The same goes for using hm if the pokemon can learn it and the badge is obtained. In this case, replace it with 'GiveMoveToMon' in order to compile. But when doing this in this other role, everyone gains the fly and flash ability, which leads me to believe that everyone also received the other hm (only tested with cut for now).

Is there a correct way to replace it with 'CanLearnTeachableMove'? Thanks in advance for the help!
 
================

I have the following error when I substitute for "CanLearnTeachableMove".

"Warning: passing arg 1 of 'CanLearnTeachableMove' makes integer from pointer without a cast"

I'm new to decomp and I'm venturing into my first rom hack. This is the code that gave the error:


if (sPartyMenuInternal->numActions < 5 && CanLearnTeachableMove(&mons[slotId], ITEM_HM02 - ITEM_TM01)) // If Mon can learn HM02 and action list consists of < 4 moves, add FLY to action list
AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, 5 + MENU_FIELD_MOVES);
if (sPartyMenuInternal->numActions < 5 && CanLearnTeachableMove(&mons[slotId], ITEM_HM05 - ITEM_TM01)) // If Mon can learn HM05 and action list consists of < 4 moves, add FLASH to action list
AppendToList(sPartyMenuInternal->actions, &sPartyMenuInternal->numActions, 1 + MENU_FIELD_MOVES);
If you check either the definition or the declaration for CanLearnTeachableMove, you'll see that it reads a species ID for its first parameter.
&mons[slotId] corresponds to the ID of a party slot, so it's certainly not a compatible parameter to pass through the function call.
What you can do is to get the species ID of the Pokémon in that slot by calling GetMonData and passing the MON_DATA_SPECIES parameter through it.
Like for example, CanLearnTeachableMove(GetMonData(&mons[slotId], MON_DATA_SPECIES), MOVE_DRAGON_CLAW).

However, your second parameter is also wrong.
The function reads a move ID for the second parameter. Passing ITEM_HM05 - ITEM_TM01 is no different than writing "686 - 582", which in up-to-date copies of the expansion is the ID number of Double Team.

What I suggest you to do is to think carefully about what you want to do, then read some more code in the same file where the function that you're editing is located, and then figure out how to make an effective use of the CanLearnTeachableMove function to suit your needs.
The same goes for using hm if the pokemon can learn it and the badge is obtained. In this case, replace it with 'GiveMoveToMon' in order to compile. But when doing this in this other role, everyone gains the fly and flash ability, which leads me to believe that everyone also received the other hm (only tested with cut for now).
Yeah, I mean, I'm not sure what else were you expecting.
As its label indicates, GiveMoveToMon is a function that gives a move to a Pokémon in the party.
 
If you check either the definition or the declaration for CanLearnTeachableMove, you'll see that it reads a species ID for its first parameter.
&mons[slotId] corresponds to the ID of a party slot, so it's certainly not a compatible parameter to pass through the function call.
What you can do is to get the species ID of the Pokémon in that slot by calling GetMonData and passing the MON_DATA_SPECIES parameter through it.
Like for example, CanLearnTeachableMove(GetMonData(&mons[slotId], MON_DATA_SPECIES), MOVE_DRAGON_CLAW).

However, your second parameter is also wrong.
The function reads a move ID for the second parameter. Passing ITEM_HM05 - ITEM_TM01 is no different than writing "686 - 582", which in up-to-date copies of the expansion is the ID number of Double Team.

What I suggest you to do is to think carefully about what you want to do, then read some more code in the same file where the function that you're editing is located, and then figure out how to make an effective use of the CanLearnTeachableMove function to suit your needs.

Yeah, I mean, I'm not sure what else were you expecting.
As its label indicates, GiveMoveToMon is a function that gives a move to a Pokémon in the party.

=======

Thanks Lunos, it's work perfect.

my question now is the use of hm without the pokemon needing to learn, but still needing the gym badge.

In this tutorial available on the wiki: https://github.com/pret/pokeemerald/wiki/Use-HMs-Without-Any-Pokemon-in-your-Party-Knowing-Them#fly-still-needs-to-be- added-in
I opted to use this version 'Only Pokemon that can Learn HM can Use Field Move so Long as HM is in Bag'. In src/scrcmd.c and src/overworld.c the tutorial uses 'CanMonLearnTMHM' in the functions.
I changed it to 'GiveMoveToMon' just to be able to compile, but all the pokemons are using all the hm. Even following your tips I couldn't change it to 'CanLearnTeachableMove'.
Could you teach me the correct way to make only pokemons compatible with hm can use them without having to learn them?
Thanks for your patience and help. And sorry for my lack of ability xD I'm still in the beginning of decomp and c language.
 
Make Poké Balls usable outside of battles [Em]
So, earlier, someone asked in RHH's Discord if it was possible to modify the caught ball of a certain Pokémon in the party at will.
Naturally, that's perfectly possible because the entire source code of the game is laid right before our very eyes and the code itself already does it.
Then Jaizu brought up a very neat suggestion; to make Poké Balls usable outside of battle to set the caught ball directly like that.
Honestly, that sounded very cool to me so I just went and did it.
And now that it's done, I came here to post it because why not.

I don't think there's a need for explanations. You go to the bag, try to use a Poké Ball and the magic happens. It's all pretty straightforward.


To implement this, you can track my GitHub repository via git remote and pull the branch oobBalls which is where I'm hosting the code:
Code:
git remote add lunos https://github.com/LOuroboros/pokeemerald
git pull lunos oobBalls
Or you can implement things manually, which is preferable for people who use the item_expansion:
https://github.com/pret/pokeemerald/compare/master...LOuroboros:oobBalls

And that's pretty much it.​

=====

Hello Lunos, it's me again xD

I tried to manually implement this functionality, but in the "src/data/items.h" file
when setting the '.tipe' to 'ITEM_USE_PARTY_MENU' the pokeballs no longer work to catch wild pokemons.
 
=====

Hello Lunos, it's me again xD

I tried to manually implement this functionality, but in the "src/data/items.h" file
when setting the '.tipe' to 'ITEM_USE_PARTY_MENU' the pokeballs no longer work to catch wild pokemons.
It still works just fine in clean copies of Pokeemerald.
I tested it on the expansion, and I was able to capture Pokémon just fine, but effectively, there's something I'll have to address and it's that the Poké Balls shouldn't open the party screen inside of battles.
I'll take a look and see what I can do about it. Thanks for mentioning this.
EDIT: Done. I pushed a fix.

Also, I forgot to mention this in my previous post, but this thread is not for help requests.
It's a thread for people to share their feature branches or small modifications so others can apply them to their own projects.
Any questions or help requests go here.
 
Last edited:
[PokeEmerald] A Personal Fix for the 16x16 doors anim tutorial

Just a personal & unproven discovery which posted here for anyone that needs it. Although I don't know whether it is WRONG or NOT until NOW. So please forgive my ignorance.
So, Several days ago, I accidentally found there was something wrong with the "16x16 door animation tutorial" (which enables PokeEmerald itself to display the 16x16 doors animations from PokeFirered) for the updated PokeEmerald, which was distributed here long time ago.
The Original Tutorial is here for anyone not knowing what I'm talking about:
https://github.com/scizz/darkfire/commit/b666ad85d3e22ac134fd24ce0bfe84f0e1e4a773
Well, I did nothing but just copied the original lines provided by that tutorial. And here is a picture of what had happened: When a single door was open or closed, only 1/4 of its original animation graphic was shown properly. And, moreover, the other part became glitchly pixels, for sure
Spoiler:


I had checked the code over and over again, and made sure there was no mistake in my copy & paste process. And the animation of my newly added door was nothing but a graphic file grabbed directly & straightly from the original PokeFirered.
Luckily, I was happened to be lucky enough to find one possible solution. For anyone interested in it, here it is:
First, after implementing the codes from the tutorial, jump to the function named "CopyDoorTilesToVram", and change the lines below:

From:
Spoiler:
to:

Spoiler:

Then, add one completely new definition before that function itself:

Spoiler:

Here is a picture of what it looked like after being fixed:

Spoiler:


And that's pretty much of it, I wonder whether anyone here trying port the door animation of FRLG has met the same problem. Also, if there is anything wrong, please forgive my ignorance & leave a message to me.
Thanks.
 
Run Scripts on Door Entry (Emerald)

This modification allows you to use trigger events with animated doors in addition to warp events.

[PokeCommunity.com] Simple Modifications Directory
[PokeCommunity.com] Simple Modifications Directory


Modification:
Spoiler:


Usage:
Spoiler:
 
Enable the usage of the SPECIES_UNOWN_(LETTER) constants for party creation [Em]
Earlier today, someone in Pret's Discord server talked about how they wanted to assign specific Unown letter forms to a trainer, and I took a shot at it because I was bored.
I didn't put this on a branch because I did it very quickly and it's simple to do too. It's not worth the hassle.
Like a handful of things in the game, the Unown letters are tied to the Pokémon's Personality ID.
With that in mind and focusing on the chunk of CreateBoxMon that assigns the PID to a Pokémon it's generating, we can easily mod that PID to match whatever Unown form we want based on conditions.
Here's a code diff.
Diff:
diff --git a/src/pokemon.c b/src/pokemon.c
index ef8e7e9e0..d533f9184 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -2203,6 +2203,24 @@ void CreateMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFix
     CalculateMonStats(mon);
}

+static u32 UpdatePIDForUnownForms(u16 species, u32 pid)
+{
+    if (species == SPECIES_UNOWN)
+    {
+        pid = 0;
+    }
+    else if (species >= SPECIES_UNOWN_B && species <= SPECIES_UNOWN_QMARK)
+    {
+        do
+        {
+            pid = Random32();
+        }
+        while (GET_UNOWN_LETTER(pid) != (species - NUM_SPECIES));
+    }
+
+    return pid;
+}
+
void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
{
     u8 speciesName[POKEMON_NAME_LENGTH + 1];
@@ -2212,10 +2230,19 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,

     ZeroBoxMonData(boxMon);

-    if (hasFixedPersonality)
+    if ((species == SPECIES_UNOWN) || (species >= SPECIES_UNOWN_B && species <= SPECIES_UNOWN_QMARK))
+    {
+        personality = UpdatePIDForUnownForms(species, personality);
+        species = SPECIES_UNOWN;
+    }
+    else if (hasFixedPersonality)
+    {
         personality = fixedPersonality;
+    }
     else
+    {
         personality = Random32();
+    }

     SetBoxMonData(boxMon, MON_DATA_PERSONALITY, &personality);

With these changes, you can easily drop in a SPECIES_UNOWN_F in Youngster Calvin's party data, or a SPECIES_UNOWN_X in the wild encounters list of Route 101, and they'll work as expected.
[PokeCommunity.com] Simple Modifications Directory
[PokeCommunity.com] Simple Modifications Directory


Note: This is specifically aimed towards people who don't use the Pokeemerald-expansion, which already separated each Unown letter into their own individual species.
Note2: Functionally speaking, this makes CreateMonWithGenderNatureLetter obsolete.


And that's pretty much it.

EDIT (28/05/2024): I've updated the code diff to clean up the UpdatePIDForUnownForms function and to take the A form into account.
Using SPECIES_UNOWN will now default to Unown A.​
 
Last edited:
[PokeEmerald] (RESOURCE) Expansion of following pokemon

If you are like me and want to implement Merrp's day and night system (or just his follower branch) and also have the rhh pokeemerald-expansion. You will see that Merrp's doesn't include gen 4 and up. Well here you go, in the zip file included are all pokemon (gen 1 - gen 8) in an 8 frame format in the correct palette, the files you have to change and a credit files for all the sprite creators.
In Merrp's original code, the pokemon are only 6 frames. When walking east, frame 5 & 6 get mirrored. While this works for most Pokemon, there are some Pokemon that are not symmetric (for example Absol or Torterra). Therefor, I chose to go with 8 frames. If you don't mind the couple of non-symmetric pokemon being displayed inverted, you don't have to change object_event_anims.h but i'll get to that later. I also added some code for female Pokemon that differ (majorly) from the male version such as Frillish and Unfezant.

The 'code' files included in the zip file are not the full files, so don't overwrite the file in your directory with the ones in the zip. They are additions, so copy paste them below the stuff that is already in your file since you might have already made some additions to those files. the only exception to this is object_event_graphics_info_followers.h. you can overwrite this file with what is in the zip.

change to 8 frame
Spoiler:


Cherrim sunshine and female forms
Spoiler:


Two last things. One, there are 6 sprites (Origin Dialga & Palkia, normal & Therian Enamorus, Alolan Exeggutor and Eternatus) that are 64x64, simply because I couldn't find any 32x32 images of those Pokemon. And second, I don't know if all sprites are positioned correctly, so you might want to move them up/down/right/left a couple pixels.

Hope this helps and you wont have to go through all individual pokemon

Link to Merrp's DNS: https://github.com/aarant/pokeemerald/tree/lighting
 

Attachments

  • Following Pokemon.zip
    1.3 MB · Views: 21
Last edited:
Unreal-time Clock (Emerald)

This modification separates the game's time system from the real-time clock.
This gives you full control of time and the speed at which it advances. It also lets your hack function on cartridges/emulators that don't support RTC.

[PokeCommunity.com] Simple Modifications Directory
[PokeCommunity.com] Simple Modifications Directory


Modification:
Spoiler:
 
Last edited:
Mid-battle Evolutions (Emerald)
Hi everyone, this is my first contribution to this thread, I've had a lot of fun doing this and I hope to add some more!

Features:
  • allows your Pokémon to evolve (if it can) in the middle of a battle when it has levelled up in battle and is currently out. If they learn any moves, they will be ready to be used in battle as well.
  • works with single battles, both left and right Pokémon in double battles and in multi battles (i.e. your partner's Pokémon). Your partner's Pokémon should not evolve in normal gameplay since the player can't normally get Steven's (the only trainer with whom you can gain experience) Pokémon (Metang is the only one who could theoretically evolve) to evolve anyway in the Multi Battle against Team Magma.
  • If you don't want either of your left or right Pokémon to evolve, the game will stop trying to evolve them in-battle if they gain any more levels.

Preview:
Spoiler:

Source
To pull the branch:
Code:
git remote add cfp https://github.com/CtrlFootPrint/pokeemerald
git pull cfp MidBattleEvo
Alternatively, here are the changes made: https://github.com/pret/pokeemerald/compare/master...CtrlFootPrint:MidBattleEvo

I have tested these changes in a variety of different scenarios and with different teams and it seems to be working fine. If you do spot any flaws or bugs or have any questions or queries, please let me know! Any other feedback or comment is much appreciated!

I love this addition so much! I have a request, if it doesn't bother you too much, I tried to implement it for the expansion and i couldn't make it to work; talking with Lunos in pret, he helped me and told that the function needs to call a specific battlerId, but as of now battlerId is always MAX_BATTLERS_COUNT... Would you consider rework it for the expansion?
 
Emerald Style Gender Select Intro, in FireRed

In pokemon emerald, if you chose the no option on the name confirmation menu in the intro,
it will set you back to where you select your player gender.

In firered that doesn't exist, instead, you only go back to the naming screen.

And if you typically fast forward through the intro like I do, there are times, where you accidentally skip
through the gender select screen without realizing it.

With a small change to the section of code shown below from the oak_speech.c file, that'll never be a problem again.

Spoiler:

All that's needed is replacing Task_OakSpeech24 with OakSpeech16,
and it'll smoothly transition back to the gender select screen.


View attachment 97571

Just commenting to point that Task_OakSpeech16, has been updated to Task_OakSpeech_TellMeALittleAboutYourself, Task_OakSpeech27 = Task_OakSpeech_HandleConfirmNameInput, and Task_OakSpeech24 = Task_OakSpeech_FadeOutForPlayerNamingScreen
 
Thought I'd share my modification of this too, as another option. I've tweaked AkimotoBubble's method a bit so that instead of pressing a different button for each set of stats, you can press A repeatedly to cycle through all of them:
[PokeCommunity.com] Simple Modifications Directory

Changes required are viewable in a commit here: link.
Hello, how are you? I'm already compiling to test your code, a question: how do I make it look something like this?
[PokeCommunity.com] Simple Modifications Directory
 
Back
Top