SIGIndie6 「同人シューティングゲームの潮流」

レポートは他の人参照で。
感想だけ書く。

各講演者の発表は非常に面白かった。
誰かが言っていたけど「面白い人は面白いゲームを作る」を地で行くような個性的で面白い発表ばかりだった。
全体を通して「おもてなし」というキーワードがちょくちょく出てきたが、
面白い人というのは人を楽しませるのが上手い人なんだろうなぁと思った。
「おもてなし」の精神を心得てるから面白いものが作れる、とかそんな感じの。


パネルディスカッションの中では、「現在のSTGの閉塞感」を皆が感じているような印象を受けた。
特に、iPhoneWiiproject natalのような新しいインターフェースに既存の2DSTGが適応できていない現状や、
STGの開発者だけでなくユーザーさえも世代交代が進んでいない点についての焦りみたいなものを感じた。


8方向レバー+デジタルボタン+遅延無しのブラウン管というアーケード環境に最適化された2DSTGは、
遅延当たり前の液晶モニタが主流になってきた現在のゲーム環境に対応できてないという話は興味深かった。
無線コントローラーとか絶対遅延してそうだし。
最近のゲームは遅延前提で作られてるという話も興味深かった。
STG業界の世代交代が進んでいない点は、難易度やスコア至上主義、ビジュアルの弱さ等、ある程度原因はわかっている。
難易度は、音ゲーの曲選択のような難易度をユーザーが選べるようにすればいいみたいな案があったが100ステージとか作れるのかという現実的な問題が残る。


そこで弾幕自動生成の話が活きてくるのだが、結局最終的に人が見て判断しないといけない気はする。
アルゴリズムだけで作られた弾幕が本当に面白いのか?
面白いと感じる弾幕を作り出すアルゴリズムが確立できたら話は別だが。


スコア至上主義に対する違和感は常々自分も感じている。
自分はクリア重視のプレイヤーなので稼ぐことの気持ちよさが理解できない。
スコア以外の要素で順位競えたらいいのに。


ビジュアルについては、もっとキャラや世界観で惹きつけるべきという案が出たが、
CAVEシューは割とキャラクター性や世界観を前面に押し出している気がする。
キャラクター性や世界観で新規ユーザーを惹きつけても難易度で突き放してる感はあるが。
ビジュアルに関しては80〜90年代の人達と00年代の人達とで考え方の違いが見えて面白かった。
80〜90年代の人達は見た目よりゲーム性で勝負!という感じだったが、
00年代の人達はゲーム性よりまず見た目!という感じだった。
80〜90年代の人達がゲーム性で勝負というのは限られたスペックの中で工夫しなければならないという考えが根底にあるからで、
00年代の人達はハードの制限がほとんど無い中で育ったからそこら辺に気を使わずに見た目にこだわれたみたいな感じ。
ハードの性能が上がってスペックを気にして開発する必要が無くなった今となっては00年代の人達の意見を推す。
というか世の中こんだけゲームが溢れている中、手にとってもらうには第一印象で惹きつける他無い。
同人ゲーがそこまで気にする必要あるのか?という気は若干するが。


結局最後ら辺はSTGがこの先生きのこるには?みたいな感じになってしまい、
答えは出なかったけど考えるべき事は見えた気がする。

bombtterで爆発させた犯人を推理する迷探偵botを改修した

@meitantei_botを約1年ぶりに改修した。

仕様

  1. bombtter_rawのRSSを取得
  2. bombtter_rawの発言から爆発したかどうか判定
  3. 爆発していたら犯人と爆発対象物を抽出
  4. 抽出したらtwitterにpost

以上のことをcronで10分おきに回してます。

ソース

#!/usr/bin/perl
# ----------------------------------------------------------------------
use strict;
use warnings;
use utf8;
use XML::Feed;
use URI::Fetch;
use URI;
use Jcode;
use DateTime;
use Net::Twitter;

# twitter アカウント
my $username = 'username';
my $password = 'password';

# 最後に更新した時刻を調べるのにファイルを使う ( via Plagger::Rule::Fresh )
my $FRESH_PATH = "./update_time";
my $now   = time;
my $mtime = (stat($FRESH_PATH))[9];
if ($mtime) {
    utime $now, $now, $FRESH_PATH or die("$FRESH_PATH: $!");
} else {
    open my $fh, ">", $FRESH_PATH or die("$FRESH_PATH: $!");
    close $fh;

    $mtime = (stat($FRESH_PATH))[9];
}
my $mtime_dt = DateTime->from_epoch( epoch => $mtime );

# bombtter_rawのRSSを拝借する
my $rss_url = URI->new('http://twitter.com/statuses/user_timeline/16804530.rss');
my $res = URI::Fetch->fetch($rss_url)
    or die URI::Fetch->errstr;
my $rss_content = $res->content;
my $feed = XML::Feed->parse(\$rss_content)
    or die XML::Feed->errstr;

# twitter の準備
my $twit = Net::Twitter->new(username => $username, password => $password);

for my $entry ($feed->entries) {
    if(DateTime->compare($entry->issued, $mtime_dt) == 1) {
        my $entry_content = $entry->content->body;
        $entry_content =~ s/^bombtter_raw:\s+//xms;
        # 爆発したかの判定
        if($entry_content =~ /^1,/) {
            # 犯人の抽出
            my $st = index(  $entry_content, '|' );
            my $ed = rindex( $entry_content, '/' );
            $st++;
            my $of_name = substr( $entry_content, $st, $ed-$st );
            # 爆発対象の抽出
            $st = rindex( $entry_content, '|' );
            my $bomb = substr( $entry_content, $st+1 );
            my $status = sprintf("%sを爆発させた犯人は %s です。\n",
                              $bomb, $of_name);
            $twit->update( $status );
            sleep 5;
            printf("%s %s\n",$entry->issued, $mtime_dt);
            printf("$status\n");
        }

    } else {
        last;
    }

}

