2月に入って休みゼロ状態が続いているのでいい加減何かしたくなった。

とりあえず部屋が乾いていて喉が痛くなるので、千石電商でM5Stack用温湿度気圧センサユニット Ver. 3(ENV Ⅲ)を買ってきた。M5Stackにつなげて、Groveでつないで公式のスケッチを動かしたら特に問題なく温度・湿度・気圧を表示できた。電池状態が分からないと厳しいので電池も%表示してこんな感じ。

今日は雨とか雪とかが降っているので湿度高めだけど、平均的には35%くらい。これは喉が痛くなる。次は加湿器を作らないと。

Outlook.comのpostmasterからUndeliverableメールが届いた。いつものspamとはちょっと毛色が違うので調査。

結論としては、攻撃者がfrom詐称してdenasu.comからhotmailのアドレス宛にメールを出して、メールボックスフルでエラーになり、denasu.comに返ってきているっぽい。サーバのSMTPログを見ても、普通にOutlook.comからエラーメールがローカルアドレスに送信されているだけなので特に問題なし。

まあ、denasu.comからSPAMメールが行くように見えるのでイヤな感じではあるが、うちのサーバは関与していないのでどうしようもない。

念のためオープンリレーになっていないかチェック。最近チェックサイトが消えて行っているという話だけどいくつか見つかったので試してみたところちゃんとリレーは拒否されていた。

そろそろセキュリティ強化のために新しくサーバ借りて、各サービスをコンテナ化しようとは思っている。けど開発優先で時間が・・・。

ずっと表向きの職業が忙しいのだが、Typing Online(仮)をなんとか進めている。早いところゲーム製作一本に絞りたい。

タイトルはひとまずTyping Field Onlineにしてみた。タイピングが全ての空間みたいな。

そしてワードは自動生成。Weather Typingのときもディープラーニングによる自動生成を入れてみたけど、今回はそれをメインにするのでいろいろ改善してみた。最終的に、日本語と英語で、ウェザタイの文章っぽいフレーズができるようになったのでこういう感じに。

あとはCPUのAIをちゃんと作り込んで、攻撃アイテムを持ってなければアイテム探し、持っていればプレイヤーを探して攻撃、みたいにしたので一人プレーがちゃんとできるようになった。

てことでプレイしてみたけど、これは結構面白いと思う。アイテム運があったり、相手の隙を突いて攻撃、相殺みたいなウェザタイにはない戦い方もできるし。複数の対人対戦やってみたい。

ただ3D酔いしやすいかな。眼が疲れているのか判断が難しいけど。そのあたりのガイドラインを調べるか。

Twitterに載せたのでTyping Online(仮)の進捗をこちらにも。細々と開発は進めていて、キャラクターカスタマイズとかBGMを調達したり足音を作ったりしてみた。

ゲームシステム的には、入力の相殺を入れることで、相手の入力をキャンセルすることで接戦状態を作り出したり、Comboやワードの難易度で攻撃力を変えたりルールに工夫をしてみたところ、割と面白くなった気がする。下の動画では最初から無限ワードを持ってるけど、最初は何も持っていない状態にすればもう少し駆け引きが作れるかな。

あとは、ウェザタイとは違って途中参加をOKにしてみた。こう言うゲームだと一斉参加で誰が最後まで生き残るか、みたいなルールが普通っぽい気もするが、なかなか人数が集まらないはずなので、一人でCPU戦をしつつ誰かが来るのを待てる方がいいかな、と。部屋を作れるようにすれば大会モードも可能だろうし。

この後は、CPUのAIを作り込んで、ワードやアイテムを一通り用意する予定。分かっているバグが30個くらいあるのでテストプレイするにはまだしばらくかかるけど。

かなり前に買った初代?Boogie Board、電池を替えても内容が消えなくなってしまった。新型を買おうと思ったんだけど、ちょっと前にどこかのヨドバシで見たPLUS Kaite2が気になっていたので買ってみた。何かメーカーのページ見ると新型出てるけど。。。

