【施工中】究极日月Area数据结构研究


avatar
耿鬼酱 2024-05-19 115

Area指的是很多个小地图拼凑成一块的大地图(四代开始的设定)
数据文件编号:
究极之日:a083
究极之月:a084
文件数量为AreaId * 11(暂时未知这个AreaId的最大值,文件里一共3696 / 11 = 336个)
一个Area有11个文件,他们的具体用途可以在泄露源码里找到

enum DataIdx
{
  AREA_DATA_IDX_PLACEMENTDATA = 0,                               //! 配置情報
  AREA_DATA_IDX_TERRAIN_RESOURCE,                                //! 地形资源
  AREA_DATA_IDX_TERRAIN_LAYOUT_RESOURCE,                         //! 地形配置资源
  AREA_DATA_IDX_CHARACTOR_RESOURCE,                              //! 人物资源,可能是指行走图分布数据
  AREA_DATA_IDX_STATICMODEL_RESOURCE,                            //! 建模资源,可能是指建筑之类的建模配置
  AREA_DATA_IDX_EFFECT_RESOURCE,                                 //! 效果
  AREA_DATA_IDX_ENVIRONMENT_RESOURCE,                            //! 环境数据资源
  AREA_DATA_IDX_ZONE_SCRIPT_RESOURCE,                            //! 地图脚本数据资源
  AREA_DATA_IDX_INIT_SCRIPT_RESOURCE,                            //! 初始化脚本资源
  AREA_DATA_IDX_ENCOUNT_DATA,                                    //! 遭遇信息
  AREA_DATA_IDX_CAMERA_AREA_DATA,                                //! 摄像机数据
  AREA_DATA_IDX_NUM,
};

0:AREA_DATA_IDX_PLACEMENTDATA 配置文件

文件编号 = AreaId * 11 + 0
文件头数据格式,通用:

struct BinLinkerHeader
{
    u16 signature; // 2字节 签名
    u16 filenum;   // 2字节 文件数量

    u32 offset[1]; // 文件地址表格,具体大小为filenum * 4
};

配置文件一共有17个,分别是

  enum
  {
    PACK_IDX_POS,//<位置配置信息
    PACK_IDX_MOVEMODEL,//<行走图信息
    PACK_IDX_MAPJUMP,//<地图跳跃配置信息
    PACK_IDX_BG,//< BG配置信息
    PACK_IDX_STATICMODEL,//<配置模型配置信息
    PACK_IDX_ACTION,//<动作事件配置信息
    PACK_IDX_ENCOUNT,//<计数配置信息
    PACK_IDX_TRAINER,//<训练师配置信息
    PACK_IDX_GIMMICK_ENCOUNT,//基准计数配置信息
    PACK_IDX_TRAFFIC,//<往来配置信息
    PACK_IDX_PLACEMENT_ITEM,//<道具配置信息
    PACK_IDX_BERRY_POINT,//<仅限配置信息
    PACK_IDX_FISHING_SPOT,//<钓鱼点配置信息
    PACK_IDX_FINDER_SPOT,//<取景器点配置信息
    PACK_IDX_CONTACT_POKEMON,//<口袋妖怪接触表现用配置信息
    PACK_IDX_PUSHROCK,//<岩石挤压信息
    //按区域配置的数据
    PACK_IDX_ENVSOUND,//<环境声音配置信息
    PACK_IDX_MAX,
  };

函数GetZonePlacementData

行走图信息

最大数量:32
结构:

  // 待机运动数据条件运动数据,当var的值成立时运行的动画
  struct DefaultWaitAnimeDataIf
  {
    u32 motionId;       // モーションID
    u32 flagwork;       // フラグワークID
    u32 flagwork_num;   // ワーク値
  };

  // 待机运动数据
  struct DefaultWaitAnimeData
  {
    u32 defaultMotionID;
    u32 defaultMotionIDNum;
    DefaultWaitAnimeDataIf anime_if[3];
  };
  // 行走图数据
  struct MoveModelData
  {
    u32 type;             // 类型
    f32 position[3];      // 坐标
    f32 quaternion[4];    // 姿势
    u32 romVersion;       // ROM版本
    u32 flagwork;         // flag或者变量,当这个值超过0x4000时判定为var
    u32 flagwork_num;     // 值
    u32 eventID;          // 事件Id
    u32 moveCode;         // 动作类型
    u32 characterId;      // 人物模型ID
    u32 scriptID;         // 脚本ID
    DefaultWaitAnimeData defaultAnimeData;  // 默认动画数据
    u32 alias;            // 别名标志,外星人?
    u32 reversetime_type; // 反转世界?
    u32 talkCollisionOffset;// 对话碰撞?
    u32 collisionOffset;    // 移动碰撞?
  };
  // 数据大小 120

  // 头数据参考struct BinLinkerHeader
  // 具体结构
  struct MoveModelDataHeader
  {
    u32 num;
    MoveModelData data[];
  };
  
FIELD_PLACEMENT_DATA_TYPE_POSEVENT, // 地点事件?
FIELD_PLACEMENT_DATA_TYPE_MVMODEL, // 人物行走图,也可以指移动模型
FIELD_PLACEMENT_DATA_TYPE_BGEVENT, // bg事件

暂无评论

当前仅支持登录后发布评论

相关阅读

分类目录