# MeroMero

Member

70

2. ## tool [Gen V] Edit the banlist of Battle Subway and PWT

[video=youtube;7CCKERTzGJI] This is the format of the banlist: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C0 00 00 00 00 00 00 00 00 00 00 00 00 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 C0 07 00 00 00 00 00 00 00 00 00 00 00 98 7E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D8 03 Notes: The banlist is 0-based and should be read in binary. Bit=0 means its corresponding Pokémon is allowed. Bit=1 means its corresponding Pokémon is banned. Formula to find whether a Pokémon is banned or not is P=(8×B)+b with: P (Pokémon) being a number between 0 and 649 included; B being the Byte number, counting from 0; b being the bit number from a given Byte, from 0 to 7 included read from right to left. The banlist is located at narc a/1/0/5 in BW, and narc a/1/0/6 in B2W2. Even though the banlist is the same between the facilities enforcing it, the banlist itself is technically not unique as you'll see below: Battle Subway and Battle Institute (All versions): Single Battle and Wi-Fi: file 20 Double Battle: file 21 Multi Battle: file 22 PWT (Black 2 and White 2 only): Single Battle: file 33 Double Battle: file 34 Triple Battle: file 35 Rotation Battle: file 36
3. ## tutorial [Tutorial][HGSS] Change the shiny probability

Main effect: The probability is PP/65536. PP is equal to 08 by default. You can now put the value 10 (16 chances in 65536), like in Gen VI. Decompress arm9.bin. Go to offset 0×70080* and change the value 08 into QQ. QQ can take any value from 00 (no shiny at all) to FF (roughly 1 in 257 chance). *Regions' differences: Language Shiny chance Japanese 0×6FAC0 Spanish HG 0×70078 Korean HG 0×7017C Korean SS 0×70174 Others 0×70080 Side-effect: Formula reminder: (Trainer ID ⊕ Secret ID) ⊕ (16 leftmost bits of PID ⊕ 16 rightmost bits of PID) = CID What I call the CID (stands for Color ID) must be a number between 0 and 7 included for its bearer to be shiny. For example let's say you decided to update the value from 0×08 to 0×10, what will happen you may ask? Any caught Pokémon who happens to have their CID between 8 and 15 included and who weren't shiny before the update will turn shiny!

6. ## resource [HGSS] Adding new text for new trainers

When you add new trainers to fight against, there's usually no text associated with them while fighting. The solution is found on narc a/0/5/7. The file itself, without the header, is 6868 bytes long. Each reference is 4 bytes long. 6868 / 4 = 1717 references. Each of these references points to its corresponding message on text file 728 from narc a/0/2/7. To add a new message on text file 728, use Spiky's DS Map Editor. Format is TT TT MM PP TT TT is the Trainer slot number (little endian, as always). MM is the condition for the text to display. PP is the padding (always 00). Conditions for the message to display (in hex): Single Battle: 00 Trainer text upon noticing you or if you talk to him/her (overworld) 01 Trainer text if you defeat him/her (fight) 02 Trainer text after you defeated him/her (overworld) 0F Trainer text if he sends in his/her last conscious Pokémon (fight) 10 Trainer text if his/her last conscious Pokémon is on critical health (fight) 14 Trainer text if you lose or draw (fight) Double Battle: 03 First trainer text upon noticing you or if you talk to him/her (overworld) 04 First trainer text if you defeat him/her (fight) 05 First trainer text after you defeated him/her (overworld) 06 First trainer text if you only have 1 conscious Pokémon before engaging the fight (overworld) 07 Second trainer text upon noticing you or if you talk to him/her (overworld) 08 Second trainer text if you defeat him/her (fight) 09 Second trainer text after you defeated him/her (overworld) 0A Second trainer text if you only have 1 conscious Pokémon before engaging the fight (overworld) I seem to run into some problems though when appointing new Trainers: _I only got condition 01 to work so far; _0F, 10 and 14 just don't trigger at all, so there must be something else still… To do: Test the rest.
7. ## Pokémon MindCrystal

