「NeoMupl」に関する日記(11)

<前 次>

半分完成

爆ボンのわくわくモードのアイテムデータが完成しました。
実際のところ失敗が多くてクリアできなくて、ポーズ画面でカードを確認したり、色からカスタムパーツの中身を類推したりしていたのですが。

ふにゃさんの標準ステージの8面の攻略ができました。
これで半分ですね。
そして後半が本当に攻略ページの必要なところ、応用ステージなのです。
特に11~14面は結構凶悪ですよ。

そして、NeoMuplバージョン0.05をアップしました。
まずボリュームの計算式の修正。
音量が若干大きかったみたいなので計算式を見直してみたら、音の強さで計算すべきところを音の振幅で計算していたためlog20倍大きな音が出ていたようです。
あとは取るに足らない単発機能をいくつか追加です。

完成しなかった件について

えっとですね。
今日NeoMuplを完成としてアップする予定だったのですが、色々と問題が出ましてですね。

1. MIDIの演奏
ソフト側でボリューム調整するとボリュームコントロールのほうの設定が変更されます。
NeoMupl側で設定するボリュームはあくまでボリュームコントロールでの設定値に対する相対値でありたいのでMIDIだけDirectShowの使用を中止するか、ボリュームコントロールの値を調べて更にそこから変更するという手段をとります。
おそらく前者の方法を取り、DirectMusicを使うと思います。
DirectMusicならば曲ごとに別の音源を指定することもやろうと思えば可能です。

2. メニューの一部の実装し忘れ
リスト変更とファイル追加を忘れてました。
リスト変更は私が使わないので忘れてました。
ファイル追加はエクスプローラからのドラッグ&ドロップで行っていたので忘れてました。

3. ヘルプがない
ヘルプも作ってませんでした。
これが以外に時間かかるんです。
めんどくさいよもう。

4. 0.04としてアップしてしまった
そういうわけです。
現在の最新バージョンです。

シェルソート

NeoMuplでOggVorbisの再生を確認しました。
おそらくこれは前にインストールした「Direct Show Ogg Vorbis Filter」のせいだと思うので、別途ソフトが必要と記載しておきました。
それと、ソートを高速化。
構造体や文字列のようにコピーに時間のかかるデータだとクイックソートよりシェルソートのほうが速いと聞いたのでマイクロソフトのサイトからコードを拝借してきて実装してみました。
今はちょっと中途半端な状態なのでアップは出来ません。
明日をお楽しみに。

Boost--

NeoMuplの読み込みのほうの高速化もできたのでアップしました。
これで大分完成に近付きました。
OGGの演奏についてはNeoMupl側では何も対策はしないつもりです。
OggVorbisはそもそもあまり聞きませんし、それにDirectShowへの追加機能としてユーザーが任意につけられる機能なのです。
曲名自動取得とファイルからループ位置を取得についてはできそうなら挑戦してみる、といった程度ですね。

どうもBoostはVC++6ではRegexとかSpiritとか、Boostの最大の魅力にあたる部分が使えないことが多いようです。
VC++.NET2003なら全部対応らしいですが。
VC++2005EEはもってるけど正直あまり使おうという気になりません…。

ハ、ハラが痛いので今日はこの辺で…。

100倍速くなる!!

RPG±0、どうしようか悩んでます。
正直、ずっと前からVBじゃ手に終えなくなりそうな気がしてならなかったんですよ。
VBじゃポインタが使えないし、オブジェクト指向も中途半端で扱いにくいし、そもそも遅いし、あまりいいことがなさそうな気がしてたんですよ。
しかし、だからといって全くできないわけでもないんですよね。
このままVBで押し通すか、それとも別の言語で1から作り直すか、いずれにしても具体的な実現方法を考えないことには始まらないんですよね。
とにかく、いけるかどうか判断できないことには中止も続行もできません。

