■サイト[SilverSecond]トップ
■開発日誌トップ
【ウディタ大規模アプデ内容予告 6 Unicode化】

ということでウディタの大規模アップデート作業、今は超地味で超コストが高いものの
いちおう世界展開にも影響する部分、『Unicode化』を進めています!



「Unicodeってなに!?」 と思われるかもしれませんが、
もともとウディタの内部は地域ごとに作られた「マルチバイト文字」というので動いていまして、
日本ならマルチバイトの『シフトJIS(SJISとも言います)』と呼ばれる文字コードで動いていました。

これは海外だともちろん違う文字コードになっており、中国語の簡体字なら「GB2312」、
繁体字なら「BIG5」とか色々あるため、文字コード1個しか指定できなかった
これまでのウディタでは、同じゲーム画面内では
2つ以上の言語が同時に表示できないようになっていたのです。

さらに言うとWOLF RPGエディターは「シフトJIS」用のエディタ + ゲーム動作アプリなので、
海外言語のOSでゲームやエディタを開くと部分的に文字化けします。
さらにはエディタで中国語の文字なども入れることができなかったので、
海外展開されている最先鋭の人たちは移植の際にお困りになりがちでした(私も)。

ということで今回、大規模更新のついでにGame.exeやEditor.exe内で扱うコードを
世界で使える文字コードである「Unicode」にしてしまおう!
というのが大きな目標の一つとなりました。
大部分の皆さんへの恩恵が地味すぎる割にコストが莫大な部分ですが、
ここを逃すと一生見て見ぬフリを続けそうだったので!!

あと私が裏でどれだけローカライズ関係で言語周りのお問い合わせを
これまでヒィヒィいいながらサポートしなければならなかったかを考えれば、
私にとってはむしろここで苦労する方が人生の総コストで見れば安上がりです!

そんなわけでVer3からは、ゲーム部分は「UTF-8」、
エディタ部分は「ワイド文字(たぶんUTF-16? でもファイルはゲーム用に全てUTF-8です)」
で動くようになります。いまそのための修正を行っています。



【Unicode化でどんな面がよくなるの?】

ではUnicode化で皆さんにどんな恩恵があるかというと、以下のような点です。


●変わった記号が使えるようになる。

↓タイトルバーにも♥が使用可能! メッセージ内に記号も使用可能!(フォントに入ってるもののみ)
要するに、フォントに入っている文字なら何でも使えるようになります。

あまり見ない媚び媚びウルファール。


●1ゲームデータ内で言語切り替えが可能になる。

かなりうまく作らないといけませんが、
文字列のほとんどをDB内に書いておけばCSVファイル読み込みで言語を変えたり、
言語別のマップを作っておいて切り替えられるようにしておけば
1ゲーム内で言語の切り替えをさせることも可能です。


●海外展開するときなどに、エディタ上から直接
中国語などを入れられるようになる。


これまでは日本語OSで起動すると、文章欄には「日本語」しか入れられなかったので、
中国語簡体字へのローカライズが困難でした。

ですがこれからはどんな文字でも入るので、
ただでさえ少ない対象人数の中のさらに何%だよって話になりますが、
現在の海外展開先の主流の一つである「中国語」へのローカライズもラクになります!


●海外のOSでもエディタが文字化けせずに使える。
かつゲーム内で確実に海外語の文字が出せる。


私にとって地味に大きい部分です。海外の人からの連絡で
「これこれこうしたいんだけど文字がうまく出せないんです!」
というお問い合わせが殺到することがたぶんなくなります。
またロシア語など、これまでゲーム内で表示すらできなかった言語も入れられるようになります。

だいぶ昔、ドイツの方に「ウディタは海外言語に対応してないのごめんね」って言ったら
(SmokingWOLFなので)「タバコの吸いすぎで死んじゃえ!」って
お返事をいただいてしまったり、台湾の方からのお問い合わせで
うまく文字が出せなくて何度も泣きそうになったりなど
色んな経験をしてきましたが、これからは多少安心です。


