This week I've got an interview from the creator of
Pokémon Brown 2.0,
Coolboyman. We discuss 2.0 and future plans.
So, Coolboyman, this would be the second time you've been in an interview with us. Anything particularly interesting you'd like to share since the last time?
Coolboyman: Well I'm doing more than ROM hacking now. Even though Prism and Brown's Final Quest (which I promise will be released) is being worked on, I'm working on other games now as well.
Despite being The World of Rijon's webmaster and knowing you, I know absolutely nothing about Brown's Final Quest, hahaha. So, what's that about?
Coolboyman: Well I'm doing more than ROM hacking now. Even though Prism and Brown's Final Quest (which I promise will be released) is being worked on, I'm working on other games now as well. You will need a good team to get through - a lot of the battle are lvl 80-90 battles.
That's pretty... high.
What kinds of new Pokémon do you plan on or have already implemented?
Coolboyman: All the Pokemon are already programmed in, but there will be Legendaries as well as a few other new Pokemon.
I see. Also, you mentioned you had other games in the making? I think I know one of them, but what else?
Coolboyman: Well they're not ROM hacks, they're flash games, however I'm taking the same attitude towards making games with ROM hacking. I was recently hired to make minigames for a website that I'm really looking forward too, as well as other flash games. My long lost project "Exertion" will also be reborn as a flash game.
Exertion?
Coolboyman: Yeah, it's actually going to be a really dark game, taking place about 300 years in the future with original characters. It's had a tough life too. First it was a Dragon Warrior I hack, then Zelda 1, then Zelda 4, then Zelda 1 again, and finally Flash.
Flash is pretty versatile compared to modifying existing bases, isn't it?
Coolboyman: It has a lot more freedom than ROM hacking, and gives me the opportunity to do more with games that I can't do with ROM hacking. However, ROM hacking has a certain charm to it. I use it to make new games on an already established engine. If I were to make Pokemon Prism in flash, I would have to reprogram everything myself to copy the game's coding, and theres no way I could do all of that successfully.
You've been relatively mum about Prism, lately. Have you got anything you haven't shown off that you'd like to say to us now?
Coolboyman: Well I really don't want to spoil much about Prism, it's best if you play through the game without knowing what will come next. There's some complex quests ahead, multi regional traveling, Crafting skills now have a level up system, and some very hidden secrets that I only expect a few people to discover without help.
I think a lot of people would have stuff to look forward to from you in the future, then! Any hacks you've kept your eye on lately?
Coolboyman: Not really to be honest. I've seen a few hacks with lots of potential, but these days I'm spending more time making games than playing them.
Haha, right.
Anything in HeartGold/SoulSilver that you've been intrigued by?
Think there's anything worth pushing into the ROM hacking community, or would that just be a waste of time?
Coolboyman: Well HG/SS is looking like more than a standard remake, with map changes and new events and features. I think those are a good addition to the game. And what do you mean by "worth pushing"?
Anything we could possibly implement that looks viable enough, really.
Coolboyman: Well it matters what it is, if it fits, and if the author can do it. It's up to the author if he or she wants to put any of those in.
Perhaps it's a problem with the community right now, but do you think that, since GameFreak managed to "wow" us with some of its designs (e.g. New Bark Town's windmills) the community might be in need for some extra imagination?
Coolboyman: Well the community can look towards the game for inspiration on how they can improve their own hacks. Not by necessarly taking ideas from them, but by seeing the potential of detail they can put into their game.
That's quite true.
Well, that's all the questions I had ideas of. Thank you for your time!
Coolboyman: No problem.
Two in store today:
Creating HM moves, and
Making custom instrument sets
Creating HM moves
Tip submitted by
Dratii
Are the old HMs boring, or do you want to add a feature from D/P/Pt, such as 'RockClimb'?
Start off by opening a script editor. For this tip
XSE was used. Create the usual parts used to start to a script, it maybe dynamic, or static.
Code:
#dynamic 0x//Offset
#org @//label
lock //Prevents the player from moving while the script is executed
Next
checkattack or
#raw 0x7C is needed. This checks if a pokémon in your party has the specified attack and stores it in
0x800D or
LASTRESULT. To either continue the script or end it,
compare or
#raw 0x21 is used.
This is the script so far;
Code:
#dynamic 0x//Offset
#org @//label
lock //Prevents the player from moving while the script is executed.
checkattack //Hex or Dec of the attack to be checked, e.g. 0x1D or 29 or if #include stdattacks.rbh was used in the header of XSE ATK_HEADBUTT, the script would check for headbutt.
compare LASTRESULT 0x6 //Checks if the attack was found in the party, 0x6 can be changed to a different number, such as 0x1, 0x6 checks the whole party while having 0x1 would only check the first pokémon.
if 0x1 goto //Pointer or label to go to if the attack was found
Now that the game has checked that a pokémon in your party has the attack, we now need to get the script to do the new HM move.
For most HM moves
setanimation and
bufferpartypokemonSetanimation or
#raw 0x9D are used to create the HM banner which show the pokémon using the move.
Bufferpartypokemon or
#raw 0x7D is used to place the name of the pokémon using the move in text.
The script now looks like;
Code:
#dynamic 0x//Offset
#org @//label
lock //Prevents the player from moving while the script is executed.
checkattack //Hex or Dec or name of the attack to be checked, e.g. 0x1D or 29 or if #include stdattacks.rbh was used in the header of XSE ATK_HEADBUTT, the script would check for headbutt.
compare LASTRESULT 0x6 //Checks if the attack was found in the party, 0x6 can be changed to a different number, such as 0x1, 0x6 checks the whole party while having 0x1 would only check the first pokémon.
if 0x1 goto //Pointer or label to go to if the attack was found
setanimation 0x0 LASTRESULT //Uses last result to prepare a HM animation bar
bufferpartypokemon 0x0 LASTRESULT //Puts the name of the pokémon, from number in last result, into [buffer1] in XSE or\v\h02
Next we need to ask the player if they want using the
message command and the
compare command. Another message can be used to tell the player that the attack has been used, e.g. [buffer1] used //Attack name.
The executing part of the script is finished off by using,
doanimation,
waitstate and
goto.
Doanimation or
#raw 0x9C, does the animation that was set earlier; the HM bar.
Waitstate or
#raw 0x27 waits for the animation to finish. and
goto or
#raw 0x5, goes to the main script.
This is the finished exceuting script;
Code:
#dynamic 0x//Offset
#org @//label
lock //Prevents the player from moving while the script is executed.
checkattack //Hex or Dec or name of the attack to be checked, e.g. 0x1D or 29 or if #include stdattacks.rbh was used in the header of XSE ATK_HEADBUTT, the script would check for headbutt.
compare LASTRESULT 0x6 //Checks if the attack was found in the party, 0x6 can be changed to a different number, such as 0x1, 0x6 checks the whole party while having 0x1 would only check the first pokémon.
if 0x1 goto //label or pointer //Pointer or label to go to if the attack was found
setanimation 0x0 LASTRESULT //Uses last result to prepare a HM animation bar
bufferpartypokemon 0x0 LASTRESULT //Puts the name of the pokémon, from number in last result, into [buffer1] in XSE or\v\h02
message //label or pointer 0x5 //Asks the player if he wants to exicute the script
compare 0x800D 0x0 //Checks if the player answers no
if 0x1 goto //label or pointer //Pointer or label to go to if the the player answers no
message //label or pointer 0x4
doanimation 0x25 //Does the HM banner animation
waitstate //Waits for the animation to end
closeonkeypress //closes the text box when 'A' is pressed
goto //label or pointer //Goes to the next part of the script
Examples of scripts what can be done;
Headbutt
Rockclimb
Honeytree
....
One in action;


