150 lines
3.6 KiB
Plaintext
150 lines
3.6 KiB
Plaintext
|
(*
|
||
|
* CDDL HEADER START
|
||
|
*
|
||
|
* The contents of this file are subject to the terms of the
|
||
|
* Common Development and Distribution License, Version 1.0 only
|
||
|
* (the "License"). You may not use this file except in compliance
|
||
|
* with the License.
|
||
|
*
|
||
|
* You can obtain a copy of the license at
|
||
|
* http://www.opensource.org/licenses/cddl1.php.
|
||
|
* See the License for the specific language governing permissions
|
||
|
* and limitations under the License.
|
||
|
*
|
||
|
* When distributing Covered Code, include this CDDL HEADER in each
|
||
|
* file and include the License file at
|
||
|
* http://www.opensource.org/licenses/cddl1.php. If applicable,
|
||
|
* add the following below this CDDL HEADER, with the fields enclosed
|
||
|
* by brackets "[]" replaced with your own identifying * information:
|
||
|
* Portions Copyright [yyyy] [name of copyright owner]
|
||
|
*
|
||
|
* CDDL HEADER END
|
||
|
*
|
||
|
*
|
||
|
* Portions Copyright 2007 Andreas Schneider
|
||
|
*)
|
||
|
unit UAnimData;
|
||
|
|
||
|
interface
|
||
|
|
||
|
uses
|
||
|
Classes, UMulBlock;
|
||
|
|
||
|
const
|
||
|
AnimDataSize = 68;
|
||
|
AnimDataGroupSize = 4 + (8 * AnimDataSize);
|
||
|
|
||
|
type
|
||
|
TAnimData = class(TMulBlock)
|
||
|
constructor Create(Data: TStream);
|
||
|
function GetSize: Integer; override;
|
||
|
procedure Write(Data: TStream); override;
|
||
|
private
|
||
|
FOffset: Int64;
|
||
|
FUnknown: Byte;
|
||
|
FFrameCount: Byte;
|
||
|
FFrameInterval: Byte;
|
||
|
FFrameStart: Byte;
|
||
|
public
|
||
|
FrameData: array[0..63] of ShortInt;
|
||
|
published
|
||
|
property Offset: Int64 read FOffset write FOffset;
|
||
|
property Unknown: Byte read FUnknown write FUnknown;
|
||
|
property FrameCount: Byte read FFrameCount write FFrameCount;
|
||
|
property FrameInterval: Byte read FFrameInterval write FFrameInterval;
|
||
|
property FrameStart: Byte read FFrameStart write FFrameStart;
|
||
|
end;
|
||
|
TAnimDataGroup = class(TMulBlock)
|
||
|
constructor Create(Data: TStream);
|
||
|
destructor Destroy; override;
|
||
|
function GetSize: Integer; override;
|
||
|
procedure Write(Data: TStream); override;
|
||
|
private
|
||
|
FOffset: Int64;
|
||
|
FUnknown: LongInt;
|
||
|
public
|
||
|
AnimData: array[0..7] of TAnimData;
|
||
|
published
|
||
|
property Offset: Int64 read FOffset write FOffset;
|
||
|
property Unknown: LongInt read FUnknown write FUnknown;
|
||
|
end;
|
||
|
|
||
|
function GetAnimDataOffset(Block: Integer): Integer;
|
||
|
|
||
|
implementation
|
||
|
|
||
|
function GetAnimDataOffset;
|
||
|
var
|
||
|
group, tile: Integer;
|
||
|
begin
|
||
|
group := Block div 8;
|
||
|
tile := Block mod 8;
|
||
|
|
||
|
Result := group * AnimDataGroupSize + 4 + tile * AnimDataSize;
|
||
|
end;
|
||
|
|
||
|
constructor TAnimData.Create;
|
||
|
begin
|
||
|
if assigned(Data) then
|
||
|
begin
|
||
|
FOffset := Data.Position;
|
||
|
Data.Read(FrameData, 64);
|
||
|
Data.Read(FUnknown, SizeOf(Byte));
|
||
|
Data.Read(FFrameCount, SizeOf(Byte));
|
||
|
Data.Read(FFrameInterval, SizeOf(Byte));
|
||
|
Data.Read(FFrameStart, SizeOf(Byte));
|
||
|
end;
|
||
|
end;
|
||
|
|
||
|
procedure TAnimData.Write;
|
||
|
begin
|
||
|
Data.Write(FrameData, 64);
|
||
|
Data.Write(FUnknown, SizeOf(Byte));
|
||
|
Data.Write(FFrameCount, SizeOf(Byte));
|
||
|
Data.Write(FFrameInterval, SizeOf(Byte));
|
||
|
Data.Write(FFrameStart, SizeOf(Byte));
|
||
|
end;
|
||
|
|
||
|
function TAnimData.GetSize;
|
||
|
begin
|
||
|
GetSize := AnimDataSize;
|
||
|
end;
|
||
|
|
||
|
constructor TAnimDataGroup.Create;
|
||
|
var
|
||
|
i: Integer;
|
||
|
begin
|
||
|
if assigned(Data) then
|
||
|
begin
|
||
|
FOffset := Data.Position;
|
||
|
Data.Read(FUnknown, SizeOf(LongInt));
|
||
|
end;
|
||
|
for i := 0 to 7 do
|
||
|
AnimData[i] := TAnimData.Create(Data);
|
||
|
end;
|
||
|
|
||
|
destructor TAnimDataGroup.Destroy;
|
||
|
var
|
||
|
i: Integer;
|
||
|
begin
|
||
|
for i := 0 to 7 do
|
||
|
AnimData[i].Free;
|
||
|
end;
|
||
|
|
||
|
procedure TAnimDataGroup.Write;
|
||
|
var
|
||
|
i: Integer;
|
||
|
begin
|
||
|
Data.Write(FUnknown, SizeOf(LongInt));
|
||
|
for i := 0 to 7 do
|
||
|
AnimData[i].Write(Data);
|
||
|
end;
|
||
|
|
||
|
function TAnimDataGroup.GetSize;
|
||
|
begin
|
||
|
GetSize := AnimDataGroupSize;
|
||
|
end;
|
||
|
|
||
|
end.
|
||
|
|