13号避难所

标题: FRM 文件格式 [打印本页]

作者: zealic    时间: 2007-4-19 23:34
标题: FRM 文件格式
Fallout2 中的 图形/动画 文件格式

我在制作 Frameout 的之后写成了本文档
原始参考为 MOD 资源中的 #FRM
现在用文档描述为易懂的格式。
  1. //*********************************************************
  2. //* FRM file format
  3. //* Author        : BlackIsle;Zealic
  4. //* File          : FRM_FORMAT.txt
  5. //* CreateDate    : 2007-04-15
  6. //* LastUpdate    : 2007-04-21
  7. //* Version       : 1.3
  8. //* ExtensionName : .frm
  9. //* Description   :
  10. //*   当使用默认调色板时,第0个颜色是透明色。
  11. //*   如果存在和 frame 名字相同的调色板文件,那么该Frame 有如下规则:
  12. //*   需要增亮调色板颜色(RGB 各 <<2),第0个颜色不再是透明色。
  13. //*   
  14. //*   如何计算当前帧的中心位置?
  15. //*   当前帧的中心位置的计算公式如下:
  16. //*    Frame.X = Screen.Width / 2 + Frame.Width / 2 + IncrementOffsetX + (之前所有帧的IncrementOffsetX的总和)
  17. //*    Frame.Y = Screen.Height / 2 + Frame.Height / 2 + IncrementOffsetY + (之前所有帧的IncrementOffsetY的总和)
  18. //*********************************************************
  19. [Endian(Value = "big-endian")]
  20. struct TFRM
  21. {
  22.   [Const(Value = 0x00000004)]
  23.   int32                      Magic;
  24.   int16                      Fps;
  25.   // 标志该文件所描述的动作类型,如闪躲、投掷、近战攻击、远程攻击
  26.   int16                      ActionType;
  27.   // 如果值为1,代表该文件为静态图
  28.   int16                      FrameCount;
  29.   int32                      TotalDataSize;
  30.   [List(Size = 6,IndexType = TDirection))]
  31.   TList<int16>[]             DirectionOffsetX;      
  32.   [List(Size = 6,IndexType = TDirection))]
  33.   TList<int16>[]             DirectionOffsetY;
  34.   [List(Size = 6,IndexType = TDirection))]
  35.   TList<int32>[]             DirectionImageDataOffset;
  36.   [ArrayList(Size = ActionCount,IndexType = TDirection)]
  37.   TArrayList<TAction>[]      Actions;
  38. }
  39. struct TAction
  40. {
  41.   [Array(Size = TDriection.MemberCount))]
  42.   TList<TFrameImage>[] FrameImages;
  43. }
  44. struct TFrameImage
  45. {
  46.   int16  Width;
  47.   int16  Height;
  48.   int32  DataSize;
  49.   //增量 X 座标位移,要计算该帧的实际偏移,需要叠加之前所有帧的偏移
  50.   int16  IncrementOffsetX;
  51.   //增量 Y 座标位移,要计算该帧的实际偏移,需要叠加之前所有帧的偏移
  52.   int16  IncrementOffsetY;
  53.   [Array(Size = (this.DataSize))]
  54.   int8[] ImageData;
  55. }
  56. enum TDirection : int16
  57. {
  58.   NorthEast = 0;
  59.   East = 1;
  60.   SouthEast = 2;
  61.   SouthWest = 3;
  62.   West = 4;
  63.   NorthWest = 5;
  64. }
复制代码

作者: bombboy    时间: 2011-9-24 14:46
还是有点不明白,有人继续做吗?
作者: 百想    时间: 2013-12-15 18:24
获选者 去年 过世 29岁,,,不是我朋友吧 ,FOL的爱好者




欢迎光临 13号避难所 (https://bn13.net/) Powered by Discuz! X3.2