-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathDiabloIII_textFiles.bt
More file actions
115 lines (112 loc) · 2.96 KB
/
DiabloIII_textFiles.bt
File metadata and controls
115 lines (112 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
//--------------------------------------
//--- 010 Editor v3.0.1 Binary Template
//
// Author: MrRawr
// Revision: 1.0
// Purpose: Extract Most strings from Diablo3 text files
//--------------------------------------
local string title = "Items";
//local int fileHeader = FileNew();
local int fileItems = FileNew();
char type[4];
int version;
char empty[8];
int BlizzardFileNumber;
char empty2[8];
int dunno1;
int dunno2;
int dunno3;
int dunno4;
FPrintf( fileItems, "version,%i\n", version);
typedef struct {
int stringPosition;
int stringLength;
int terminator;
int blank;
} StringData;
local int searchHeader = 1;
struct Item{
//FPrintf( fileHeader, "item");
local int notTerminated;
local int notEmpty;
do {
StringData stringData;
//FPrintf( fileHeader, ",%i,%i", stringData.stringPosition, stringData.stringLength);
notTerminated = stringData.terminator;
notEmpty = stringData.stringLength;
} while ( notTerminated == 0 && notEmpty > 0 );
if ( notTerminated == -1 ) {
StringData stringFiller;
if ( stringFiller.terminator > 0 ) {
searchHeader = 0;
FSkip(-8);
}
}
else {
int blank;
if ( notTerminated > 1 ) {
searchHeader = 0;
FSkip(-12);
}
else if ( blank > 0 ) {
FSkip(-4);
}
}
//FPrintf( fileHeader, "\n");
};
do {
Item item;
} while ( searchHeader == 1 );
//2290
local int i;
local int y;
local int length;
local int infoSize;
local int temp;
struct ItemInfo {
infoSize = 0;
while ( exists(item[i].stringData[y]) ) {
length = item[i].stringData[y].stringLength;
if ( length > 0 ) {
if ( y == 0 ) {
char itemCode[length];
infoSize += sizeof(itemCode);
if ( (length%8) > 0 ) {
char itemCodeFiller[8-(length%8)];
infoSize += sizeof(itemCodeFiller);
}
FPrintf( fileItems, ",%s", itemCode);
}
else if ( y == 1 ) {
char itemType[length];
infoSize += sizeof(itemType);
if ( (length%8) > 0 ) {
char itemTypeFiller[8-(length%8)];
infoSize += sizeof(itemTypeFiller);
}
FPrintf( fileItems, ",%s", itemType);
}
else if ( y == 2 ) {
char itemName[length];
infoSize += sizeof(itemName);
if ( (length%8) > 0 ) {
char itemNameFiller[8-(length%8)];
infoSize += sizeof(itemNameFiller);
}
FPrintf( fileItems, ",%s", itemName);
}
}
y++;
}
};
i = 0;
while( exists(item[i]) ) {
y = 0;
FPrintf( fileItems, "itemInfo");
ItemInfo itemInfo;
if ( infoSize > 0 ) {
FSkip(8-(infoSize%8));
}
FPrintf( fileItems, "\n");
i++;
}