2016年10月23日日曜日

switch

Nintendo Switchが発表されましたが、投資家の反応はイマイチみたいですね。
「発表するぞ」で若干上がって、発表されたらガクン。登場前の話題性という意味で、VRほどのインパクトが無い普通のゲーム機なので、まぁ、当然そうなりますよね。

私の期待値はそのまま保留。
むしろ、今のところは好感触です。
私の興味は、ハードそのものの革新性ではなく、ゲームプラットフォームとしてNintendo Switchがどういう形になるかという点で、Developer PortalにはまだNintendo Switch関連の情報が一切出ていないので、判断できません。(一番知りたいのは、開発に必要な機材とか参入ライセンスがどんな感じかということですが、それらはまだ分からない)

むしろ興味深かったのはパートナー企業の一覧(一部)。
上5段はコンテンツ制作企業で、昔からコンシューマ中心で作っている企業が中心。
「スマホ系だけ」という企業(CA系列とかコロプラとか)は載ってないっぽい。

下2段は、Unity、EPIC(Unreal Engine)、Web Technology(Sprite Studio)など、ツールやミドルウェアの制作企業のようです。

興味深いのはDeNA。
スマホゲーを一緒に作っているのは知っていますが、DeNAがコンシューマというのは違和感がある。少なくとも、コンテンツ制作での参加ではないはず。(並び順からしてもツールやミドルウェアのグループ内ですし)

あと分からないのはレコチョク。
これは、何故入っているのか全く分からない。
音楽ストリーミングでもやるつもりなのだろうか?




2016年10月17日月曜日

【疑問】何故VRを最初から家庭用で出したのか

PSVRが販売されて、色々な情報がチラホラでてきました。

ちなみに、今「PSVR」ググって出てきた記事は...

「PSVRじゃない」 父親殴った息子を逮捕 

http://kyoko-np.net/2016101401.html

虚構新聞ですね。

ちなみに私はイベントでオキュラスの試作品を少し触らせて貰った程度で、PSVR実機は触っていないので何とも言えません。オキュラスの試作を触った感想としては、「凄いとは思ったけど面白いゲームが作れるのか?」というもの。実際に出ているタイトルもサマーレッスン、アイマス、初音ミクなど、イマイチ触手が動かないモノ(※正確にいえば、それらが嫌いな訳ではないが、わざわざVRじゃなくて良いじゃないというモノ)しかない。

参考: PSVR 専用/対応予定ソフト一覧
http://gamefavo.com/db/psvr/soft-list/

仮に面白いゲームが世に出てきたとして、スマホゲームをポチポチやって満足している層にどうやって面白さを伝えるのだろうか。本体価格がPS4とセットで10万を超えるようなものを買わせるには、かなり大きな動機を与えなければいけないはず。

エロは甘えですが、それをアリにしても、ネタとしては良いけど欲しいとまでは思えない。これなら企画モノのDVDをツタヤで借りてくれば良いのでは?と思ってしまう。自分本位で操作できる点は新しいけど、それにしてもエロゲーで良いのではないだろうか(エロゲーは全くプレイしないので適当なことを言っているが)。

参考: PSVR ひかりちゃんのパンツを全力で見ようとした
http://www.nicovideo.jp/watch/sm29842806

虚構新聞でネタにされているバーチャルボーイも、ソコ(プロモーションの難しさ)がネックで売れなかったとか。でも、私はそれが原因でバーチャルボーイが売れなかった訳ではなく、単純にVRを活かした面白いゲームが作れなかったからバーチャルボーイは売れなかったのだと思っています。

PSVRは、バーチャルボーイと比べれば天と地ほどにハード性能が違います。単純なグラフィックや演算性能だけでなく、当時では無理だったインターネットを組み合わせた技術も使えます。PSVRでは、それらを活かした面白いゲームが作れる可能性があることは否定しません。

が、根本的な遊びの面白さみたいなものであれば、バーチャルボーイで実現できた筈で、単に性能が良くなっただけのPSVRでソレが解決できるのかは疑問。バーチャルボーイは生存期間が短かったから、それを探る試行期間が不足していたのかもしれません。