NeoMupl進めてみました。
曲数が多くなるとリストの読み書きが異常に遅くなるのでその対策を。
2500曲程度で最低7秒かかるみたいなんですよね。
前のアルゴリズムだと処理時間がO(n2)なので5000曲あれば約30秒かかる計算になります。
気の長い人なら待てないこともなさそうですがやっぱり遅いものは遅いです。
そこで、ファイルの内容がINIに近いのでINIファイル関連のAPIを使ってみたのですが、結果はというと惨敗。
以前の方式と比べて、1項目編集するたびにファイルの読み書きが入るので一つ一つの動作が半端じゃなく遅いんですよ。
しかも毎回項目を探すから処理時間のオーダーは変わらずO(n2)となるはずです。
たとえもっと効率がよかったとしても、同じ2500曲で50秒以上というのはいくらなんでも時間掛けすぎです。
さすがに気の長い人でも待ちきれません。
そこでしぶしぶ汎用の読み書きクラスを使うのをやめて、使いまわしの効かない専用のコードを書いてみたのですが、これがすごくて…。
さっきと同じ条件でなんと書き込み時間70ミリ秒ですよ!!!
全く誇張なしで100倍速いんです!!!
しかも処理時間のオーダーはO(n)なので、データが2倍になれば前より更に2倍効率がよくなるんです!!!
もう!こうなるとわかってりゃあんな使いまわしは効くけど遅いクラスなんて作ってなかったのに!!
そうそう、今日作ったのは書き出しだけで中途半端なので最新版アップはなしです。

フリージ

今日も爆ボンのページを更新しました。
リバイアとフリージのページですよ。
フリージはとりあえず書いとけといったところであまりしっかりとは書いていないのですがリバイアのほうはパワーや行動パターンなど、結構真面目に書きましたよ。
実は今回はアルタイルタワーの攻略をしようと思ったんですが、操作ミスで転落しまくりましてね。
自力ジャンプはほとんど成功してそれなりによさそうなペースではあったのですが。

唐突ですがNeoMuplを更新しました。
ポップアップメニューを軽く実装。
右クリックで出てきたら便利でしょ?という程度で。
そしてフォルダ省略表記機能を追加しました。
「<1>」を例えば「C:\Documents and Settings\Owner\My Documents\My Music」なんかに関連付けておくと、「C:\Documents and Settings\Owner\My Documents\My Music\abc.mp3」とかが「<1>\abc.mp3」と短くなったりするわけです。
あとリストのソートやら検索を速くすることを考えていたのですが、どうにも処理のオーダーが平均ではO(logn)にはなるけれどソートされたデータだとO(n)になって効率が著しく落ちるようです。
それでも以前の常にO(n)のアルゴリズムと比べればずいぶんマシなはずですが、もう少し多くの場合に効率がよくなる方法を考えたほうがよさそうです。
そうそう、少しですが進んだのでいつものようにアップしておきましたよ。
ついでにダウンロードコーナーそのものも少しばかりリニューアルしてきました。
マイナーチェンジですがね。

ErrorSafeのアホタレ

今回のNeoMuplはリストにファイルを追加するときの挙動を改善。
いったん余分めに配列を用意して配列の拡張を減らすようにしました。
今考えるともっとよい方法がありそうだったので今回はアップしていませんが約五千曲で3秒と、まあまあよさそうな結果です。
もっとも、追加処理ができるまでに、ファイルの受け取りそのものにかなり時間がかかって、それはVBの問題であってこちらじゃ解決できなかったりするんですが。

アキヤメのレゴのページを作りました。
今回は4種類紹介です。
愛夢以外には実は名前も設定もなかったのですがWWW公開用に名前と設定を付けてみました。
ちなみによくある車のほうは実際に昔遊んでいたころの設定を使ってます。

今日の画像は迷惑ヤローの主張。
ある掲示板に入ろうとしたらいきなり飛ばされてあれよあれよという間に怪しいチェックが入りました。
「エラーは見つかりました」とか「データ損失ができなくなります」とか、怪しさ満点です。
とりあえず画像に載っているサイトにはアクセスしないように。
そして間違ってもそんな迷惑ヤローの言うセキュリティソフトなんてインストールしないように!!

1145717598.png

VBCHECK

こっそりパネルαとじゃんけんαを更新ですよ。
VBのコードの問題点を指摘してくれるソフトをたまたま見つけたので、あたっている部分だけ修正してアップしました。
ついでに著作権情報や一部アルゴリズムも変更しておきました。

