【DS的戰鬥系統】

  本遊戲戰鬥系統承襲[龍與地下城系列]與[東方故事], 以亂數機率為始,
再輔以各項屬性技能與攻擊型態來加以修正計算來決定戰鬥結果.

[初始機率修正]

  首先, 系統會以亂數random(HITROLE) 決定初始機率. [註:HITROLE 定義
於combat.h 目前為200] 然後再根據攻擊者的各項屬性技能狀態來增加命中
機率[attack_factor()],並根據受攻擊者的各項屬性技能狀態減少命中機率
[dodge_factor()]. 這裡要注意一點, 我們加入了奮力一擊和重心不穩的因
素, 當初始機率random(200)的值大於HITHEAVY(195)或是小於HITMISS(5)則
此兩種因素會生效. 奮力一擊將忽略對手閃躲因子而直接判定命中, 且傷害
力會比一般增加七成, 而重心不穩則相反, 會直接判定對方閃躲成功, 並且
攻擊失誤者將在短暫的時間內無法進行攻擊動作.

[閃躲]

  當計算之後的命中機率大於或等於命中標準THACO(100)時, 我們判定攻擊
有效,反之若小於命中標準THACO, 則判定對方閃避成功, 此時會判斷命中機
率是否大於EXPCO(50),若成立, 則閃躲成功的一方將可以獲得閃躲技能進步
的機會.[註: 這樣的設定則表示只有在對手強度和我方強度相當或是強過我
方時, 閃躲技能才能進步, 當對手程度比我方弱很多時, 將不容易進步.]而
如果命中判定成立, 我們則開始判斷對方是否能招架這次的攻擊.

[招架]

  影響招架的因素為裝備, 技能及力量. 力量太弱是不容易招架敵人攻擊的
. 當受攻擊方有裝備盾牌時, 以盾牌招架技能(block)為主, 若無盾牌,則以
武器招架技能(parry)為主, 否則就是用空手技能(unarmed), 但空手技能能
給予的招架修正只有裝備品的一半. 這時會再輔以力量因素來計算招架修正
, 若是招架機率大於招架標準值, 則判定招架成功. ( 招架技能進步的計算
方式同閃躲)

[傷害]

  當對方無法閃躲且招架又失敗時, 我們就開始計算這次攻擊的傷害值了.

	damage = me->query_damage() + me->query_str()*2;
	damage = (damage + random(damage*3)) / 3;

(以上兩行是基本的計算方式, 其他部分的修正請看/adm/daemons/combatd.c)

query_damage(), query_str() 都是在/feature/attribute.c 下面定義的函式
而第二行則是加入些許的亂數, 讓原本的傷害值有 1/3 到 4/3 的變化度.補充
說明一點, 當傷害大於受攻者的最大生命力1/7時, 將有可能會使得受攻方某一
部位受傷. 傷口是會影響戰鬥能力的, 必須用道具(醫療用品)或是醫療技能(醫
生, 牧師等等..) 來使其傷口復原. [註:巫師可以使用refresh指令復原] 關於
各部位之影響我之前有說明過, 影響的程度可以在score或是skills時看出來.


[補充]:

  1.巫師可以 set debug 1 來顯示戰鬥中各項修正量, unset debug 可以取消之.
    內定值為 不顯示除錯訊息.
    
  2.玩家或巫師可以 set report 1 來顯示戰鬥時對方狀態(ES模式) unset report 取消之.
    內定值為 不顯示對方狀態.

[相關資料]:
  
  /adm/daemons/combatd.c
  /include/combat.h
  /feature/attribute.c
  /feature/damage.c
  /feature/skill.c
  /cmds/usr/score.c
  /cmds/usr/skills.c
  
