StringTable Asset: Difference between revisions
Created page with "__NOTOC__ Category:Assets Category:CoD4 StringTable assets are essentially the CoD engine's way of storing Excel tables for different types of data for different usage..." |
Aerosoul94 (talk | contribs) No edit summary |
||
| Line 14: | Line 14: | ||
}; | }; | ||
The number of values is columnCount * rowCount. | The number of values is columnCount * rowCount. | ||
== Modern Warfare 2 & 3 & Ghosts == | |||
struct StringEntry | |||
{ | |||
const char *value; | |||
unsigned int hash; | |||
}; | |||
struct StringTable | |||
{ | |||
const char *name; | |||
int columnCount; | |||
int rowCount; | |||
StringEntry *strings; | |||
}; | |||
The hash in StringEntry can be generated by this function: | |||
unsigned int hash(const char* str) | |||
{ | |||
unsigned int hash = 0; | |||
while(*str != 0) | |||
hash = tolower( *str++ ) + (31 * hash); | |||
return hash; | |||
} | |||
== Black Ops 1 & 2 == | |||
struct StringEntry | |||
{ | |||
const char *value; | |||
unsigned int hash; | |||
}; | |||
struct StringTable | |||
{ | |||
const char *name; | |||
int columnCount; | |||
int rowCount; | |||
StringEntry *values; | |||
unsigned __int16 *cellIndex; | |||
}; | |||
The hash in StringEntry can be generated by this function: | |||
unsigned int hash(const char* str) | |||
{ | |||
unsigned int hash = 5381; | |||
while( *str != 0) | |||
hash = ((hash << 5) + hash) + *str++; | |||
return hash; | |||
} | |||
== Source Format == | == Source Format == | ||
StringTables are stored in "raw/" at optional paths as comma-seperated Excel tables, similar to below... | StringTables are stored in "raw/" at optional paths as comma-seperated Excel tables, similar to below... | ||
Revision as of 07:42, 1 January 2014
StringTable assets are essentially the CoD engine's way of storing Excel tables for different types of data for different usages. This asset has existed on every CoD from the earliest Call of Duty 4 Alpha to Ghosts. To get a particular cell index, follow this...
desiredEntry = (columnCount * desiredRow) + desiredColumn;
Call of Duty 4
This StringTable is about as simple as it gets.
struct StringTable
{
const char *name;
int columnCount;
int rowCount;
const char **values;
};
The number of values is columnCount * rowCount.
Modern Warfare 2 & 3 & Ghosts
struct StringEntry
{
const char *value;
unsigned int hash;
};
struct StringTable
{
const char *name;
int columnCount;
int rowCount;
StringEntry *strings;
};
The hash in StringEntry can be generated by this function:
unsigned int hash(const char* str)
{
unsigned int hash = 0;
while(*str != 0)
hash = tolower( *str++ ) + (31 * hash);
return hash;
}
Black Ops 1 & 2
struct StringEntry
{
const char *value;
unsigned int hash;
};
struct StringTable
{
const char *name;
int columnCount;
int rowCount;
StringEntry *values;
unsigned __int16 *cellIndex;
};
The hash in StringEntry can be generated by this function:
unsigned int hash(const char* str)
{
unsigned int hash = 5381;
while( *str != 0)
hash = ((hash << 5) + hash) + *str++;
return hash;
}
Source Format
StringTables are stored in "raw/" at optional paths as comma-seperated Excel tables, similar to below...
entry1,entry2,entry3 entry4,entry5,entry6
For example, take a look at "mp/clantagfeatures.csv" from Black Ops 1.
#Clan Tag Features,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,, a0,b1,c2,d3,e4,f5,g6,h7,i8,j9,k10,l11,m12,n13,o14,p15,q16 #INDX,#name,#unlocklvl,#unlockplvl,#cost,#type,#data,#nframes,#phase,#frame1,#frame2,#frame3,#frame4,#frame5,#frame6,#frame7,#frame8 0,none,,,,tagcolor,,,,,,,,,,, 1,red,,13,250,tagcolor,1,,,,,,,,,, 2,green,,13,250,tagcolor,2,,,,,,,,,, 3,yellow,,13,250,tagcolor,3,,,,,,,,,, 4,blue,,13,250,tagcolor,4,,,,,,,,,, 5,cyan,,13,250,tagcolor,5,,,,,,,,,, 6,magenta,,13,250,tagcolor,6,,,,,,,,,,