●別言語のセーブデータと共存しやすい。
文字コード自体はどの言語でも共通になるので、
セーブデータの共存がしやすくなります。

とはいえ、アイテム名やプレイヤー名が、
選択中のフォントに対応してない言語のものだと
ゲーム内で表示しようとしても文字化けしてしまいます!

【全言語対応フォント】などを入れてるならいいんですけれど、
なかなか数がないんですよね。
可能なら、「オンラインプレイヤー表示」の部分などには
全言語対応のフォントを入れたいところです。

あと私にとっては、『片道勇者2』のオンラインプレイヤーの処理を
言語別にいちいち分けなくてよくなるので助かります。
(『片道勇者(プラス)』では日本語と英語で接続先もサーバプログラムも変えていました)


●ファイルが日本語のままでも海外で動作する!(?)

これは全言語を試せてないので確定したことが言えませんが、
ロケール(OS言語)を「中国語の繁体字」にした状態でも、
暗号化された「あああ.txt」ファイル(日本語ファイル)を
ゲーム内から読み込めるようになっていることが確認できたので、
日本語ファイル名が混ざっていても海外OSで普通にゲームが動作すると思われます。

ファイル名は本来は「英数字のみ」が推奨で、
これまではそうしておかないと海外版が安定動作しなかったんですが、
これからは日本語ファイルが混ざっていてもそのまま出せるかもしれません。
それでも英数字以外のファイル名はあんまり推奨しませんが!



【ゲーム開発者がUnicode化でやるべきことはある?】

Unicodeに変わるにあたってユーザの方が何をすればいいかですが、
基本的には何もしなくても問題ないようにするつもりです。
メリットをあんまり感じにくいUnicode化で大きいご負担をおかけするのもアレなので
低負担で移行できるサポートをご用意します。


●Ver3のエディタを起動したとき、一通りのファイルを
全変換できるコンバート画面が開くように!




Ver2以前のゲームデータをVer3のエディタで開いたら
最初にコンバート画面が表示されます。
ここで文字コードを全変換します。

ファイルの変換対象は「コモンイベントやDBなどの基本データ」、
「Dataフォルダ内の全.mps(マップ)ファイル」、
「Dataフォルダ内の全.txtファイル」です。

※ただし、txt拡張子以外のファイルはスルーされてしまうので、
もし.logなどの他の拡張子のテキストファイルが使われてるなら
自力でUTF-8型に変換していただく必要がございます。
Windowsの「メモ帳」で名前を付けて保存し直すと文字コードを選び直せます。


いちおう安全のために全部まとめて変換しているものの、
実はtxtファイル以外は、Ver2のままのデータを
Ver3用に変換せずともそのまま読み込むことができます。
(.datファイルは、内部にUTF-8済みかどうかのフラグを持っているので自動で区別されます)



●Game.exeを差し替えるだけでも動作するように。

Ver3のGame.exeは過去のゲームデータでも動作します!
旧データも読むようにしたので、Game.exeを差し替えれば、
Ver2のゲームデータでもそのままプレイ可能です。

ただしDXライブラリの更新でウディタの暗号化アルゴリズムが
Ver2.255(2021/2/27)で根本的に変わってしまったので、
それより前に暗号化されたゲームは読めません。


作者さまの場合は、Ver3のEditor.exeで
ゲームデータを開き直して作り直してくだされば大丈夫です。


また、Game.exeで昔のデータを開いたときの挙動ですが、
「文字列操作」コマンドのファイル入出力で出せるtxtファイルも、
【Ver2の旧データだと認識されると、前のSJIS文字コードのまま読み書き】し、
【「Ver3に変換済み」なら「全てのtxtファイルをUTF-8で入出力」】します。

一方、「DB操作」で出せるCSVファイルは新旧にかかわらず「UTF-8」型で出力されるようになります。
ただ読み込み自体は、SJIS版と新しいUTF-8版を自動判別して
どちらもゲーム内で読める文字として読み込めるようになっているので安心です。
(Excelで保存されたものなら、CSVファイル内のフラグを認識して
UTF-8版とSJIS版の文字コードを区別できます)