Making custom instrument sets
Tip submitted by
the editor
Note: wall of text ahead. Also requires applied knowledge, so if you can't use your head, wait for someone else to. You won't be making anything in this tip - you'll learn what's needed to make something though.
It's been a part of rijonAdventures for a very long time now, but it doesn't seem that anyone's actualy figured it out - that, or someone's posted it and it's been long forgotten about. The way I'm showing you is the barebones way to do it, so this assumes you have a music track to edit the instruments for already AND know the anatomy of a song (and how instrument sets are selected) - if you want to make an in-depth tutorial featuring all the game's instrument sets or make a deluxe music editing tutorial about it, be my guest (and credit me).
Oh, and you must know how pointers work. Actually, not just that, but how to do any hex at all.
What is an instrument set?
An instrument set is dumb; it's not part of anything and is only loaded when its needed. It has no header data or footer data, either. I find that the offset it's placed DOES matter at times, but not all the time. A song will call a specific part of an instrument set - we'll call it an instrument reference here - when it needs it. Generally, each track will call one or two instrument references. So, instrument sets (or to some, "voicegroups") are really a collection of these "instrument references" (for the lack of a better name). The instrument set is the second set of four bytes in a song header.
Anatomy of an instrument set
An instrument set is as big as each individual song needs. Most songs will generally need about 128 instrument references.
Find out how many your song needs.
An instrument reference consists of 12 bytes of data. The first 4 bytes are a "header" of sorts for that reference and determine what is required for the last 8 bytes. A typical instrument reference for a "simple"-type instrument looks like this:
00 3C 00 00 78 A9 50 08 FF EB 00 CC
If you looked at the second (green) set of four bytes and recognized a pointer, that's exactly what it is! It's a pointer that leads to an instrument to be played. The first set of bytes (namely, 00 3C) indicate to the game that this track is to load a MIDI instrument. And if anyone knows the point to the third set of bytes, tell me. (They probably "tune" the MIDI instrument.)
This tip isn't going to go too in-depth with the
types of instrument references, but if you look through the ROM yourself at a voice group, you'll find different kinds. If you want, make a tutorial with all the instrument references listed in them (like the one above - which is what track 0 of the Viridian Forest song uses). Once you find them all, you'll have all the instrument references that are in the Pokémon games altogether. (Remember: they're twelve bytes each.)
How many instrument references?
You need as many as the song requires. With Sappy open, click the green disclosure triangle at the track list header (note though, that if you're not running Sappy 2006, you'll have to click them all). Play the song completely and look for the
highest red number. To that number, add 1 - instrument reference 0 is not included - and the number you get determines how many instrument references are needed.
An example: the highest red number in the Viridian Forest track is 127 but it doesn't include instrument reference 0, so do the math - 128 * 1536 bytes, so that much is what the song will need.
Wait, what? How do these work altogether?
I told you to look at the red numbers for a reason, but pay attention to the ones in each track - this is the instrument reference the track (or this particular part of it, to be precise) will need. The instrument reference above that track 0 of the Viridian Forest song needs is "13". Do the math here: 13 * 12 = 156, so the instrument reference that the track 0 will seek in the instrument set is 156 bytes
into the instrument set.
When applying this knowledge to transferring tracks from Ruby/Sapphire/Emerald, you'll be able to copy the instrument sets from songs in those games into THIS game. Perhaps that's something for the next issue.
There may be errors in this tutorial - don't hesitate to point them out. If you have any questions or have a dire need for screenshots, ask away.