Kaite2は簡単に言うと「せんせい」。磁気を使ったボードで、白地に黒、電池なしで細い線が書けるので、Boogie Boardの欠点を全て解決しているように感じる。もうちょっと使い続けないと分からないけどとりあえずは良い感じ。

うちは1Fなので洗濯機+独立した乾燥機を使っているのだが、最近ガタガタうるさくなってきたので新しいのに換装。家に人が入ることが久しぶりなので、洗濯機の間を大掃除して、邪魔なものを別の部屋に移動して待機。ヨドバ?メーカー?の技術者の人が来て15分くらいで入れ替えて去って行った。技術者はかっこいいですね。

乾燥機は5万円くらいか。前のは12年くらい使ってたから、週100円いかないくらい。電気代を合わせてもコインランドリーより全然安い。

コロナでしばらく止まっていたが、行くなら今しかないということで、いつの間にか追加されたヨドバシ甲府、最後のヨドバシ新潟へ行って全24店舗制覇してきた。

ヨドバシカメラといえばみんな知ってる全国展開している家電量販店。店員さんの知識量豊富が特徴のお店ですね。

元々、千葉、横浜、川崎、アキバにはよく行ってたけど、本格的に巡礼を始めたのは2018年。一時的に関西に住んでいたときに梅田京都へ行って、そういえば昔ヨドバシ札幌に行ったことがあったのを思い出し、全店制覇挑戦へ。関西へいる間に名古屋、博多、関東へ帰ってから改めて関東近辺と北を攻略。コロナでしばらく止まっていたが、ようやく完了。

ネットを探してみると全店制覇しようとしていた方とか制覇した報告とかはあるので、それなりにやっている人もいるのかな。甲府は最近できたので甲府含めて制覇した人は少ないかも?

ちなみに上の絵の札幌はかなり前に行ったので写真がなかった。取り直しに行ける場所でもないので手書きで。

一応書いておかないといけなさそうなので、コロナ後は感染症対策に考慮した上で行っています。まあ、普段一人暮らし+リモートワークで、電車が空いている時間にふらっと新幹線に乗ってヨドバシに行ってそのまま新幹線で帰ってくるわけで、だいぶリスクは低いかと。

夏休み以降ついに作業時間がとれたので開発を再開。もうそろそろこっち一本に専念したいところ。

で、UnityのAIエンジンであるBarracudaが2.2.1になっていたので試してみたところ、以前の日記で書いていた問題が解決した。修正ソースコードを見てもズバリここが直っていたわけではなく、いろんなところが直っていてよく分からないが、「Fixed GPU Flatten when channel order is NHWC」この辺りの修正なんだろうか。ともあれこれでBarracudaのソースコードに自力でパッチを当てなくてもよくなった。

もう一つ修正待ちのXamarin Formsは5.0.1が出る気配はない。5.0.0だとWPFのフォントが文字化けしてしまうのでウェザタイのバージョンアップもできないまま。

表向きの仕事が忙しすぎて7月日記更新できなかった。一応細々実装を進めてはいて、夏休みを全て使ってバグ取りをしていた。

クオリティはおいておいて、システムはだいたいこんな感じかな。フィールド上のワードとかアイテムを取得して、使うときはタイピングで呪文詠唱。

あとは、いろいろワードとアイテムを揃えて、キャラカスタマイズとか総打鍵数カウントとか、エフェクトをまともに実装して、SEとか音楽とか作って、カスタムキーボードスキンとか追加すれば完成かな。・・・完成まで何年かかるんだろう。

Warriors of Typing S3 -夏の陣- の配信を見ていた。一通り動いてはいるのだが、やっぱりいろいろ直したいところがありますね。

実はXamarin 5.0.0にアップデートしたらカスタムフォントが使えなくなってしまい、5.0.1で直るらしいのだが、まだまだ時間がかかるようでウェザタイも更新できないという状況だったりする。このままMAUIになってしまうのだろうか・・・。今更Unityにするのは辛いし。

