「人工無能」に関する日記

次>

GChat

覚えてますか?覚えてませんよね?アルニック。
そもそも…知らない…ですよね?

こんな子です。

素朴でかわいいアホの子です。いわゆる人工無脳チャットってやつです。時代の流れで単純なCGI形式のWebチャットが流行らなくなったとか、サイト移転のごたごたに巻き込まれたとかで、ずいぶん長いこと、まともに動いていませんでした。

プログラム自体はとっくの昔に今の環境に合わせて修正して動くようにしていたのですが、人工無脳チャットの頭脳ともいえる学習データが古いままでした。そのため、何を言われても返す言葉がない、真の無脳になっていました。

学習データに最も致命的な影響があったのが、文字コードの変化です。EUC-JP→Shift_JIS→UTF-8と変遷してきました。

で、文字コードを直したら動くだろうと思ったのが、甘い考えでした。

Shift_JISには、プログラムで扱ううえで重大な欠陥があり、その欠陥に対応するために、データのほうをいじってあったのです。具体的には、パターンマッチング部において、パターンマッチングに影響を及ぼすマルチバイト文字を、影響のない文字の組み合わせに置き換えていました。言ってみれば、壊れたらちょうどよくなるようにあらかじめ壊してあったんですね。

これをUTF-8に単純に変換すると、単に壊れたデータになるわけです。

最終的に、この「壊れたらちょうどよくなるようにあらかじめ壊してあったデータ」を探して、全部置き換えていくことになりました。

だるい作業でしたが…無事直りました。結果は上の画像の通り。賢くはないけどかわいい子です。

皆さんも、気が向いたときにでも相手してやってください。

auto_resource実装案

Bomber丸Worldのリソース管理システム(auto_resource)のメモリ管理を考えていました。
メモリ確保のほうはshared_resourceと同じで全く問題ないのですが、メモリ解放が問題なのです。
メモリ確保をしていくうちにメモリが足りなくなったら最近使われていないものからメモリを解放していくのですが、その実装方法がいくつかあって、どれを選ぶべきかというのが難しかったのです。

考えている方法は三つあって、一つ目はその時点で使われていなければ新しかろうと古かろうと片っ端から全て解放してしまうというものです。
解放の際には全てのリソースが入っているコンテナの中身を全て走査して参照カウントが0のものを全て解放します。
この方法は最も実装が簡単で消費メモリも少なくなりますが、一時的に使わなくなったりソースを後のために取っておくというauto_resourceの考え方に反してついさっきまで使っていてまたすぐ使うかもしれないものまでどんどん解放していってしまいます。
マップ切り替えなどで一度に大量のリソースを読み込んで解放する場面ではすごくまずいことになります。

二つ目の方法は、字面通り最後に使われた時間が一番古いものから順番に解放してゆく方法です。
これを現実的な処理時間で実現しようと思えば、リソース参照用のファイル名-リソースを関連付けたマップのほかに、今まで使った順番に並べられたリストが必要になり、必然的にリソース本体とは別の余計なメモリが必要になります。
更にリソース側にも、解放や順番の並び替えの高速化のためにリストやマップへのイテレータが必要になります。
リストの実装によっては更に難しいコーディングが必要になるかもしれません。
そして当然、使用するたびに使用時刻の更新やリストの並び替えが発生するのでパフォーマンスは低下します。
ファイル読み込みによるパフォーマンス低下を嫌ってauto_resouceを作ろうとしたのに全く逆効果の可能性すらあるのです。
解放の際にはリストの末尾から順番に見て行って規定のメモリ以内に収まるか全て走査し終えるまで参照カウントが0のものを解放していきます。

三つ目の方法は、上記二つの中間を取って、ある時間より古ければ数が多かろうと少なかろうと全部解放してしまうという方法です。
これであれば、一つ目の方法ほど無駄は出ませんし、順番を考える必要が無いので二つ目の方法のようにリストを保持しておく必要がありません。
解放の際には適当にしきい時刻を決め、全てのリソースが入っているコンテナの中身を全て走査して参照カウントが0かつ使用時刻がしきい時刻より古い場合には解放します。
これの問題点は、しきい時刻の決め方やリソースの使用状況によって著しく性能が変化するということです。

