- Timestamp:
- Jan 14, 2007, 9:19:08 PM (18 years ago)
- Location:
- oup/current
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
oup/current/Code/Exporters.pas
r74 r86 3 3 interface 4 4 5 uses Classes, Dialogs, StrUtils, SysUtils, Math, Data, OniImgClass; 6 7 procedure ExportDatFile(fileid: LongWord; filename: String); 8 procedure ExportRawFiles(fileid: LongWord; filename: String); 9 procedure ExportRawFile(fileid: LongWord; dat_offset: LongWord; filename: String); 10 function ExportConverted(fileid: LongWord; filename: String): Integer; 11 12 function ExportSNDD(fileid: LongWord; filename: String): Integer; 13 function ExportTRAC(fileid: LongWord; filename: String): Integer; 14 function ExportTXAN(fileid: LongWord; filename: String): Integer; 15 function ExportImage(fileid: LongWord; filename: String): Integer; 5 uses Classes, Dialogs, StrUtils, SysUtils, Math, Data, OniImgClass, OniDataClass; 6 7 type 8 TExportHandlers = record 9 Ext: String[4]; 10 needed: Boolean; 11 Handler: function(connection: TOniData; fileid: LongWord; filename: String): Integer; 12 end; 13 14 procedure ExportDatFile(connection: TOniData; fileid: LongWord; filename: String); 15 procedure ExportRawFiles(connection: TOniData; fileid: LongWord; filename: String); 16 procedure ExportRawFile(connection: TOniData; fileid: LongWord; dat_offset: LongWord; filename: String); 17 function ExportConverted(connection: TOniData; fileid: LongWord; filename: String): Integer; 18 19 function ExportSNDD(connection: TOniData; fileid: LongWord; filename: String): Integer; 20 function ExportTRAC(connection: TOniData; fileid: LongWord; filename: String): Integer; 21 function ExportTXAN(connection: TOniData; fileid: LongWord; filename: String): Integer; 22 function ExportImage(connection: TOniData; fileid: LongWord; filename: String): Integer; 16 23 17 24 var … … 30 37 implementation 31 38 32 uses Functions, DataStructures , OniDataClass;33 34 35 36 procedure ExportDatFile( fileid: LongWord; filename: String);39 uses Functions, DataStructures; 40 41 42 43 procedure ExportDatFile(connection: TOniData; fileid: LongWord; filename: String); 37 44 var 38 45 filestream: TFileStream; 39 46 Data: Tdata; 40 47 begin 41 Data := OniDataConnection.LoadDatFile(fileid);48 Data := connection.LoadDatFile(fileid); 42 49 if FileExists(filename) then 43 50 begin … … 54 61 55 62 56 procedure ExportRawFiles( fileid: LongWord; filename: String);63 procedure ExportRawFiles(connection: TOniData; fileid: LongWord; filename: String); 57 64 var 58 65 i: Integer; 59 66 rawlist: TRawList; 60 67 begin 61 rawlist := OniDataConnection.GetRawList(fileid);68 rawlist := connection.GetRawList(fileid); 62 69 if Length(rawlist) > 0 then 63 70 for i := 0 to High(rawlist) do 64 ExportRawFile( fileid, rawlist[i].src_offset, filename);65 end; 66 67 procedure ExportRawFile( fileid: LongWord; dat_offset: LongWord; filename: String);71 ExportRawFile(connection, fileid, rawlist[i].src_offset, filename); 72 end; 73 74 procedure ExportRawFile(connection: TOniData; fileid: LongWord; dat_offset: LongWord; filename: String); 68 75 var 69 76 filestream: TFileStream; 70 77 Data: Tdata; 71 78 begin 72 SetLength(Data, OniDataConnection.GetRawInfo(fileid, dat_offset).raw_size);73 OniDataConnection.LoadRawFile(fileid, dat_offset, @Data[0]);79 SetLength(Data, connection.GetRawInfo(fileid, dat_offset).raw_size); 80 connection.LoadRawFile(fileid, dat_offset, @Data[0]); 74 81 if FileExists(filename + '.raw0x' + IntToHex(dat_offset, 8)) then 75 82 begin … … 86 93 end; 87 94 88 function ExportConverted( fileid: LongWord; filename: String): Integer;95 function ExportConverted(connection: TOniData; fileid: LongWord; filename: String): Integer; 89 96 var 90 97 i: Integer; 91 98 fileinfo: TFileInfo; 92 99 begin 93 fileinfo := OniDataConnection.GetFileInfo(fileid);100 fileinfo := connection.GetFileInfo(fileid); 94 101 if Length(ExportHandlers) > 0 then 95 102 for i := 0 to High(ExportHandlers) do 96 103 if ExportHandlers[i].Ext = fileinfo.Extension then 97 ExportHandlers[i].Handler( fileid, filename);104 ExportHandlers[i].Handler(connection, fileid, filename); 98 105 end; 99 106 … … 142 149 begin 143 150 Result := export_noerror; 144 OniDataConnection.LoadDatFilePart(fileid, 0, SizeOf(DatData), @DatData);151 connection.LoadDatFilePart(fileid, 0, SizeOf(DatData), @DatData); 145 152 with DatData do 146 153 begin … … 154 161 WAVE_DataLen := RAWSize; 155 162 SetLength(Data, RAWSize); 156 OniDataConnection.LoadRawFile(fileid, $44, Data);163 connection.LoadRawFile(fileid, $44, Data); 157 164 158 165 //Now start packing this into a neat wave... … … 192 199 Result := export_noerror; 193 200 194 OniDataConnection.LoadDatFilePart(fileid, $18, SizeOf(link), @link);201 connection.LoadDatFilePart(fileid, $18, SizeOf(link), @link); 195 202 link := link div 256; 196 203 197 OniDataConnection.LoadDatFilePart(fileid, $1E, SizeOf(linkcount), @linkcount);204 connection.LoadDatFilePart(fileid, $1E, SizeOf(linkcount), @linkcount); 198 205 for i := 1 to linkcount do 199 206 begin 200 OniDataConnection.LoadDatFilePart(fileid, $20 + (i - 1) * 12 + 8, SizeOf(link), @link);207 connection.LoadDatFilePart(fileid, $20 + (i - 1) * 12 + 8, SizeOf(link), @link); 201 208 link := link div 256; 202 209 end; … … 215 222 Result := export_noerror; 216 223 217 OniDataConnection.LoadDatFilePart(fileid, $14, SizeOf(loop_speed), @loop_speed);218 OniDataConnection.LoadDatFilePart(fileid, $16, SizeOf(unknown), @unknown);219 220 OniDataConnection.LoadDatFilePart(fileid, $1C, SizeOf(linkcount), @linkcount);224 connection.LoadDatFilePart(fileid, $14, SizeOf(loop_speed), @loop_speed); 225 connection.LoadDatFilePart(fileid, $16, SizeOf(unknown), @unknown); 226 227 connection.LoadDatFilePart(fileid, $1C, SizeOf(linkcount), @linkcount); 221 228 for i := 0 to linkcount - 1 do 222 229 begin 223 OniDataConnection.LoadDatFilePart(fileid, $20 + i * 4, SizeOf(link), @link);230 connection.LoadDatFilePart(fileid, $20 + i * 4, SizeOf(link), @link); 224 231 link := link div 256; 225 232 if link = 0 then … … 240 247 241 248 img := TOniImage.Create; 242 img.Load( fileid);249 img.Load(connection, fileid); 243 250 data := img.GetAsBMP; 244 251 img.Free; -
oup/current/Code/Functions.pas
r75 r86 21 21 function DecodeHexString(hex: String): Tdata; 22 22 function GetWinFileName(Name: String): String; 23 function GetExtractPath: String;23 //function GetExtractPath: String; 24 24 25 25 function Explode(_string: String; delimiter: Char): TStringArray; … … 352 352 353 353 354 354 { 355 355 function GetExtractPath: String; 356 356 begin 357 Result := ExtractFilePath( OniDataConnection.FileName) + '\extracted_' +358 ExtractFileName( OniDataConnection.Filename);359 end; 360 357 Result := ExtractFilePath(DataConnections[i].FileName) + '\extracted_' + 358 ExtractFileName(DataConnections[i].Filename); 359 end; 360 } 361 361 362 362 end. -
oup/current/Code/OniDataClass.pas
r56 r86 136 136 end; 137 137 138 TOniDataEmpty = class(TOniData) 139 private 140 protected 141 public 142 constructor Create(OLDBFilename: String; var Result: Boolean); override; 143 procedure Close; override; 144 { 145 procedure UpdateListCache; 146 // function GetDatLinks(srcid:LongWord):TDatLinks; 147 function GetFileInfo(fileid: LongWord): TFileInfo; override; 148 function GetFilesList(ext: String; pattern: String; 149 NoEmptyFiles: Boolean; sort: TSortType): TStringArray; override; 150 function GetFilesCount: LongWord; override; 151 function GetExtensionsList: TStringArray; override; 152 function GetExtendedExtensionsList: TExtensionsMap; override; 153 function GetNamedFilesMap: TNamedFilesMap; 154 155 function LoadDatFile(fileid: LongWord): Tdata; override; 156 procedure UpdateDatFile(fileid: LongWord; Data: Tdata); override; 157 procedure LoadDatFilePart(fileid, offset, size: LongWord; target: Pointer); override; 158 procedure UpdateDatFilePart(fileid, offset, size: LongWord; target: Pointer); override; 159 160 function GetRawList(fileid: LongWord): TRawList; override; 161 procedure LoadRawFile(fileid, dat_offset: LongWord; target: Pointer); override; 162 procedure UpdateRawFile(fileid, dat_offset: LongWord; size: LongWord; 163 target: Pointer); override; 164 procedure LoadRawFilePart(fileid, dat_offset: LongWord; 165 offset, size: LongWord; target: Pointer); override; 166 procedure UpdateRawFilePart(fileid, dat_offset: LongWord; 167 offset, size: LongWord; target: Pointer); override; 168 } published 169 end; 138 170 139 171 const … … 143 175 144 176 var 177 // OniDataConnection: TOniData; 178 DataConnections: array of TOniData; 145 179 OniDataConnection: TOniData; 146 180 147 function CreateDataConnection(filename: String; backend: Integer): Boolean; 148 procedure CloseDataConnection; 181 function CreateDataConnection(filename: String; backend: Integer): TOniData; 182 procedure CloseDataConnection(connection: TOniData); 183 149 184 150 185 … … 1372 1407 1373 1408 1374 function CreateDataConnection(filename: String; backend: Integer): Boolean;1409 function CreateDataConnection(filename: String; backend: Integer): TOniData; 1375 1410 var 1376 1411 answer: Boolean; 1377 begin 1378 if Assigned(OniDataConnection) then 1379 begin 1380 OniDataConnection.Close; 1381 OniDataConnection.Free; 1382 OniDataConnection := nil; 1383 end; 1412 i: Integer; 1413 begin 1414 if Length(DataConnections) > 0 then 1415 begin 1416 for i := 0 to High(DataConnections) do 1417 begin 1418 if ExtractFileName(DataConnections[i].FFileName) = ExtractFileName(filename) then 1419 begin 1420 if DataConnections[i].FFileName <> filename then 1421 begin 1422 Result := nil; 1423 ShowMessage('You can not open two files with the same name at a time.'); 1424 end 1425 else 1426 Result := DataConnections[i]; 1427 Exit; 1428 end; 1429 end; 1430 end; 1431 1432 if not FileExists(filename) then 1433 begin 1434 ShowMessage('File "' + filename + '" does not exist!'); 1435 Result := nil; 1436 Exit; 1437 end; 1438 1439 SetLength(DataConnections, Length(DataConnections) + 1); 1440 i := High(DataConnections); 1384 1441 case backend of 1385 1442 ODB_Dat: 1386 OniDataConnection:= TOniDataDat.Create(filename, answer);1443 DataConnections[i] := TOniDataDat.Create(filename, answer); 1387 1444 ODB_ADB: 1388 OniDataConnection:= TOniDataADB.Create(filename, answer);1445 DataConnections[i] := TOniDataADB.Create(filename, answer); 1389 1446 else 1390 1447 ShowMessage('Unknown Backend'); 1391 Result := False;1448 Result := nil; 1392 1449 Exit; 1393 1450 end; … … 1395 1452 if answer then 1396 1453 begin 1397 // ShowMessage('file loaded'); 1398 // ShowMessage('Files: '+IntToStr(OniDataConnection.GetFilesCount)); 1399 Result := True; 1454 Result := DataConnections[i]; 1455 // Result := True; 1400 1456 end 1401 1457 else 1402 1458 begin 1403 1459 ShowMessage('File not loaded'); 1404 OniDataConnection.Close; 1405 OniDataConnection.Free; 1406 Result := False; 1407 end; 1408 end; 1409 1410 1411 1412 1413 procedure CloseDataConnection; 1414 begin 1415 if Assigned(OniDataConnection) then 1416 begin 1417 OniDataConnection.Close; 1418 OniDataConnection := nil; 1419 end; 1460 DataConnections[i].Close; 1461 DataConnections[i].Free; 1462 DataConnections[i] := nil; 1463 SetLength(DataConnections, Length(DataConnections) - 1); 1464 Result := nil; 1465 end; 1466 end; 1467 1468 1469 1470 1471 procedure CloseDataConnection(connection: TOniData); 1472 var 1473 i: Integer; 1474 found: Boolean; 1475 begin 1476 if Assigned(connection) then 1477 begin 1478 found := False; 1479 for i := 0 to High(DataConnections) do 1480 begin 1481 if not found then 1482 begin 1483 if DataConnections[i] = connection then 1484 begin 1485 DataConnections[i].Close; 1486 DataConnections[i].Free; 1487 DataConnections[i] := nil; 1488 found := True; 1489 end; 1490 end 1491 else 1492 begin 1493 DataConnections[i - 1] := DataConnections[i]; 1494 end; 1495 end; 1496 if found then 1497 SetLength(DataConnections, Length(DataConnections) - 1); 1498 end; 1499 end; 1500 1501 1502 1503 1504 constructor TOniDataEmpty.Create(OLDBFilename: String; var Result: Boolean); 1505 var 1506 i, j: Byte; 1507 temps: String; 1508 begin 1509 ShowMessage('OLD'); 1510 end; 1511 1512 procedure TOniDataEmpty.Close; 1513 begin 1514 ShowMessage('OLD'); 1420 1515 end; 1421 1516 -
oup/current/Code/OniImgClass.pas
r46 r86 33 33 34 34 constructor Create; 35 function Load( fileid: LongWord): Boolean;36 function LoadFromPSpc( fileid: LongWord): Boolean;37 function LoadFromTXMP( fileid: LongWord): Boolean;38 function LoadFromTXMB( fileid: LongWord): Boolean;35 function Load(connection: TOniData; fileid: Cardinal): Boolean; 36 function LoadFromPSpc(connection: TOniData; fileid: LongWord): Boolean; 37 function LoadFromTXMP(connection: TOniData; fileid: LongWord): Boolean; 38 function LoadFromTXMB(connection: TOniData; fileid: LongWord): Boolean; 39 39 function GetImageDataSize(fading: Boolean): LongWord; 40 40 … … 303 303 304 304 305 function TOniImage.Load( fileid: LongWord): Boolean;305 function TOniImage.Load(connection: TOniData; fileid: Cardinal): Boolean; 306 306 var 307 307 FileInfo: TFileInfo; 308 308 ext: String; 309 309 begin 310 FileInfo := OniDataConnection.GetFileInfo(fileid);310 FileInfo := connection.GetFileInfo(fileid); 311 311 if FileInfo.Extension = 'PSpc' then 312 Result := LoadFromPSpc( fileid)312 Result := LoadFromPSpc(connection, fileid) 313 313 else if FileInfo.Extension = 'TXMB' then 314 Result := LoadFromTXMB( fileid)314 Result := LoadFromTXMB(connection, fileid) 315 315 else if FileInfo.Extension = 'TXMP' then 316 Result := LoadFromTXMP( fileid)316 Result := LoadFromTXMP(connection, fileid) 317 317 else 318 318 Result := False; … … 322 322 323 323 324 function TOniImage.LoadFromPSpc( fileid: LongWord): Boolean;324 function TOniImage.LoadFromPSpc(connection: TOniData; fileid: LongWord): Boolean; 325 325 type 326 326 TPoint = packed record … … 357 357 col, row: Byte; 358 358 begin 359 OniDataConnection.LoadDatFilePart(fileid, $08, SizeOf(PSpc), @PSpc);359 connection.LoadDatFilePart(fileid, $08, SizeOf(PSpc), @PSpc); 360 360 PSpc.TXMP := PSpc.TXMP div 256; 361 361 if PSpc.TXMP = 0 then … … 365 365 end; 366 366 txmpimg := TOniImage.Create; 367 txmpimg.LoadFromTXMP( PSpc.TXMP);367 txmpimg.LoadFromTXMP(connection, PSpc.TXMP); 368 368 txmpimg.DecodeImage; 369 369 txmpimg.WriteToBMP('C:\file.bmp'); … … 464 464 465 465 466 function TOniImage.LoadFromTXMP( fileid: LongWord): Boolean;466 function TOniImage.LoadFromTXMP(connection: TOniData; fileid: LongWord): Boolean; 467 467 var 468 468 img_addr: LongWord; 469 469 begin 470 470 Result := True; 471 OniDataConnection.LoadDatFilePart(fileid, $8C, SizeOf(Self.FWidth), @Self.FWidth);472 OniDataConnection.LoadDatFilePart(fileid, $8E, SizeOf(Self.FHeight), @Self.FHeight);473 OniDataConnection.LoadDatFilePart(fileid, $90, SizeOf(Self.FStoreType),471 connection.LoadDatFilePart(fileid, $8C, SizeOf(Self.FWidth), @Self.FWidth); 472 connection.LoadDatFilePart(fileid, $8E, SizeOf(Self.FHeight), @Self.FHeight); 473 connection.LoadDatFilePart(fileid, $90, SizeOf(Self.FStoreType), 474 474 @Self.FStoreType); 475 if not OniDataConnection.OSisMac then476 OniDataConnection.LoadDatFilePart(fileid, $9C, SizeOf(img_addr), @img_addr)475 if not connection.OSisMac then 476 connection.LoadDatFilePart(fileid, $9C, SizeOf(img_addr), @img_addr) 477 477 else 478 OniDataConnection.LoadDatFilePart(fileid, $A0, SizeOf(img_addr), @img_addr);478 connection.LoadDatFilePart(fileid, $A0, SizeOf(img_addr), @img_addr); 479 479 480 480 case Self.FStoreType of … … 499 499 end; 500 500 501 if not OniDataConnection.OSisMac then502 OniDataConnection.LoadRawFile(fileid, $9C, @Self.FData[0])501 if not connection.OSisMac then 502 connection.LoadRawFile(fileid, $9C, @Self.FData[0]) 503 503 else 504 OniDataConnection.LoadRawFile(fileid, $A0, @Self.FData[0]);504 connection.LoadRawFile(fileid, $A0, @Self.FData[0]); 505 505 506 506 Self.FDataType := [DT_OniReverted, DT_Oni]; … … 510 510 511 511 512 function TOniImage.LoadFromTXMB( fileid: LongWord): Boolean;512 function TOniImage.LoadFromTXMB(connection: TOniData; fileid: LongWord): Boolean; 513 513 var 514 514 i, x, y, x2, y2, pixelid, imgid: LongWord; … … 519 519 x_start, y_start: LongWord; 520 520 begin 521 OniDataConnection.LoadDatFilePart(fileid, $10, SizeOf(Self.FWidth), @Self.FWidth);522 OniDataConnection.LoadDatFilePart(fileid, $12, SizeOf(Self.FHeight), @Self.FHeight);523 OniDataConnection.LoadDatFilePart(fileid, $18, SizeOf(cols), @cols);524 OniDataConnection.LoadDatFilePart(fileid, $1A, SizeOf(rows), @rows);525 OniDataConnection.LoadDatFilePart(fileid, $1C, SizeOf(linkcount), @linkcount);521 connection.LoadDatFilePart(fileid, $10, SizeOf(Self.FWidth), @Self.FWidth); 522 connection.LoadDatFilePart(fileid, $12, SizeOf(Self.FHeight), @Self.FHeight); 523 connection.LoadDatFilePart(fileid, $18, SizeOf(cols), @cols); 524 connection.LoadDatFilePart(fileid, $1A, SizeOf(rows), @rows); 525 connection.LoadDatFilePart(fileid, $1C, SizeOf(linkcount), @linkcount); 526 526 SetLength(images_decoded, linkcount); 527 527 for i := 0 to linkcount - 1 do 528 528 begin 529 OniDataConnection.LoadDatFilePart(fileid, $20 + i * 4, SizeOf(link), @link);529 connection.LoadDatFilePart(fileid, $20 + i * 4, SizeOf(link), @link); 530 530 link := link div 256; 531 531 images_decoded[i] := TOniImage.Create; 532 images_decoded[i].LoadFromTXMP( link);532 images_decoded[i].LoadFromTXMP(connection, link); 533 533 images_decoded[i].DecodeImage; 534 534 images_decoded[i].RevertImage; -
oup/current/Data.pas
r79 r86 68 68 end; 69 69 70 TExportHandlers = record71 Ext: String[4];72 needed: Boolean;73 Handler: function(fileid: LongWord; filename: String): Integer;74 end;75 76 70 TStringArray = array of String; 77 71 TExtList = array of record -
oup/current/Helper_LevelDB.pas
r85 r86 79 79 levelid: LongWord; 80 80 timeformat: TFormatSettings; 81 82 conIndex: Integer; 83 connection: TOniData; 81 84 const 82 85 steps: Byte = 3; … … 105 108 timeformat.TimeSeparator := ':'; 106 109 107 if not CreateDataConnection(Source, ODB_ADB)then110 if CreateDataConnection(Source, ODB_ADB) = nil then 108 111 begin 109 112 ShowMessage('Could not connect to .oldb-file'); … … 208 211 ((Data[$88] and $01) > 0) then 209 212 begin 210 OniImage.LoadFromTXMP( i);213 OniImage.LoadFromTXMP(Connection, i); 211 214 OniImage.GetMipMappedImage(rawdata); 212 215 rawlist[j].raw_size := OniImage.GetImageDataSize(True); … … 310 313 converting := False; 311 314 312 CloseDataConnection ;315 CloseDataConnection(DataConnections[conIndex]); 313 316 end; 314 317 … … 345 348 fileinfo: TFileInfo; 346 349 timeformat: TFormatSettings; 350 351 conIndex: Integer; 347 352 const 348 353 steps: Byte = 4; … … 362 367 363 368 begin 364 if not CreateDataConnection(Source, ODB_Dat)then369 if CreateDataConnection(Source, ODB_Dat) = nil then 365 370 begin 366 371 ShowMessage('Could not connect to .dat-file'); … … 564 569 database.Free; 565 570 566 CloseDataConnection ;571 CloseDataConnection(DataConnections[conIndex]); 567 572 end; 568 573 -
oup/current/Main.dfm
r83 r86 913 913 Top = 176 914 914 Bitmap = { 915 494C010102000400040010001000FFFFFFFFFF 00FFFFFFFFFFFFFFFF424D3600915 494C010102000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600 916 916 0000000000003600000028000000400000001000000001002000000000000010 917 917 0000000000000000000000000000000000000000000000000000000000000000 … … 1049 1049 8001800100000000800180010000000080018001000000008001800100000000 1050 1050 8001800100000000800180010000000080018001000000008001800100000000 1051 C003C00300000000FFFFFFFF00000000} 1051 C003C00300000000FFFFFFFF0000000000000000000000000000000000000000 1052 000000000000} 1052 1053 end 1053 1054 end -
oup/current/Main.pas
r84 r86 75 75 tb_opendb: TTBItem; 76 76 Images_Close: TImageList; 77 procedure UpdateConLists; 77 78 procedure LoadFile(typedb: Boolean); 78 79 function TryCloseAll: Boolean; … … 154 155 else if MidStr(ParamStr(1), 1, 4) = 'oldb' then 155 156 begin 156 if not CreateDataConnection(ParamStr(2), ODB_ADB)then157 if CreateDataConnection(ParamStr(2), ODB_ADB) = nil then 157 158 ShowMessage('Error while loading the file:' + CrLf + ParamStr( 158 159 2) + CrLf + 'Perhaps not an OniUnPacker-LevelDatabase-file?'); … … 160 161 else if MidStr(ParamStr(1), 1, 3) = 'dat' then 161 162 begin 162 if not CreateDataConnection(ParamStr(2), ODB_Dat)then163 if CreateDataConnection(ParamStr(2), ODB_Dat) = nil then 163 164 ShowMessage('Error while loading the file:' + CrLf + ParamStr( 164 165 2) + CrLf + 'Perhaps not an Oni-.dat-file?'); … … 263 264 pt.Y := Y; 264 265 tabIndex := MDITab.GetTabAtPos(pt); 265 if (Button = mbRight) and (tabIndex >= 0) then 266 MDITab.MDIChildren[tabIndex].Close; 266 267 // if (Button = mbRight) and (tabIndex >= 0) then 268 // MDITab.MDIChildren[tabIndex].Close; 267 269 268 270 if (Button = mbLeft) and (tabIndex >= 0) then … … 309 311 procedure TForm_Main.UpdateStatBar; 310 312 begin 311 if Assigned(OniDataConnection) then 312 begin 313 Self.Caption := 'Oni Un/Packer ' + version + ' (' + ExtractFileName( 314 OniDataConnection.FileName) + ')'; 313 if Length(DataConnections) > 0 then 314 begin 315 Self.Caption := 'Oni Un/Packer ' + version; 315 316 ActivateTools(True); 316 statbar.Panels.Items[1].Text := 'Files: ' + IntToStr(OniDataConnection.GetFilesCount); 317 statbar.Panels.Items[2].Text := 318 'Extensions: ' + IntToStr(Length(OniDataConnection.GetExtensionsList)); 319 case OniDataConnection.Backend of 320 ODB_Dat: 321 begin 322 statbar.Panels.Items[0].Text := '.dat loaded: ' + OniDataConnection.FileName; 323 end; 324 ODB_ADB: 325 begin 326 statbar.Panels.Items[0].Text := 'OLDB loaded: ' + OniDataConnection.FileName; 327 end; 328 else 329 Self.Caption := 'Oni Un/Packer ' + version; 330 statbar.Panels.Items[0].Text := 'Nothing loaded'; 331 statbar.Panels.Items[1].Text := 'Files: -'; 332 statbar.Panels.Items[2].Text := 'Extensions: -'; 333 ActivateTools(False); 334 end; 317 statbar.Panels.Items[1].Text := 'Connections: ' + IntToStr(Length(DataConnections)); 335 318 end 336 319 else … … 380 363 381 364 365 procedure TForm_Main.UpdateConLists; 366 var 367 i: Integer; 368 begin 369 for i := 0 to MDITab.MDIChildCount - 1 do 370 if MDITab.MDIChildren[i] is TForm_ToolTemplate then 371 TForm_ToolTemplate(MDITab.MDIChildren[i]).UpdateList; 372 end; 373 382 374 383 375 procedure TForm_Main.LoadFile(typedb: Boolean); … … 385 377 ext: String; 386 378 begin 387 if TryCloseAll then388 begin389 CloseDataConnection;390 opend. InitialDir := AppSettings.DatPath;391 opend.Filter := 'Compatible level files|*.dat;*.oldb|Oni level (*.dat)|*.dat|OUP level database (*.oldb)|*.oldb|Any (*.*)|*';392 if typedb then393 opend.FilterIndex := 3394 else395 opend.FilterIndex := 2;396 if opend.Executethen379 opend.InitialDir := AppSettings.DatPath; 380 opend.Filter := 'Compatible level files|*.dat;*.oldb|Oni level (*.dat)|*.dat|OUP level database (*.oldb)|*.oldb|Any (*.*)|*'; 381 if typedb then 382 opend.FilterIndex := 3 383 else 384 opend.FilterIndex := 2; 385 if opend.Execute then 386 begin 387 ext := ExtractFileExt(opend.FileName); 388 if ext = '.dat' then 397 389 begin 398 ext := ExtractFileExt(opend.FileName); 399 if ext = '.dat' then 400 begin 401 if not CreateDataConnection(opend.FileName, ODB_Dat) then 402 ShowMessage('Error while loading the file:' + CrLf + opend.FileName + 403 CrLf + 'Perhaps not an Oni-.dat-file?'); 404 end else if ext = '.oldb' then 405 begin 406 if not CreateDataConnection(opend.FileName, ODB_ADB) then 407 ShowMessage('Error while loading the file:' + CrLf + opend.FileName + 408 CrLf + 'Perhaps not an OniUnPacker-LevelDatabase-file?'); 409 end else 410 ShowMessage('Incompatible file'); 411 AppSettings.DatPath := ExtractFilepath(opend.FileName); 412 end; 390 if CreateDataConnection(opend.FileName, ODB_Dat) <> nil then 391 UpdateConLists; 392 end else if ext = '.oldb' then 393 begin 394 if CreateDataConnection(opend.FileName, ODB_ADB) <> nil then 395 UpdateConLists; 396 end else 397 ShowMessage('Incompatible file'); 398 AppSettings.DatPath := ExtractFilepath(opend.FileName); 413 399 end; 414 400 UpdateStatBar; … … 451 437 procedure TForm_Main.menu_createdbClick(Sender: TObject); 452 438 begin 453 if Assigned(OniDataConnection) then439 { if Assigned(OniDataConnection) then 454 440 if MessageBox(Self.Handle, PChar('You have currently opened a level-file. ' + 455 441 'Do you want to close it to continue?'), PChar('Close file?'), … … 470 456 if saved.Execute then 471 457 Form_LevelDB.CreateDatabase(opend.FileName, saved.FileName); 472 end;458 }end; 473 459 474 460 … … 477 463 procedure TForm_Main.menu_createlvlClick(Sender: TObject); 478 464 begin 479 if Assigned(OniDataConnection) then465 { if Assigned(OniDataConnection) then 480 466 if MessageBox(Self.Handle, PChar('You have currently opened a level-file. ' + 481 467 'Do you want to close it to continue?'), PChar('Close file?'), … … 496 482 if saved.Execute then 497 483 Form_LevelDB.CreateLevel(opend.FileName, saved.FileName); 498 end;484 }end; 499 485 500 486 {#################################} -
oup/current/Tools/Extractor.dfm
r74 r86 2 2 Caption = 'Extractor' 3 3 ClientHeight = 491 4 ExplicitWidth = 5005 4 ExplicitHeight = 518 6 5 PixelsPerInch = 96 … … 22 21 inherited filelist: TListBox 23 22 Width = 333 24 Height = 362 23 Height = 338 24 ExplicitTop = 153 25 25 ExplicitWidth = 333 26 ExplicitHeight = 3 6226 ExplicitHeight = 338 27 27 end 28 28 inherited panel_extension: TPanel -
oup/current/Tools/Extractor.pas
r74 r86 108 108 filename := GetWinFilename(filelist.Items.Strings[i]); 109 109 if check_dat.Checked then 110 ExportDatFile( fileid, path + filename);110 ExportDatFile(Connection, fileid, path + filename); 111 111 if check_raw.Checked then 112 ExportRawFiles( fileid, path + filename);112 ExportRawFiles(Connection, fileid, path + filename); 113 113 if check_convert.Checked then 114 ExportConverted( fileid, path + filename);114 ExportConverted(Connection, fileid, path + filename); 115 115 Inc(done); 116 116 end; -
oup/current/Tools/Preview.pas
r46 r86 80 80 begin 81 81 OniImage := TOniImage.Create; 82 OniImage.Load( fileid);82 OniImage.Load(Connection, fileid); 83 83 Data := OniImage.GetAsBMP; 84 84 OniImage.Free; … … 137 137 i: Byte; 138 138 begin 139 OniDataConnection.LoadDatFilePart(_fileid, $14, SizeOf(loop_speed), @loop_speed);140 OniDataConnection.LoadDatFilePart(_fileid, $1C, SizeOf(linkcount), @linkcount);139 Connection.LoadDatFilePart(_fileid, $14, SizeOf(loop_speed), @loop_speed); 140 Connection.LoadDatFilePart(_fileid, $1C, SizeOf(linkcount), @linkcount); 141 141 SetBitmapCount(linkcount); 142 142 for i := 0 to linkcount - 1 do 143 143 begin 144 OniDataConnection.LoadDatFilePart(_fileid, $20 + i * 4, SizeOf(link), @link);144 Connection.LoadDatFilePart(_fileid, $20 + i * 4, SizeOf(link), @link); 145 145 link := link div 256; 146 146 if link = 0 then … … 180 180 else 181 181 actualimg := High(bitmaps); 182 Self.Caption := 'Preview ' + OniDataConnection.GetFileInfo(_fileid).FileName +182 Self.Caption := 'Preview ' + Connection.GetFileInfo(_fileid).FileName + 183 183 ' (' + IntToStr(actualimg + 1) + '/' + IntToStr(Length(bitmaps)) + ')'; 184 184 DrawImage(actualimg); … … 192 192 else 193 193 actualimg := 0; 194 Self.Caption := 'Preview ' + OniDataConnection.GetFileInfo(_fileid).FileName +194 Self.Caption := 'Preview ' + Connection.GetFileInfo(_fileid).FileName + 195 195 ' (' + IntToStr(actualimg + 1) + '/' + IntToStr(Length(bitmaps)) + ')'; 196 196 DrawImage(actualimg); -
oup/current/Tools/Template.dfm
r58 r86 43 43 object filelist: TListBox 44 44 Left = 0 45 Top = 1 2945 Top = 153 46 46 Width = 200 47 Height = 2 9447 Height = 270 48 48 Align = alClient 49 49 ItemHeight = 13 … … 52 52 OnClick = listClick 53 53 OnMouseDown = listMouseDown 54 ExplicitTop = 129 55 ExplicitHeight = 294 54 56 end 55 57 object panel_extension: TPanel … … 57 59 Top = 0 58 60 Width = 200 59 Height = 1 2961 Height = 153 60 62 Align = alTop 61 63 BevelOuter = bvNone … … 63 65 DesignSize = ( 64 66 200 65 1 29)67 153) 66 68 object Label2: TLabel 67 69 Left = 100 68 Top = 1 0570 Top = 129 69 71 Width = 17 70 72 Height = 18 … … 80 82 object Label1: TLabel 81 83 Left = 47 82 Top = 1 0584 Top = 129 83 85 Width = 17 84 86 Height = 18 … … 94 96 object label_ext: TLabel 95 97 Left = 2 96 Top = 6298 Top = 86 97 99 Width = 100 98 100 Height = 17 … … 103 105 object btn_sort_id_asc: TSpeedButton 104 106 Left = 3 105 Top = 1 01107 Top = 125 106 108 Width = 20 107 109 Height = 22 … … 124 126 object btn_sort_id_desc: TSpeedButton 125 127 Left = 23 126 Top = 1 01128 Top = 125 127 129 Width = 20 128 130 Height = 22 … … 144 146 object btn_sort_name_asc: TSpeedButton 145 147 Left = 58 146 Top = 1 01148 Top = 125 147 149 Width = 20 148 150 Height = 22 … … 164 166 object btn_sort_name_desc: TSpeedButton 165 167 Left = 78 166 Top = 1 01168 Top = 125 167 169 Width = 20 168 170 Height = 22 … … 184 186 object btn_sort_ext_asc: TSpeedButton 185 187 Left = 108 186 Top = 1 01188 Top = 125 187 189 Width = 20 188 190 Height = 22 … … 204 206 object btn_sort_ext_desc: TSpeedButton 205 207 Left = 128 206 Top = 1 01208 Top = 125 207 209 Width = 20 208 210 Height = 22 … … 222 224 OnClick = btn_sortClick 223 225 end 226 object Label3: TLabel 227 Left = 3 228 Top = 6 229 Width = 61 230 Height = 13 231 Caption = 'Connection: ' 232 end 233 object Bevel1: TBevel 234 Left = 0 235 Top = 25 236 Width = 199 237 Height = 3 238 Anchors = [akLeft, akTop, akRight] 239 Style = bsRaised 240 end 224 241 object combo_extension: TComboBox 225 242 Left = 2 226 Top = 76227 Width = 19 2243 Top = 100 244 Width = 196 228 245 Height = 21 229 246 Style = csDropDownList … … 243 260 object check_zerobyte: TCheckBox 244 261 Left = 2 245 Top = 44262 Top = 68 246 263 Width = 130 247 264 Height = 13 … … 252 269 object edit_filtername: TEdit 253 270 Left = 2 254 Top = 20255 Width = 19 2271 Top = 44 272 Width = 196 256 273 Height = 18 257 274 Anchors = [akLeft, akTop, akRight] … … 261 278 object check_filtername: TCheckBox 262 279 Left = 2 263 Top = 5280 Top = 29 264 281 Width = 130 265 282 Height = 15 … … 267 284 TabOrder = 0 268 285 OnClick = check_filternameClick 286 end 287 object combo_connection: TComboBox 288 Left = 64 289 Top = 3 290 Width = 134 291 Height = 21 292 Style = csDropDownList 293 Anchors = [akLeft, akTop, akRight] 294 ItemHeight = 13 295 TabOrder = 4 296 OnChange = combo_connectionChange 269 297 end 270 298 end -
oup/current/Tools/Template.pas
r83 r86 10 10 type 11 11 TNewFileSelectedEvent = procedure(fileinfo: TFileInfo) of object; 12 TNewConnectionEvent = procedure(connection: TOniData) of object; 12 13 13 14 TForm_ToolTemplate = class(TForm) … … 36 37 Label1: TLabel; 37 38 Label2: TLabel; 39 Label3: TLabel; 40 combo_connection: TComboBox; 41 Bevel1: TBevel; 38 42 procedure RecreateList; 43 procedure UpdateList; 44 procedure RecreateExtList; 39 45 procedure LoadFileNames; 40 46 procedure SelectFileName(filename: String); … … 56 62 procedure btn_sortClick(Sender: TObject); 57 63 procedure FormActivate(Sender: TObject); 64 procedure combo_connectionChange(Sender: TObject); 58 65 private 59 66 FSortBy: TSortType; 60 67 FOnNewFileSelected: TNewFileSelectedEvent; 68 FOnNewConnection: TNewConnectionEvent; 61 69 FAllowedExts: String; 62 70 FAllowMultiSelect: Boolean; 63 71 FSelectedFile: TFileInfo; 72 FConnection: TOniData; 64 73 procedure SetAllowedExts(exts: String); 65 74 procedure SetMultiSelect(allow: Boolean); … … 69 78 published 70 79 property OnNewFileSelected: TNewFileSelectedEvent read FOnNewFileSelected write FOnNewFileSelected; 80 property OnNewConnection: TNewConnectionEvent read FOnNewConnection write FOnNewConnection; 71 81 property AllowedExts: String read FAllowedExts write SetAllowedExts; 72 82 property AllowMultiSelect: Boolean read FAllowMultiSelect write SetMultiSelect; 73 83 property SelectedFile: TFileInfo read FSelectedFile; 84 property Connection: TOniData read FConnection; 74 85 end; 75 86 … … 83 94 84 95 96 procedure TForm_ToolTemplate.UpdateList; 97 var 98 i: Integer; 99 fn, datatype, boxstring: String; 100 level: Integer; 101 oldcon: String; 102 begin 103 oldcon := combo_connection.Items.Strings[combo_connection.ItemIndex]; 104 combo_connection.Items.Clear; 105 for i := 0 to High(DataConnections) do 106 begin 107 level := DataConnections[i].LevelInfo.LevelNumber; 108 fn := ExtractFileName(DataConnections[i].FileName); 109 if DataConnections[i].Backend = ODB_Dat then 110 datatype := 'ONI-.dat: ' 111 else if DataConnections[i].Backend = ODB_ADB then 112 datatype := 'OUP-DB: ' 113 else 114 datatype := 'Unknown: '; 115 boxstring := datatype + fn + ' (Level: ' + IntToStr(level) + ')'; 116 combo_connection.Items.Add(boxstring); 117 if oldcon = boxstring then 118 combo_connection.ItemIndex := combo_connection.Items.Count - 1; 119 end; 120 end; 121 85 122 procedure TForm_ToolTemplate.RecreateList; 123 var 124 i: Integer; 125 fn, datatype: String; 126 level: Integer; 127 begin 128 combo_connection.Items.Clear; 129 for i := 0 to High(DataConnections) do 130 begin 131 level := DataConnections[i].LevelInfo.LevelNumber; 132 fn := ExtractFileName(DataConnections[i].FileName); 133 if DataConnections[i].Backend = ODB_Dat then 134 datatype := 'ONI-.dat: ' 135 else if DataConnections[i].Backend = ODB_ADB then 136 datatype := 'OUP-DB: ' 137 else 138 datatype := 'Unknown: '; 139 combo_connection.Items.Add(datatype + fn + ' (Level: ' + IntToStr(level) + ')'); 140 end; 141 FConnection := DataConnections[0]; 142 combo_connection.ItemIndex := 0; 143 combo_connectionChange(Self); 144 end; 145 146 procedure TForm_ToolTemplate.RecreateExtList; 86 147 var 87 148 i: LongWord; … … 90 151 combo_extension.Items.Clear; 91 152 combo_extension.Items.Add('_All files_ (' + 92 IntToStr( OniDataConnection.GetFilesCount) + ')');93 exts := OniDataConnection.GetExtensionsList;153 IntToStr(FConnection.GetFilesCount) + ')'); 154 exts := FConnection.GetExtensionsList; 94 155 for i := 0 to High(exts) do 95 156 if Length(FAllowedExts) > 0 then … … 127 188 Extension := ''; 128 189 129 files := OniDataConnection.GetFilesList(extension, pattern, no_zero_bytes, FSortBy);190 files := FConnection.GetFilesList(extension, pattern, no_zero_bytes, FSortBy); 130 191 131 192 filelist.Visible := False; … … 143 204 ext: String; 144 205 begin 145 id := OniDataConnection.ExtractFileID(filelist.Items.Strings[filelist.ItemIndex]);206 id := FConnection.ExtractFileID(filelist.Items.Strings[filelist.ItemIndex]); 146 207 ext := RightStr(filelist.Items.Strings[filelist.ItemIndex], 4); 147 208 exportd.Filter := 'Files of matching extension (*.' + ext + ')|*.' + ext + '|All files|*.*'; 148 209 exportd.DefaultExt := ext; 149 210 if exportd.Execute then 150 ExportDatFile( id, exportd.FileName);211 ExportDatFile(FConnection, id, exportd.FileName); 151 212 end; 152 213 … … 158 219 data: TData; 159 220 begin 160 id := OniDataConnection.ExtractFileID(filelist.Items.Strings[filelist.ItemIndex]);161 finfo := OniDataConnection.GetFileInfo(id);221 id := FConnection.ExtractFileID(filelist.Items.Strings[filelist.ItemIndex]); 222 finfo := FConnection.GetFileInfo(id); 162 223 163 224 importd.Filter := 'Files of matching extension (*.' + finfo.Extension + ')|*.' + … … 174 235 SetLength(data, fs.Size); 175 236 fs.Read(data[0], fs.Size); 176 OniDataConnection.UpdateDatFile(id, data);237 FConnection.UpdateDatFile(id, data); 177 238 Self.listClick(Self); 178 239 end; … … 187 248 begin 188 249 sender_name := TComponent(Sender).Name; 189 id := OniDataConnection.ExtractFileID(filelist.Items.Strings[filelist.ItemIndex]);250 id := FConnection.ExtractFileID(filelist.Items.Strings[filelist.ItemIndex]); 190 251 context := MidStr(sender_name, Pos('_', sender_name) + 1, Length(sender_name) - Pos('_', sender_name)); 191 252 Form_Main.open_child(context, id); 192 253 end; 193 254 255 procedure TForm_ToolTemplate.combo_connectionChange(Sender: TObject); 256 var 257 name: String; 258 nstart, nend: Integer; 259 i: Integer; 260 begin 261 if combo_connection.ItemIndex >= 0 then 262 begin 263 name := combo_connection.Items.Strings[combo_connection.ItemIndex]; 264 nstart := Pos(' ', name) + 1; 265 nend := Pos('(', name) - 1; 266 name := MidStr(name, nstart, nend - nstart); 267 268 for i := 0 to High(DataConnections) do 269 begin 270 if ExtractFileName(DataConnections[i].FileName) = name then 271 begin 272 FConnection := DataConnections[i]; 273 Break; 274 end; 275 end; 276 if i = Length(DataConnections) then 277 FConnection := nil; 278 279 RecreateExtList; 280 if Assigned(FOnNewConnection) then 281 FOnNewConnection(FConnection); 282 end; 283 end; 284 194 285 procedure TForm_ToolTemplate.combo_extensionClick(Sender: TObject); 195 286 begin … … 205 296 inherited; 206 297 RecreateList; 298 FConnection := nil; 207 299 FSelectedFile.ID := -1; 208 300 FSelectedFile.FileName := ''; … … 270 362 if filelist.ItemIndex > -1 then 271 363 begin 272 fileid := OniDataConnection.ExtractFileID(364 fileid := FConnection.ExtractFileID( 273 365 filelist.Items.Strings[filelist.ItemIndex]); 274 FSelectedFile := OniDataConnection.GetFileInfo(fileid);366 FSelectedFile := FConnection.GetFileInfo(fileid); 275 367 if Assigned(FOnNewFileSelected) then 276 368 FOnNewFileSelected(FSelectedFile); … … 298 390 if filelist.Items.Count > 0 then 299 391 for i := 0 to filelist.Items.Count - 1 do 300 if OniDataConnection.ExtractFileID(filelist.Items.Strings[i]) = id then392 if FConnection.ExtractFileID(filelist.Items.Strings[i]) = id then 301 393 begin 302 394 filelist.ItemIndex := i; … … 321 413 begin 322 414 FAllowedExts := exts; 323 Recreate List;415 RecreateExtList; 324 416 end; 325 417 … … 368 460 Self.Height := 300; 369 461 FOnNewFileSelected := nil; 462 FOnNewConnection := nil; 370 463 FAllowedExts := ''; 371 464 FAllowMultiSelect := False; -
oup/current/Tools/TxmpReplace.dfm
r46 r86 1 1 inherited Form_TxmpReplace: TForm_TxmpReplace 2 2 Caption = 'TxmpReplace' 3 ExplicitWidth = 320 4 ExplicitHeight = 240 3 5 PixelsPerInch = 96 4 6 TextHeight = 13 … … 12 14 object image_txmppreview: TImage [0] 13 15 Left = 0 14 Top = 28316 Top = 307 15 17 Width = 200 16 Height = 3118 Height = 7 17 19 Align = alClient 18 20 ExplicitTop = 111 … … 21 23 object splitter_txmp: TSplitter [1] 22 24 Left = 0 23 Top = 2 7525 Top = 299 24 26 Width = 200 25 27 Height = 8 … … 35 37 Height = 146 36 38 Align = alTop 39 ExplicitTop = 153 37 40 ExplicitHeight = 146 38 41 end -
oup/current/Tools/TxmpReplace.pas
r54 r86 58 58 check_transparency.Checked := (depthbyte and $04) > 0; 59 59 60 OniImage_Old.LoadFromTXMP( fileid);60 OniImage_Old.LoadFromTXMP(connection, fileid); 61 61 old_size := OniImage_Old.GetImageDataSize((fadingbyte and $01) > 0); 62 62 Data := OniImage_Old.GetAsBMP;
Note:
See TracChangeset
for help on using the changeset viewer.