Advertiser Content

Quick Research & Development Thread Page 46

Started by Spherical Ice January 9th, 2010 2:23 AM
  • 451751 views
  • 1134 replies
Male
Seen September 15th, 2019
Posted July 17th, 2019
2 posts
2.8 Years
Alright, Thank you for responding. Truth be told, I just had the LG ROM already on my computer and wanted to mess around with it, I didn't know the two were different beyond version exclusives and title screen. I'll try looking it up because I've put in a bit of work already, but if I can't find anything I'll get an FR ROM and start over. That much shouldn't be too hard.

RichterSnipes

TFW Your Game Has Snivy In It

Age 26
Male
USA
Seen 1 Week Ago
Posted 3 Weeks Ago
446 posts
8.1 Years
Faster Game Saving [FR]

Starting with Gen II, attempting to update the save on your current file would tell you that "There is already a save file. Is it OK to overwrite?" This needless extra step remained until Gen V, when it reverted the process back to one step.

To skip this step and save after just one prompt, change the byte at 0x6F874 from 0A to 56. This only applies to saving over your current profile. If you start a new game and try to save over the old profile, you'll still receive the extended overwrite warning.

Explanation: The subroutine at 0x6F86C gets loaded if the game detects there's already a save file. First it checks if the profile is different from the current one. If it's the same profile, it branches to 0x6F88C. This is indicated in hex by 0A D1. After branching, it'll load the "There is already a saved file" text string and corresponding subroutine.

What this change does is make the game branch instead to 0x6F924, which bypasses the already-present save subroutine and skips straight to saving the game.

I'm still not that good at ASM. If anything needs correcting, feel free to do so!
My hack:
Male
Seen 2 Weeks Ago
Posted September 26th, 2019
38 posts
4.2 Years
I made a script with the help of some asm made by FBI, he had a custom wild battle asm that helped me create a very cool and desirable event where I give away a pokemon and in return I would get a perfect iv pokemon right back. I made this for FIRE RED obviously and here is the script I made and I need some help with one thing for perfection's sake.

Spoiler:


//this script will test the release imperfect/fight perfect pokemon script

#dyn 0x752000

#org @main
lock
faceplayer
msgbox @msg-ask
callstd MSG_YESNO
compare LASTRESULT NO
if == jump @end
msgbox @whichpoke-msg
callstd MSG_NORMAL
fadescreen FADEOUT_BLACK
special 0x9f // store a pokemon from a selection screen
waitspecial
compare 0x8004 0x6 //if player presses B, it cancels selection screen
if >= jump @canceled
special2 0x8005 0xBA // takes pk's id no. AND stores it in 0x8005
compare 0x8005 0x95 // if player chose a dragonite, it continues
if == jump @choseright
jump @end2 //if player didn't choose a dragonite, it ends

#org @choseright
msgbox @msg-take
callstd MSG_NOCLOSE
checksound
cry 0x8005 0x0
msgbox @msg-ok
callstd MSG_NORMAL
waitcry
copyvar 0x8004 0x8005
special 0xbb // removes the selected pkmn from party
call @fightpokemon
release
end

#org @canceled
msgbox @msg-cancel
callstd MSG_NOCLOSE
release
end

#org @end
msgbox @msg-saidno
callstd MSG_NOCLOSE
release
end

#org @end2
msgbox @not-poke
callstd MSG_NOCLOSE
release
end

#org @fightpokemon
setflag 0x807
special BATTLE_PIXELLATE
setvar 0x40FF 0x1
call @shinyornot
setvar 0x8000 0x93 // dratini
setvar 0x8001 0x5 // level 5
setvar 0x8002 0x0 //item
setvar 0x8003 0x1 // first attack (1 - pound)
setvar 0x8004 0x0 // second attack
setvar 0x8005 0x0 // third attack
setvar 0x8006 0x0 // fourth attack
setvar 0x8007 0x1f //ivs
setvar 0x8008 0x1f //
setvar 0x8009 0x1f
setvar 0x800a 0x1f
setvar 0x800b 0x1f
setvar 0x800c 0x1f
setvar 0x800d 0x1f //ivs
callasm 0x8780201
waitspecial
clearflag 0x807
fadescreen FADEOUT_BLACK
//disappear 0x //person no.
//setflag 0x //flag of person id
waitbutton
fadescreen FADEIN_BLACK
setvar 0x8003 0x0 // needs to be set back to 0 or else shinies appear after giveaway(thanks to HACKMEW's shinyzer)
setvar 0x40FF 0x0
return

#org @shinyornot
random 2
compare LASTRESULT 1
if == call @shiny
compare LASTRESULT 0
if == call @notshiny
return