Coming soon: the Odd Egg, hatching into 1 Pokémon out of 17 possible species, and with 50% (actually 49.9904%) chance of being shiny. Tested on a NDS: xrpl_0220211E_ov_01:NOPLDR R0, =0x21D15A4LDR R0, [R0]LDR R0, [R0, #4]LDR R0, [R0, #0x18]LDR R1, =0x1264LDRH R1, [R0, R1]LDR R0, =LocationSTRH R1, [R0]LDR R0, =0x14BCMP R1, R0 @ Check if Day Care is the current locationMOVEQ R1, #0 @ If it is then Egg ID location will be Day Care CoupleMOVNE R1, #0xD @ Else it will be Mr. PokémonMOV R0, #1BX LRxrpl_0220212C_ov_01:NOPLDR R0, =LocationLDRH R1, [R0]LDR R0, =0x14BCMP R1, R0 @ Check if Day Care is the current locationMOVNE R1, #0xAF @ If not, this is the Togepi Egg eventBNE .ReturnEggLDR R0, =PseudoStackSTR LR, [R0]LDR R0, =0x21D15C8 @ Else if it is, this is the Odd Egg eventLDR R0, [R0] @ Get the Dynamic Seed (rather than the Static Seed at 0x21D15CC)MOV R1, #0x11BL 0x20F2BA4 @ Unsigned divisionCMP R1, #0x10 @ Error handler in the normally-impossible case R1 is out of range...MOVHI R1, #0 @ ...which defaults to PichuMOV R1, R1, LSL #2 @ Multiply Seed remainder by 4LDR R0, =SeedRemainderSTRH R1, [R0] @ Store Seed remainderLDR R0, =EggLDRH R1, [R0, R1] @ The game selects one of the babies Pokémon (minus Togepi) according to the SeedLDR LR, =PseudoStackLDR LR, [LR].ReturnEgg:MOV R0, R5BX LRxrpl_02202158_ov_01:NOPLDR R0, =LocationLDRH R1, [R0]LDR R0, =0x14BCMP R1, R0 @ Check if Day Care is the current locationMOVNE R1, #0x50 @ If not, replace Extrasensory with Petal Dance for TogepiBNE .ReturnEggMoveLDR R0, =SeedRemainderLDRH R1, [R0] @ Else if it is, get the Seed remainder that was stored earlierADD R1, R1, #2LDR R0, =EggLDRH R1, [R0, R1] @ The game selects the extra Egg Move according to the chosen Pokémon.ReturnEggMove:ADD R0, SP, #0xCBX LRxrpl_02202130_ov_01:NOPMOV R2, #1LDR R3, =PseudoStackSTR R0, [R3]STR R1, [R3, #4]STR R2, [R3, #8]STR R4, [R3, #0xC]STR R5, [R3, #0x10]MOV R3, R4BX LRxrpl_02202138_ov_01:NOPSTMFD SP!, {R2-R3}LDR R2, =LocationLDRH R3, [R2]LDR R2, =0x14BCMP R3, R2 @ Check if Day Care is the current locationLDMFD SP!, {R2-R3}BNE .ReturnPID LDR R0, =PseudoStackSTR LR, [R0, #0x14]LDR R3, [R0, #0xC]LDR R2, [R0, #8]LDR R1, [R0, #4]LDR R0, [R0]LDR LR, =.ShinyPIDSTMFD SP!, {R0-R3}STMFD SP!, {R4-R6,LR}SUB SP, SP, #0x20MOV R6, R1MOV R5, R0MOV R0, R6MOV R1, #0x13MOV R4, R3LDR LR, =0x206FBE9BLX LRADD R1, SP, #0x10STRB R0, [R1]LDR R0, =PseudoStackSTR R4, [R0]STR R5, [R0, #4]STR R6, [R0, #8]STR R7, [R0, #0xC]LDR R4, [R0, #0x10]LDR R4, [R4] @ Get Odd Egg PIDLDR R6, [R3, #0x10] @ Get Trainer ID and Secret IDMOV R0, R6MOV R1, R4LDR LR, =0x2070069BLX LRCMP R0, #0BNE .ResultShinyMOV R5, #0LDR R7, =0xB15.LoopIfNotShiny:MOV R0, R4LDR LR, =0x201FD69BLX LRMOV R4, R0MOV R0, R6MOV R1, R4LDR LR, =0x2070069BLX LRCMP R0, #0BNE .ResultShinyADD R5, R5, #1CMP R5, R7BCC .LoopIfNotShiny.ResultShiny:MOV R2, #1STR R2, [sP]STR R4, [sP,#4]LDR R4, =PseudoStackLDR R7, [R4, #0xC]LDR R6, [R4, #8]LDR R5, [R4, #4]LDR R4, [R4]MOV R0, #0STR R0, [sP,#8]STR R0, [sP,#0xC]LDR LR, =0x206C8DBBLX LR.ShinyPID:LDR LR, =PseudoStackLDR LR, [LR, #0x14].ReturnPID:MOV R4, #0MOV R6, R4BX LRxrpl_0206FC02:NOPMOV R0, R4LDMFD SP!, {R3-R5, LR}BX LR.data.balign 2Location:.hword 0x0SeedRemainder:.hword 0x0.balign 4PseudoStack:.word 0x0.word 0x0.word 0x0.word 0x0.word 0x0.word 0x0Egg:.word 0x5000AC @ Pichu Petal Dance.word 0x5000AD @ Cleffa Petal Dance.word 0x5000AE @ Igglybuff Petal Dance.word 0x9200EC @ Tyrogue Dizzy Punch.word 0x5000EE @ Smoochum Petal Dance.word 0x9200EF @ Elekid Dizzy Punch.word 0x9200F0 @ Magby Dizzy Punch.word 0xFC012A @ Azurill Fake Out.word 0x1410168 @ Wynaut Tickle.word 0xE30196 @ Budew Encore.word 0x5001B1 @ Chingling Petal Dance.word 0xE301B6 @ Bonsly Encore.word 0x3201B7 @ Mime Jr. Disable.word 0xE301B8 @ Happiny Encore.word 0x9201BE @ Munchlax Dizzy Punch.word 0x9201BF @ Riolu Dizzy Punch.word 0xE301CA @ Mantyke Encore
8. ## research [Gen IV] Endure and damage-reducing Berries

If a Pokémon uses Endure, is supposed to take damage equal or superior to its current HP, and happens to consume a held damage-reducing Berry the same turn Endure is used, then: _the Enduring Pokémon won't be left with Math.floor(Expected damage / 2) HP , nor 1 HP if Expected damage >= 2 * current HP; _but instead will be left with Math.floor(Current HP / 2) + 1 HP, or 1 HP if Current HP <= 2. In other words this tells us that Endure, if successful, is checked before damage-reducing Berries, which is obviously a bad design. A similar problem happens with Counter, Mirror Coat and Metal Burst (possibly Bide as well) where the damage sent back is doubled from the damage that was to be taken BEFORE damage-reducing Berries are checked (showcased here).
9. ## Pokémon MindCrystal

I see, some unforeseen consequences of this function located in ImprovedTrainers.s: @Incorporate Shininess:xrpl_0206DF1A:NOPLDR R2, [sP, #0x108]LDRB R2, [R2, #-0x14]LDR R3, =ShinyByteLDRB R2, [R3, R2]LDR R2, [sP, R2]LDRB R2, [R2, #3]TST R2, #0x80EOREQ R1, R1, #0x80000000STR R1, [sP, #0x3C]ADD LR, LR, #0x22BX LR which is actually hooked on the function where the shiny lock for Trainer's Pokémon is done. Instruction LDR R2, [sP, #0x108] is supposed to return an address in R2, problem is that the Rattata and the Marill from the catching tutorial also use this function, and in this case R2=0x0, which is a big no-no in a NDS. As such I modified the function into this: @Incorporate Shininess:xrpl_0206DF1A:NOPLDR R2, [sP, #0x108]CMP R2, #0BEQ .ShinyCheckDoneLDRB R2, [R2, #-0x14]LDR R3, =ShinyByteLDRB R2, [R3, R2]LDR R2, [sP, R2]LDRB R2, [R2, #3]TST R2, #0x80.ShinyCheckDone:EOREQ R1, R1, #0x80000000STR R1, [sP, #0x3C]ADD LR, LR, #0x22BX LR Which now takes into account the particular case where R2=0x0. This also means that Rattata and Marill will never be shiny, which was already the case in retail games. I will update the link, but first I want to test the game to see if there is any other major glitch. The problem is that after doing all those mods, I don't think I have enough left in the tank to do a translation on top of that, so no sorry. But if you're interested someone was kind enough to translate MindCrystal in English: https://mega.nz/#!SwNF2LwJ!9RuiKJ3DhkQ_fxDG9s1sxr_NjslRAfyP6yi0CNQiu1w

11. ## resource Gen 6 Pokémon icons for Gen 4 and 5

I am proud to present you the Gen VI mini icons (as per their ORAS incarnation) to use for NDS Pokémon games. How to use: 1°) Download the file Poké-icons.zip at the end of this post and extract its contents. It contains 5 icons files to use with the corresponding games, as well as a folder full of Pokémon icons in PNG format. 2°) Open your NDS Pokémon ROM with CrystalTile2. 3°) Click the NDS icon or Ctrl+N to open the file browser. 4°) Here is where the icons are located in each game: Diamond & Pearl: poketool/icongra/poke_icon.narc Platinum: poketool/icongra/pl_poke_icon.narc HeartGold & SoulSilver: a/0/2/0 Black & White: a/0/0/7 Black 2 & White 2: a/0/0/7 5°) Right-click on the corresponding narc and click Import to update it with the corresponding file for the game: Diamond & Pearl: Gen 4 (1-DP) Platinum: Gen 4 (2-Pt) HeartGold & SoulSilver: Gen 4 (3-HGSS) Black & White: Gen 5 (1-BW) Black 2 & White 2: Gen 5 (2-B2W2) 6°) Now Right-click on arm9.bin (located at the beginning of the file browser) and click Extract, unless you're using a Diamond, Pearl or Platinum ROM in which case you can click Export since the arm9 in those 3 games are not compressed. 7°) Open the extracted arm9 with a hex editor. 8°) Search for the following string: Gen 4: 00 01 01 01 00 00 00 00 02 02 01 01 00 01 02 02 Gen 5: 00 11 11 11 00 00 00 00 22 22 11 11 00 11 22 22 The hex editor should return 1 result only. The format for Gen 5 is slightly different, this is because Gen 5 icons have 2 files per Pokémon, one icon for the male and one for the female. The leftmost nybble is the palette for the female, while the rightmost nybble is the palette for the male. Usually the female-icon is an empty file, except for Unfezant, Frillish and Jellicent. 9°) Now that you have located the offset of the palettes, copy-paste this: Gen 4: [color="#000000"]00 01 01 01 00 00 00 00 02 02 01 01 00 01 02 02 00 00 00 02 01 00 00 02 02 02 00 02 02 00 00 00 02 02 02 00 00 02 01 00 00 02 02 01 00 00 00 00 00 02 02 02 01 01 01 00 01 01 00 00 00 00 00 02 02 02 00 02 00 01 01 01 00 00 00 00 02 00 00 01 01 00 00 01 02 02 02 02 02 02 00 00 02 02 02 02 02 01 00 00 00 00 00 01 01 01 02 02 01 02 02 00 01 00 00 02 00 00 00 00 02 02 00 01 02 01 00 02 02 00 00 00 02 02 00 00 00 00 00 00 01 02 02 02 00 00 00 00 00 00 02 00 01 01 01 00 00 00 00 00 00 02 02 02 02 00 00 01 00 02 00 00 01 00 01 00 00 01 01 00 00 00 01 00 00 01 01 01 01 00 02 01 01 01 00 00 02 02 00 01 00 00 00 02 00 02 00 02 01 00 02 00 00 01 00 00 00 02 00 00 02 02 00 00 00 00 00 00 00 00 00 00 00 00 02 01 02 02 01 01 01 00 01 02 02 02 01 01 01 00 01 01 01 01 01 00 00 00 00 00 00 02 02 02 02 00 02 00 02 01 00 01 01 01 01 01 00 00 00 00 01 01 01 00 00 01 01 02 02 02 01 01 01 01 02 02 02 02 00 00 00 02 02 02 02 02 02 00 00 01 00 00 00 00 02 00 01 02 00 00 02 00 01 00 00 00 02 01 00 01 01 01 01 00 00 00 02 01 00 00 00 00 00 01 00 00 01 00 00 02 02 00 01 00 00 00 01 01 00 00 00 02 00 00 00 00 00 00 00 01 00 00 02 00 00 00 00 02 00 00 00 00 02 00 01 00 00 01 01 01 01 00 02 00 00 00 00 00 00 02 02 01 01 00 00 00 01 00 00 00 01 01 01 01 00 00 00 00 00 00 01 00 00 00 02 02 02 02 02 02 00 00 02 00 02 02 00 00 01 00 00 00 01 00 00 00 02 00 00 01 01 00 02 00 00 01 00 00 00 01 01 00 00 01 00 00 01 00 00 01 01 00 00 02 00 01 00 02 02 00 00 00 00 00 02 00 00 00 00 00 00 00 01 01 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 01 00 00 00[/color] [color="#FF0000"]00 01 00 00 00 00 00[/color] [color="#008000"]00 00 00 01[/color] [color="#000000"]For DP, don't copy the red nor the green part at the end.[/color] [color="#FF0000"]For Pt, don't copy the green part at the end.[/color] [color="#008000"]For HGSS, copy all.[/color] BW: 00 11 11 11 00 00 00 00 22 22 11 11 00 11 22 22 00 00 00 22 11 00 00 22 22 22 00 22 22 00 00 00 22 22 22 00 00 22 11 00 00 22 22 11 00 00 00 00 00 22 22 22 11 11 11 00 11 11 00 00 00 00 00 22 22 22 00 22 00 11 11 11 00 00 00 00 22 00 00 11 11 00 00 11 22 22 22 22 22 22 00 00 22 22 22 22 22 11 00 00 00 00 00 11 11 11 22 22 11 22 22 00 11 00 00 22 00 00 00 00 22 22 00 11 22 11 00 22 22 00 00 00 22 22 00 00 00 00 00 00 11 22 22 22 00 00 00 00 00 00 22 00 11 11 11 00 00 00 00 00 00 22 22 22 22 00 00 11 00 22 00 00 11 00 11 00 00 11 11 00 00 00 11 00 00 11 11 11 11 00 22 11 11 11 00 00 22 22 00 11 00 00 00 22 00 22 00 22 11 00 22 00 00 11 00 00 00 22 00 00 22 22 00 00 00 00 00 00 00 00 00 00 00 00 22 11 22 22 11 11 11 00 11 22 22 22 11 11 11 00 11 11 11 11 11 00 00 00 00 00 00 22 22 22 22 00 22 00 22 11 00 11 11 11 11 11 00 00 00 00 11 11 11 00 00 11 11 22 22 22 11 11 11 11 22 22 22 22 00 00 00 22 22 22 22 22 22 00 00 11 00 00 00 00 22 00 11 22 00 00 22 00 11 00 00 00 22 11 00 11 11 11 11 00 00 00 22 11 00 00 00 00 00 11 00 00 11 00 00 22 22 00 11 00 00 00 11 11 00 00 00 22 00 00 00 00 00 00 00 11 00 00 22 00 00 00 00 22 00 00 00 00 22 00 11 00 00 11 11 11 11 00 22 00 00 00 00 00 00 22 22 11 11 00 00 00 11 00 00 00 11 11 11 11 00 00 00 00 00 00 11 00 00 00 22 22 22 22 22 22 00 00 22 00 22 22 00 00 11 00 00 00 11 00 00 00 22 00 00 11 11 00 22 00 00 11 00 00 00 11 11 00 00 11 00 00 11 00 00 11 11 00 00 22 00 11 00 22 22 00 00 00 00 00 22 00 00 00 00 00 00 00 11 11 00 11 11 11 00 00 00 00 00 00 22 22 22 22 22 00 00 11 11 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 11 11 22 00 00 00 11 00 11 11 11 11 22 00 11 11 11 11 00 11 11 00 00 00 11 00 22 11 00 00 00 00 00 00 00 00 11 11 00 00 00 00 22 22 22 11 11 11 00 00 00 00 00 11 11 00 00 00 11 00 00 00 00 00 22 11 11 00 00 00 00 00 00 00 11 22 22 22 11 11 22 00 00 00 11 11 22 00 22 00 00 00 00 00 22 00 00 11 11 22 00 22 22 22 00 00 00 22 11 11 00 00 00 00 00 00 11 22 11 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 00 11 00 11 00 00 00 00 00 00 00 00 11 00 00 11 00 22 11 11 11 00 22 22 22 22 B2W2: 00 11 11 11 00 00 00 00 22 22 11 11 00 11 22 22 00 00 00 22 11 00 00 22 22 22 00 22 22 00 00 00 22 22 22 00 00 22 11 00 00 22 22 11 00 00 00 00 00 22 22 22 11 11 11 00 11 11 00 00 00 00 00 22 22 22 00 22 00 11 11 11 00 00 00 00 22 00 00 11 11 00 00 11 22 22 22 22 22 22 00 00 22 22 22 22 22 11 00 00 00 00 00 11 11 11 22 22 11 22 22 00 11 00 00 22 00 00 00 00 22 22 00 11 22 11 00 22 22 00 00 00 22 22 00 00 00 00 00 00 11 22 22 22 00 00 00 00 00 00 22 00 11 11 11 00 00 00 00 00 00 22 22 22 22 00 00 11 00 22 00 00 11 00 11 00 00 11 11 00 00 00 11 00 00 11 11 11 11 00 22 11 11 11 00 00 22 22 00 11 00 00 00 22 00 22 00 22 11 00 22 00 00 11 00 00 00 22 00 00 22 22 00 00 00 00 00 00 00 00 00 00 00 00 22 11 22 22 11 11 11 00 11 22 22 22 11 11 11 00 11 11 11 11 11 00 00 00 00 00 00 22 22 22 22 00 22 00 22 11 00 11 11 11 11 11 00 00 00 00 11 11 11 00 00 11 11 22 22 22 11 11 11 11 22 22 22 22 00 00 00 22 22 22 22 22 22 00 00 11 00 00 00 00 22 00 11 22 00 00 22 00 11 00 00 00 22 11 00 11 11 11 11 00 00 00 22 11 00 00 00 00 00 11 00 00 11 00 00 22 22 00 11 00 00 00 11 11 00 00 00 22 00 00 00 00 00 00 00 11 00 00 22 00 00 00 00 22 00 00 00 00 22 00 11 00 00 11 11 11 11 00 22 00 00 00 00 00 00 22 22 11 11 00 00 00 11 00 00 00 11 11 11 11 00 00 00 00 00 00 11 00 00 00 22 22 22 22 22 22 00 00 22 00 22 22 00 00 11 00 00 00 11 00 00 00 22 00 00 11 11 00 22 00 00 11 00 00 00 11 11 00 00 11 00 00 11 00 00 11 11 00 00 22 00 11 00 22 22 00 00 00 00 00 22 00 00 00 00 00 00 00 11 11 00 11 11 11 00 00 00 00 00 00 22 22 22 22 22 00 00 11 11 00 00 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 00 00 11 11 22 00 00 00 11 00 11 11 11 11 22 00 11 11 11 11 00 11 11 00 00 00 11 00 22 11 00 00 00 00 00 00 00 00 11 11 00 00 00 00 22 22 22 11 11 11 00 00 00 00 00 11 11 00 00 00 11 00 00 00 00 00 22 11 11 00 00 00 00 00 00 00 11 22 22 22 11 11 22 00 00 00 11 11 22 00 22 00 00 00 00 00 22 00 00 11 11 22 00 22 22 22 00 00 00 22 11 11 00 00 00 00 00 00 11 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 00 11 00 11 00 00 00 00 00 00 00 00 11 00 00 11 00 22 11 11 11 11 00 00 00 00 00 00 22 22 22 22 10°) Save and close the hex editor. 11°) Now you can re-insert the arm9 in the ROM with CrystalTile2 by right-clicking Compression (if your ROM doesn't load then try Import instead). This is the end result: NDS Pokémon icons have to fit a rectangle of 32 by 24 pixels, so I did my best to port them within that limitation. Credits: _Zhorken for ripping the ORAS Pokémon icons. _MeroMero (myself) for porting the icons to use with older gens. _pleoNeX for Tinke. _the angel-team for CrystalTile2. Now enjoy the updated icons Poké-icons.zip
12. ## [Glitch][Gen IV] Facade and Strength

