--- oup/current/Global/RawList.pas 2007/03/28 00:57:53 128 +++ oup/current/Global/RawList.pas 2007/06/18 14:22:53 222 @@ -43,6 +43,7 @@ begin SetLength(Result, links); for i := 0 to links - 1 do begin + Result[i].Name := ''; Result[i].SrcOffset := $20 + i * 4; ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + i * 4, 4, @link); Result[i].RawAddr := link; @@ -64,6 +65,7 @@ begin SetLength(Result, links); for i := 0 to links - 1 do begin + Result[i].Name := ''; Result[i].SrcOffset := $20 + i * $74 + $24; ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20 + i * $74 + $24, 4, @link); Result[i].RawAddr := link; @@ -84,6 +86,7 @@ begin ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $0C, 4, @link); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $08, 4, @datasize); SetLength(Result, 1); + Result[0].Name := 'BinaryData'; Result[0].SrcOffset := $0C; Result[0].RawAddr := link; Result[0].RawSize := datasize; @@ -101,6 +104,7 @@ begin ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $08, 4, @datasize); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $0C, 4, @link); SetLength(Result, 1); + Result[0].Name := 'SoundBinaryData'; Result[0].SrcOffset := $0C; Result[0].RawAddr := link; Result[0].RawSize := datasize; @@ -116,7 +120,7 @@ var datasize: Integer; begin SetLength(Result, 1); - if ConManager.Connection[ConnectionID].DataOS = DOS_MAC then + if ConManager.Connection[ConnectionID].DataOS in [DOS_MACBETA, DOS_MAC] then begin ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $10, 4, @datasize); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $14, 4, @link); @@ -128,6 +132,7 @@ begin ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $44, 4, @link); Result[0].SrcOffset := $44; end; + Result[0].Name := 'SoundData'; Result[0].RawAddr := link; Result[0].RawSize := datasize; Result[0].LocSep := False; @@ -141,45 +146,42 @@ var baselink, lastlink: Integer; links: Integer; Data: TStream; + read: Integer; + char: Byte; + foundzeros: Byte; begin + SetLength(Result, 0); + 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); 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 - if (Data[lastlink + j] = $00) or (j = 1024) then + Data.Seek(lastlink, soFromBeginning); + + foundzeros := 0; + repeat + read := Data.Read(char, 1); + if (read > 0) and (char = 0) then begin - if j < 1024 then - begin - if k = 0 then - begin - k := 1; - end - else - begin - SetLength(Result, 1); - Result[0].src_offset := $18; - Result[0].raw_addr := baselink; - Result[0].raw_size := lastlink + j; - Break; - end; - end; + Inc(foundzeros); end; + until (read = 0) or (foundzeros = 2); + + if foundzeros = 2 then + begin + SetLength(Result, 1); + Result[0].Name := 'Subtitles'; + Result[0].SrcID := FileID; + Result[0].SrcOffset := $18; + Result[0].RawAddr := baselink; + Result[0].RawSize := Data.Position; + Result[0].LocSep := False; end; end; -} end; @@ -195,78 +197,87 @@ var templ: Integer; Data: TByteData; offset: Word; - frame_count: Byte; + frame_count: Integer; begin SetLength(Result, 13); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $16C, 2, @frames); {y-pos} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $0C, 4, @link); + Result[0].Name := 'y-pos'; 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].Name := 'x-z-pos'; 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].Name := 'Attacks'; 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].Name := 'Damage'; 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].Name := 'MotionBlur'; Result[4].SrcOffset := $1C; Result[4].RawAddr := link; - Result[4].RawSize := tempb * 8; + Result[4].RawSize := tempb * 12; {shortcut} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $185, 1, @tempb); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $20, 4, @link); + Result[5].Name := 'Shortcut'; Result[5].SrcOffset := $20; Result[5].RawAddr := link; Result[5].RawSize := tempb * 8; {throw} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $24, 4, @link); + Result[6].Name := 'Throw'; Result[6].SrcOffset := $24; Result[6].RawAddr := link; - if link > 0 then - Result[6].RawSize := 24 - else - Result[6].RawSize := 0; + Result[6].RawSize := 24; {footstep} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $186, 1, @tempb); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $28, 4, @link); + Result[7].Name := 'Footstep'; 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].Name := 'Particle'; Result[8].SrcOffset := $2C; Result[8].RawAddr := link; Result[8].RawSize := tempb * 24; {position} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $30, 4, @link); + Result[9].Name := 'Position'; Result[9].SrcOffset := $30; Result[9].RawAddr := link; Result[9].RawSize := frames * 8; - {particle} + {sound} ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $154, 2, @tempw); ConManager.Connection[ConnectionID].LoadDatFilePart(fileid, $38, 4, @link); + Result[11].Name := 'Sound'; 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].Name := 'Extent'; Result[12].SrcOffset := $13C; Result[12].RawAddr := link; Result[12].RawSize := templ * 12; @@ -297,6 +308,7 @@ begin Result[10].RawSize := 0; end; end; + Result[10].Name := 'BodyParts Animation'; Result[10].SrcOffset := $34; Result[10].RawAddr := link; end; @@ -357,6 +369,7 @@ begin Result[0].SrcOffset := $A0; Result[0].RawAddr := link_mac; end; + Result[0].Name := 'ImageData'; Result[0].RawSize := datasize; Result[0].LocSep := not (ConManager.Connection[ConnectionID].DataOS = DOS_WIN); end; @@ -371,6 +384,7 @@ var RawList: TRawDataList; begin RawList := GetRawList(ConnectionID, FileID); + Result.Name := ''; Result.SrcID := -1; Result.SrcOffset := -1; Result.RawAddr := -1; @@ -381,6 +395,7 @@ begin begin if RawList[i].SrcOffset = DatOffset then begin + Result.Name := RawList[i].Name; Result.SrcID := FileID; Result.SrcOffset := RawList[i].SrcOffset; Result.RawAddr := RawList[i].RawAddr; @@ -407,6 +422,10 @@ begin Result := FRawListHandlers[i].Handler(ConnectionID, FileID); Break; end; + if Length(Result) > 0 then + for i := 0 to High(Result) do + if Result[i].RawAddr = 0 then + Result[i].RawSize := 0; end; procedure TRawLists.InsertRawListHandler(ext: String; needed: Boolean; handler: THandler); @@ -424,7 +443,7 @@ end; initialization RawLists := TRawLists.Create; - RawLists.InsertRawListHandler('AGDB',False,AGDB); + RawLists.InsertRawListHandler('AGDB', False, AGDB); RawLists.InsertRawListHandler('AKVA', True, AKVA); RawLists.InsertRawListHandler('BINA', True, BINA); RawLists.InsertRawListHandler('OSBD', True, OSBD);