アイテム及びタスク消失時のゴリ押し対処法
このページは、特にver0.31アップデートで頻発する(インベントリ)アイテム、およびタスクの消失が発生した際、ゴリ押しで解決する方法を記載しています。
具体的にはセーブデータを直接いじってアイテムや出したり、タスクを表示させる方法です。
ですが特に前者はその特性上、下記の手段はゲームバランスを著しく崩壊させる可能性がありますのである程度自重することをおススメします。
執筆者のように、関係値が足りなくて買えないけど何故かタスク報酬でもらえる NIGHT VISION GOGGLES 1 が消えて萎えたときとか。
※注意※
この方法はver0.31時点のものです。
ver0.30.15以前に関しては仕様が異なる可能性がありますのでご注意ください(特にセーブデータのディレクトリ)。
この方法はセーブデータを直接いじります。破損の恐れがありますので必ずバックアップを取ってください。また、不具合等に関しては責任を負い兼ねます。自己責任で行ってください。
0-1、準備(直すのはローカル環境のみでいい時)
0.31からクラウドデータ機能が追加されています。
steamクラウドを切っておかないと同期でセーブデータが元に戻るので切っておきましょう。
セーブデータをバックアップします。
位置は、執筆者の環境では
C:\Users\%UserName%\AppData\Roaming\Goldberg SteamEmu Saves\1782120\remote
内です。この位置にない場合は C:\Users\%UserName%\AppData\Local 内等を探してみてください。
この中の save_shared_1.dat が SLOT 1 のセーブデータになります。
適当な場所にコピーしておきましょう。
また、執筆時はしていませんが、VS CODEなら
・拡張機能 Prettify JSON を導入
・言語モードを JSON に設定
するとやりやすいそうです。コメントさんありがとう...!
0-2、準備と条件(クラウドセーブも直したい欲張りさん向け)
Steamクラウド上のクラウドセーブも修正したい場合、ゲームを起動しながらデータを編集する必要があります。当然、失敗した場合には壊れたデータがクラウドにアップロードされることになります。同期されるデータも手元のデータも壊れたなんてことになっては目も当てられないので編集前のデータは絶対にローカル環境にバックアップしておきましょう。
そのほかの準備は上記のものと変わりません。
クラウドセーブを修正したい場合、ゲームを起動してタイトル画面を表示したまま下記の操作を行い、修正完了後にゲームを再起動せずそのまま読み込んで確認及びセーブしたのち、ゲームを終了してクラウドにデータをアップロードするだけです。ね?簡単でしょ?
失敗しておかしなことになってしまった場合はゲーム再起動後にタイトル画面を表示しながらバックアップ時のデータで壊れたデータを上書き、読み込んでセーブ&終了すれば元の状態に戻せます。
編集後のデータを読み込んでセーブ&終了がやや面倒かもしれませんがこうしないとデータをクラウドにアップロードしてくれないので忘れないようにしましょう。
1-1、目的 (アイテム編)
save_shared_1.dat には当該セーブデータのインベントリデータや所持金などが格納されているので、うまい具合に書き換えてやれば目的のものを入手することができます。
インベントリアイテムに絞って言えば、
・インベントリ内 𝔁 𝔂 座標:x および y
・回転しているか:rotation
・耐久度:durability
・識別されたか否か:seen
・プレーヤーによって製作されたか否か:created_from_player
・itemタグ:item
・数量:quantity
Weaponの場合はこれに加え、
・弾種:ammo_id
・装填数:ammo_quantity
・射撃モード:weapon_fire_mode
・アタッチメント:mods
のデータがあるので、目的のアイテムのタグを記述してうまい具合に整えればいいわけです。
こんなめんどい方法使わなくてもdebug mode (ゲーム内で Ctrl + Alt + P ) で直接出せます!!!
執筆時にこいつの存在忘れてました...。
セーブデータいじるときの参考にでもしてください。
1-2、編集準備
実際にセーブデータの編集に入る前に、いくつか準備しておきましょう。
先の「1、目的」に説明したように、アイテムは「インベントリ内 𝔁 𝔂 座標」と「itemタグ」が必要ですので、先に用意しておきます。
インベントリ内 𝔁 𝔂 座標は自分で記述できるなら良いのですが、いかんせん数値が謎というか、めちゃくちゃな少数のことがあるので、置き換え元にするアイテムを用意しておくのが楽です。
このとき、目的のアイテムと似た種類のアイテムにしておくことをおススメします。特にWeapon。
今回は、例として PN POKAROV を置き換えて ZZ VEL を入手しますので、買ってインベントリに入れておきました。
次に、itemタグですが、
C:\(略)\ZS_vanilla\gamedata
内の json ファイル内に記載されています。
置き換え元、目的のアイテムのタグ両方をメモしておきましょう(Weaponの場合は弾種、アタッチメントも)。
例として、以下の画像は weapon.json のものです。
赤色長方形がitemタグ(画像内ではデータ名と書いています)、青色長方形がゲーム内での名称です。
Ctrl + F で名称を検索かけたりして見つけてください。
1-3、編集
では実際の編集に入ります。
save_shared_1 を開くと、長々と1行で記述されています。
これの最下層付近にインベントリデータがあります。"Inventory" と書いてある部分から "Inventory_value" の直前までです。画像では赤色の枠の部分です。
この内、置き換え元となる PN POKAROV は itemタグが makarov なので、アイテムデータは橙色の枠の部分になります。
ここで、アイテムデータの範囲に関してですが、"item" : " (対象itemタグ) " が記述されている{ }内がそれです。
weaponの場合は、最後が }}となっているのでわかりやすいですね。
橙色の枠を抜き出すと、以下のように記述されています。
{ "x": 57.0, "rotation": 0.0, "seen": 1.0, "created_from_player": 0.0, "quantity": 1.0, "y": 79.0, "durability": 100.0, "ammo_id": "ammo_9x18", "ammo_quantity": 0.0, "item": "makarov", "weapon_fire_mode": "semi_automatic", "mods": { "barrel": "no_item", "scope": "no_item", "att_1": "no_item", "att_3": "no_item", "stock": "no_item", "magazine": "no_item", "handguard": "no_item", "brake": "no_item", "att_2": "no_item", "att_4": "no_item", "grip": "no_item" } }
これを以下のように書き換えます。今回、最低限書き換え必須事項は緑太文字の部分です。
{ "x": 57.0, "rotation": 0.0, "seen": 1.0, "created_from_player": 0.0, "quantity": 1.0, "y": 79.0, "durability": 100.0, "ammo_id": "ammo_9x39", "ammo_quantity": 0.0, "item": "as_val", "weapon_fire_mode": "semi_automatic", "mods": { "barrel": "no_item", "scope": "mod_scope_leupold", "att_1": "mod_foregrip_5", "att_3": "mod_laser_verde", "stock": "mod_ar15_stock_2", "magazine": "mod_val_magazine_2", "handguard": "mod_val_handguard_1", "brake": "no_item", "att_2": "no_item", "att_4": "mod_torch_1", "grip": "mod_ar15_grip_3" } }
1-4、確認
書き換えられたはずなので、実際にゲームに入ってできているか確認します。
成功していますね。
※銃の名称は他ページ編集の関係で変更したまま忘れてました。本来はちゃんと ZZ VEL と表示されるはずです。
1-5、おまけ
データを直接いじってやれば、本来つけられないアタッチメントもつけられます。
ということは...
30マガジン WINTER BK です。きちんと30発撃てます。つよい。
これ ZZ VEL 用のマガジン使ってるんですがビジュアル綺麗に組み合わさってますよね...。Tactical Laser とかは見た目バグるんですが...。
元ネタの銃は20マガジンあるんだから実装してもよくない?
ちなみに付け替え可能にしたい場合は、weapon.jsonを編集してください。
「新しい武器などを追加する」が参考になると思います。
2-1、目的 (タスク編)
タスクを受諾して自分のPDAデバイスには表示されてるのに、依頼者のtask欄に表示されなくて完了できない、といった状態を解消することを目指します。
そもそも受諾自体ができない場合も同様の手法で復元できるとは思いますが、実験はしていません。
save_shared_1 には、受諾しているタスクと、各npcのtask欄に表示されているタスクのデータが格納されています。
ここをいじっていい感じにすればいいわけです。
クエスト関連のデータ処理は不明な点も多いです。ページ下部のコメント欄の情報等も参照して下さい。
2-2、編集準備
実際にセーブデータの編集に入る前に、いくつか準備しておきましょう。
バックアップは取りましたか?当該手法でゴリ押しで治すと上手くいく場合とそうで無い場合、両方が報告されています。
何があっても執筆者は責任を負い兼ねますので、悪しからず。
各タスクは、当該タスクの id 、giver データが必要です。
これを用意しておきましょう。
受諾済の場合、save_shared_1.dat "quest" { } の中に両方とも記載されてるので、それをコピペすればいいです。
未受諾の場合は、giver は npc.json 等から探せば用意できます。
id は、UndertaleModTool 等で data.win をひらいて、code > gml_GlobalScript_init_quest に移動、Ctrl + F 等で当該 quest を探してください。
id が今回必要なもので、name がゲーム内での表示タスク名です。
最悪、適当に新規データ作って debug mode でそこまで進めて...で全部簡単に用意できるっちゃできる。
今回は、Igor から受諾したタスク「 Revenge for Igol 」が消えたので、再出現させます。
2-3、編集
ここからは実際に編集していきます。
まず、現時点での状態がこれです。
この状態でのコードがこれです。
見やすくするために、改行・色付けしていますが、実際は1行で記述されています。
記述箇所がわからない場合は ctrl + F 等で探してください。
上がPDAデバイスに表示されているタスクのデータ、下が各npc各npcのtask欄に表示されているタスクのデータです。
それぞれ、"quest"、"forest_trader_quest" の部分になります。
これを見ると、forest_trader (Igol) から受諾したはずの igor_revenge (Revenge for Igol) が "forest_trader_quest": [ "" ] となって記載されていません。
なので、"forest_trader_quest": [ "igor_revenge" ] と書き換えます。
2-4、確認
無事表示されました。この後完了処理も無事できました。
追記、他編集者の方へ
セーブデータを直接いじる方法を Wiki に載せるのは適切かどうか正直微妙だと思ってます。
不適切でしたら記事削除をお願いします。
また、執筆者はVS CODE等に関して初心者なので、至らぬ点も多いかと思います。
加筆・修正等はご自由にお願いします。
このページの総アクセス数: 4863
今日: 6
昨日: 8
コメント
最新を表示する
31.24でも武器消失発生したから担いでる武器が消えないか気を付けてください
>> 返信元
ありがとう
フルカスのECMを消失したわ...
大人しく他の武器にする
>> 返信元
含まれる、っていうか1-1〜5はまさにそれのゴリ押し対処法だよ
ここのは過去のデータ復旧って訳じゃなく無から有を出すみたいな感じだから、アタッチメントとかまで含めて治すならがんばってね...
プライマリ武器が消失したんだが、ここに書いてある事象に含まれるか?
Swampで歩いてたらプライマリ武器がすっと消えた
クエスト処理の方法微妙に謎なところ多いなあ
「"quest line" : { "completed" { (略) 」以下って多分完了済タスク格納してるんだろうけど、デイリークエスト調べてた時、
「"daily_quest_0 : 1.0"」のときと「"daily_quest_0 : true"」の時があって、何がちゃうねんってなったわ
ここにあるIgorの復讐タスク、自分の場合0.31作成で0.31.20に持ち越したデータでは受注クエストがないと"forest_trader_quest": [ "" ]の部分が消えるっぽいのとここの通りに"forest_trader_quest": [ "igor_revenge" ] って書き換えると何故かひとつ前の物資のほうになってしまった
ので"forest_trader_quest": [ "igor_revenge", "" ] って書き換えたらちゃんと治った
>> 返信元
この一連の記述を参考に修正したら直った。サンクス
一応、修正例。
{ "id": "valuable_item", "notifica": 1.0, "amount_now": ~<(略)>~ , "giver": "barman", "state": "completed",
←クリア報告が出来ていない状態で "state": "completed"になっているので"notifica"に修正
"barman_quest": [ "ここを修正", "", (略)],
←入力したIDが上書きされてしまうので上の修正とセットでやったら正常に報告できるように
>> 返信元
そこにあったのか、ありがとう! 他の消えてたクエストも治せた!
>> 返信元
ちょっとめんどいけど格納されてるとこは分かった
data.bin内のgml_GlobalScript_init_quest内にidとname(表示名)が格納されてるね
(略)
id: "laboratory_document",
name: "The lab",
(略)
ってちゃんと記述されてる
quest idを調べるのいい方法あるかな… Tha_Labのクエストを治そうと色々とセーブデータ調べたらのquest idが「laboratory_document」でクエスト名と全然違うかった。
>> 返信元
おそらく消える条件が「達成報告をした後に死ぬ(=ハント前の状態に戻る)」で、死んだら持ち物やらタスクの進行状態とかはハント前の状態に復元されるのに受注状態だけ復元されないから消えて見えるんじゃないかな
>> 返信元
治せたわ
questのとこじゃなくて各npcのquest表示が格納されてるとこにquest idぶち込んだら表示される
逆になんでこれ消えてるの...
quest消える問題、セーブデータファイルの真ん中~下あたりにquestデータが格納されてるから、消えてるクエストのquest idと依頼者分かればいじれば無理やり治せそう
でも自分の環境では今んところ消えてないから実験できないわ 変に壊すのも嫌だし
確認出来たらこことかに書きたいね
クエストバグったんでシンセーブデータにチェストの中身移すのやってみた。 セーブデータ最初の方の"chest"から"difficulty"の手前までがチェストの中身のデータになってるみたい。
VScode使えば銃のダメージからアーマーのクラス、アイテムの値段からその効果までなんでもいじれるようになってるの草
この記事書いた時デバックモードの存在完全に忘れてたわ それでええやん
も少し適当な記事名に変えるべきかね...
現状、0.31が不安定すぎてアイテム以外もかなりひどいから、
そっちの対応としてセーブデータ確認する術は知ってていい気がする。
アイテム増やすだけなら、もっと簡単にデバッグモードでいいしな。
VScodeだったら、Prettify JSONとかの拡張入れてやると扱いやすくなる。
あとは、言語モードをJSONにしてやると項目に色ついて見やすくなるし、データ形式のミスも気づきやすい。
xやyが少数なのは、GameMakerの数値が基本double型だから、
浮動小数点型の計算に由来する誤差。だいたい16の倍数の数値になってる。
seenは、アイテムが識別されてるかどうかのフラグ。
0にすると探索中によくある未識別アイテム扱いになる。
難易度設定時に店が扱う金額のTRADERS MONEY値を高くし過ぎると、スキルが高くなるにつれて値が振り切るのか、逆に途中で店の金額が下がる現象をこちらで調整できるかもしれませんね(0.31.15ver)。
NG表示方式
NGID一覧