2010年10月30日土曜日

ご連絡

勤め先が変わりました。
まあでも通うオフィスは同じなんですけどね。

2010年9月30日木曜日

false としか比較できない bool みたいなもの

Twitter やってると全然ブログ更新しなくなってしまいますね。


整数値をキャストするとゼロなら偽、それ以外なら真になる。
でもそんなとき #define TRUE (1) なんかと比較するとゼロでない何らかの数値は
"1"とは限らないので具合が悪い。なので偽を表す定数としか比較できないように
したい。

…というような要件の解決を試みるコード。

#include <boost/static_assert.hpp>

// nil かそれ以外の状態を持つ型
enum flag_t { nil = 0 };

// 以下のオペレーターは実装されない
bool operator ==( flag_t, bool  );
bool operator ==( flag_t, int   );
bool operator ==( flag_t, float );
bool operator !=( flag_t, bool  );
bool operator !=( flag_t, int   );
bool operator !=( flag_t, float );

bool operator ==( bool , flag_t );
bool operator ==( int  , flag_t );
bool operator ==( float, flag_t );
bool operator !=( bool , flag_t );
bool operator !=( int  , flag_t );
bool operator !=( float, flag_t );

// enum のサイズって int と同じだっけ?
BOOST_STATIC_ASSERT( sizeof( flag_t ) >= sizeof( bool  ) );
BOOST_STATIC_ASSERT( sizeof( flag_t ) >= sizeof( int   ) );
BOOST_STATIC_ASSERT( sizeof( flag_t ) >= sizeof( float ) );
void func()
{
  const flag_t flg = someFunc();

  // 真なら通る条件文
  if ( flg ) { /* ... */ }

  // 偽なら通る条件文
  if ( flg == nil ) { /* ... */ }

  // 以下はリンカエラーを起こす
  if ( flg == false ) { /* ... */ }
  if ( flg == 12345 ) { /* ... */ }
  if ( flg == 1.23f ) { /* ... */ }
}

2010年7月10日土曜日

リフレクション実装を改善してみた。

7月8日のポストで提示したサンプルコードには、ひどい仕様があったため
新しいバージョンのソースをアップします(7月8日の記事へジャンプする)

[サンプルソースをダウンロード]
*このソースを利用した事による一切の現象について責任を負いかねます。

具体的な問題を解説するとクラス要素をリフレクトする際に間違った型で
受けても無理矢理キャストが成立してしまい、結果非常にまずい動作を引き
起こしてしまう可能性がありました。

この対処のために動的な型チェックを行うようにしました。
型チェックはRTTIを使わず独自に実装しています。

class MyObj : public Object
{
  CLASS_DECL( MyObj );
  //...
};

Objectクラスを継承しクラス宣言にマクロ CLASS_DECL(<クラス名>)
配置すれば型チェック機能が有効になります。もちろん、Refelectable
Objectを継承しています。

2010年7月8日木曜日

リフレクションを実装してみた。

リフレクションをC++で実装してみました。
ただし、名前によるメンバ変数へのアクセスを提供するのみで
本来リフレクションという言葉で定義される全てを満しません。

[サンプルソースのダウンロード]
サンプルソースを更新しました。内容と新しいソースについては
7月10日の記事を確認してください。その記事へジャンプ

ZIPアーカイブにはVisual Studio 2008のプロジェクトファイルと
ソースコードが含まれています。

サンプルはBoost ver.1.43.0を利用しますのでメイクする際には
Boostを落として[ツール >> オプション]あたりでインクルードパスを
通しておいて下さい。

なお、サンプルによって生じたいかなる現象についても責任を
負いかねますのでご了承下さい(単純なソースですけどね)。

以下利用方法を解説します。

まずReflectableクラスを継承したクラスを宣言します。
名前アクセスを行いたいメンバ変数(リフレクト要素)を追加していきます。
class MyObj : public Reflectable
{
public :
  Sample() { registerElements(); }
  ~Sample() {}

private :
  void registerElements();// 解説後述

private :
  Element<int> m_number;// 整数値要素
  Element<Child> m_obj;// 静的配置クラス要素
  Element<Child*> m_pObj;// クラスポインタ要素
};
要素としてクラスを格納する際はそのクラス(この場合はChild)も
Reflectableを継承していなければなりません。

