Welcome to the PokéCommunity!

Hi there! Thanks for visiting PokéCommunity. We’re a group of Pokémon fans dedicated to providing the best place on the Internet for discussing ideas and sharing fan-made content. Welcome! We’re glad you’re here.

In order to join our community we need you to create an account with us. Doing so will allow you to make posts, submit and view fan art and fan fiction, download fan-made games, and much more. It’s quick and easy; just click here and follow the instructions.

Pokémon Sun and Moon are now available! Read our extensive Sun and Moon review at Daily!

The finale of the fourth annual Favorite Pokémon Tournament is underway in Pokémon General!View the poll and vote for as many Pokémon as you'd like. Voting is only open until the 5th of December though, so don't wait to make your picks!

Research & DevelopmentGot a well-founded knack with ROM hacking? Love reverse-engineering the Pokémon games? Or perhaps you love your assembly language. This is the spot for polling and gathering your ideas, and then implementing them! Share your hypothesis, get ideas from others, and collaborate to create!

Research & Development programs in this forum are subject to moderator approval before they are displayed.

A HM/TM hack, that makes TM show up with a blue name when you select a pokemon in the status screen, and make it possible to link it to a script. That means we can create custom HM's, and custom field TM's. That would be pretty cool, imo ;p

from which offset is advisable to begin to make script??
It is usually begun by 0x800000 but..this ROM has very more space of a normal ROM ^^"

You could even start at 0x720000, if you want.

Quote:

Originally Posted by Quil

JPAN, I got an idea for a new addition ;D

A HM/TM hack, that makes TM show up with a blue name when you select a pokemon in the status screen, and make it possible to link it to a script. That means we can create custom HM's, and custom field TM's. That would be pretty cool, imo ;p

To be honest, I doubt that just linking them to a script might be a good idea.

To be honest, I doubt that just linking them to a script might be a good idea.

What would be the problem? I don't know ASM myself, and I am just doing a suggestion.. I think that it would be pretty nice to have your 'custom' field-moves like Headbutt for headbutt trees also show up like Dig, Fly, and Surf. And as HM's are also being modified to give them a custom effect, the use in the status screen would stay the same, which isn't right.

JPAN, I have yet another bug:
When placing a script to be called at a button press, all the game does is not permit me to move while I have that button pressed. Once I let go, I can move again. The script is never called.

Also, on the trainer battle script runner, can you make a sound 0x15 happen at the ! mark?

JPAN, I have yet another bug:
When placing a script to be called at a button press, all the game does is not permit me to move while I have that button pressed. Once I let go, I can move again. The script is never called.

Also, on the trainer battle script runner, can you make a sound 0x15 happen at the ! mark?

Open the ROM you patched with the engine in a hex editor. Navigate to 0x16008C. Reverse the pointer stored at 0x16008C, add 0x12, then navigate to this new offset. The byte should be a 0x91, change it to a 0x81. Fixed!

Quote:

Originally Posted by Quil

Ah, that way ;p I misunderstood you. Yeah, that's right. HM's like Surf and Fly can't be made though scripting. Headbutt, however, can. ;p

Yes, however, the headbutt script can only be run when the user presses A on a tree, but Surf is a tile permission and fly is called through the party screen. Both of these would require ASM routines, and it would probably be hard to make them call a script without bugs. So if you wanted something like this,the best option would probably be to create an ASM routine that does what you want within the routine, rather than calling a script.

Open the ROM you patched with the engine in a hex editor. Navigate to 0x16008C. Reverse the pointer stored at 0x16008C, add 0x12, then navigate to this new offset. The byte should be a 0x91, change it to a 0x81. Fixed!

Thank you! It works perfectly now!
The only odd thing is the 0x91 byte was one before the reversed offset+12 pointed to. Thanks again!

JPAN, I've got a problem here:
Using your "change Pokémon species special", I successfully changed the species of Pokémon that the player had. But when I went into the status screen, the game crashed on a black screen. The thing is, after going into battle with it (successfully, no errors) and gaining some Exp., the status screen is again viewable.