OP updated with the addition of a fix for Strength.
13. ## resource [Glitch][Gen IV] Facade and Strength

Video courtesy of Wooggle Smith, showcasing the Facade glitch : [video=youtube;frLwdt3bSW4] Every time Facade is used, the sprite of the Pokémon who used the move will go up (or down for some Pokémon) by 1 pixel. To fix that graphical oversight: _Go to narc wazaeffect/we.arc (DPPt) or a/0/1/0 (HGSS) _Go to file 263 (which is the index number of the move Facade) _Replace all 6 instances of 05 00 05 00 with 04 00 04 00 But that's not all, there's also a glitch with the move Strength which moves the sprite of the Pokémon who used it by 2 pixels to the right. Again to fix this: _Go to narc wazaeffect/we.arc (DPPt) or a/0/1/0 (HGSS) _Go to file 70 (index number of Strength) _Search for the string 0A000000 05000000 16000000 87070000 8BFFFFFF, and replace the 0A000000 with 08000000. And that's it, Pokémon sprites won't erroneously shift up/down/right anymore after applying those 2 simple mods.
14. ## Pokémon MindCrystal

This is the closest match I found that could describe the glitch you encountered: http://bulbapedia.bulbagarden.net/wiki/List_of_glitches_in_Generation_IV#GB_Sounds_muting _glitch [video=youtube;ObhQQYe8UI8] If it's not that, then: _Is it something you run into regularly, or was it a one-time thing? _Also in which route/city/cave/building does the glitch occur?
15. ## Pokémon MindCrystal

