Jump to content

Arbitrary sprites: Difference between revisions

no edit summary
>Torchickens
No edit summary
 
(12 intermediate revisions by 4 users not shown)
Line 1:
[[File:Yoshi battle.png|thumb|right|160px|'Yoshi' as the backsprite of a Pokémon.]]
 
'''Arbitrary sprite''' (or '''custom sprites''') or '''arbitrary sprite pointers''' refers to a [[glitch technique]] in {{RBY}}, in which a [[glitch]] or memory edit is used to insert data the player desires into a Pokémon, [[glitch Pokémon]], Trainer or [[glitch Trainer]]'s sprite.
 
It does not refer to hacking Pokémon sprites into the ROM, but rather refers to 'custom sprites' appearing due to modified [[RAM]].
Line 23:
Addresses D0C2 (sprite dimension) and D0C3-D0C4 (front sprite pointer) (D0C1 and D0C2-D0C3 in Yellow) may be locked using [[OAM DMA hijacking]] or a [[cheating device]] to load a custom front sprite for every opposing Pokémon.
 
D0C2-D0C3 reads pointer expressed in little-endian form, for example, $DA7F for Yellow would be represented by $7F at $D0C2 and $80 at $D0C3.
 
For a cheating device like the GameShark, the following codes will replicate the same effects as locking these values with OAM DMA hijacking (assuming the sprites were properly patched):
Line 34:
 
The first person to use this exploit is unknown, but it was popularized by pokeglitch and Torchickens.
 
 
===With 9ゥ (E6)'s backsprite (Yellow)===
Line 40 ⟶ 39:
In Yellow, [[glitch Pokémon]] {{gdex|Y:230|9ゥ (0xE6)}}'s backsprite is sourced from FAC9 (DAC9)). By default, on Super Game Boy the glitch Pokémon is yellow, but the palette of the desired sprite can be changed by changing the second species byte of a 9ゥ (0xE6).
 
Dimension byte 0x44 sprites can be 'installed' into the game for 9ゥ (0xE6, by modifying the contents of DAC9 (which is located within the storage system Pokémon data) with arbitrary code execution.
 
This exploit was documented by Torchickens.
 
===With Family 175 (Red/Blue)===
The Family 175 glitch Pokémon in Red/Blue (specifically {{gdex|RB:228|0xE4}}, {{gdex|RB:233|0xE9}}, {{gdex|RB:238|0xEE}}) take their frontsprite from screen data at CDE5. Though it may not be possible to see a custom frontsprite from those glitch Pokémon with standard arbitrary code execution, it is possible with a special form of arbitrary code execution known as [[OAM DMA hijacking]], and this exploit can be set up with a tool such as [[TheZZAZZGlitch's memory editor]] and map script execution at D36E.
 
This exploit was documented by Torchickens.
Line 55 ⟶ 54:
 
==In later generations==
Arbitrary sprites are possible in Pokémon Ruby and Sapphire. All glitch Pokémon’s palettes are indexed out of bounds from the array holding each species’ compressed palette pointers. These pointers can end up in Pokémon storage data, which allows the player to manipulate data within their boxes (through ACE or by save editing) so that when decompressed, the “palette” data will overwrite the decamark sprite in memory. It should be noted that this same technique is not possible in Emerald or FRLG because of how memory is laid out differently.
Arbitrary sprites are theoretically possible, but no vulnerability to do it have, as of yet been documented.
 
==See also==
Line 72 ⟶ 71:
 
{{YouTube|d3OsHGhjz48|ChickasaurusGL}}
 
Arbitrary sprites in Pokémon Ruby:
 
{{YouTube|qdR3DwaG0kI|unclekrunkel}}
 
==External links==
*[https://rgmechex.com/tech/gen1decompress.html Retro Game Mechanics Explained's tool to compress and decompress Generation I sprites online (supports PNGs)]
*"Sprite import tools for RBY" can be downloaded within Evie's Google Sites backup [https://drive.google.com/drive/folders/1DAVPYay9sAuXwi4qXbDQfPU2sIDI_mXH?usp=sharing here]. It is based on the previous work of the GB Dev (for .2bpp encoding) and Skeetendo (for sprite compression) communities.
 
[[Category:Generation I glitches]]
[[Category:Major glitches]]
Cookies help us deliver our services. By using our services, you agree to our use of cookies.