2010年11月29日月曜日

ゲームレビュー・クリミナルガール

レビューその2。

●クリミナルガール(PSP)
何かエロイなぁ、と、ただそれだけの理由で購入してしまいましたw
感想は、まあ、エロゲ的な用途には使えないでしょうが、なかなかイイですね。目の保養にはなりますw

さて、ゲーム部分ですが、非常にわかりやすい単純な RPG です。戦闘コマンドも、基本的にパーティメンバーの提案する中から4択するだけと非常に簡単。合体技なんかもありますが、あまり意識しなくとも合体技ができるメンバーがパーティーにいれば勝手にやってくれるといった感じです。
このゲームの特徴は、やはり各キャラを成長させる「おしおき」システムでしょう。中身はミニゲームになっており、成功するとスキル用の経験値が多く上がり、失敗するとあまり上がりません。そして、一定の経験値が貯まるとスキルが習得できるというシステムです。失敗の場合でもそこそこは経験値が入るので、こういうミニゲームが得意でなくとも回数こなせばちゃんとスキルは習得できるようになっています。問題は、このミニゲームを VERY GOOD でクリアしないとごほうび画面がちゃんと見ることができないということですかね。VERY GOOD でなくとも、いくつか穴の開いた部分から画像のいくらかは見ることができるのですが、全画面でみるためには VERY GOOD を4回連続で成功させなくてはいけないことになっています。このため、私はいまだいくつかの画像を見ることができていません orz。 クリアしたら簡単に見れるモードとか出現しないかな…。
ゲームの RPG としての難易度は非常に低いものになっており、休憩ポイントではノーコストで回復できますし、比較的序盤で休憩ポイントへワープできるスキルも身につけることができます。このような仕様のため、非常に気軽にプレイすることができ、RPG が苦手という人でも比較的簡単に進められるものになっていると思います。

ストーリーについては、序盤なのでまだはっきりとはわかりませんが、意外に奥深いテーマがありそうな気がします。ノリ自体はわりと軽いのですが、クリミナル(=犯罪の、罪を犯した)というタイトルからも連想されるような何か少女たちの暗い面がいくらか見え隠れしていて、先の展開がこれから楽しみな感じです。いや、本当にまだ序盤なので、行ってみたら拍子抜けするかもしれませんけどね。

総評。とりあえず、エロ表現が苦手な人は無理ですw ゲームとしては非常に簡単なので、お手軽に RPG したくてエロイ要素もあったらいいな、ぐらいの人にはいいかと思います。

ゲームレビュー・とともの。3

●剣と魔法と学園モノ。3(PS3)
ゲーム内容は比較的シンプルな RPG で…というか、同社から発売されているウィザードリィの改造版といったもので、元がウィザードリィなのでゲームとして普通に楽しめます。
しかし、世界観はウィザードリィとは大きく違っており、可愛いグラフィックとかる~いノリはついて行けない人もいるかもしれません。私はすごく気に入ってますがw

実は元になっているウィザードリィも買ってそこそこ遊んでいたのですが、このPS3版はウィザードリィは従来のものと違って顔グラフィックが存在していて、キャラ作成時に顔を割り当てることになるのですが、この種類が非常に少ない。職業の組み合わせや救出用パーティ等でキャラをたくさん作ると、パーティ内で同じ顔が並んでしまうことが多く、なんともイマイチな感じだったのです。

そして、その後この剣と魔法と学園モノ。(略称:とともの。)を購入したのですが(もっとも、当初は同社のものとは知らずに購入したのですが)、顔グラが多く、職業もウィザードリィよりもバリエーションがあり(あまり代わり映えしないものも多いですが^^;)、非常に楽しめています。
ゲーム難易度もウィザードリィと比べるとかなりゆるくなっており、今作からは基本的に全滅しても救出の必要はなく、お金半分になって町で復活できるようになっています。また、死んだキャラの復活も失敗はしないようで、お気に入りのキャラのロストを怖がる必要がなくなっています。コアなウィザードリィのファンからはぬるすぎると言われそうな案配です。
難点をあげるとすれば、説明やヒントの少なさがあります。例えば、クエストで何かを探す必要がある場合に「XXの町の近く」とだけしか教えてもらえず、そこから行けるダンジョンのどれに行けばいいのかもわからなかったりします。また、クエストの詳細を後で再確認することもできないため、自分でメモっておかないとクエストのクリアが困難になります。他、スキルの説明で「使用するには武器の制限があります」とだけしか書いてなく、ではその制限とは何を装備すればいいのか、といった情報がなかったりもします。この辺は非常に不親切です。