そのソフトを見つけるきっかけとなったのがNeoMupl。
NeoMuplの動作が極端に遅いということ、そして解決法は先日書いたとおりですが、ソートアルゴリズムや文字列-データ対応のプログラムなんかはいかにも誰かが作っていそうだったので手近なところでVectorで探していたら、目的のものは見つからずに他の便利そうなソフトが見つかったというわけです。
結局ソートアルゴリズム周りで楽はできそうにないので再びC#も視野に入れ始めたのですが、現段階の問題として、VC#2005がExpressEditionだからなのかあるいはC#だからなのか、エクスプローラからのドラッグ&ドロップができなくて、一歩踏み出せずにいます。
これさえあればもう迷わなかったんですけどね。
C#でエクスプローラからのドラッグ&ドロップの方法を模索しつつVBで効率のよいアルゴリズムを作るとしましょう。

そうそう、アキタラヤメル企画にレゴのコンテンツを追加しようと思います。
今レゴでオリジナルの作品がいくつもあり、それらを分解する前に作っておいたLDrawのデータがあるのですよ。
うちのキャラのいくつかはレゴで作ったものが元ネタだし、こういうのがあってもいいと思うのですよ。

時間の問題

NeoMuplに新たな問題ですよ。
まずソートプログラムがO(n2)の処理時間なので数が多くなるとソートが圧倒的に遅くなること。
予想はしていたんですが項目が数千個になるとかなり時間がかかりますよ。
そしてもう一つ、こっちのほうが深刻です。
リストのロードとセーブに時間がかかるんです。
計算したらやはりO(n2)の処理時間。
項目のソートに関してはクイックソートを使うことで、ロードとセーブについては読み込んだ結果の参照が遅いということがわかっているので読み込んだ時点で読み込み結果をソートして、ソートされていることを前提とした検索で目的のデータを探すことにすれば、いずれもO(nlogn)の処理時間に抑えることができそうです。

一気に進む

はい、もう一気にできそうですね。
ループ処理も演奏位置を変更するだけで可能。
100ナノ秒精度ですよ。
ループ演奏・演奏後の処理など、基本的な処理が早くもできました。
あとはBGMモードを付け加えれば基本機能が出揃うわけです。
そうそう、データ記録周りを少し整理しました。
レジストリに記録する場合とINIファイルに記録する場合で同じものを記録する処理を2回書いていたのですがここを統一して書くのが一回で済むようにしました。
そして、忘れてませんよ。
NeoMuplは進んだら進んだだけたとえ中途半端でもアップします。

そういえば弟がメトロイドプライム2を買ってきていました。
グラフィックについては1がすごすぎたから別に驚かなかったんですがこれもやっぱりバンジョーと同じくやりすぎなほどの正当進化の予感がひしひしと伝わってきています。
そういえば最近爆ボン以外のゲーム記の更新が滞ってるな。
ま、いいけど。

DirectShow

MusicPlayer3の怪しい挙動にどうにも我慢ならん!
と、NeoMuplの開発のほうに行こうとしたのですが、現在のVC++6での開発状況が、MFCに挫折して自分でWindowsライブラリを作ると意気込んで作っていて色々面倒くさそうな作業がたまっていたことに気付き、C#にあっさり移行したのはよいのですが、手抜きのため導入したYanesdk.NETではMP3が鳴らせないしMIDIは左側からしか聞こえてこないしで今回の用途には使い物にならず、だったら自前で作るかと思ったらDirectX9には日本語ドキュメントがないしDirectMusicへの対応が怪しかったりで結局どっちもうまくいきそうにありませんでした。
そういえばDirectShowのヘルプに「Microsoft Visual Basic でDirectShow API のかなりのサブセットにアクセスできるが、Visual Basic のサポートは完全ではない。」って書いてあったけど、これはほとんど使えますと解釈してよいのかな…?
去年の12月にVBはいったん捨てたんですが実は再生用DLLを作る必要すらなく、VBオンリーでいけたようです。
最初からダメだと諦めて別の方法を探すって、うちの悪い癖だな。

掲示板いじり

掲示板ちょっといじってみました。
本当は記事の削除を作ろうと思っていたのですがその前にローカルではクッキーを記録してもオンラインとは別のユーザー扱いになってBBSデータのバックアップを取るときにローカルのユーザー情報が消えてしまって不便だったので記録されているユーザー情報からクッキーを復元する機能を作りました。
この復元機能、本当はひらがなのふっかつのじゅもんにしたかったのですが復元の難しさ(というより面倒さ)や正当性チェックなどの問題があって一般的なID・パスワード方式にすることになりました。
こっちのほうはもう実装が楽で楽で。

