fair 发表于 2006-12-7 22:06:00

[转帖]mir3 源代码研究

<strong><br/><br/></strong>第一讲:<br/>&nbsp;韩国3.0传奇wil文件说明 <p></p><p>Animationsc.wil&nbsp;&nbsp;游戏里一些动画的图片(灯台、晾的衣服、椰子树等)<br/>Cliffsc.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;各种岩石、岩石与草地结合的图片&nbsp;<br/>DMon-1.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;怪物被麻痹的各种动作图<br/>DMon-1.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同上怪物的阴影图<br/>Dungeonsc.wil&nbsp;&nbsp;&nbsp;一些岩石(蚂蚁洞)的图片<br/>Equip.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;各种物品在装备栏里的图片<br/>Fmmap.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;陆地上所有地图的小地图图片<br/>Furnituresc.wil&nbsp;&nbsp;&nbsp;房间里的物品及阶梯的图片<br/>GameInter.wil&nbsp;&nbsp;&nbsp;&nbsp;游戏界面所看到的图片<br/>Ground.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;物品在地面所显示时的图片<br/>Horse.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;三种马的图片<br/>Housesc.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;房子的图片<br/>Innersc.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;房子的四壁、房顶的图片(沙漠、土城房子)<br/>Interface1c.wil&nbsp;&nbsp;刚进入游戏到人物选择所看到各个图片<br/>Inventory.wil&nbsp;&nbsp;&nbsp;&nbsp;在商店里买东西时所显示的物品的图片<br/>Magic.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;各种魔法效果图<br/>M-Hair.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;男性头发图<br/>M-Helmet1.wil&nbsp;&nbsp;&nbsp;男性所戴头盔的各个方向的图片<br/>M-Hum.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;男性的各种模型、动作图片(裸身、穿衣服、骑马、钩鱼)<br/>MIcon.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;魔法图标的图片<br/>mmap.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;小地图的地图<br/>Mon-1~13.wil&nbsp;&nbsp;&nbsp;所有怪物的图片<br/>MonS-1~13.wil&nbsp;所有怪物的阴影图片<br/>M-Weapon1~4.wil&nbsp;&nbsp;男性拿在手里的武器的各个方向的图片<br/>Npc.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;游戏里NPC的图片<br/>Npcface.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NPC的脸面图<br/>object1~2c.wil&nbsp;&nbsp;建筑物及一些NPC前杂物的图片<br/>ProgUse.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在装备栏所看人物裸身图像及头发的图片&nbsp;<br/>SmObjectsc.wil&nbsp;&nbsp;一些建筑物、树木、杂物的图片<br/>SmTilesc.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;地面上的小图片<br/>Tiles30c.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;城内地砖、草地、草池边的图片<br/>Tiles5c.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;大海、海与陆地交错地、陆地表面的图片<br/>Tilesc.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同上&nbsp;&nbsp;&nbsp;&nbsp;<br/>Wallsc.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;城墙的图片<br/>WM-Hair.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;女性头发图片<br/>WM-Helmet1.wil&nbsp;&nbsp;&nbsp;女性所戴头盔的各个方向的图片<br/>WM-Hum.wil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;女性的各种模型、动作图片(裸身、穿衣服、骑马、钩鱼)<br/>WM-Weapon1~4.wil&nbsp;女性拿在手里的武器的各个方向的图片<br/></p>

fair 发表于 2006-12-7 22:06:00

第二讲:interfacec2.wil&nbsp;并不能用gameinter.wil替代 <p></p><p>请看韩国源代码:<br/>m_pxInterImg-&gt;NewLoad(".\\Data\\gameinter.wil");<br/>m_xInterImgEx.NewLoad(".\\Data\\interfacec2.wil");<br/><br/>显然是在加载了gameinter.wil之后再加载interfacec2.wil,不可以简单替换掉!<br/></p>

fair 发表于 2006-12-7 22:08:00