それから、このゲームの特徴としては有名な声優さんの起用があります。スフィアというユニットを結成されているそうで、OP もこのユニットが歌っているそうです。もちろんゲーム内のキャラの声もあてておられます。OP の歌は結構気に入ってしまったので私は CD も買ってしまいましたw

総評としては、のんびり経験値ためていろいろ職業マスターして~というようなスタンダードな RPG を楽しみたい方にはオススメできるかと思います。ただ、奥深いストーリーだとか、ど派手な演出だとかはないので、そういったものがないと楽しめないという方には駄目かなと思います。

----------------
…今度 Wizardry ツインパックなるものが発売するそうな。旧作+新作(?)のセットらしいです。これは買いなのか…?

2010年6月30日水曜日

ODE - 物理エンジン

オープンソースの物理エンジン ODE を試してみました。OgreODE という Ogre の一部として作られている(?)ものもあるらしいのですが、中を見てみたところこれも内部では ODE を呼び出しているだけっぽいので、ODE をそのまま使ってみました。
結果…すんなり動きました。たいした苦労もなく、あっさりと。すごい拍子抜けな感じなんですが、ODE に Box のコリジョンを作成して dWorldStep してあたり判定などもサンプルの通りに処理し、結果の位置と回転(Quaternion) をそのまま Ogre で 3D 表示してやったところきれいに物理計算された結果が得られました。いい時代になったなあ、と思う今日この頃。
ODE 自体は C++ で書かれているのですが API はすべて C 言語関数の形式になっているので呼び出し形式も非常にシンプルで使いやすく、ほんの少しのコードで実装できます。まだ試していませんが関節なんかも様々な種類をサポートしているようで、ちょっとこれも使わせて貰って何か作ってみる予定です。

OGRE - CMake でエラー

Visual Studio 2010 Express をインストールしてみたので、Ogre 関連をすべてこれで再コンパイルしてみました。boost 及び OgreDependencies は問題なくコンパイル終了。で、Ogre 本体をコンパイルするために cmake_gui を起動してソースとバイナリのディレクトリを指定して、Dependencies のパスは OGRE_DEPENDENCIES_DIR にセット、そして Configure するとエラーが発生しました。

Detecting C compiler ABI info
CMake Error: Could not COPY_FILE.
OutputFile: ''
copyFile: 'C:/.../projects/ogre/CMakeFiles/CMakeDetermineCompilerABI_C.bin'

Unable to find executable for try_compile: tried

以下同様のエラーが延々と。Visual Studio 2008 の時はこんなエラー出なかったはず…。とりあえずググってみたところ、Ogre のフォーラムで解決策があったのでメモ:

Ogre のソースのルートにある CMakeLists.txt というファイルをテキストエディタで開き、「# determine system endianess」と書いてある行を探します。 ogre_src_v1-7-1 の場合 138 行目あたりにあります。
で、そこにある次のような行を
# determine system endianess
include(TestBigEndian)
test_big_endian(OGRE_TEST_BIG_ENDIAN)
次のように変更します。
# determine system endianess
#include(TestBigEndian)
#test_big_endian(OGRE_TEST_BIG_ENDIAN)
set(OGRE_TEST_BIG_ENDIAN FALSE)
これで問題なく CMake が通りました。

2010年6月29日火曜日

OGRE - 再コンパイル

先日、Ogre を static リンクライブラリとしてコンパイルすることに成功したので、それを組み込んでテストプロジェクトを作成してみました。
しかし、Ogre 自体は static ライブラリになっていても VC のランタイムを DLL 参照しており、static の意味ねーって感じで即座に Ogre を再度 VC ランタイムを DLL 参照しないようにして再コンパイル。すると今度は Ogre の参照する外部ライブラリも外部 VC ランタイムを参照していて、さらに外部ライブラリも再コンパイル。そうして何もかも再コンパイルして、リンクしたところ今度は Ogre の設定ダイアログを開くところでリソースが足りないとかで停止。仕方ないのでリソースもいろいろコピーしたつもりなのですが結局うまく動かず、全部元に戻して DLL のまま使用することにしました orz
DLL って嫌いなのですよねー。再配布も面倒だし、他の OS は知らないのですが Windows では同名の別バージョンの DLL なんかがインストールされてたりするとハングアップして原因特定するのに時間かかるしで、非常に使い勝手悪いイメージしかないのですが…。特にこういう不具合は自分のマシンでは何も起こらず誰かのマシンにインストールすると起こるので、もう無くしてしまいたいのです…。

