Jump to content

Recommended Posts

Posted (edited)

The world's first Pokemon xD: Gale of Darkness hack!

5924ad98b61b7_ScreenShot2017-03-16at02_52_43.png.487e427b5e0d1c5ca148563b27b16e20.png

Main Features

- Physical/Special Split

- Gen VI type matchup chart including fairy type

- New set of shadow pokemon and other obtainable pokemon

- Moves and abilities from later generations

- More challenging opponents

- Bonsly is finally playable!

Future Features

 

-Redone battle CDs

 

They will come in a later update but may not make sense for now

-Redone Battle bingo

 

Again, they are currently broken but will be fixed later

-New music

 

Nobody knows how to do this yet. I may have found a lead but it will take a lot of reverse engineering.

I've found a program that can convert the xD music to other formats. Will attempt to reverse the process

in a few months time when all other work is done.

-New Pokemon

 

Nobody understand the model and animation formats yet so may be some years away

Discussion

 

A big issue I found with xD was that some of the shadow pokemon that are obtained later are obtained too late to be used in your team.

I have put some thought into the availability of pokemon but it will be impossible to please everybody as our individual preferences will differ.

The purification rate of the shadow pokemon will have a shallower curve so the ones obtained later shouldn't be as hard to integrate into your team. Coupled with the steeper level curve it will be easy to add them to your team.

Also, colosseum and xD had shadow pokemon in them which were hard to obtain in the gen III games and were nice for completing the pokedex.

However, most of them were really useless pokemon. I aimed to add all the most popular and powerful pokemon. I will upload the full list of obtainable pokemon shortly.

Sorry if your favourite pokemon didn't make it but I'll be releasing hack tools in the coming months which you can use to tweak the hack to your liking :)

Download Page

The thread where the download links and updates will be.

Release Thread (with download links)

 

Edited by StarsMmd
  • Like 1
Posted
I'd love to see a release of this without any of the base stat modifications or retypings/new abilities.

I know it's always the case that different people want different things. I'll explain the logic behind most of the changes.

My aim with the changes was to make the pokemon more similar in play style to their gen 6 counterparts. A pokemon like sableye, for example, wasn't very useful until prankster came along. I just wanted as many pokemon as possible to be viable. All the stat changes are changes that occured between canon gens 3-6. The type changes mainly increased the number of dragon and fairy type pokemon which were very few in gen 3.

From a creative point of view, I'd like the other trainers to have varied teams while still being strong. In the original xD lovrina uses pokemon like delcatty and farfetch'd and snattle uses pokemon like solrock and castform. Having more viable pokemon means I can make more exciting battles.

I will be socumenting all the changes and they are for the most part relatively intuitive and I've put s lot of consideration into them. I'm sure if you played it, you wouldn't mind it at all.

All that being said, I do understand that it can all get a bit confusing so once I release the hack I'll work on a quick modification where the stats are left unchanged.

  • 3 weeks later...
Posted

I'm really looking forward to this and I'm ok with most of the Pokémon from gens 4-6 not being available, as Orre imports most of its Pokémon anyway.

BTW, can you add more Shadow Pokémon, plus Pokémon available through e-Cards only?

Posted
I'm really looking forward to this and I'm ok with most of the Pokémon from gens 4-6 not being available, as Orre imports most of its Pokémon anyway.

BTW, can you add more Shadow Pokémon, plus Pokémon available through e-Cards only?

I know how to add more shadow Pokemon but I'm not sure how the game will handle it and it will take some time to test so I'm not adding more for now. There is already a large number of obtainable Pokemon and snagging shadow pokemon can get very tedious anyway. So the possibility is there for the future but it could end up being problematic.

Posted
I know how to add more shadow Pokemon but I'm not sure how the game will handle it and it will take some time to test so I'm not adding more for now. There is already a large number of obtainable Pokemon and snagging shadow pokemon can get very tedious anyway. So the possibility is there for the future but it could end up being problematic.

Then what about adding more Pokémon to the PokéSpots and replacing other Shadow Pokémon?

Also, you could maybe switch around the obtainable Shadow Pokémon, like getting Teddiursa later and Dodrio sooner.

  • 4 weeks later...
Posted

There isn't a playable version yet. I have a few more changes to make so will need a little more time. I just started uni again a few weeks ago so progress has slowed a little bit but I will try and finish it as soon as possible.

Posted

Nice job ! By the way, how did you implement the "2 starter Pokémon"?

