ゲームや日記を公開中。 --- a blog about games, life. my handle is 'd_of_i'.
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
応募が殺到してるのか、フォームからの投稿で「CGIエラー 500」とかでて焦りました。
2回やって二度エラーが出たので、メールにて投稿。
実は全部届いてたら恥ずかしい&申し訳ないなぁ…。



で、肝心のゲームですが、完成したことは完成したのですが、
3分ゲーというより、ただ制限時間が3分なゲーム、になってしまった感じです。

ちょっと気合を入れすぎて、方向性を見失い、気づいたときには方向修正は厳しい状態に。
火消し砂や、オムスビコロリンのように、手軽に作るべきでした。
スポンサーサイト
人工知能研究所

ようこそ!人工知能研究所へ!ワタシは、最新テクノロジーを駆使して、人間の考えたコトをズバリ! 当てる、人工知能を搭載したコンピューターです。アナタが考えたコトを約20個の簡単な質問で当ててみせましょう!


とても面白い。
ほとんど20個以内の質問で当てられた。

こんなのいつか作ってみたいなぁ。
ゲーム中のフォントはたれフォントを使用させていただくことにしました。

日本語の再配布まで可能なフォントは少ないので非常に助かります。
カタカナはジョジョの擬音に似てるのがとても良しです。

たれフォントを使用したゲーム画面はこちら。
neko_cannon_ss2.jpg

DSのアナザーコードのアシュレイの誕生日は俺と一緒だワースゴーと喜んでたのに、
あれはユーザーが最初にDSに入力した、自分の誕生日を使ってるらしいのを今ごろ知ってしまった…。
もう立ち直れない。
もうすぐ3ふんげーこんてすとにて公開予定のゲームの進行状況はっぴょー。

neko_cannon_ss.jpg


見てのとおり?ネコが洞窟内で大砲もって暴れる、アクションかシューティングに分類されるようなゲーム。
完成度は60%の段階。

コンセプトは、簡単、爽快、テキトーの三つ。
まぁこれは今考えたコンセプトなんでどうでもいいか。


インスピレーションというか影響を受けたのは
METAL SAGA ~砂塵の鎖~/2005年6月9日発売予定
「あんた、ハンターになるんだって?」のポスター。
それとフリーソフトの名作、洞窟物語


結構面白くなってきた気がしてるんでお楽しみに。
DirectXは全面的に使わないことにしたんで
DirectMusicも使わない予定。

さて、どうやって音を鳴らすか。
sndPlaySoundは楽だけど同時に音鳴らせないしなぁー。


…ということで、解決法にSDLを利用させていただくことにしました。

今回初利用なわけですが、これは楽で良いですねぇ。
SDLの存在はかなり前に知ってたのですが、なぜか手を出さずにいました。
もっと早くつかっときゃよかったなぁ。
余裕が出来るとサボるという人類誰しもが持つ癖の所為で
3ゲーこんてすとに出す作品が間に合うかピンチです。

月日が流れるのは早いモノですねぇ。
考えていた仕様を若干削んないとダメそう。


今日描いた主人公の顔絵
neko_face.png


ジャンルはアクションもしくはシューティングです。
ITmedia:Revolutionは上位互換あり。なんとゲームボーイミクロまで登場
ミクロホントにちっちゃい。
もしくはもってるおっさんが果てしなくデカイ。
なんとなく買ってしまうかもしれない。


PS3の詳細発表も昨日されました。
ITmedia:PLAYSTATION 3は2006年春に登場
この空気清浄機、すごいスペック良いですなぁ。
コンシューマ機でもPCのゲームを開発するときのように、
富豪的プログラミングでよい時代が来たようです。
処理効率より、開発効率をどう良くするかをより考えるべき時代。
最適化はクリティカルな部分にのみコストを掛けるべき。
3Dエンジンも海外のを買おう。そっちの方が低コスト、高品質になるって。

というか、PS3とか出たら日本の会社どこもヤバイと思う。
これまではハードの上限が低かったため、技術力の低さは露呈しにくかったけど、
PS3はそんなの気にしない。バレまくり。ヤバイ。
日本はもはやアイデア勝負しか無いけど、そのアイデアだって枯渇気味。
売れ行きはどんどん先細っていく続編ばかり。ヤバイ。
糞ゲー街道をひたすら走ってる気がする。

というか、もう5月半分過ぎたのか…。
なんか4月前半くらいから記憶が無い。春って怖い。