2010年6月24日木曜日

OGRE - マニュアル翻訳

今日は少しがんばって数ページ訳しました。長い文の翻訳は難しいですね。とりあえず、ほぼ直訳で書いてしまってますが、後で読み返してみるとやっぱりわけわかめ。全部訳したら全体を再度添削しないとだめだなぁ。

現在進行度 ... 10%

2010年6月22日火曜日

slerp

Quaternion の補間関数の関数名として Slerp という単語が出てくるのですが、辞書で載っていなかったためググって調べたメモ。
Spherical Linear intERPolation の略らしいです日本語訳は球面線形補間となるそうです。ようするに補間の計算方法の名称だったわけですね。
OGRE3D の Quaternion の補間関数もこの名称だったのですが API Reference には説明が何も書いてなかったので、これが補間関数であることをつきとめるのに時間かかってしまいましたよ orz

2010年6月21日月曜日

OGRE - マニュアル

…どこかで公開できればいいなと思い、少しずつ OGRE マニュアルの翻訳作業などしてます。まあ、私は英語しゃべれる人ではないので、辞書めくりながらのかなりの意訳を含みつつの翻訳ですが。
しかし、英語しゃべれない人なのではっきりとは言えませんが、この OGRE の説明って一文一文がやたら長ったらしく回りくどいわかりにくい文じゃないですか?直訳的に書いていくと本当に意味不明な文章になりそうで、このためかなり意訳してしまっています。
量も結構あるし、完成はいつになるかな。。。

現在進行度 ... 5%

OGRE - 本体のコンパイル

デバッグするのに SDK の DLL だけだとステップインしてトレースできないため不便。Ogre 自体がバグるってことはほぼないと思いますが、自分で組んだものがバグったとき何が悪かったのか調べる際に Ogre 内部までトレースできると問題を見つけやすいので、ソースを取ってきて自分でコンパイルしてみました。
最初、大量に外部ライブラリをいちいち取ってこなければならないと知り、絶望しました orz。しかし、OgreMain のコンパイルに必要な分は Dependencies パッケージをダウンロードしてくればいいとわかったため、とりあえずやってみました。…結局いくつかは、自分で取ってくることになりましたが。

1.Ogre 本家の Source から「OGRE 1.7.1 Source For Windows」と「Microsoft Visual C++ Dependencies Package」をダウンロードします。
2.Dependencies の方を解凍すると src フォルダに VisualStudio のプロジェクトファイルがあるのでそれを開いてすべてコンパイルします。
3.cmake と 7z と Graphviz、それに boost が必要らしいので、Windows 用インストーラ付きのものをダウンロードしてきてインストールします。cmake は環境変数 Path に設定するのがインストーラでオプションになっているので忘れずに設定します。7z はインストール後に自分で環境変数 Path にパスを追加してやります。boost は環境変数 BOOST_ROOT にパスを設定します。
cmake http://www.cmake.org/cmake/resources/software.html
7z http://sevenzip.sourceforge.jp/
Graphviz http://www.graphviz.org/Download..php
boosthttp://www.boost.org/

4.Ogre 本体ソースを解凍後 VisualStudio Tools のコマンドプロンプトを起動し、ogre_src_v1-7-1\SDK\Win32 へ移動します。
5.環境変数 OGRE_DEPENDENCIES_DIR に上でコンパイルした Dependencies のパスを設定しておきます。
>set OGRE_DEPENDENCIES_DIR=C:\Dependencies
6.buildsdk.bat を使用して VisualStudio 用プロジェクトファイルを作成します。その際、コンパイラのバージョンを指定する必要があります。例えばうちは VisualStudio2008 でしたので
>buildsdk vc9
と入力します。64bits 環境な場合は vc9_x64 のように指定するみたいです。
実行すると何か見つからないというパッケージがまだたくさんありますが、OgreMain のためには必要ないと思われるので無視しますw 各種プラグインが必要なら Could not found と表示されるすべてのパッケージを取ってくる必要があると思います。
7.buildsdk.bat のあるフォルダの下に vc9 フォルダが作成され、その下にプロジェクトファイルができているので、VisualStudio で開いて OgreMain をコンパイルします。

…と、これでとりあえずコンパイルは通りましたが、6.の段階で BuildType dynamic とか出てるというのは、なんらかのオプションで、この段階で static にできたりするのだろうか…?だとしたらそれはどこで指定するんだろう?うーん、ま、これで使えるみたいだし、とりあえずはいいかな。


2010年6月18日金曜日

html 編集