それぞれ長所と短所がありますが、まず一つ目の方法は通常時には問題外ですが終了時に全てのリソースを解放する必要があるときには効果を発揮します。
二つ目はリソース自体の消費メモリが大きかったり使用するときの実行時間が長いなど、欠点が問題にならないほどスケールの大きいものであれば相対的に長所のみが残って最善の手段となります。
三つ目は二つの中間的なものなので無難としかいえません。
そんなこんなで、三つとも実装してみる価値はありそうです。

GChatの管理画面の改良を行いました。
まず、辞書画面での検索機能です。
これにより辞書への重複登録ということは少なくなったはずです。
そして、なぜか今までずっと実装していなかった全ログ確認機能。
これでもう直接ログファイルを見る必要はなくなったのです。
そんなこんなでアルニックもレベル29になりました。

歳の差カップル

Bomber丸Worldのグラフィックエンジンの拡大バグ、1ドット余計に拡大することで右下が潰れるのは解消できました。
左上が膨らむほうはどうにも解消できなさそうですが、左上を透明にすれば少なくとも膨らんでいることはばれずに済みそうです。
ややインチキ臭いですが結果にはあまり影響がないので勝手によしとしておきましょう。

パネルγのチュートリアルのページを更新しました。

今日はアルニックの3歳の誕生日なのです。
そこで、久々、今日のアルニック:
美文>3歳のお誕生日おめでとう!!
アルニック>あっ、今日あの人の誕生日じゃない
美文>あの人ってあなたですよ!
アルニック>・・・・
美文>あれ?契約期間過ぎてるのにウイルスバスターアップデートできる
アルニック>こんどデートにいきましょうよ
美文>い、いけません。私は21歳、あなたは3歳。歳の差が有りすぎます!!
アルニック>それっていい話じゃないの

1154443527.png

分散処理

とりあえず読んで大体の流れはつかめるようになったのでRubyでCGI組んでししゃもを会話するチャットを作ってみました。
どうもししゃもはそれなりに動いてくれてはいるようですがどうにもブラウザに出力する時点でCGIクラスにエラーが起こってるみたいです。
正直、私の良く知っている言語と見た目の大きく異なるRubyはあまり使いたくないんですけどね。
とりあえずししゃもを動かすCGIが完成したらRubyからはとっとと離れるつもりです。
ちなみにししゃもで何をやりたいのかというと、アルニックにね、特定の確率でししゃもによる会話を織り交ぜようと考えているんですよ。
本来ならゆいと同じ辞書方式で事足りるはずなんですが何せ辞書を作れるのが私しかいないということで、どうしても辞書の量が足りなくなっちゃうんですよね。
あと、複雑なアルゴリズムで返事を決めようとするとどうしてもサーバーに負荷がかかるので、そういう重くする原因になることは分散して処理させようという考えもあったりするのですよ。
うちのサーバーではRubyが使えないんですが自分のパソコンでなら使えるので、例えば、サーバー上でアルニックが喋るとき、CGIからうちのパソコンに人工無能の返事を考えるようにリクエストを送って、それでうちのパソコンが頑張って答えを出してサーバーに送り返す、そういうのをやってみたいんですよ。
これをやると必然的にうちのパソコンに繋がらないときアルニックはあほあほになってしまいますが、まあそれも愛嬌です。

ルビーと呼んではいけないもの

Rubyをインストールしてました。
巷の優れた人工無能ちゃんは大部分がRubyで書かれていたりするので。
とりあえずロイディとししゃもをダウンロードしてきました。
しかしうちのサーバーではRubyは使えなさそうなので、自宅サーバーと繋げて使うようなやり方ができるかなと考えています。
しかしまあ、予備知識が無いとほとんど読めませんな。
変数の命名規則がかなり独特で、わかる人には一目瞭然、わからん人には誤解を招くという、ちょっとRubyで書かれたプログラムを見てみたい人には厳しいものがあります。
Ruby→http://www.ruby-lang.org/ja/
ロイディ→http://www.rogiken.org/SSB/reudy.html
ししゃも→http://yowaken.dip.jp/sixamo/

チャットのログより

