GBATemp ROM hacking documentation project (new 2016 edition out)

Edit December 2019.
Reuploaded to GBAtemp's new download section.
https://gbatemp.net/download/gba-and-ds-rom-hacking-guide.33419/

mirror
http://trastindustries.com/randomfiles/romhacking2016_copy_1.pdf

I am aiming to sit down and get some more done and updated in the near future but for now it will remain the 2016 version.

Edit January 2016.
A new PDF, mainly to head off the possible demise of google code and fix a few links. Not many changes but I have tweaked some of the formatting and general tidied things up a bit more.
http://filetrip.net/nds-downloads/u...-rom-hacking-guide-2016-preview-1-f33419.html
Contents below, numbers may be slightly off as they come from a slightly revised edition but titles are all the same.

Edit August 2014. A new PDF that has been edited a bit and has the new domain for GBAtek/no$gba is available. It is pretty similar to the 2012 version in terms of what it has inside it, it is slightly more edited and has working links to gbatek in it.
http://filetrip.net/nds-downloads/u...-rom-hacking-guide-2014-preview-1-f32908.html

Contents
I
II
1
Introduction
12
ROM hacking concepts
15
Basics
1.1
1.2
1.3
1.4
15
Hexadecimal
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Representation 1.1.2 BCD (Binary coded decimal) 1.1.3 Big and little endian . . . . . . . . . . . . . . . . . . . . . 19
1.1.4 Signed values, oating point and xed point . . . . . . . . 19
Hex operations
. . . . . . . . . . . . . . . . . . . . . . . .
15
1.1.1
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
18
24
1.2.1 Shift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.2.2 Rotate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.2.3 Flip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.2.4 Boolean logic . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.2.5 Hex Mathematics.
. . . . . . . . . . . . . . . . . . . . . .
Patching and patch making
. . . . . . . . . . . . . . . . . . . . .
27
28
File systems and operations . . . . . . . . . . . . . . . . . . . . . 30
1.4.1 Non lesystem devices . . . . . . . . . . . . . . . . . . . . 30
1.4.2 GBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.4.3 DS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.4.4 3DS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.4.5 GC (gamecube) . . . . . . . . . . . . . . . . . . . . . . . . 32
1.4.6 Wii 32
1.4.7 Xbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.4.8 Xbox 360 33
1.4.9 PS1 and PS2
1.4.10 PS3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . 34
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.4.11 PSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.4.12 Saturn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.4.13 Dreamcast . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.4.14 Amiga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.4.15 PC and related hardware. . . . . . . . . . . . . . . . . . . 36
1.5 Finding the object of your interest. . . . . . . . . . . . . . . . . . 36
1.6 Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.7 Tools of the trade continued . . . . . . . . . . . . . . . . . . . . . 39
1.7.1 Hex editor . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.7.2 Tile editor . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
1.7.3 Spreadsheet and command line . . . . . . . . . . . . . . . 55
1.7.4 Compression 57
1.7.5 Music . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
1.7.6 ASM/Assembly . . . . . . . . . . . . . . . . . . . . . . . . 59
1.8
. . . . . . . . . . . . . . . . . . . . . . . . .
Basic le format concepts
. . . . . . . . . . . . . . . . . . . . . .
5
632
Graphics
2.1
Aliasing . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.0.2 Haloing
2.0.3 Bit depth
2.3
2.4
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
Palettes and colours
2.1.1
2.2
65
2.0.1
66
66
67
. . . . . . . . . . . . . . . . . . . . . . . . . 67
GBA colours (15 bit) . . . . . . . . . . . . . . . . . . . . . 67
Tiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.2.1 1Bpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.2.2 4 Bpp 68
2.2.3 8Bpp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2.2.4 GBA3 Xbpp . . . . . . . . . . . . . . . . . . . . . . . . . 70
2.2.5 GBA2 4BPP . . . . . . . . . . . . . . . . . . . . . . . . . 71
2.2.6 Bitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
2.2.7 Known formats . . . . . . . . . . . . . . . . . . . . . . . . 73
2.2.8 Crystaltile2 export and import. . . . . . . . . . . . . . . . 73
2.2.9 Avoiding gradients, AA, lossy compression, noise and such
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
things. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Layout, timing, OAM and special eects . . . . . . . . . . . . . . 78
2.3.1 Introduction to the OAM and BG modes. . . . . . . . . . 78
2.3.2 Timing 2.3.3 GBA and DS OAM (sprites) . . . . . . . . . . . . . . . . 79
2.3.4 GBA and DS BG modes . . . . . . . . . . . . . . . . . . . 82
2.3.5 Basic animation . . . . . . . . . . . . . . . . . . . . . . . 86
2.3.6 Window feature . . . . . . . . . . . . . . . . . . . . . . . . 91
2.3.7 Special features (ipping, ane transformation, alpha and
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
such) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2.3.8 Basic DS layout formats and mapping . . . . . . . . . . . 93
2.3.9 Video memory handling and alignment . . . . . . . . . . . 96
3d
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
2.4.1 Basic 3d (bones, coordinates, keyframes) . . . . . . . . . .
98
2.4.2 Viewpoints
2.4.3 Textures and material colours . . . . . . . . . . . . . . . . 100
2.4.4 Models
2.4.5 Lighting/shadows
2.4.6 3d smoke and fog . . . . . . . . . . . . . . . . . . . . . . . 103
2.4.7 Animations . . . . . . . . . . . . . . . . . . . . . . . . . . 104
2.4.8 DS 3D hardware
2.4.9 The shift of the 3D to DS 2d
. . . . . . . . . . . . . . . . . . . . . . . . . . 100
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
. . . . . . . . . . . . . . . . . . . . . . 102
. . . . . . . . . . . . . . . . . . . . . . . 105
. . . . . . . . . . . . . . . . 107
2.4.10 NSBMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
2.4.11 Non NSBMD . . . . . . . . . . . . . . . . . . . . . . . . . 117
2.5
3
Notes and further reading . . . . . . . . . . . . . . . . . . . . . . 118
Text
3.1
119
Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
3.1.1 Relative searching
3.1.2 Corruption and alteration . . . . . . . . . . . . . . . . . . 127
. . . . . . . . . . . . . . . . . . . . . . 121
3.1.3 Memory viewing and corruption
3.1.4 Frequency analysis . . . . . . . . . . . . . . . . . . . . . . 131
3.1.5 Language analysis
3.1.6 Pointer and encoding/hex analysis
. . . . . . . . . . . . . . 130
. . . . . . . . . . . . . . . . . . . . . . 133
6
. . . . . . . . . . . . . 1343.1.7 Assembly tracing . . . . . . . . . . . . . . . . . . . . . . . 134
3.1.8 Font viewing
3.1.9 Language comparing . . . . . . . . . . . . . . . . . . . . . 135
. . . . . . . . . . . . . . . . . . . . . . . . . 134
3.1.10 Table creation tools
3.2
3.3
3.2.1 Special cases and non pointer concepts . . . . . . . . . . . 139
3.2.2 Example reverse engineering of pointers
Markup, control codes and placeholders
3.3.1
3.4
3.5
Worked example
3.4.1 NFTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
3.4.2 Common hacks . . . . . . . . . . . . . . . . . . . . . . . . 156
Scripting and layout
. . . . . . . . . . . . . . . . . . . . . . . . . 160
Layout and limits . . . . . . . . . . . . . . . . . . . . . . . 168
Text extraction and insertion
Text extraction . . . . . . . . . . . . . . . . . . . . . . . . 170
3.6.2 Text insertion . . . . . . . . . . . . . . . . . . . . . . . . . 172
Language detection in DS games
3.8 Translation hacking
. . . . . . . . . . . . . . . . . . 174
. . . . . . . . . . . . . . . . . . . . . . . . . 174
3.8.1 The types of Japanese characters and how they work -
3.8.2 Japanese glyphs/characters and observations on the lan-
On language
3.8.4 Right to left languages and translation.
. . . . . . . . . . . . . . . . . . . . . . . . . 180
. . . . . . . . . . 180
Japanese text editors and translation tools . . . . . . . . . . . . . 181
3.9.1 General Japanese capable text editors
3.9.2 ROM hacking tools . . . . . . . . . . . . . . . . . . . . . . 182
3.9.3 CAT tools . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Sound
. . . . . . . . . . . 181
184
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
4.1.1 SDAT (NDS) . . . . . . . . . . . . . . . . . . . . . . . . . 188
4.1.2 Others . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
4.1.3 Tracker formats . . . . . . . . . . . . . . . . . . . . . . . . 197
4.1.4 General rule of thumb for custom audio formats
4.1.5 Common DS SDAT audio hacks (undubbing, injection,
tweaks and relinking)
4.1.6
4.2
4.3
GBA audio
Video
. . . . . 197
. . . . . . . . . . . . . . . . . . . . 197
. . . . . . . . . . . . . . . . . . . . . . . . . . 216
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
4.2.1 General video theory . . . . . . . . . . . . . . . . . . . . . 221
4.2.2 Mods/VX/act imagine by Mobiclip.
4.2.3 RAD/Bink
4.2.4 Criware
. . . . . . . . . . . . 222
. . . . . . . . . . . . . . . . . . . . . . . . . . 222
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Cut scenes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Game logic
5.1
. 176
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
3.8.3
Multimedia
4.1
5
. . . . . . . . . . . . . . . . . . . . 169
3.6.1
guage
4
. . . . . . . . . . . . . . . . . . . . . . . 144
3.7
3.9
. . . . . . . . . . 140
. . . . . . . . . . . . . . 144
Fonts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
3.5.1
3.6
. . . . . . . . . . . . . . . . . . . . . 135
Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Levels and Stats
224
. . . . . . . . . . . . . . . . . . . . . . . . . . . 224
5.1.1 Example tools
5.1.2 Level editing techniques . . . . . . . . . . . . . . . . . . . 227
. . . . . . . . . . . . . . . . . . . . . . . . 226
5.1.3 Stats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
75.1.4
5.2
5.3
5.4
RPG randomiser . . . . . . . . . . . . . . . . . . . . . . . 238
Compression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
5.2.1 Lossy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
5.2.2 Lossless
5.2.3 Basic theory of the actual implementations
5.2.4 Compression at hexadecimal level . . . . . . . . . . . . . . 246
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Cheating . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
5.3.1 General cheat making
5.3.2 GBA cheat making . . . . . . . . . . . . . . . . . . . . . . 251
5.3.3 DS cheat making . . . . . . . . . . . . . . . . . . . . . . . 253
5.3.4 Basic making of a cheat
5.3.5 Cheat prevention methods and frustrations
5.3.6 Instruction editing cheating . . . . . . . . . . . . . . . . . 264
. . . . . . . . . . . . . . . . . . . . 249
. . . . . . . . . . . . . . . . . . . 256
Functions and procedural programming. Also return ori-
ented programming/ROP
5.6
. . . . . . . . 260
Programming concepts . . . . . . . . . . . . . . . . . . . . . . . . 267
5.4.1
5.5
. . . . . . . . 240
. . . . . . . . . . . . . . . . . . 267
5.4.2 IF ELSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
5.4.3 Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
5.4.4 Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
5.4.5 Loops
5.4.6 Turing complete
5.4.7 Fundamentals of Assembly
Assembly
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
. . . . . . . . . . . . . . . . . . . . . . . 269
. . . . . . . . . . . . . . . . . 270
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
5.5.1 ARM
5.5.2 GBA Assembly specics . . . . . . . . . . . . . . . . . . . 275
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
5.5.3 DS Assembly specics
5.5.4 The GBA and DS compared
5.5.5 On controls . . . . . . . . . . . . . . . . . . . . . . . . . . 285
5.5.6 Hooking . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
5.5.7 GBA cart as extra memory for DS hacks . . . . . . . . . . 287
. . . . . . . . . . . . . . . . . . . . 279
. . . . . . . . . . . . . . . . 284
Non specic assembly discussion. . . . . . . . . . . . . . . . . . . 287
5.6.1 Language mod example
5.6.2 Non code in ASM
. . . . . . . . . . . . . . . . . . . 287
5.6.3 Destructive vs non destructive assembly editing . . . . . . 291
5.6.4 Polymorphic and dynamic code . . . . . . . . . . . . . . . 292
5.6.5 Slowdown and speedup
5.6.6 Cryptography (encryption, checksums and signatures)
5.6.7 Multiplayer and the failure of Nintendo's online DS security.301
5.6.8 Save editing . . . . . . . . . . . . . . . . . . . . . . . . . . 301
5.6.9 Interpreted languages
. . . . . . . . . . . . . . . . . . . . . . 290
. . . . . . . . . . . . . . . . . . . 294
. . 295
. . . . . . . . . . . . . . . . . . . . 303
5.6.10 Game AI, game logic and game theory . . . . . . . . . . . 303
5.7
5.8
III
6
Flash cart and emulator theory . . . . . . . . . . . . . . . . . . . 307
5.7.1 GBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
5.7.2 DS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
ROM hacking protection . . . . . . . . . . . . . . . . . . . . . . 313
Examples, oddities and techniques.
Crystaltile2 general usage guide
8
315
3157
GBA tracing
7.0.1
8
DS tracing
8.1
9
320
Worked examples . . . . . . . . . . . . . . . . . . . . . . . 321
321
Cart read command
. . . . . . . . . . . . . . . . . . . . . . . . . 322
8.1.1 Basic lookup and methods for it
8.1.2 Header reverse engineering/generated values . . . . . . . . 322
. . . . . . . . . . . . . . 322
Reverse engineering various ROM images
9.1
322
Large archive on top of lesystem . . . . . . . . . . . . . . . . . . 323
9.1.1 Tony Hawk
9.1.2 Star Wars - The Force Unleashed . . . . . . . . . . . . . . 323
. . . . . . . . . . . . . . . . . . . . . . . . . . 323
9.1.3 El Tigre Make my mule
. . . . . . . . . . . . . . . . . . . 323
9.2 Compression
9.3 First Person Game . . . . . . . . . . . . . . . . . . . . . . . . . . 324
9.4 Platformer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
9.5 Fighting games . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
9.6 Role playing games . . . . . . . . . . . . . . . . . . . . . . . . . . 324
9.7 Racing games . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
9.8
9.9
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Puzzle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
9.8.1 Mahjong game
9.8.2 Tetris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
. . . . . . . . . . . . . . . . . . . . . . . . 326
Other genres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
10 Developer leftovers 326
11 Workarounds 327
12 Moving to a new system 327
13 Developer tricks aka thinking like a game developer 328
13.0.1 Level and mechanism design . . . . . . . . . . . . . . . . . 328
13.0.2 Sprite and palette reuses . . . . . . . . . . . . . . . . . . . 329
13.0.3 Pre rendering . . . . . . . . . . . . . . . . . . . . . . . . . 330
13.0.4 Speed blur and fog . . . . . . . . . . . . . . . . . . . . . . 330
13.0.5 Loading covers
. . . . . . . . . . . . . . . . . . . . . . . . 330
13.0.6 Optimisation of loading
. . . . . . . . . . . . . . . . . . . 330
13.0.7 3d imagery in general . . . . . . . . . . . . . . . . . . . . 331
13.0.8 Procedural generation . . . . . . . . . . . . . . . . . . . . 332
13.0.9 Noise on images and sound.
. . . . . . . . . . . . . . . . 332
13.0.10 Using the limits of the system/working to them . . . . . . 332
13.0.11 Network coding . . . . . . . . . . . . . . . . . . . . . . . . 333
14 Game design and media
333
15 Python, batch les and programming for ROM hacking
15.1 radare2 reverse engineering tools
15.2 Programming languages
15.3 Python
334
. . . . . . . . . . . . . . . . . . 334
. . . . . . . . . . . . . . . . . . . . . . . 334
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
916 PC program hacking
335
16.1 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
16.2 Decompilation
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
17 Version control and project management.
17.1 Project and team management
17.2 Version control
338
. . . . . . . . . . . . . . . . . . . 338
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
18 Interesting links and further reading.
340
18.1 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
18.2 Further reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
IV File formats (specications, methods and known
formats).
342
19 General things about the DS 342
20 Generic DS nitro SDK format 342
21 General le reverse engineering 342
21.1 Headers
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
21.2 File sizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
21.3 Multiple versions of the game . . . . . . . . . . . . . . . . . . . . 343
21.4 File names and extensions . . . . . . . . . . . . . . . . . . . . . . 343
21.5 Tile viewers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
21.6 Pointers and such . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
22 Sound
344
22.1 SDAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
22.2 SSEQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
22.3 STRM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
22.4 SWAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
22.5 SWAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
22.6 BANK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
22.7 Other formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
23 Graphics
347
23.1 NCER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
23.2 NANR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
23.3 NCGR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
23.4 NSCR
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
23.5 NMCR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
23.6 NFTR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
23.7 NSBMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
23.8 NSBTX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
23.9 NSBCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
24 Packing format
350
24.1 NARC, ARC and CARC . . . . . . . . . . . . . . . . . . . . . . . 350
1025 Text
350
25.1 BMG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
V
Glossary, index and such
26 Glossary
352
352
Feel free to discuss it or make suggestions/corrections in this thread.