と複雑なことを言っていますが、要するに
「Ver3のGame.exeは、古いゲームデータでもファイル入出力はなるべく
これまで通り動作するように読み書きされるようになっています」
ということです。
Ver2.255(2021/2/27)で暗号化された去年以降のゲームなら、
Game.exeだけ差し替えしてもたぶん動くと思います。


●過去のセーブデータもちゃんと使用可能。

Ver2時点のセーブデータもしっかり読めるようにしておきました。
Ver2のセーブだと認識されると、内部文字コードを
自動でUTF-8に変換して読み込みます。

要するにこちらも利用者の方はほぼ何も気にせず使えるということです!
私は気にするところがいっぱいですが!
プレイヤーの方が100時間以上遊んだセーブデータなどもあるわけで、
今後もちゃんとそのまま使いたいですものね。



【今後】

ゲーム側は前々からUTF-8化するための準備を内部に仕込んであったので
だいぶラクにUnicode化できました。あとはバグ探しのみです。

が、問題はエディタ側!

エディタ側はほぼ全体にわたって、すみからすみまでオーバーホールが必要な状況です。
Unicodeモードにしただけでコンパイルエラーが4000件も出る!
が、それはもう解決して、起動できるところまでは行けました。

というのも今回の作業においてはプログラミングソフトの
「Visual Studio 2022」のサポート機能がすごい優秀で、
構文エラーや型エラーがすごい勢いで直せていて
非常に高効率で作業できているので、
ここでもプログラミング環境を最新にした効果が出ています。

Visual Studio 2003でやってたら2ヶ月でも終わらなさそうなのが
ほんの数日でコンパイル成功までいけましたからね! 最低10倍速!
こんなソフトがタダで使えるようにしてくれているMicrosoftさんに感謝です。

ですが「コンパイル時に引っかかるバグ」ならまだいいんですよ!
そこで引っかからない隠れバグがいったい何百件隠れているか、想像も付きません。
ここからはその辺を修正しながら進めていくことになると思います。

そして、最後にいくつか新機能を付けたら一旦Ver3.00としての修正を完了し、
一般公開して、しばらくここまでの変更で増えたであろうバグの修正に
集中する感じでやっていこうと考えております。
また、各種非公開機能やプレミアムな機能が使える「ウディタ3プロ版」も
アーリーアクセスで同時販売予定です。
  
【ウディタ大規模アップデートで搭載される機能 5】

引き続き大規模アップデートの機能紹介!
今回も紹介動画を作ったのでぜひご覧ください。6分ほどです。



この動画内で紹介されている新機能や強化内容は以下の通り!



【ピクチャ機能をいろいろ強化!】


●【ピクチャ】 ピクチャへの画面取得機能を実装。

「[1]ファイル読み込み」のファイル名、または
「[2]文字列読み込み時」の文字列変数内に
<SCREENSHOT>と入れると、
「その時点で表示されている画面」をピクチャとして利用できるようになります。
なお、このピクチャ内容はセーブできず、ロード時には消えてしまうため、
一時的なエフェクトとして使うことを考えてみてください。

また動画内では言い忘れていましたが、
この<SCREENSHOT>ピクチャ指定で「表示」をするたび、
<SCREENSHOT>ですでに表示中の他の全ピクチャの画像も更新されます。
つまり、ゲーム内では<SCREENSHOT>は共有の画像であり、
最新の1枚しか保存していません。この点はあらかじめご了承ください。

※なおプロ版ウディタでは
「緑帯なしでスクリーンショットを画像ファイルとして取得できる」
機能が搭載される予定です。



●【ピクチャ】 部分切り出し表示機能を実装。

[1]ファイル読み込みまたは[2]文字列読み込み時に
<CUT=X10-150-Y40-300>Picture/AAA.jpg」と指定すると、
画像「AAA.jpg」から、X座標10~150ピクセル、
Y座標40~300ピクセルの範囲だけ切り出して表示することができます。


