投稿記事

2019年 09月の記事 (4)

des 2019/09/29 14:11

育成SLGの話8 雰囲気

定期進捗

・戦闘以外の大体の箇所にBGMとSE(どちらもフリー素材)を挿入
・PCがお陀仏になりそうなのでその対策と、現PCで重たい処理の軽量化
・本作の機能の都合で過去作の更新


※動画の内容は1βで予定している挙動とは若干異なります。

動画内の使用BGM
・音楽の卵 様 http://ontama-m.com/
・ユーフルカ 様 https://wingless-seraph.net/

これ以上の尺にすると1βで出来る事の8割くらいを見せる事になりそうでしたので、過去の記事に載せている部分だけにしました。

パソコンの状態について

MVBenchというRPGアツマールに投稿されていたゲームで製作環境を測定してきました。


※調子の良い時だと大体200くらいの値が出ます。
 以前は調子が悪くても80くらいは出ていたのですが、さらに下がってます。

原因ですが、去年の1月頃に壊れたファンが悪さをしてると予想してます。
その頃からガリガリガリガリと90デシベルくらいの音を立てている状態でないとまともに動かなくなりました。
対策したいのは山々ですが解体したら元に戻せなくなりそうなのでずっと放置してます。
……8年近く使っているので色々としょうがない気がしてます。買い替えるためのお金が欲しい。

重たい処理について

画像を複数枚表示するのは問題ないのですが、大きな画像を複数枚同時に表示させようとすると数秒ほど固まるので、その対策を講じました。
要は「面倒くさがってトリミングしてなかった画像をトリミングしてゲーム側で調整した」だけです。

告知

実装したい機能を思いついたのですが、いかんせん今の状態で作り出すとバグの嵐で修正自体を投げる事になると感じました。
そのため1βの公開後に、マウスとキーボードの同時操作の処理製作に慣れるためにちょっとしたミニゲーム(全年齢のフリーゲーム)を裏で作ってきます。
ミニゲームに関しては、もし完成まで漕ぎつけていれば来年の夏におこなわれる某企画に初参加します。

des 2019/09/21 12:13

【小ネタ】引数対策

定期進捗

(今やってる事)
・バグ取り
・演出やUIの修正
・アイコンの作成
(前回の記事についてあれから)
・2つ目の問題に関しては良い解決策を思いついたので問題はなくなりました。(エロを求めている方にはちょっとどころではなく大変な仕様になりそうですが……)
・1つ目の問題は…………。



下に貼った画像を隠したかったので演出用に作った画像でカモフラージュ

本題

今回も小ネタ(というより急いで対策した挙動)です。

注意

今回の内容はあまり広げるべきではない内容なのですが、過去の内容も十分広げるべきではない内容ですのでネタと備忘録として記事に残しておきます。

色々調べ物をしていた所、ウディタの開発者であるSmokingWOLF氏が2011年にこのような呟きをしていたのを見つけました。
https://twitter.com/WO_LF/status/30203006473474049

知らなかった そんなの・・・(画像略)
……公式チート機能じゃないですかこれ。

問題点

・基本システムのような「元々何が入るか決まっている枠」の書き換えが容易にできてしまう。
・セーブで保存される部分はセーブする事で以降も保持できてしまう。
・F12キーやタイトルに戻るで初期化した時は再び代入される。
・変数呼び出し値で設定可能な場所であればなんでも書き換えられる。
 ただし保存されない部分はセーブデータをロードする事で元の値に戻される、と思われる。
(UDBを変更した場合の参考動画)

試してみた

※画像の枚数が多くなりそうでしたのでbatファイルの内容をそのまま貼り付けてあります。
※文字列の代入はUTF-8で保存したbatファイルだと文字化けします。BOM付きで保存するとGame.exeが起動すらしません。文字コードをShift-JISかANSIにする事で確認した限りでは正常に表示されてました。
※条件は分かりませんが、変数を変更した後に文字列変数を変更して起動しようとすると起動しなくなる事があります。その時は文字コードの再設定をすると解消できます。

通常変数

Start Game.exe -vinput 2000000 16

文字列変数

Start Game.exe -sinput 3000000 あ