sub url_encode($) {
    my $str = shift;
    $str = Encode::encode('utf8',$str);
    $str =~ s/([^\w ])/'%'.unpack('H2', $1)/eg;
    $str =~ tr/ /+/;
    $str = Encode::decode('utf8',$str);
    return $str;
}

まとめ

bombtter_rawを元にしてるので的中率は100%だと思う(bombtter_rawのフォーマットが変わらなければ
何の捻りもないただの文字列整形botになってしまったような…。
あと、犯人に@をつけないようにした。
@をつけるとreplyになってウザがられるかもしれないので。

集団内の口癖

転職してから気づいたけど、どうも集団ごとに皆が無意識のうちに使ってしまう口癖というのがあるっぽい。
前の職場では、よく頭に「要するに〜」をつけて喋る人が多かった。
「要するに〜」をつけてるのに長々と説明して結局要していなかった。
今の職場では、頭に「そもそも〜」とつけて喋る人が多い。
いきなり「そもそも〜」とつけて喋りだすので、何に対しての「そもそも」なのかわからない。
しかも、いつの間にか自分にもその口癖が伝染してしまった。
これは恐ろしい現象だ。
このように無意識のうちに集団内に口癖が蔓延してしまう現象に名前をつけたい

今更気づいた事

レイストームから同高度の敵もロックできるようになって、
「ショットの存在意義が薄れてしまったではないか、改悪だ!」
と思っていたが、最近やむをえない理由でそうなったのかなと思い始めた。
レイフォースは2Dドット絵の拡大縮小による擬似3Dだったが、
下方の敵は暗い色や淡い色などで表示され、自機より下にいる事がはっきりとわかるようになっていた。
レイストームからポリゴンによる本物の3Dに移行し、視点が若干斜めになったせいで高度がわかりづらくなってしまった。
フォグなど使えば高度の表現は出来たかもしれないが、ハードの性能も低くてそれもできなかった(のかな)
その為同高度の敵もロックできるようにせざるを得なかったのかなぁ。
まぁあくまで推測ですが。


斑鳩やエクスジールの1面で中型機が下方を飛んでいく時、中型機の色が暗めだったような気がする。

シューティングラブ。200X

技能検定面白い!
でも腕が疲れる!
とにかく連打連打の連打ゲー。
これシューティングラブじゃなくて連打ラブじゃないのかと思った。
スコアアタックで8bitを3回プレイさせるとかマゾい仕様…。
ひたすらコスリ連射で腕を痛め、指の皮がむけそうになった。
STGって体力がいるんだな…。
改めて高橋名人の偉大さを痛感した。


エクスジールでは、今度はレバガチャの嵐でこちらも疲れる。
RAP.EXのスティックが折れるのが先か、
俺の腕が折れるのが先か(大げさ


トライジールRemixはオーソドックスなSTGで中々面白かった。
やや弾幕ゲーなのでクリア出来るかどうか自信ない。


新作-0(マイナスゼロ)は、ロックオン→爆破→無敵→ロックオン→爆破のループをうまく作れると爽快感が得られるが、
無敵になってる状態がややわかりにくいのと、
ホーミング弾がいつ当たるのかわからないのが微妙かな…。

サルでもわかるDiretcX

最近、またゲーム開発熱が再燃してきた。
今までDelphi+QuadrupleD+Alphalib32でゲーム開発をやっていたが、
どういう風の吹き回しかVisualC++2008 ExpressEdition + DirectX SDKを使って
1からDirectXの勉強をし始めている。
理由はDelphi関係のDirectXの情報があまりにも少なくてやりたい事をやるのに相当苦労しそうだから。
今回やりたいのは3Dを使った2Dゲー(多分STG)
VC++の情報は非常に多いし、ゲーム開発向けのライブラリも充実しているから楽だろう…
と楽観視していたら、ゲーム開発向けライブラリが多すぎてどれを使えばいいか迷ってしまうという贅沢な悩みが出てきた。
そもそも、使うにはDirectXとVisualStudioの使い方がわからないと無理っぽい。
まずは、VisualStudioとDirectXの勉強から始めよう…、ということで参考書を探していた。
そして見つけた。


15歳からはじめるDirectX9 3Dゲームプログラミング教室(C++編)


VisualStudioの簡単な使い方から、DirectXを使った簡単なゲーム開発まで、ささーっと流すようにまとめてある。
普通、3Dプログラミング等の参考書は、行列とは!クォータニオンとは!微分積分とは!等、数式をずらーっと並べてみっちり説明してくれてるものだが、この本はそういう細かいことは簡単な説明しかない。
サンプルコードを打ち込む→ビルド→実行→ほらできた!
と体(?)で覚えるやり方になっている。
自分は、数学や物理が大の苦手で、数式をズラズラ並べられても理解できないので、こういう本を待ち望んでいた。
あまりにも自分のフィーリングにマッチしすぎている。
ということは、自分の脳みそは15歳並ということか…。

まだ全て読み終えてないけど、3Dの当たり判定についても書いてあるようだ。
この本を読み終えたら、簡単な3Dゲームが作れるようになれそう。