ryan_knight_12吧 关注:43,139贴子:2,618,162

bin文件结构解析-地形信息相关文件-转载自naver

只看楼主收藏回复

一楼不给看


IP属地:浙江1楼2021-09-19 14:29回复
    为啥我自己电脑上看不到帖子


    IP属地:浙江来自iPhone客户端4楼2021-09-19 14:35
    回复


      IP属地:浙江5楼2021-09-19 14:38
      回复
        2. 地图结构

        地形线框选项已打开(放大视图)
        该地图由 1025 x 1025 个点(1024x 1024 个面)组成。
        点之间的距离为 5。
        高度以1个字节表示(从0到255),乘以0.5得到实际高度值。
        左(缩小屏幕)/右(放大屏幕)
        如左图,当屏幕处于缩小状态时(正常情况),以每单元格2x2(512 x 512面)为单位进行渲染
        当屏幕放大时,如右图所示以 4x4 为单位进行渲染。(1024 x 1024 边)
        为了分类,右侧称为1x1坐标系,左侧为2x2坐标系,游戏中使用的单元格称为hex坐标系。


        IP属地:浙江6楼2021-09-19 14:40
        收起回复
          与hex(瓷砖)坐标系相关的内容在下面的链接中有很好的解释。
          三国志 11 是一个odd-q 坐标系。
          https://www.redblobgames.com/grids/hexagons/


          IP属地:浙江7楼2021-09-19 14:40
          回复

            三国志11全地图及可玩区域

            Hex坐标系 (0, 0)
            由于hex坐标系由 200 x 200 个格子组成,因此它位于 1x1 坐标系(1024 x 1024) 的中心。
            它从1x1 坐标系中的 (112, 112) 开始。
            单元格的中心需要分别给x和y加2,如果单元格的x坐标为奇数,则给y加2。


            IP属地:浙江8楼2021-09-19 14:42
            回复
              3. 文件结构
              可能会有错误的地方
              3-1. media/stage/default.hex
              structSHEX
              {
              uint32_t signature;// SHEX
              uint32_t version;// 8
              struct __8
              {
              int8_t terrain;// 0 지형地形
              int16_t area;// 1 구역(거점번호) 区域(据点编号)
              int8_t obstacle;// 3 장애물障碍物
              int8_t direction;// 4 방향方向
              int8_t development;// 5 개발지여부是否开发区
              int8_t defense;// 6 방어여부是否防御区
              int8_t den;// 7 본거지여부是否堤坝
              int8_t flood;// 8 제방피해여부堤坝是否受损
              int8_t _9;
              int8_t ruins;// a 묘여부是否遗迹
              };
              __8 arr[200][200];
              };
              static_assert(sizeof(SHEX)==0x6B6C8);
              enumterrain_t
              {
              // 参考scenario.s11
              };
              enumobstacle_t
              {
              NONE=0,//无없음
              LEVEE=1,//堤坝제방
              ROCKFALL=2,//落石낙석
              };
              enumdirection_t
              {
              UP_LEFT=0,// 북서西北
              UP=1,// 북北
              UP_RIGHT=2,// 북동东北
              DOWN_LEFT=3,// 남서西南
              DOWN=4,// 남南
              DOWN_RIGHT=5,// 남동东南
              };


              IP属地:浙江9楼2021-09-19 14:43
              回复
                3-2. media/stage/color_*.sea
                structGCOL
                {
                uint32_t signature;// GCOL
                uint32_t version;// 1
                rgb24_t color[1025][1025];// 24비트 rgb 색상24位rgb颜色
                };
                static_assert(sizeof(GCOL)==0x30180B);


                IP属地:浙江10楼2021-09-19 14:44
                回复
                  3-2-1. 转换为图像的结果(作为附件上传image.zip)









                  IP属地:浙江11楼2021-09-19 14:47
                  回复
                    3-3. media/stage/default.sef
                    structSEFF
                    {
                    uint32_t signature;// SEFF
                    uint32_t version;// 1
                    uint32_t count;// 개수计数
                    struct __10
                    {
                    int16_t effect;// 효과效果
                    float x;// 월드좌표世界坐标
                    float y;// 월드좌표世界坐标
                    float z;// 월드좌표世界坐标
                    floatrotation;// 회전旋转
                    };
                    __10 arr[1];// count 만큼(최대 24444) 计数(最多24444)
                    };
                    static_assert(sizeof(SEFF)==0xC+0x12);
                    3-4. media/stage/default.stg
                    structK3ST
                    {
                    uint32_t signature;// K3ST
                    uint32_t version;// 6
                    struct __8
                    {
                    uint8_t height;// 높이高度
                    rgb24_tcolor;//颜色(已弃用并由 SEA 文件替换)
                    rgb24_tnormal;// 그림자阴影
                    uint8_t _7;
                    };
                    __8 vertex[1025][1025];
                    struct __804010
                    {
                    uint64_t _0 :1;// 항상 1 总是1
                    uint64_t _1 :1;//
                    uint64_t num_layers :2;// 1x1 레이어수(-1) x1 层数(-1)
                    uint64_t layer0_tex :6;// 1x1 텍스처纹理
                    uint64_t layer0_flags :4;// 1x1 텍스처플래그纹理标志
                    uint64_t layer1_tex :6;// 1x1 텍스처纹理
                    uint64_t layer1_flags :4;// 1x1 텍스처플래그纹理标志
                    uint64_t layer2_tex :6;// 1x1 텍스처纹理
                    uint64_t layer2_flags :4;// 1x1 텍스처플래그纹理标志
                    uint64_t layer3_tex :6;// 1x1 텍스처纹理
                    uint64_t layer3_flags :4;// 1x1 텍스처플래그纹理标志
                    uint64_t water_level :8;// 물높이水高度
                    uint64_t water_type :2;// 물지형종류水地形类型
                    uint64_t layerl_tex :6;// 2x2 텍스처纹理
                    uint64_t layerl_flags :4;// 2x2 텍스처플래그纹理标志
                    };
                    // 2x2일경우 512x512이기때문에 [0][0] layer0, [1][0]layer1, [0][1] layer2, [1][1] layer3
                    // 2x2由于是512x512,所以对应关系是 [0][0] layer0, [1][0] layer1, [0][1]layer2, [1][1] layer3。
                    __804010 face[1024][1024];
                    };
                    static_assert(sizeof(K3ST)==0x1004010);
                    enumflags_t
                    {
                    BOTTOM_RIGHT=0x1,
                    BOTTOM_LEFT=0x2,
                    TOP_RIGHT=0x4,
                    TOP_LEFT=0x8,
                    };
                    enumwater_t
                    {
                    NORMAL=0,//일반물지형普通水地形
                    POISON=1,//독천毒泉
                    };


                    IP属地:浙江12楼2021-09-19 14:48
                    回复
                      3-4-1. 转换为图像的结果(作为附件上传image.zip)

                      3-4-2. 纹理重复
                      纹理是 1x1 坐标系中每平方 32 像素。
                      在下图中,您可以看到基于 2x2 坐标系(缩小屏幕)在每个单元格中绘制了 64 个像素。


                      IP属地:浙江13楼2021-09-19 14:51
                      回复
                        3-4-3. 标志


                        IP属地:浙江14楼2021-09-19 14:52
                        回复
                          3-4-4. 层 layer
                          如果第 n 层的纹理数小于第 n 层以下的纹理数,则第 n 层不可见。
                          如果第 n 层为空(标志为 0),则它在第 n+1 层不可见。


                          IP属地:浙江15楼2021-09-19 14:52
                          回复
                            3-4-5. 水地形
                            水面地形以 4x4 为基础渲染,高度确定如下。
                            for(intx =0; x <256; x++)
                            {
                            for(inty =0; y <256; y++)
                            {
                            for(intx2 =0; x2<4; x2++)
                            {
                            for(inty2 =0; y2<4; y2++)
                            {
                            if(face[x + x2][y + y2].water_level>0)
                            returnface[x + x2][y + y2].water_level;
                            }
                            }
                            }
                            }
                            3-5. media/stage/object.sto
                            structOBJS
                            {
                            uint32_t signature;// OBJS
                            uint32_t version;// 4
                            struct __8
                            {
                            int8_t use;// 사용여부是否使用
                            int16_t model;// 모델模型
                            uint16_t x;// 2x2 좌표2x2坐标
                            uint16_t y;// 2x2 좌표2x2坐标
                            uint8_t z;// 좌표坐标
                            float rotation;// 회전旋转
                            uint8_t _c;
                            uint8_t _d;
                            };
                            __8 arr[65535];
                            };
                            static_assert(sizeof(OBJS)==0xDFFFA);


                            IP属地:浙江16楼2021-09-19 14:52
                            回复
                              卧槽


                              IP属地:北京来自Android客户端17楼2021-09-19 14:53
                              回复