ヴァルヘイムの難易度変更と実績:専用サーバーのワールド補正を実測
ヴァルヘイム(Valheim)の専用サーバーで難易度を変えるワールド補正を実測しました。プリセットと -modifier が実際に書き込む値、-setkey の正しい書き方、デスペナと実績が無効になる条件までまとめます。
ヴァルヘイム(Valheim)でワールドを作るときに選ぶ難易度とルール、つまり戦闘、死亡ペナルティ(デスペナ)、資源、襲撃、ポータルといくつかのチェックボックスを、ゲームではワールド補正と呼びます。ところが専用サーバーにはこのメニューがないため、起動引数で指定することになります。多くの解説は、その引数を並べたところで終わっています。
私たちはヴァルヘイムの専用サーバーを運用しているので、引数ひとつひとつがワールドに実際に何を書き込むのかを実測しました。バージョン 1.0.16 の専用サーバーで数十通りの組み合わせを試し、1.0.17 で再確認し、毎回ワールドファイルを読み直しています。ファイルだけでは答えが出ないところは、ゲームのコードまで確認しました。意外に思われやすい結果は四つです。
- ワールド補正はワールドファイルの中に保存されます。起動引数を消しても何も変わりません。
-modifierは既存の値を置き換えるのではなく、上から追加します。-setkeyの数値はキー名と同じひとつの引数で渡す必要があります。そうしないと数値は黙って捨てられます。- ゲームのメニューにない設定をひとつでも使うと、そのワールドでは実績が無効になります。
ワールド補正はどこに保存されるか
ワールドのメタデータファイル、つまりワールド本体の .db の隣にある .fwl(1.0 の保存形式では .fwl2 と .db2)に、キーの一覧として保存されます。.db の中にはありません。サーバーはワールドを読み込むたびにワールド補正のキーをすべて消し、この一覧から読み直します。つまり、設定が保存されている場所はワールドファイルだけです。
ここからいくつかのことが言えます。
- 起動引数を消しても設定は変わりません。 次の起動でも、ワールドにすでに入っている値がそのまま使われます。
- バックアップを復元するとワールド補正も戻ります。 先週の火曜日に戻せば、難易度も先週の火曜日の状態に戻ります。
- 持ち込んだワールドは自分の設定を連れてきます。 ソロのワールドをサーバーに移したり、別のレンタルサーバーから引っ越してきたりすると、作成時のワールド補正がそのまま付いてきます。
- ファイルへの反映は次の保存時です。 サーバーは 30 分ごとと正常終了時にワールドを保存します。引数を変えて再起動した直後にファイルを開くと古い一覧のままですが、ゲーム内ではすでに新しい設定が効いています。
四つの起動引数
| 引数 | 動作 |
|---|---|
-preset <名前> | ワールド補正をすべて消してからプリセットを適用します:normal、casual、easy、hard、hardcore、immersive、hammer |
-modifier <種類> <段階> | combat、deathpenalty、resources、raids、portals のうちひとつだけを変え、ほかには触れません |
-setkey <キー> | キーをひとつそのまま追加します。メニューにないキーも受け付けます |
-resetmodifiers | ワールド補正をすべて消します。サーバーに同梱のマニュアルには載っていませんが動作します |
引数は書いた順に左から処理されます。名前と段階は大文字・小文字を区別しません。プリセットや段階の名前を間違えてもサーバーは止まらず、Could not parse で始まるログを一行残して、ワールドに元からあったワールド補正のまま起動します。
-modifier で前の設定が消えない理由
-modifier は、選んだ段階に属するキーを追加・上書きするだけです。その段階が使わないキーは残ります。たとえば「ハード」のプリセットで始めたワールドを、あとから -modifier combat veryeasy に変えると、「ハード」が書いた enemyleveluprate 120 が残ります。ほかはベリーイージーなのに、星付きの敵だけよく出るワールドになります。ベリーイージーには、そのキーを上書きする値がそもそもないためです。
対策は、毎回空の一覧から始めることです。次の順序なら、何度再起動しても同じ結果になりました。
./valheim_server.x86_64 -nographics -batchmode -name "Our world" -world "Dedicated" -password "<パスワード>" \
-resetmodifiers -preset hard -modifier deathpenalty casual -setkey nomap
-resetmodifiers を先頭に、次にプリセットか個別の -modifier、最後に -setkey を置きます。-preset はそれ自体がすべてを消すので、それより前に書いた設定は失われます。
プリセットごとに書き込まれる値
新しいワールドで実測した値です。数値はゲームの標準値に対するパーセントです。どのプリセットも、これとは別に preset <名前> という記録用の項目を残しますが、後述の実績の判定はこの項目を無視します。
| プリセット | 書き込まれるキー |
|---|---|
| ノーマル | なし(すべて消去) |
| カジュアル | playerdamage 125、enemydamage 50、enemyspeedsize 90、deathkeepequip、skillreductionrate 15、resourcerate 150、eventrate 0、passivemobs、teleportall、playerevents |
| イージー | playerdamage 110、enemydamage 75、enemyspeedsize 95、eventrate 150 |
| ハード | playerdamage 85、enemydamage 150、enemyspeedsize 110、enemyleveluprate 120、eventrate 60 |
| ハードコア | playerdamage 70、enemydamage 200、enemyspeedsize 120、enemyleveluprate 140、eventrate 60、deathdeleteitems、deathskillsreset、nomap、nobossportals |
| 没入 | nomap、noportals、fire |
| ハンマーモード | nobuildcost、passivemobs、eventrate 0 |
「カジュアル」は、戦闘ベリーイージーに死亡ペナルティ「カジュアル」、資源増、襲撃なし、受け身の敵、ポータルアイテム、プレイヤーベースの襲撃を加えた構成です。「ハードコア」は、戦闘ベリーハードに死亡ペナルティ「ハードコア」、マップなし、ボスが生きている間のポータル禁止を加えた構成です。
段階ごとに書き込まれる値
戦闘 — playerdamage は与えるダメージ、enemydamage は受けるダメージ、enemyspeedsize は敵の大きさと速さ、enemyleveluprate は星付きの敵が出る頻度です。
-modifier combat | playerdamage | enemydamage | enemyspeedsize | enemyleveluprate |
|---|---|---|---|---|
veryeasy(ベリーイージー) | 125 | 50 | 90 | — |
easy(イージー) | 110 | 75 | 95 | — |
normal(ノーマル) | — | — | — | — |
hard(ハード) | 85 | 150 | 110 | 120 |
veryhard(ベリーハード) | 70 | 200 | 120 | 140 |
死亡ペナルティ — skillreductionrate は、死んだときに失うスキルの量を調整します。
-modifier deathpenalty | キー | 死んだとき |
|---|---|---|
casual(カジュアル) | deathkeepequip、skillreductionrate 15 | 装備中のものは身に着けたまま、残りは落とします。スキルはわずかしか失いません |
veryeasy(ベリーイージー) | skillreductionrate 15 | すべてその場に落とします。スキルはわずかしか失いません |
easy(イージー) | skillreductionrate 50 | すべて落とします。スキルの損失は通常の半分です |
normal(ノーマル) | なし | すべて落とし、拾いに戻れます |
hard(ハード) | deathdeleteunequipped、skillreductionrate 150 | 装備中のものは落とし、残りの所持品は削除されます。スキルも多く失います |
hardcore(ハードコア) | deathdeleteitems、deathskillsreset | 持っていたものはすべて削除され、スキルもすべてリセットされます |
資源率 — キーは resourcerate ひとつです。muchless 50、less 75、more 150、muchmore 200、most 300。
襲撃率 — キーは eventrate ひとつですが、向きが逆です。襲撃と襲撃の間隔を伸ばす値なので、数値が大きいほど襲撃は減ります。none 0(襲撃なし)、muchless 200、less 150、more 60、muchmore 30。
ポータル — casual は teleportall(鉱石や金属を含むすべてのアイテムが通れる)、hard は nobossportals(ボスが生きている間は使えない)、veryhard は noportals を書き込みます。
メニューにある五つのチェックボックスには -modifier の形がありません。-setkey で指定します。nobuildcost(建設無償)、passivemobs(受け身の敵)、playerevents(プレイヤーベースの襲撃)、nomap(マップなし)、fire(火災の危険)。
メニューにない設定
-setkey はメニューよりも多くのキーを受け付けます。次のキーはゲームのワールド補正画面にはありませんが、ゲームのコードが読み込み、専用サーバーでも適用されます。
| キー | 効果 |
|---|---|
nocraftcost | クラフトに素材が要りません |
noworkbench | 作業台の近くでなくても建設できます |
allpiecesunlocked | すべての建築物が最初から使えます |
allrecipesunlocked | すべてのレシピが最初から使えます |
dungeonbuild | ダンジョンなどの屋内にも建築物を置けます |
nobuildingfall | 雨、雪、灰、溶岩で建物が傷まなくなります |
deathkeepinventory、nopseudodrops、noheavysnow、allheavysnow、worldlevellockedtools もゲームが読み込むキーですが、効果はまだ検証していません。
そして倍率です。すべてパーセントで指定し、標準は 100 です。数値はキーと同じ引数の中に入れます。-setkey "carryweightrate 200" なら所持重量が二倍になります。
| キー | 調整するもの |
|---|---|
skillgainrate | スキルの上がる速さ |
skillreductionrate | 死んだときに失うスキル |
staminarate | すべての行動のスタミナ消費(0 なら消費なし) |
movestaminarate | 走る、跳ぶ、泳ぐときの追加のスタミナ消費 |
staminaregenrate | スタミナの回復速度 |
eitrrate | 魔法に使うエイトルの消費 |
durabilityrate | 武器、道具、防具の耐久の減り方 |
foodrate | 食事効果が切れる速さ(高いほど早く切れる) |
adrenalinerate | アドレナリンのたまる速さ |
carryweightrate | 所持重量の上限 |
戦闘のキーも同じ書き方で好きなパーセントを入れられます。たとえば -setkey "playerdamage 150" です。
このセクションの設定はすべて、そのワールドの実績を無効にします。 メニューのどの段階にもない戦闘の値も同じです。詳しくは後で説明します。
-setkey が効かないように見える理由
数値が別の引数になっています。 -setkey carryweightrate 200 は引数が二つです。サーバーは数値のない carryweightrate(つまり 100%)を保存し、200 は行き場のない引数として扱います。キーと数値は必ずひとつの引数にする必要があるので、引用符で囲んでください。-setkey "carryweightrate 200"。起動行をひとつの変数からスペース区切りで組み立てるランチャーにも注意してください。一部のパネルやコンテナイメージがそうしていて、引用符で囲んだ組をまた二つに割ってしまいます。
タイプミスもそのまま受け付けます。 -setkey は名前を確認しません。-setkey nobuildcosts と書けば、書いたとおりにワールドへ保存され、何の効果もありません。
消すことはできません。 次の起動で -setkey を外しても設定はオフになりません。キーはすでにワールドに保存されているからです。-resetmodifiers から始めて、残したいものを書き直してください。
ファイルを確認するのが早すぎます。 新しいキーはワールドを読み込んだ時点でゲームに効きますが、.fwl に書かれるのは次の保存時です。
レンタルサーバーならこの一行を自分で組み立てる必要はありません
KeepWorlds では、ワールド補正はコンソールの設定画面です。プリセットを選ぶか「カスタム補正」を選んで、難易度の五項目、ルール、倍率をひとつずつ決められます。コンソールが上の順序で引数を書き、毎回空の一覧から始め、倍率はひとつの引数として渡します。既定はワールドの設定をそのまま使うなので、持ち込んだワールドや以前に設定したワールドは元のワールド補正を保ちます。
実績が無効になる条件
ゲームのメニューで選べる設定、つまりプリセット、五つのスライダーの各段階、五つのチェックボックスだけでは、実績は無効になりません。それ以外の設定では無効になります。
ゲームはワールドのワールド補正キーをひとつずつ、メニューが作れる値と照合します。範囲外のキーがひとつでもあるとワールドに印が付き、そのワールドで遊ぶ人は全員、実績の画面で次の文言を目にします。
ワールドでチートを使用したため、このキャラクターの実績進行度が永続的に無効になっています。
日本語の文言は「このキャラクター」となっていますが、英語版の原文は「このワールド」で、判定もワールド単位です。対象になるのは、「メニューにない設定」のすべてのキー、メニューの段階が書く値(skillreductionrate 50 など)でない限りすべての倍率キー(100 と書いても同じです)、そしてどの段階も使わない戦闘の値(playerdamage 150 など)です。専用サーバーでも同じです。 プレイヤーが接続するとサーバーがワールドのキーを送り、プレイヤー側のゲームが同じ判定をします。1.0.16 のゲームコードで確認し、1.0.17 でも変わっていないことを確かめました。文言は「永続的に」となっています。判定はワールドの現在のキーを読むので、-resetmodifiers でキーを消せば外れる可能性はありますが、ゲーム内では確認できていません。永続的だと考えておくのが安全です。
Iron Gate の Valheim 1.0 FAQ は、メニューのワールド補正にも一部の実績を妨げるものがあるとしてハンマーモードを挙げ、ハンマーモードは「一時的なチート」として扱うとしています。コード上でその処理は見つけられなかったので、ハンマーモードは実績を妨げると考えてください。
難易度が条件になっている実績は、戦闘の設定だけを見て進行度を数えます。死亡ペナルティ、資源、襲撃、ポータルは関係しません。
バックアップで戻せないのはデスペナだけ
ヴァルヘイムのキャラクターはサーバーではなく、各プレイヤーの PC に保存されています。サーバーのバックアップに入っているのはワールド、つまり建物、チェスト、マップ、ワールド補正です。誰かの所持品やスキルは入っていません。
そのため死亡ペナルティ「ハード」と「ハードコア」は、サーバーのバックアップが届かないところに作用します。「ハード」では、死んだプレイヤーは装備していない所持品をすべて失います。「ハードコア」では、持っていたものがすべて削除され、スキルもすべてリセットされます。そのあとワールドを巻き戻しても、戻るのはワールドだけで、失った装備は戻りません。
この二つはみんなで決めることです。最初の死者が出てからではなく、オンにする前に全員へ伝えてください。
既存のワールドでワールド補正を変える
いつでも変えられます。サーバーを止め、引数を変え、起動し直すだけです。新しいワールド補正はワールドの読み込み時に適用され、それ以降はワールドに保存されます。すでにワールドで遊んでいたプレイヤーのキャラクターはそのままで、新しい戦闘、倍率、ルールはその起動から適用されます。
どうせ起動行に引数を残しておくなら、-resetmodifiers から始まる全体を残しておいてください。そうすれば起動行がそのままワールド設定の正確な記録になり、一語を変えればひとつの設定だけが変わります。
よくある質問
ヴァルヘイムの専用サーバーで難易度を変更するには?
サーバーの起動コマンドに起動引数を付けます。七つのプリセットのどれかは -preset、戦闘、死亡ペナルティ、資源、襲撃、ポータルは -modifier <種類> <段階>、チェックボックスとそれ以外は -setkey です。ワールドに元々何があったかに結果が左右されないよう -resetmodifiers から始め、サーバーを再起動します。
サーバーを再起動するとワールド補正はリセットされますか?
いいえ。ワールド補正はワールドファイルに保存され、ワールドと一緒に読み込まれるので、引数なしで再起動しても保たれます。変えるには新しい引数を渡し、消すには -resetmodifiers か -preset normal を使います。
-setkey で指定した数値が反映されないのはなぜですか?
キーと数値が二つの引数として渡されているためです。-setkey "carryweightrate 200" のように引用符で囲んでひとつにしてください。-setkey carryweightrate 200 と書くと、サーバーは数値のないキーを保存し、それは標準の 100% を意味します。
ワールド補正はバックアップに含まれますか?
含まれます。ワールド補正はワールドファイルの一部なので、バックアップにはその時点のワールド補正が入っていて、復元すると一緒に戻ります。プレイヤーのキャラクターはサーバーのバックアップに含まれません。厳しい死亡ペナルティで失ったものも同じです。
任せてしまうという選択肢
ここまでの設定はすべて、順序、引用符、綴りを正確に合わせる必要がある起動引数です。しかもワールドは、最後に受け取った値を黙って持ち続けます。
KeepWorlds のValheimのレンタルサーバーでは、同じ設定が設定画面になっています。死亡ペナルティ「ハード」や「ハードコア」を保存するときはプレイヤーに伝えたかどうかの確認があり、試してうまくいかなくてもバックアップと復元でワールドを戻せます。
ゲームはプロセス起動時に設定を読み込むため、保存後に再起動が必要です。