--- oup/rewrite/Global/RawList.pas 2007/01/22 23:05:45 97 +++ oup/rewrite/Global/RawList.pas 2007/02/20 20:43:29 101 @@ -2,15 +2,16 @@ unit RawList; interface -uses TypeDefs, ConnectionManager; +uses TypeDefs; type THandler = function(ConnectionID, FileID: Integer): TRawDataList; - TRawListHandlers = record + TRawListHandler = record Ext: String[4]; needed: Boolean; Handler: THandler; end; + TRawListHandlers = array of TRawListHandler; TRawLists = class private @@ -24,12 +25,12 @@ type var RawLists: TRawLists; - + implementation uses - Template; + Template, ConnectionManager, Access_OniArchive, Classes, SysUtils; function AGDB(ConnectionID, FileID: Integer): TRawDataList; @@ -38,19 +39,16 @@ var links: Integer; i: Integer; begin - if not connection.OSisMac then + ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $1C, 4, @links); + links := links * 2; + SetLength(Result, links); + for i := 0 to links - 1 do begin - ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $1C, 4, @links); - links := links * 2; - SetLength(Result, links); - for i := 0 to links - 1 do - begin - Result[i].src_offset := $20 + i * 4; - ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + i * 4, 4, @link); - Result[i].raw_addr := link; - Result[i].raw_size := 32; - Result[i].loc_sep := False; - end; + Result[i].SrcOffset := $20 + i * 4; + ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + i * 4, 4, @link); + Result[i].RawAddr := link; + Result[i].RawSize := 32; + Result[i].LocSep := False; end; end; @@ -63,19 +61,16 @@ var links: Integer; i: Integer; begin - if not connection.OSisMac then + ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $1C, 4, @links); + SetLength(Result, links); + for i := 0 to links - 1 do begin - ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $1C, 4, @links); - SetLength(Result, links); - for i := 0 to links - 1 do - begin - Result[i].src_offset := $20 + i * $74 + $24; - ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + i * $74 + $24, 4, @link); - Result[i].raw_addr := link; - ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + i * $74 + $28, 4, @link); - Result[i].raw_size := link; - Result[i].loc_sep := False; - end; + Result[i].SrcOffset := $20 + i * $74 + $24; + ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + i * $74 + $24, 4, @link); + Result[i].RawAddr := link; + ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + i * $74 + $28, 4, @link); + Result[i].RawSize := link; + Result[i].LocSep := False; end; end; @@ -90,10 +85,10 @@ begin ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $0C, 4, @link); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $08, 4, @datasize); SetLength(Result, 1); - Result[0].src_offset := $0C; - Result[0].raw_addr := link; - Result[0].raw_size := datasize; - Result[0].loc_sep := connection.OSisMac; + Result[0].SrcOffset := $0C; + Result[0].RawAddr := link; + Result[0].RawSize := datasize; + Result[0].LocSep := not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN); end; @@ -107,10 +102,10 @@ begin ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $08, 4, @datasize); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $0C, 4, @link); SetLength(Result, 1); - Result[0].src_offset := $0C; - Result[0].raw_addr := link; - Result[0].raw_size := datasize; - Result[0].loc_sep := connection.OSisMac; + Result[0].SrcOffset := $0C; + Result[0].RawAddr := link; + Result[0].RawSize := datasize; + Result[0].LocSep := not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN); end; @@ -122,21 +117,21 @@ var datasize: Integer; begin SetLength(Result, 1); - if not connection.OSisMac then + if ConManager.Connection[ConnectionID].DataOS = DOS_MAC then begin - ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $40, 4, @datasize); - ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $44, 4, @link); - Result[0].src_offset := $44; + ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $10, 4, @datasize); + ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $14, 4, @link); + Result[0].SrcOffset := $14; end else begin - ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $10, 4, @datasize); - ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $14, 4, @link); - Result[0].src_offset := $14; + ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $40, 4, @datasize); + ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $44, 4, @link); + Result[0].SrcOffset := $44; end; - Result[0].raw_addr := link; - Result[0].raw_size := datasize; - Result[0].loc_sep := False; + Result[0].RawAddr := link; + Result[0].RawSize := datasize; + Result[0].LocSep := False; end; @@ -147,17 +142,23 @@ var baselink, lastlink: Integer; links: Integer; j, k: Integer; - Data: TByteData; +// Data: TByteData; + Data: TStream; begin ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $18, 4, @baselink); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $1C, 4, @links); if links > 0 then begin ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + (links - 1) * 4, 4, @lastlink); - SetLength(Data, lastlink + 1024); - TOniDataDat(connection).LoadRawOffset(False, - baselink, lastlink + 1024, Data); +// SetLength(Data, lastlink + 1024); + Data := nil; + TAccess_OniArchive(ConManager.Connection[ConnectionID]).LoadRawOffset( + False, baselink, lastlink + 1024, Data); +// TOniDataDat(connection).LoadRawOffset(False, baselink, lastlink + 1024, Data); // connection.LoadRawFile(fileid,$1C,baselink,lastlink+1024,False,@data[0]); + raise ENotImplemented.Create('RawList.SUBT'); + end; +{ k := 0; for j := 0 to 1024 do begin @@ -181,6 +182,7 @@ begin end; end; end; +} end; @@ -202,75 +204,75 @@ begin ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $16C, 2, @frames); {y-pos} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $0C, 4, @link); - Result[0].src_offset := $0C; - Result[0].raw_addr := link; - Result[0].raw_size := frames * 4; + Result[0].SrcOffset := $0C; + Result[0].RawAddr := link; + Result[0].RawSize := frames * 4; {x-z-pos} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $10, 4, @link); - Result[1].src_offset := $10; - Result[1].raw_addr := link; - Result[1].raw_size := frames * 8; + Result[1].SrcOffset := $10; + Result[1].RawAddr := link; + Result[1].RawSize := frames * 8; {attacks} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $182, 1, @tempb); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $14, 4, @link); - Result[2].src_offset := $14; - Result[2].raw_addr := link; - Result[2].raw_size := tempb * 32; + Result[2].SrcOffset := $14; + Result[2].RawAddr := link; + Result[2].RawSize := tempb * 32; {damage} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $183, 1, @tempb); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $18, 4, @link); - Result[3].src_offset := $18; - Result[3].raw_addr := link; - Result[3].raw_size := tempb * 8; + Result[3].SrcOffset := $18; + Result[3].RawAddr := link; + Result[3].RawSize := tempb * 8; {motionblur} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $184, 1, @tempb); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $1C, 4, @link); - Result[4].src_offset := $1C; - Result[4].raw_addr := link; - Result[4].raw_size := tempb * 8; + Result[4].SrcOffset := $1C; + Result[4].RawAddr := link; + Result[4].RawSize := tempb * 8; {shortcut} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $185, 1, @tempb); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20, 4, @link); - Result[5].src_offset := $20; - Result[5].raw_addr := link; - Result[5].raw_size := tempb * 8; + Result[5].SrcOffset := $20; + Result[5].RawAddr := link; + Result[5].RawSize := tempb * 8; {throw} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $24, 4, @link); - Result[6].src_offset := $24; - Result[6].raw_addr := link; + Result[6].SrcOffset := $24; + Result[6].RawAddr := link; if link > 0 then - Result[6].raw_size := 24 + Result[6].RawSize := 24 else - Result[6].raw_size := 0; + Result[6].RawSize := 0; {footstep} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $186, 1, @tempb); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $28, 4, @link); - Result[7].src_offset := $28; - Result[7].raw_addr := link; - Result[7].raw_size := tempb * 4; + Result[7].SrcOffset := $28; + Result[7].RawAddr := link; + Result[7].RawSize := tempb * 4; {particle} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $187, 1, @tempb); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $2C, 4, @link); - Result[8].src_offset := $2C; - Result[8].raw_addr := link; - Result[8].raw_size := tempb * 24; + Result[8].SrcOffset := $2C; + Result[8].RawAddr := link; + Result[8].RawSize := tempb * 24; {position} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $30, 4, @link); - Result[9].src_offset := $30; - Result[9].raw_addr := link; - Result[9].raw_size := frames * 8; + Result[9].SrcOffset := $30; + Result[9].RawAddr := link; + Result[9].RawSize := frames * 8; {particle} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $154, 2, @tempw); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $38, 4, @link); - Result[11].src_offset := $38; - Result[11].raw_addr := link; - Result[11].raw_size := tempw * 34; + Result[11].SrcOffset := $38; + Result[11].RawAddr := link; + Result[11].RawSize := tempw * 34; {extent} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $138, 4, @templ); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $13C, 4, @link); - Result[12].src_offset := $13C; - Result[12].raw_addr := link; - Result[12].raw_size := templ * 12; + Result[12].SrcOffset := $13C; + Result[12].RawAddr := link; + Result[12].RawSize := templ * 12; ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $34, 4, @link); if link > 0 then @@ -279,7 +281,8 @@ begin frame_count := 0; i := 0; SetLength(Data, $FFFF); - TOniDataDat(connection).LoadRawOffset(False, link, $FFFF, Data); + TAccess_OniArchive(ConManager.Connection[ConnectionID]).LoadRawOffset( + False, link, $FFFF, Data); offset := Data[$24] + Data[$25] * 256; while (offset + i < Length(Data)) and (frame_count < frames - 1) do begin @@ -290,15 +293,15 @@ begin if offset + i < Length(Data) then begin Inc(i, tempw); - Result[10].raw_size := offset + i; + Result[10].RawSize := offset + i; end else begin - Result[10].raw_size := 0; + Result[10].RawSize := 0; end; end; - Result[10].src_offset := $34; - Result[10].raw_addr := link; + Result[10].SrcOffset := $34; + Result[10].RawAddr := link; end; @@ -326,18 +329,18 @@ begin datasize := x * y div 2; end; SetLength(Result, 1); - if not connection.OSisMac then + if ConManager.Connection[ConnectionID].DataOS = DOS_WIN then begin - Result[0].src_offset := $9C; - Result[0].raw_addr := link_pc; + Result[0].SrcOffset := $9C; + Result[0].RawAddr := link_pc; end else begin - Result[0].src_offset := $A0; - Result[0].raw_addr := link_mac; + Result[0].SrcOffset := $A0; + Result[0].RawAddr := link_mac; end; - Result[0].raw_size := datasize; - Result[0].loc_sep := connection.OSisMac; + Result[0].RawSize := datasize; + Result[0].LocSep := not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN); end;