Intro:
This is a holder page for GBAtemp/FAST6191's ROM hacking documentation. It is mainly focused on the GBA and DS though other consoles are looked at and most of what is said applies to all consoles or can be easily adapted.
It has taken many forms over the years with the most advanced one at present being the one linked above this intro. The following thread still has good info but it is considered completely eclipsed by the PDF versions linked above.

For those who are concerned about license issues share links, excerpts, copy and paste things to other sites/forums/newsgroups as this is mainly about getting some information out there, link back if you want but it is not required to do so. Basically feel free to include this document in whole or in part, original or altered in any format (odt, doc, html, PDF, chm....). If you want to contact me so I can try to remember to tell you if something gets updated then by all means go ahead.

The rest of the post covers more detailed stuff but the average DS ROM hacking toolkit consists of five things

A hex editor - able to view and edit any file although it is often pointless to try massive edits using one.
http://gbatemp.net/topic/326873-rom-hacking-hex-editors-mid-2012-discussion/ has some discussion and links
http://sourceforge.net/projects/hexplorer/ is the best general purpose editor with featured desirable to use in ROM hacking you can get for free (you will need to configure it quite a bit as the stock/initial setup leaves a bit to be desired) although do read the link as it contains more information. Most hackers will have several aimed at various tasks though.