コモンセルフ変数

Start Game.exe -vinput 15000000 99

システム変数

※Sys110番の「現在の乱数のシード」を使用
Start Game.exe -vinput 9000110 255

可変データベース

Start Game.exe -sinput 1100000000 文章

ユーザーデータベース

Start Game.exe -sinput 1000000000 ウホウホ

システムデータベース

※弄っても面白い物がないのでSDB12番にある文字色の変更を使用
Start Game.exe -vinput 1312000000 255 -vinput 1312000001 0 -vinput 1312000002 0

セルフ変数

Start Game.exe -vinput 1000000 16
→ウインドウは立ち上がるもののすぐに強○終了。

弄られる事によって生じる問題

致命的な物

・ユーザーデータベースの値を弄る事により装備のパラメータやアイテムの効果を任意の値に設定できるため容易にバランスを破壊できます。
・特定のフラグを立てたりできる為、データの保存方法によってはゲームとして成立しなくなります。
(同人エロゲとしての観点だとフラグ管理をスイッチのように管理している場合は回想シーンを無理やり全開放できる場合があります。)

対策

この隠し機能を本気で対策するとなると以下のような処理を組む必要があり、はっきり言ってかなり面倒くさいです。

対策方法の一例(括弧内に各動作の詳細)

1.通常変数かどこかにフラグ管理用の変数を用意し、該当の変数が条件を満たしていれば起動時に自動実行されるコモンイベントを作っておく。(4の処理が終わり次第遊べるようにするためのイベントを書く)
2.起動した直後に全てのCDB、通常変数、システム変数、文字列変数、コモンセルフ変数を初期化する。(セーブで保存される部分の初期化処理、CSV化しておき起動時に読み込むのが簡単?)
3.はじめからを押したら、直後に使わないマップへ移動させフラグ管理用の変数を立て、使わない枠にセーブ。セーブ完了後すぐに該当セーブデータをロードする。(セーブで保存されない部分の初期化処理。使わないマップに移動させないとマップに自動実行イベントが設定されている場合にマップイベントが優先される)
4.1でイベントを作ったならば3でセーブデータをロードした時に1のイベントが起こるようになるので、フラグ管理用のフラグを消した状態でセーブし直し1のコモンイベントを経由してはじめから遊べるようにする。

……オンライン対応だとこのくらい対策をしなきゃいけない気もしますが、今回は「データを弄る方法が他にある以上、弄りたいなら弄れるようにする」というスタンスを貫き複数の回避方法を取れる雑な方法で対策しました。

凄く雑な対策

■文字列操作:CSelf5 =<→のフォルダのファイルリスト取得> ""
■文字列操作:CSelf5 =<から文字列を置換> "B" → "b"
■文字列操作:CSelf5 =<から文字列を置換> "A" → "a"
■文字列操作:CSelf5 =<から文字列を置換> "T" → "t"
▼ batファイルが含まれているなら起動を中断
■条件分岐(文字): 【1】 CSelf5が ".bat" を含む
-◇分岐: 【1】 CSelf5 ".bat" を含む の場合↓
|■ループ開始
| |■ウェイト:1 フレーム
| |■
|◇ループここまで◇◇
|■
◇分岐終了◇
■文字列操作:CSelf5 = ""

上の説明

1.まずGame.exeがあるフォルダのファイルリストを取得
2.拡張子に大文字が含まれていると正しく判定できないので該当文字列を全て小文字に変更
3.拡張子がbatのファイルがあれば無限ループを起こすよう条件分岐
※凄く雑な対策ですので「.bat.txt」等のファイル名に複数の拡張子が含まれている場合に誤検出が起きます。

という訳で引数対策の記事でした。
あとで色々直さないと……。

des 2019/09/14 04:51

育成SLGの話7 設定の矛盾

謝罪

前回の記事にて誤った説明を記載しました。
この場をお借りしてお詫び申し上げます。

定期進捗

・立ち絵:一部のアニメーションを後回しに
・お借りするBGM等の収集:大体完了
・イベント:触ってません。後述する問題のせいで全て作り直さないといけない可能性が……。

