display | more...

Table Files are files which are pretty much essential for any budding ROM hackers to get their heads round. Basically, in the code of a video game ROM, data is usually stored in hexadecimal format. This data, among many other things, is often used to relate to blocks of text (since there are blocks of text in almost every game, even if it is only the copyright text on the title screen). But with only 16 different hex values, and any number of characters to be displayed (for example: some games have a full lower case alphabet, a full upper case alphabet, full set of punctuation (including all those signs you have on your number keys on the keyboard), Spaces, a load of other random signs...). So clearly, using one hexadecimal character for each letter to be displayed will not work.

However, using two hex values together gives us a rang of $00 - $FF. If you can't work it out for yourself, in decimal, that's 256 values ($00 is decimal 0, $FF is decimal 255). And that's more than enough for any game - you could almost have ten complete alphabets with that system.

So when hacking a ROM, it's useful, to say the least, to know which two hex values mean which character. In fact, if you're doing any text replacement at all, it's essential.

So Table Files were created. They simply contain values that the game displays (such as A, B, C.... X, Y, Z, a, b, c... x, y, z) together with a hex value which represents them. Most games have the alphabet stored in ascending order, so if the hex for A is $28, the hex fo B will be $29, the hex for C will be $2A, and so on.

But naturally, it often gets a lot more difficult. Sometimes, a hex value is used to store sets of two commonly used letters (such as "th" etc.). This is called DTE (stands for Dual Text Encryption) and can make building a Table File very hard. Most of the early Final Fantasy games used DTE. And that isn't the only advanced text storage routine. There is also dictionary compression - this uses a set of hex values (usually four) to represent a word. This can be illustrated in the Robotrek file below, where common names and words (like the character's name, and names of towns) have hex values of $E000 to $E3FFF.

Table files are saved as <game name>.TBL format files, but can be read and edited with any text editor.

The benefit of using table files is that if you have a compatible hex editor such as Thingy, when you open a ROM in the same directory as a table file of the same name, it will load that as well, and you will be able to search for text strings nice and easy. The Hex will appear on the left hand side, and the text which it translates to (translates using the Table File) will appear on the right. You can then edit either the raw hex or the text.


yerricde says "Some games, such as Lode Runner, GNOME vs KDE, and Tetanus On Drugs, don't need a table file because they use ASCII as their native character encoding. I'm pretty sure Mega Man 5 uses ASCII as well." - thanks for pointing this out.


Below is a table file for the SNES game Robotrek. I didn't make it myself, and I'm sorry that it's cut and paste, but it illustrates the points about dictionary compression etc. very well, so I'm using it. The table file was downloaded from Zophar's Domain, where it is in a database of Table Files. It was originally made by Niiru of Partial Translations. I assume that since they put the table file up for download on a popular emulation site they have no problem with me using it here. If they do, then please get in touch with me either here or by email (address is on my home node) and I'll remove it.

If you want to use it, copy and paste into a text file, save as robotrek.tbl, and make sure your ROM is called robotrek.smc. Any compatible hex editor such as Thingy should detect it and use it.

*cd
/cc


20= 
21=!
23=#
24=$
25=%
26=&
27=->
28=(
29=)
2A=*
2B=+
2C=,
2D=-
2E=.
2F=/
30=0
31=1
32=2
33=3
34=4
35=5
36=6
37=7
38=8
39=9
3A=:
3b=;
3C="l
3d==
3e="r
3F=?
40= 
41=A
42=B
43=C
44=D
45=E
46=F
47=G
48=H
49=I
4A=J
4B=K
4C=L
4D=M
4E=N
4F=O
50=P
51=Q
52=R
53=S
54=T
55=U
56=V
57=W
58=X
59=Y
5A=Z
5B="l
5d="r