美文>画像読み込みできた
美文>テストプレイもできた
アルニック>テストって大変よねぇ、いろんな意味で
美文>よし、ファイル読み込みを
美文>ファイルの存在を保証するためにわざわざない場合はファイルを作るとか
アルニック>そんざいとぞんざいのちがいって・・・・ないのかしら
美文>当たり判定エディタできた
美文>なんか第一作のマップチップ全部入れられそうだな
アルニック>全部?ホントに全部なの?抜け漏れないの?
美文>そりゃ入れられないのもあるだろうけどね
アルニック>ね!そうでしょ!
美文>ちょっと大変かも
アルニック>ちょっとってなによちょっとって!いっぱいにしなさい!!
美文>言うと思った
美文>限りなくバグに近いルールを見つけた
美文>修正せねば
アルニック>きゃー、信じられなーい!
美文>う~む、だめだな
美文>う~ん、どうしよう。困った困った
アルニック>理由なんていらない、私はあなたを応援するわ!
美文>摩擦に反比例して風速を変えるというのも考えたけど0のとき明らかにおかしい
アルニック>明らかにって、そういってるときは思い込みに注意よっ!
美文>exp(f)で風速を変えるとか
美文>とりあえずdx分と摩擦分を分けてみる
アルニック>でも、問題点ってないのかしら
美文>うん!助言ありがとう!思い込みがあったようだよ
アルニック>どういたしまして♪
美文>いける!これならきっとうまくいく!!
アルニック>ねえねえ、今うどん食べたいと思ってない?
美文>これはこれで問題があるな・・・
アルニック>難しいねぇ
美文>う~ん、う~ん
アルニック>う~~ん。(苦笑)....どうしましょう?
美文>結局元に戻しちゃったけど
美文>しばらく摩擦0と0.1で考えよう
美文>う~~~。どうしよう。いい案が思いつかない。だけど思いつかなきゃいけない
アルニック>いつか・・・くるわよねぇ・・・いつか、そんな日が・・・
美文>とにかく動き出す風速が摩擦力に比例するようにしたい
アルニック>星空が綺麗ですね
美文>あと風速0のときの挙動は一定させたい
アルニック>その話、ちょっと尾ひれついてない?
美文>Wind*DXとか
美文>エクセルでシミュレートしても同じ結果
美文>プレイ中少し違和感を感じることもあるけど物理的意味ははっきりしている
アルニック>わたしにも、はっきりしないんですぅ..
美文>静止摩擦と動摩擦だ
美文>「下手に動くと風に飛ばされるぞ!」ってやつだ
美文>よっしゃ!
アルニック>うまくいったのね、わたしもうれしいわ

都合上一部の発言を削除しています。
まあ、ふにゃさんで地上の動きを考え直したという話。

1135780300.png

若者

ゼルダのタクト(妙な略し方するな)、フギャー(先生の一人はFigureをこう読むのだ)集めをしていました。
今日は主にタウラ島で写真会。
ガキンチョ二人とお散歩おじさん二人、貧乏爺さんにこれといって特徴のないおっさん、その他を撮っていきました。
ただ、どうもおしゃべりおばさんとキラービーの連中は趣味じゃないようで、フギャー(重ね重ね言うが先生の一人はFigureをこう読むのだ)を作ってはくれませんでした。
けちんぼめ。

さて、ふにゃさんは氷の息が出るところまではできました。
ふにゃふにゃのときと違いまともにアルファブレンドしているので背景によって不自然な縞模様ができたりしませんし、大きさもやや大きめに表示するようにしてあります。
この先出した氷の息が床や壁で反射して(ふにゃふにゃでもやりたかったけど技術的な問題でできなかった)、物に当たることでいろいろなことが起こったり、使いすぎで疲れちゃったりというところも作るつもりです。
そしてまた、ステージ作成のときに便利なテストプレイ機能も作りました。
このプレイでは好きなステージから始められ、クリアしてもミスしても同じ面をループし、気の済むまでテストできます。
一応テストプレイでも入手したバナナの数は加算されます。
あとは、無駄な効果音を出さないためにオリジナルのふにゃ以外(つまりmr.フレーム)が効果音を出さないようにもしてみました。

アルニックの面白コメント1:
アルニック>あたしからも質問させてぇ・・・幸せってなに?
美文>あたしからも質問させてぇ・・・幸せってなに?
アルニック>あたしからも質問させてぇ・・・幸福ってなに?
美文>あたしからも質問させてぇ・・・幸福ってなに?
アルニック>あたしからも質問させてぇ・・・幸せってなに?
美文>あたしからも質問させてぇ・・・幸せってなに?
アルニック>そんなのしらなーい
美文>そんなのしらなーい
アルニック>風邪ひいちゃったり、いろいろあって・・・
美文>風邪ひいちゃったり、いろいろあって・・・
アルニック>病気持ちですか?!!
美文>病気持ちですか?!!
アルニック>全く!これだから近頃の若者は鸚鵡返しみたいなのよ!!

