|  | 
 
| 范围和速度的计量单位0 n, }- d  n4 K, Q 0 F8 l) i! |' l3 B
 D2使用的是等轴透视立体图形(Isometric Graphics),就是基于等轴测投影原理,相对于投影平面,把所有游戏界面元素沿两个坐标轴旋转侧向45°再向下30°制作并绘制到屏幕上,其像素比例(Pixel Ratio)为2:1,夹角为26.565°,相当于arctan0.5。8 c7 {$ X/ K9 s$ }1 u" ?
 
  ) g4 ?; C5 c, t 
 ! n, q9 ^% K$ {: V' VD2中的世界是以许多通常情况下不可见的图形单元(Sub Tile)组成的,有点类似于棋盘(但并不是自上而下)。游戏界面显示(UI)中的步行和奔跑时的移动速度以码/秒(Yard/Sec)为计量单位,当然这仅仅只是一个用于表述的单位名称,真正有效果的是Sub Tile。* F( \- P& B4 _2 I3 c
 - X3 A" k/ k$ d9 |, k
 
  0 L7 D0 e+ F- t$ w 
 # Z# Q6 I7 m) W, L% [6 d[] 很多资料中在描述中使用了TU(Tile Unit的缩写),其想表达的意思和Sub Title(可缩写为ST)是一样的,Sub Tile是构成地图的最小菱形单元,其对角线长度分别为水平32像素和竖直16像素。
 + o0 _+ W0 F+ ^) e
 0 ?" C. W) d, C# }  t[] 游戏中的1码(Yard)并不等同于通常说的3英尺(Feet),而是D2的设计师们根据游戏中人物模型的高度,规定了Yard和TU的标准换算关系为:1 Yard = 1.5 ST。) P, c* b* M1 @7 ~# S
 
 8 d/ ?0 o! D! [, f& x* _游戏的屏幕分辨率通常使用的是640*480或者800*600,但是窗口下面的控制面板占用48像素,所以我们实际上的屏幕像素应该是640*432或者800*552。
 2 ~+ e! s, {" K$ r4 {' i7 B& K* p! N9 n2 M+ k$ I4 _  C3 u
 
  " j5 K  P1 ?$ B9 \ 8 @8 s& c3 I$ h/ y1 L% u
 [] 在实际游戏中,“码”的定义就是这种图形单元的对角线距离,在水平方向,1码(Yard)=32像素(Pixel);在垂直方向,1码(Yard)=16像素(Pixel)。
 / m% q' V5 Y4 U( F: c' a! @# b4 a9 E) S5 L
 [] 在以往的各种资料中,640*480和800*600分辨率对应的换算关系是13.3*18和16.6*23(相当于1码=垂直24像素/水平48像素),如果只单纯计算或比较移动速度时没有问题,但是由于D2中的各种单位占据等距空间(Isometric Space),需要将平面坐标转化为等距坐标,所以建议需要结合实际地图的范围和距离时使用图中的Sub Tile与Yard的近似折算方法。' K+ K4 ~0 ~3 M' M/ p
 8 ~* T( j3 v9 S+ Z- c% Z& k8 l
 
 6 ?9 ]( C) I0 }下面以通常使用的800*600屏幕分辨率为例,将像素折算为码,图解游戏中范围和距离的关系。
   2 |3 e7 b9 V7 G+ B  Z) G; H
 5 o7 Y+ n9 Z/ \8 D了解游戏中各种单位的尺寸大小(Size)有助于解读近战的攻击范围、投射物的目标碰撞和障碍物碰撞等概念。; X% J- r  R* B; }- O9 u
 2 p8 n5 q- n$ x* E! T8 d$ V! c
 
  + ^7 J( x# r; W7 w) k 
 + s. ^1 _: I( x5 b) i# o[] 游戏中玩家的人物模型的Size=2,即占据3*3(Sub Tile),怪物模型的Size=1/2/3(具体数据查询自MonStats2.txt,即SizeX和SizeY参数),死亡的怪物模型占据SizeX*SizeY(Sub Tile),地图块(Block)占据5*5(Sub Tile)。
 ) S8 M$ ^7 ?+ F! O( ?4 c" k! [1 G; K1 u
 [] Size有时会影响单位到达某个地方,比如楼梯等,下面举例说明:利爪蝮蛇神殿的牙皮(Fangskin)的Size=3,无法通过楼梯登上祭坛。玩家、雇佣兵和召唤物的Size=2,不过无论Size大小如何,作为目标都是占据最中央的Sub Tile。6 @# ~* n1 p% x8 f
 5 r; G; |8 s, J6 h, M5 r! c# `7 r0 L
 [] 玩家近战的攻击范围与使用武器的范围增量(即Weapons.txt中的Rangeadder参数)以及被攻击目标的Size有关,其计算公式为:Melee_Range=Rangeadder+Size。" }. \: i6 I! N) i: c" i
 
 . k1 F* w6 j% Q( v  y[] Rangeadder=0的武器不增加玩家攻击范围(和空手一样),需要额外注意的是刺客的刀刃护盾的Rangeadder=0。在各种资料中出现的武器攻击范围(并不直接在游戏中使用),其计算公式为:Weapon_Range=Rangeadder+1。
 6 `/ I6 G! Q* `4 ~( v1 Z" X3 X8 H* |1 [* u9 y* f: ^+ a
 [] 虽然玩家使用重击(Smite)、龙足(Dragon Talon)、神龙摆尾(Dragon Tail)或飞龙在天(Dragon Flight)等技能造成的伤害分别基于盾牌或鞋子,但是其攻击范围依然是基于使用武器的Rangeadder。
 % w. ^8 B7 _3 }/ D0 I8 [
 8 T. d3 a! v" o[] 当刺客和野蛮人装备两把武器并攻击选定的目标时,攻击范围基于主手武器的Rangeadder(游戏默认为手套上的武器或首先装备的武器),这里也包括双龙爪(Dragon Claw)、双手挥击(Double Swing)、狂乱(Frenzy),以及普攻(Normal Attack)、火焰拳(Fists of Fire)、雷电爪(Claws of Thunder)和寒冰刃(Blades of Ice),不过需要额外注意的是旋风(Whirlwind)除外。
 & F1 e5 ?* `7 f: h# D2 l' {, I  B) R0 l$ ]" K
 ' n6 b. c: ?1 I/ p1 ~
 游戏中对于尺寸的描述为小型(small)、中型(medium)和大型(large),这个属性与Size无关,由MonStats2.txt中的small和large参数控制(标准中型单位的small&large=0),影响着一些装备属性发挥的实际作用,比如使用附加击退属性(Knockback)的装备造成被攻击单位被击退的概率(小100%/中50%/大25%)。! m0 D; X# F, D; ^* o* E, l
 
   ' X& P. i( o4 {' @- F" M/ b: q* o% B; e; n6 L! B; c6 W
 [] 实际游戏描述中的单位尺寸与Size无关,下面举例说明:Size=2的影子大师(Shadow Master)和影子战士(Shadow Warrior)为小型单位;Size=2的灰熊(Grizzly)为大型单位;Size=2的玩家、雇佣兵和其他召唤物均为中型单位。
 * X& X6 r/ \: [4 U- S2 E6 \' n; U: I1 \8 e6 S% ]
 [] 复活的怪物(Revived)会保持原来的尺寸。; Z8 ~' F: u( {% ~8 j
 7 U6 ]$ v6 m( I% I) {
 [] 当成功触发击退效果时,目标会被击退并且进入打击恢复状态(Hit Recovery),被击退目标在不受阻碍的情况下的最大击退距离为3(Sub Tile),有的时候会小于这个距离(1或2)或只进入打击恢复状态而不发生位移,但不会大于这个距离。
 , [) b/ c& b  U( x: r" l9 K! X+ Y( W8 C0 s
 [] 装备附加的击退效果需要通过成功命中的近战或远程攻击来触发,触发概率和目标尺寸有关(小100%/中50%/大25%),多个装备附加的击退属性不会产生叠加效果,即一次成功命中只会检测一次,同时装备两把武器时系统只会检测处于攻击状态的武器。
 % J" m# W8 Y; `- u- I6 C2 M
 7 g* W+ r! l; \1 E8 r% [[] 击退效果对无法击退的目标无效(即MonStats2.txt中的mKB=0),并且对死去或冻住的目标也无效。# [6 l: ^; J, {2 R3 f  w+ `* M2 ]
 # }% {+ K& Z; W7 s1 a/ u
 [] 技能附加的击退效果在触发方式上与物品击退略有不同(存在一些施法类和场地类),大部分技能击退的触发概率为100%,不过也有一些技能例外,下面举例说明:心灵传动(Telekinesis)为35%;熔浆巨岩(Molten Boulder)为50%;心灵战锤(Psychic Hammer)对白怪和仆从为100%,对蓝怪和金怪为min([[(110*slvl)/(slvl+6)]*50/100]+50 , 100),对BOSS和玩家为min([[(110*slvl)/(slvl+6)]*74/100]+25 , 99)。5 a& b$ f0 s* ^; _7 {3 E( g
 2 Z% d0 r) ?8 u( `
 
 ) M/ c0 \3 A( w! ^% W在近身战斗中,近战攻击的范围(Sub tile)对于玩家、雇佣兵、召唤物和各种怪物的影响情况并不相同。" \" E/ J9 P) d$ Z: P! t
 
   9 b) C( S9 i% I6 W! X9 @4 ~0 p, M
 9 }/ `/ L1 h0 E. z3 D[] 玩家的Melee_range与自身装备武器的Rangeadder和攻击目标的Size有关,即Melee_range=Rangeadder+Size。正常游戏中玩家使用Rangeadder=4的长戟(polearms)或枪矛(spears)可以达到攻击范围的最大值:如果攻击Size=1的怪物,则Melee_range=5;如果攻击Size=2的怪物,则Melee_range=6;如果攻击Size=3的怪物,则Melee_range=7。7 A/ e' h( p* E; I' A
 
 ' u: T) H: o9 M3 }! t7 R+ Q7 ^[] 雇佣兵和玩家召唤物的Melee_range与自身的近战攻击范围(即MonStats2.txt中的MeleeRng参数)和攻击目标的Size有关,即Melee_range=MeleeRng+Size。雇佣兵或玩家召唤物装备的武器对其近战攻击范围并无任何影响,ACT2的沙漠雇佣兵(Desert Mercenary)和灰熊(Grizzly)的MeleeRng=2,狂狼(Dire Wolf)和灵狼(Spirit Wolf)的MeleeRng=1,其他雇佣兵和召唤物的MeleeRng=0。/ a% j. L3 X# l+ z, O! r5 p
 
 & {' Y0 i6 {6 o" \' s- ?[] 怪物的Melee_range与自身近战攻击范围(即MonStats2.txt中的MeleeRng参数)和自身的Size有关(即MonStats2.txt中的SizeX/Y参数),即Melee_range=MeleeRng+Size。Act3水池中的触手怪(Tentacle Beast)拥有全游戏中最远的近战范围,其Melee_range=9(MeleeRng=6且Size=3)。
 - j$ B9 N! w4 P# z- @
 ( o+ I$ \! u! T; w[] 当怪物处于被致盲(Hit Blinds)、微暗灵视(Dim Vision)或魔影斗篷(Cloak of Shadows)等状态时,其主动攻击范围(Awareness Range)会减少至Melee_range(包括一些远程或施法类等不会近战攻击的怪物)。" J5 v$ b" q& G- S  _+ K
 % P/ V; [8 M% {
 9 y" U- e8 s4 |( M% B5 \
 游戏中很多特殊效果都具备一定的有效范围,比较常见的是光照范围、各种诅咒和光环,一般技能描述中会以码为单位介绍半径范围,当然游戏中实际起作用的依然还是Sub Tile。
 4 h6 h  I7 N. x  T! p" u5 _" x
  5 \4 P! J1 u( Z3 l! P4 \2 R ; d- m! m9 e& j5 y7 t% i  v+ ^
 
 ' v% s! Y& v& x$ ]6 T[] 游戏中的正常昼夜交替为1个小时,一共分为4个时间段:破晓(Dawn)、白日(Day)、灰暮(Dusk)和黑夜(Night),每个时间段的长度为15分钟。
 " V) p' C, E; a
 0 W( I* L; u9 T' u( |8 l5 t8 }- C[] 人物的基础光照范围为13,实际游戏中可达到的最大值为18,即使用+5光照范围的装备。D2中光照范围的极限值为31([255/8]),但由于代码BUG正常情况下无法达到。1 g" W7 k: d. a7 l% q' r
 
 2 Q& |+ {2 n* L, i4 u; H[] 大部分技能的有效范围都和技能等级有关,不过也有一些例外的情况,下面针对图中列举出来的部分诅咒和光环的范围半径进行说明:恐惧(Terror)为2.6码、衰老(Decrepify)为4码、攻击反噬(Iron Maiden)为4.6码、吸引(Attract)为6码、救赎(Redemption)为10.6码、内视(Inner Sight)和慢速箭(Slow Missiles)与信念(Conviction)为13.3码。
 ; u+ N& [$ F. S. x6 |) q
 ! z* d& G" o( D0 B& S7 u7 a2 N) R投射物(Missiles)与其他单位的移动方式并不相同,相对而言更为自由,通常表述其飞行轨迹时都是使用投射物消失前经过的总像素,而不是使用图形单元或码。! M4 r- R/ s: D2 j8 o3 j% P, s+ S
 
 8 W) K; g. J1 i: v6 H- m% P$ k7 y; R: L$ l4 y& r
 
 " _9 O- {" q5 J" ]+ K) }[] 投射物的速度和时间等数据查自Missiles.txt.txt(即Vel和Range等参数),因此对非零匀速投射物移动总像素的计算公式为:Pixels=Vel*Range,其中Range的单位是Frame。
 : k4 t6 U: C; m1 [
 , p5 u$ g' C, a" |; K2 [6 B6 Y[] 如果想要计算投射物的射程,需要引入屏幕长度(Screenlength)的概念,也就是空间上的对角距离,除去人物占据的范围后的固定Screenlength=32。
 % k4 A! c0 z  i' z: w2 g' |
 : v3 j& m( Z$ _/ [[] 如果想直观的了解投射物的射程距离或飞行速度,可以将投射物存在帧数的移动总像素简单折算成码和秒为单位,其折算公式为:Missiles_Range=Pixels/(1.5*Screenlength);Missiles_Speed=Missiles_Range/(Range/25)。6 ^% m9 G; Q+ q+ W
 
 | 
 |