で、Twitterで検索しているとWarriors of Typing以外にも最近ウェザタイを扱っている方が何人かいる模様。今のウェザタイは20年分のしがらみがいろいろとあって分かりにくい箇所が多いですよね。ワード1とワード4って何が違うんだ、とか。

ワード自動生成を試している動画もあったけど、別件でいろいろ問題が見つかっていて、打てない文字があったり不適切な単語が混じっていたりする。この辺も直したいんだけどいつになるかなあ。

タイピングオンライン(仮)。なんとなくキーボードを使った呪文詠唱戦みたいなコンセプトにすることが決まったので、少しづつ世界観を作り込んでいかないと。

てことで手始めに「Unityゲームエフェクト入門」を読みつつエフェクトの練習を始める。本に載っていたほぼそのままのやつで以下のような感じになった。

The Typing of the DeadはThe House of the Deadの派生なのでキーボードから弾を撃つ感じだったけど、魔法戦だとこんな感じかなあ。これだけでも割と変わりますね。効果音とか舞台設定がコンセプトと合ってないのでいまいちいいのかどうだか分からない感はあるけど、いい感じのバカっぽさはある。

タイピングオンライン(仮)の進捗。

前回までやっていた「タイピングして相手のワードを打つ」というルールだと全然面白くなかったので、ゲームデザインの本を読みあさりつつずっとルールを考えている。

で、少しずつ面白くなりかけてるバージョン。ワードの種類をいくつか用意して、自分が宣言したワードを打つと相手にダメージが入るようにしてみた。自分が打ち終わる前に相手がワードを宣言して打ち終わるとダメージは入らない。多少かけひき、戦略が生まれると思うんだけど。まだ単調な気もするので、さらにジャンケン要素が入るともっと面白くなりそうかな。ただCPU戦だといまいちどう戦うのがよいのか分からないので、早く対人戦をやってみたいところ。やってみたいですよ、ねえ。

とりあえずワードは「単語」「短文」「文章」を選んで、長いワードを打ち終われば大きなダメージが入るようにしている。早い人相手でも単語をたくさん打てばダメージを入れられるわけだけど、そうなると泥仕合になったりして、どっちが勝つか分からなくなるかな。当然ノーミスコンボとかあるだろうし。あとは、数値多めワードとか、カタカナ多めワードとか、入力困難ワードとか、アイテムで取れるようにするつもり。ウェザタイでワード自動生成とワード難易度判定を研究したからこそ可能な話。

デバッグ版だとディープラーニングが結構遅いので動画がカクカクしてるけど、この辺は調整次第でなんとかなりそうかな。

掲示板でウェザタイがM1 Macで動かないという話があり、M1 Macbook Airを買ってみた。下取りを利用したら5万円で同スペック以上になったんだけど、Intel Macのテスト環境がなくなった。

で、調査をしてみたが、そもそもの原因はネイティブCライブラリがIntelだから、というのはその通りだったのだが、Apple SiliconサポートしようにもXamarinがM1ビルドに対応していない。ネイティブCライブラリを使わなければRosetta上で動くのだが。

なので、M1に対応するとしたらネイティブCライブラリを使わないようにする必要がある。まだ時間がかかりそう。

【視聴者参加型】即打!タイピング勝負!【鈴木勝/にじさんじ】を視聴。配信者が視聴者とWeather Typingで対戦する企画。第4回目くらいですかね。いつも使って頂いてありがたい。そういえば打鍵王も隔年開催という噂が。

やっぱりワードの組合せが面白くていつまでも飽きないのがいいですね。完全自動生成でもこのくらい面白くなればいいんだけど。

対戦について。我慢できず自分もこっそり参加してみたけど楽しかった。2ポイントしかとれなかったけど。同じくらいのレベルの人と対戦するのが一番面白い。ので、今作っているやつはアイテムとかコンボで何かを溜めるとかそういうのを考えているけど結構むずい。