●【ピクチャ】表示する基準位置として「中央上」と「中央下」を新たに実装。

ピクチャ周りに新しい基準座標を入れるのは超面倒だったので
億劫に思ってましたが、あれば私も絶対使うので、とうとう入れさせていただきました。


●【変数操作+】「ピクチャ番号X」の「マウスカーソル重なってる?(1=YES)」機能において、
角度の付いたピクチャでも重なり判定をほぼ正確に取れるよう修正。


斜めになったカードをマウスで選択するときも安心です。
といいますか、まさに『片道勇者2』でその用途で必要になったので搭載しました。


●【ピクチャ】通常ピクチャの「角度」を0以外にした場合でも
縦横の拡大率が異なる状態を維持できるように修正。


なお、文字列ピクチャは今回の修正ですでに
縦横の長さが異なる場合の角度変更が可能です。



【Game.exeの基本性能向上】

●【イベント処理速度】 アルゴリズム改善とプログラム環境の更新により、
コモンイベント内のイベントコマンド処理が大幅に高速化されました。


組み方にもよりますが、一般的な処理ならば
コモンイベント内で平均で従来の2~4倍の速度で
イベント処理が行えるようになるようです。
『ドラゴノーカ』というゲームのSwitch移植時に最適化をがんばった分で最大2倍、
VisualStudioを2003から2022に変えた分で素で2倍くらいになっているようです。


特に、コモンイベント内での「ループと基本的な変数操作」が段違いに速くなりました!

【高速化実例】
コモンイベント内で3万回ループに「Cself0 = 0」を10個入れた、
だいたい30数万回のコマンド処理を毎フレーム実行したときのイベント処理時間が、
ウディタ開発者の環境で

Ver2.294 約36ms → Ver3.00 約1.5ms (20倍以上)

にまで削減できました。
C++ソースコード上では関数1個も読んでない
最適化済みループを実行しているとはいえ速すぎる!
(コンパイル環境変えただけで元の10倍!)

とにかく、コモンイベント内での「変数操作」や「ループ」の処理が
もしかしたらほぼ「無」近くの負荷になっているかもなので、
うまく作ればシミュレーター系のゲームも動かしやすくなると思います。



●【描画速度】 描画速度が平均2倍ほどになりました。

他の人の環境だとどうなるか分かりませんが、
これもコンパイル環境の更新によって
従来のおおよそ半分程度の描画時間になっているようです。


●【ゲーム起動】ゲームの起動を高速化しました。

作者の環境にて、Data.wolf暗号化したサンプルゲームの初期起動時間が、
従来 2.6秒 → 最新版 1.5秒  くらいに早くなりました。

実はプロ版ウディタに、起動時の真っ暗画面の時点で画像とローディングゲージを
表示するおまけ機能を入れようかなと思っていたのですがほぼいらないかも……。
いちおう、入れるだけ入れる予定です。



という感じで、実用的な強化や、より便利になる強化が複数おこなわれています!

特に「ピクチャの切り出し機能」は、DBなどにファイル名として直接、
<CUT/X40-140/Y50-150>Picture/Face1.png
と入れるようにするだけでピクチャ処理時に
勝手に顔画像が一部切り出しして表示されるので、
従来のコモンイベント処理をほぼいじらずとも採用できるのが強力です。



【残りの作業】
ここからは仕上げ段階に入りますが、
いまだにまともに入れていないUnicode対応だけで
一ヶ月くらいかかりそうな予感がしているので、
あと一報、二報くらいしたらネタ切れになるかもしれません。
(いちおう、マスク機能などのご紹介もまだ残っています)

Unicode対応は地味で見せ所もない作業ですが、
今やっておくと海外展開など含めてあとあとずっとラクができる部分なので、
がんばれるだけがんばっていきます。
特にこれからも円安が続くようだと、海外にゲームを
輸出していくことも重要になっていきますしね!

そんなわけで、ここからも引き続きやれるペースで進めていきます!
 
