Fallout2 中的 图形/动画 文件格式
我在制作 Frameout 的之后写成了本文档
原始参考为 MOD 资源中的 #FRM
现在用文档描述为易懂的格式。
- //*********************************************************
- //* FRM file format
- //* Author : BlackIsle;Zealic
- //* File : FRM_FORMAT.txt
- //* CreateDate : 2007-04-15
- //* LastUpdate : 2007-04-21
- //* Version : 1.3
- //* ExtensionName : .frm
- //* Description :
- //* 当使用默认调色板时,第0个颜色是透明色。
- //* 如果存在和 frame 名字相同的调色板文件,那么该Frame 有如下规则:
- //* 需要增亮调色板颜色(RGB 各 <<2),第0个颜色不再是透明色。
- //*
- //* 如何计算当前帧的中心位置?
- //* 当前帧的中心位置的计算公式如下:
- //* Frame.X = Screen.Width / 2 + Frame.Width / 2 + IncrementOffsetX + (之前所有帧的IncrementOffsetX的总和)
- //* Frame.Y = Screen.Height / 2 + Frame.Height / 2 + IncrementOffsetY + (之前所有帧的IncrementOffsetY的总和)
- //*********************************************************
- [Endian(Value = "big-endian")]
- struct TFRM
- {
- [Const(Value = 0x00000004)]
- int32 Magic;
- int16 Fps;
- // 标志该文件所描述的动作类型,如闪躲、投掷、近战攻击、远程攻击
- int16 ActionType;
- // 如果值为1,代表该文件为静态图
- int16 FrameCount;
- int32 TotalDataSize;
- [List(Size = 6,IndexType = TDirection))]
- TList<int16>[] DirectionOffsetX;
- [List(Size = 6,IndexType = TDirection))]
- TList<int16>[] DirectionOffsetY;
- [List(Size = 6,IndexType = TDirection))]
- TList<int32>[] DirectionImageDataOffset;
- [ArrayList(Size = ActionCount,IndexType = TDirection)]
- TArrayList<TAction>[] Actions;
- }
- struct TAction
- {
- [Array(Size = TDriection.MemberCount))]
- TList<TFrameImage>[] FrameImages;
- }
- struct TFrameImage
- {
- int16 Width;
- int16 Height;
- int32 DataSize;
- //增量 X 座标位移,要计算该帧的实际偏移,需要叠加之前所有帧的偏移
- int16 IncrementOffsetX;
- //增量 Y 座标位移,要计算该帧的实际偏移,需要叠加之前所有帧的偏移
- int16 IncrementOffsetY;
- [Array(Size = (this.DataSize))]
- int8[] ImageData;
- }
- enum TDirection : int16
- {
- NorthEast = 0;
- East = 1;
- SouthEast = 2;
- SouthWest = 3;
- West = 4;
- NorthWest = 5;
- }
复制代码 |