それはおいておいて課題をメモ。

  • グラフで数千kpmになっていることが。昔たにごんさんがレベル57相当を出して修正したんだけどまだ何かあるのか→かり~さんから、ラグがあるときに1フレームで数文字打って次の問題へいった場合という情報をもらいました。
  • 「ゲームキーを毎回変更する」オプションはゲーム終了ごとに変更するという意味。ゲーム中には変更できない
  • 誰かの反応がなくなった場合などホスト側で強制終了したい。現状は全員ESCがいるのでデッドロック
  • 最大人数を制限しているとき、同時にアクセスしすぎると最大人数を超えてしまう→8人はサーバで制限しているので超えないが、それ未満はゲーム毎に違うのでホストからサーバへ通知している。排他制御がうまくいっていない。
  • 対戦開始画面で名前が黒くなってしまうことがある。ゲーム開始すると色が出る。
  • スマホ vs PC。実際対戦しているのは初めて見たけど、通信環境的に厳しそうだった。ワード取得後の判定は全員の結果を待つので、スマホの人がボトルネックになって遅れることが結構あった。遅延が大きいのかパケットが詰まってしまうのかは不明。

ウェザタイ4.1ではディープラーニングを使ったワード自動生成を実装した。で、Unityで作っているタイピングソフトでは基本的にワードは自動生成にしたいな、ということで調査。

PyTorch+BarracudaでLSTM

UnityではBarracudaというエンジンを使ってディープラーニングを動かせる。多分例によって他で学習したものを使えるだけ。つまりPythonなどで作ったモデルをONNXに変換するとUnityでも使えるようになるのだが、前回の日記のようにkerasではTensorFlow2が使えなかったりして変換ができなかった。PyTorchも変換したモデルをUnity上に持ってくるとエラーになっていたのだが、Barracudaのバージョンを1.3.3(実験版)にすると読み込んでくれた。

で、Embedded層、LSTM層を入れたモデルを動かしてみたのだが、どうも一箇所おかしな部分がある。BarracudaReferenceCPU.csのLSTM関数で、入力テンソルの形が(ワードベクトル, バッチ)になっているぽくて、LTSMの各ゲートの重みテンソル(ワードベクトル, 隠れ状態)との内積を取ろうとして行列の型エラーになってしまう。具体的にはここ。

var i_mad_w = _(Add(new[] { _(MatMul(X_sequence, false, W[g_i], false)), Wb[g_i] }));
var j_mad_w = _(Add(new[] { _(MatMul(X_sequence, false, W[g_j], false)), Wb[g_j] }));
var f_mad_w = _(Add(new[] { _(MatMul(X_sequence, false, W[g_f], false)), Wb[g_f] }));
var o_mad_w = _(Add(new[] { _(MatMul(X_sequence, false, W[g_o], false)), Wb[g_o] }));

MatMul(行列積)の第2引数が転置フラグになっていて、ここをtrueにするとうまくいく。使い方が悪いんだとは思うけど、外側からなんとかできるようなものではなさそうなのでPyTorchとの相性なのかなあ。

他にも、元々はモデルの最後に出力ワードの確率を取るためにsoftmaxを入れていたのだが、そっちもreshapeでなぜか列が増えてしまって型エラーになったり。こっちはC#側で計算すればいいので問題はないけど。

結果

こんな感じ。まだデバッグ版でCPU使用だけど、生成の速度は1文で1秒未満くらいかな。日本語の出来としては・・・学習が15分くらいなので、もう少し学習すればよくなるかも。

まとめ

Barracudaを実験版にしてさらにオープンソースに上記の修正をすると動くのだが、Unityライセンスを調べないと公開はできないかなあ。公開までにリリース版が出てバグ?が修正されているといいなあ。

なお、今回Barracudaをデバッグしつつ、LSTMを自分で実装したものと実行内容を比較してようやく問題が判明した(なんとなく転置がいるのはすぐ分かったけど、デバッグしてようやく理由が分かった)のだが、やっぱり一回自分で実装しているから分かる部分もある。ライブラリの使い方を知っているだけじゃなくて中身も知ってる方がいい。

ができないっていう話だけど。

ウェザタイのワード自動生成をUnityでも動かせるようにしたいので検討しているのだが、うまい方法がない。

