|
|
范围和速度的计量单位
4 ]3 S, y2 p- d4 U) t! o: B8 R* V* t ~! @9 ~
D2使用的是等轴透视立体图形(Isometric Graphics),就是基于等轴测投影原理,相对于投影平面,把所有游戏界面元素沿两个坐标轴旋转侧向45°再向下30°制作并绘制到屏幕上,其像素比例(Pixel Ratio)为2:1,夹角为26.565°,相当于arctan0.5。 J& V+ l* v4 Q! E( l8 p! d/ f
3 d) F+ c# w2 E, F1 E: M q
- P4 t) z% X3 s( E! s+ \7 d* PD2中的世界是以许多通常情况下不可见的图形单元(Sub Tile)组成的,有点类似于棋盘(但并不是自上而下)。游戏界面显示(UI)中的步行和奔跑时的移动速度以码/秒(Yard/Sec)为计量单位,当然这仅仅只是一个用于表述的单位名称,真正有效果的是Sub Tile。
* k) R3 w8 h4 h8 Q8 ]
/ v& o& s4 A1 q
/ k1 {% _& ~$ g _( z3 _0 ~' w
! ]/ K( p3 i2 x' K
[] 很多资料中在描述中使用了TU(Tile Unit的缩写),其想表达的意思和Sub Title(可缩写为ST)是一样的,Sub Tile是构成地图的最小菱形单元,其对角线长度分别为水平32像素和竖直16像素。! i9 A `# P8 g& R* f, M& L
9 |- u8 L6 z W3 n0 }: d' k9 x
[] 游戏中的1码(Yard)并不等同于通常说的3英尺(Feet),而是D2的设计师们根据游戏中人物模型的高度,规定了Yard和TU的标准换算关系为:1 Yard = 1.5 ST。
" E4 H$ d- {2 U' g
; ? E2 j* @( O- P0 B8 i) w. {游戏的屏幕分辨率通常使用的是640*480或者800*600,但是窗口下面的控制面板占用48像素,所以我们实际上的屏幕像素应该是640*432或者800*552。
* K4 P( j- U% p, l1 q: Y* k
) M, r% S* i& m0 N; v
( Y3 R) }& X, c7 Z T" A
: E2 e6 Z' P* W% ~! W[] 在实际游戏中,“码”的定义就是这种图形单元的对角线距离,在水平方向,1码(Yard)=32像素(Pixel);在垂直方向,1码(Yard)=16像素(Pixel)。
: u: Y3 P- c$ b" H& u* o: g' O6 j* J; g* \& m1 j1 O
[] 在以往的各种资料中,640*480和800*600分辨率对应的换算关系是13.3*18和16.6*23(相当于1码=垂直24像素/水平48像素),如果只单纯计算或比较移动速度时没有问题,但是由于D2中的各种单位占据等距空间(Isometric Space),需要将平面坐标转化为等距坐标,所以建议需要结合实际地图的范围和距离时使用图中的Sub Tile与Yard的近似折算方法。
$ x, E+ }% g; W* o' z. z1 L1 Q6 i2 z& h+ j' T
: Z: s' J$ y! X下面以通常使用的800*600屏幕分辨率为例,将像素折算为码,图解游戏中范围和距离的关系。
3 W6 x8 L y1 b2 X) _
2 b3 `& U* G% X6 Z, [% B& \3 {
了解游戏中各种单位的尺寸大小(Size)有助于解读近战的攻击范围、投射物的目标碰撞和障碍物碰撞等概念。% J" E! d3 v$ f; z# v
7 C: M: C! N& a, a
+ Q4 S7 }' @, K, ]' O0 B5 ^% U: ~
1 C; c" y' T, |% o9 x" h% m" A[] 游戏中玩家的人物模型的Size=2,即占据3*3(Sub Tile),怪物模型的Size=1/2/3(具体数据查询自MonStats2.txt,即SizeX和SizeY参数),死亡的怪物模型占据SizeX*SizeY(Sub Tile),地图块(Block)占据5*5(Sub Tile)。
7 U" Z/ o3 O' ]: s6 y$ G: s9 G n% @7 x6 d: {
[] Size有时会影响单位到达某个地方,比如楼梯等,下面举例说明:利爪蝮蛇神殿的牙皮(Fangskin)的Size=3,无法通过楼梯登上祭坛。玩家、雇佣兵和召唤物的Size=2,不过无论Size大小如何,作为目标都是占据最中央的Sub Tile。
" ]& d9 M" o/ d! K9 m8 _8 U. I" B1 K. C! q# r; g3 ~$ g# a! f
[] 玩家近战的攻击范围与使用武器的范围增量(即Weapons.txt中的Rangeadder参数)以及被攻击目标的Size有关,其计算公式为:Melee_Range=Rangeadder+Size。. p$ o6 j' q4 {. w& W2 w% b0 a
2 {1 ~% O. |9 T' e/ Q2 d
[] Rangeadder=0的武器不增加玩家攻击范围(和空手一样),需要额外注意的是刺客的刀刃护盾的Rangeadder=0。在各种资料中出现的武器攻击范围(并不直接在游戏中使用),其计算公式为:Weapon_Range=Rangeadder+1。) q5 z. o, h( I! u& U ^
$ v: M! W6 _, t& L$ ][] 虽然玩家使用重击(Smite)、龙足(Dragon Talon)、神龙摆尾(Dragon Tail)或飞龙在天(Dragon Flight)等技能造成的伤害分别基于盾牌或鞋子,但是其攻击范围依然是基于使用武器的Rangeadder。 s" D* J; ?7 G8 N2 }3 {! `
8 w8 h+ O$ F0 Y: `( p X; L! \[] 当刺客和野蛮人装备两把武器并攻击选定的目标时,攻击范围基于主手武器的Rangeadder(游戏默认为手套上的武器或首先装备的武器),这里也包括双龙爪(Dragon Claw)、双手挥击(Double Swing)、狂乱(Frenzy),以及普攻(Normal Attack)、火焰拳(Fists of Fire)、雷电爪(Claws of Thunder)和寒冰刃(Blades of Ice),不过需要额外注意的是旋风(Whirlwind)除外。5 d( b/ Q: x" {3 l; Q6 Q, r! e
+ c- ?1 H0 ?: S1 V$ L; N0 H; }( r, U2 u& d" f$ a: [7 C7 M7 L6 y9 ]
游戏中对于尺寸的描述为小型(small)、中型(medium)和大型(large),这个属性与Size无关,由MonStats2.txt中的small和large参数控制(标准中型单位的small&large=0),影响着一些装备属性发挥的实际作用,比如使用附加击退属性(Knockback)的装备造成被攻击单位被击退的概率(小100%/中50%/大25%)。3 C" Q* m0 x: i2 Q9 G& Y5 ^
) i- F' ]6 X; j9 Q n
: t3 O; z8 W$ Q) W
[] 实际游戏描述中的单位尺寸与Size无关,下面举例说明:Size=2的影子大师(Shadow Master)和影子战士(Shadow Warrior)为小型单位;Size=2的灰熊(Grizzly)为大型单位;Size=2的玩家、雇佣兵和其他召唤物均为中型单位。+ m; `" k5 K: u. X/ P4 e
% P- R/ l# ~+ d) |9 q- r. H; {' b& B[] 复活的怪物(Revived)会保持原来的尺寸。
; E/ E( u+ R' Z: c" Z
; p/ u6 F! U& l4 {# Q[] 当成功触发击退效果时,目标会被击退并且进入打击恢复状态(Hit Recovery),被击退目标在不受阻碍的情况下的最大击退距离为3(Sub Tile),有的时候会小于这个距离(1或2)或只进入打击恢复状态而不发生位移,但不会大于这个距离。
- A% T& d" ?& _: Q
V" w( b* P% x$ Y8 m0 B[] 装备附加的击退效果需要通过成功命中的近战或远程攻击来触发,触发概率和目标尺寸有关(小100%/中50%/大25%),多个装备附加的击退属性不会产生叠加效果,即一次成功命中只会检测一次,同时装备两把武器时系统只会检测处于攻击状态的武器。) u# `1 K: r: i( P+ @# X7 c
, H( V$ v$ @/ \7 p e- Z[] 击退效果对无法击退的目标无效(即MonStats2.txt中的mKB=0),并且对死去或冻住的目标也无效。
7 u/ Y8 h/ x8 S& ^0 `' U3 p2 x# Q
" x/ g8 K( x3 k$ z5 `' T[] 技能附加的击退效果在触发方式上与物品击退略有不同(存在一些施法类和场地类),大部分技能击退的触发概率为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)。
+ d+ v4 x* h2 ]( i
& j) W3 m* m8 i& E) H" f2 H+ R1 i+ W: ~! X( N' b
在近身战斗中,近战攻击的范围(Sub tile)对于玩家、雇佣兵、召唤物和各种怪物的影响情况并不相同。/ d6 m/ `+ H; e; a0 W% i3 u
& r6 `9 E* o$ a3 N! O" A9 n
; r# o6 g7 L! v* w; b: ?! |3 \
[] 玩家的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。
6 {6 K6 A' j) a: `) w2 j$ }4 W. x* B7 l% ^ b
[] 雇佣兵和玩家召唤物的Melee_range与自身的近战攻击范围(即MonStats2.txt中的MeleeRng参数)和攻击目标的Size有关,即Melee_range=MeleeRng+Size。雇佣兵或玩家召唤物装备的武器对其近战攻击范围并无任何影响,ACT2的沙漠雇佣兵(Desert Mercenary)和灰熊(Grizzly)的MeleeRng=2,狂狼(Dire Wolf)和灵狼(Spirit Wolf)的MeleeRng=1,其他雇佣兵和召唤物的MeleeRng=0。# G; }1 S# H+ @4 l/ S" _# r: O
1 b* j! y5 z0 v7 q% j" d# I
[] 怪物的Melee_range与自身近战攻击范围(即MonStats2.txt中的MeleeRng参数)和自身的Size有关(即MonStats2.txt中的SizeX/Y参数),即Melee_range=MeleeRng+Size。Act3水池中的触手怪(Tentacle Beast)拥有全游戏中最远的近战范围,其Melee_range=9(MeleeRng=6且Size=3)。 x3 v/ y8 A8 h; T% _7 z
% R+ B: _6 e/ X* i[] 当怪物处于被致盲(Hit Blinds)、微暗灵视(Dim Vision)或魔影斗篷(Cloak of Shadows)等状态时,其主动攻击范围(Awareness Range)会减少至Melee_range(包括一些远程或施法类等不会近战攻击的怪物)。/ d1 Z6 |/ S0 u3 V9 l* X/ D# C
9 m$ ?0 E: M4 w! o
9 d) f" }: Y4 f5 O* |6 _+ Q" Y游戏中很多特殊效果都具备一定的有效范围,比较常见的是光照范围、各种诅咒和光环,一般技能描述中会以码为单位介绍半径范围,当然游戏中实际起作用的依然还是Sub Tile。
9 g2 P( k- x' }
7 d; U- l ^5 t W2 S; [- E
9 ~' B4 A3 v; h3 z' b9 ~; f7 Q5 ~1 S" m y0 Z# @* u- i$ W; W f
[] 游戏中的正常昼夜交替为1个小时,一共分为4个时间段:破晓(Dawn)、白日(Day)、灰暮(Dusk)和黑夜(Night),每个时间段的长度为15分钟。: F0 N0 Q o. m: c! y
& c8 q% [$ n( X[] 人物的基础光照范围为13,实际游戏中可达到的最大值为18,即使用+5光照范围的装备。D2中光照范围的极限值为31([255/8]),但由于代码BUG正常情况下无法达到。
; @* E( E8 a( F5 {3 {3 N, Y
* Z& [6 z% Z4 m- s4 {2 |' [[] 大部分技能的有效范围都和技能等级有关,不过也有一些例外的情况,下面针对图中列举出来的部分诅咒和光环的范围半径进行说明:恐惧(Terror)为2.6码、衰老(Decrepify)为4码、攻击反噬(Iron Maiden)为4.6码、吸引(Attract)为6码、救赎(Redemption)为10.6码、内视(Inner Sight)和慢速箭(Slow Missiles)与信念(Conviction)为13.3码。+ r9 |- n' R; ?# c4 H! m( B9 K& n
( e) `8 ^0 i7 J7 G& J4 E投射物(Missiles)与其他单位的移动方式并不相同,相对而言更为自由,通常表述其飞行轨迹时都是使用投射物消失前经过的总像素,而不是使用图形单元或码。
: [! I- B$ X- j2 w) T' d+ |, E- B: D4 o+ c: L6 w
( O: [$ r8 o. \9 W( g6 O- i' l# F; O
[] 投射物的速度和时间等数据查自Missiles.txt.txt(即Vel和Range等参数),因此对非零匀速投射物移动总像素的计算公式为:Pixels=Vel*Range,其中Range的单位是Frame。" `) Q) H. [2 }, j+ Z% f( u* u6 x
0 ?( i* K8 d1 Q/ S7 f# x( V" ~[] 如果想要计算投射物的射程,需要引入屏幕长度(Screenlength)的概念,也就是空间上的对角距离,除去人物占据的范围后的固定Screenlength=32。
# _3 v0 t# V6 ?! D% U* V4 d
) H. a) X( d% m; V$ K8 ~9 E[] 如果想直观的了解投射物的射程距离或飞行速度,可以将投射物存在帧数的移动总像素简单折算成码和秒为单位,其折算公式为:Missiles_Range=Pixels/(1.5*Screenlength);Missiles_Speed=Missiles_Range/(Range/25)。
. S5 R3 R- s" ^1 x7 K0 b! T+ N$ H |
|