Metadata-Version: 2.4
Name: xoleon
Version: 0.1.1
Summary: Pokémon DS/3DS ROM text decryption and container reader — spiritual successor to ndspy
Author: Kyle Prado
License-Expression: MIT
Project-URL: Homepage, https://github.com/Creative-Genius2/xoleon
Keywords: pokemon,nds,3ds,rom,decryption,ndspy,garc,narc
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Games/Entertainment
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

\# xoleon

\---

\#\#\# Etymology

\*The name “Xoleon” comes from a corruption and combination of the terms xor and rol (for context, Xor (also called “exclusive or” where bits get compared to eachother to see if the result is either true (one.) or false (zero.).) and rol (specifically in the context of Pokémon, rol is the process that comes after xor, where bits get rotated to the left within a 16 or 15 bit field.) together make the cipher that help to obfuscate the text layer of Pokémon games in Gen IV-VII), which is combined with eon as a suffix. Xoleon itself serves as the spiritual successor to ndspy, but this can be also likened to Eevee, the Evolution Pokémon.\*

\---

\#\#\# methodology on Pokémon text decryption for DS and 3DS ROMS  
\- Gen IV: compared to future generations, Gen IV contains the full character map (tradition carried from gens 1-3), along with 9-bit packed trainer names and control codes, which are all locked by a XOR that shifts within a 16 bit field. (this is then added to a MULT of 0x91BD3. This ultimately scrambles the character map and trainer names until the xor is decrypted properly. The 9-bit packing uses 15 usable bits per word, but that's a separate layer after decryption.)  
\- Gen V–VII: Is ultimately similar to Gen IV, but is stripped down, with the xor now shifting within a 16-bit field, which is multiplied (instead of being added to.) by a MULT of 0x2983

also contains support for:  
\- 3DS container layer  
\- NCCH header parsing (product code, region, game title)  
\- RomFS traversal (directory tree, path reconstruction)  
\- GARC parsing — single file, sub-file and archives  
\- LZ11 compression and decompression (pure Python, no external tools)  
\- ExeFS parsing (code.bin / ARM11 executable access)  
\- CRO/CRS module parsing (3DS overlay equivalent — segment extraction)  
\- MSBT (General text outside of Pokémon)  
—  
\#\#\# Planned

\- \*\*CGFX/BCH\*\* (resources related to the models on the 3ds)  
\- \*\*BCSAR/BCSTM/BCWAV\*\*  (deferred until audio within Gen IV/V ends up being tackled)  
—  
\#\#\# Not fucking needed  
\- \*\*ARM9\*\* (now systems-related processing that was formerly used natively in the DS filesystem but was abstracted outward)