ゲームとしてはつまらなくても、美しいグラフィックを活かした別のエンターテイメント機器としての価値創出なら出来るかもしれませんが、そのグラフィックに関しては、まとめサイトを見ると「荒い」という意見が多い。まぁ、フレームレートを上げてる関係で、現状30〜60fps前後で見慣れているものと比較すればそうなるのも致し方ないと思いますが。

参考: PSVR】画質、解像度の評価、買う価値はあるのか
http://uver2468.hatenablog.com/entry/2016/10/16/014147

新しいものを作る上での試行錯誤というのは不可避です。ただ、それ(試行錯誤期間)を最初から家庭用でやるのは如何なものかと思っています。ビデオゲームが世に出てきた時と同様、最初はアーケード(機器をシェアしてプレイすることで消費者当たりの支出を下げる)、芽が出てきてから家庭用(機器を消費者毎に専有)という流れの方が成功率が高いのではないだろうかと思っています。要するに、市場形成ができていない状態でいきなりモノが売れる筈が無いのに、何故その方向で舵を切ったのかが疑問です。今のままでは、単なるガジェッター専用の玩具で終わってしまうのではないだろうか。

2016年10月15日土曜日

IBv6開発状況

ずっとデレステばかりやっていると疑われるとアレなので、最新の開発状況でも書いておきます。

Invader Block variatio 6 は
・Invader Blockステージ
・Battle Marineステージ
・連魂ステージ
という3種類のルールが異なるステージから構成されるゲームで、現在は連魂ステージを開発中という状態。

初代連魂はモノクロでしたが、今回はちゃんとカラーです。
グラフィックが進化し続けている今日日、「カラーですよ」とドヤ顔されてもアレでしょうけど。

かなり激しいです。
静止画だと上手く魅力が伝わりませんが。

敵のバリエーションがかなり豊富なロングステージ構成となっています。
例えば、上図の青い弾を出してきているヤツは、プレイヤーが近づくまで海の中に潜っていて、近づいたらザパーンと出てきて自機狙いベースの乱射をしてきたりとか。

現在は中ボスを作成中。
中ボスはNOKOGI Riderから友情出演(という名の作画手抜き)

これまでSUZUKI PLANが作ってきたゲームの集大成という感じの仕上がりにしたいので、思いついたことは全てぶっ込むようにしています。ただし、「その場の思いつき」みたいなアイディアは多分ひとつも無く、実際に作ってきてリリースしてきたからこそ分かる「こうすれば面白くなる」みたいな道筋が朧げに見えているので、だからこそ、思いついたことを黙殺できません。

私はNOKOGI Rider以降、その正統後継的な規模感のゲームは作らず、Battle Marineや連魂などの小粒なゲームを沢山作ってきましたが、これらはその「朧げな道筋」を見極める為に必要なプロセスだと考えています。面白いか面白くないかは、実際に作って遊んでみないと分からないので。

正統後継的な規模感のゲームを繰り返し作り続けるというアプローチ(東方Projectとかが多分そういうアプローチ)も当然アリだと思いますが、小粒なモノで色々と試していった方が、私が作りたいモノの方向性がよりクリアに見えてくるのではないだろうかと思います。

「弾幕STGを作りたい」など、方向性がキッチリ決まっていれば、正統後継的な規模感のゲームを繰り返し作り続けるアプローチの方が多分良いです。しかし、私の場合、それほど弾幕STGを作りたい訳でもなく、だからといってどういうゲームを作りたいのかもハッキリ見えていなかったので、小粒なモノで色々と試していくアプローチの方が肌に合っているんじゃないかなと。

まぁ、そんな感じですので、恐らく完成までにはまだ時間が掛かりそうです。
それでも今年中には出したいところですが。

2016年10月2日日曜日

ようやく PRO をフルコン

今年は8月末〜9月初旬が夏休みでした。
この時期に休めば、誰とも都合が合わないので、集中してゲーム開発ができる訳です。