■ 2022/10/01 (土)  ウディタ大規模アプデの機能 4 ■
【ウディタ大規模アップデートで搭載される機能 4】

引き続き大規模アップデートの機能紹介!


【ピクチャエフェクトに「変換」系エフェクトを追加!】

エフェクトの「ピクチャ」に「変換」系処理を追加しました。

この件は動画を作りましたのでこちらを見れば一目瞭然です!(2分の映像です)



これらは一瞬で不可逆な変換を行うもので、一度かけた「変換」エフェクトは
そのピクチャが消去されるまで持続します。
つまり、何度も「ぼかし」エフェクトを重ねたりすることができます。
使えるのは今のところ以下の通りです。

- 変換/色相彩度明度
 ピクチャの色の方向性・鮮やかさ・明るさを変化させます。

- 変換/モノトーン
ピクチャを指定した色相のモノトーンに変化させます。

- 変換/ぼかし
ピクチャをぼかします、一度にぼかせる量には限界があります。

- 変換/階調反転
ピクチャの色を反転します。2回やると元の色に戻ります

※マニアックですが「レベル補正」(指定範囲A1~A2の明るさ範囲を
指定範囲B1~B2の明るさ範囲に変換)もあったほうが
色々できるので入れようかなと考え中です。



●エフェクト機能がいっぱい増加!
上の分もエフェクトの追加ですが、その他にも便利そうなエフェクト機能が
いっぱい追加されました。

【ピクチャのエフェクト】

- 描画座標シフト2(角度・拡大率反映)
 → 拡大率や角度の影響を受ける「前」のXY座標をシフトさせます。
   ウディタ作者は、カードを複数のピクチャを重ねて作るときに便利でした。
 (文字や下地などを全て「同じ座標」の「中央」座標で重ねて出した後、
これでシフトさせて文字や絵などの位置合わせをすれば
回転・拡大しても1枚のカードとして動くように見えます)

- 不透明度補正[±]
- 角度補正[±]
- 拡大率補正[±]

このあたりは書いてある通りです。
いつも通り、縦横の拡大率が違うと角度補正は効きません。

- エフェクト全解除
ピクチャエフェクトを全解除できます(解除できるもののみ)。
まとめて消せるのがなかったので便利になります。

- ピクチャのコピー
パラメータや読み込んだ画像が全く同じピクチャを別IDにコピーします。
「カーソルを合わせたときだけ最前線に表示したい」ときなどに便利。

- ピクチャのID移動
指定したピクチャのIDを切り替えられます。
凝り始めるとこのコマンドと似た処理が求められる場面は多く、
従来のウディタでも「消去→別IDで表示」を一瞬で行うことで実現はできましたが、
これからはこのコマンド1つで実行できます。
処理を簡単化、軽量化するのに役立つと思います。



【キャラのエフェクト】

- 不透明度補正[±]
- キャラチップを変更
- 高さ変更
- 強制パターン上書[0:ナシ]

 キャラチップを「指定したパターン番号」の画像にして停止させます。パターン値はピクチャと同じ分け方です。
- 重ねキャラチップを変更
以前も紹介しましたが元のキャラチップに最大5枚分、別のキャラチップを重ねられます(つまり全6レイヤーで着せ替えが可能です)。



【エディタ周りの修正・改善】

●イベント編集ウィンドウの検索窓に「置換」機能が追加!
●マップイベントウィンドウに「検索」機能と「行数」機能が追加!

なぜかマップイベント側に付いてなかった検索機能を付けたり、
ついでに「あればいいのに」とたまに思うことが多い機能の
代表である「置換」機能を搭載しました。


●【マップ/コモンイベントウィンドウ】
検索ウィンドウの履歴文字列を10個まで保存するようになりました。
従来は特に履歴が保存されたりしておらず無意味でした。

なんだか履歴が保存できそうな検索欄の入力欄でしたが、
あれ自分でちゃんと実装しないと履歴が入らないんですよ。


