Changeset 240 for oup/current/FileClasses/SUBT.pas
- Timestamp:
- Jul 15, 2007, 1:12:26 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
oup/current/FileClasses/SUBT.pas
r233 r240 4 4 5 5 uses 6 _FileTypes ;6 _FileTypes, Grids, StdCtrls, ExtCtrls; 7 7 8 8 type 9 9 TFile_SUBT = class(TFile) 10 procedure SetOpened(Opened: Boolean); override; 11 private 12 grid: TStringGrid; 13 panel: TPanel; 14 save: TButton; 15 procedure saveclick(Sender: TObject); 10 16 public 11 17 procedure InitDataFields; override; … … 16 22 17 23 uses 18 ConnectionManager, Math, Classes, TypeDefs, _DataTypes, Forms, StdCtrls, Grids; 24 ConnectionManager, Math, Classes, TypeDefs, _DataTypes, Forms, 25 Controls; 19 26 20 27 procedure TFile_SUBT.InitDataFields; 21 var22 tempi: Integer;23 28 begin 24 29 inherited; 25 FDataFields := TBlock.Create(Self, nil, 0, 'Base', '', nil);30 FDataFields := TBlock.Create(Self, nil, 'Base', '', []); 26 31 with FDataFields do 27 32 begin 28 AddField(TFileID, $00, 'FileID', '', nil); 33 AddField(TFileID, 'FileID', '', []); 34 AddField(TLevelID, 'LevelID', '', []); 35 AddField(TUnused, 'Unused data', '', [16]); 29 36 30 AddField(T LevelID, $04, 'LevelID', '', nil);37 AddField(TRawLink, 'Raw Address', '', []); 31 38 32 tempi := 16; 33 AddField(TUnused, $08, 'Unused data', '', @tempi); 34 35 AddField(TRawLink, $18, 'Raw Address', '', nil); 36 37 tempi := 4; 38 with AddField(TArray, $1C, 'SUBT offsets array', '', @tempi) do 39 with TArray(AddField(TArray, 'SUBT offsets array', '', [4])) do 39 40 begin 40 tempi := 4;41 AddField(TInt, $00, 'Offset', '', @tempi);41 AddField(TInt, 'Offset', '', [4]); 42 SetCount; 42 43 end; 43 44 end; 45 FDataFields.Update(0, -1); 46 44 47 FFileStream.Free; 45 48 FFileStream := nil; 46 49 end; 47 50 48 49 51 procedure TFile_SUBT.InitEditor; 50 var51 grid: TStringGrid;52 52 begin 53 53 FEditor := TFrame.Create(nil); 54 54 grid := TStringGrid.Create(FEditor); 55 grid.Align := alClient; 56 grid.DefaultRowHeight := 18; 57 grid.DefaultColWidth := 100; 58 grid.ColCount := 2; 59 grid.RowCount := 4; 60 grid.FixedRows := 1; 61 grid.FixedCols := 0; 62 grid.ColWidths[0] := 80; 63 grid.ColWidths[1] := 200; 64 grid.Cells[0, 0] := 'Name'; 65 grid.Cells[1, 0] := 'Content'; 66 grid.Options := [goColSizing,goEditing, 67 goVertLine,goHorzLine,goFixedVertLine,goFixedHorzLine]; 55 68 grid.Parent := FEditor; 69 panel := TPanel.Create(FEditor); 70 panel.Align := alBottom; 71 panel.Height := 30; 72 panel.Parent := FEditor; 73 save := TButton.Create(panel); 74 save.Top := 2; 75 save.Left := 2; 76 save.Width := 100; 77 save.Height := 26; 78 save.Caption := 'Save'; 79 save.OnClick := saveclick; 80 save.Parent := panel; 81 end; 82 83 procedure TFile_SUBT.saveclick(Sender: TObject); 84 var 85 i,j: Integer; 86 temps: String; 87 fs: TFileStream; 88 offset: Integer; 89 begin 90 fs := TFileStream.Create('C:\Spiele\Oni\GameDataFolder\tests\messages_raw_recreated.hex', fmCreate); 91 92 i := grid.RowCount - 2; 93 FFileStream.Seek($1C, soFromBeginning); 94 FFileStream.Write(i, 4); 95 FFileStream.Size := $20 + i * 4; 96 97 for i := 0 to grid.RowCount - 2 do 98 begin 99 for j := 0 to 1 do 100 begin 101 if j = 0 then 102 begin 103 offset := fs.Size; 104 FFileStream.Seek($20 + i*4, soFromBeginning); 105 FFileStream.Write(offset, 4); 106 end; 107 temps := grid.Cells[j, i+1]; 108 SetLength(temps, Length(temps)+1); 109 temps[Length(temps)] := #0; 110 fs.Write(temps[1], Length(temps)); 111 end; 112 end; 113 fs.Free; 114 fs := TFileStream.Create('C:\Spiele\Oni\GameDataFolder\tests\messages_dat_recreated.hex', fmCreate); 115 ReCreateFile(fs); 116 fs.Free; 117 end; 118 119 120 procedure TFile_SUBT.SetOpened(Opened: Boolean); 121 var 122 i,j: Integer; 123 offset: Integer; 124 temps: String; 125 pos: Integer; 126 begin 127 inherited; 128 if Opened then 129 begin 130 CacheFile; 131 CacheRawFile($18); 132 133 FFileStream.Seek($1C, soFromBeginning); 134 FFileStream.Read(i, 4); 135 136 grid.RowCount := 1 + i; 137 138 for i := 0 to grid.RowCount - 2 do 139 begin 140 for j := 0 to 1 do 141 begin 142 if j = 0 then 143 begin 144 FFileStream.Seek($20 + i*4, soFromBeginning); 145 FFileStream.Read(offset, 4); 146 FRawCaches[0].Seek(offset, soFromBeginning); 147 end; 148 SetLength(temps, 200); 149 pos := 0; 150 repeat 151 Inc(pos); 152 FRawCaches[0].Read(temps[pos], 1); 153 until temps[pos] = #0; 154 SetLength(temps, pos - 1); 155 grid.Cells[j, i+1] := temps; 156 end; 157 end; 158 159 end else 160 begin 161 Exit; 162 end; 56 163 end; 57 164
Note:
See TracChangeset
for help on using the changeset viewer.