そして、前の記事で書いたようにモリモリ開発を進めていたのですが、今日ついに、その時に息抜きで始めたデレステで PRO の全楽曲(※現時点)のフルコンクリアを達成。
いやー、大変でした♨

音ゲーは苦手なんですよね。

ちなみに、上図の杏(SSR)はスカチケでゲットしたもので、リセマラはやっていない(その分の石は全部スタミナ回復に費やした)ので、SSRはその1枚のみというほぼ無課金プレイです。(※スカチケ=3000円)
niceやbadでもコンボが繋がるアイドルが居ればもっと楽にできたかも。

MASTERは一通りクリアしてみた限りの感触では、フルコンできるのはLv26までぐらいが限界点かな。
MASTER+のフルコンは多分無理。
iPhone SEで親指縛りだと。

一応、iPad(mini 2 retina)も持っているので、そっちでやればMASTERまでの全曲フルコンもできそうな気がしています。ただし、iPadの方は主に片手縛りで遊ぶ用に別アカウントで使用中。そろそろ今iPhoneで使っているメインアカウントに統合して、iPadで縛り無しのガチプレイをすべきかもしれない。


・・・息抜きとは・・・


とりあえず、無料石が多すぎて、ガチャを引かなければ延々と遊べてしまうのがマズイ。
という訳で、適当にガチャを引いて有り余っている石を潰し、スタミナが無くなったら(課金しなければ)プレイできないようにしようかと考え中。

2016年9月25日日曜日

xcode 8.0 で clang-format を使えるようにする方法

xcode 8.0 でプラグイン周りの仕様がだいぶ変わってしまったようで、今まで外部プラグイン(Alcatraz)で入れていたclang-formatが使えなくなった(参考)らしい。という訳で、Alcatrazを使わずにxcode 8.0に新しいプラグイン方式に対応したclang-formatを探してみて、幾らか方法が見つかったのですが、どれも面倒くさそう...

まぁ、Alcatraz自体、元から面倒くさかったんですよね。

xcodeをアップデートする都度、一時的に使えなくなったりするので。

という訳で、
・xcodeのアップデートに動じず
・commit時に漏れなく簡単に全ソースにclang-formatを実行でき
・楽であること
という全ての条件を満たす方式を考えることにしました。

その結果、
「普通にmakefileで書くのが一番楽では?」
という結論に至る。

という訳で、私のxcode projectでmakefileを使ってclang-formatの実行を自動化したやり方を書いておきます。

まず、xcode projectのディレクトリ直下に以下のようなシェルを作成

■format.sh
#!/bin/sh
echo formatting: $1
clang-format -assume-filename=.clang-format <$1 >.work
diff .work $1 >/dev/null
if [ $? -eq 1 ]
then
cat .work > $1
fi

\rm -f .work


このシェルがやっていることは、
1. 引数に指定されたソース に clang-format を掛けたソース(.work)を作成
2. 元ソース と .work を比較
3. 差分があれば元ソースの内容を .work の内容に書き換える
ということ。
毎回無条件でclang-formatを掛けてしまうと、差分ビルドに時間が掛かってしまうので、clang-formatの結果変化があるソースのみを書き換える感じです。

そして、同ディレクトリに以下のような makefile を作成

■makefile
HEADER = $(shell for file in `find . -name *.h`;do echo $$file; done)
C_SOURCE = $(shell for file in `find . -name *.c`;do echo $$file; done)
CPP_SOURCE = $(shell for file in `find . -name *.cpp`;do echo $$file; done)
OBJC_SOURCE = $(shell for file in `find . -name *.m`;do echo $$file; done)
SOURCES = $(HEADER) $(C_SOURCE) $(CPP_SOURCE) $(OBJC_SOURCE)

all:
    for SOURCE in $(SOURCES); do make format SRC=$$SOURCE; done

format:
    @sh format.sh $(SRC)


上記のmakefileでは現在のカレントディレクトリ(find .)から拡張子 .h .c .m のファイルを検索して見つけたリスト(SOURCES)を作り、そのリスト内のファイルをひとつづつ先程のシェル(format.sh)に指定して実行するという感じのものです。