あと、誕生日も一週間以上前に通り過ぎたのに、
未だにサプライズパーティーが開かれない。
もうこれじゃ驚けないよ。
ファミ通を読んでいたところ、
nintendogs、エレクトロプラトンは「ゲーム」として作ってない、
とかいう感じの記事を見た。
(ちょっとうろ覚え

「箱庭」…というか「環境」を提供するだけで、あとは遊び手にどう楽しむかを任せる。
これは俺が作った「火消し砂」や「なめ消し塩・無目的版」も該当し、割と好評のよう。

今はそういう方向性のモノが狙い目なのか。


眠いので何かいてるのかよく分からなくなってきた。
完成はとりあえずしそうなくらい順調に作成中なワケですが、問題が2点。

・面白くない。
・Rubyを使っていない。


カテゴリ名はこっそり変更するかも。

いや、もー面倒だからしないかも。
最近ご無沙汰な人狼BBSのツールJBをサーバ移転に対応しました。


人狼BBS、今の製作中のゲーム作り終えたらまた参加しようかな…。
出ていました。Rubyist Magazine 0006号

何気に毎号読んでます。

「Rubyist Hotlinks 第 6 回 江渡浩一郎さん 前編」の記事にて
浮動少数点数は遅いと書いてありますが、これはRubyでゲーム作っていて本当にそう思います。
私が作るゲームはアクション系が多いため、浮動小数点数を使いまくっていてかなり痛いです。
大部分はC++で記述せざるをえません。

Fixnumのように、floatも変数に埋め込む実装になったらいいなぁと思う今日この頃。
仮数部2bit潰せば、いけそうな気がします。


次の号から本格的に始まるらしい「YARV Maniacs」が面白そう。
RHGは既読済み。
ゲーム画面を連続保存して、GIFアニメを作る機能を実装してみました。


それで保存してみたのがこちら。
test2.gif



フルカラーを256色にしてるわけですが、予想以上に汚いですねぇ。
とても使えたものではない。無駄なことをしてしまいました。
なのに全然手をつけてませんでした。
ちょっと時間的に間に合うか微妙かも…。
DirectX9を使ってゲームを作っていた訳ですが、
考え直してOpenGLで行く事にしました。

なぜかというと、
以前DirectXで作ったソフトが特定の環境で
OSごと落ちたことがあって、その時の嫌な記憶が蘇えりまして。

それはビデオカードのドライバ更新で直ったので、
恐らくドライバの不具合だと思われるんですが、
それの対応に追われたりするのはやはり嫌ですし。

作り直しー。
3年くらい前に思いついた技法です。
書くこと無いので発表してみます。


Direct3Dでは、頂点は、カスタム頂点構造体および対応するカスタム 柔軟な頂点フォーマット (FVF) を指定することによって定義できます。

struct CUSTOMVERTEX{
FLOAT x, y, z, rhw; // The transformed position for the vertex.
DWORD color; // The vertex color.
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)




このような風にですね。

ある時、これを一々作るのが面倒に感じたことがあります。

そもそもFVFは定数なのだから、テンプレートによるメタプログラミングで定義できるのではないかと考えました、

そこで実際に作って出来たものが次です。
ちょっと長いです。

namespace detail{
template <bool>
struct If{
template <class T,class U>
struct Inner
{ typedef T type; };
};

template <>
struct If<false>{
template <class T,class U>
struct Inner
{ typedef U type; };
};
}

template <bool B,class T,class U>
struct If{
typedef typename ::detail::If<B>::template Inner<T,U>::type type;
};

struct EMPTY{};

struct XYZ{
D3DXVECTOR3 p;
};

struct XYZRHW{
D3DXVECTOR4 p;
};

template <int N>
struct XYZB{
D3DXVECTOR3 p;
float b[N];
};

template <DWORD FVF_FORMAT>
struct SELECT_POSITION{
typedef
typename If<(FVF_FORMAT & D3DFVF_POSITION_MASK)==D3DFVF_XYZ,
XYZ,
typename If<(FVF_FORMAT & D3DFVF_POSITION_MASK)==D3DFVF_XYZRHW,
XYZRHW,
typename If<(FVF_FORMAT & D3DFVF_POSITION_MASK)==D3DFVF_XYZB1,
XYZB<1>,
typename If<(FVF_FORMAT & D3DFVF_POSITION_MASK)==D3DFVF_XYZB2,
XYZB<2>,
typename If<(FVF_FORMAT & D3DFVF_POSITION_MASK)==D3DFVF_XYZB3,
XYZB<3>,
typename If<(FVF_FORMAT & D3DFVF_POSITION_MASK)==D3DFVF_XYZB4,
XYZB<4>,
typename If<(FVF_FORMAT & D3DFVF_POSITION_MASK)==D3DFVF_XYZB5,
XYZB<5>,
EMPTY
>::type
>::type
>::type
>::type
>::type
>::type
>::type type;
};

template <DWORD FVF_FORMAT>
struct NORMAL : public SELECT_POSITION<FVF_FORMAT>::type{
D3DXVECTOR3 n;
};

template <DWORD FVF_FORMAT>
struct DIFFUSE
: public
If<(FVF_FORMAT & D3DFVF_NORMAL)!=0,
NORMAL<FVF_FORMAT>,
typename SELECT_POSITION<FVF_FORMAT>::type
>::type{
DWORD c;
};

template <DWORD FVF_FORMAT>
struct SPECULAR
: public
If<(FVF_FORMAT & D3DFVF_DIFFUSE)!=0,
DIFFUSE<FVF_FORMAT>,
typename If<(FVF_FORMAT & D3DFVF_NORMAL)!=0,
NORMAL<FVF_FORMAT>,
SELECT_POSITION<FVF_FORMAT>::type
>::type
>::type{
DWORD s;
};

template <int N,DWORD FVF_FORMAT>
struct TEXTURE
: public
If<(FVF_FORMAT & D3DFVF_SPECULAR)!=0,
SPECULAR<FVF_FORMAT>,
typename If<(FVF_FORMAT & D3DFVF_DIFFUSE)!=0,
DIFFUSE<FVF_FORMAT>,
typename If<(FVF_FORMAT & D3DFVF_NORMAL)!=0,
NORMAL<FVF_FORMAT>,
typename SELECT_POSITION<FVF_FORMAT>::type
>::type
>::type
>::type{
D3DXVECTOR2 t[N];
};

template <DWORD FVF_FORMAT>
struct Vertex : public
If<((FVF_FORMAT & D3DFVF_TEXCOUNT_MASK)>>D3DFVF_TEXCOUNT_SHIFT)!=0,
TEXTURE<((FVF_FORMAT & D3DFVF_TEXCOUNT_MASK)>>D3DFVF_TEXCOUNT_SHIFT),FVF_FORMAT>,
typename If<(FVF_FORMAT & D3DFVF_SPECULAR)!=0,
SPECULAR<FVF_FORMAT>,
typename If<(FVF_FORMAT & D3DFVF_DIFFUSE)!=0,
DIFFUSE<FVF_FORMAT>,
typename If<(FVF_FORMAT & D3DFVF_NORMAL)!=0,
NORMAL<FVF_FORMAT>,
typename SELECT_POSITION<FVF_FORMAT>::type
>::type
>::type
>::type
>::type{
enum { FVF=FVF_FORMAT };
};




これを使えば最初のカスタム頂点の定義は次のようにかけます。

typedef Vertex<D3DFVF_XYZRHW|D3DFVF_DIFFUSE> CUSTOMVERTEX;





各要素のアクセスの方法は次のとおりです。

CUSTOMVERTEX::FVF でFVFの取得

CUSTOMVERTEX v;
v.p で座標を表すメンバ変数アクセス(D3DFVF_XYZRHWやD3DFVF_XYZが指定されたときだけ存在する

v.n で法線を表すメンバ変数アクセス(D3DFVF_NORMALが指定されたときだけ存在する

v.c でディフューズ色を表すメンバ変数アクセス(D3DFVF_DIFFUSEが指定されたときだけ存在する

v.s でスペキュラ色を表すメンバ変数アクセス(D3DFVF_SPECULARが指定されたときだけ存在する

v.t[N] でテクスチャ座標を表すメンバ変数アクセス(D3DFVF_TEX1~が指定されたときだけ存在する




 
自分は絵が苦手なので、どうも自分の考えるゲームの発想方向は
「絵が少なくて済むもの」となってしまいます。

なんだかんだ言って世の中全て見た目なのに、
自分の描く絵はショボく、嫌になってきます。



誰か絵の上手な方、一緒にメジャーデビューを目指しませんか?

当方ヴォーカルです。
今日は休みなので少し製作を進めました。

基礎部分がだんだん出来てきて、次のようなことが出来るようになりました。


# プログラム最初に一回呼ばれる
def setup

# 画面の大きさを設定
size 200,200,0

end

# 毎フレーム呼ばれる
def draw

# ポリゴン描画開始
shape(TRIANGLES){
vertex 100,10,0
vertex 10,190,0
vertex 190,190,0
}

end




上のようなRubyプログラムを書くと

test1.jpg

このように表示されるようになりました。



今日は主人公の絵も頑張って描いたので公表します。
bneko.png


あー色々微妙!
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。