魔兽争霸 3 技术分析资源汇总 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuhanyang0
V2EX    魔兽争霸

魔兽争霸 3 技术分析资源汇总

  •  4
     
  •   liuhanyang0 2015-02-15 09:59:21 +08:00 13418 次点击
    这是一个创建于 3951 天前的主题,其中的信息可能已经有所发展或是发生改变。

    原文链接: http://jjyy.guru/war3-tech/

    玩了多年的魔兽、Dota,带来了很多快乐,想八卦一下实现。本来打算自己分析的,由于网上已经有很多资料了,这里把相关的资料做个汇总。

    欢迎同学补充,可以在联系中给我留言,或者在评论中回复,我会陆续加上。

    项目发
    讲的是第一代,也很有参考价值。

    The Making of Warcraft Part 1
    The Making of Warcraft Part 2
    The Making of Warcraft Part 3
    中文版:

    Patrick Wyatt:魔兽争霸的制作过程 1
    Patrick Wyatt:魔兽争霸的制作过程 2
    Patrick Wyatt:魔兽争霸的制作过程 3
    资源打包技术
    MPQ是暴雪公司用于游戏数据打包的工具,能够把资源放在一个包里,然后对其进行压缩和加密。网上已经有很多的详解:

    MPQ Wiki MPQ介绍
    MPQ Archives MPQ格式手册
    游戏资源的压缩、打包与补丁更新 网易的打包系统设计
    MPQ Storm 暴雪MPQ库的开源实现
    MPQ Storm库 源码分析 图文并茂的源码分析
    网络同步
    Warcraft 3使用的是lock-step技术,就是多个玩家的计算结果必须一样的,谁落后了就要大家等他同步上来。

    lock-step的特点,这里有个回答讲得很清楚。lock-step是不关心游戏逻辑的,只关心用户输入。核心思想就是如果大家每帧计算结果一样,那么只要保证大家的输入和初始条件一样,那么就能够完成同步。在手游中经常用伪随机数做同步,比如《捕鱼达人》。lock-step最麻烦的事情是容易产生蝴蝶效应,中间某个步骤计算结果不一样,那么后面很容易放大,得到完全不同的结果。lock-step中,延迟的处理主要通过时间戳。

    网络同步常见的技术还有状态同步,这种技术在MMORPG中很常见。具体来讲就是同步与玩家同一个区域的所有角色,这些角色身上的所有状态都有自己同步的逻辑。比如角色行走,那么就会广播到同一个区域的玩家上,那么大家都会播放行走的动画。而行走还有另一个结果,那就是发生位移,为了不影响玩家的手感,玩家的机器先执行,等服务器验证后再拉到“正确”的位置。由于网络存在延迟,位移的同步都要做位置预测,常见的位置同步算法是“Dead Reckoning - 航位推测法”,充分考虑了延迟的情况。

    更多的网络同步知识可以看这篇《每个程序员都该知道的网络同步知识》。

    《魔兽争霸III》是如何实现野怪同步的?
    《魔兽争霸》的录像,为什么长达半小时的录像大小只有几百 KB?
    编辑器
    在Warcraft 3中还诞生了现在大火的Dota,这是因为随游戏附带的编辑器有强大的编辑功能。暴雪开发了多款战略游戏,才有对这种类型游戏的深刻理解。在我看来,最核心的机制为Event-Condition-Action这个逻辑。暴雪程序员为这套触发器开发了大量预定义功能。比如Dota里面的发兵:定义定时器Event,然后就触发创建某某Unit的Action。

    War3 World Editor分析系列
    手把手开发Dota系列视频 at Youtube
    How Dota AI Create
    星际争霸2编辑器的初接触
    寻路&AI
    就随手一点,魔兽争霸里的英雄如何找到通往终点的路?
    即时战略游戏(比如 WAR3)的 AI 是怎样实现的?
    外挂
    魔兽争霸3的maphack制作教程(一)显示敌对单位
    魔兽争霸3的MapHack制作教程(二)去除战争迷雾
    地形
    魔兽争霸3的自动拼接地形渲染方式

    30 条回复    2015-04-27 00:16:37 +08:00
    mjever
        1
    mjever  
       2015-02-15 10:05:52 +08:00   1
    玩了多年的WAR3过来了解了解~
    liuhanyang0
        2
    liuhanyang0  
    OP
       2015-02-15 10:19:33 +08:00
    @mjever 哈哈,这个十多年前的游戏我现在还在玩
    tremblingblue
        3
    tremblingblue  
       2015-02-15 10:38:18 +08:00
    昨天翻箱倒柜,突然看到混乱之治和冰封王座的正版CD,感慨了一下,这就十多年了。
    f0rger
        4
    f0rger  
       2015-02-15 10:44:01 +08:00
    自从来到这个公司后,我就戒了war3了。。。
    实际上是加班没时间玩
    Majirefy
        5
    Majirefy  
       2015-02-15 10:49:04 +08:00   1
    好……
    正想看看~~~
    WildCat
        6
    WildCat  
       2015-02-15 11:38:02 +08:00 via iPhone
    出门左转 islga ?
    mjever
        7
    mjever  
       2015-02-15 11:39:55 +08:00
    @liuhanyang0 怀念当年Grubby、Moon、Sky等群星闪耀的时候~
    xspippo
        8
    xspippo  
       2015-02-15 11:46:00 +08:00
    WAR3,rts经典。
    fan123199
        9
    fan123199  
       2015-02-15 11:57:17 +08:00
    看到war3,必须进来。买过盗版光盘,各种战略纸质书。
    fan123199
        10
    fan123199  
       2015-02-15 11:59:18 +08:00
    我对2003年暴雪能做出这游戏表示无法理解,是那么的完美。
    fan123199
        11
    fan123199  
       2015-02-15 12:00:30 +08:00
    lz这个网站会存在多久啊?我应该是mark这个网页,还是都download下来?
    liuhanyang0
        12
    liuhanyang0  
    OP
       2015-02-15 12:04:06 +08:00
    @fan123199 我博客挂在github上,githut在多久,我博客就在多久
    liuhanyang0
        13
    liuhanyang0  
    OP
       2015-02-15 12:04:48 +08:00
    @mjever 哈哈,木瓜大战,Sky人皇的时候,确实很经典
    liuhanyang0
        14
    liuhanyang0  
    OP
       2015-02-15 12:07:22 +08:00
    @tremblingblue 是啊,十分感概,感谢暴雪
    sun019
        15
    sun019  
       2015-02-15 12:32:39 +08:00
    确实 玩了好多年的魔兽争霸 作为程序员 也该了解些东西了
    acros
        16
    acros  
       2015-02-15 12:46:33 +08:00
    有点挂羊头卖狗肉。。。

    顺手点一个:“就随手一点,魔兽争霸里的英雄如何找到通往终点的路?”讲得是游戏AI最基础的寻路。

    其他的也是,大都是给群众的游戏开发基本常识,最多是拿war3当例子嘛。我还以为是war3开发人员谈论,之前网上是有一篇开发人员的文章的。。
    kkxxxxxxx
        17
    kkxxxxxxx  
       2015-02-15 12:46:37 +08:00
    war3更新下贴图模型的话还可以再战十年
    caoyue
        18
    caoyue  
       2015-02-15 12:49:10 +08:00
    还记得当时猜录像系统怎么做的猜了好久,还乐此不疲的实验看暴击是否随机
    liuhanyang0
        19
    liuhanyang0  
    OP
       2015-02-15 12:57:46 +08:00
    @acros The Making of Warcraft是Patrick Wyatt写的
    liuhanyang0
        20
    liuhanyang0  
    OP
       2015-02-15 12:58:59 +08:00
    @acros 就懂个A*就在那里瞎bb
    liuhanyang0
        21
    liuhanyang0  
    OP
       2015-02-15 13:12:44 +08:00
    @kkxxxxxxx 现在玩dota的人都少了
    Yamade
        22
    Yamade  
       2015-02-15 13:26:20 +08:00
    听说要重写?高清版
    kxxoling
        23
    kxxoling  
       2015-02-15 13:33:20 +08:00
    为什么是伯乐在线的链接而没有原文链接?中文是我翻译的,联系过 Patrick 授权的。
    BGLL
        24
    BGLL  
       2015-02-15 13:56:12 +08:00
    wow8
    YDWE
    地精
    GG668v26Fd55CP5W
        25
    GG668v26Fd55CP5W  
       2015-02-15 14:04:02 +08:00 via iPhone
    唯一还在玩的游戏,经典
    liuhanyang0
        26
    liuhanyang0  
    OP
       2015-02-15 15:29:27 +08:00
    @Yamade 高清版不用重写吧
    liuhanyang0
        27
    liuhanyang0  
    OP
       2015-02-15 15:30:28 +08:00
    @kxxoling 只是链接,不是转载哦。我不知道哪个才是原文,把原文链接发给我?
    SuujonH
        28
    SuujonH  
       2015-02-15 16:58:31 +08:00
    @caoyue 我也猜是不是只记录实际操作,然后当场模拟。只要有一天我确认,是的。
    因为在打开那次dota录像看回放的时候发现,因为刚结束,团站我记得那次我是残血打赢了,我看录像却发现我的英雄那波团战死了。
    以至于我的英雄复活以后在家里没有移动过。不知道为什么~ :-(
    kxxoling
        29
    kxxoling  
       2015-02-16 16:45:20 +08:00 via iPhone
    @liuhanyang0 伯乐在线转载没留英文原文的链接。
    VirgilMing
        30
    VirgilMing  
       2015-04-27 00:16:37 +08:00
    @SuujonH 对面肯定有某种特殊的暴击……像金箍棒这种 1 倍暴击之类的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5498 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 03:25 PVG 11:25 LAX 19:25 JFK 22:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86