NeoMuplのVC++での開発を開始しました。
MFC使おうかとも思ったのですが前にMFCを無理に使おうとして撃沈したことがあったのでノーマルなWindowsAPIを使ってウィンドウのデザインはすることに決めました。
とは言えどもラッパークラスを作らないことには管理が大変なので自己流のMFCっぽいものを作ることにはなるんですが。
まあ、音声の再生にはDirectShowを使うかそれが技術的に難しければ何か他の使いやすいライブラリでも使おうかと思っています。

なんかWord不便だなーと思ってしまいます。
なんか知らんがエクセルのワークシートをオブジェクトとして貼り付けて編集したらデータが壊れているとかなんとか言われてこれ以上の変更ができなくなったり、何の説明もなく図が拡大されたり、縮小されたビットマップの編集をするとスクロールバーが使えなかったり、とにかく挿入されたオブジェクトに関してかなり不便な思いをしています。
しかしオブジェクトを既存ファイルへのリンクとして貼り付けるとワード側では編集せずに済むのでものすごく効率が上がります。
ファイルは増えてしまいますがフォルダ分けすれば問題ないのでこれで解決…だけどやっぱりこれはおかしいよマイクロソフトさん。

お絵描き掲示板のスタイルを微調整しました。
不必要な線が出ていたので消して必要な線を強くしてみました。

あちらを立てればこちらが立たず

Bomber丸Worldのアニメーション機能をマップチップとして使うときにメモリ効率がよくなるように改造を加えていました。
しかしキャラクターには前後左右を向いたバージョンがあり、マップチップは同じものを大量に表示するという特性の違いがあるので両方にバッチリ合うものって作りにくいんですよね。
あるいは最近のハイスペックなパソコンでは適当に使いまくって問題ないものなのでしょうか。
しかし最近のソフトが好き放題に無茶をやっているのはハイスペック化もさることながらそれ以上に特定の無茶に特化したハードウェアの上で特定の無茶をしているからなんとか動いているような気がするのです。
32bitWindowsで開発している以上何MBというオーダーでメモリを消費するのならそれはメモリ節約を……そんなに使うのか?
画像とは別にマップチップ固有の情報が一つあたり1KBあるとしましょう。
そうすると、320x240のワールドマップで75MB……節約を考えねば。
マップチップに特化した方式ならばマップチップ一枚あたりに必要なメモリは画像マップ用データ4B、キャラマップ4x4B、高さマップ4x4B、計36Bとなります。
それでも全部で2.6MBか……まあまあ許容範囲か。
更にこの方式でキャラを100人表示すると、すごく複雑なキャラクターを使っても1MB以内。マップ重視だな。

学習帳を更新しました。
今回は半導体レーザという分野を扱っています。
しかも教授にOKもらったのと同じ内容なのでそれなりに信憑性はあるはず!!

NeoMuplの今後について考えています。
既にVBのプロジェクトは破棄しています。
何を実装すべきかを先に考えておく必要があるかもしれません。
そういうことでNeoMuplのページに実装したい機能を列挙してみました。
まあできる範囲で適当にやってみましょう。

音が鳴らない!?

ミディビ更新しました~♪
ついにアプレット上で演奏されるようになって格段にMIDIが作りやすくなったと思います。
しかし実は前からだったのですがクリックしたときに音が鳴らなくなっていたのです。
原因は全く不明。
演奏があるから一応何とかなるんだけど例外も何もなくただ音が鳴らないだけというのはなんとも気持ち悪いです。
アプレットビューアではなるのにどうしたことでしょう。