A tile editor- http://filetrip.net/f23649-CrystalTile2-2010-09-06.html has one of the best, if not the best, general purpose tile editors for the GBA and DS. Crystaltile2 is also a self contained ROM hacking toolkit with loads of nice features (usage later in the guide).

A spreadsheet with hex capabilities. Always nice to have some data in a form that can be easily read, fiddled with and manipulated.
http://www.libreoffice.org/download/ if you need one.

Something to pull apart DS roms Crystaltile2, ndstool, ndsts, nitroexplorer, tinke and more. Covered later in this post

Something to handle compression It is commonly used, needs to be decompressed to do any real work with and easily worked around on the DS at least. http://gbatemp.net/topic/313278-nintendo-dsgba-compressors/ and http://code.google.com/p/dsdecmp/ are the leading two DS rom compression tools (GBA support is there as well but Crystaltile2 probably does better there).

There are other little tools like http://gbatemp.net/t105060-nftr-editor (editor for a common font format) and http://www.romhacking.net/utilities/504/ (a tool to convert text into various common formats of hex string) and http://www.propl.nl/random/NSBTXExtractor.zip (a tool to extract textures from the standard 3d model format, straight up viewers are also available in the likes of nsbmdtool and tinke but not as useful as that and tend not to work that well for viewing purposes).

Contents linkfest (not yet complete)

This post
Introduction
How to pull apart your roms
links, links and more links


First steps in hacking

graphics hacking
Multimedia hacking (also SDAT some words on general sound hacking too)
text hacking
core and file format hacking

Other topics

Guide to crystaltile2
Cheats, Assembly, AP and you
Rom ripping and enhancements (backup of very old thread)
Compression
Coding for rom hacking
Advanced techniques not necessarily covered elsewhere
Known file formats and niceties.


Introduction