UnityにBarracudaという機能があって、ニューラルネットのパラメータの標準的なフォーマットONNXが使えるらしい。ウェザタイのワード自動生成では、embed層、LSTM層、全結合層のスタンダードな構成なのでPythonの深層学習ライブラリで作るなら割と簡単。

で、まずはkerasのLSTMを使って日本語生成してみた。それ自体はうまくいったのだが、ONNXへの変換でつまる。keras2onnxではそもそもTensorflow2の機能を使っているとダメのようで、disable_v2_behaviorをやってみたりしたが、うまくいかない。

次にPyTorchを試す。こちらも日本語生成自体はうまくいった。ONNX変換もダミーインプットにちょっと試行錯誤がいるが、torch.onnx.exportで変換はできた。が、Unityにもっていくとインポートができない。embedレイヤーが使っているインデックスをサポートしていないっぽい。

追記:Barracudaのプレビュー版にしたらインポートまではできた。

最後、C#で一から作ったライブラリも試してみる。ウェザタイで作ったやつは高速化のため、行列の積にAVXとかSSEとかのSIMD命令を使っているのだが、Unityはマルチプラットフォームなのでそのままは使えない。そういう場合はBurstコンパイラを使うことになるらしいのだが、いろいろ制限があるようで、InvalidOperationExceptionになってしまう。C#で行列の積を実装すればいいはいいのだが、現実的じゃない計算コストがかかってしまう。

てところでいずれも無理。UnityでLSTM動かしている人はまだいないのかな。Pythonで大量に文章を自動生成できるので、100万ワードくらい生成して配布すればまあいいのかもしれないけど。。。

最近ウェザタイに使うためにディープラーニング実装したり本読んだりしている。ニューラルネットを勉強してたときは脳とかけ離れているのでこれじゃあ脳を作るのは無理だな、と思ってたのが、結構面白いところまでいっているのが分かってきた。

プログラムで脳を作るのは子供の頃からの夢なのでずっと本読んだり考えたりしているのでちょっとだけメモ。

おそらく最初にキモになるのはエンコーダとデコーダで、外界の情報を主成分分析的に圧縮して、概念をベクトル化するところ。この辺りはいろいろ脳関係の本を読んでいると実際の脳でもやってそうな感じがする。たぶんニューラルネットで言う誤差逆伝播は実際にはなくて、ヘブ則と抑制性シナプスとよく分からない接続で解決しているはずなんだけど。

で、もう一つ重要なのが環境入力と動作の出力から報酬を予測するところで、こんな感じなのかな、って考えていたのはあるんだけど、最近勉強してたら出てきたディープラーニングを使った強化学習がまさにそういうことを言っている。ただ、世界に実際の身体があって生活しながら学習させないと高度な知性にはならないし、報酬を何段階にも動的に獲得していく必要があるはずなので、今の強化学習だけではダメな気はする。強化学習はそこを目指しているわけではないけど。

この辺り、いくらでも書くネタはあるけど、理解できるものにならないしただの妄想なので書いてこなかったところ。でもそろそろ何か書いていきたいなあ。例えば全身麻酔したとき、その間時間経過を感じずに一瞬で目覚める感覚になるわけだけど、それって脳が動いていない、つまり死んでいる状態を一時的に再現している、と。逆に死んだ後はそういう状態なわけで、時間経過も何もないことが分かる、とか。誰か意味分かりますかね。

土曜日にG検定を受検してみた。95%はできていると思うのでたぶん大丈夫だろう。久しぶりに試験勉強ぽいことをしてみたけど、選択式の試験はキーワードと意味を覚えるだけの表面的な勉強になるので、これ意味あるのかなあ、と思ってしまう。この後はE資格を受ければ良いんですかね。統計検定?

で、実際今やってるのはタイピングオンライン用の問題文章生成。ウェザタイではXamarinで動かすために行列計算からLSTMまで自力で実装したが、Unityではkeras使えそうな感じなのでそっちに移植中。

