[转帖]mir3 源代码研究
<strong><br/><br/></strong>第一讲:<br/> 韩国3.0传奇wil文件说明 <p></p><p>Animationsc.wil 游戏里一些动画的图片(灯台、晾的衣服、椰子树等)<br/>Cliffsc.wil 各种岩石、岩石与草地结合的图片 <br/>DMon-1.wil 怪物被麻痹的各种动作图<br/>DMon-1.wil 同上怪物的阴影图<br/>Dungeonsc.wil 一些岩石(蚂蚁洞)的图片<br/>Equip.wil 各种物品在装备栏里的图片<br/>Fmmap.wil 陆地上所有地图的小地图图片<br/>Furnituresc.wil 房间里的物品及阶梯的图片<br/>GameInter.wil 游戏界面所看到的图片<br/>Ground.wil 物品在地面所显示时的图片<br/>Horse.wil 三种马的图片<br/>Housesc.wil 房子的图片<br/>Innersc.wil 房子的四壁、房顶的图片(沙漠、土城房子)<br/>Interface1c.wil 刚进入游戏到人物选择所看到各个图片<br/>Inventory.wil 在商店里买东西时所显示的物品的图片<br/>Magic.wil 各种魔法效果图<br/>M-Hair.wil 男性头发图<br/>M-Helmet1.wil 男性所戴头盔的各个方向的图片<br/>M-Hum.wil 男性的各种模型、动作图片(裸身、穿衣服、骑马、钩鱼)<br/>MIcon.wil 魔法图标的图片<br/>mmap.wil 小地图的地图<br/>Mon-1~13.wil 所有怪物的图片<br/>MonS-1~13.wil 所有怪物的阴影图片<br/>M-Weapon1~4.wil 男性拿在手里的武器的各个方向的图片<br/>Npc.wil 游戏里NPC的图片<br/>Npcface.wil NPC的脸面图<br/>object1~2c.wil 建筑物及一些NPC前杂物的图片<br/>ProgUse.wil 在装备栏所看人物裸身图像及头发的图片 <br/>SmObjectsc.wil 一些建筑物、树木、杂物的图片<br/>SmTilesc.wil 地面上的小图片<br/>Tiles30c.wil 城内地砖、草地、草池边的图片<br/>Tiles5c.wil 大海、海与陆地交错地、陆地表面的图片<br/>Tilesc.wil 同上 <br/>Wallsc.wil 城墙的图片<br/>WM-Hair.wil 女性头发图片<br/>WM-Helmet1.wil 女性所戴头盔的各个方向的图片<br/>WM-Hum.wil 女性的各种模型、动作图片(裸身、穿衣服、骑马、钩鱼)<br/>WM-Weapon1~4.wil 女性拿在手里的武器的各个方向的图片<br/></p> 第二讲:interfacec2.wil 并不能用gameinter.wil替代 <p></p><p>请看韩国源代码:<br/>m_pxInterImg->NewLoad(".\\Data\\gameinter.wil");<br/>m_xInterImgEx.NewLoad(".\\Data\\interfacec2.wil");<br/><br/>显然是在加载了gameinter.wil之后再加载interfacec2.wil,不可以简单替换掉!<br/></p> 第三讲:关于界面中文I/O问题的解决 <p></p><p>//韩文<br/>//HFONT CreateGameFont(LPCSTR szFontName, INT nHeight, INT nWidth = 0, INT nWeight = FW_NORMAL, BOOL bItalic = FALSE, BOOL bULine = FALSE, BOOL bStrikeOut = FALSE, DWORD dwCharSet = HANGEUL_CHARSET);</p><p>//中文<br/>HFONT CreateGameFont(LPCSTR szFontName, INT nHeight, INT nWidth = 0, INT nWeight = FW_NORMAL, BOOL bItalic = FALSE, BOOL bULine = FALSE, BOOL bStrikeOut = FALSE, DWORD dwCharSet = GB2312_CHARSET);<br/></p> 第四讲:mir3 的wil文件格式破译 <p></p><p>下面是 Interface1c.wil 文件的16进制码,该文件14959571字节。</p><p>0100494C49422076312E302D57454D414445000000008813D007000077572AC08002E001E8FFF0FF30E8FF6800C6500400000000005400C0008A01C1004E00010020006110E3204431453165316639A641C749C751C75186416539653944310321E320E320C220A218C318A2188210811082108210410820006110A21882106110611061106110611061106110611061106108410841084108410841084108410841082108400841084108610861104108200840084108610861084108200001002000200020002000200020002000200020006108C310C3102100C000A8005600C0008901C1005000010020004108A218C218C2180321453166398641A64186418641A749A749863965394531242924292429E320C320A318C318A2188110821082106110200041088218A21881106110611061106110611061106108610841.....</p><p>文件结构源代码为:</p><p>#pragma pack(1)</p><p>typedef struct tagWILFILEHEADER<br/>{<br/>CHAR szTmp;<br/>INT nImageCount;<br/>}WILFILEHEADER, *LPWILFILEHEADER;</p><p>typedef struct tagWILFILEIMAGEINFO<br/>{<br/>SHORT shWidth;<br/>SHORT shHeight;<br/>SHORT shPX;<br/>SHORT shPY;<br/>DWORD dwImageLength;<br/>}WILIMAGEINFO, *LPWILIMAGEINFO;</p><p>typedef struct tagWIXFILEIMAGEINFO<br/>{<br/>CHAR szTmp;<br/>INT nIndexCount;<br/>INT* pnPosition;<br/>}WIXIMAGEINFO, *LPWIXIMAGEINFO;</p><p><br/>typedef struct tagNEWWILFILEHEADER<br/>{<br/>SHORT shComp;<br/>CHAR szTitle;<br/>SHORT shVer;<br/>INT nImageCount;<br/>}NEWWILFILEHEADER, *LPNEWWILFILEHEADER;</p><p>typedef struct tagNEWWILFILEIMAGEINFO<br/>{<br/>SHORT shWidth;<br/>SHORT shHeight;<br/>SHORT shPX;<br/>SHORT shPY;<br/>CHAR bShadow; <br/>SHORT shShadowPX;<br/>SHORT shShadowPY;<br/>DWORD dwImageLength;<br/>}NEWWILIMAGEINFO, *LPNEWWILIMAGEINFO;<br/>typedef struct tagNEWWIXFILEIMAGEINFO<br/>{<br/>CHAR szTitle;<br/>INT nIndexCount;<br/>INT* pnPosition;<br/>}NEWWIXIMAGEINFO, *LPNEWWIXIMAGEINFO;</p><p>注意#pragma pack(1)是为了确保存储结构与逻辑结构有同样的布局,这样我们才可以确信文件映像里的字节顺序与我们的设计相符合。</p><p>有了上面的数据,数据结构和说明,应该很容易从上面的16制码中计算出Interface1c.wil 文件的长度正好是14959571字节,从而验证了网上流传 的mir2ex的源码正是光通现在运行的mir3的源码的稍早版本,c/c++版本的服务端也正是原传奇2的服务端,里面包含有大量的传奇早期版本的对照代码。</p><p>类似方法可以分析出map wix 文件的结构。全都是吻合的。</p><p>本人经过整整两个半月的日夜奋斗,现已经完成调试和改造,客户端可兼容盛大传奇与光通传奇,运行稳定流畅。<br/></p>
页:
[1]