请选择 进入手机版 | 继续访问电脑版

13号避难所

 找回密码
 立即注册
搜索
查看: 8454|回复: 2

FRM 文件格式

[复制链接]
发表于 2007-4-19 23:34:50 | 显示全部楼层 |阅读模式
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. }
复制代码
发表于 2011-9-24 14:46:25 | 显示全部楼层
还是有点不明白,有人继续做吗?
发表于 2013-12-15 18:24:25 | 显示全部楼层
获选者 去年 过世 29岁,,,不是我朋友吧 ,FOL的爱好者
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Archiver|13号避难所

GMT+8, 2024-3-29 10:00 , Processed in 0.062490 second(s), 14 queries .

快速评论 返回顶部 返回列表