宣言された要素はコンストラクトのタイミングで要素を登録します。
登録はマクロ経由の関数コールで行います。
void Sample::registerElements()
{
  // 以下のマクロは
  // Reflectable::registerElementをコールする
  REGISTER_ELEM( m_number );
  REGISTER_ELEM( m_obj );
  REGISTER_ELEM( m_pObj );
}
あとは次のような記述で名前アクセスが可能です。
Sample sample;
int& n = sample.reflect( "m_number" );// 参照の取得

2010年3月21日日曜日

コズミックスマッシュ



…があったので遊んでみた。
んでもってクリアした(一番 easy なルートだろうけど)。
移植されないかな-。

2010年3月19日金曜日

とある雑誌に写真が載りました。
そんな訳でちょっと前に東京に引っ越してました。

2010年3月10日水曜日

アンプが直った

PCとゲーム機につないでるアンプが故障して
修理に出してたんですが帰ってきました。

PCはヘッドホンをサウンドに直刺しできますが、
ゲームはどうにもならず…これでやっとプレイできる
ってもんです。

2010年3月5日金曜日

お久しぶりです。

今日写真撮ってもらいました。
うむむ。

2010年1月21日木曜日

ちょっとした用事で、

新幹線に乗ったんだけど
マーティー・フリードマンらしきひとを見たよ。

2010年1月13日水曜日

最近のうちのゲーム機事情

XBOX360のHDDを20GBから120GBに交換

ついにPS3(薄型)購入

XBOXが壊れた(前に修理したので2度目)

また壊れたら嫌なのでXBOX360アーケードを購入

金かかるなあ。

2009年12月30日水曜日

Blog 引っ越しました

何かに備えて、Blogger に引っ越しました。

エクスポートインポートがさっぱりうまく行かんので
何件かピックアップして手で移しました。ダサいですね。

頂いたコメントはさっぱり消えます。
ごめんなさい。


あと今日はスッポン食いました。

赤い液体が血でございます。
緑の液体は胆汁かなんかでございます。

2009年11月2日月曜日

ベヨネッタ

面白いですね。

初見殺しがあったり、ときどき理不尽だけど
ある意味セガっぽいとも言えますかね。

しかしこれのおかげでデビルメイクライ系の
アクションもずいぶんハードル上がりますね。

2009年8月4日火曜日

週末

前一緒に働いてた人たちと飲み会してきました。
久しぶりでしたが、皆さんあんまり変わらん感じでした。

といっても仕事はてんでばらばらで、業界から離れてたり
そもそも仕事してな…ゴホゴホいやなんでもないです。

いやまあ元気そうでなによりということで。

最後、始発まで飲み続けるのはさすがにダルかったので
中途離脱してタクシーで帰りました。

そしたら運転手さんがアメちゃんをくれました。おわり。

2009年6月24日水曜日

整体に行きました

あんまり首が痛いので溜りかねて整体に行きました。

肩の所をコリコリしながら「ここねー、骨みたいに硬いですけど、
筋肉が硬くなって軟骨みたいになってしまってるんですよ~」

...と言われたりするほどガチガチに凝ってました。
当然一回行った程度で直るはずも無く、という訳でしばらく通うことになりそうです。

2009年4月12日日曜日

セミナーとか懇親会とか

東京でセミナーがあって、その後の懇親会に行ってきました。

途中なぜか、ストIII 3rd が如何に面白いかを語る会みたいに
なってて楽しかったです。

全体のスケジュールが押してたので途中退場したんですが、
それでも時間ギリギリで新幹線に飛び乗るような感じでした。

せっかく盛り上がってたのに、せわしなくて嫌だわー。

2009年4月11日土曜日

例のアレ

微妙に関わってた某なんとかが
無事リリースされたようです。

残って踏ん張ったひとの努力の賜物ですね。
よかよか。

2009年1月24日土曜日

IGDA セミナー その2

前回の続き。セッションを行ったおふたりを含めた、スクリプトに縁のある開発者によるパネルディスカッションについて。

司会者の質問にマル・バツのパネルを出し、その理由についてコメントする…という段取りになってました。実を言うとどんな質問があったかあんまり覚えてないので超ダイジェストで書きます。

「プロダクトにオープンソースなスクリプトを組み込むのに社内の抵抗はなかったか?」という質問では以外にも「スムーズだった」という意見が多かったです。ただ、大手かつ、オープンソース実装(Squirrel)の導入経験ありなのはスクエニの方だけだったので日本のゲーム業界全体でどうかって言う点に関しては未知な感じです。

