2010年5月25日火曜日

Visual C++ 2010 Express Editionの所感

先日、マイクロソフトのVisualStudio2010無償版(Express Edition)の紹介をしましたが、その中のVisual C++をちょっとだけ試してみました。

無償版はDesigeon的にはまったく使えませんが、有償版(Standard Edition)への将来的な移行という意味では面白いと思いました。まずDesigeonがWindows2000で動かなくなるという部分に面食らいましたが、覚悟はしていました。

素人向けの結論を言えば、VC++Expressはゲームを作るのにストイックな環境で、ゲーム制作全般の学習には向きません。たぶんC#やJavaの方がいいと思います。ゲームプログラミングとしてのC++ではなく、シンプルにCやC++を学ぶ気なら使えるかもしれません。

以下のサイトでVC++ Expressの特徴をまとめていましたのでご紹介します。

まず大きな特徴として、作成できるアプリケーションはWindows2000で動きません。ゲームに限らず、世の多くのソフトウェアがVC++で開発されることを考えると、今後への影響が大きそうです。Windows2000対応のソフト開発はVC++2008が最後ということになります。おそらくWindowsXPも時間の問題で、2年後にはXP切り捨ての話が出始めるのかもしれません。

C++自身も進化しています。C++という言語はどんどん仕様が拡張されていて、次バージョンとして提唱されているC++0xバージョンの一部の機能を、VC++2010は取り入れているそうです。

無償版には、ウィンドウのメニューを編集するためのリソースエディタがありません。窓のメニューをGUIでデザインできないというのはハンデです(テキスト編集ならできます)。これはフリーウェアで代替えが効くのですが、知識のない人がWindowsアプリ開発環境として、わざわざVC++Expressを選ぶ必要はないと感じました。

それとMSの伝統的なライブラリであるMFCとWTLがついておらず、Desigeon的にはこれが致命的です。
買いなさいということなんでしょうね。

2010年5月16日日曜日

日本語専用ごめんなさい

「Sorry, Japanese Only」とは昔のウェブサイトでよく見かけた言葉ですが。
残念ながらDesigeonも日本語専用です。

とあるウィザードリィ動画のコメント欄に、「Desigeonを見つけたって?翻訳すれば面白そうなソフトなんだけどなー」という感じのやりとりがありました。

http://www.youtube.com/watch?v=jYvVAz4Zocg

この点、DarkHallやElonaは素晴らしい。多国語を意識するくらいの覚悟がなくちゃフリーウェアの世界でメジャーにはなれないのかもしれませんな。メジャーになる必要があるかはそれぞれでしょうけれども。

ううむ、しかし、申し訳ない。気持ちの上では英訳したいでやんす。

2010年5月13日木曜日

新計算手順のメッセージ表示テスト

やー、なんとも地味なテストでありますが。



新計算手順の命令の中にメッセージ表示命令を作って、以下のように引数を指定できるようにしてみました。



メッセージの中に二つの値を埋め込むつもりなら、命令+値データ×2ということで、合計3つの命令を置くことになります。置換記号として使っている「%.1f」とかいう部分の書式はC言語のprintf()に準じます。

構造上、ひとつの命令に際限なくデータを持たせることは原理に反するので、ひとつの命令に多数の設定を置くことは避けています。多数のパラメータを指定すべき命令では、命令に続けて値データを置くことで、引数として拾わせていきます。

上の例ではメッセージを表示していますが、例えば将来、画像を表示する位置を指定したり(四辺の位置を指定)、メニューを作れるように(メニュー項目をリスト指定)したりする場合には、同じような方針をとるかもしれません。

2010年5月8日土曜日

「ブルーバレット」より操作の誘導、戦闘行動順リスト

さば缶さんが「ブルーバレット」という3DダンジョンRPGを作成、公開しています。


いくつかの理由で興味深いです。

  • 序盤の操作の誘導
  • キャラクタの行動順をリストする機能
  • RPGツクールVXで3DダンジョンRPGを作成

まず、序盤のプレイヤーに対する操作の誘導です。プレイヤーの操作に追従しながら説明する手。プレイヤーアクションをイベントプログラムによって捕捉し、その都度説明を挟むという手間のかかる仕込みが必要ですが、私はこれが、一般向けに作るゲームほど必要だと思っています。

戦闘ルールは、「使うコマンドごとに、次に回ってくる順が視覚的に分かる」という仕組みをとっています。これもDesigeonでやりたいことのひとつ。ピンポイントで機能を実装するだけならすぐにできるのですが、Desigeonの場合はツール化しなければならないので、実用化の目処が立っていません。イベントでできる水準まで持っていくのか、今の戦闘のように直接的に実装するのか、不透明です。(私の場合、元ネタは戦国ランスです。戦国ランスだと行動リストが横向きでした。ブルーバレットは縦向きですが実質的に同じ機能です。実は画面デザインが大きな課題になっています)

最後に、RPGツクールを利用すればいろいろなことができます。こう言ってはなんですが、ツールを本気で使い込む気があるならDesigeonに出番はありません。現時点ではDesigeonのみならず、2D/疑似3D表現のRPG制作ツールは、特別な思い入れでも無い限りRPGツクール一択のような気がします。

2010年5月5日水曜日

メッセージ等、文字列の指示方法

このGW中、ツイッターが不安定で手短に発言する場所がないです。あと、暑いと作業がはかどりませんねぇ。今日はアイスを食べつつ、こんなことを書いて気を紛らわせています。

文字列の表現。詳細イベントにはメッセージ表示命令を含めます。そうしないとイベントで何か起こしても、プレイヤーに何も伝えられないじゃないか。

