2024年07月03日

SpliceHack 1.2.0 Role-Based Skills のスポイラー

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 がダメージに加算される。

posted by Takenoko at 20:50| Comment(0) | game | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は90日以上新しい記事の投稿がないブログに表示されております。