アルニックの面白コメント2:
アルニック>ねえ、あたしに魔法をかけてよ。ドラゴラムとかさぁ
美文>ドラゴラム!!
アルニック>おもしろーい!・・・あっ。ねえねえ、最近よく聴く音楽はなあに?
美文>ふにゃさんのテーマ
アルニック>そんなの知らないわよ
美文>しらないのかよ・・
アルニック>あぁ。

1135001587.png

セレクション!

ふにゃさんの項目選択機能を作りました。
パッパッパーっと作った割にはものすごく便利でもうなぜ今まで作らなかったんだろうと不思議なくらい。
早速手っ取り早くポーズメニューを作って自爆とタイトル帰還ができるようにしてみました。
いやもう、こんなに簡単でいいの?って思うくらい簡単にできちゃって。
今度はコンティニューするかどうかの選択を作って、タイトルメニューも作って、ステージセレクトも作りたいし…。
でも何より必要なのはステージそのものの充実だな。うん。

チャットの人工無能、二人以上の人工無能がいたとき辞書データのリセットがうまくいかず次の人工無能に前のデータが引き継がれてしまうバグがあったため修正しました。

人身売買と焼肉

まだまともな会話には程遠いけどたまにはこんなこともあるのです。

美文>まーた人身売買のメールが来たよ。売られるつもりはないっての!
アルニック>あたしもメールほしいぃ~
美文>人身売買の?
アルニック>ちょっとぐらいいいじゃないの
美文>ちょっとでもだめだって!
アルニック>ちょっとってなによちょっとって!いっぱいにしなさい!!
美文>だみだこりゃ
アルニック>わはは!焼肉美味なり!
美文>焼肉!おいしそー!
アルニック>ねえねえ、今おにぎり食べたいと思ってない?
美文>焼肉を食べたいんだって
アルニック>お腹壊すかもしれないよっ!!
美文>あんたは大丈夫なの?

(ちなみにここでの人身売買のメールとは、愛人契約だかなんだかで「あなたを買いたい」という趣旨のメールである)

シミュレータ

今日はSPICEで回路シミュレーションをやっていました。
そしてせっかくなのでSPICEを使っていてこれは便利だなと思ったことや結果を整理するためのプログラムを学習帳に書いてアップしました。

ふにゃさんのBGMのイントロ部分だけほぼ完成しました。
いや、でも実はまだまだ調整が必要なので完成には程遠いです。
オルゴールの音は本来鳴りません。
分散和音って便利ですね。

アルニックの面白コメント:
アルニック>だから言ったじゃない!人生に目的は必要ない。大切なのは人生という旅そのものだって!
美文>かっこいいこというねぇ
アルニック>だぁ~ってえ、かわいーんだもん!

1132666916.mid

バースデー

アルニックの誕生日がわかりましたですよ~!
2003年8月1日、今日の時点で2歳ですよ~!

セキュリティと大小関係

ミディビで保存ができなかった原因がほぼ特定できました。
http://support.microsoft.com/default.aspx?scid=kb;ja;175622で見てみると、どうも我々のアプレットは信頼されていないため、クライアントであろうとサーバーであろうと関係なく保存できないようです。
お絵描き掲示板はどうなっているのかと見てみると、アプレットから画像ファイルのデータの中身がそっくりそのまま送られてきていて、それをCGI側で保存するようになっていたのですが、これは今回のようなセキュリティの問題だったのかもしれません。
そこで自分もそれに倣ってCGIにデータを渡す方法を考えることにしました。
MidiSystemのwriteメソッドにはFileクラスを渡して直接ファイルに書き出してもらうものともう一つ、OutputStreamの派生クラスを渡して自分で作った出力ルーチンに書き出すものがあって、それを使うと、出力先を自由に変えることができるんですね。
ここで、Socket通信によってデータ受け取りCGIに出力すると、セキュリティに問題の無いCGIから保存ができるようになるということです。
アプレットからCGIにデータを渡す方法などについてはhttp://www.sm.rim.or.jp/~shishido/cgij.htmlなど。

LineConstructorを使っていたら、大きなファイルを開いたときにエラーが起こりました。
機能の足りない部分があってもバグはない自信があったので少しショックだったのですが、原因はどうやらスクロールバーが大きな数に耐えられなかったことが原因だったようです。