「スクリプトを導入すると安上がりか?」という問いに元スクエアの方曰く、「(RPG 制作において)プランナーが自身で次々イベントを作成できるようになった結果、ゲームのボリュームが増えたがバグチェックが大変で"安上がり"にはならなかった」。バグチェック云々はプログラマとして耳の痛いところですが、メンバーのやる気がダイレクトに内容の充実につながるのは素晴らしい成果のように思います。

あと「ぶっちゃけスクリプトの導入はプログラマの趣味ですか?」という質問でハッカー気質の人(というのは勝手な印象ですが)ほど「そうです」というニュアンスの返答だったのが面白かったです。実際、新しいことにチャレンジするのは楽しいですからねー。

時間が押してたせいで最後の方に用意されていた割かしディープな質問が省かれてしまったのが残念でした。早回しされたスライドを見る限り「それ聞いて欲しかった!」というものがあったので次回以降にまたやってもらえると嬉しいですね。

2009年1月20日火曜日

IGDA セミナー

IGDA の「ゲームにおけるスクリプト言語の現状」というセミナーに行ってきました。定員 150 名で満員の大盛況。主催の方も「3人くらいしか来ないかもなあ」と思ってたみたいなことを行っておられましたが、実際は結構大きい教室にびっしり聴衆がいるという状況で、是非次回もまた開催したいとのことでした(全3回~5回らしい?)。

最初のコマは Lua 解説本の著者の方で、ぶっちゃけこの方のブログは以前仕事で Lua を使っていたときに相当参考にしてたりします。ありがたやありがたや。内容はスクリプトと Lua の入門編という性格が強く、個人的にはおさらい、という感じでした。

次は CRI 米国法人の方(日本人です)のセッションで CRIScript という、乱暴に言えばゲーム用 Java script をオープンで開発している方です。苦労話から構文解析までかなり濃いものでした。

これまたセッションされた方のブログは読んでたので CRIScript 自体は知ってたんですが Java script かぁ…という感じで若干スルー気味でした。

実装の解説を聞いての感想は、コルーチンクロージャが未実装なのが(ToDo には入ってましたが)辛すぎるなと。

このふたつがあればゲーム場面の遷移なんかをかなり楽に書けるのですが、逆に無い場合、僕のスクリプト導入の主なモチベーションである「C++ 的に書くとダルい部分を補う」が失われてしまうのです。

ただ、これまでは会社の看板を掲げてるスクリプトが存在しなかった訳で、メーカー側としては導入の敷居が下がって良いんではないでしょうか。国内ではスクリプトというもの自体が胡散臭く見られかねないので、この点は以外に重要です。まだベータですしこれからの展開が楽しみです。

このあとパネルディスカッションがあったのですが、エントリーが長くなったので別途書いていきたいと思います。

2008年12月23日火曜日

生身FPS

先週末にサバゲーしてきました。
人生初サバゲー。

平林にそれ専用の場所を提供してくれるお店があって、
貸し切りで夜中から明け方まで遊んでました。

お店は場所を貸して終わりって訳ではなくて、
「ロビーでは弾(玉?)を装てんしちゃイカん」とか
「ゲームスペースから完全に出るまで保護マスクを
絶対取っちゃダメ」とか、安全面に関してかなり神経質に
指導してました。

レンタルの拳銃でやってたんですが、こっちの弾は全然
当たらんくて、バシバシ撃たれました。

使ってよい銃の制限があり強すぎるのは持ち込み禁止なん
ですが(レンタル銃も当然制限内)、当たると服の上からでも
地味に痛え。

最初は徹夜とか無理だろと思ったんですが、実際やると
あっという間に時間が過ぎてしまいました。

いやー、楽しかった。

2008年11月5日水曜日

久しぶりに運動しました

某社のフットサルクラブに参加してきました。
ジムもさっぱり行ってなかったし、そもそもボールを
蹴るなんて何年ぶり?みたいな感じです。

どうなることかとドキドキしましたが、まあそれなりに
動けたようなそうでないような…。

楽しかったので今度のためにちゃんとした靴を
買おうかなとか思っています。ちなみに今、ふとももが
パンパンに張って痛いです。