Ogre の API リファレンスとか見てて思ったんですが、html をワープロのように扱えるソフトってないものですかね…。普通に html 閲覧のためにも使用できて、ふと気がついたことがあったらすぐにその場でちょこちょこっと書き換えたりできるようなの。
以前、FireFox のプラグインで WebSite 閲覧しながら自分メモを貼り付けていくようなのはありましたが、そういうのとは違うんだよなー。Ogre の場合特に全部英語なので、気がついたらちょこちょこ翻訳して書き換えていくような形で編集したいなぁ、と。

…軽くググってみたものの「ワープロのように編集できる」ソフトはあっても通常閲覧(リンクをたどって別の html を開いたり)はできないのばかりですね。まあ、目的からいえば当然ともいえますが。

OGRE - Singleton

Singleton というのが何かをあらかじめ説明しておくと、C++ のようなオブジェクト指向設計ではしばしば作成したクラスがアプリケーション内で1つだけしかインスタンスを作れないようにしたい場合があり、このとき意図的にインスタンスを1つだけしか作れないように仕込みをしておくテクニックのことです。これはたいてい、誰かが誤って外部から2つ以上のインスタンスを作ろうとするとコンパイルエラーが発生するようになっており、これによって1つしかインスタンスを作成できないはずのクラスのインスタンスが複数存在してしまうというバグをあらかじめ回避しておくことができます。

さて、OGRE に含まれるクラスでも、「Root」やいくつかの「~Manager 」等が Singleton 設計になっているようです。しかし、通常の Singleton とは違っていて、「Root」のインスタンスは自分で作成するようになっており、その他の Signleton クラスのインスタンスは自動的に作られるようですがコンストラクタは public になっているため、インスタンスを複数作ることができてしまいます(複数作ってしまうとこれは当然思わしくない結果になります)。
どうやらこれは DLL のための措置のようです。Singleton の仕組みはクラスの定義内に書くことになりますが、これが OGRE ライブラリのように DLL とその他のアプリケーションの各コンパイル時に参照されるヘッダファイルだったらどうなるか?普通の Singleton 設計されたクラスでこのようなことをすれば、DLL リンク時にインスタンスが組み込まれ、その他のアプリケーション内でもリンク時にインスタンスが組み込まれ、結果として2つのインスタンスが存在することになってしまいます。
これを回避するため OGRE では、Singleton としてはあまりよくない方法ですが、基本的にインスタンスは手動でつくれるような構造になっているけど、実際には勝手にインスタンスを作らないよう気をつけてね、的な構造になっているようです。まあ、実際には Root 以外のほとんどのクラスは自動的にインスタンスが作成されているか Root のメンバ関数を通して作成するかのどちらかなので、失敗することはあまりないと思いますが。うっかりやってしまわないように気をつけないといけないですね。

2010年6月17日木曜日

OGRE - 影の描画

OGRE で影を描画する方法についての自分メモ。

1.モデリングソフトでモデルをエクスポートする際に、「Mesh」の「Build edges list (for Shadows)」にチェックを入れてエクスポートする。(影を落とす地面側のモデルは別に必要ない)

2.シーン初期化に次のようなものを追加する(パラメータはそれぞれ必要に応じて変更)。

this->sceneMain->setShadowTechnique( Ogre::SHADOWTYPE_STENCIL_MODULATIVE );
this->sceneMain->setShadowColour( Ogre::ColourValue(0.4f, 0.4f, 0.4f) );
this->sceneMain->setShadowTextureCasterMaterial( Ogre::StringUtil::BLANK );
this->sceneMain->setShadowTextureReceiverMaterial( Ogre::StringUtil::BLANK );
this->sceneMain->setShadowTextureSettings( 512, 2, Ogre::PF_X8R8G8B8 );
this->sceneMain->setShadowTextureSelfShadow( false );
this->sceneMain->setAmbientLight( Ogre::ColourValue(0.6f, 0.6f, 0.6f) );

3.ライトを作成し、影を有効にする(ここでは平行光源)。

Ogre::Light* light = this->sceneMain->createLight( "SunLight" );
light->setType( Ogre::Light::LT_DIRECTIONAL );
Ogre::Vector3 dir( -0.5f, -1.0f, -0.5f );
dir.normalise();
light->setDirection( dir );
light->setDiffuseColour( 0.95f, 0.95f, 0.95f );
light->setSpecularColour( 0.95f, 0.95f, 0.95f );
light->setCastShadows( true );