オンラインタイピングソフトの進捗。少し細かい実装をして最低限ゲームとして動くようになった。CPUをいくつか配置してタイピングでライフを奪っていく感じ。

実装としては、まだカスタマイズはできないけど、Advanced People Pack 2でカスタマイズしたキャラクターを使えるようになったり、Blenderで作ったキーボードと腕のモーションをUnityに取り入れてアニメーションさせてみたり、FL Studioで作った効果音を入れてみたり。いろいろベース部分を作ったので作り方には慣れてきた感じ。今は何故かCubaseで作った曲を流せるようにしている途中。

対戦は試してないけど一応動くようには作っているはず。ここからどうしようかな。

今更だけどDenasu Webサイトのスマホ対応をやってみた。Denasuサイトは1998年から運営していることになっているので、モダンな作りにするにはいろいろとめんどくさいなあと思ってたけど、いい加減やらないと、って感じ。
やってみると各HTMLにviewport

<meta name="viewport" content="width=device-width,initial-scale=1" />

を付けて、CSSで

@media screen and (max-width: 600px)

の中に小さい画面用のデザインを定義して、細かいところでは画像のmax-widthを100%にしたり、そのくらいでそれっぽくなった。

今更だけどDenasuトップページにコンセプトを追記した。

作者の好きなことをソフトウェアにしているので、作者自身がユーザです。また、趣味の開発であり、広告も利益も目指していません。ユーザとして欲しい機能、使いやすさを目指しています。

フリーソフトだからできることがある、というだけで、商用ソフトウェアを否定するわけではない。

結局KPI、何を目標にするかによって結果が全然違うわけで。

例えばWWW。昔はユーザの相互情報共有を目指して有用なコンテンツがたくさんあった。その後商業利用が大多数になってKPIが利益になったので、ユーザが見づらくても広告を入れまくったり、SEO対策でどうでもいいページばかり増やす結果になった。

例えばテレビの報道。KPIは視聴率=スポンサー獲得なので、視聴者の利益とか日本を良くしたい悪くしたいという思想は特になくて、単に何でも批判して煽っていれば視聴率が取れるのでああいう風になっているだけ。

ソフトウェア。商用のソフトウェアの場合、どうしても利益を優先するので、誰かがほしがっているものを(自分は欲しくないのに)作ってあげることになる。なのでなかなかユーザ目線になるのは難しい。昔ながらのフリーソフトはKPIが自分が使いたいものを作る、なのでユーザの利益と直結しやすい。

ということで(今のところ)自分は他のことで十分収入を得ているので、Denasuは広告もなし、営利非営利関わらずフリーソフトとして使ってもらう、とうやり方にしている。

この話を書くなら今かな、ということで新タイピングソフトの構想を。

経緯

Realforce Typing Championshipから、タイピングが競技として話題になることも少し増えてきた。RTCは頂点を決めるものなので今のところWeather Typingを使って頂いているが、やっぱりもう少し派手な演出とか複雑なゲーム性とか、今時なタイピングソフトが欲しいところ。THE TYPING OF THE DEADは対戦向けではないし、そもそも公式リンクが何にもなくAmazonにリンクするくらい入手困難だし。

その辺りタイピングサミットくらいから考えていて、5年くらい前にウェザタイに戦略性を入れようと考えたりもしたけど、ウェザタイはガチなタイピング勝負がコンセプトなので運まかせとかアイテムとかとは相性が悪いし、ワードや入力方式などウェザタイの狭い枠組みでやっても地味なので検討を中断。

で、これとは別に3年前からウェザタイオフラインを考えていた。オフラインで集まってキーボードとモニターを肩から提げてみんなで赤外線で打ち合うというリアルTOD。赤外線通信部分は作ってもらったのでもうあるんだけど、ウェザタイの大改造が必要なのとキーボードを吊り下げる板とかモニタコストのハードルが高くて中断中。