60=`
61=a
62=b
63=c
64=d
65=e
66=f
67=g
68=h
69=i
6A=j
6B=k
6C=l
6D=m
6E=n
6F=o
70=p
71=q
72=r
73=s
74=t
75=u
76=v
77=w
78=x
79=y
7A=z

c200=*Name*
c302=yell
c303=pink
c300=whit

d1=**

E000=Tetron
E001=Nagisa:
E002=Akihabara:
E003=Kotetsu:
E004=Mint:
E005=Dr.Einst:
E006=Kurogane:
E007=Carl:
E008=Soldier:
E009=Mayor:
E00A=Blackmore:
E00B=Rose:
E00C=Napoleon:
E00D=Gateau:
E00E=Tira:
E00F=Flavon:
E010=Polon:
E011=Rask:
E012=Cookie:
E013=Igor:
E014=Count Prinky:
E015=Valet:
E016=Dr.G:
E017=Assistant A:
E018=Old Man:
E019=Chief:
E01A=Robot
E01B=Elder Baibai!
E01C=Robot
E01D=Robots

E300=the 
E301=you 
E302=have 
E303=I`m 
E304=The 
E305=your 
E306=I`ll 
E307=don`t 
E308=and 
E309=You 
E30A=about 
E30B=You`re 
E30C=for 
E30D=It`s 
E30E=this 
E30F=can`t 
E310=with 
E311=Mayor 
E312=will 
E313=you`re 
E314=can 
E315=that 
E316=was 
E317=Don`t 
E318=has 
E319=What 
E31A=He`s 
E31B=it`s 
E31C=are 
E31D=father 
E31E=not 
E31F=from 
E320=come 
E321=something 
E322=but 
E323=what 
E324=This 
E325=going 
E326=get 
E327=Mayor`s 
E328=When 
E329=want 
E32A=Oh, 
E32B=would 
E32C=That`s 
E32D=like 
E32E=What 
E32F=found 
E330=take 
E331=Hey, 
E332=Akihabara`s 
E333=Please 
E334=Well, 
E335=just 
E336=But 
E337=give 
E338=Hacker 
E339=little 
E33A=some 
E33B=know 
E33C=been 
E33D=talk 
E33E=back 
E33F=really 
E340=Your 
E341=he`s 
E342=make 
E343=when 
E344=his 
E345=There`s 
E346=Hackers 
E347=inventor 
E348=There 
E349=South 
E34A=out 
E34B=there 
E34C=inventory`s 
E34D=find 
E34E=must 
E34F=tell 
E350=should 
E351=What`s 
E352=Come 
E353=I`ve 
E354=time 
E355=great 
E356=need 
E357=children 
E358=heard 
E359=Stone 
E35A=him 
E35B=Just 
E35C=People 
E35D=good 
E35E=see 
E35F=shouldn`t 
E360=trying 
E361=mother 
E362=That 
E363=were 
E364=Welcome 
E365=looking 
E366=nothing 
E367=won`t 
E368=they`re 
E369=without 
E36A=thought 
E36B=Are 
E36C=got 
E36D=help 
E36E=went 
E36F=lost 
E370=around 
E371=all 
E372=understand 
E373=Maybe 
E374=suspicious 
E375=taking 
E376=Scrap 
E377=making 
E378=one 
E379=house 
E37A=secretary, 
E37B=change 
E37C=Thank 
E37D=young 
E37E=came 
E37F=Because 
E380=Count`s 
E381=meet 
E382=kind 
E383=combine 
E384=worried 
E385=show 
E386=dangerous 
E387=invention 
E388=Why 
E389=secretary 
E38A=Invention 
E38B=inventory 
E38C=Let`s 
E38D=still 
E38E=might 
E38F=We`re 
E390=mouse 
E391=looks 
E392=she`s 
E393=place 
E394=could 
E395=saved 
E396=very 
E397=master 
E398=Surprise 
E399=probably 
E39A=gotten 
E39B=Rococo 
E39C=hard 
E39D=remember 
E39E=house. 
E39F=happened 
E3A0=who 
E3A1=Month, 
E3A2=Thanks 
E3A3=Now 
E3A4=long 
E3A5=Get 
E3A6=here 
E3A7=now 
E3A8=said 
E3A9=They 
E3AA=caused 
E3AB=sure 
E3AC=care 
E3AD=them 
E3AE=straightened 
E3AF=father`s 
E3B0=things 
E3B1=only 
E3B2=anything 
E3B3=you`ve 
E3B4=You`ll 
E3B5=interesting 
E3B6=talking 
E3B7=there`s 
E3B8=forward 
E3B9=use 
E3BA=No, 
E3BB=against 
E3BC=did 
E3BD=dog 
E3BE=any 
E3BF=First 
E3C0=moved 
E3C1=more 
E3C2=Fever 
E3C3=over 
E3C4=Inventions 
E3C5=lots 
E3C6=look 
E3C7=Could 
E3C8=such 
E3C9=than 
E3CA=let`s 
E3CB=their 
E3CC=these 
E3CD=real 
E3CE=Where 
E3CF=Especially 
E3D0=Take 
E3D1=read 
E3D2=where 
E3D3=told 
E3D4=Robot 
E3D5=knows 
E3D6=left 
E3D7=Everything 
E3D8=check 
E3D9=seems 
E3DA=keep 
E3DB=they 
E3DC=bring 
E3DD=you. 
E3DE=happy, 
E3DF=health 
E3E0=matter 
E3E1=invent 
E3E2=police 
E3E3=Akihabara 
E3E4=inventor, 
E3E5=Everybody 
E3E6=too 
E3E7=people 
E3E8=strong 
E3E9=pretty 
E3EA=increases 
E3EB=island 
E3EC=combining 
E3ED=Did 
E3EE=rearrange 
E3EF=somewhere 
E3F0=didn`t 
E3F1=rumors 
E3F2=before 
E3F3=recovered 
E3F4=that`s 
E3F5=different 
E3F6=her 
E3F7=Nagisa 
E3F8=looked 
E3F9=Office 
E3FA=You`ve 
E3FB=way 
E3FC=important 
E3FD=Father`s 
E3FE=invented 
E3FF=Everyone 

Table file downloaded from Zophar's Domain (www.zophar.net).
Made by Niiru from Partial Translations (pt.parodius.com).

Log in or register to write something here or to contact authors.