#org @shiny
applymovement PLAYER @p
pauseevent 0x0
setvar 0x800f 0x1
return

#org @notshiny
setvar 0x800f 0x0
return

// strings
#org @not-poke
= That's not a Dragonite!\nCome again!

#org @msg-cancel
= Ok, come again!

#org @msg-saidno
= Come back with a Dragonite!

#org @msg-ok
= OK, I'm done!

#org @msg-take
= OK, I got your \v\h02!

#org @msg-ask
= It needs a Dragonite!\nWant to give Dragonite away?

#org @whichpoke-msg
= Choose a Dragonite!

#org @p
m say_:) end



Now, what I need help with is that I used special 0xbb. It is supposed to store the pokemon I selected into daycare, how I do I delete the daycare stored pokemon so there is no choice of getting it back, the whole point I made this was to get rid of the imperfect pokemon to fight a perfect version of it to re-raise. Thanks guys!

Overlord Kaktus

Made in Guatemala

Male
Guatemala City
Seen 1 Day Ago
Posted 1 Day Ago
310 posts
5.8 Years
Update the AI Priority move effects table [FR]
If you open a trainer editor and you edit aany trainer, you'll notice there's an option for "Trainer AI". By default, most of trainers are set in 0, and important trainers like Gym Leaders have this set to 7. There's a good explanation about how to setup the trainer AI in this post made by Samu from Whack a Hack forums (In spanish). Well, the point of this post is not that research.

If you set the trainer AI to 7, any trainer with that AI will start the battle giving priority to some moves that set the battle, like poisoning your Pokémon, increasing their speed, attack stats, etc. There is a table of move effects located at 0x81DBAA7 with a set of 0x37 move effects that have priority over other move effects during the beggining of the battle. The table has the following entries.

        .byte EFFECT_ATTACK_UP
	.byte EFFECT_DEFENSE_UP
	.byte EFFECT_SPEED_UP
	.byte EFFECT_SPECIAL_ATTACK_UP
	.byte EFFECT_SPECIAL_DEFENSE_UP
	.byte EFFECT_ACCURACY_UP
	.byte EFFECT_EVASION_UP
	.byte EFFECT_ATTACK_DOWN
	.byte EFFECT_DEFENSE_DOWN
	.byte EFFECT_SPEED_DOWN
	.byte EFFECT_SPECIAL_ATTACK_DOWN
	.byte EFFECT_SPECIAL_DEFENSE_DOWN
	.byte EFFECT_ACCURACY_DOWN
	.byte EFFECT_EVASION_DOWN
	.byte EFFECT_CONVERSION
	.byte EFFECT_LIGHT_SCREEN
	.byte EFFECT_SPECIAL_DEFENSE_UP_2
	.byte EFFECT_FOCUS_ENERGY
	.byte EFFECT_CONFUSE
	.byte EFFECT_ATTACK_UP_2
	.byte EFFECT_DEFENSE_UP_2
	.byte EFFECT_SPEED_UP_2
	.byte EFFECT_SPECIAL_ATTACK_UP_2
	.byte EFFECT_SPECIAL_DEFENSE_UP_2
	.byte EFFECT_ACCURACY_UP_2
	.byte EFFECT_EVASION_UP_2
	.byte EFFECT_ATTACK_DOWN_2
	.byte EFFECT_DEFENSE_DOWN_2
	.byte EFFECT_SPEED_DOWN_2
	.byte EFFECT_SPECIAL_ATTACK_DOWN_2
	.byte EFFECT_SPECIAL_DEFENSE_DOWN_2
	.byte EFFECT_ACCURACY_DOWN_2
	.byte EFFECT_EVASION_DOWN_2
	.byte EFFECT_REFLECT
	.byte EFFECT_POISON
	.byte EFFECT_PARALYZE
	.byte EFFECT_SUBSTITUTE
	.byte EFFECT_LEECH_SEED
	.byte EFFECT_MINIMIZE
	.byte EFFECT_CURSE
	.byte EFFECT_SWAGGER
	.byte EFFECT_CAMOUFLAGE
	.byte EFFECT_YAWN
	.byte EFFECT_DEFENSE_CURL
	.byte EFFECT_TORMENT
	.byte EFFECT_FLATTER
	.byte EFFECT_WILL_O_WISP
	.byte EFFECT_INGRAIN
	.byte EFFECT_IMPRISON
	.byte EFFECT_TEETER_DANCE
	.byte EFFECT_TICKLE
	.byte EFFECT_COSMIC_POWER
	.byte EFFECT_BULK_UP
	.byte EFFECT_CALM_MIND
	.byte EFFECT_CAMOUFLAGE