ところが厄介な問題があるのです。文字列の話なので、能力値みたいに値の桁を指定するだけでは動かない。たとえば以下の一文です。

「¥1は¥2に¥3のダメージを与えた!」

これまでは上のように書いていればコマンドの表現が機能しました。というのも、¥1と¥2に割り当てる文字列は決まっています。¥3も能力値の設定を引っ張ってくれば表示すべき桁数が分かります。ダメージを与える先のHPが整数なら、整数に丸めればシナリオ作者の意図通り動きます。

でもイベントの中では、数値の意味とメッセージの意味が結びついていません。単に演算命令があって、一方では単にメッセージ表示命令があるだけです。だから¥1も¥2も¥3も、それが何者なのか知っているのはシナリオ作者だけです。そこで文字列や数値が何者であるか、指示する必要が出てきます。

「%sは%sに%8.2fのダメージを与えた!」

最初の %s → 追加でキャラクタの名前を指示
二番目の %s → 追加でキャラクタの名前を指示
三番目の %8.2f → 追加でグローバル変数等を指示

という感じで、メッセージの中には書式を指示して、それぞれを置き換える文字列や値を追加で指示します。

%sとか%8.2fとかいうのは、C言語等では一般的な文字列フォーマットの書式です。これはほとんどそのまま採用しようかと思っています。むしろ使わないとメッセージを指示できない、ということになります。



イベントの分岐命令があって、キャラクタの更新命令があって、メッセージ命令があれば、とりあえずそれらしいイベントを設置するところまではできるはず。過去の記事ではこのすべてについて触れてきました。

今回述べた文字列がらみが詳細イベント基礎部分における最後の課題ということになります。すべてに共通する課題は「使いにくさの克服」になってます。克服しきれる問題ではないので、だいたい覚悟しておきたいと思います。

新計算手順の更新命令に関する値の範囲

皆さんゴールデンウィークは仕事ですよね?([Y]/y)

最近はあまり開発が進まないんですが、次バージョンではなんとか、新計算手順(イベント詳細命令)の更新命令を入れたいなという気持ちを持ってます。これは、能力値の現在値や成長値を書き替えたり、ステートを着脱したり、所属を転向するなどの命令を含んでいます。

ところが問題がありまして、指定した値をどういう理屈で適用するかが難しいです。

能力値は下限が曖昧です。ここがひとつ問題になっています。

能力値の成長値
能力値の成長値には上限があって下限がありません。上限値の計算方法は複雑です。
能力値の一時値
一時値には上限も下限もありません。
変動能力値の現在値
変動能力値の現在値については下限が能力値自身の最小値と同じです。でも上限は能力値の最大値ではなく最終値です。最小値と最大値はセットで指定するのに、変動現在値の範囲に適用しているのは最小値、下限のみなんです。一貫してません。
段階能力値の各段の現在値
段階能力値は各段の現在値をマイナスに設定できるようになっています。これは意味がありませんのでゼロを下限にしようと思っています。
以上のようになった経緯については割愛します。

それで、能力値の各値を更新した際、どのような値に丸めるのかが重要な問題で、その詳細を定義し、説明して学習してもらうことが適切なのかどうか。

いっそ現在値を管理している「変動能力値の現在値」「段階能力値の現在値」の二つを除いて、値の範囲を取っ払ってしまおうかなあ、と考えてます。やるなら仕変になります(成長値を弄る旧シナリオの動作が変わるかもしれない)。



値の更新はもう一つ厄介な問題を含んでます。こちらは解決済み、というか妥協することにしました。

それは値の代入・加算・減算といった演算加工です。

例えばイベントの中で、HPに30%ずつダメージを与えるにはどうしたらいいでしょう。まず30%の定義とは?以前の簡易イベントのルールでは、「上限-下限」を100%としています。HPに-100~+100の範囲があるなら、30%は60になります。しかしここ、いま見るとバグっていて割合計算時の下限はゼロという認識で動いています。HPの最大値が100ならおそらく30%は30です。この問題は別に置いておきます。

細分化した命令体系を使う場合、すべて自前計算になります。更新命令には値の代入しかありません。15を指定したらHPが15になるのです。パーティ全員に30%ダメージを与えたいなら、一人一人計算してHPの値を決定しなければなりません。

これまでの経験から、全員にダメージを与えるという処理はことのほか複雑であると感じています。例えばダメージを与える際、メッセージ・画像エフェクト・効果音を同時に発するとしたらどうでしょう。そこは単一の加減算命令を置く場所ではなく、表現の手順をプログラミングすべきところです。30%を加減算する命令だけあっても、「12ポイントのダメージを受けた」というメッセージは作れません。12という文字列を指定するには結局12という値を計算しなくてはいけない。自動計算でやっても意味がない。だから値の更新自体はシンプルな代入に徹する、という考え方です。

この辺が詳細イベント命令の使いにくい部分になりますが、そういうことを書いているうちに、他所のスクリプトを使えるエンジンがだんだん羨ましくなってきました。隣の芝が青く見えるのは昔からなのでやりません(開発力の面でデメリットが大きいのです)が、時折浮気したくなります。



詳細イベント命令について、私がやりたいのは能力値やコマンドの育成を、キャラクタ判別しながらやること、です。条件を満たした魔法使いに、ある場所で特殊な魔法を覚えさせるとかです。それとキャラクタを抽出して転向することです。戦士を丸ごと忍者に変えるような、そういう感じの。

全体としては、最終的にどんな形になるのか自分でも楽しみです。