第三讲:关于界面中文I/O问题的解决 <p></p><p>//韩文<br/>//HFONT CreateGameFont(LPCSTR&nbsp;szFontName,&nbsp;INT&nbsp;nHeight,&nbsp;INT&nbsp;nWidth&nbsp;=&nbsp;0,&nbsp;INT&nbsp;nWeight&nbsp;=&nbsp;FW_NORMAL,&nbsp;BOOL&nbsp;bItalic&nbsp;=&nbsp;FALSE,&nbsp;BOOL&nbsp;bULine&nbsp;=&nbsp;FALSE,&nbsp;BOOL&nbsp;bStrikeOut&nbsp;=&nbsp;FALSE,&nbsp;DWORD&nbsp;dwCharSet&nbsp;=&nbsp;HANGEUL_CHARSET);</p><p>//中文<br/>HFONT&nbsp; CreateGameFont(LPCSTR&nbsp;szFontName,&nbsp;INT&nbsp;nHeight,&nbsp;INT&nbsp;nWidth&nbsp;=&nbsp;0,&nbsp;INT&nbsp;nWeight&nbsp;=&nbsp;FW_NORMAL,&nbsp;BOOL&nbsp;bItalic&nbsp;=&nbsp;FALSE,&nbsp;BOOL&nbsp;bULine&nbsp;=&nbsp;FALSE,&nbsp;BOOL&nbsp;bStrikeOut&nbsp;=&nbsp;FALSE,&nbsp;DWORD&nbsp;dwCharSet&nbsp;=&nbsp;GB2312_CHARSET);<br/></p>

fair 发表于 2006-12-7 22:08:00

第四讲:mir3&nbsp;的wil文件格式破译 <p></p><p>下面是&nbsp;Interface1c.wil&nbsp;文件的16进制码,该文件14959571字节。</p><p>0100494C49422076312E302D57454D414445000000008813D007000077572AC08002E001E8FFF0FF30E8FF6800C6500400000000005400C0008A01C1004E00010020006110E3204431453165316639A641C749C751C75186416539653944310321E320E320C220A218C318A2188210811082108210410820006110A21882106110611061106110611061106110611061106108410841084108410841084108410841082108400841084108610861104108200840084108610861084108200001002000200020002000200020002000200020006108C310C3102100C000A8005600C0008901C1005000010020004108A218C218C2180321453166398641A64186418641A749A749863965394531242924292429E320C320A318C318A2188110821082106110200041088218A21881106110611061106110611061106108610841.....</p><p>文件结构源代码为:</p><p>#pragma&nbsp;pack(1)</p><p>typedef&nbsp;struct&nbsp;tagWILFILEHEADER<br/>{<br/>CHAR szTmp;<br/>INT nImageCount;<br/>}WILFILEHEADER,&nbsp;*LPWILFILEHEADER;</p><p>typedef&nbsp;struct&nbsp;tagWILFILEIMAGEINFO<br/>{<br/>SHORT shWidth;<br/>SHORT shHeight;<br/>SHORT shPX;<br/>SHORT shPY;<br/>DWORD dwImageLength;<br/>}WILIMAGEINFO,&nbsp;*LPWILIMAGEINFO;</p><p>typedef&nbsp;struct&nbsp;tagWIXFILEIMAGEINFO<br/>{<br/>CHAR szTmp;<br/>INT nIndexCount;<br/>INT* pnPosition;<br/>}WIXIMAGEINFO,&nbsp;*LPWIXIMAGEINFO;</p><p><br/>typedef&nbsp;struct&nbsp;tagNEWWILFILEHEADER<br/>{<br/>SHORT shComp;<br/>CHAR szTitle;<br/>SHORT shVer;<br/>INT nImageCount;<br/>}NEWWILFILEHEADER,&nbsp;*LPNEWWILFILEHEADER;</p><p>typedef&nbsp;struct&nbsp;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,&nbsp;*LPNEWWILIMAGEINFO;<br/>typedef&nbsp;struct&nbsp;tagNEWWIXFILEIMAGEINFO<br/>{<br/>CHAR szTitle;<br/>INT nIndexCount;<br/>INT* pnPosition;<br/>}NEWWIXIMAGEINFO,&nbsp;*LPNEWWIXIMAGEINFO;</p><p>注意#pragma&nbsp;pack(1)是为了确保存储结构与逻辑结构有同样的布局,这样我们才可以确信文件映像里的字节顺序与我们的设计相符合。</p><p>有了上面的数据,数据结构和说明,应该很容易从上面的16制码中计算出Interface1c.wil&nbsp;文件的长度正好是14959571字节,从而验证了网上流传&nbsp;的mir2ex的源码正是光通现在运行的mir3的源码的稍早版本,c/c++版本的服务端也正是原传奇2的服务端,里面包含有大量的传奇早期版本的对照代码。</p><p>类似方法可以分析出map&nbsp;wix&nbsp;文件的结构。全都是吻合的。</p><p>本人经过整整两个半月的日夜奋斗,现已经完成调试和改造,客户端可兼容盛大传奇与光通传奇,运行稳定流畅。<br/></p>
页: [1]
查看完整版本: [转帖]mir3 源代码研究