The pointer of this table is located at 0x81DBA96 so you can repoint the table and add new entries to the table so trainers with a high Ai might use moves on this table firstly.
I'm just a normal romhacker c:

El Diabeetus

Amateur Voice Actor / ROM Editor ('Hacker')

Age 26
Seen 4 Weeks Ago
Posted August 14th, 2019
1,069 posts
13.4 Years
I combined my work with the one from Doesnt. As a result, there are less bytes to write into freespace.
So, here's what to do to give exp points when you catch a pokemon:
1-The bytes to put into freespace: 2E E0 3F 02 02 00 2E 0C 3C 02 02 00 2E 0D 3C 02 02 00 23 00 F1 63 9A 1D 08 28 58 9A 1D 08

2-The bytes to replace at 1D9A53: 41 XX XX XX 08 (XX = pointer to the code above).

3-Just like Doesnt wrote earlier, replace the bytes at 15A68 with A1 5A 01 08.

It should work without problems, as I tested it before posting.

Thanks to Doesnt for telling me how to fix a music issue.
Is there a way to get around Rattata appearing as the captured Pokémon if you have an extended Dex?
Hacks I'm currently working on (at a super slow pace):

Chinpokomon Big/Small (would leave the titles, but apparently exceeded sig limit)

Check my Japanese inspired Logo edits for Gens 1-7!:
http://www.pokecommunity.com/showpost.php?p=9137003

colonelsalt

Guaranteed to raise the smile

Age 22
Male
London
Seen 6 Hours Ago
Posted 4 Weeks Ago
94 posts
7.1 Years
[FR] Suppress Pokédex screen on new Pokémon capture
To prevent the Pokédex screen/animation from showing after catching a new Pokémon, nop the 22 bytes at 0x106B7A (that is, up to and including 0x106B8F). This will jump straight to the nickname prompt after a new Pokémon is caught (but will still show the "Pokémon X was added to the Pokédex" text if left unedited).
Seen 33 Minutes Ago
Posted October 31st, 2019
15 posts
2.5 Years
Is there a way to get around Rattata appearing as the captured Pokémon if you have an extended Dex?
To prevent Rattata from appearing in the Pokedex and appearing the new captured Pokémon, you must expand the Habitats Table using a Hexadecimal editor and add each new Pokémon in the Habitats ... You can use PGE to add each new Pokémon to the habitats.

To find out where the Habitats table is located, and to learn more about it, go to the Froosty The_learner post.
FIRE RED habitat editing: https://www.pokecommunity.com/showthread.php?t=379667
Seen 1 Day Ago
Posted 2 Weeks Ago
20 posts
2 Years
Making the EVs more "RBY/GSC-like" on FireRed

RBY and GSC are known for supporting "full EV spread", as the 510 EV limit didn't existed at the time. Bringing back the old Stat Exp system would be a very hard task, but I found a way to simulate the full EVs from past gens by limitting the max EV to 63 and reducing the EV divider from 4 to 1 (of course, removing the 510 EV limit would be a better solution, but I haven't found a way to do that with binary hacking).

This solution works on FireRed.

Step 1) Limit the EV cap to 63

From Touched's tutorial:
Address 0x0439FC = 0x3F (63)
Address 0x043A02 = 0x3F (63)

Step 2) Change EV divider to 1

I owe this one to Mr.Pkmn posting the hex addresses to do that. In that case, he shows how to change the EV divider from 4 to 2.

To make it 1, I have made some tests to find a value that A) stats would be correctly divided by 1 and B) would not screw up the stats (this one is dedicated to the HP EV divider).

The values I found are completely empirical, I have no idea of why they have worked and I haven't found any glitches until now (I have not tested link battles on my hack yet).

Here are the changes:

Address 0x03E582 = 0x02 (HP)
Address 0x03E5CE = 0x0F (ATK)
Address 0x03E614 = 0x0F (DEF)
Address 0x03E65A = 0x0F (SPD)
Address 0x03E6A0 = 0x0F (SAT)
Address 0x03E6E6 = 0x0F (SDE)


Credits:
- Touched
- Mr.Pkmn
________________

KNOWN PROBLEMS:

About that 63 limit... well, a Pokémon won't get past it by gaining EV by battle. However, Vitamins (HP Up, Protein, etc.) will completely ignore that, so your HP can reach 100 EV with HP Up (and the same for other stats).
For now, the best solution I have is to remove the access to every vitamin from the game with AdvanceMap, so you'll get EVs only by battle. I really don't know how to change the max EV you can get with vitamins (default = 100).
Advertiser Content