You don't have to extract the text (narc a/0/2/7 btw), just download Spiky's DS Map Editor and you should be able to edit the text (and even add strings). And of course you can, all the mods I did in that ROM are free to use.
16. ## Pokémon MindCrystal

I'm afraid not, or at least it won't come from me, sorry.
17. ## [Tutorial][B2W2] Insert the Fairy-type (revision 4)

First post updated with a link.
18. ## Pokémon MindCrystal

No file attachment since the .zip is above 10 MB: http://www.mediafire.com/download/m3dnkqdpw9wr4vp Version 1.1 includes the gender-dependent storyline ASM Hack. Added Contrary in the list of abilities in the OP (Contrary is actually present in v1.0 but I forgot to put it in the list). The zip also includes a .sav where the female player is inside the Fighting Dojo in Saffron City. You can also browse through the Pokédex to see which Pokémon changed type. The Pokémon in the party all have moves they can learn in this hack, whether it is by level-up, move tutor, TM/HM or by breeding. I don't think I have any motivation left to work on any ROM hacking. Two years ago, I was clueless about ASM, and the first thing I did (Fairy-type Arceus) was approximate but at that time it was a huge accomplishment for me; but since then I have improved and look where I am today. Despite that I still think that I had a good run and I had fun, so it's time for me to go quietly and serenely. Know that anyone can use my any of my ROM hack as a base. Also anyone is free to improve what can be improved. Credits are appreciated but not required and I won't hold it against anyone.
19. ## Pokémon MindCrystal

