System4.0で「まばたき」と「口パク」を
実装するサンプルコード
「まばたき」と「口パク」があると、ちょこっとだけ高級感が出ます。(^^;)
当然ですが、実装するためには、「立ち絵」、「まばたき用の目の周りのアニメーション」、「口パク用の口の周りのアニメーション」が必要です。アニメーションというのは、連番の画像をリンクしたものとなります。
このサンプルコードでは、おそらく大抵の「自作アドベンチャー用コード」と併せて使用できると思います。画面上に複数のキャラクターを表示する「自作アドベンチャー用コード」があるならば、複数のキャラクターが同時にまばたきしたり、該当キャラのみ口パクしたりできるハズです。「付属のアドベンチャー用コード」はサンプル用に分かりやすく簡単に作ったものなので、機能がほとんどありません。そのため、EasyAdvEngクラスは、サンプル以外の用途に使わないようにしてください。
詳細な使い方は、サンプル付属のソースファイルのコメントとして記述してありますので、そちらを参照してください。
Developed using Alicesoft System4.0
サンプルをダウンロード
適当に説明みたいなものを...
アニメーションするというのは偉大です。かわいくなりました。
おそらく、まばたきを作成する最も難易度の高い部分は、目の部分を消すと言うことだと思います。
まぁ、アリスの素材は、消しやすい方だと思いますが…。それでも、プログラマーがやるには大変です。
逆に、絵を描いてもらえるような場合は、ついでにアニメーション用の画像を描いてもらいましょう。
さてさて、今回の「まばたき」&「口パク」のアニメーションは、全てSystem4.0+SACT上で実現しています。
DrawPluginを作って用いれば、ウィンドウ消去中などでも普通にアニメーションしてくれると思いますが、
わざわざC++で開発するの面倒ですし、SACT上の方がサンプルとして面白みがあるかなーと思いまして、
SACTでやってみました。
それほど長いコードでもないので、System4.0の勉強をしたい方は、解析してみると面白いかもしれません。ああ、そうそう、ソースファイル中に書き忘れてましたが、「まばたき」と「口パク」を両方とも使う場合は、
基本的に、両方とも「初期化時にtrue」を渡しておいてください。
指定し忘れると、片方しか動かない、という状態になります。それからそれから、このコードは内部でランダム関数を用いています。
そのため、ランダムのシード値を保存してどうこう(リプレイとか)といったゲームとは、
致命的に相性が悪いです。そう言う場合は、このコードのRANDを用いている箇所を
適時修正してあげてください。
# RANDを用いているのは、二連続まばたきや、まばたき間隔を微妙にずらしたりといった用途です。いろいろと簡単に拡張できるようになっています。
パラメータをいじくるだけでも、結構変わってきます。
また、同じ画像でも複数ロードするような構造になってますが、これは仕様です。
あれだけ小さければ、別に対して読み込み時間はかからないだろうという判断です。
この方が可読性にも優れますしね。
ただ、どうしても、このオーバーヘッドも減らしたいという場合には、適時修正して利用してください。サンプルで、ボイス時の口パクについて話していますが、この辺の処理は、MSG_AUTO_WAIT関数の条件判断が使えそうな気がします。
最後にまばたきと口パクの画像について。これらのアニメーション画像は、立ち絵のピクセルデータの方にコピーしているだけです。そのため、立ち絵のアルファによって透明になっている場所に、アニメーション画像の方に存在するものを書き出すのは、改造を行わない限り、不可能です。
また、同じ理由から、どうしても矩形領域に、立ち絵の透明な場所が入ってしまうような場合でも、気にせず動かすと、表示されません。つまり、立ち絵のアルファ値は絶対であり、立ち絵の透明な場所には書き込めない(改造した場合は除く)という事です。
感想
思っていたよりも簡単に作れた。
まばたきのアニメーション用画像とか、ちょっと簡単に作りすぎたかなぁ、こんなんじゃ変な風に見えるだけだろうなぁと思いながら実行してみると、びっくり仰天、ものすごくきれいに動くじゃありませんかー。4枚目とか、どうみてもヘンテコです。なのに、動かすときちんと見えます。人間の目って不思議。