●【コモンイベントウィンドウ】コモンイベント編集時、Ctrl+Rの
「直前のイベントに戻る」で前のイベントに戻ったとき、
「行数」も最後の位置に戻るように修正。
実質的にワンボタンで2つの場所を見比べながら作業ができます。


●【ゲームデータ作成】今後は暗号化バージョンが選択可能になります。
今は「Ver2.25~2.29」と「Ver3.00」だけに限られますが、
ゲームデータの暗号化バージョンを選べるようになります。
オンラインアップデートをする際、新旧の暗号化ファイルが混ざるとクラッシュするので、
古い暗号化方式のままにしたいときに利用できます。
(暗号化処理は定期的に新しいものを追加しています)

●【ゲーム基本設定】 「MIDIの再生方式」に
「MIDI音源を使わない[GuruguruSMF.dllも不要に]」を追加しました。
これを選択していると、ゲームデータの作成時にも
GuruguruSMF.dllがコピーされなくなり、
起動時に「GuruguruSMF.dllがないよ」という警告が出なくなります。
さすがに今の時代になるとMIDIを使わない方もいらっしゃいますからね!



【ゲーム側の改善点】

●【座標取得】イベントコマンドで得られる「主人公」の座標が正確になるよう修正しました。
 たとえば【変数操作+】による「主人公」の「画面X・Y座標」などです。
 おそらくスクロール値も正確になっていると思われます。
 
→ 従来は「1フレーム前の座標値」が取得されていたため、主人公のキャラチップにピクチャを重ねようとしてもどうやっても1フレーム分ズレる現象がありました。
 これは従来、「イベント後に主人公のキー入力や位置情報が更新されていたため」で、キー入力と位置情報を分離し、イベント前に位置情報だけ更新する形にしました。

→ 処理順が変わった都合上、キー入力による「主人公」の移動が動き始めの1フレームだけ遅れることになるので、1フレームしか猶予のない逃走ゲームなどはVer3.00への更新によってクリア不能になる場合がございます。
 過去の挙動に戻したい場合は、「ゲーム基本設定」の「Game.exe 動作バージョン調整」で「Ver2.29時点の挙動で動作」に切り替えることで対応できます。


●【エフェクト】キャラ・ピクチャのシェイク回数として10万回以上を指定すると「無限回」になるよう修正
正直ここまでの数値を入れるときは無限にしたいときの方が多いので、無限回になるようにしました。

●【エラー】 緑帯エラーの表示中にF12リセット、あるいは
F11更新(まだF11はクラッシュしやすいです!)できるように修正。
緑帯ループに入ったときにリセットできなくて面倒臭かったので!

●【ピクチャ表示一覧】テストプレイ中、「Shift押しながらF7」を押すことで
「マウスカーソルが重なっているピクチャ」だけを
「ピクチャ表示一覧」に表示できるよう修正。

たくさんのピクチャがあっても、指示したところだけの情報を得やすくなります。
ついでに、最後まで見ないと終われなかったのを
「Ctrlキー」を押せば途中でも中断できるよう修正。





今回ご紹介するのは以上の通り!
他にもまだ色々ありますが徐々にご紹介していきます。

リリース時期ですが、色々やってみた感じ、下手すると残る作業の中で
一番大きい「Unicode対応」だけで1ヶ月くらいかかるかもしれない可能性が
出ているので、10月中のリリースは怪しい感じです。
(直す場所が最低でも4000箇所以上あります)

どうしても今年中が難しくなりそうなら
「Game.exeとEditor.exeの一部」だけの
半端なUnicode対応で一旦区切ることも予定しています。
文字コード周りは徐々に変えるということができないので、
できればこの機会に重要箇所だけでも一気にやってしまいたいと考えています。

(なお半端なUnicode対応にするとどうなるかというと、
「エディタで中国語を入れてもイベントコマンド欄の中国語だけ文字化けする」感じになります。
ただ、文字化けするだけで入力自体はできるようになるので、従来よりは一歩進みます。
なんせ従来だと中国語の入力すらできませんでしたからね!)


という感じで、引き続きやれる速度で作業を進めていきます!