あとは、git commit をする前に一発makeを叩けば、全ソースのコードフォーマットが掛けられるという感じになります。(findの所はプロジェクトによっては若干書き換えが必要になることがあるかもしれませんが)

今開発中の Invader Block 6 のプロジェクトでこの makefile を叩いてみた結果は以下のような感じです。
$ make
for SOURCE in IBLOCK6/AppDelegate.h IBLOCK6/ball.h IBLOCK6/bird.h IBLOCK6/bomb.h IBLOCK6/bonus.h IBLOCK6/check.h IBLOCK6/dot.h IBLOCK6/draw.h IBLOCK6/enemy.h IBLOCK6/ft.h IBLOCK6/game.h IBLOCK6/hanabi.h IBLOCK6/hit.h IBLOCK6/laser.h IBLOCK6/player.h IBLOCK6/replay.h IBLOCK6/stage.h IBLOCK6/teki.h IBLOCK6/utility.h IBLOCK6/vgs2.h IBLOCK6/VGSLayer.h IBLOCK6/VGSView.h IBLOCK6/ViewController.h IBLOCK6/wall.h IBLOCK6/ball.c IBLOCK6/bird.c IBLOCK6/bomb.c IBLOCK6/bonus.c IBLOCK6/check.c IBLOCK6/dot.c IBLOCK6/draw.c IBLOCK6/enemy.c IBLOCK6/game.c IBLOCK6/game_lv1.c IBLOCK6/game_lv2.c IBLOCK6/game_lv3.c IBLOCK6/game_opening.c IBLOCK6/game_ranking.c IBLOCK6/game_result.c IBLOCK6/game_title.c IBLOCK6/hanabi.c IBLOCK6/hit.c IBLOCK6/laser.c IBLOCK6/player.c IBLOCK6/replay.c IBLOCK6/stage.c IBLOCK6/teki.c IBLOCK6/utility.c IBLOCK6/vgs2api.c IBLOCK6/vgs2i.c IBLOCK6/wall.c IBLOCK6/AppDelegate.m IBLOCK6/main.m IBLOCK6/VGSLayer.m IBLOCK6/VGSView.m IBLOCK6/ViewController.m; do make format SRC=$SOURCE; done
formatting: IBLOCK6/AppDelegate.h
formatting: IBLOCK6/ball.h
formatting: IBLOCK6/bird.h
formatting: IBLOCK6/bomb.h
formatting: IBLOCK6/bonus.h
formatting: IBLOCK6/check.h
formatting: IBLOCK6/dot.h
formatting: IBLOCK6/draw.h
formatting: IBLOCK6/enemy.h
formatting: IBLOCK6/ft.h
formatting: IBLOCK6/game.h
formatting: IBLOCK6/hanabi.h
formatting: IBLOCK6/hit.h
formatting: IBLOCK6/laser.h
formatting: IBLOCK6/player.h
formatting: IBLOCK6/replay.h
formatting: IBLOCK6/stage.h
formatting: IBLOCK6/teki.h
formatting: IBLOCK6/utility.h
formatting: IBLOCK6/vgs2.h
formatting: IBLOCK6/VGSLayer.h
formatting: IBLOCK6/VGSView.h
formatting: IBLOCK6/ViewController.h
formatting: IBLOCK6/wall.h
formatting: IBLOCK6/ball.c
formatting: IBLOCK6/bird.c
formatting: IBLOCK6/bomb.c
formatting: IBLOCK6/bonus.c
formatting: IBLOCK6/check.c
formatting: IBLOCK6/dot.c
formatting: IBLOCK6/draw.c
formatting: IBLOCK6/enemy.c
formatting: IBLOCK6/game.c
formatting: IBLOCK6/game_lv1.c
formatting: IBLOCK6/game_lv2.c
formatting: IBLOCK6/game_lv3.c
formatting: IBLOCK6/game_opening.c
formatting: IBLOCK6/game_ranking.c
formatting: IBLOCK6/game_result.c
formatting: IBLOCK6/game_title.c
formatting: IBLOCK6/hanabi.c
formatting: IBLOCK6/hit.c
formatting: IBLOCK6/laser.c
formatting: IBLOCK6/player.c
formatting: IBLOCK6/replay.c
formatting: IBLOCK6/stage.c
formatting: IBLOCK6/teki.c
formatting: IBLOCK6/utility.c
formatting: IBLOCK6/vgs2api.c
formatting: IBLOCK6/vgs2i.c
formatting: IBLOCK6/wall.c
formatting: IBLOCK6/AppDelegate.m
formatting: IBLOCK6/main.m
formatting: IBLOCK6/VGSLayer.m
formatting: IBLOCK6/VGSView.m
formatting: IBLOCK6/ViewController.m