Back when this project/document was started the GBA was only just starting to be hacked properly, the DS was limited to a very small group of people for anything beyond rudimentary file system hacks, the GC was split across several sites and the Wii was still known as the revolution (and naturally did not figure into these documents).
Today as this paragraph is written [2012 edit]probably could stand to be rewritten again but it is being left[/2012 edit] the GBA release scene is long dead and has several very high profile projects released and in progress, the DS still has many releases (although a successor is nearly upon us and also has some very high profile projects with tens of people in the teams, the GC release scene is long dead but the hacking scene has solidified (and is helped by the success of the wii) and the wii (which can run GC code) still has releases and not only has the file system decrypted but methods by which to run custom code other than homebrew built from the ground up.
On all those consoles simple graphical tools (or even game specific tools/info) do not really exist at this time for all but a handful of games on all the consoles; these games usually include pokemon, fire emblem, advance wars, mario platform games, mario kart, smash brothers and many other first party Nintendo or otherwise popular games games. Given the nature of ROM hacking this is not likely to change or ever cover more than the basics although a lot can be done with a few tools and a little bit of knowledge, this is especially true of sound hacking which was long considered one of the hardest areas of ROM hacking.
The rather technical nature of ROM hacking coupled with the tendency towards high level coding being taught elsewhere as well as the somewhat legally and ethically dubious nature of it makes people wanting to take up this fascinating subject can face a steep learning curve.
This guide aims to help people come in “cold” (you know little of computers but have a desire to learn) as well as “retrain” (you can already code but this hacking thing is something relatively new) and although it is not explicitly aimed at such people it should hopefully be of some use for those already versed in ROM hacking to use as a reference manual. This relatively broad range of targets means some areas will repeat things, other times things which have not be detailed extensively yet will be referred to. To some extent this is unavoidable but the guide should allow you to skip backwards and forwards.
The original reasons for writing this was that if you visit any sites with a focus on ROM hacking you will generally get told to learn to hack nes/SNES/Megadrive (Genesis to those in the US)/Master System ROMs and then move on to “harder” systems like the GBA/DS/GC and Wii. Should you ask specifically how to hack GBA/DS/GC/Wii you will be told to look at the general/NES/SNES documents to learn as it applies to “harder”/newer systems.
Doing such things would not be following a bad line of logic but a guide geared exactly towards what you want can help and the later consoles also avoid some of the annoyances with earlier consoles; memory/space limits are less harsh if they exist at all, the hardware has relatively few quirks and there is quite a bit of conformity between titles.
License stuff:


Thankyous. Rather than place them at the tail end of the document the people directly responsible are featured here.
Thanks from FAST6191 to:
People at gbatemp.net and sosuke.com, original hosts of this and extremely active discussion boards on GBA, DS, GC and Wii hacking.
Romhacking.net the people there have helped more than they probably know with this.
Deufeufeu, rom hacker, spec writer and sounding board for a lot this.
Martin Korth, author of no$gba and the awesome technical document on the GBA and DS (there would not be this document without it).
All team members of the original and forked Jump Ultimate Stars translation project.
Cracker, author of DSATM and countless other cheat tools, guides and codes for all manner of systems as well as discussion on this.
Slade, cheats guides, cheats and discussion.
Anyone I have ever had a discussion with on ROM hacking.
All regulars of #gbatemp.net on irc2.gbatemp.net::5190 and all regulars of #ezflash on irchighway.
Any and all authors of tools/guides/posts that have been linked.


So first what is ROM hacking.
It is the name given to the action of changing a rom (or despite the misnomer iso) in some way that is useful to someone else. This can include translation, improvement (better font, better handling of text, more balanced stats), restoration (sound, themes and working around censorship mainly) and a myriad of other things.

What can be done? Absolutely anything. The trouble comes in the difficulty in pulling it off, there are no hard and fast rules as to what is more difficult but generally changing text and graphics is easier than changing a racing game into an RPG.

What do I need to know/have done to become one? This one is a bit harder, I personally have never been officially taught anything about computers at any level much beyond "if you happen to be typing all in capitals press the caps lock key".
Generally I find people who have a great interest in figuring out how things work and being in possession of a bit of patience make for good ROM hackers.
Some advocate experience and while it is useful I believe the following analogy concerning normal human language serves a good example:
How many people might you have met who have been speaking/writing a language for 50 years yet what they speak/write is awful with regard to what the language actually is? Experience is not all powerful.
Likewise how many of you have met foreigners speaking your language who probably possess a greater knowledge of the the implementations of irregular verbs and are far more able to communicate (even if it is their own language) what a pronoun is than you might be able to, yet due to them only knowing 70 odd words they might as well not have bothered? Technical knowledge is not all powerful.
On the subject of language English is probably the most commonly used language for this sort of thing (technical discussion) so it is probably best to become acquainted with it.

Some thoughts though, I personally study how computers work from the ground up and how the specific platform I am hacking a game for works and go from there. Others find it better to know what you want and then go a step higher in the abstraction which works quite well too.
Modern consoles (the GBA, DS, GC and Wii all count here) however do not tend to use assembly coding (just quickly assembly is the type of coding that revolves around changing the hardware manually, it is only different to altering the raw data the game uses by abstracting it to a more human readable form) as much owing to it be far more complex than it may need to be for not a lot of/any real gain. To this end the console makers should provide extensive software development kits to developers and this means games often share features (and more importantly formats) and this can be abused by ROM hackers.
However the mere fact ROM hacking exists should say that someone can do something better (or in a manner perceived to be better) than someone else. This means that purely relying on SDK based hacking can fall flat on occasions developers decide to change or write additions (or even badly implement) the SDK, the format was not correctly reverse engineered (if you pulled apart a format and later another game uses a feature the original sample file did not use is a good example of a pitfall of this method) or attempt to obscure their code (normally against cheaters but this does have a knockon effect for ROM hacking).

The main thing about rom hacking though is data representation, storage thereof, limits of the representation/storage and how a game does this. The nice thing about the DS and newer consoles is that they usually use a file system that is known which provides a great jumping off point- file names, extensions, sizes and more often lead you right to the format's doorstep.

How to pull apart your Roms

The following paragraphs detail how to pull roms apart into the files that make them up, generally it is not very useful if you can not flank it with other hacking skills but in many cases simply being able to look at the things that make it up is enough to inspire people to sit through the dry stuff you need to know to be a hacker.
The following will not cover much of the common formats used by the consoles, how to deal with roms that pack things inside archives (a common occurrence) or indeed even mention much about simply swapping/renaming files (a brutally simple but often a very effective hacking method) as that comes later.

GBA
This is only mentioned in passing. Some tools have been made (looking mainly at golden sun and pokemon) for various file types and locations but generally the rom is packed all in one file.
There is however a fairly advanced method called tracing that can find what you need relatively quickly and easily once you know how
http://www.romhacking.net/docs/361/


Nintendo DS extraction tools
The DS uses the nitro rom file system, several tools exist for extracting things from it.
Most hackers then scan the files contained using several methods including by not limited to checking names, checking extensions, checking locations, checking sizes, using techniques like relative searching and many more within so as to hit upon their chosen piece of data to hack.

Owing to the very same niceties that come with a file system tracing does still exist on the DS but it is a comparatively advanced technique and few do it for the DS. You have to follow the DS read protocols and figure out what it directed at what (it is abstracted at several levels too which is nice for rom hackers when it comes to putting things back together) http://nocash.emubase.de/gbatek.htm#dscartridgeprotocol has more on the read protocol.

There are several other tools available but the ones above should be able to sort the file system for most people. Some more considerations are required when it comes to releasing "production grade" patches but that will be covered later.

Many of the early DS hackers figured out some of the basics by pulling apart roms and attempting to shrink them, it was from here that they figured out common formats and ultimately branched out into more general DS hacking. Today with multi gigabyte DS cards and roms rarely being more than 256 megabytes nobody really rips roms but if you wanted to look back over some of the basics they are still available Rom ripping and enhancements (backup of very old thread)

Ndstool- this is the standard go to tool of most DS hackers. It does however have limitations like not being able to rebuild certain games without them crashing.
http://filetrip.net/nds-downloads/utilities/download-nintendo-ds-rom-tool-ndstool-1501-f29352.html

It is a command line only program but there are frontends (both require .net) in two programs called DSLazy and DSBuff. Many hackers have their own batch files/scripts to unpack games.

NDSTS
A nice little graphical program that details lots of information about the DS ROM you feed it. The main limitation is that it only allows files of the same size to be replaced in the rom. It keeps things clean so it means it can be used for example hacks and small hacks that you do not want to change the entire rom for and as such roms edited with this will not crash like they can do for ndstool.
It is available http://www.no-intro.org/tools.htm

Crystaltile2
An all in one hacking tool for the DS that will feature extensively in this guide and romhacking in general (a guide to the program is available Guide to crystaltile2 ). Naturally it features DS file system support.
It is developed sporadically by various Chinese developers but the current version should always appear on filetrip below
http://filetrip.net/f23649-CrystalTile2-2010-09-06.html

Tinke
Another all in one program like crystaltile2 above but with more focus on formats, sound and 3d. Also frequently works where NDStool falls short.
gbatemp thread

Nitro explorer
Aimed at replacing ndstool and being able to work with games NDStool can not.It does what it sets out to do.
filetrip download

Gamecube
Disc based media tend to be file system based and the Gamecube is no exception.
Gamecube games comes as a .gcm files (often renamed to .iso). It is not signed for the GC or the Wii, files are region locked but a there are tools and most chips (GC or wii) should bypass this.
Support for multiple games per disc is done at iso level with several tools able to do it. Size limit is 1.4 gigabytes (miniDVD) for gamecube and DVD size (4.35 gigabytes) for Wii games if making a multiple game disc.
Gctool:
http://filetrip.net/f818-GC-Tool-1-20-beta.html
GCMtool is good for unix like operating systems (X86 and ppc versions exist):
http://filetrip.net/f606-GCMUtility-0-5.html
http://www.sadistech.com/gcmtool/tutorial.php
http://filetrip.net/wii-downloads/tools-utilities/latest-gamecube-iso-tool-f28774.html

There are many other tools for nearly every common OS if these do not suit your needs.

Wii
Comes as a .iso file. Actual data is signed (junk/padding is not hence the exception for “scrubbing” the iso), the decryption key is known and various bugs (see trucha bug in encryption above) allow for data to pass signing checks.
Size limit is DVD9 at 8.7 gigabytes (DVD5 at 4.35 gigabytes is the usual standard). Unknown how far this can be pushed for the USB loaders.
Most hacks allow for region free, USB loading and more.

The main tool for all this is a program called wii scrubber

http://filetrip.net/f4399-Wiiscrubber-Kit-...oader-1-40.html

Also useful Wiimms ISO Tools
http://wit.wiimm.de/

For the wad files (virtual console, wiiware and the like)
Libwiisharp example programs
http://libwiisharp.googlecode.com/files/libWiiSharp 0.21.rar
Older tools like wwPacker can also work but might have issues. It might need to be combined with a u8 compression tool like u8mii (u8tool is now considered somewhat deprecated).


A largely outdated collection of links
I would not be surprised is most of these are dead or otherwise out of date in some manner.

A nice list of various things is also available in http://gbatemp.net/t73394-gbatemp-rom-hack...t&p=1221059 for now at least.
A pokemon hacksite:
new: pokemon editing tools for DS roms by D-Trogh http://gbatemp.net/index.php?showtopic=94499&hl=

http://wah.studiopokemon.com/herramientas/herramientas.php One of the main questions asked is how do I hack pokemon (and to be fair it has a nice engine to start with). This site has tools, info and discussion.
As does this site: http://www.pkmncommunity.com/
and this site:
http://pokeguide.filb.de/programs.php
and this site:
http://www.pipian.com/ierukana/index.html
That will be all on pokemon for now.

Gavins guide to x86 assembly: while the x86 is nowhere to be seen in this it provides a great intro to assembly in general.
contents page
GBATek specifications:
http://nocash.emubase.de/gbatek.htm The document for all things GBA and DS hardware based.
Lowline's format specifications
http://llref.emutalk.net/docs/
older version with more on SDAT
http://www.romhacking.net/documents/469/
Compression:
http://www.ics.uci.edu/~dan/pubs/DataCompression.html Compression is an important part of rom hacking and one frequently assumed to be too hard to deal with for all but the best hackers. This is wrong and that site is a bit academic but combined with some of the other links can get it done.
Wave file format:
http://www.sonicspot.com/guide/wavefiles.html Not quite related to the DS (it does do IMA-adpcm) but a nice intro to specifications for files which if you plan on doing work with the wii, GC and DS you will use very often.

Some gamecube and by extension wii links:
http://wiki.xentax.com/index.php?title=Just_Cause_ARC (the main site also deals with lots of file formats)
http://hitmen.c02.at/files/yagcd/yagcd/index.html
http://www.emutalk.net/showthread.php?t=26919
http://forum.xentax.com/viewtopic.php?t=2105
http://www.hitmen-console.org/
kiwi.DS site:
http://kiwi.ds.googlepages.com/sdat.html SDAT (DS sound) specifications.
http://kiwi.ds.googlepages.com/nsbmd.html (DS 3d (mainly nintendo game) format) See GBATek for more low level stuff for other games.
Romhacking.net Tracing with VBA-SDl-h:
http://www.romhacking.net/docs/361/ Sometimes you need to find where something is stored in a GBA rom, this document explains how to do it with an emulator. Likewise the main site and forum deals with some very interesting topics. VBA-sdl-h thread there: http://www.romhacking.net/forum/index.php/topic,4521.0.html
Patersoft:
http://www.patatersoft.info/ a nice guide to DS programming and a bit more gentle introduction the DS hardware than GBATek.
A site with some GBA rom formats:
http://www.datacrystal.org/wiki/Category:G...y_Advance_games
enhacklopedia:
http://cheats.gbatemp.net/hack/index.html favours cheating over hacking but most definitely worth a read.
My thread on DS rom rips and enhancements:
http://ezflash.sosuke.com/viewtopic.php?t=457 Basic file system stuff really but it is what got me into DS hacking.

GBA sound:
There is a somewhat common GBA sound format usually known as Sappy although tools and techniques are slightly less developed than the DS and it is not quite as common.
Atrius did a lot of work for it with Golden Sun ( http://gbatemp.net/t109517-golden-sun-tla-...ta-ripping-tool ) and http://gbatemp.net/t230202-gba-sappy-sound...ion-by-bregalad has some more.
There is a tool called sappy (you will want the newest version, one of the 2006 versions and the original)
http://filetrip.net/gba-downloads/tools-utilities/download-sappy-2006-mod-171-f30549.html
An older tool called sap tapper works for some games http://caitsith2.com/gsf/ripping.html
Also http://code.google.com/p/loveemu/downloads/list has some stuff.
Otherwise it is hardware from the ground up unfortunately, http://belogic.com/gba/ is a pretty good companion to GBAtek for sound purposes.

Liranuna's page: http://liranuna.drunkencoders.com/nds-2d-tuts/lesson-1 more DS development.
Crystaltile2: a nice hacking tool. Cory1492 made a translation and it is available on this thread:
http://gbatemp.net/index.php?showtopic=131468
Old links
http://gbatemp.net/index.php?showtopic=60675 Main site (Chinese) http://www.angeleden.net/crystaltile.htm

Compression basics on the GBA (shared with the DS and the concepts used are common across all lossless compression)
http://members.iinet.net.au/~freeaxs/gbaco...ion%20Functions
GBAcrusher is a good bios compatible compression app and is available from the link above.
Recently several great tools for the DS compression have been released http://gbatemp.net/topic/313278-nintendo-dsgba-compressors/ and http://code.google.com/p/dsdecmp/ are the main two.
http://gbatemp.net/t274472-codec-lzss-ds-released has some discussion on the subject.

kenghot's site: In Thai for the most part but kenghot is a fantastic rom hacker and it also has some game specific stuff:
http://www.kenghot.com/
acclms board, a ton of useless info and fairly reknowned for infighting and other nonsense but there are occasionally some really great/informative posts:
http://acmlm.no-ip.org/board/forum.php?id=19
Treeki's site, has a NSMB editor and a rom packer that supposedly works better than ndstool (I have yet to test it though and my carts tend to work fine with ndstool)
http://treeki.googlepages.com/

GBA trainers: http://gba.dellicious.de/trainer.php?s=n&o=asc&d=
GBA cheats:
http://ezflash.sosuke.com/viewtopic.php?f=3&t=686
GBA trainer beginnings:
http://gbatemp.net/index.php?showtopic=39979&hl=
GABSharky guide:
http://home.versatel.nl/derks202/smj/files...ing%20Guide.zip
original thread (Dutch language) http://gathering.tweakers.net/forum/list_messages/942567/26

Do a forum search for crackers trainer guides too. They are available along with a whole host of tools that are sometimes hard to find from http://min.midco.net/cracker/
 
Last edited by FAST6191,

FAST6191

Techromancer
OP
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,321
Country
United Kingdom
Been spending a lot of my days redoing the guide* and getting some stuff up on filetrip for it. I have very nearly finished the text section (just some basic usage on Atlas and Kruptar even though I am not entirely sold on their usefulness for a lot of what we deal with on the DS) and as part of that though I was checking out alternative and although I am late to the party I had not seen it discussed around here
Links
http://www.magicteam.net/index.php?page=programs
http://filetrip.net/pc-downloads/applications/download-oriton-2050-f29376.html
29376-romhackingguidertexttablemakingOriton1.png


Oriton is a table making program and for some purposes it may edge out TaBuLar (the only real downside is it does not have nice options for adding the various orders of Kana and the Roman alphabet- right click and you can add a codepage but not a lot else or you can just visit http://www.rikai.com/library/kanjitables/kanji_codes.sjis.shtml and engage in a bit of copy and paste). It does however have serious support for 16 bit and beyond encodings where others fall flat and a really nice regular expression style input box as well as Kruptar support (the other main competitor to Cartographer and romjuice for text extraction).
Basically if you play around with table files on a semi regular basis definitely give it a go.

*sitting around 85K words with a tiny bit on 2d, a lot on 3d, some worked examples in audio hacking, more or write the entire video section, some more ASM stuff, maybe some more on stats and level editing and a bit on python to do. Alas it is a bit raw right now in places or I would do a preview release.
 

FAST6191

Techromancer
OP
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,321
Country
United Kingdom
Double post I know but I just wanted to note in this thread beyond an edit to the first page and a portal post that the 2012 rewrite is well under way and a very early preview of them is up on filetrip. PDF only for now but I will convert them to HTML properly in the near future (right now it wants to make 9 megs of HTML and pictures on a single page). Suggestions, typo fixes and more are welcome. Part III needs a fair bit of work and there are a handful of GBA topics that want some work (some more on sappy audio and affine sprite transformation) in Part II but part II which contains discussion of the techniques used in rom hacking and GBA/DS hardware is for the most part done.

Filetrip download

I Introduction 11
II Rom hacking concepts 14
1 Basics 14
1.1 Hexadecimal 14
1.1.1 Representation 16
1.1.2 BCD (Binary coded decimal) 17
1.1.3 Big and little endian 18
1.1.4 Signed values, floating point and fixed point 18
1.2 Hex operations 23
1.2.1 Shift 23
1.2.2 Rotate 24
1.2.3 Flip 24
1.2.4 Boolean logic 25
1.2.5 Hex Mathematics 27
1.3 Patching and patch making 28
1.4 File systems and operations 29
1.4.1 GBA 30
1.4.2 DS 30
1.4.3 GC (gamecube) 31
1.4.4 Wii 32
1.4.5 Xbox 32
1.4.6 Xbox 360 33
1.4.7 PS1 and PS2 34
1.4.8 PS3 34
1.4.9 PSP 34
1.4.10 Saturn 35
1.4.11 Dreamcast 35
1.4.12 Amiga 35
1.4.13 PC and related hardware 35
1.5 Finding the object of your interest 36
1.6 Abstraction 37
1.7 Tools of the trade continued 38
1.7.1 Hex editor 38
1.7.2 Tile editor 50
1.7.3 Spreadsheet and command line 54
1.7.4 Compression 56
1.7.5 Music 57
1.7.6 ASM 58
1.8 Basic file format concepts 62

2 Graphics 64
2.0.1 Aliasing 65
2.0.2 Haloing 66
2.0.3 Bit depth 66
2.1 Palettes and colours 66
2.1.1 GBA colours (15 bit) 66
2.2 Tiles 67
2.2.1 1Bpp 67
2.2.2 4 Bpp 68
2.2.3 8Bpp 68
2.2.4 GBA3 Xbpp 69
2.2.5 GBA2 4BPP 71
2.2.6 Bitmap 74
2.2.7 Known formats 74
2.2.8 Crystaltile2 export and import 74
2.2.9 Avoiding gradients, AA, lossy/noise and such things 79
2.3 Layout, timing, OAM and special effects 79
2.3.1 Introduction to the OAM and BG modes 79
2.3.2 Timing 80
2.3.3 GBA and DS OAM (sprites) 81
2.3.4 GBA and DS BG modes 84
2.3.5 Basic animation 88
2.3.6 Window feature 93
2.3.7 Special features (flipping, affine transformation, alpha and such) 93
2.3.8 Basic DS layout formats and mapping 95
2.3.9 Video memory handling and alignment 98
2.4 3d 98
2.4.1 Basic 3d (bones, coordinates, keyframes) 99
2.4.2 Viewpoints 101
2.4.3 Textures and material colours 102
2.4.4 Models 103
2.4.5 Lighting/shadows 104
2.4.6 3d smoke and fog 105
2.4.7 Animations 106
2.4.8 DS 3D hardware 107
2.4.9 The shift of the 3D to DS 2d 109
2.4.10 NSBMD 109
2.4.11 Non NSBMD 119
2.5 Notes and further reading 120

3 Text 121
3.1 Tables 121
3.1.1 Relative searching 123
3.1.2 Corruption and alteration 130
3.1.3 Memory viewing and corruption 132
3.1.4 Frequency analysis 134
3.1.5 Language analysis 136
3.1.6 Pointer and encoding/hex analysis 137
3.1.7 Assembly tracing 137
3.1.8 Font viewing 137
3.1.9 Language comparing 138
3.1.10 Table creation tools 138
3.2 Pointers 141
3.2.1 Special cases and non pointer concepts 142
3.2.2 Example reverse engineering of pointers 143
3.3 Markup, control codes and placeholders 148
3.3.1 Worked example 148
3.4 Fonts 153
3.4.1 NFTR 154
3.4.2 Common hacks 160
3.5 Scripting and layout 163
3.5.1 Layout and limits 171
3.6 Text extraction and insertion 172
3.6.1 Text extraction 172
3.6.2 Text insertion 175
3.7 Language detection in DS games 177
3.8 Translation hacking 178
3.8.1 The types of Japanese characters and how they work 179
3.8.2 Japanese glyphs/characters and observations on the language 182
3.8.3 On language 183
3.9 Japanese text editors and translation tools 184
3.9.1 General Japanese capable text editors 184
3.9.2 Rom hacking tools 184
3.9.3 CAT tools 185

4 Multimedia 186
4.1 Sound 186
4.1.1 SDAT (NDS) 190
4.1.2 Others 198
4.1.3 Tracker formats 199
4.1.4 General rule of thumb for custom audio formats 200
4.1.5 Common DS SDAT audio hacks (undubbing, injection,
tweaks and relinking) 200
4.1.6 GBA audio 220
4.2 Video 224
4.2.1 General video theory 225
4.2.2 Mods/VX/act imagine by Mobiclip 226
4.2.3 RAD/Bink 226
4.2.4 Criware 227
4.3 Cut scenes 227

5 Game logic 229
5.1 Levels and Stats 229
5.1.1 Example tools 231
5.1.2 Level editing techniques 232
5.1.3 Stats 243
5.2 Compression 244
5.2.1 Lossy 245
5.2.2 Lossless 245
5.2.3 Basic theory of the actual implementations 246
5.2.4 Compression at hexadecimal level 251
5.3 Cheating 254
5.3.1 General cheat making 255
5.3.2 GBA cheat making 256
5.3.3 DS cheat making 258
5.3.4 Basic making of a cheat 262
5.3.5 Cheat prevention methods and frustrations 265
5.3.6 Instruction editing cheating 269
5.4 Programming concepts 272
5.4.1 Functions and procedural programming 272
5.4.2 IF ELSE 273
5.4.3 Recursion 273
5.4.4 Iteration 273
5.4.5 Loops 274
5.4.6 Turing complete 274
5.4.7 Fundamentals of Assembly 274
5.5 Assembly 278
5.5.1 ARM 279
5.5.2 GBA Assembly specifics 280
5.5.3 DS Assembly specifics 285
5.5.4 The GBA and DS compared 289
5.5.5 On controls 290
5.5.6 Hooking 291
5.5.7 GBA cart as extra memory for DS hacks 292
5.6 Non specific assembly discussion 292
5.6.1 Language mod example 292
5.6.2 Non code in ASM 296
5.6.3 Destructive vs non destructive assembly editing 296
5.6.4 Polymorphic and dynamic code 297
5.6.5 Slowdown and speedup 299
5.6.6 Cryptography (encryption, checksums and signatures) 300
5.6.7 Save editing 306
5.6.8 Interpreted languages 307
5.6.9 Game AI, game logic and game theory 307
5.7 Flash cart and emulator theory 311
5.7.1 GBA 313
5.7.2 DS 315
5.8 Rom hacking "protection" 317

III Examples, oddities and techniques319
6 Crystaltile2 general usage guide 319
7 GBA tracing 325
7.0.1 Worked examples 326
8 DS tracing 326
8.1 Cart read command 327
8.1.1 Basic lookup and methods for it 327
8.1.2 Header reverse engineering/generated values 327
9 Reverse engineering various ROM images 327
9.1 Large archive on top of filesystem 328
9.1.1 Tony Hawk 328
9.1.2 Star Wars - The Force Unleashed 328
9.1.3 El Tigre Make my mule 328
9.2 Compression 328
9.3 First Person Game 329
9.4 Platformer 329
9.5 Fighting games 329
9.6 Role playing games 330
9.7 Racing games 330
9.8 Puzzle 330
9.8.1 Mahjong game 331
9.8.2 Tetris 331
9.9 Other genres 331
10 Developer leftovers 331
11 Workarounds 332
12 Moving to a new system 332
13 Developer tricks aka thinking like a game developer 333
13.0.1 Level and mechanism design 334
13.0.2 Sprite and palette reuses 335
13.0.3 Pre rendering 335
13.0.4 Speed blur and fog 335
13.0.5 Loading covers 335
13.0.6 Optimisation of loading 336
13.0.7 3d imagery in general 336
13.0.8 Procedural generation 337
13.0.9 Noise on images and sound 338
13.0.10Using the limits of the system/working to them 338
13.0.11Network coding 339
14 Game design and media 339
15 Python, batch files and programming for rom hacking 340
15.1 ROMulan Data Extractor/Injector 340
15.2 Programming languages 341
15.3 Python 341
16 PC program hacking 342
16.1 Debugging 343
16.2 Decompilation 343
17 Version control and project management344
17.1 Project and team management 344
17.2 Version control 346
18 Interesting links and further reading347
18.1 Links 347
18.2 Further reading 347
IV File formats (specications, methods and known formats)349
19 General things about the DS 349
20 Generic DS nitro SDK format 349
21 General file reverse engineering 349
21.1 Headers 350
21.2 File sizes 350
21.3 Multiple versions of the game 350
21.4 File names and extensions 350
21.5 Tile viewers 350
21.6 Pointers and such 351
22 Sound 351
22.1 SDAT 351
22.2 SSEQ 352
22.3 STRM 352
22.4 SWAR 352
22.5 SWAR 353
22.6 BANK 353
22.7 Other formats 353
23 Graphics 354
23.1 NCER 354
23.2 NANR 355
23.3 NCGR 355
23.4 NSCR 355
23.5 NMCR 356
23.6 NFTR 356
23.7 NSBMD 356
23.8 NSBTX 357
23.9 NSBCA 357
24 Packing format 358
24.1 NARC, ARC and CARC 358
25 Text 358
25.1 BMG 358
V Glossary, index and such 360
26 Glossary 360
 

Mewster

Member
Newcomer
Joined
Dec 4, 2011
Messages
10
Trophies
0
XP
294
Country
Italy
I can't download the new guide; when i click the download selected versifon it opens a popup and nothing happens; i click the "If your download doesn't start within the next 5 seconds, click here to start it manually" and it opens in the same popup another unrelated filetrip window
 

FAST6191

Techromancer
OP
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,321
Country
United Kingdom
Works fine for me. Still mirror if you want it http://trastindustries.com/romhacking2012preview2.pdf I can not promise I will keep it up to date though so best if you do not share the link far and wide.

Edit, on an entirely unrelated note and although I am quite happy with arm-eabi assemblers and armips some might like http://arm.flatassembler.net/ which I ran across the other day.
 

Tattorack

Interstellar Explorer
Member
Joined
Jun 15, 2011
Messages
267
Trophies
1
Age
30
Location
Calisto Prime Orbital
Website
tattorack.deviantart.com
XP
428
Country
Denmark
Hey, I'm not sure if it counts but on my mac (was a while back when I still had one) I accidentally double-clicked on a .nds file and it got fully extracted with the standard .zip tool that comes with Mac (Tiger 10.4.11 I believe...)
I could actually poke around in the roms separated files...
Not sure what rom it was anymore (I think its one of the Spyro games)...
 

I pwned U!

I am pleased to beat you!
Member
Joined
Jun 14, 2013
Messages
927
Trophies
3
Age
28
Website
gbatemp.net
XP
680
Country
United States
Since the contributors to this thread seem to know a lot about ROM hacking, I have to ask, can anyone figure out any method of changing the graphics in Bowser's Inside Story? They all seem to be stored in .dat files and I have looked all over the internet, but could not find any advice. Any help would be appreciated (especially if it leads to a way of creating custom graphics).
 

Doux91

Well-Known Member
Member
Joined
Feb 23, 2014
Messages
306
Trophies
0
Age
33
XP
961
Country
Honduras
well i want to translate Monster Hunter G to my language, maybe your guide can help me, thank you!
 

Shiny_Lucario

New Member
Newbie
Joined
Mar 7, 2013
Messages
4
Trophies
0
Age
24
XP
73
Country
United States
Hello, I would like to know if anyone has any luck on translating the "Tengen Toppa Gurren Lagann" DS game, I would really like a translate link if anyone could provide one, I've been searching for a couple of hours so far, and no prevail. I have seen the topic on this thread asking for a translation but that got me nowhere.
Edit: I forgot to mention I would like an English translation

-Thank you, Shiny_Lucario
 

FAST6191

Techromancer
OP
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,321
Country
United Kingdom
Owing to no$gba being free and having changed domain (only a basic redirect seems to be in place) I thought it best to update it as several links inside the document were kind of broken as a result, the specs have been updated as well so I am hoping the headings/urls have not changed within the gbatek document itself. I have been updating pieces over the last couple of years, playing editor and have even added a couple of new sections. However if something was not finished in the previous release then chances are it is not finished now. Equally some tools have been updated a bit, especially vgmtrans, no$gba and desmume, so some of that is a bit outdated (and not just from my old XP machine using the themes of even older versions of windows).
I may well have a bit of free time over the coming months so I will be doing more, however with the no$gba changed domain it felt worthwhile to spin out a new version. Still just PDF for the time being, HTML (which will probably have some videos for a few things) and the source of the document will have to come later. I did also have a version with slightly more sane borders in the works but that got sidelined for the time being (a lot of the images sizing and placement has been tied to text/column size).
Speaking of image sizes if they are too small to see it should just be scaling so you can zoom in on your PDF viewer and see them at the size they should be at.

You can get it on filetrip:
http://filetrip.net/nds-downloads/u...-rom-hacking-guide-2014-preview-1-f32908.html
I will have a version on my server at some point as well.

I have since moved to Linux for my main machine so there may be some fallout thanks to having to migrate from mitex on windows to texlive on Linux (I am not cool enough to use tex/latex so I use Lyx, getting it back to the point where it could spit out a PDF saw me have to learn more about tex and latex than I really wanted to do yesterday afternoon). It does seem to be reflected in the font and some of the pictures.

I don't think I will frontpage this one for the time being but if people want to share it then feel free.

If you encounter broken links in GBAtek then please tell me and I will see what can be done, likewise if there is some image placement is too off (I did decide to do some stuff with boxes to keep related text and images together) or some other broken URL then do also tell me.
 

EarthBound 2

Banned!
Banned
Joined
Feb 22, 2014
Messages
284
Trophies
0
Age
29
XP
229
Country
Poland
Is there different solution to unlock Egg Gauntlet.Anyways did you know how to add unused stuff from mother 3 beta to final version?
 

FAST6191

Techromancer
OP
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,321
Country
United Kingdom
I tends to help to say what game you are on about. Egg Gauntlet would then appear to be a bonus mode that was cut from the eventual release of Sonic 2 remastered, however for the first version (later updates removed them) the files for it all were left in there. I imagine you could stitch it back together and have it available somewhere easy to select but given I only learned what it was about 3 minutes ago I do not know a method offhand.

Mother 3 beta is new to me. Is this an official beta or some kind of beta of the translation? The answer remains mostly the same either way but it can change how I play it. Generally it depends upon how the extra stuff from the beta was removed, how it was coded originally and what space you have to play with (mother 3 being especially noted for a lack of space, doubly so with the translation applied).
If the devs just removed an item from the map and called it a day you just add it back to a map/shop and you have it back. If they removed the art and the code for it then you get to add that back in which is easier said than done. If they replaced it wholesale (128 item slots, 128 items, 2 removed and 2 new items added for instance) then you have a fairly hard hack on your hands, not that the one before it always easy.
 

EarthBound 2

Banned!
Banned
Joined
Feb 22, 2014
Messages
284
Trophies
0
Age
29
XP
229
Country
Poland
Beta sprites from mother 3 are accessible by two ways:
unlocking them as scrap game genie cheat codes of exploring sprites using mother 3 funland.Do you know YouTube user kiribii probably rip off music from EarthBound 64?
 

FAST6191

Techromancer
OP
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,321
Country
United Kingdom
With google code possibly being on the way out ( https://code.google.com/p/support/wiki/ReadOnlyTransition ) and otherwise having a few broken links I thought I would update some things, I need to find another copy of cracker's newer ARM ASM kit ( armasmkit.rar , see also https://web.archive.org/web/20100323015315/http://crackerscrap.com/projects.php ), it is probably on an old hard drive somewhere though. I have not added much (a very short section on RPG randomisers is the main thing, some of the more advanced parts of GBA audio hacking are still unfinished, http://www.feshrine.net/hacking/Fire Emblem Music Hacking Tutorial.pdf has more if you really want it). That said I have continued to tidy some stuff up, modernise a small handful of things, expand on some other things and generally tweak things as I see them.
Still no HTML version, though I have moved the page format (if not much of the text/margins) to A4 from US letter which it was before in anticipation of this.
I plan to get back into this far more so this will just be an early preview and only posted to sort some of the broken links issues. As such I will likely not frontpage it here, though if you want to update your mirrors or share it with your mates then go for it.
Download
http://filetrip.net/nds-downloads/u...-rom-hacking-guide-2016-preview-1-f33419.html

Google code wise I have left a few things in there and put github links wherever they need to be. I am slightly concerned as some google code pages had compiled binaries where github did not always carry them (or it puts them under the releases tab). I will address that at a later date though.
romhacking.net have recently gone register to download to help dodge some issues with google calling them a malware pusher (very much a false positive). I did not change much here, hopefully most of the key tools should be on filetrip. When I get back to editing in earnest I will mirror everything I can.

I also spoke to the monkey moore author as well so just to help searches update then he moved from google code to github, and linked me to https://github.com/rjricken/monkey-moore should you want such things.
Most others seem to have a "moved to" link, if not a straight redirect.
 

FAST6191

Techromancer
OP
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,321
Country
United Kingdom
The website stuff is ancient if you have been looking at that, I abandoned it long ago so if it is that you are referring to then it is never going to get fixed.
Just downloaded a fresh copy of the pdf from filetrip. Worked fine in http://www.gnome.org/projects/evince 3.something and has worked fine in other readers I have tested it in for other computers since the version made earlier this year. That looks like an encoding issue for your setup, I am not sure what it would be but if you have forced it to try to decode a certain language then it might be that.
There are a bunch of blank tables at the end as I never got around to filling them in but had the tables there ready to go. Most things that would be covered in it are covered in http://llref.emutalk.net/docs/ and http://www.romhacking.net/documents/469/ and other links scattered throughout the relevant sections.
 

gudenau

Largely ignored
Member
Joined
Jul 7, 2010
Messages
3,882
Trophies
2
Location
/dev/random
Website
www.gudenau.net
XP
5,378
Country
United States
The website stuff is ancient if you have been looking at that, I abandoned it long ago so if it is that you are referring to then it is never going to get fixed.
Just downloaded a fresh copy of the pdf from filetrip. Worked fine in http://www.gnome.org/projects/evince 3.something and has worked fine in other readers I have tested it in for other computers since the version made earlier this year. That looks like an encoding issue for your setup, I am not sure what it would be but if you have forced it to try to decode a certain language then it might be that.
There are a bunch of blank tables at the end as I never got around to filling them in but had the tables there ready to go. Most things that would be covered in it are covered in http://llref.emutalk.net/docs/ and http://www.romhacking.net/documents/469/ and other links scattered throughout the relevant sections.
I was talking about the PDF, try copying some text.
 

FAST6191

Techromancer
OP
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,321
Country
United Kingdom
Hmm, got that as well. Probably still an encoding issue somewhere along the line as it seems to match length after a fashion and is repeatable. I certainly did not intentionally protect or wish to stop anything like that.

Spun off another version using a different exporter
http://trastindustries.com/randomfiles/romhacking2016_copy_1.pdf
Not sure what I have changed since last time but nothing major. Others reading if you are happy with what you have then no need to get this, I can't promise that will still be there at some point in the distant future.

Image quality will probably not be as great, though nothing was intended in that as a photo and it all appears just as readable as it ever was, and some of the footnotes and formatting needs work but it does appear to allow you to copy from it.
 
  • Like
Reactions: I pwned U!

gudenau

Largely ignored
Member
Joined
Jul 7, 2010
Messages
3,882
Trophies
2
Location
/dev/random
Website
www.gudenau.net
XP
5,378
Country
United States
Hmm, got that as well. Probably still an encoding issue somewhere along the line as it seems to match length after a fashion and is repeatable. I certainly did not intentionally protect or wish to stop anything like that.

Spun off another version using a different exporter
http://trastindustries.com/randomfiles/romhacking2016_copy_1.pdf
Not sure what I have changed since last time but nothing major. Others reading if you are happy with what you have then no need to get this, I can't promise that will still be there at some point in the distant future.

Image quality will probably not be as great, though nothing was intended in that as a photo and it all appears just as readable as it ever was, and some of the footnotes and formatting needs work but it does appear to allow you to copy from it.
The main problem for me is not being able to search for things, but the copy and paste is a great way to show it. It seems almost like it is using a custom font with a strange character map.

Edit:
This one is searchable, which is nice. Thanks.
 
Last edited by gudenau,

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
    SylverReZ @ SylverReZ: :rofl2: :rofl2: