@@ -49,19 +49,32 @@ function catchFunc(func) {
4949}
5050
5151function makeOffsetTable ( { read, write } ) {
52- return ( size = constants . dc . w ) => [
53- ( ) => ( { ref } ) => {
54- let a = 0x7FFF ;
52+ return ( size = constants . dc . w , { items } = { } ) => [
53+ ( { getCursor } ) => ( { ref } ) => {
54+ const cursor = getCursor ( ) ;
55+ if ( ! ref . global . a ) {
56+ ref . global . a = 0x7FFF ;
57+ }
5558 const headers = [ ] ;
56- for ( let i = 0 ; i < 1e5 && i < a ; i += 2 ) {
57- const header = read ( size ) & 0x7FFF ;
59+ for ( let i = cursor ; i < 1e5 && i < ref . global . a ; i = getCursor ( ) ) {
60+ const header = ( read ( size ) & 0x7FFF ) + cursor ;
5861 headers . push ( header ) ;
59- if ( header < a && ! ( header === 0 ) ) {
60- a = header ;
62+ logger ( '= HEADER =' , header ) ;
63+ // logger(a, header < a, header, cursor);
64+ if ( header < ref . global . a && ! ( header === 0 ) ) {
65+ ref . global . a = header ;
6166 }
67+ // logger('HEADER LIMIT', i, a, cursor, a - cursor);
68+ if ( items && headers . length >= items ) break ;
69+ }
70+ if ( ! ref . global . firstHeader ) {
71+ ref . global . firstHeader = true ;
72+ ref . global . cleanup . push ( ( { sprites } ) => {
73+ sprites . splice ( 0 , sprites . length ) ;
74+ // sprites.push([]);
75+ } ) ;
6276 }
6377 ref . global . cleanup . push ( ( { sprites, spritesAddr } ) => {
64- sprites . splice ( 0 , sprites . length ) ;
6578 headers . forEach ( header => {
6679 if ( header === 0 ) {
6780 sprites . push ( [ ] ) ; // handle zero header optimization
@@ -157,21 +170,22 @@ export default catchFunc((file) => {
157170 return value ;
158171 } ) ;
159172
173+ const getCursor = ( ) => cursor ;
160174 const global = { cleanup : [ ] } ;
161175 const sprites = [ ] ;
162176 const spritesAddr = { } ;
163177 sectionList . forEach ( ( [ readFrame ] , i ) => {
164- logger ( `|> section ` , i ) ;
178+ logger ( `====== SECTION ====== ` , i ) ;
165179 read: for ( let spriteIndex = 0 ; spriteIndex < readLimit ; spriteIndex ++ ) {
166- logger ( `| sprite ${ spriteIndex . toString ( 16 ) } ` ) ;
180+ logger ( `== SPRITE == ${ spriteIndex . toString ( 16 ) } ` ) ;
167181 const sprite = [ ] ;
168182 const ref = { global } ;
169183 spritesAddr [ cursor ] = sprite ;
170- const readMapping = readFrame ( spriteIndex ) ;
184+ const readMapping = readFrame ( { getCursor } , spriteIndex ) ;
171185 if ( readMapping ) {
172186 logger ( 'read mapping' ) ;
173187 for ( let frameIndex = 0 ; frameIndex < readLimit ; frameIndex ++ ) {
174- logger ( `.frame ${ frameIndex . toString ( 16 ) } ` ) ;
188+ logger ( `= FRAME = ${ frameIndex . toString ( 16 ) } ` ) ;
175189 const mapping = { } ;
176190 const param = {
177191 mapping,
0 commit comments