2016年9月1日木曜日

開発状況2(IB6)

ステージ2をもりもり作成中。
Invader Block variatio 6 のステージ2は Battle Marine 仕様です。
ゲーム内容については、だいたい旧Battle Marineを去就した形になっています。敵の種類やグラフィックは流用。
プログラム的な部分は完全にゼロから作り直していて、コンボの爽快さなどを追求。

今週夏休みなので今日中ぐらいにステージ2を完成させるつもりですが、やや遅れ気味。

ステージ1(Invader Block仕様)からステージ2に進むまでの演出を凝らせていたら、作り始めるまでに結構時間が掛かってしまいました。

それ以上に、このタイミングでデレステを始めてしまい、それに時間が取られた感が否めない。
本当はコーヒーブレイク用に始めたのですがね。
ソシャゲって体力回復待ちがあるから、体力が尽きるまでプレイして、回復するまでの間に開発。そして、回復したらまたプレイみたいな風にすれば割と良い感じなんじゃないかと。
しかし、実際には無料石を回収し、石を使って(ガチャには回さず)体力回復してプレイを延々と繰り返し、そのコーヒーブレイクにIB6の開発を進めていた感が否めない。
夏休みはあと4日(木、金、土、日)で、土曜は予定があるから、流石に木、金は石を使った回復は自重するなどの縛りを入れねば。

2016年8月24日水曜日

開発状況(IBV6)

タイトル画面やらチュートリアルをザックリ作成。
システム的には NSWindow でのフルスクリーンモード(安定している方)にしておきました。
ウィンドウモードはナシです。

チュートリアル(というかHOW TO PLAY)は、昨今のチュートリアルと違ってかなりアッサリしたもの。アーケードゲームのインストに書いてある相当の情報量以上は入れないつもり。

ゲーム本編としては、ステージ1がだいたい完成したというところ。

Invader Block 5からの要素的な意味での変更点は、
・画面上部に吹き抜け(左右ループ)を入れてみた
・画面下にブロックを配置
・(メダルを消費して)ショットを撃てる
・(Battle Marineの)鳥が登場する
といったあたり。

かなりカオスな感じです。
難易度的なところはより一般向けに低くしています。
インベーダーを数グループ撃破するとステージクリアになって、Battle Marineシステムのステージ2に進む予定。

ステージは、
・Invader Block
・Battle Marine
・RENCON
・Invader Block(裏)
・Battle Marine(裏)
・RENCON(裏)
の全6面にするつもりで、特定条件を満たせば周回ループ(最大2周)できるようにしようかなと思っています。まだステージ1までしか作っていなくて、そこで色々と鬼調整をしているところなので、ステージ2以降は完全に未定。

ちなみに、今のところMac版しか作っていないですが、Windowsへの移植もすぐにできます(ゲーム本体はVGSで書いているので技術的には移植は一瞬でできる)。今秋ぐらいまでにMac AppStoreでの販売開始が目標で、その後Greenlightに出して成功すればSteam版(Steamのスコアボードやアチーブメントに対応したもの)を作ろうと思っています。(要するにGreenlightを通らない限りWindows版は世に出さないつもり)

課金要素としては有料販売のみで追加課金ナシ。
Mac AppStore版は1usd、Steam版は5〜10usdの間ぐらいにする予定。