The Romhacking Thread

Just tonight I was informed that online rescues for the PMD WiiWare translation are actually beginning to work now. When the patches first launched in 2020, the unofficial server work needed to make this happen hadn’t been done yet, but now it’s in a workable state, and with that was Specialagentape asking for my RE services yet again, since this breakthrough revealed yet another instance of the vanilla team name limit being untouched–only 5 of 8 characters get shown in A-OK Mail.

I ended up having to derust myself with Dolphin’s debugger since it’s been so long since I last used it. While I don’t have the Wi-Fi stuff set up to actually trigger the A-OK mail thing and breakpoint the applicable code, I ended up doing some hex string searching, and with the aid of a line number in the game’s text string collection, found a potential length check for this situation, so we’ll see if that ends up being the solution.

But enough text that only barely makes sense to me, here’s a screenshot fresh from the battle station.

1 Like

Today’s task was to make as many non-buyable items possible buyable. I focused on evolution items and things that require bullshit to get(Think items that are only found with a low percent chance on pokemon you catch, or trade from gen 1).

Now, almost every held non-consumable item is now buyable with the exceptions of the Smoke Ball(Repels are good enough), the Cleanse Tag(Again, Repels), the EXP Share(Because it seems to be a key item) and the Everstone. I also made Elixers and Max Elixers buyable at the Indigo Plateau. And PP Ups available at the vitamin person in Goldenrod. They cost 800.

Next task? I figured out how to change evolution items. I made the King’s Rock and the Metal Coat evolve the Pokemon tied to it like evolution stones do.

The Dragon Scale and Up-Grade evolutions were changed to just evolve based on level, because the pokemon that Seadra and Porygon evolve into are, more or less, just straight upgrades instead of being a massive change like Steelix, Politoed, Slowking and Scizor are. Porygon 2 losing Sharpen was bullshit so I added it back in.

I’ve also made all evolution items buyable. In general, I am placing most evolution items early because most evolution items change pokemon so drastically it’s not really comparable to most level up evolutions.

I’ve continued the Pokemon buffing. For example, a few days ago I buffed Vileplume and Bellossom. They didn’t need it, really, but I wanted to differentiate between them aside from typing(For those that don’t play Pokemon, Vileplume and Bellossom are two evolution branches from Gloom. Vileplume is a Grass/Poison Pokemon, and Bellossom is just Grass type). So, I made Vileplume more offensive and Bellossom more defensive.

Finally, using a tutorial the disassembly provided, I’ve changed the gender determining code so it no longer forces girl Pokemon to be automatically weaker than boy Pokemon.

To get into how this works, I gotta explain one of the other things that determines a Pokemon’s stats.

As I mention before, there is Stat Experience. But, there’s also Determinate Values. Each stat as a DV of anywhere from 0 to 15. In Generation 2 alone, gender for Pokemon that have multiple genders(Some are genderless. Others are deliberately locked to either girl or boy) is determined by a few different things, but one of those things is your DV spread. Girls have lower DVs, especially in the Attack stat.

This is no longer the case.

3 Likes

For the freaks like me! An early translation patch has finally surfaced for PRINCESS CROWN. This is an early build and still needs some work done but the most real it’s ever been. I’m so busy but chomping at the bit to give it a spin.

3 Likes

About that…

tl;dr beta patch leak it’s not even completable and has a ton of script errors. It’s based off of old as hell work that has since been redone.

Yeah…

I just came here to update. Absolutely took the wind out of my sails.

I’ve run into a roadblock that requires external help. Until I get that help(And who knows when that’ll be), I’m doing other stuff.

I changed it so the Goldenrod Move Tutor is A. Cheaper. B. Able to appear on every day of the week instead of just two. C. Able to learn multiple moves a day. You gotta enter and exit the Game Corner he’s next to(Technically, any map change will do but that’s the quickest one by far), but that’s a minor concern.

He now only costs 400 coins per move. I also made coins much cheaper to buy a while back in preparation for this.

SO ABOUT THAT ROADBLOCK

Yeah, it was the gender DV formula change. That one change was preventing me from changing the starters out for different Pokemon. For now, I have changed it back to the stock misogynistic formula to make testing easier. I have barely worked on my hack the last few weeks because of it.

With that done, I am getting back to rebalancing. I had 35 or so Pokemon left to work on their first passes, let alone tweaking and unifying move pools for the rest as the idea of unifying move pools across an entire evolution line(Barring exceptions like Steelix as well as other cases where a type and move set changes entirely) came relatively recently.

2 Likes

Recently I began using the research I’d gained on Kirby’s Dream Land 2 from doing the DX hack to create a more complete symbol map, which could be then applied to a disassembly, editing tools, etc. A good chunk of this has been through parsing lookup tables to audiovisual assets to get them listed. One such group of assets has been the SFX data. Since the game has a sound test, I figured I just go there and see what CPU register de contains at a certain breakpoint in the SFX play routine, for every SFX entry. Some labels I did for these are pretty accurate to what they are in-game, others are just “okay I give up” guesses.