Speaking of graphical glitches, there shouldn't be any as of Dolphin 5.0-rc34.

I've also figured how xD scripts work (even though a lot of standard function remain unknown to me); I'll try to release a proof-of-concept disassembler asap.

Posted

I found an old AR code that uses the starters from the pokemon xD demo. They're still programmed into the game so you just change a few bytes in Start.dol and you can use them and you can change a few more bytes to change the actual pokemon themselves. The demo had a jolteon and vaporeon as starters btw.

It's really cool that you've figured out the scripts. I figured out how to start testing them but never actually had time to sit down and so the research. Thanks a lot for the work. Can't wait to see the results.

Edit: refer to this file -Code/blob/master/Objects/XGDolPatcher.swift'>https://github.com/PekanMmd/Pokemon-xD-Code/blob/master/Objects/XGDolPatcher.swift

it's in swift but should be easy enough to fogure out. There's a function called enableBetaStarters

Posted

Nice ;)

Btw, is your patch based on the NTSC or the PAL version of the game ?

About the beta starters, are they the male-only shiny locked ? I think about the ones received through the implementation of the script built-in fuction Party::receieveGiftOrEventPkm(id) (here id could be equal to 1 or 2). Look at 801C9FCC for PAL, otherwise look for the following sequence :

94 21 FF 70 7C 08 02 A6 90 01 00 94 BF 61 00 7C

7C 7B 1B 78 38 60 00 00 38 80 00 02 48 00 6A A5

Posted
Nice ;)

Btw, is your patch based on the NTSC or the PAL version of the game ?

About the beta starters, are they the male-only shiny locked ? I think about the ones received through the implementation of the script built-in fuction Party::receieveGiftOrEventPkm(id) (here id could be equal to 1 or 2). Look at 801C9FCC for PAL, otherwise look for the following sequence :

94 21 FF 70 7C 08 02 A6 90 01 00 94 BF 61 00 7C

7C 7B 1B 78 38 60 00 00 38 80 00 02 48 00 6A A5

it's based on ntsc the us one. I'm not sure if they're shiny locked because I haven't tested it. There's probably a value for their gender but I haven't looked for it. I'll look for the original AR code and see if it has anything about the gender.

Edit: They do indeed have a value for the gender. in the pal version its at 0x153FCC for vaporeon and 0x1540F4 for jolteon. These are in RAM btw. I'd recommend doing a ram dump and then looking for the data around those values in start.dol.

Replace the 4 bytes at those offsets with 0x3880xxxx, where xxxx is 0000 for male only, 0001 for female only and FFFF for random.

Posted

I have the following hard-coded function, not sure if it is called (after using your AR code):

ROM:80154060 # =============== S U B R O U T I N E =======================================

ROM:80154060

ROM:80154060

ROM:80154060 # int __fastcall recieveEventJolteon(void *partyData, __int8 unused)

ROM:80154060 recieveEventJolteon: # CODE XREF: scriptRecieveSpecialPkm+60p

ROM:80154060

ROM:80154060 .set var_D8, -0xD8

ROM:80154060 .set var_8, -8

ROM:80154060 .set var_4, -4

ROM:80154060 .set arg_4, 4

ROM:80154060

ROM:80154060 stwu r1, -0xE0(r1)

ROM:80154064 mflr r0

ROM:80154068 li r4, 2

ROM:8015406C li r5, 0

ROM:80154070 stw r0, 0xE0+arg_4(r1)

ROM:80154074 stw r31, 0xE0+var_4(r1)

ROM:80154078 stw r30, 0xE0+var_8(r1)

ROM:8015407C mr r30, r3

ROM:80154080 bl getPlayerDataField

ROM:80154084 mr r0, r3

ROM:80154088 li r3, 0 # baseAddress

ROM:8015408C mr r31, r0

ROM:80154090 li r4, 1 # what

ROM:80154094 bl getVersionInfo

ROM:80154098 mr r6, r3 # versionInfo

ROM:8015409C addi r3, r1, 0xE0+var_D8 # pkmData

ROM:801540A0 li r4, 0x87 # species

ROM:801540A4 li r5, 0x1A # level

ROM:801540A8 bl initStdPkmCreation

ROM:801540AC addi r3, r1, 0xE0+var_D8

ROM:801540B0 li r4, 0

ROM:801540B4 li r5, 0x62

ROM:801540B8 bl sub_80142A40

ROM:801540BC addi r3, r1, 0xE0+var_D8

ROM:801540C0 li r4, 1