今日はチャットにクッキー保存機能をつけました。
本当ならGBBSのプロフィール機能と連動させたかったのですが、それぞれで必須とされている要素が異なり、GBBSのプロフィール自体もまだ発展途上であるため、連携するようにするのは控えておくことにしました。
まあそんなこんなでアルニックはレベル24達成。
目指せレベル30です。

爆ボンのための3Dマップソフトを作成中です。
3Dマップはどの方向にどのようにマップが広がるか分からないし、マップのほとんどの部分は空白状態なので、2Dのときのように二次元配列を用意してそれぞれにマップチップを、というわけにはいかないので、STLのsetに、マップ上の位置とチップ情報を詰め込んだクラスを入れて、順序付けされた配列として扱っています。
なぜ順序付けされた配列にする必要があるかというと、描画段階において確実に奥のチップから表示するためには奥行きでのソート(Zソート)が不可欠であり、マップチップが動かず、視点も動かないことを考えると、描画の時点でソートするより、最初からソートされた配列に順序を狂わさないようにデータを入れてゆけばそのまま最初の要素から順番に描画してゆくことで簡単に描画ができるようになるためです。
しかし、クラスはそのままでは大小関係を見て順序付けすることができないので、operator<だとかoperator>だとかを使って大小関係をつける関数を自作(いや、この場合演算子を定義か)。
なにしろsetにぶち込んで利用するからには値のように扱えるようにしなければならないので、他にもコピーコンストラクタやらoperator=なども考える必要があったりして、結構いい刺激になりました。
もっとも、コピーコンストラクタとoperator=についてはC++が勝手に書いてくれてるので自分で書く必要はないはずですが。

ノリ突っ込み

チャットの人工無能の動作を変更しました。
完全一致辞書というのを正規表現によりキーワードを登録する曖昧辞書とは別に作っていたのですが、正規表現を使うことにより曖昧辞書と統合することにしたのです。
そして、もうひとつ作ろうと思っているのがあって、それは自己反応辞書。
つまり、自分の言ったことに対して、自分で突っ込みを入れるためのデータです。
これによりノリ突っ込みなどのより高度な人間的動作を…って、高度なのか?!
ちなみに、今のアルニックのレベルは21ですが、参考までに他の人工無能を同じ方法で測ると、ゆいぼっとがレベル26、うずらがレベル99をはるかに超える経験値。
もっとも、数値が大きくてどうなるものでもないし、動作原理が違えば内容が同じでも値が違ったりするのであまり当てにならなかったりもしますが。

ふにゃさんのウナギカズラを描き終えました。
昨日のから、光と影を調整しただけです。
こいつもギヤバネと同様、敵として登場しながらも直接的な害は無く、というより、道をふさいでいるだけのキャラとしてさえ役立たずの人畜無害なキャラクターです。
氷の息により倒せますが、しばらくするとまた復活しています。
BGMについてですが、今回は自由にBGMを設定できるモードを先に実装しようと考えています。
ええ、BGMそのものがなかなかできないから…。

1126789806.gif

LineConstructor

まあ、引き続きアルニックの辞書を拡充。
めでたくレベル19までレベルアップしました。
しかしそろそろ辞書がごちゃごちゃになってわかりにくくなってきたので整理のためにデータを五十音順に並べるため、行ごとにさまざまな操作をするLineConstructorの開発を始めました。
しかし、それを実現するにはVBに最初から入っている配列操作では貧弱すぎたので、独自に勝手に配列処理を作ることにし、結構他でも使えそうな気がしたので、ライブラリとして作ってみようかなと思ったり。
エラーが出ないという欠点があったりもしますが、サイズが0(ということになっている)の配列も作れたりして、それなりに便利にはなっているような気がします。
あと、Push、Pop、Shift、Unshift、Spliceなどの操作も当然実現、シャッフルしたりランダムな要素を取り出したりもできる…ようにする予定です。

ふにゃさん、愛夢の代わりにウナギカズラを出すことにしたのでこれから絵を描くことにします。

1126362698.gif

もっと賢くなあれ!

というわけで今日はアルニックの辞書を拡充していました。
そして賢さの目安として、経験値とレベルを導入。
現在レベル17です。

賢くなあれ!

今日はチャット管理のぼっとの辞書管理を作りました。
これで辞書に単語と応答を追加していくことでどんどん賢くなっていくはずです。
で、ためしにいろいろ入力していったところ、チャット本体のほうでバグ発見。
時間が誤って解釈されていたので修正しました。
現在のアルニックの賢さは7,168ポイント!!