ドラクエ8ではついにトロデーン城に帰還。
お城の方々は揃いも揃ってイバラ人間化していました。
そういえば主人公も心なしか緑っぽい雰囲気が…。(ないない
しかし毎度毎度だけどザコ敵の強いこと!
いばらドラゴンとか地獄の騎士とか、城内最強っぽいです。
目的の部屋まであと少しだったのですがククールが死んだため仕方なく引き返すことになりました。
でも正直、ククールのこまめな回復がないと一気に全滅してた可能性が高いです。

NeoMupl、どうもVBとC++のDLLを組み合わせたのはよくなかったようです。
デザインの簡便さからVBを使っていたのですがマルチスレッドで同期を取るとなると面倒なことは避けられそうになくてむしろ全面的にC++で最初から書き直したほうが楽だと感じ始めたのです。

ふにゃさん、色々細かいところを変更しました。
1.ふにゃの絵のハイライト部分を消した。
  何度見てもふにゃには合わなかったので。
2.ギヤバネが氷の息を受けて凍るようになった。
  そして凍った状態だとバネが働きません。
3.ギヤバネの空中の動きを改善。
  前にギヤバネの動きを変更したとき変になっていたので。
4.ふにゃの他キャラクターとの当たり判定の最適化。
  若干処理が軽くなります。
それでは。ごきげんよう

1135349032.png

エレベータ

実に久しぶりに、丁度1年半ぶりに、NeoMupl触ってみました。
実は1年半前の時点で既にMCIでの再生がDLL上ではできるようになっていたのですがVB側でDLLに対応していないということで音がならない状態でした。
そこで簡単に変更を加えてDLLを呼び出すようにしたのですが、DLLのソースを見て感じた不安がそのまま現実となり演奏の停止と同時にVBごと落ちるという不具合が発生しました。
対策は考えてあるので多分近日中に直して昔言っていた常に最新のものをアップするという方針に従って仮更新する予定です。

レゴで久しぶりにオリジナルを作ってみたいと思い、適当にパーツを漁っていたら結構巨大なプレートが出てきて、このプレートの特殊な形を活かせないものかと考えていたら、プレートの穴の部分にぴったり合う四角プレートを見つけ、この部分でエレベーターを作ることを考えたのですが、こういうギミックを作るのに必要なテクニックの部品が決定的に足りず、そもそもテクニックの部品を多用すると機能性ばかりが先立ち見た目が悪くなってしまうため避けたかったので、システムの部品で何とかしようと考えていたところ、ゴムタイヤの摩擦でエレベーターを動かす方法を思いつき、ギアの代わりにタイヤをまわし、その摩擦でエレベーターを昇降する方法を使うことにしました。
タイヤの摩擦を使う方式であればレゴシステムの真っ平らな側面をそのまま利用できるので機能性のために見た目を変える必要がないのです。
ただ、この方式でエレベーターをまともに動かそうとすればタイヤ(テクニックでは昇降用のギア)を最低3箇所設置し、全てで同期を取って全く同じ動きにしなければなりません。
これを実現するには一つのタイヤの動きを全てのタイヤに伝えなければならず、それには結局テクニックのシャフトとギアが数点必要になってしまうのですが、これらは完全に通常のブロックで隠し通すことができるので見た目にはなんら影響を与えないのです。
もっとも、内部で頑張っている様子を見せびらかすためにわざわざ部分的に穴を開けていたりするのですが。

MusicPlayer3をまた改良しました。
昨日までのは終了時に最後の状態を記録できなかったのですが、今回で強制的にセーブする機能で最後の状態だけは必ずセーブされるようになりました。

ふわふわふにゃのページをリニューアルしました。
本当は画像をアップするだけの予定だったのですがどうせなら説明も欲しいし、どうせやるならついでにリニューアルも、ということで。
軽バージョンはこれで公開中止ですがどうせ面倒くさいだけなので需要はなさそうな気がします。

メルビンがボックスマスター→ちびトカゲ→ふつうトカゲに

「カービィのエアライド」で、チェックナイト周回制2周2'40"できました。
サンドーラのときと同様、強いCPキャラに引っ張ってもらう作戦に出ましたが、チェックナイトで最も速いと考えられるルインズスターでは、真後ろについてスピードアップするという方法が取りにくいので、自分だけワープスターを使いました。
いきなり最高速になるというルインズスターの特性は、障害物を瞬時に破壊し、そのまま最高速で走り続けられるということを意味し、ショートカット用の道を開けてもらった上にそのあとも引っ張り続けてもらうことができ、1周目は1'19"で通過、そのままの勢いで、2周で2'39"45。
1周目のラストでCPキャラが苦手とする地形があり、そこで自分が1位になってしまったのですが、何とか自力で2周目はいけました。

ところで、ゲームキューブの最初の画面を見ていて思ったのですが、あの設定画面の静かなBGMってやっぱり耳コピしている人はいないんでしょうか。
別にいらないけど少し気になります。

突然ですが、「NeoMupl」を更新しました。
本当は曲名の取得を作りたかったんですが、その前にリストの全消去ができなくなっていたのが気になったので、全消去の機能をつけました。
それと、設定画面のデザインとメニューでの位置が実装と合いそうになかったので、設定用ダイアログとメニューが一時的に消しておきました。

アクセス解析

「NeoMupl」のソートを猛烈に速くしました。
今まで10秒ほどかかっていたなら今度からはコンマ数秒!
それを可能にしたのは並べ替えアルゴリズムの改良・・・・ではないのです。
以前はソート作業がひとつ終わるたびにタイトルバーに作業状態を表示していたのですが、これがとてつもなく重い作業なのです。
だから作業状態を表示しないようにしたのかというとさにあらず。
そんなことしたらたとえ短い時間でも負担に感じます。
ここで取った対応は、作業状態をパーセンテージで表示して、タイトルの変更を100回以下に抑えたのです。
これによって、タイトル変更の作業の負担が、1000個のデータだと約0.02%にまで減らすことができます。
というわけで、早速現在の状態をアップしておきました。

サーバーが用意しているアクセス解析は当てにならず、ネット上に転がっているものを設置するのも面倒そう…
ということで、アクセス解析ソフト、自作しちゃいました。
ネット上で見つけたのはどれもこれも既に出来上がったプログラムを利用するだけのもので、アクセスログの形式を教えてくれるところなど皆無だったので、自力でアクセスログの意味を調べました。
わからなかった部分も大分ありますが、私の知りたい情報ではなかったのでほっときます。
今ある機能は、余計な情報をカットする機能、ログを一覧表示する機能、必要な部分だけのログを切り出す機能です。

で、そのアクセス解析を使って404エラーになっているページを探したら、favicon.icoというファイルが出てきました。
「なんだそりゃ、アイコンか?」と思って調べてみたら、こんなとこ見つけました。

自分でサーバを立てている管理者だと、最近 エラーログファイルに「favicon.ico」が404で記載されているのに気がついているはずだ。

Windowsプログラマだと「ICO拡張子?アイコンファイルか?」と すぐにピンとくるだろう。
だが、それが何を目的としたものかも・何の役に立つかもわからないし、誰かがスパイダーソフトで特定のファイルをさがしているのかもしれない。
そうイメージしたはずだ。
だから あなたは 検索エンジンで「favicon.ico」を検索し、ここにたどりついたはずである。

そのとーり。全くその通りです!ドンピシャ!お見事!
というわけで、favicon.icoはIE5用のお気に入りイメージファイルだそうです。
まあ気が向いたときにでも作ってみます。

集中して作るといってたのはいつのことやら…

もはや忘れてしまっている方も多いとは思いますが、「NeoMupl」の開発の一環として、MIDIのタイトル情報などを取得するプログラムを作ってみました。
MIDI以外を読ませるとバグったり、MIDIでもデータの並びによっては正しく解釈できなかったりと欠陥だらけですが、タイトルを抜き出すだけなら何とかいけるでしょう。

今日は学校で「毒を食ったゴキブリがいかにして死ぬか」や「歯医者のレントゲンは危ない」といった話がありました。
なんだかLSIの話から発展してとんでもないところに行き着いてしまいました。

全然進んでねえや

今日は日記以外の用でパソコンを触るのはよしておこうと思っていたのですが、3時間以上も寝過ごしてしまったため予定変更。
「CharaBox」にカービィ系のキャラ入れまくり。
でもカービィシリーズの敵キャラの名前はよくわからないものが多いので調べるのに苦労します。

「MusicPlayer3」で、何故かVBMP3を使っているとよくフリーズするので、MCIでもMP3が鳴らせるようになったのを機にMP3を全部MCIで鳴らすように設定しなおしました。
読み込みも速くなって(VBMP3の初期化処理がなくなったため)、なかなかいい感じです。

そういえば「NeoMupl」、一気に作り上げるとか言っておきながら、ここんとこさっぱり音沙汰なしですね。
で、現在の進行状況はといいますと・・・・
聞かないでください。

ちょっと手抜きですけど

「BitBlt(応用編)」の真面目なサンプルを作りました。
前のサンプルは、雰囲気や結果はわかってもらえても途中経過や動作に関しては闇の中でした(≒わかりにくい)。
というわけで、今回は雰囲気よりもわかりやすさ重視です。
コード量も半分以下ですし、内容も見た目どおりでわかりやすくなっています。

「CharaBox」で、データの読み込み・書き出しを作りました。
「NeoMupl」も。何か改良しました。

<前 次>