Open8

開発メモ

刀剣クラフト刀剣クラフト

実装

  • 基本機能
    • 刀剣男士のLivingEntityを作成
    • 刀剣のSwordItemを作成
    • 打粉のItemを作成
    • 顕現・解除の仕組みを作成
    • 回復の仕組みを作成
    • 攻撃モーションを適用
    • レシピを作成 (仮)
    • 刀剣男士のインベントリを作成
    • インベントリのGUIの調整
  • 行動パターン
    • 手入れ中・インベントリ操作中は立ち止まるように
    • 農作物の植え付け・収穫をできるように (畑当番)
    • 馬のHPを回復させるように (馬当番)
  • 追加機能
    • 進捗を作成
  • 公開準備
    • 刀剣のテクスチャの用意
    • 再配布可能なスキンの用意
刀剣クラフト刀剣クラフト

検討項目

ないと成り立たない

  • 同士討ちの禁止

ないと不便

  • 右クリック長押しで手入れ中に打粉を使い切ったとき、
    素手で右クリックしたという判定になって顕現を解除してしまう現象の対策
  • 特定条件下では立ち止まるように
    • 手入れ中(→プレイヤーが打ち粉を持って一定距離以内にいる)
    • インベントリを開いているとき
  • 刀剣男士のインベントリを表示 (シュルカーボックスを参考)

あると嬉しい

  • 刀剣の入手方法
    • 現時点では4つのアイテムを指定の配置に並べることでクラフト可能
    • 鍛刀のブロックを作りたい
      • 4つのアイテム + 刀剣固有のアイテム で指定して鍛刀できるようにしたい
      • ガチャにはしたくない
  • 刀剣男士の行動パターン
    • 随行 : 審神者と行動し敵MOBを攻撃
    • 散策 : 近辺を自由に歩き回る
    • 馬当番 : 馬のHPを回復
    • 畑当番 : 農作物の植え付け・収穫
    • 待機 : 移動しない (建築での店員役を想定,サバイバルで使用しないならnoAiで十分?)
  • 刀剣男士の行動パターンの切り替え方法
    • インベントリのGUIに項目を追加?
      • あまりスペースがなさそう。タブを作成する?
  • 負傷状況が刀剣男士を見て分かるようにしたい
    • 各刀剣男士に負傷スキンを用意するのは大変そう
    • 負傷レイヤーを重ねる? (浮いた感じになってしまう?)
  • 操作方法
    • ゲーム内で読める取説を用意する?(どのタイミングでどう渡す?)
    • 進捗で説明する?
      • 鍛刀台を作成する (専用の作業台があることを説明)
      • 鍛刀を行う (鍛刀で必要なものを説明)
      • 顕現する (顕現方法を説明)
      • 打粉を作成する (打粉の作成方法を説明)
      • 手入れする (打粉の使い方を説明)
      • 顕現を解除する (顕現の解除方法を説明)
      • 当番に任命する (インベントリの開き方を説明)
      • エンチャントを行う (エンチャントが可能なことを説明)

あっても良い

  • 刀剣・刀種ごとのステータスの調整
  • 刀装
    • ダメージの軽減 or 肩代わり (オオカミの鎧を参考)
    • 腰のあたりに見えると嬉しい (防具のレイヤー?)
  • お守り
    • 不死のトーテムの効果
    • 全回復する極も作成する?
  • 宝物
  • 刀剣男士の強化要素
    • ネザライトで刀剣・刀剣男士ともに耐火を獲得?
    • 錬結・習合・極の計画は特になし

検討中

  • 気力の要素をどうするか?
    • ベッドで気力の回復? (村人のHP回復を参考)
  • 刀剣男士が食べ物を食べたときの効果をどうするか?
    • 直接的なHP回復は打粉に任せたい
    • ポーションによるHP回復はどうするか
    • 満腹度の回復量に応じて攻撃力の上昇や気力の回復など?
  • プレイヤーとの結びつき
    • 鍛刀したプレイヤーのみが顕現・解除が可能 (チェスト入手などはどうなる?)
    • 一度顕現すると、そのプレイヤーのみが顕現・解除が可能
    • 顕現は誰でも可能、顕現したプレイヤーのみが解除可能 (刀剣の譲渡が可能)
    • デフォルトで2番目、サーバー設定により3番目も可能にする、くらい?
刀剣クラフト刀剣クラフト

顕現の仕組みの変更

現状、刀剣男士がメインハンドに刀剣を持っている前提のプログラムとなっている。
畑当番ではメインハンドに農作物を持つなど、この制約を除外したい。

案1:納刀スロットを設ける
プレイヤーはメインハンド・オフハンド・納刀スロットを触れないようにする。
納刀スロットは刀剣or空のいずれかである。
納刀スロットが空のとき、メインハンドは刀剣である。

メインハンドが農作物、納刀スロットに刀剣、インベントリが満杯のときに、
メインハンドに刀剣を移動させると農作物はどこへ行く?
その場に捨てる?

案2:NBTで識別する
すべての刀剣はNBTにUUIDを持つ。
顕現時に刀剣男士側のNBTでもUUIDを持つ。
刀剣はメインハンド・オフハンドを含めたインベントリのいずれかに存在する。
インベントリから刀剣は取り出せない or 取り出すと顕現が解かれるようにする。

クラフトやコマンド、クリエイティブタブなど、すべての入手経路においてNBTの初期化を保証できるか?
→入手時ではなく、初めて顕現するときにUUIDを発行すればOK

NBTは1.20.5で変更されるらしいので注意 (24w09a)
→変更された。NBT以外にも変更点があるので移行が必要

刀剣クラフト刀剣クラフト

進捗

1.20.5で動作することを確認。
attackDamagesetMaxUpStepなどは引数やメソッドからなくなったが、componentsに移行した?
未反映だがおそらくデフォルト値で動いている。
GUIとEntityの紐づけもOK

すること

  • メインハンドの読み取り専用スロットを作成 (インデックスがずれることに注意)
  • 行動パターン(内番など)の選択画面を作成
  • 画面・スロットを切り替える機能を実装
  • 内番の実装
刀剣クラフト刀剣クラフト

パラメータ

Tiers

Tier uses speed attackDamageBonus enchantmentValue
WOOD 59 2 0 15
STONE 131 4 1 5
IRON 250 6 2 14
DIAMOND 1561 8 3 10
GOLD 32 12 0 22
NETHERITE 2031 9 4 15

暫定的なパラメータとして、攻撃倍率と耐久値はダイヤモンド、それ以外は鉄の値を使用。

Attributes

MOB ATTACK_DAMAGE ARMOR MOVEMENT_SPEED MAX_HEALTH

TODO: MOBの一覧からパラメータを決める

刀剣クラフト刀剣クラフト

刀剣男士のインベントリ

バニラではシュルカーボックスの入れ子は禁止されている。

一方で、現在の実装では刀剣男士に刀剣を持たせることを特に制限していない。

刀剣男士にアイテムを持たせ、一旦刀剣に戻す。
その刀剣を別の刀剣男士に持たせ、...
ということを繰り返せば、容量の無限拡張ができてしまう。

ただし、この方法は利便性が極めて低い。
アイテムを取るたびに顕現して、解除して、と繰り返す必要があり、
ほとんどの人はこの方法をとらないと予想される。

全体的なバランスを壊すわけではないので、このままにすることにした。