Oh, that? Yes, a problem I never quite understood. What I know is that it happens only for trainers who have 8 characters or more in their name. Whenever I have the time I'll get a look on it and see if I can fix that.
20. ## [Tutorial][B2W2] Insert the Fairy-type (revision 4)

First post updated. Revision 4 brings 3 new updates to the table: A fix that allows the Pokémon summary screen to be loaded on a NDS should it detect a Fairy-type icon (this is not the ideal fix though, I'll give you that, but for its primary goal, this is more than enough for now); Narc a/1/2/5 needing to be tampered with due to the fact that it is loaded when teaching a move via the Move Relearner; Due to a better understanding of ASM, now the type-chart really is a 18×18 type chart now, not a 17×18 weird chart with a hackish way to account the Fairy-type as a defender.
21. ## [SOLVED] Pokémon Black & White - Personal narc's 13th bit value in B2W2 for Diglett/Dugtrio

Simply add 0×10 (16) to the 12th byte, like in B2W2, since this byte is always a number between 00 and 0F included, the end result would be a number between 10 and 1F included. More detailed explanation More specifically both the 11th and 12th bytes should be read together, since both trigger the EVs to give should a member of this species is defeated. For example Ninetales' EV data is 40 04. Invert the bytes to read it as 04 40. Cleave each byte in half so as to read each number separately: 0 4 4 0. Now convert into binary to read the EVs as 0000 0100 0100 0000. You can use this nice site for the conversions: http://www.binaryhexconverter.com/ Now read this number as pairs of 2 bits: 00 00 01 00 01 00 00 00. From right to left: _the first pair tells how many EVs to give in HP (from 0 to 3) _the second pair tells how many EVs to give in Attack (from 0 to 3) _the third pair tells how many EVs to give in Defense (from 0 to 3) _the fourth pair tells how many EVs to give in Speed (from 0 to 3) _the fifth pair tells how many EVs to give in Special Attack (from 0 to 3) _the sixth pair tells how many EVs to give in Special Defense (from 0 to 3) Now you can tell that defeating a Ninetales gives 1 EV in Speed and 1 EV in Special Defense. _the seventh pair, more precisely the 13th bit, is what the game read to know if the Pokémon should come from the air or not when being summoned from a Poké Ball. So if you put this bit at 1, the data would be read as 00 01 01 00 01 00 00 00. By gluing the pairs together 2 by 2, we get: 0001 0100 0100 0000. From binary to hex now: 1 4 4 0. By gluing each nybble together 2 by 2, we get: 14 40. Now invert the bytes and this will be the final data: 40 14.
22. ## [Tutorial][B2W2] Insert the Fairy-type (revision 4)

Update coming soon that fix the Pokémon summary screen freeze when trying to view a Fairy-type Pokémon or Attack. I already implemented it in Black 2, as soon as I get it working in White 2 I'll update the OP.
23. ## Pokémon MindCrystal

Thanks. One thing I forgot to shed light on is that obviously, every single one of those modifications were tested with the utmost accuracy on my NDS lite. Did you know the animation for the cutscene where the Kimono Girls are dancing to summon the cover legendary is actually dependent of a single byte, who in turn is independent of Lugia and Ho-Oh? (I'm talking about the waves for SoulSilver / falling leaves for HeartGold) If that byte is 07, then the cutscene will play the HeartGold animation; if that byte is 08, then the cutscene will play the SoulSilver animation. So what I did is an ASM hack to check upon each location change the current location, and thus if the current location is the one referred with the Location ID 340 (0×154, which refers to the Tin Tower's roof), then the cutscene byte will be changed from 08 to 07, else if it is any other location, that byte will be equal to 08. Check in the RAM viewer for the offset 0×20F566C if you want to test it. Unrelated but likewise, if the byte located at offset 0×20F5670 is equal to 02, then the titlescreen will be the HeartGold one, if it is equal to 03, then the titlescreen will be the SoulSilver one.
24. ## Pokémon MindCrystal

Incoming in v2: gender-dependent storyline! [video=youtube;6mSEx6OxzmQ] Roughly 80 bytes of ASM code and a duplicate of the a/ folder (named z/ instead to ensure the Files ID are kept in the same order) to make this possible. You can see there what a Gen IV Pokémon game running at 60 FPS looks like (be sure to watch the vid at 720p60 then). And also Kris, to make a true tribute to Pokémon Crystal. Basically if you play as a boy, Feebas and Milotic are unavailable in the wild, whereas if you play as the girl, Magikarp and Gyarados instead are the ones nowhere to be found. In this hack this is not an insurmountable problem since the Magikarp/Gyarados family (who are male only) and the Feebas/Milotic family (who are female only) are considered the same species, which means you can get the missing counterpart by breeding with Ditto.
25. ## reserach [Gen IV] Jump Kick and Hi Jump Kick against a Ghost-type

So, I was wondering why in HGSS, Chuck's Medicham (at 141 HP) would ALWAYS OHKOes himself after missing Hi Jump Kick against a Lv.100 Giratina (who at the absolute worse, still has 410 HP), it didn't match with the currently known Gen 4 mechanics of (Hi) Jump Kick. After scratching my head good, I decided to test thoroughly what was that, and here are my results: What is currently known: If a Pokémon misses Jump Kick or Hi Jump Kick, no matter the reason, it will take crash damage equal to half the damage that would have been dealt, rounded down. If the Pokémon is supposed to take crash damage but the result is 0, then make the result 1. What is not known: If a Pokémon misses Jump Kick or Hi Jump Kick against a Ghost-typed target, it will take crash damage equal to half the target's Max HP instead, regardless of: the difference of level between the user and the target, the target having Wonder Guard, the target using Protect/Detect, the target being in the semi-invulnerable turn of a 2-turns move BUT If the Pokémon who missed Jump Kick or Hi Jump Kick against a Ghost-typed target happens to have the ability Scrappy and/or has used Foresight/Odor Sleuth beforehand, the game will instead perform, according to the assembly, a comparison between half the damage that would have been dealt (Variable 1) and half the max HP of the Ghost-typed target (Variable 2). If Variable 2 is greater than or equal to Variable 1, the game will choose Variable 1, else it will choose Variable 2. If the Pokémon is supposed to take crash damage but the result is 0, then make the result 1.
×