NetHack のヴァリアント、SpliceHack 1.2.0では、Role 毎に取得、上昇可能なスキルを所有しており、それについてのスポイラーです。強力なスキル、そうでもないスキル、バグで全く意味のないスキル、バグは無さそうだが存在意義の分からないスキルなど、色々あります。
SpliceHack 1.2.0
Role-Based Skills についてのスポイラー
文中のスキル値(skill)は以下の値を返す。
Isrestricted 0
Unskilled 1
Basic 2
Skilled 3
Expert 4
Master 5
Grand Master 6
rn2(v) は、0 ~ (v - 1) の間のランダムな値。
rnd(v) は、1 ~ v の間のランダムな値。
rnl(v) は、0 ~ (v - 1) の間のランダムな値を取るが、
(厳密には違う場合もあるが)運が高いほど低い値になりやすい。
rn1(x, y) は、rn2(x) + y を返す。
スキル上限リスト
+--------------+---+---+---+---+---+---+---+---+---+
|skills \ roles|Arc|Bar|Car|Cav|Con|Dra|Hea|Kni|Mon|
+--------------+---+---+---+---+---+---+---+---+---+
|power attack | |Mas| |Mas| |Bas| |Ski| |
|careful attack|Ski| | | | | | |Ski| |
|flaming fists | | | | | | | | |Gra|
|freezing fists| | | | | | | | | |
|shocking fists| | | | | | | | |Gra|
|stunning fists| | | | | | | | |Gra|
|backstab | | | | | | | | | |
|rat tamer | | | | |Exp| | | | |
|dragon tamer | | | | | |Exp| | | |
|blood rage | |Exp| | | | | | | |
|panache |Exp| | | | | | | | |
|wild magic | | |Exp| | | | | | |
|blood magic | | | | | | | | | |
|code of honor | | | | | | | |Exp| |
|disarm |Exp|Bas| |Ski| |Ski|Exp|Exp|Exp|
|sunder | |Exp| |Exp|Bas|Ski| | |Exp|
|tumbling |Ski| | | |Bas| | | | |
+--------------+---+---+---+---+---+---+---+---+---+
+--------------+---+---+---+---+---+---+---+---+
|skills \ roles|Pri|Pir|Rog|Ran|Sam|Tou|Val|Wiz|
+--------------+---+---+---+---+---+---+---+---+
|power attack | |Ski| | |Mas|Bas|Ski| |
|careful attack| | |Exp|Bas| |Bas| | |
|flaming fists | | | | | | | | |
|freezing fists| | | | | | |Gra| |
|shocking fists| | | | | | | | |
|stunning fists| | | | | |Bas| | |
|backstab | | |Exp| | |Bas| | |
|rat tamer | | | | | | | | |
|dragon tamer | | | | | | | | |
|blood rage | | | | | | | | |
|panache | | | | | | | | |
|wild magic | | | | | |Bas| |Exp|
|blood magic | | | | | | | |Exp|
|code of honor | | | | |Exp| | | |
|disarm | |Ski|Bas| |Exp|Bas|Bas| |
|sunder |Bas|Ski| |Exp|Exp|Bas|Exp| |
|tumbling | |Ski|Exp| | | | | |
+--------------+---+---+---+---+---+---+---+---+
スキル経験値の上昇
レベルが上昇した際、その時の role で、
スキル上限 > Unskilled
のスキルの経験値がそれぞれ上昇する。
上昇値は、
rn1(3, 3) * スキル値(該当スキル)
となる。
レベルが下降しても経験値は減らないので、レベルドレインと
レベルアップを繰り返すと経験値を稼ぐ事ができる。レベルを
下げずに Grand Master まで上げる事はできないと思われる。
各スキルの特徴
*** power attack ***
Barbarian Master
Caveman Master
Dragon Rider Basic
Knight Skilled
Pirate Skilled
Samurai Master
Tourist Basic
Valkyrie Skilled
効果は、hitval dmgval を参照。
*** careful attack ***
Archeologist Skilled
Knight Skilled
Rogue Expert
Ranger Basic
Tourist Basic
効果は、hitval dmgval を参照。
*** flaming fists ***
Monk Grand Master
効果は、skill_hit_effects を参照。
*** freezing fists ***
Valkyrie Grand Master
効果は、skill_hit_effects を参照。
*** shocking fists ***
Monk Grand Master
効果は、skill_hit_effects を参照。
*** stunning fists ***
Monk Grand Master
Tourist Basic
武器を装備しておらず、ダメージ > 1 で、近接攻撃で、
変化していない場合、スタン攻撃が発生する可能性がある。
rnd(100) < (スキル値(bare handed combat) + スキル値(stunning fists)
が真であるか、boxing gloves を装備中であり、
攻撃対象が大きくなく、攻撃対象の皮が厚くなく、
攻撃のダメージで攻撃対象が死亡しない場合、
攻撃対象はスタンする。
*** backstab ***
Rogue Expert
Tourist Basic
武器攻撃時に、以下の条件で発生する。
対象が恐怖している && (Rogue Lv > 0
|| スキル値(backstab) > Unskilled)
&& 変化していない && (近接攻撃 || 長斧を使った攻撃)
が真の場合、
スキル値(backstab) > Unskilled
であれば、
ダメージ += rnd(プレイヤーレベル * (1 + スキル値(backstab)))
それ以外は、
ダメージ += rnd(プレイヤーレベル)
となる。
*** rat tamer ***
Convict Expert
Chat した鼠をペットにできるスキル。
Convict Lv > 0 であり、話相手が鼠であり、
対象が友好的でもペットでも無い場合、
rnl(10) - スキル値(rat tamer) < 2
が真の場合、その相手をペットにできる。
偽の場合、
rnl(10) *= 8
が真になると、その相手は友好的になる。
*** dragon tamer ***
Dragon Rider Expert
Chat したドラゴンをペットにできるスキル。
Dragon Rider Lv > 0 であるか、
スキル値(dragon tamer) > Unskilled) であり
(実際にはこのスキルを持つのが Dragon Rider のみなので意味のない条件)、
話相手がドラゴンであり、
対象が友好的でもペットでも無い場合、
rnl(10) - スキル値(dragon tamer) * 3 + 対象Lv < 2
が真の場合、その相手をペットにできる。
偽の場合、
rnl(10) *= 8
が真になると、その相手は友好的になる。
*** animal friendship ***
実装されていないスキル。
*** blood rage ***
Barbarian Expert
効果は、skill_hit_effects を参照。
*** panache ***
Archeologist Expert
スキル値(panache) > Unskilled
が真であれば、(スキル値(panache) - 1)個の
blessed luck stone を持っているのと同じ扱いを受ける。
しかし、このスキルを得ただけでは、さらなる幸運(extra luck)
は得られない。スキルを上昇させた際に、さらなる幸運の再計算を
していないため。
これを解決するには、幸運に影響するオブジェクトを一度
インベントリに加える必要がある。一度でもインベントリに
入れば、その後それを捨てても問題無い。
*** wild magic ***
Cartomancer Expert
Tourist Basic
Wizard Expert
魔法を使用して成功した際、
スキル値(wild magic) > Unskilled が真であり、
rn2(スキル値(wild magic)) > 0 も真であれば、
使用した魔法がランダムな魔法に置換され、
その魔法のスキル値に +1 されて使用する事になる。
魔法は覚えているか否かは関係無く、存在する全ての魔法
から選ばれる。
energy 消費や、使用難易度は元の魔法で計算した後に
魔法が置換される。
このスキルを覚えると、使用した魔法が別の魔法に置換
される可能性が排除できなくなる。
*** blood magic ***
Wizard Expert
スキル値(blood magic) > Unskilled
が真であれば、energy が足りなくても魔法を使える
ようになり、不足分、hp を代わりに消費する事になる。
(extra) healing の魔法を使った場合、四倍を消費する。
いずれの場合も、hp も足りない場合は死亡する。
魔法使用後、energy <= 0 の場合、
魔法のスキル値 + スキル値(blood magic) - 1
されて使用する事になる。
*** code of honor ***
Knight Expert
Samurai Expert
効果は、hitval を参照。
属性値 > -10 であり、
スキル値(code of honor) > Unskilled が真であり、
プレイヤーの属性が秩序である場合、
攻撃対象が動けないか、眠っているか、
恐怖していてかつ怒っていない場合、
属性値 -= スキル値(code of honor) * 3
される。
騎士道と同じ条件だが、ペナルティは騎士道より重く、
それより優先される。
*** disarm ***
Archeologist Expert
Barbarian Basic
Caveman Skilled
Dragon Rider Skilled
Healer Expert
Knight Expert
Monk Expert
Pirate Skilled
Rogue Basic
Samurai Expert
Tourist Basic
Valkyrie Basic
whip を apply コマンドで使用した際、
スキル値(disarm) -1 のボーナスが得られる。
スキル値(disarm) > Unskilled
が真の場合、disarm コマンドを使用できるようになり、
武器を持った怪物にこのスキルを使用した際、
rn2(6) < スキル値(disarm) + スキル値(メイン武器)
が真であれば、怪物のマスに武器を落とす事ができる。
成否に関わらず、対象の怪物を怒らせる。
スキル値によっては確実に武装解除できる。
*** sunder ***
Barbarian Expert
Caveman Expert
Convict Basic
Dragon Rider Skilled
Monk Expert
Priest Basic
Pirate Skilled
Ranger Expert
Samurai Expert
Tourist Basic
Valkyrie Expert
スキル値(sunder) > Unskilled
が真の場合、sunder コマンドが使用可能になり、
武器を持っている怪物にスキルを使用した際、
a = スキル値(sunder)
怪物の武器がアーティファクトである場合
a -= 2
rn2(6) < a
が偽である場合、何も起こらない。
真である場合、以下の処理を行う。
対象の怪物が石化生物の死体等(*1)を持っている場合、
プレイヤーが武器を持たず石化耐性も無い場合、
石化して死亡する。それ以外で武器を持たない場合、
持っている武器の素材が石になる処理があるが、
存在しない武器の素材を変更しようとして、
プログラムが強制終了する。武器をもっていた場合に
素材を石に変更する意図だったと思われる。
} else if (!uwep) {
uwep->material = STONE;
というコードだが、条件を修正した場合、
武器の素材は石にはならず、mysterious
という素材になる。
この"STONE"という定数は地形のための定数であり、
間違った素材を代入しているため。
} else if (uwep && uwep->material != MINERAL) {
uwep->material = MINERAL
uwep->owt = weight(uwep);
costly_alteration(uwep, COST_DRAIN);
とすると、素材は正しく石(MINERAL)になり、
重量も正しく変化し、商品に対する処理も行われる。
怪物の持つ武器は破壊され、怪物は怒る。
*1 缶詰や人形、マスク、エッセンスの注入されたアイテムでも
同じはずだが、少なくとも缶詰や人形、マスクを怪物が武器として
使う事はないと思われる。
*** tumbling ***
Archeologist Skilled
Convict Basic
Pirate Skilled
Rogue Expert
tumble コマンドを使用した際の処理は以下。
プレイヤーが飲み込まれているか罠にかかっている場合は
必ず失敗する。
Fumbling 状態である場合は必ず失敗し、d20 の物理ダメージを
受ける。
roll = rn2(6)
スキル値(tumbling) <= Unskilled || roll > スキル値(tumbling)
が真である場合、コマンドが失敗する。よって、
このスキルが無い場合でもコマンドは使用できるが、
必ず失敗する。
座標が不正な場合は失敗する。
対象が存在しないか、確認できない場合は失敗する。
コマンドが成功すると、対象と位置が入れ替わる。
プレイヤーの入れ替わり先に罠があった場合、
それが発動する。
roll > スキル値(tumbling)
が真である場合、d2 ターン行動不能になる?
が、前述の失敗条件と同じなので、これは真にならない。
*** spider friend ***
実装されていないスキル。
===========================================================
hitval
(weapon.c)
近接及び飛び道具による攻撃時の一部スキルの処理
命中修正 -= スキル値(power attack)
命中修正 += スキル値(careful attack)
命中修正 += スキル値(code of honor)
===========================================================
dmgval
(weapon.c)
近接及び飛び道具による攻撃時の一部スキルの処理
ダメージ += スキル値(power attack)
ダメージ -= スキル値(careful attack)
===========================================================
skill_hit_effects
(uhitm.c)
素手攻撃時の一部スキルの処理
まず、
dmg = 0
とする。
framing fists > Unskilled && rn2(25) < スキル値
が真の場合、対象に火耐性が無い場合、dmg += d6
dmg > 4 の場合、
相手の持つ巻物が破壊される場合がある。
freezing fists > Unskilled && rn2(25) < スキル値
が真の場合、対象に冷気耐性が無い場合、dmg += d6
dmg > 4 の場合、
相手の持つ水薬が破壊される場合がある。
shocking fists > Unskilled && rn2(100) < スキル値
が真の場合、対象に冷気耐性が無い場合、dmg += d20
dmg > 4 の場合、
相手の持つ杖が破壊される場合がある。
冷気耐性で判定されているのは、バグと思われる。
fists 攻撃は重複できるが、dmg は加算されるので、
アイテムを壊す確率が上昇する。
blood rage > Unskilled && hp < (mhp / 2)
が真の場合、
hp < (hpm / 4)
であれば、dmg += スキル値(blood rage) * 2
そうでなければ、dmg += スキル値(blood rage)
しかし、blood rage は、上記がコードの意図と
思われるが、実際のコードは
u.uhp < (u.uhp / 2)
u.uhp < (u.uhp / 4) ? 2 : 1)
のようになっているため、効力を発揮する場面は無い。
dmg がダメージに加算される。