1E:4400 SFX_NothingA
1E:449E SFX_MikeScreech
1E:44A5 SFX_Inhale
1E:44AC SFX_InhaleEnd
1E:44B0 SFX_Swallow
1E:44B4 SFX_Jump
1E:44B8 SFX_Land
1E:44BC SFX_Damage
1E:44C3 SFX_Door
1E:44CA SFX_Sparkle
1E:44CE SFX_DarkMatterOrb
1E:44D2 SFX_DarkMatterCharge
1E:44D9 SFX_DarkMatterFire
1E:44DD SFX_DarkMatterLunge
1E:44E4 SFX_Move
1E:44E8 SFX_NoisePop
1E:44EC SFX_PulseBump
1E:44F0 SFX_StarCollect
1E:44F4 SFX_Explosion
1E:44F8 SFX_HP
1E:44FC SFX_WarpstarOut
1E:4500 SFX_WarpstarIn
1E:4504 SFX_NoiseGrate
1E:4508 SFX_Sword
1E:450F SFX_Bounce
1E:4516 SFX_DededeInhale
1E:451D SFX_Hit
1E:4521 SFX_Puff
1E:4525 SFX_Fire
1E:4529 SFX_ShortBoom
1E:452D SFX_Spark
1E:4531 SFX_Flame
1E:4535 SFX_Water
1E:4539 SFX_HPOut
1E:453D SFX_1Up
1E:4544 SFX_ShortNoise
1E:454B SFX_NoiseSqueak
1E:454F SFX_SmallExplosion
1E:4553 SFX_BagPoke
1E:4557 SFX_Blast
1E:4564 SFX_AbilityLose
1E:4571 SFX_AbilityEject
1E:457B SFX_AbilityGain
1E:4588 SFX_Pause
1E:4592 SFX_NoiseCrunch
1E:4596 SFX_Select
1E:459A SFX_Confirm
1E:459E SFX_ShortExplosion
1E:45A5 SFX_BossDown
1E:45B2 SFX_Fly
1E:45B6 SFX_NoiseDing
1E:45BD SFX_FireMax
1E:45C4 SFX_Chik
1E:45C8 SFX_SoftBlow
1E:45CC SFX_KrackoFire
1E:45D3 SFX_Burning
1E:45D7 SFX_Gust
1E:45DB SFX_KrackoMini
1E:45DF SFX_NoiseAttack
1E:45E6 SFX_Fwoosh
1E:45ED SFX_RainbowSwordRaise
1E:45F1 SFX_HPLow
1E:45F5 SFX_NoiseDecay
1E:45F9 SFX_BurningExtra
1E:45FD SFX_ShortGust
1E:4603 SFX_EfreetiBump
1E:460B SFX_StarBounce
1E:4612 SFX_DarkMatterLaser
1E:4616 SFX_ShortSawish
1E:4620 SFX_Ice
1E:4627 SFX_SmallImpact
1E:462B SFX_PulseNoiseHit
1E:4632 SFX_IntroScroll
1E:4636 SFX_Swim
1E:463A SFX_Freeze
1E:4641 SFX_WavyNoiseBlow
1E:4648 SFX_WavyFire
1E:464C SFX_UppyNoise
1E:4653 SFX_ShortRaspyNoise
1E:4657 SFX_PulseNoiseShooty
1E:465E SFX_MrShineBrightDualImpact
1E:4668 SFX_DarkMatterHit
1E:466F SFX_GustExtra
1E:4673 SFX_DededeSnore
1E:467A SFX_BlipNoise
1E:4681 SFX_Scrunch
1E:4685 SFX_Boodop
1E:4689 SFX_WorldMapSelect
1E:468D SFX_BlippedNoise
1E:4691 SFX_NewStage
1E:4698 SFX_NothingB
1E:46A5 SFX_NothingC
1E:46B2 SFX_DropCollect
1E:46B9 SFX_EnemyShoot
1E:46C0 SFX_Gooey
1E:46CA SFX_UnusedBGM
1E:46D7 SFX_Ding
1E:46DB SFX_CrackTweet
1E:46DF SFX_FalseEnd
4 Likes

More fun with Dream Land 2. This time, through inspecting regions of data marked within Mesen, I’ve managed to find graphics for two unused enemies! While I don’t know if they have data left over to spawn them ingame (nor do I know much about manipulating the level object system yet), I was able to quickly change a Waddle Dee in RAM to use the graphics and metasprite data for these unused guys.
Dream Land 2 screenshot showing an unused enemy that looks like Efreeti riding a tank
Graphics at 0C:411D and metasprites at 0C:6B91. Looks like a smaller version of Efreeti, the first midboss, riding a tank kinda like you do in Blaster Master. The graphics data for this guy suggests the tank could fire bullets.
Graphics data of the unused Tank Efreeti with bullets

Dream Land 2 screenshot of an unused enemy that looks like Efreeti with hands
Another Dream Land 2 screenshot of an unused enemy that looks like Efreeti with hands
Graphics at 0C:4E82 and metasprites at 0C:71C9. It’s yet another smaller version of Efreeti, except with no vehicle this time, as well as a pair of blob hands.
Graphics from Dream Land 2 of the unused small Efreeti with blob hands

Just managed to assemble spritesheets of these guys through the power of Mesen and LibreSprite.
Spritesheet of the unused "tank Efreeti" in KDL2
Spritesheet of the unused "small Efreeti" in KDL2

3 Likes