ここ数日の間、現実でごたごたがあったり、ある一件で歓喜して関係の無い事をしていたりしていたため、製作の進捗としてはほとんど進んでません。(9月には間に合わなそう)

アンケート結果

先日デバッグに関してアンケートを取らせていただきましたので、結果を掲載します。

0票じゃん。
……ええと、その。可能な限り確認できたバグは潰しますので、しばらくお待ちください。

ゲームタイトル

シンプルに「MAMONO」とかにしてもいいんじゃないかと思いました。
全然パロディ風でかつ面白いタイトルが思いつきません。本当どうしよ。

本題

ここから先はかなり込み入った内容となるのでフォロワー限定のほうで書きます。

フォロワー以上限定無料

設定

無料

des 2019/09/06 19:56

(9/10追記有)【小ネタ】ウディタでコマンドプロンプトを操作するCSVファイルを生成する

追記(9月10日)

本文に誤りがありましたので訂正いたしました。
謹んでお詫び申し上げます。



出せるネタが無いのでゲームとは関係の無いタイトルどおり小ネタです。
「ウディタで」とは書きましたが、ファイルを出力できるツール類なら何でも可能です。というかここまでまどろっこしい事をする必要はありません。

前提となる解説は下記の記事を読んだほうが早いのでまずはこちらを。

覆された常識、CSVファイルでウイルス感染 - 日経 xTECH 2018/05/30 05:00
https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00001/00535/

仕組みとしてはExcelがダウンロードされているPCは初期設定だとCSVファイルはExcelで開かれてしまう事を利用し、悪意のある関数等が書き込まれたファイルを開かせてどうのこうのするという手法らしいです。
この挙動は何かに使えそうという事で、ネット上に公開されていた電卓を起動するサンプルコードをお借りして試しに起動させてみました。

サンプルコード

DDEAUTO {C:\Windows\System32\cmd.exe}
=cmd|'/C "calc"'!a2

※1行目はDDE関数を用いてコマンドプロンプトを開くコードなので変更不可。→必要ありませんでした。(9月10日修正)
※/Cを/Kにするとコマンドプロンプトを表示したままにできるので確認時は少し楽です。

と、確かに電卓が起動しました。
ちなみにこのコードにある「"calc"」はsystem32内にあるファイル名を表していると思われます。(一部開かないファイルがあるので不確定)
ですので、以下のように変えるとsystem32内の別ファイルを起動できます。
(例)
"notepad":メモ帳
"mspaint":旧版のペイント
"control":コントロールパネル
"dxdiag":DirectX 診断ツール
"Taskmgr":タスクマネージャ(挙動が怪しいので使わないほうがいいかも)

もう少し踏み込んでsystem32外にあるファイルを指定します。

サンプルコード

注意:原因は分かりませんがCookieが破損する事があります。(1敗)
DDEAUTO {C:\Windows\System32\cmd.exe}
=cmd|'/C "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"'!a1


このファイルを開くとGoogle Chromeが立ち上がります。
気合で弄ってたら開くようになったので理由は知りませんが、ファイルパスを直接指定すると開くようです。

ここからが本番で、CDBにコードを書き込んでcsvファイルで出力します。
まずコモンイベントを雑に作ります。


※1行目はデータ名が入るので!a1を!a2に変えておく。
単にcsvファイルにするだけならtxtファイルとして保存する機能を用いてもできますが、保存先の利便性の都合で今回はCDBを使います。

テストプレイで起動し実行

できました。

という訳でゲーム面で使う機会のない小ネタでした。

最後に一言。
csvファイルをExcelで開く時は気を付けよう!

追記(9月10日)

ADV170021 | Microsoft Office の多層防御機能の更新プログラム - Microsoft 最終更新日 : 2019/08/13
https://portal.msrc.microsoft.com/ja-jp/security-guidance/advisory/ADV170021
さらに調べた所1年ほど前のアップデートで対策パッチが配布されてました。

おまけ

拡張子をxlsにして出力してもなぜか動きました。
txtファイルと互換性があるんですね……。

フォロワー以上限定無料

追記(今回の内容に関連した過去記事の補足)

無料

月別アーカイブ

記事のタグから探す

限定特典から探す

記事を検索