ROM:801540C4 li r5, 0x1C

ROM:801540C8 bl sub_80142A40

ROM:801540CC addi r3, r1, 0xE0+var_D8

ROM:801540D0 li r4, 2

ROM:801540D4 li r5, 0x10E

ROM:801540D8 bl sub_80142A40

ROM:801540DC addi r3, r1, 0xE0+var_D8

ROM:801540E0 li r4, 3

ROM:801540E4 li r5, 0x54

ROM:801540E8 bl sub_80142A40

ROM:801540EC mr r7, r31 # SIDTID

ROM:801540F0 addi r3, r1, 0xE0+var_D8 # pkmData

ROM:801540F4 li r4, 0 # wantedGender

ROM:801540F8 li r5, -1 # wantedNature

ROM:801540FC li r6, 0 # wantedShininess

ROM:80154100 bl generatePIDWithConstraints # (Male, any nature, never shiny)

ROM:80154104 mr r0, r3

ROM:80154108 addi r3, r1, 0xE0+var_D8 # pkmData

ROM:8015410C mr r7, r0 # value

ROM:80154110 li r4, 0 # unk

ROM:80154114 li r5, 0x6F # action

ROM:80154118 li r6, 0 # optVal

ROM:8015411C bl setPkmAttribute

ROM:80154120 addi r3, r1, 0xE0+var_D8 # pkmData

ROM:80154124 li r4, 0 # unk

ROM:80154128 li r5, 0x79 # action

ROM:8015412C li r6, 0 # optVal

ROM:80154130 li r7, 0x4A6F # value

ROM:80154134 bl setPkmAttribute

ROM:80154138 addi r3, r1, 0xE0+var_D8 # pkmData

ROM:8015413C li r4, 0 # unk

ROM:80154140 li r5, 0x99 # action

ROM:80154144 li r6, 0 # optVal

ROM:80154148 li r7, 0xDC # value

ROM:8015414C bl setPkmAttribute

ROM:80154150 addi r3, r1, 0xE0+var_D8 # pkmData

ROM:80154154 bl updateAllPkmStats

ROM:80154158 mr r3, r30

ROM:8015415C addi r4, r1, 0xE0+var_D8

ROM:80154160 li r5, 0x259

ROM:80154164 li r6, 4

ROM:80154168 li r7, 0

ROM:8015416C bl sub_8014E820

ROM:80154170 lwz r0, 0xE0+arg_4(r1)

ROM:80154174 lwz r31, 0xE0+var_4(r1)

ROM:80154178 lwz r30, 0xE0+var_8(r1)

ROM:8015417C mtlr r0

ROM:80154180 addi r1, r1, 0xE0

ROM:80154184 blr

ROM:80154184 # End of function recieveEventJolteon

Posted
I have the following hard-coded function, not sure if it is called (after using your AR code):

ROM:80154060 # =============== S U B R O U T I N E =======================================

ROM:80154060

ROM:80154060

ROM:80154060 # int __fastcall recieveEventJolteon(void *partyData, __int8 unused)

ROM:80154060 recieveEventJolteon: # CODE XREF: scriptRecieveSpecialPkm+60p

ROM:80154060

ROM:80154060 .set var_D8, -0xD8

ROM:80154060 .set var_8, -8

ROM:80154060 .set var_4, -4

ROM:80154060 .set arg_4, 4

ROM:80154060

ROM:80154060 stwu r1, -0xE0(r1)

ROM:80154064 mflr r0

ROM:80154068 li r4, 2

ROM:8015406C li r5, 0

ROM:80154070 stw r0, 0xE0+arg_4(r1)

ROM:80154074 stw r31, 0xE0+var_4(r1)

ROM:80154078 stw r30, 0xE0+var_8(r1)

ROM:8015407C mr r30, r3

ROM:80154080 bl getPlayerDataField

ROM:80154084 mr r0, r3

ROM:80154088 li r3, 0 # baseAddress

ROM:8015408C mr r31, r0

ROM:80154090 li r4, 1 # what

ROM:80154094 bl getVersionInfo

ROM:80154098 mr r6, r3 # versionInfo

ROM:8015409C addi r3, r1, 0xE0+var_D8 # pkmData

ROM:801540A0 li r4, 0x87 # species

ROM:801540A4 li r5, 0x1A # level

ROM:801540A8 bl initStdPkmCreation

ROM:801540AC addi r3, r1, 0xE0+var_D8

ROM:801540B0 li r4, 0

