![]() |
I dont know if anyone would really need this, but if you want to skip part of the oak intro(where he sends out the Pokemon AND the text that goes with it)
put 79 FD 12 08 at 0x812f9E8 |
I've been digging into Forecast to try and figure out how to change the types of Castform's weather forms. More specifically, I want to make it possible to have a base form and weather forms that have one shared type with separate dual types. I have an okay amount of hex knowledge and exactly zero scripting knowledge, and I think I've gotten as far as that can take me. Here's what I've figured out so far:
Relevant offsets are, in FireRed (with their normal values in parentheses): 0x8019E70 (00) 0x8019E78 (00) 0x8019E9A (0A) 0x8019EA2 (0A) 0x8019EA6 (0A) 0x8019EC6 (0B) 0x8019ECE (0B) 0x8019ED2 (0B) 0x8019EF2 (0F) 0x8019EFA (0F) 0x8019EFE (0F) There may be more. To make sure we're on the same page, those values correspond to types. 00=Normal, 0A=Fire, 0B=Water, and 0F=Ice. The first two are the primary and secondary types of Castform's base form. If Castform's primary type doesn't match the value at 0x8019E70 AND its secondary type doesn't match 0x8019E78, it will "change" from its Base form into its Base form as soon as it's sent in (in clear weather). If even one of the types matches, it won't do that. The other sets of three values are of course related to the Sun, Rain, and Hail forms. Only thing is, I can't quite figure out what makes them work. I do know this much: -If 0x8019E9A and 0x8019E70 are the same value, OR if 0x8019EA2 and 0x8019E78 are the same value, Castform is unable to change from its Base form to its Sun form at all. This leads me to believe that 0x8019E9A and 0x8019EA2 determine Sun's primary and secondary types, respectively. The same is true for changing between ANY two forms. -Setting the first two values to XX and the third to YY (where XX and YY correspond to types) will cause Castform to transform into that weather form repeatedly forever, soft-locking the game: http://i.imgur.com/XzzBei4.gif -No matter what I've tried, I've been unable to get Castform's weather forms to be dual-typed. Which is a shame, since that's what I've been trying to do all this time. http://www.pokecommunity.com/showpost.php?p=5716298&postcount=11 I basically figured this much out using only this post from years ago, where someone found the script for Forecast's form change. Figured it might help to include it here. Someone who knows enough about battle scripts might be able to find something in there that I didn't. EDIT: I think I've figured out how the three values work. I say I think because I haven't figured out a way to prove it. But I have a good feeling about this because it makes everything else make sense. My theory is that the first two values for each weather form are to check the type, and THAT'S IT. The third value is then the ONLY one that says what Castform's type changes to. If this is the case, it seems very possible to, say, remove one of the type checks so that it only checks one of them, which in the process makes room to allow the weather form to set a dual type. Time to figure out how to get that to work, then. EDIT2: Okay yeah that's absolutely the case. Now I just need to figure out how to script this. |
Quote:
Quote:
Quote:
|
Quote:
The routine that's responsible for changing its type is located at: 080426BC in Emerald and at 08019DAC in Fire Red. I think they're both the same, but I'll use emerald one as example. Full routine: Spoiler:
If you're wondering how I got that, it's from emerald IDA, a very useful tool. Anyway, there are three important labels there, chack hail, check sun and check rain. First, they check if Castform already has type related to the weather and if it does, they don't do anything. If it has a different type, it'll change them. Take a look at that part from check_hail: ROM:0804280E MOVS R0, #types_ice ROM:08042810 STRB R0, [R2] ROM:08042812 STRB R0, [R1] #types_ice in reality is a value of 0x0F, it's just there to make code reading easier. STRB means that it stores this value at addresses in r2 and r1 which are responsible for pokemon types in battle. All you'd have to do is hook somewhere there and change the value of second type. If you know ASM, this shouldn't be that hard, if you don't however, I suggest you take a look at ASM tutorials. |
Quote:
This is Castform_Transform as named in IDA Spoiler:
This is Castform_Switch as named in IDA Spoiler:
Like Dizzy, I got these routines using IDA, and if anyone would like to add on, they can. |
In Emerald, there are three map names that are hidden on the hoenn map.
The three values at 0x085A1C34 are map names. 0xC8, 0xC9, and 0xD3. 0xC8 is "NAVEL ROCK" 0xC9 is "MT. EMBER" 0xD3 is "TANOBY CHAMBERS" IDK if you can get to these locations in Emerald (or if you can even open the map in them via fly) but there you have that. I can be completely wrong here |
Quote:
|
Not sure why im doing all this again, but oh well. May come in handy to someone.
Plus these are gonna be more of notes for me: To remove the platform that Professor Oak/The hero sprites stand on in the intro place 0x00 at 0x812F832 To stop Oaks palette from loading NOP out 6 bytes at 0x813126C (To restore it 24 48 60 21 40 22) To remove Oak I cannot find a decent place to NOP out his call, so just blank him out with unlz For anyone whos reading this and is wanting to mess with the intro. Doing these things is not the best way to do it. Write a custom one with C or ASM DO NOT mess with this one to a great extent unless you know what you are doing! The bytes around 0x130203 seem to have an effect on what sprite is displayed. For example I changed the 48 to 42 and it swapped the player to the VS.Seeker animation(I think I havent actually played FR to know this or not) So I may get more documentation on it eventually but I dont have much as of now. |
So I watched all the battle animations that I could find.
Spoiler:
|
Pokemon Emerald
cmd8a Spoiler:
Berry data Spoiler:
copyvarifnotzero Spoiler:
|
About time I finally decide to actually find something on my own! Put 00 00 00 00 at 080F8121, 080F8168, 08056C96 and 080F82BE to completely skip looking for location previews. Useful for people who don't want them and don't want to wipe out the table. I've tested it pretty well and I haven't yet noticed any side effects from doing it. And just a warning, I haven't confirmed whether the table (it's at 0x0843E9E8 by the way) actually gets read or not, so I'd advise against using it as free space.
|
Quote:
Spoiler:
I haven't been able to successfully insert a new Location Preview, or change the maps that they appear on (if anybody has any info on that I'd love to know), but I'm sure it's probably possible. Changing the pre-existing images on the pre-existing maps with Location Previews is as easy as copying the image, tilemap and palette pointers and replacing another entry on the list with them. |
Quote:
Code:
worldmap flag 0x8A5 = Viridian Forest worldmap flag 0x8A9 = Mt. Moon worldmap flag 0x8B0 = Rock Tunnel |
Quote:
|
Pokemon Emerald
cmdc3 increments a counter specified in the argument(0 for the first counter ,1 for the second counter, etc.) by 1. There are 64 in-game encrypted counters, though only the first 51 can be accessed. cmdb2 it's a nop cmdb1 a buggy command that gets the value of first argument three times and doesn't return it in any way cmd24 probably gotoasm |
Quote:
The transition byte, I don't really know. It seems to always be fed as an argument 0 or 1. Although you could theoretically add new ways of loading the map, I'm not sure why you would need to. Quick scan: 0x080F8104: 0x1B, number of entries (zero indexed) 0x080F8108: 0x1C, 1 more than number of pics, indicates no pic 0x080F8126: 0x1C, check for no matching pic 0x080F81AC: 0x1C, check for no matching pic 0x080F8552: 0x1C, check for no matching pic 0x080F857A: 0x1C, check for no matching pic Note that I literally looked for these while typing up the post, so I may have missed something. |
Field Move Selection Table
One more thing about expanding the move name list: Do you remember selecting field moves from Pokemon menu, right? You can clear the original and old move name table to have more free space. However, after that, the selection becomes blank, right? Want to know why? It is because there is a table in the ROM to load the selection of field moves. Here's the table: Code:
The table contains two pointers for each slot: the first pointer leads to a string of a move's name, actually inside the move name table; and, the second pointer... I dunno what it actually does but further investigation (it leads to an ASM routine I suppose), and every slot has the same pointer. For real, that table is part of the Pokemon Menu selection table (Shift, Summary, Exit, etc.). Here's the location of the field move selection table: Code:
Code:
Code:
Routines: Spoiler:
I wonder if it can be expanded though to add more field moves like Rock Climb, Defog, etc. Alright! That's it! Hope you've understand what it just wrote. |
Quote:
ptr to text ptr to function to execute Field moves are also in that table. It seems the order of those options displayed is determined somewhere else. 0x081B5470 is a function that's executed upon selecting a field move. This function checks obtained badges, whether you can use the move here, executes appropriate script, etc. I may try to look around to find the limiter. |
Quote:
|
When a new save is generated, the default wallpapers for the storage system will loop through the first four wallpapers for every box. This always annoyed me way back when I first played FRLG; it felt like they were just wasting the assets.
To make the boxes use wallpapers 1 through 14, change the byte at 0x8C836 to 0xD (you can make it higher but as there are only fourteen boxes, it won't really affect anything). As the wallpapers are assigned at the time of generating the save, this will only affect new saves. |
Quote:
In Emerald, to make the boxes use wallpapers 1 through 14, change the byte at 0x080C77C6 to 0xF (you can make it higher but as there are only fourteen boxes, it won't really affect anything). As the wallpapers are assigned at the time of generating the save, this will only affect new saves. To note though, especially for FireRed, it should be 0xF not 0xD. It is because not a complete bug but what happened to me is Forest, City, Forest, City, Crag, Volcano, Crag, Volcano, Beach, Seafloor, Beach, Seafloor, Polka Dot, PokeCenter (from Boxes 1-14 respectively)... Shortly, it skips the third and fourth, used the first and second wallpapers again. Divisible by "4" (digits 0x3, 0x7, 0xB, 0xF) results better, otherwise like I said before. |
PokeDex Search Functions
In Fire Red, there are four "Search Modes" for the PokeDex. Alphabetical Mode, Type Mode, Lightest Mode and Smallest Mode. The PokeDex determines the order of the Pokemon in these modes by looking at a table. There are four tables, one for each mode. So let's say you change the heights and weights for any number of Pokemon, or you change the types. Maybe you have new Pokemon and the Alphabetical Order table is now out of date. These tables can be edited and re pointed to accommodate new Pokemon. It may be a small thing, but the little things can go a long way into making a hack more professional. The Alphabetical Mode Table starts at 0x443FC0. The Lightest Mode Table starts at 0x4442F6. The Smallest Mode Table starts at 0x4445FA. The Type Mode Table starts at 0x4448FE. The pointer to the Alphabetical Mode Table is at 0x103694. The pointer to the Type Mode Table is at 0x103734. The pointer to the Lightest Mode Table is at 0x1037CC. The pointer to the Smallest Mode Table is at 0x103868. Some Notes: Each table consists of one entry per Pokemon, with two bytes per entry. These two bytes are the reverse index number of the Pokemon. For example, Bulbasaur's Index Number is 0001, which would be shown in the table as 0100. The Alphabetical table truly begins at 0x443FF2. There are some entries that begin at 0x443FC0 that do not appear in the actual game. They are after the "PokeDex index numbers" for Deoxys, which I will explain later. Not sure why they are there, but unless you expanded the number of Pokemon in the PokeDex I would leave them alone. (Although if you expanded the number of Pokemon in the PokeDex you would have to repoint anyway.) Also, the Type Mode table uses the "true index numbers", which are the ones given by programs such as Gen III Hacking Suite and are the ones used by nearly every other function of the game (Wild Battles, Trainer Parties, Give Pokemon Scripts, etc.) HOWEVER Every other table here uses the PokeDex numbers as the index numbers. For example, Abra is 63 in the PokeDex, and appears in the table as 3F 00. This is really only important for the Hoenn Pokemon, as their internal order and PokeDex order are drastically different. The Type Mode Table includes the 25 Unused Slots between Celebi and Treecko in the table (though they are not shown in game), but the other three do not. This is likely related to the entries in the Alphabetical Mode before the true table starts. The 25 entries before the table truly starts are after Deoxys (who is 0x182 in the PokeDex Order) and are not shown in the Vanilla game. Below is a list of the Hoenn Pokemon and their co responding PokeDex Index Numbers. You could go onto Bulbapedia and translate the PokeDex Number there into hex, but that's really tedious. Spoiler:
The Lightest and Smallest Tables have a limiter of 386 (or 0x181), so if the tables are extended they will have to be changed. The Type Mode Table does not have a limiter and ends at FF followed by anything that's not 00 (as FF 00 is an index number for a Pokemon.) I haven't looked into the Alphabetical Table much, but it doesn't appear to have a limiter either. I don't know how it measures the size of the table but the unused entries at the beginning might have something to do with it. |
http://pokedream.com/games/fireleaf/help/teachy1.png Ah, the Teachy TV. This item is given to you by the Old Man in Viridian City to teach the player about Pokemon. I find it to be completely useless, but one can hack the text to make it more useful if they wish. There is a table at 0x479308 that determines the text that is displayed on the Teachy TV menu and which video it plays when the option is picked. There is another table right after it that the TV uses at first. The length of this table is at 0x479374. Format Each entry is eight bytes long. The first four are a pointer to the string of the menu option, for example "How do I catch a Pokemon?" The fifth byte is the video that it will play. The valid numbers for this byte are 00 to 05. This is the order of the videos associated with each number. 00 - How to battle 01 - Status conditions 02 - Type matchups 03 - Catching Pokemon 04 - TMs 05 - Registering Items Offsets for Text The intro to each video is at 0x41B83D. Offsets for How to Battle Spoiler:
Offsets for Status Conditions Spoiler:
Offsets for Type Matchup Spoiler:
Offsets for Catching Pokemon Spoiler:
Offsets for TMs Spoiler:
Offsets for Item Registration Spoiler:
|
Haven't seen these on here so I thought I'd post what I've found.
These are both for Emerald. Change moves called in the Nature Power table: nature power table: 31c414 - 31c427 2 bytes per move in this order: tall grass, long grass, sand, underwater, sea water, pond water, rock, cave, building + plain terrain limiter: 14ef4a Replace B1 20 40 00 81 42 with 00 00 00 00 00 00 callterrainattack(battle script command): 054bec Fix Shedinja's evolution for expanded evolution table: @13e3f6 change 80 to c0 @13e3fa change 4450 to 0000 Explanation: Spoiler:
This change works for 8 evolutions. If you have more then it likely uses a similar pattern (shift bytes by a higher number and alternate whether or not you add the pokemon's index). |
Quote:
The Alphabetical Mode Table starts at 0x55C6A4 The Lightest Mode Table starts at 0x55C9DA The Smallest Mode Table starts at 0x55CCDE The pointer to the Alphabetical Mode Table is at 0xBCB74 The pointers to the Lightest Mode Table are at 0xBCC00 AND 0xBCC9C The pointers to the Smallest Mode Table are at 0xBCD28 AND 0xBCE24 I have been expanding Emerald for a while, and I can conclude that these tables MUST be expanded in order for an expanded Pokemon to be shown in the Pokedex. I didn't include the types because these isn't a function like that in Emerald. Plus, when looking for a certain type of Pokemon, any Pokemon can be found, regardless if expanded or not... |
Fun fact: STAB doesn't actually affect the move power. It affects the damage directly after the move power and attacker/defender stats, but before the type multipliers. Posting this, because everywhere on web you can read that stab multiplies the move base power by 1.5, it doesn't. At least, not in gen3. :P
|
Quote:
|
Quote:
|
Quote:
|
I haven't seen this documented anywhere: special 0x96 will set the flag named in var 0x8004.
For example, the following code: setvar 0x8004 0x29D special 0x96 Is equivalent to: setflag 0x29D |
Quote:
Alphabet does seem to have a limiter? Code:
Code:
Code:
Code:
|
Quote:
@ CE762 change 80 00 to C0 00 (00 01 if you expanded to 16 evolution methods, etc.) @ CE766 change 44 50 to 00 00 |
Braille Encoding
I didn't see it documented in the index, and I'm not sure if this has been posted before. In the Gen 3 games braille text uses a special encoding, which I've listed below: Code:
|
Quote:
|
To change the Zigzagoon you fight in Emerald immediately after picking your starter to a different mon, change the 0x90 at x32706 to half the index number of the mon you want. If you want a mon who index number isn't a multiple of two, simply put its (single-byte) index number there and replace the x49 at x32708 with an x00. To change the mon to a non-even index number that is greater than one byte, learn ASM and do your own stuff now that you have the relevant offset.
To change its level, change the x2 at x32714 to the desired value. |
No Healing Eggs [FR]
When healing at a Pokemon Center, the healing machine will light up with the number of Pokemon in your party. Starting in DP, eggs don't count - if you have two Pokemon and an egg, in RSEFRLG, you get three lights, in DP, you get two. To get this behavior in FR, all you need to do is: Code:
Spoiler:
Pokeblock Research [EM] This may already be known, but I looked and couldn't find it. If this is known already, I apologize. In Emerald, the contents of the Pokeblock Case are stored starting at [0x03005D8C] + 0x848. It is encrypted using the Security Key. Information on the Security Key, and how to disable it for Emerald can be found here. The Pokeblock Case has room for 40 Pokeblocks, each in the same 8-byte format: Spoiler:
I believe unk_0x7is either just padding or some sort of terminator. In my experimentation, it was always 0x03. The available colors are: Spoiler:
How could you use this? Well, I guess you could use this to, say, make NPCs that give out Pokeblocks, but seeing as most hacks don't feature contests anyway, that seems unlikely. It's actually more useful for Emerald hacks that don't use the Pokeblock Case at all. The space reserved for the Pokeblock Case is persistent; it will be saved and loaded. If you don't use the Pokeblock case, you have (8 bytes/pokeblock) * (40 pokeblocks) = 320bytes to persistently store whatever you want. Constant Base Power For Hidden Power [FR] Starting with XY, Hidden Power's base power was fixed at 60. Prior to this, it varied between 30 and 70, based on the Pokemon's IVs. To force the game to read the base power from the move data table, null out the strh at 0x0802B722: Code:
0x01, so it will be very weak until you change it. Open your ROM in an attack editor (for example, the one bundled with PGE) and change the base power to 60 (as in XY). For a final tweak, you may want to edit Hidden Power's description to remove the part that says its power varies, since that's no longer true. Unhidden Power [FR] Calculates the type (not power) of Hidden Power, so it displays as its actual type instead of always as a Normal-type move. Disable "The Pokemon Stopped Evolving." [FR] FR has a feature that if you attempt to evolve a Pokemon into something not in the Kanto Dex (and you don't have the National Dex), it will mysteriously stop evolving. You could just give the player the National Dex at the beginning of the game, but if you don't want to do that, you can easily disable this. Basically, this will turn some conditional jumps into unconditional jumps, and remove some checks. No free space required. Code:
Trade With Held Item evolutions, such as Onix into Steelix, remove the required held item. As part of the above, I realized you could easily disable this entirely (and, yes, it is compatible with the above) by nulling out a call to pokemon_setattr. The held item will still be required, it just won't be removed. Why you would want to do this I don't really know, but if you do, I'm putting it here. Code:
FR has three distinct types of trade restrictions:
Normally, the first two restrictions are lifted after getting the National Dex, while trading with RSE is unlocked by the Sevii Island stuff in the post-game. This removes all three of those restrictions. Code:
|
Do anyone now how to make the Pokemon not lose HP in overworld when it is poisoned? How to disable electricity type Pokemon be paralyzed? And how to change the weather ability such as snow warning, drought from infinty turns to 5 turns? (Emerald)
|
Quote:
|
Quote:
|
Quote:
|
Quote:
r0 has the limit in all four screenshots. |
Quote:
Anyway, the routines are right there, but they aren't actually "MOV r0, #0x19A" because 0x19A is over a byte. You wouldn't see that in the rom, you'd see an lsl operation that basically doubles a value to get 0x19A. It'd look like: MOV r0, #0xCD LSL r0, r0, #1 |
Quote:
I have a question I had expanded the pokedex of my rom but i can't reach to view the habitat's pages correctly what i should to do? |
Disable Trade Restrictions [EM]
Emerald has the same trade restrictions as FR.
All three of these are unlocked by enabling the National Dex. However, if you want to disable those restrictions without giving out the National Dex: Code:
Just null out the relevant strh. Code:
|
NOPing out the bl at 0x080BD614 (bl sub_8055F48) will disable the bicycle music (in layman terms, put C0 46 C0 46 at BD614).
A bl to the same location (sub_8055F48) also exists at 0x080CA650, which is part of sp157_activate_bike. I haven't tested nuking that, though. |
Quote:
|
Quote:
|
Quote:
The Front sprite is at 0xE3958C and the Back sprite is at 0xE39D70. They're both two frames, so if you want to edit the sprite you'll have to change both frames. Frame 1 is Normal Forme and Frame 2 is Attack Forme. So if you wanted Normal form you'd just have to change the second one to also be Normal Forme. If you wanted Defense or Speed Formes you'd have to change both frames to be those or it will just show up as Attack Forme by default. Deoxys is the only Pokemon that has two frames for their sprite by default in FireRed. If you change the sprite for one frame it won't really change it (or at the very least it won't if you only change the first one.) The Normal Form icon is at 0xE3A388. Like the sprite, the Icon has twice as many frames as the rest (in this case four instead of two) although the game obviously only uses the last two frames. This is not too difficult to edit either. NSE will show you all four frames, and you can go from there. If you want other Formes you will need to edit all of the frames, same as the sprite. |
Quote:
Code:
HP: 56 Attack: 62 Defense: 68 Speed: 74 Sp. Attack: 80 Sp. Defense: 86 Actual: HP: 50 Attack: 180 Defense: 20 Speed: 150 Sp. Attack: 180 Sp. Defense: 20 Point being, you sure that the base stats are located at 0x0825E086? Unless if I'm totally off in understanding this...? EDIT: Sprites and Icons are correct, though <3 EDIT2: Normal Doexys' Base Stats are at 0x0825745C, but this doesn't matter. "32 B4 14 96 B4 14" doesn't exist in the ROM, however... Does the ROM use multipliers to change the base stats...? EDIT3: "32 00 B4 00 14 00 96 00 B4 00 14 00" exists in the ROM at 0x0825E026 with a pointer located at 0x08044704. I don't have IDA or anything to check it out, though, so... |
Quote:
Quote:
|
Quote:
you should be able to just paste normal forme onto attack forme without any repercussions that's what i'm thinking, yes, but i have no way to check without going through a lot of hassle that i literally can't do right now lol~ EDIT: found time to do it, and yes, 0x0825E026 is the location of the stats (at least it seems so based off of knizz's idb), as 0x08044708-0x080447A4 is the routine for updating deoxys' stats and uses the data loaded at 0x08044704~ |
Quote:
|
Quote:
so we'll use emerald's idb and kleenexfeu's byte changes in emerald as a ref for a moment. um, try 01 BC 00 47 at 0x0800EDAE. this theoretically causes no sprite change to be made... also try C0 46 C0 46 C0 46 C0 46 at 0x08044690. this theoretically causes no stat change to be made... lastly, try C0 46 C0 46 C0 46 C0 46 C0 46 C0 46 C0 46 C0 46 C0 46 at 0x08097038. this theoretically causes no icon change to be made... if this works, please report back <3 |
Quote:
IT TOTALLY WORKS. Great job! Not only did Deoxys look Normal, his minisprite was Normal, and his back sprite was Normal, his stats are Normal too. :D |
Quote:
|
Quote:
|
Quote:
Also, you wouldn't be able to edit expanded Pokémon with 1.95 in the first place, so it wasn't an option ;) |
Thanks. Didn't someone come up with a way to do it in A-Map 1.95? If they didn't, my bad..
|
I spotted a routine shortly after checking for DEOXYS and MEW obedience, I think it's related with badge obedience checks before attack, but could not confirm if this is it. It's in: 0801D438.
And anyone knows how to increase pokemon chance disobey without proper badge? Quote:
|
In Gen 3, Protect/Detect/Endure are bugged. The game is supposed to read the probability from a table which has only 4 entries, thus reading garbage data after the 4th consecutive protect.
To get the correct behavior (like gen 5+, no cap) replace the bytes at 0x26FB6 with this (FR): Code:
|
Quote:
|
Quote:
Also I found a couple of item checks: At 0x1E496 is the Critical-Hit Ratio item checks. So this is for stuff like Lucky Punch, Stick and Scope Lens. At 0x21CC2 is the Exp. Share check. There appears to be more than one Exp. Share check. I foun two others: one at 0x21BBC and one at 0x21DAA. The one at 0x21BBC appears to only be used by Pokemon who were sent out into battle. I'm not sure about the 0x21DAA one. When I was messing around with them (I was trying to make some sort of Exp. All routine but gave up because I couldn't figure out how to get it not to give experience to eggs) the one at 0x21CC2 is the one that gave me the best results when I branched off of it. |
The Great And Powerful Lucky Egg http://cdn.bulbagarden.net/upload/5/5c/Bag_Lucky_Egg_Sprite.png
The check for the Lucky Egg is at: FireRed: 0x21DBA Emerald: 0x4A67A The byte that determines the experience multiplier is at: FireRed: 0x21DC2 Emerald: 0x4A682 In the vanilla games, this byte has a value of 0x96, or 150 is decimal. This gives a multiplier of 1.5. So if you want to change the amount of experience the Lucky Egg gives you, just follow these three easy steps! 1. Choose a value that you want to multiply the gained experience by (It will have to be less than 2.5 without using ASM). 2. Take away the decimal point (so 1.5 would be 150, 2.0 would be 200). 3. Convert that value to hex (so 1.5 is 0x96, 2.5 is 0xFA) and put that value at the offset listed above. |
Quote:
|
So here's a little bonus thing on b_status3_bits_pbs, or 0x02023DFC in FR. Setting it to 0x8000 or 1000000000000000b, on the defender, then that Pokemon will not be hit by critical hits, like Shell Armor and Battle Armor. This applies to all Gen 3 games, but I don't know the exact offsets of the status bits.
|
Quote:
|
For Emerald, to enable the catching areas in the pokedex to show the new catching areas of the new creating maps, just change the byte at 0x0813CE5C from D2 to FF.
|
Its so silly of me because i was totally unaware about this amazing thread upto few minutes back!
|
Quote:
|
I've found a bunch of information on HM scripts and ported Ephraim225's HM check to Emerald so that you don't need to teach HM's to use them.
Emerald HM scripts: Surf:271EA0 Waterfall:290A49 Dive:290B0F Dive(return to surface):290b5a Cut:2906BB Rock Smash:2907A6 Strength:2908BA Surf check(prescript asm):insert 0000 @9c80a to disable (go here for fire red offset) use a level script for Flash. Emerald offsets for HM check routine(http://www.pokecommunity.com/showpost.php?p=8927083&postcount=726): Players party:0x20244EC Decrypt:0x0806A519 TM compatibility table(default):0x831E898 Var 0x800D:0x20375F0 Players team size:0x20244E9 *Note that you'll need a separate slightly modified version of this asm to check for Waterfall and Dive because they are found on a different byte in the compatibility table. Spoiler:
Call fly HM asm with an item: Insert an XSE script with the item script routine(also in Complete Item Editor). Fly asm appears to be @0x8124690, but to make it work I needed to use callasm 11 times in my script. It seems weird but it worked for me(maybe there's a loop somewhere?). In your script use loadbytefrompointer with 0x20375F0(var 0x800D's ram location) and setfarbyte to write the result of your HM or move check to 0x203ced1 so that the right Pokemon will appear in the animation. Look here for info on checking the map type(indoors, cave etc.) EDIT: Fly map isn't showing location names unless you move the cursor over the Pokemon League. Black bar HM animation offset:080B84F8 RAM where shown Pokemon's hex appears:2038C08 |
MAKING A TRAINERBATTLE CONTINUE AFTER DEFEAT
36 at 0x804D0 in FR So usually we use trainer battle 0x9 for this but you also have to include Oak's stupid dialogue, so I got rid of that. Use it like so; trainerbattle 0x9 (trainer id) 0x0 (pointer) (pointer). Yeah, don't use the 0x3. It'll still give out money from your pocket. Using this, all trainerbattles with that style will continue with the script regardless of whether you won or lost. ~EDIT~ Your pokemon sprite may not show up when switching. I'm not sure why, but be aware of it. It works fine with one Pokemon which was all I was testing it with at first. |
I think I was looking into this like 2 years ago but wasn't able to find it. Anyone know how to change the badge that controls whether you can use Flash in the overworld? (EM)
|
Something quick from the Emerald IDB for anyone replacing Pokemon:
The byte @7090C checks for Pichu when breeding for Volt Tackle. To change this to Pikachu(0x19) or any other Pokemon just replace 0xAC with the 'mons index. |
Quote:
|
Quote:
I'm using your routine but when I'm fishing when I catch the Pokémon my rod disappears, but it only happens at the Safari Zone. Do you know how to fix it? EDIT: I think it's caused by your "deleteball" routine, because it removes the last item used from the Bag, but the Safari Balls isn't on the Bag and the reusable function isn't working on them. |
gen 6 exp share system (FR)
Just make the byte changes 21C3A - 02 21 21CD0 - 01 22 21D70 - 01 20 Quote:
|
If you decide to update your Pokemon Centers by extending the counter for instance, the animation for healing your Pokemon will be off. Use these offsets to fix it.
3CAF90 - The image for the Poke Balls and flashing screen. Open it in NSE with dimensions 32x72. 3CAFB0 - The palette for the Poke Balls and screens. 3CC014, 3CC01C, 3CC024 - A byte located at each of these controls the width between the two columns of Poke Balls on the healing machine. 83BB0 - A byte which controls the X coordinate proportional to the player sprite, of the Poke Balls on the healing machine. Fiddle around with it until you get the result you want. 83BB4 - A byte which controls the Y coordinate proportional to the player sprite, of the Poke Balls on the healing machine. 83BB9 - A byte which controls the X coordinate proportional to the player sprite, of the flashing screen. 83BBC - A byte which controls the Y coordinate proportional to the player sprite, of the flashing screen. *NOTE: None of these bytes are coordinates in A-Map so don't go setting it to those. |
Quote:
|
Quote:
|
Quote:
4A4BE - 02 21 4A594 - 01 22 4A634 - 01 20 ok this should be finalized no more crap from me ahaha |
Quote:
|
Quote:
Code:
Spoiler:
It checks your bag if you have the Exp. Share. If you do, then your team will each get 50% of the experience (I suggest you turn your Exp. Share into a Key Item if you want to apply this into your Ruby hack but I really suggest you either hack Emerald or FireRed instead...). The experience gain is reduced to 50%, regardless if you have the item and who's active during the battle. (It's why I decided to remove the feature in the next beta of my hack.) Credits go to Andrea. |
Quote:
Thank you very much :), sorry for the inconvenience. |
Quote:
|
Quote:
|
Quote:
i can do it in like 7 hours when i get home |
Quote:
Spoiler:
Do the same thing for Emerald at 13E4EC. |
Quote:
|
Quote:
|
Quote:
oh and if there's an idb of ruby then why the would i be saying this ahaha someone might wanna check out the addresses in the routine that i already found because one of them was pretty sketchy i think en español (no porque no puedes leer el ingles, porque quiero practicar y mejorar mi español) Spoiler:
|
Quote:
|
Quote:
|
Quote:
|
Quote:
unown formes are determined by their PIDs and do not count as seperate pokémon themselves edit: damn it dizzy |
Quote:
|
Quote:
Spoiler:
- - - - - - - - - Andrea's Gen VI Exp. Share - - - - - - - - - Credits to Andrea~ and The_Learner bpre: Spoiler:
bpee: Spoiler:
have a nice day, this took way too long <3 |
Quote:
|
Quote:
report back with fr, please <3 EDIT: i'll do fr, but how done i was yesterday shines through in that i didn't even tell to make the pointer aligned. :P EDIT2: works here after a few byte changes to my byte changes were made to made. updating post EDIT3: works in em after doing the same byte changes. happy hacking! |
Powder Jar [FR]
The amount of berry powder is stored in a byte at [0x300500C] + 0xAF8. It's referred to as field_af8. It is encrypted via the Security Key. In finding this, I found a function at 0x0815EE3Cwhich takes a pointer and decrypts what it points to with the Security Key. |
Door Animation Format
Door animations follow a very simple 12-byte format, which I'm sharing for anyone that needs a reference. Code:
Code:
|
| All times are GMT -8. The time now is 8:53 AM. |
![]()
© 2002 - 2018 The PokéCommunity™, pokecommunity.com.
Pokémon characters and images belong to The Pokémon Company International and Nintendo. This website is in no way affiliated with or endorsed by Nintendo, Creatures, GAMEFREAK, The Pokémon Company or The Pokémon Company International. We just love Pokémon.
All forum styles, their images (unless noted otherwise) and site designs are © 2002 - 2016 The PokéCommunity / PokéCommunity.com.
PokéCommunity™ is a trademark of The PokéCommunity. All rights reserved. Sponsor advertisements do not imply our endorsement of that product or service. User generated content remains the property of its creator.
Acknowledgements
Use of PokéCommunity Assets
vB Optimise by DragonByte Technologies Ltd © 2023.