4.後は普通に描画すれば自動的に影を描画してくれる。影を落としたくない Entity は、Entity のメンバsetCastShadows() で false を渡せば描画されなくなるはず。(デフォルトではすべて true になっている)

Project Hosting

SourceForge みたいなオープンソースプロジェクトのホスティングサービスが Google にもあるのですね。まだ日本語訳されてない部分も多いため、英語が話せない私には細かいところまではよくわかりませんが、Google のその他サービスとの連携もあるし、なかなか便利そう。
ただ、ちょっと気になったのがライセンスの部分。ドロップダウン項目からライセンスの種類を選択するようになっているので、独自のライセンスを設定することはできないっぽい。うーん、ソースコードを利用する側のことを考えると、 MIT License すら結構つらい場合がある(ソースコードを利用していることをどこかに明記しなければならない)ので、もっと緩いライセンスに設定したいのですよねー。でも、NYSL とかは法的に通用するかどうかわからないという話も聞いたことがあるので、これぐらいしかまともなライセンスはないのかな。
あとバージョン管理システムが、Subversion の他に Mercurial が選択できるようになってる。Mercurial は先日 3D エンジンである Ogre のバージョン管理に使われているので初めて知ったのですが、結構台頭してきているのでしょうか。Ogre はちょっと前に Subversion から Mercurial へ移行したらしいですが、Mercurial の方が便利なんだろうか…。
数年前まで日常的に使われていた CVS はいろいろ不満もあり、CVS から Subversion への移行は当然の流れだとは思いましたが、Subversion には今のところ不満もないし、GUI にも Tortoise のような便利なものがあるのでさらに便利なものを必要とは思っていないのですが、世の流れがどうなるかわからないですし、そのうちちょっと調べてみますか。

2010年6月16日水曜日

OGRE

仕事でちょっとしたデモを作ることになって、フリーの 3D エンジンを使うことになった。で、いくつか見てみたところ、この OGRE という 3D エンジンを使ってみることにした。本まででているようなので、結構有名なものなのだろう。
専用の Exportor で出力して、そのまま読み込んで、ぽんと表示できる。プログラムもかなり簡単に組めるので、いい感じ。

2010年6月15日火曜日

C++,mutable

C++ に mutable というキーワードがあるのを今日初めて知った。。。
結構長年 C++ 使ってきてるのに、まだまだ知らないことはあるものだ orz
mutable をつけたメンバ変数は const 関数からも書き換え可能になるらしい、と。メモメモ。。。

2010年6月3日木曜日

飲み物

最近のお気に入りの一品。一時期品薄だったのだが、最近またちょこちょこ見かけるようになってきて嬉しい。
一時期これが品薄の時があって、代替として別のメーカーの同等品が店に並んでいた時期があったのですが、あれは受け付けなかった…。なんかバナナの酸味っぽいのが出ていて、自前でバナナジュース作ってもあんな味にはならないから、なんか保存料的なものでも入ってたのかな…。

2010年6月2日水曜日

インターネット設定

3月にプロバイダの都合により回線が変更になった。100Mbps→1Gbps へと進化したのだが、グローバルIP がなくなったため自宅サーバを公開することができなくなった。まあ、いずれ何か作って公開しようと思っていただけで、とりわけすぐに公開サーバが必要なわけではないので別にそれはよかったのだが、問題は LAN 設定。モデムの下に専用のルータを接続するのだが、なぜかこれが DHCP なのに4台までしか接続できないという訳のわからない仕様。うちはデスクトップ3台(Linux/Win/Mac) と、ノートPCにウルトラモバイルPCに、今時はゲーム機だってネットが必須だから全然足りないのですよ。とゆーか、4台までという制限をつける必要があるのか意味不明…。
仕方がないので、ルータの下に Linux マシンをルータとして接続し、全マシンをこの Linux マシンを通して接続するように LAN を構築しなおした。ずっと忙しくてなかなか直す暇がなかったのだが、これでようやくまともに全マシンが同時稼働できるようになって一安心。いやまあ、全マシンが同時起動するとはないですけどね…。いちいちケーブル差し替えるとかいう不便な生活だったので…。
というわけで久々に Linux 設定変更を行ったわけですが、最近の Linux はホント楽ちんですなー。GUI でほとんど済んでしまう。IP マスカレーディングの設定するのに iptables だけスクリプト書きましたが、他はマウスでカチカチやるだけでだいたい終わってしまった。
ま、そんな感じで LAN 設定変更は難の苦労もなく終了し、これで快適。さて、環境はこれで整ったので何かソフト開発しようかというところなのだが、何作ろかな…。