I warned about this when I first created the code, but it seems I forgot to add the disclaimer to the manual. Change pokemon species should only be used with pokemon that share the same experience curve. The reason the game crashes when you try to see the status screen is because the pokemon should already be at the next level, and has negative amount of experience until it reaches. That would make the blue bar on the bottom circle around the screen infinitely (if you're lucky, some experience differences can cause you to see it without crashing). This bug first appeared with the experience adding, but because I had no information about leveling up (the algorithm to level up a pokemon is still unknown to me), i couldn't make a decent level-up code. When you go into battle, the game calculates your level and experience based on the current species, and corrects the bug. For now, I have no fix other than ask you to only use the code with pokemon that share the same experience curve.

Quote:

Originally Posted by Derlo

JPAN I used the Specials 0x52 to the 0x55, and found a problem.
When we use the 0x52 or 0x54 to put a status on any of the pokemon (example: SLEEP), and when we use the 0x53 and 0x55 to "turn off" the special, everything is fine.
But .. when we catch the pokemon in question, it comes with with POISON status.

The status code 0x54 is more of a "dumb" version of the 0x52 code. I created it to simplify trainer battles. It has several bugs that can be avoided with the use of 0x52. The status inducing specials use the game main status manager to replace the previous status with a new one. The game uses 5-7 times to manage a pokemon creation for battle, plus 2-3 for each other pokemon to create (trainer case). 0x52 counts those turns, and deactivates itself after the x time you gave it (usually 7). but 0x54 does not. That means any status is replaced by the code, even the ones induced with healing items and the like.
So, any bugs found with 0x54 will not be addressed. 0x54 is buggy by its nature.
If the POISON was caused by 0x54, change specials. If it happens with 0x52, then try different timers. 7 is the average, but 8 shouldn't be a problem. I myself tried with 0x52 several pokemon battles (activating with a level script, a walking script and even an item script), and in several roms, and the result seemed to be the same. Catching a pokemon was not affected (except for too high numbers on 0x8005, like 0xF) by the status inducer.

Quote:

Originally Posted by Derlo

When the routine is started, and the wild pokemon appearing on this being affected by it. Sometimes the status is only in Battlebox, but the pokemon in question is not suffering the damage status.
Example: A pokemon with SLEEP.
Sometimes the animation of Z (ZzZzZ. ..) does not appear, and the pokemon attacks us as if its status was normal.

This problem is similar to the one above. It seems your game likes to generate pokemon with a higher number of status passes than usual. Try upping the counter a bit (9 tops) and check again. What is happening is that the status on the box and the one the pokemon has are calculated sperately (box is the 2-3 pass, pokemon actual status is the last).

On a separate note, I had to be away for a few days, so I did little work on the berry project until tonight. But until now the outlook looks good. I have successfully managed to make a "people tree" that cycles its look from hero, to hero bike to little kid to heroine, in 15 minutes. Longer tests are required, but the game is processing well the large time differences (up to 12 months difference in time), small intervals (minute updates) and graphic display (although the "tree" will not change until the OW is refreshed, be it through menu or moving to other map/loading zone).

But the error should be remarked that actually the fact that my script HEADBUTT.
For some value is written to 0x8004 for the script, which makes any status becomes SLEEP in battle, but in POKEMENU become the POISON.

I am not sure if this has been said but the program keeps asking me for the "chose the variable for the wild pokemon switch" I paced a variable in but I won't stop asking me for it. I have tryed switching to a different variable but nothing makes it happy.

I don't know if this is the right thread to be asking this in, but do anyone of you know how many bytes one move/attack lies on? When I'm editing the attacks for the empty slots they overlap so the attacks from one Pokémon is also on the Pokémon before.

I don't know if this is the right thread to be asking this in, but to do anyone of you know how many bytes one move/attack lies on? When I'm editing the attacks for the empty slots they overlap so the attacks from one Pokémon is also on the Pokémon before.

the simple questions thread is where you should go i think.
jpan, is it possible to make it so that when you step on a green s, a shiny pokemon appears in your party if you use this?

there is a way, here is a quick basic script (of corse much needs to be added) but in jpans other thread he posted a routine that makes party pokemon shinny.
checkitem
if true goto @shinny
@shinny
callasm @shinny

All right...you asked for suggestions, so I've got some. Be warned, this is something specific. I don't know if it will have relevance to anyone else's projects, though I believe so.

First of all, some explaining is in order. I've been looking for ways to make the game more like the show. In that, I decided that the obvious place to start was the core of the game experience...the battle system. This means making some major changes to the battle engine itself. Since you've already built a framework, I thought I'd bounce some of what I would need to be done off you.

+ Ability to call up a command menu on the opponent's "turn"...by which I mean after their move is declared, but before the effect is applied.
+ Multiple battle menus called by variable.
+ Ability to define and call up multiple "versions" of a move (like how Secret Power changes by terrain, or Curse working differently for ghosts).

While there are a number of possible uses for these functions, it is my intent to use them to create a two-phase battle system, in which pokemon have not only an attacking turn, but also a defense turn. Of course, and so you don't think my request selfish, there are other ways it could be used as well. For example, multiple move versions could be used to make HM moves always the right type for the pokemon they're taught to (such as Fly becoming Dragon-Type for certain pokemon, or Flash changing to Fire for some users). The multiple battle menus and off-turn call systems might be used to make a battle in which a Trainer must be talked to during the fight.

Of course, it could be that some of this could be better accomplished through the creation of a utility. If you believe so, then I heartily thank you for your time, and apologize that my input has not been helpful.

To start off, I have to say that this is the coolest and most useful hacking thing I have stumbled upon so far! I'm definitely using this in my hack.

I can't seem to get all of the decrypter specials to work =/. I got special 0x14 to work, which is the change captured ball special, but I can't get special 0xF to work! It's the EV adder/subtracter. I want it to add 170 EV's to the HP stat, by the way.

Help

The PokéCommunity

Meta

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, or The Pokémon Company International. We just love Pokémon.