@@ -48,8 +48,6 @@ public G1Dat LoadG1(string filename)
48
48
// load file
49
49
public ILocoObject LoadFull ( string filename , bool loadExtra = true )
50
50
{
51
- //LoadFullExperimental(filename);
52
-
53
51
ReadOnlySpan < byte > fullData = LoadBytesFromFile ( filename ) ;
54
52
55
53
// make openlocotool useful objects
@@ -111,18 +109,17 @@ public ILocoObject LoadFull(string filename, bool loadExtra = true)
111
109
112
110
static ( StringTable table , int bytesRead ) LoadStringTable ( ReadOnlySpan < byte > data , ILocoStruct locoStruct )
113
111
{
114
- var stringAttr = locoStruct . GetType ( ) . GetCustomAttribute ( typeof ( LocoStringCountAttribute ) , inherit : false ) as LocoStringCountAttribute ;
115
- var stringsInTable = stringAttr ? . Count ?? throw new ArgumentException ( $ "Struct { locoStruct . GetType ( ) . Name } had no string count attribute") ;
116
- var strings = new StringTable ( ) ;
112
+ var stringTableAttr = locoStruct . GetType ( ) . GetCustomAttribute ( typeof ( LocoStringTableAttribute ) , inherit : false ) as LocoStringTableAttribute ;
113
+ var stringTable = new StringTable ( ) ;
117
114
118
- if ( data . Length == 0 || stringsInTable == 0 )
115
+ if ( data . Length == 0 || stringTableAttr == null || stringTableAttr . Count == 0 )
119
116
{
120
- return ( strings , 0 ) ;
117
+ return ( stringTable , 0 ) ;
121
118
}
122
119
123
120
var ptr = 0 ;
124
121
125
- for ( var i = 0 ; i < stringsInTable ; ++ i )
122
+ for ( var i = 0 ; i < stringTableAttr . Count ; ++ i )
126
123
{
127
124
for ( ; ptr < data . Length && data [ ptr ] != 0xFF ; )
128
125
{
@@ -132,22 +129,22 @@ public ILocoObject LoadFull(string filename, bool loadExtra = true)
132
129
while ( data [ ptr ++ ] != '\0 ' ) ;
133
130
134
131
var str = Encoding . ASCII . GetString ( data [ ini ..( ptr - 1 ) ] ) ; // do -1 to exclude the \0
135
-
136
- if ( strings . ContainsKey ( ( i , lang ) ) )
132
+ var stringName = stringTableAttr . Names [ i ] ;
133
+ if ( stringTable . ContainsKey ( ( stringName , lang ) ) )
137
134
{
138
135
//Logger.Error($"Key {(i, lang)} already exists (this shouldn't happen)");
139
136
break ;
140
137
}
141
138
else
142
139
{
143
- strings . Add ( ( i , lang ) , str ) ;
140
+ stringTable . Add ( ( stringName , lang ) , str ) ;
144
141
}
145
142
}
146
143
147
144
ptr ++ ; // add one because we skipped the 0xFF byte at the end
148
145
}
149
146
150
- return ( strings , ptr ) ;
147
+ return ( stringTable , ptr ) ;
151
148
}
152
149
153
150
static ( G1Header header , List < G1Element32 > table , int bytesRead ) LoadImageTable ( ReadOnlySpan < byte > data )
0 commit comments