ROM:801540B4 li r5, 0x62

ROM:801540B8 bl sub_80142A40

ROM:801540BC addi r3, r1, 0xE0+var_D8

ROM:801540C0 li r4, 1

ROM:801540C4 li r5, 0x1C

ROM:801540C8 bl sub_80142A40

ROM:801540CC addi r3, r1, 0xE0+var_D8

ROM:801540D0 li r4, 2

ROM:801540D4 li r5, 0x10E

ROM:801540D8 bl sub_80142A40

ROM:801540DC addi r3, r1, 0xE0+var_D8

ROM:801540E0 li r4, 3

ROM:801540E4 li r5, 0x54

ROM:801540E8 bl sub_80142A40

ROM:801540EC mr r7, r31 # SIDTID

ROM:801540F0 addi r3, r1, 0xE0+var_D8 # pkmData

ROM:801540F4 li r4, 0 # wantedGender

ROM:801540F8 li r5, -1 # wantedNature

ROM:801540FC li r6, 0 # wantedShininess

ROM:80154100 bl generatePIDWithConstraints # (Male, any nature, never shiny)

ROM:80154104 mr r0, r3

ROM:80154108 addi r3, r1, 0xE0+var_D8 # pkmData

ROM:8015410C mr r7, r0 # value

ROM:80154110 li r4, 0 # unk

ROM:80154114 li r5, 0x6F # action

ROM:80154118 li r6, 0 # optVal

ROM:8015411C bl setPkmAttribute

ROM:80154120 addi r3, r1, 0xE0+var_D8 # pkmData

ROM:80154124 li r4, 0 # unk

ROM:80154128 li r5, 0x79 # action

ROM:8015412C li r6, 0 # optVal

ROM:80154130 li r7, 0x4A6F # value

ROM:80154134 bl setPkmAttribute

ROM:80154138 addi r3, r1, 0xE0+var_D8 # pkmData

ROM:8015413C li r4, 0 # unk

ROM:80154140 li r5, 0x99 # action

ROM:80154144 li r6, 0 # optVal

ROM:80154148 li r7, 0xDC # value

ROM:8015414C bl setPkmAttribute

ROM:80154150 addi r3, r1, 0xE0+var_D8 # pkmData

ROM:80154154 bl updateAllPkmStats

ROM:80154158 mr r3, r30

ROM:8015415C addi r4, r1, 0xE0+var_D8

ROM:80154160 li r5, 0x259

ROM:80154164 li r6, 4

ROM:80154168 li r7, 0

ROM:8015416C bl sub_8014E820

ROM:80154170 lwz r0, 0xE0+arg_4(r1)

ROM:80154174 lwz r31, 0xE0+var_4(r1)

ROM:80154178 lwz r30, 0xE0+var_8(r1)

ROM:8015417C mtlr r0

ROM:80154180 addi r1, r1, 0xE0

ROM:80154184 blr

ROM:80154184 # End of function recieveEventJolteon

That looks like the right asm code. My code is for the us version. You'll need the PAL version I'm presuming.

This is the page where you can get lots of useful ar codes. These are the unencrypted ones which are better because you can easily tweak them. http://www.gc-forever.com/forums/viewtopic.php?f=38&t=2149

Search for the code called "Enable Beta Starter Pokemon"

  • 4 weeks later...
Posted
hi starsmmd hows uni treating you ?, have you made much progress on pokemon XG ?

Uni's good thanks. Haven't had as much free time as I'd like though. I made a nice GUI for my hacking which has been really useful but I recently switched over to doing everything programmatically. It required a little bit of set up but it should speed things up considerably.

Posted

no probs, i have been searching for other Pokemon Colosseum and xD game cube hacks as i completed all of your randomized Colosseum roms but haven't really had any luck

Posted
no probs, i have been searching for other Pokemon Colosseum and xD game cube hacks as i completed all of your randomized Colosseum roms but haven't really had any luck

Afaik, I was the first person to successfully reverse engineer the game files to the point that hacks could be possible. I doubt you'll find any thing else right now. However, since I released my research online a couple of people have contacted me saying they were going to work on some hacks of their own. Since I've been working on the gamecube games for a while now, I think XG will be the first major hack of xD to be released but maybe someone might release something a bit less extensive before then. We'll just have to wait and see.

  • 2 weeks later...
Posted

i would love to try to make my own xD randomizer but it looks way to complicated, i have had a little experience changing Pokemon and trainers on the gba roms but thats it.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...