で、1年くらい前にN高 ネット運動会で最近のオンラインゲーム(フォートナイトとか)を見て、みんなが欲しい、観たいタイピングソフトはこういうのなんだろうな、というので去年から試しに作り始めた。ウェザタイオフラインのオンライン版(?)の意味もあって、ソフトウェアはソフトウェアで別に作った方がデバッグが楽かな、というものある。

仕様

世界観はまだ定まってないけど、タイピングしないと生きていけない的なものなのかなあ。大規模サーバは作れないので、ウェザタイと同様のP2Pで10人くらいのバトルロイヤル。

地形やキャラクターをランダムに作ったりワードはAI自動生成にしたり、ランダム性を積極的に取り入れて飽きないように。ワードはウェザタイのAI自動生成をベースに。音楽も自動生成したいところではあるけど、さすがにフリー音源を使うかな。SEはウェザタイ以上のものを作れなかったので流用かな。

Advanced People Pack 2はキャラクターメイキングもできてすごく便利。

あとはウェザタイの枠組みを離れるならどんな工夫ができるか。例えば、ある文字アイテムを取ったらその文字を打ったときの攻撃力が高くなるとか、今から5分間、特定の文字の出現頻度が上がるとか、英語しか出ないとか。あとは普通にコンボボーナスとか。1対複数で囲むなんてのもやれば、ある程度強い人とも戦えるかな。

進捗

進捗。オンラインゲームの作りはウェザタイの仕組みが割とそのまま使えて、ローカルではリアルタイムに処理してリモート側もそれなりに補間して動きつつ完全同期させるのはできてきた。タイピングソフトとして必要な部品とか対戦サーバは当然あるし。

ここから独自処理を入れていくわけだけど、例によって一人で作っているので、いつ完成するかは・・・。数年レベルかも。こういうソフトが欲しいっていうことなので、ウェザタイとTODのいいとこ取りのいいソフトができるのなら誰かが先に作ってくれてもいい。Twitterを見てると、割とみんなこういうソフトが欲しい、作りたいと思っている人は多そうな感じ?

3Dオンラインゲーム版のタイピングソフトの進捗。2台のPCで起動して、互いにキャラを動かしてタイピングしあうところまではできた。まだカクカクするのはおいておいて、プレイしても特に面白くはない。このあとゲーム性を考えていく必要があるわけだが、むずい。アイデアはいくつかあるけど面白くなるのかはやってみないと分からない。

ゲームエンジンとしてはUnityを使ってるけど、オンラインゲームの開発むずくないですかね。ウェザタイは1台のPCで2つソフト起動してたけど、Unityだと2台PC起動して、ソースコード編集する度にGit経由でコード共有してるのですごくめんどい。

ウェザタイも今年で20年ということでリーフレットを作ってみた。

せっかくなので、印刷も。今は個人向けに小数でも印刷してくれるので便利。

オフ会や大会なんかがあれば配れるんだけど、今はそういうものできないのでとりあえず手元においておくしか。

なんかそろそろお金が増えそうな気がしたのでiPad Airを買ってみた。今まで第2世代iPadを使って週刊ASCIIを読んだりしていたのだが、ものすごく動作が重いので。

Apple Pencilも買ってみたが、iPadにくっつければ充電されるのか。Surfaceは単6電池だからそこは便利。

今あるのはメインSurface Book 2、持ち歩きSurface Pro 7、Mac開発用Mac Book Pro 2019、スマホXperia 1 II、テスト機第7世代iPod Touch、タブレット第4世代iPad Air、くらいか。あとKindle PaperwhiteとかSony Digital PaperとかOculus GOとか。開発者ってこのくらいは機器持ってるもの、ですよね。。。

プロeスポーツチーム「DetonatioN Gaming」による対戦動画 「Q・W・E・Rしか打てない人たち(DFM)でタイピング対決をしてみるとこうなる」が公開されている。少し前にメールで動画利用について問い合わせがあったもの。eスポーツとして認知度が上がるならどんどん使って欲しいところですね。

速度的には平均すると500くらいなので今の私でも勝てるくらい。ということは、これからeスポーツタイピングが流行るとして、今から頑張れば誰でも活躍できるということですね。動画を見る感じ、プレイだけでなくトーク力も重要に見えるけど。