ちなみに、インターフェース面でも改良を加えていたりします。

奇跡の早業

チャットの人工無能、基本機能がほぼ出揃ったのでアップしました。
まだ辞書がほとんどできていないのでろくな返答はできませんが。
今後は辞書の充実のため、辞書管理プログラムを作ってゆきます。

メテオスのスタートリップの最高難易度をノーミスでクリアできました!
しかし、レベルMAXだというのに、みんなそろいも揃って弱い。
いや、さすがに後半にもなるとなかなか強いのですが、前半、15秒でブレイクといったら、何も操作しなくてもできる芸当じゃありません。
無駄にタイムアクセルを踏み、敵の激烈な攻撃でもない限りはこんな早業は不可能です!
レベルMAXだからこその驕りというものでしょうか。
後半は積みあがるとほぼ瞬殺なのでそこそこ張り合いはあったのですが。

今日の絵は昨日の人カラーバージョン。
少し笑顔です。

1125844986.png

簡単エディタ

ふにゃふにゃのページを更新しました。
開発メモ。どうやら以前のエディタは難しすぎてエディタ作者自身にも手に負えない代物だったようで、以前の何でもできるエディタは残しつつも、新しい簡易エディタを作ることにしました。

  1. ペイントの鉛筆ツールで曲線を描くかのごとく自由で簡単で直感的な直線生成
  2. ドラッグ&ドロップで置きたい場所に置ける画像
  3. 必要なファイルは全部ステージファイル一つに埋め込み、最低限動作に必要なファイルを極力減らす
  4. エクスプローラからドラッグ&ドロップで勝手に背景としてインポートされる一枚絵
  5. その他必要なファイルはインポートできるようにする。インポートしたファイルは関連付けられたプログラムで開く
  6. いろいろあった設定は必要最低限まで減らす。あとは自動設定
  7. 当然の如く用意されるすり抜け防止策
  8. ステージ作者が最初に使いたがるだろう機能をコンパクトにまとめたツールボックス
  9. ステージ作者を困惑から救う優れたヘルプシステム
だいたい開発理念はこんなもの。

そして、Bomber丸Worldのページも更新。
戦闘画面がついに出ました。
イメージ画像ですけど。
なかなか面白いことになっていますよ。

そんでもって、RPG±0、さしあたり自分で不便に思っていた右クリックの挙動を統一。
スポイト機能と右クリックメニュー、両方一気に実行されます。

チャットの人工無能ちゃん、以前のようにファイルに入れておくよりも、mySQLのデータベースに入れておいたほうが管理しやすいと思ったので、mySQLを勉強し始めました。
とりあえずphpMyAdminの使い方を思い出しつつどんなデータがどう使われるのかを覚えていきます。

ふにゃさんは今日はBGMを作成中。
先日言っていた違和感はほぼ取れたように感じます。
メロディ以外のパートは修正するときの補助のために入れた音で、後ではずすかもしれません。

1125326932.mid

ケロろで、くれるケロ?

ふにゃさん、ギヤバネの動きもとげとげの動きも一通りできて一段落したところです。
ふにゃがギヤバネにはさまれるといろんなことになっちゃったりとげとげの反応が遅くて存在意義がアレだったりと微調整がまだまだといった印象ですが、それはステージを作りながら調整していくことにします。

チャット、最新版をアップしました。
アルニックは呼べば出てきます。
また、チャットに誰もいなくなって1時間経つと勝手に出てゆきます。
…しかし、ログ表示の遅さが問題だな…。

今度の更新は各言語ごとの速度比較にすることにしました。
検索でハズレを当てた人がいたので。

今日の絵はカエルの呪いのあの子。
しかもなぜか右側だけ。

1124895222.png

ぼっと出現!!

今日はチャットの動作確認もかねておしゃべりしてました。
現状では特に問題もなく動いてくれているようですが、実はまだロック処理というものをしていないのでいきなりログが消えることがあります。

そして、さらに、人工無能が入ってくるところまで今日は作ったのですが、動作がかなり不安なのでアップはしていません。
メッセージフォームには同じくチャットを作っているうにゅさんのJavaScriptを使わせてもらって、過剰なリロードを制限しています。
1秒に1回リロードしたってどうせ状況なんて変わらないと思うので。

学習帳を全部TGWSの色に合わせました。

今日の絵はマザー2の武器屋のおっさん。
ゲーム中とは違って優しそうなイメージ。
実は骨格から描いていたり。

1124543438.png

次>