てな感じで、やはり見た目が地味ですね。今作っている3Dのタイピングソフトの完成が臨まれる。

進捗メモ。CPU戦が動くようになった。ウェザタイの通信プロトコルをほぼそのまま流用しているので、対戦モードにすればそのまま対戦もできると思う。けど、課題が山積み。

まず文字が読めない。自分のキャラクターは非表示にして、自分のワードは画面上のどこか別の場所に表示しないと。あとワードは頭の上がいいかも?

移動モードとタイピングモードの切り替えをTabでやってるんだけど、やっぱりめんどくさい。やっぱりマウスで視点移動の方がいいかな。

まだ演出が何も入ってない状態ではあるけど、面白くするにはいろいろ必要。ウェザタイの名前にはしないつもりなので、ガチタイピングではなく、例えば、弱い人でもあらかじめたくさん打ち溜めてシールドをはっておけば強い人に勝てるとか、複数人で一人を囲むとか、後ろから打つとか、どこかを打つとアイテムが出るとか、考えられるのはそんなところ?

システム的には、ウェザタイはサーバはあるけど単なる中継なので基本はP2Pの形。これだとプレイヤーの途中参加が困難。そうなると何人か揃ったら開始、誰かが生き残ったら終了みたいな形になる。人がいなくてもある程度遊べるようにするには、サーバクライアント型にして、サーバにゲーム状態を保存して、CPUをたくさん配置する、とかになるけど、それだとサーバの負荷が高いかなあ。

Unityの練習に作っているやつ。

地形はZENRIN City Asset SeriesのJapanese Otaku City、モデルデータはAdvanced People Pack 2を使ってみた。

データを持ってきて配置して少しコードを入れるだけでここまでできてしまうのか。

最近Amazonを騙るメールがよく来るのだが、SPAMの品質として、これはまあまあ及第点かな。特に、時間を空けて何度か送ってきて、「支払い案内」「支払期限がきた」「アカウント停止するよ」「アカウント停止しました」みたいになっているのが工夫されていて素晴らしい。送信元もAmazonの代理で送信みたいになっててグッド。まあ、このメールアドレスでAmazon契約してないんだけど。。。

正直、他のSPAMメールは日本語おかしかったり送信元すらいじってなかったり、いきなり「RE:」で来たり、もう少し工夫しろよ、ってのばっかりだったのでようやく被害者目線で考えるようになってきたか、って感じ。もう一歩。

ウェザタイオフラインのオンライン版のためにUnityを勉強中。思ったのは、これってWorld Testerでやりたかったことじゃん、という。

World Testerは物理シミュレーションソフトだけど、定義ファイルでフィールドや物体を自由に作って配置することができる。あとは定義ファイルじゃなく3D空間で自由に配置できるといいんだけどな、と思いつつ放置していた。これができて、スクリプトを追加できればUnityになる(ならない)。

とりあえず地形を生成して、歩き回るところまではできた。

Weather Typing Android版4.2.1を公開。Android対応で、ロビー等にプラットフォームを表示させるようにしたので他よりバージョンを上げている。Windows版もテストしたらバージョンアップ予定。

Xamarin Android。Windows版に比べてユーザも多いからそこまでひどいバグはない。けど、一つ、画面下のナビゲーションバーの戻るボタンでアプリを終わる(Sleep)と、そのまま次回起動したときにNavigationPageのナビゲーションで落ちる。まあ前のバージョンからそうなんだけど。

Xamarinのソースまで追ってみたけど、Xamarin側のページスタックとネイティブ側のページスタックがずれてしまうことまでしか分からず。仕方がないので戻るボタンで終わった場合、Sleepでなく強制終了するようにした。

あとは、前、x86版をビルドすると何故かx64版も一緒に同梱されていてしまったが、今回はx86版だけが同梱されるようになった。2つを統合できる気もしないでもないが、直ったのかどうなのか調べるのも面倒なのでまだ2つのパッケージのまま。