2012年5月31日木曜日

どの程度、保持したものか

SHOT04(NOKOGI Rider)のローカル・スコア保存のシステム周りを実装中。
とりあえず、現時点では下図のような感じ。

画面上のRANK/TYPEで、スコアランキングを確認するRANK/TYPEを選択できます。
スコアは、RANK/TYPE別に16位まで保存。
ランキングの保存情報は、プレイ日付、スコア、到達ステージ(オールした場合はC)。
概ね東方と同じ方式だと思います。
この辺は、あまりカスタマイズ余地が無いかもしれません。
ちなみに、プレイヤのエントリ名はランキングでは表示なしの仕様。
エントリ名は、リプレイ保存でのみ設定する仕様にしました。
(ランキングは端末単位のローカル情報なんだから、設定は無意味と判断)

あと、[DETAIL]ボタンを押せば、統計情報を表示する感じにします。
統計情報は未だ仕様を決めてないのですが、
①ゲーム本編のステージ別プレイ回数 & 2面以降の到達率
②ゲーム本編のクリア回数(クリア率)
③プラクティスのプレイ時間(ステージ別)
④プラクティスのプレイ回数(ステージ別)
を表示する予定。
もちろん、①~④はRANK/TYPE別で。

そんな沢山の情報を保持したら、ディスクがパンパンになるのでは?
と思うかもしれませんが、これら全部+@の情報サイズは、全部で3KBいきません。
だから、この情報でディスクを切迫することは無いです。

ディスクサイズで気を遣う必要があるのはリプレイデータの方。
デモプレイのリプレイデータですら11KB(無圧縮)もあるので・・・
リプレイデータは、保存時に圧縮すべきか検討中。

Androidなら問題にならない程度なんですが、iPhoneの場合、ローカルストレージのビット単価がかなりのボッタクリ価格なので。だから、少しでもディスクサイズが小さくなるように努力する必要があります。
現に、私がiPodのアプリを選ぶ時は、ディスク容量で第一のフィルタが掛けていますし。
もちろん、Androidでも気にしない訳ではないけど、iPodよりは若干緩いです。

2012年5月30日水曜日

スコアランキング

まだ、(ローカルの)ランキングは作ってませんが、プラクティスのスコア保存などの機能を実装したりしました。
こういう機能は、別に後から作っても良いのですが、システム周りのことは先に作っておき、後付で必要なデータや要素を追加していった方が良いもの(楽しいもの)ができると思っているので、早目に実装するのが吉です。(一度リリースしてしまうと、互換性の問題が生じるから、アップデートで更新できない場合が多々あるので、初期リリースまでに必要な要素を全て詰め込む必要があります・・・そういう場合、こういうやり方=自分で遊びながら必要なものを後付するのがベストです)

とりあえず、プラクティスモード(製品版のみ)では、RANK別×TYPE別×STAGE別にハイスコア+そのリプレイを記録する仕様でいこうと思っています。

あとは、プレイ時間やプラクティス時間をゲーム内時間(60フレームを1秒でカウント)で記録して、プレイデータ画面(製品版のみ)で、統計データやランキングを確認できるようにするつもり。

ちなみに、ランキングはネットワーク連動ではなく、ローカルのみ。
ネットワーク系の機能は実装しません。
ただ、将来的にはネットワーク経由でSHOT04(NOKOGI-Raider)のリプレイをアップできるスコアボードのようなものを作りたいのは山々なのですが、仮に作るとしても製品とは別のアプリで作ることになります。ゲーム本編では一切のネットワーク接続をしない方向です。
これは、私の個人的な趣向なんですが、ゲームの画面遷移などがネットワーク連携したがためにモッサリするのが嫌いなので、ゲーム本体は完全ローカル指向です。だから、ネットワーク接続するのなら、専用の別アプリで作る形になります。

そういえば、スコア関連の処理を実装していて思い出したのですが、iPhoneなら、標準でGameCenter機能を利用することで、簡単に全国ランキングみたいなものをアプリで実装できるのですが、それもやりません。

CaveのiPhone版「虫姫さま」がGameCenterのスコアランキングと連動していて、始めた当初の頃は「これは、面白い!」と思ったのですが、明らかにバグかハックして出したハイスコアが、ランキング上位を独占していたので、かなり微妙。
まぁ、バグがあることそのものは(良くはないけど)問題ではありません・・・当然無い方が良いですが。
問題は、GameCenterのランキングが、バグで出したもの or 正規プレイの区別がつかないということ。
リプレイも込みで登録できるようにすれば良いのですが。
しかし、(GameCenterの仕様を調べた訳ではないから定かではないですが)そんなんに対応したら、サーバがパンパンになってしまうから、多分対応していないと思うので、仮にiPhone対応するとしても、GameCenterはやりません。

寧ろ、GameCenterへの対応は逆効果だと思ってます。
プレイヤーの8割は、ランカーではないという統計データが(私の脳内に)あり、自分のランクを過度に気にする人の割合は2割弱程度です。(8割の人は、ランクとかは別に「有っても無くても良い」と思っているものと思われます)
で、ランキング機能は、その2割弱の人が楽しむための機能なのですが、恐らく、その2割弱の人の大半は、正規のプレイでトップスコアを狙うことを目指しています。当然ながら、そういう方々は、バグプレイでランキングが荒らされることを嫌います。
つまり、2割弱の人が楽しむための機能なのに、2割弱の人の大半は(バグスコアに)ストレスを感じているので、正に誰得な機能。寧ろ、無い方が幸せになれる人の数が増えます。
そんな誰得機能が果たして要るのか?と考えれば、以下略。

2012年5月28日月曜日

マルチタッチの扱い

シングルタッチ専用のゲームでのマルチタッチの扱いについて、技術的なネタを書いておきます。
「シングルタッチ専用のゲームなのにマルチタッチ?」と思われるかもしれません。
しかし、シングルタッチ専用の場合でも、マルチタッチの扱いに関して、それなりの考慮が必要です。

例えば、下図のようにP1をタッチしている状態でP2をタッチした場合で考えます。

私が検証した環境では、P1がプライマリ、P2がセカンダリになりました。(個体差はあるかも)

そして、
(1) P1をタッチ
(2) P1のタッチを維持したまま、P2をタッチ
(3) P2のタッチを維持したまま、P1を離す
という操作をした時、(3)の瞬間、プライマリがP1→P2に変化します。

プライマリのみを拾っているシングルタッチのプログラムだと、「P1→P2のスライドを行った」という判定がされることになります。なので、ベクトル情報としてスライド量を拾っているアプリでは、直感的ではない動作をします。

例えば、「上方向にスライドした分だけジャンプをするアクションゲーム」であれば、画面下部=P1 & 画面上部=P2として、(1)~(3)の操作をすれば、スライドしていないのに大ジャンプができるという感じになります。

これを解決する処理方式として、マルチタッチ検出時は非タッチ状態と判定する処理方式が一番直感的かな?と思っています。「タッチしているのに非タッチ」というのは一見すると微妙な気がするかもしれませんが、これが一番自然な操作感覚が得られました(他の方式も色々と試したのですが)。

とりあえず、SHOT04(NOKOGI-Rider)がその処理方式で実装しているので、実際にどんな感じで動くか気になる方は、 SHOT04で遊んでみてください(・・・これが世にいうステマというヤツですかね?自分の技術紹介サイトで自分のゲームを宣伝する分には問題無いと思ってますが)

割と、「シングルタッチのプログラムではマルチタッチの考慮は不要」と思っている人が多いと思うので、参考までに紹介しておきました(かくいう私が、NOKOGI-Riderを公開する前の初期の頃にこれにハマりました)。

ちなみに私は、AndroidSDKについて入門書の類は読んだ事が無い(英語の公式マニュアル以外は見たことがない)からよく分からないのですが、入門書とかにはこういうネタが書いてあるのかも。
要は、「ちゃんと入門書ぐらい嫁」という話なのかもしれません・・・だが、断る。
私は、入門書や参考書の類の書籍を未だ嘗て一度も読破したことが無いから、買うだけ無駄です。
リファレンス的な用途なら、公式だけで十分。
公式は英語だけだから、読むのが若干面倒ですが。

中々快調

2面の作成が中々快調です。
1匹ザコを作りました。
この調子でどんどんザコを増やしていきます。
1面の時と違って、システム面では色々と完成しているから、ゲーム本質部分を組み立てていくだけなので、1面を作っていた時よりは幾分か楽です。ただ、そのゲーム本質部分が問題なんですが。

ちなみに、SHOT値の導入により、レーザーをディスってしまわないように色々と工夫しています。
レーザーでの稼ぎ所もちゃんと作っておきたいと思っているので。
要は、レーザーを打てば弾消しができるので、弾を大量に吐く敵を作れば、そこがレーザーでの稼ぎ所になる仕様。なので、弾幕地獄を作れば割と簡単に実現できます。

とりあえず、ウィークデーに開発時間が確保できるようになったので、1日1~2匹程度のペースでザコを作って、今週末には二面の大枠を仕上げたい所。

最初の夏休みまでには3面ぐらいまでできていればベスト。
ちなみに、今年は夏休みが2回あるから、絶好の開発日和です。
夏場の開発はしんどいですが。

あと、ようやく体験版が海外でもDLされるようになってきました。
中東、米国、欧州、アジアあたりでワールドワイド且つ疎らな感じで。
ただ、VGSの一番のお得意様であるインドネシアのDL数がゼロでしたが・・・残念。
ちなみに、VGSのDL数1位は米国で、2位がインドネシアです。(日本は3位)
何故、VGSがインドネシアで好評(?)だったのかは謎。
音楽性が肌に合ったのかな?

2012年5月27日日曜日

2面を作成する前作業

本業の方が、労使協定の関係で、半強制的に時間を確保できるようになったので、開発作業を再開。
英国風に言えば、「本業が楽になら、副業を忙しくすれば良いじゃない」・・・でしょうか。
過労で倒れる前までには、SHOT04を完成させたいです。

しかし、2面を作成する作業に入る前に、色々と準備しなければいけないことがあります。
主に、ステージプラクティスの仕様を決めること。
2面以降をテストする上で必須なので。

私は、基本的に画面を描きながら仕様を考えます。
概ね仕様が纏まりつつあります。

まだ枠線などは書けてませんが、上図のような感じ。
ステージ単位でハイスコアとハイスコア取得時のリプレイを保存する仕様にします。
そして、リプレイボタンを押せば、ハイスコア取得時のリプレイを確認できる・・・という具合。
あと、画面遷移は煩わしいので、ランクと自機の選択は同一画面中でできるようにします。
リプレイはランク別には保存するとして、タイプ別に保存すべきか迷い所。
ランク別なら3×5=15パターンで済みますが、ランク+タイプ別だと3^2×5=45パターン。
1ステージ分のリプレイなら、大したサイズにはならないと思うから、問題無い良いかな?

対応機種

Android版の大復活(怒首領蜂)が対応機種を拡大したようで、私の機種(モトローラのRAZR)でも遊べるようになったようです・・・既にiPhone版を持っているから、買わないと思いますが。ただ、CAVEには期待しているし、小額なものなので、お布施として買っておいても良いんじゃなかろうかとも思っています。

しかし、Androidだと対応機種というのは結構大きな壁ですね。
機種が多様なので。

私の場合、機種については問題無いのですが、AndroidのOSバージョンには悩まされました。
私のゲームの場合、Android 2.3.3以降であれば、市場に出回っているほぼ全ての端末で動作できます。
しかし、本当は、普及バージョン(Android 2.2以降)にしたかったのですが。
ただ、Android 2.2だとOpenSLが使えないので、音関係では何もできないといっても過言ではないです。

Android 2.2が普及してしまった所為で、Androidのゲームには音関係がショボイものが多い...
ゲームを構成する要素の中で、音の重要度はかなり高いと思っているのですが。
Android 2.3が初期の普及であったのなら、状況は大分違ったと思います。
というより、Javaという時点で、Androidでアクションゲームを動かすことは想定外なんでしょうけど。
Javaを積むこと自体には、開発コストを抑える等のそれなりの意義が有ると思いますが、メインアーキテクチャをネイティブにして、ネイティブでの品質を高めてからJavaを積むのが妥当です。もちろん、それだとx86やARMといった石の互換性の影響を受けてしまうのですが、それなら機械語部分を仮想化すれば良いだけの話だと私は思っています。例えば、フィジカルな石はx86だけど、ロジカルな石をARMにして、OSよりも上位レイヤー(ミドルなど)を全てフィジカルロジカルな石(ARM)用にコンパイルして動かすことを前提とすれば、Javaのようなコンピュータのプログラムを作るのに適さない言語を使う事無く、石の差異を吸収できる訳です。(一見するとオーバーヘッドが高いやり方ですが、Javaよりは大分マシ)

・・・そもそも、Androidの場合、プラットフォーム差異の吸収方法に関する発想の基点(Java万能説を信じた所)から間違っていたと思うので、今更どうにもなりませんが。

といより、ヘタに差異吸収を考えるより、Appleのように割り切ったやり方が正解だと思いますが。
上述のような技術の開発コストよりも、市場を制圧すればそれしか無くなる訳なので、安く済みます。
もちろん、市場を制圧することが大変なんですが。
しかし、そこら辺のことを、Appleの前の経営者はよく分かっていたんじゃないかと思います。
そこら辺の事情(=良いものが普及するのではなく、普及したものが良いものになるという定説)により、最初は大負けしていた訳なので。もっとも、今も昔も、私はAppleが嫌いですが。

価格設定

SHOT04の価格設定ですが、値段が高すぎて買わないという人が出ないよう、販売開始時点では最低価格に・・・と、思ったのですが、最低価格にすると、InvaderBlock2と同じ値段になってしまうから、InvaderBlock2の税抜き価格(99円)から+1円値上げして、100円(税抜き)を初期時点の価格にしようと思っています。

あんまり値段に関しては低く設定すべきではないと思っていますが。
多分、小額に設定した方が儲かると思うのですが、ダンピングは良くないです。
幾ら作っても、タダで何でも手に入ってしまうと、作る人が居なくなってしまい、何も作られなくなる・・・
・・・という状況を(PCで)見てきたので、それなりの危機感を持っています。

ただし、「後から値段を下げる」というのは絶対にNGだと思っていますが。
理由は、その行為は早い時期に買ってくれた方々に対する裏切りだと思っているので。
これは、去年SHOT03を売り出した時にそう思い、定めたポリシーです。
だから、SHOT03が如何に売れなくても、値下げはしないし、フリー化もしません。
SHOT03は価格設定を完全にミスったのですが。そして、一本も売れていないから、フリー化しても誰も損しませんが、そういう前例を作ってしまうことがアウトだと思っています。

しかし、逆に「後から値段を上げる」のは、競争原理に則っているので問題のないことだと思います。
SHOT04の場合、体験版という形で、ライト版相当の商品を先行配信しているから、販売当初は100円(税抜き)で販売しておき、体験版をインストールしてくれている方々にアップデートで製品版の完成を通知後、一定期間経過したら標準価格に引き上げるやり方が一番良いのではなかろうか・・・と、思案中。

ですが、標準価格は、まだ決定してません。
中々難しいです。


「キャンペーンです」とか言って、何の悪気も無く値下げセールを『後出し』でやったりしている所は多くありますが、そういうのを見ると「如何なものか」と思ってしまいます。在庫管理が不要で(物理的な意味で)腐らない電子的なもの(情報)で商売する場合、「後から値下げ」は禁忌だと思っていますが・・・私の感覚がオカシイのかな?

物理在庫があったり、消費期限のあるものの場合、ソレが捌けなければ余計な在庫管理費用が掛かったり破棄の必要がでてくるので、値下げ販売はある程度やむを得ません。半額弁当などのように、それが常態化するのは問題がありますが。(※蛇足ですが、「常態化している」ということは、つまり、それが価格に転嫁されていて、それ自体を客寄せパンダみたいな意味合いで使っている場合が殆どです。なので、標準価格で購入すると、必然的に半額販売用の折込価格を消費者に負担させていることになります。その点を消費者が理解した上で、標準価格の弁当を購入するのなら問題ありませんが、そうでない場合は問題があります。)

2012年5月26日土曜日

海外・・・

SHOT04の体験版のDL数が300に到達しそうな感じで、中々好調です。
インストール率は、57%ぐらいで、かなり低いですが・・・
SHOT04は、他のAndroidゲームと比べて、ディスク容量が無茶苦茶小さいから、「ディスクの無駄」という理由は無いと思います。つまり、43%の人は「つまらない」という理由でアンインストールした・・・ということだと思います。多分。

しかし、それ以上の懸念は、海外でのDL数がサッパリだということ。
SHOT04の場合、日本国内よりも海外でウケると思っているのですが、それ以前にDLして貰えていないという状況・・・現時点で海外のインストール数は、2件。

VGS chiptune musicは、海外のユーザーが圧倒的に多いので、ちょっとばかり曲を追加しつつ、VGS chiptune musicの画面中で、SHOT04の宣伝を入れてみるアップデートをしてみました。

ちなみに追加した曲は、SHOT04の4面で使う予定。

2012年5月20日日曜日

NOKOGI Rider / version 0.02(Trial) has released

SHOT04(NOKOGI Rider)のバージョン0.02(体験版)が無事リリースされました。
今、GooglePlay経由で私のスマホにインストールできることを確認。
問題ありません。
Have fun!

今回のアップデートの目玉は、
①自機の種類が3種類に増えたこと
②スコアシステム(SHOT値)の導入

Type-Cは、アンチパターン(=初心者)向けに作ったつもりですが、攻撃が分散されるので、中ボス戦でレーザーを織り込まないと、逃げられてしまうから、それなりにパターンを組むことが要求されます・・・なので、完全に初心者向けとは言い難くなってしまったかも。(若干、誰得な機種)
Type-Aが一番バランスが取れていて、楽しめる筈。
個人的には、Type-Bが一番楽しい。



スコアシステム(SHOT値)は、一見すると地味なアップデートですが、かなり重要。

私の個人的な思いとして、「上級者にレーザーではなくショット主体でプレイして貰いたい」というものがあり、上級者がレーザーでパターンを組むスタイルを回避するために設けました。このAndroid用のSTGとして特化した特長であるレーザーの仕組みを、私自身がディスるのは、若干微妙な気分ですが、実はそうすることの方が理に適っているような気がしたので、実装しました。
レーザーの仕組みが誕生したそもそもの目的は、ボンバーに替わる回避処置としてです。
殆どのSTGには、回避処置として、ボンバーがあります。
しかし、ボンバーを実装するには、ボタンなどの発射用のインターフェースが必要になります。
しかし、私はAndroidやiPhone用のゲームでは、絶対にボタンは入れるべきではないと思っています。
そして、ボタンを使わずに実現できる回避処置として考え付いたのが、この仕組みです。
あくまでも回避処置なんだから、使わなければ得点を稼げるようにする事が自明の理・・・です。

そういえば、そういう方向にしたのだから、レーザー発射中は無敵にしてしまった方が良いかも。
(現状、レーザー発射中にも敵や敵弾との当たり判定があります)

2012年5月19日土曜日

SHOT04 - NOKOGI Rider / Trial ver 0.02(予告)

色々な対策やらエンハンスを施した、SHOT04 - NO・KO・GI Riderの体験版バージョン0.02を、不測の事態が起こらなければ、明日中にはアップロードする予定です。

何が変わる予定なのかは、いつの間にか開発状況を公開するページになった記事(http://suzukiplan.blogspot.jp/2012/05/nokogi-rider-how-to-play.html)で細かく書いてあります。
ほぼ、my memoなので、細かすぎるかもしれないですが。

ホーミングはヤメ

Type-Cをホーミングにするつもりでしたが、あまり美しくないので、ヤメにしました。

こんな感じで纏まりました。
Type-AType-BType-C

Type-A:
中範囲のショット&中程度のスピードの移動性能を持つ機体。
バランスが最も良いので、中級者向け。

Type-B:
狭範囲のショット&高速スピードの移動性能を持つ機体。
たぶん、一番コレが稼げると思います。
でも、パターンを記憶しないとキツイ。

上級者向け。


Type-C:
広範囲のショット&低速スピードの移動性能を持つ機体。
初級者向けと思いきや、攻撃力が最も低いので、M向けかもしれません。
初級者向けのつもりだったのに・・・残念な機体。
そういうのが1体ぐらいあっても良いんじゃないでしょうか。

ちなみに、レーザー発射時の移動速度は全機種共通。

あと、ショットの色で個性を出そうとしたのですが、自機のSHOT=黄色という前提で背景や敵、敵弾の色彩設定をしていたので、ショットの色は皆、黄色系で統一。手抜きではありません。ショットの発射口や当った時のアニメーションパターンを新設する必要が無いから、統一した方が楽です・・・が、本当に手抜きではありません。(大事なことなのでry)
本当に最初は色を分けて描いたのですが、テストプレイしてみたら、黄色系じゃないと相当見難かった...



Select your battle fighter.

とりあえず、自機選択できるようになりました。(まだ、公開してませんが)
当初、自機固定(Type-Aのみ)でしたが。
とうより、私が過去に作ったシューティングゲームは、一貫して、「自機1種類」固定でした。
プログラムを作るのは大した手間ではないのですが、バランス調整が中々手間になります。

そして、バランス調整が手間な割に、余り遊び手としては有っても嬉しく無いと、思っています。
それなら、その部分を省いて、本編完成を早めた方が良いのではなかろうか・・・と。
ただ、それは作り手の論理に過ぎないような気がしないでも無いので、とりあえず今回は3タイプにする方向で。そもそも、あんまり強く拘る必要がある部分ではないとも思っているし、外部からご意見も頂いたことなので。

2012年5月18日金曜日

自機

SHOT04(NOKOGI Rider)の自機の種類を1種類→3種類に拡張してみるテスト中。
TypeA(上):バランス型(現状の体験版v0.01で操作できる機体)
 - スピード:中
 - 攻撃範囲:中(W-Shot)

TypeB(中):攻撃型
 - スピード:高
 - 攻撃範囲:狭(Needle)

TypeC(下):パターンとかが苦手な人向け
 - スピード:遅
 - 攻撃範囲:広(Homing)

という感じで調整する予定。

本当は、自機=1種類というスタイルのつもりでしたが、要望があったので。
この改造+既知の細かい問題等を一通り直したら、v0.02をアップデートするつもりです。
今月中にはアップしたいところ。

2012年5月16日水曜日

音のON/OFF

アプリ起動時の初っ端で1回、音のon/offを選択する感じにしてみようと思っています。

かなり地味な画面&機能ですが、スマホのゲームの場合、これはかなり重要だと思います。

マナーモードだと思って安心して電車でゲームを起動して焦るのは、誰しもが通る道。(私だけ?)
スマホの場合、マナーモードでもアプリの音は鳴るんですよね。
冷静に考えれば、それが正しいスペックだと思いますが。
ただ、所謂ガラパゴス携帯電話はそうではなかったので、引っ掛かり易いトラップだと思います。

SHOT04の体験版は、次のアップデートで入れます。
InvaderBlock2は、要望があれば入れます。

設定画面

平日は開発に回せる時間がサッパリ無いのですが、SHOT04(NOKOGI Rider)の入力方式をスライドとポイントで選べるようにするための設定画面などを作ったりしてみました。
現在配布中の体験版の仕様は、縦方向はスライド、横方向はポイント。
・ポイントというのは指した場所へターゲットを移動。
・スライドというのはスライドした分だけターゲットを移動。
私は現状仕様が一番入力し易いと思っているし、「今のままで入力し易い」という感想も頂いているので、現状仕様は保ちますが、オプション化しておけば、「怒首領蜂みたいなスライド方式の方が入力し易いのに!」という方も不満解消できるから、必要な機能です。たぶん。

Vertical(縦方向)のポイントについては、指した場所よりも幾らか上をターゲット目標位置にすることで、自機と指が重ならないようにします。(縦横比が1:1.5のディスプレイなら、画面下に余白があるので、その仕様でも画面最下部まで移動可能)

2012年5月14日月曜日

プレイ時間

怒首領蜂大復活で、安定的に2周目(表だけど)に突入できるようになったのですが、そうなると、1回あたりのプレイ時間が長くなり、1回のプレイが重くなってくる。時間を持て余している場合は丁度良いですが・・・。

私の場合、それでだんだんやらなくなる傾向がある。
そういった意味では、虫姫さまのUltraモードは長く楽しめるかも。
1回のプレイ時間はALLでも15~20分程度が良いと思っていたりします。

SHOT04は15分程度を目標。
5ステージで15分だと、1ステージ平均3分が目標。

2012年5月13日日曜日

スコアシステム(SHOT値)

まだ、素案の段階ですが、SHOT04のスコアシステムを色々と弄っています。
SHOT値というものを検証中。
現段階で検討中のルールは、
・ショットで敵に連続して打ち込むと、SHOT値(画面左上)というのが上昇するようにします。
・ステージ開始時点は、1回の打ち込みあたり1増加ですが、+1を取れば増加値が上昇。
・一定フレームの間、ショットの打ち込みが無い場合、1フレーム毎に現在のSHOT値÷10+1減算。

減算時に、SHOT値÷50×10のスコアが加算した場合、
・SHOT1,000の場合、トータル1,750点(50フレームでSHOT値=0になる)
・SHOT10,000の場合、トータル19,600点(72フレームでSHOT値=0になる)
・SHOT100,000の場合、トータル199,480点(93フレームでSHOT値=0になる)
・SHOT1,000,000の場合、トータル1,999,330点(115フレームでSHOT値=0になる)
という感じになります。

得点とかSHOTの最大数など、まだ、色々と調整中ですが。
ちなみに、取得した+1の数は各ステージ毎にリセットする仕様にする予定。
あと、レーザーはSHOT値のカウント対象外にする予定。
(稼ぎ=ショット、回避=レーザーというシンプルなスタイルにしておきたい)

表2周ALL

漸く、大復活の2周目にINできた。。
やり始めてから1週間も掛かった・・・まだ、表だけど。
ついでに、1コインでいけたのは2-3面までだけど・・・。

スコアは100億に到達せず。(アレを初見で繋ぐのは無理がある...)
現在のランク(@GameCenter)は、12,649人中222位。(※機種:Type-A・PowerStyle/モード:Arcade)
スコアは82億5604万2823点。

蜂アイテム35個という条件は、1周目を全部裏でやれば結構簡単でした。
保険が各ステージ2つあるので、
①1面の裏突入の安定化
②中ボスをパターン化
③ハイパーの任意発動+発動位置のパターン化
④蜂アイテムの位置を概ね記憶
ができれば、結構安定的に行けそうな感じ。(表は)
裏は④を完璧にするだけなので、その内に間違って行けるかもしれません。
あと、iPhone版だとハイパー(③)がデフォルトでオート発動なんですが、これをOPTIONで任意発動にできることにもう少し早く気付けば、もう少し早く行けたようです。(てっきり、オート発動のみだと思っていたので、大分難しかった)

各ステージのプラクティスができるようになったので、100億到達は容易そうです。
表2周の1コインクリアは、私のスペックで達成できるかどうか、かなりギリギリ。
裏2周は多分、無理。

2012年5月12日土曜日

遅くなった?

昨日、怒首領蜂大復活(iPodTouch版)をアップデートしたら、処理落ちが激しくなった・・・ウェイト?
まぁ、確かに楽になったけど、それがデフォルトというのはちょっと微妙な気分。

現在のランク(@GameCenter)は、12,638人中252位。(※機種:Type-A・PowerStyle/モード:Arcade)
スコアは76億7711万4430点。(1周目ALL・2周目突入せず)
100億突破からが上級者の仲間入りのようなので、まだまだヘタレです。
もっとも、まだ稼ぐプレイではなく、とりあえずクリアを目指すプレイですが。
しかし、Type-A・PowerStyleで100億突破している人は全体の1~2%程度しか居ないのか。
2周目突入条件は把握したので、とりあえず表2周目ALLが次の目標。

あと、虫姫さま(初代)を購入。
虫姫さまはゲーセンも家庭用もやったこと無い完全な初見。

オリジナルモードは、初見でノーミスクリア。
マニアックモードは、初見でノーコンティニュークリア。これでマニアックだと・・・?
と思っていたのですが、ウルトラモードは、初見で3面ゲームオーバー。
マニアックまではパターン化は不要ですが、ウルトラからはパターン組まないとダメっぽいです。
妙に東亜臭が漂っていて、中々良いです。

GooglePlayでの販売価格

本業が多忙過ぎて、今週は平日にSHOT04の開発がまったくできず。

なにやらGooglePlayから連絡が来ていました。
どうも、5/21から、以下の国でGooglePlayでの販売価格が税込み価格になるらしい。
Australia, Austria, Belgium, Czech Republic, Denmark, Estonia, Finland, France, Germany, Greece, Ireland, Italy, Israel, Japan, Luxembourg, Mexico, Netherlands, New Zealand, Norway, Poland, Portugal, Singapore, Slovakia, Slovenia, Spain, Sweden, Switzerland, United Kingdom

ポイントは、以下。
・元々、アプリ開発者が税込み価格を設定していたものは自動的に税抜き価格に戻る
・アプリ開発者が何もしなくても自動的に適用される
つまり、元々上記の国で税込み設定をしていたアプリの価格には変化は生じませんが、税抜き価格のアプリであれば、日本であれば5%高くなるということだと思います。


詳細は以下。(※英語です)

http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=2611840

良い傾向だと思います。

この制度自体、取引のルール上必要な処置なのでやって当然ですが、それ以上に副次的な効果がありそうな気がするので。この制度の副次的な効果の影響で面白い事案が出れば、GooglePlayでの国際取引の整備が一気に進むかも・・・と、期待。(私の思い過ごしかもしれませんが)

2012年5月6日日曜日

カンは戻らず

ほぼ一日、大復活をやり込んで、概ね操作に慣れてきました。
まだ、ArcadeモードのNormalの5面中盤あたり(回転する所)でゲームオーバーになってしまいますが。
機体はType-A、パワースタイル(初期ボム0のやつ)。
スマホ(iPod touchだけど)だと、ボムり難いので、ボムレスの方が楽。

ショットとレーザーの切り替えはシステム的(弾消しやレーザー防御の為)に頻繁に必要なのですが、その点は左手でiPodを持ち、右手人差し指で操作し、左手親指でショット&レーザーの切り替えをする感じにすることで、安定的に操作できます。ブーストは最初っから入れっぱなし。(左利きの人だと操作し難いかと思ったら、ちゃんとソフトボタンを右側に移動できる仕様でした)

個人的に、シューティングにパワーアップやボムは無くても良いんでないかと思っていたので、このパワースタイルというやつは中々良いです。ボムがあると、ボムがあることを前提に難易度が設計されてしまうので、ノーボムの敷居が無茶苦茶高くなりますが、最初っからボムが無ければ、私のような中級者でも安心してノーボムアタックができる訳です。

スコアは51億ぐらい。
それが多いか少ないのかは、やり込んでないからまだよく分かりませんが、GameCenterのランキングだと、約12,000人中600位前後なので、まだまだ全然のようです。(そもそも、まだ稼ぎは一切意識せずにプレイしている状態)

スコアインフレはあんまり良くないと思います...
たぶん、多くても10億未満(999,999,990)ぐらいが一番覚え易い気がします。

Contents rating変更

昨夜リリースしたNO・KO・GI Rider(体験版)について、Googleから
「コンテンツレーティングがポリシー違反だから変更したぞ!!」
という感じで怒られました。

コンソールで確認したところ、コンテンツレーティングが「全対象」から「低」に変更されていました。
そして、「全対象」は無効化された状態(選択不可)になってました。

要因は、暴力に関するレーティングポリシーに反している為とのこと。
REASON FOR CONTENT LEVEL CHANGE: Violation of the Google Play content rating policy

以下、暴力に関するレーティングポリシーより抜粋。

刺激の少ないアニメーションや架空の暴力描写を含むアプリケーションは、「ユーザー成熟度 - 低」かそれ以上にレーティングする必要があります。リアルな暴力描写や刺激の強い架空の暴力描写を含むアプリケーションは「ユーザー成熟度 - 中」か「ユーザー成熟度 - 高」、生々しい暴力描写を含むアプリケーションは「ユーザー成熟度 - 高」にレーティングする必要があります。不必要にリアルな暴力描写は Google Play では禁止されています。



Invader Block 2のレーティングは「全対象」で文句を言われてませんが、念のため、引き上げておく方が無難かな?と思い、「低」に引き上げておきました。一応、エイリィアン相手でも架空の暴力描写には違いない・・・というより、ゲームは、全般的にレーティング「低」以上を設定する必要があるのかも。繰り返しこの警告を受け続けるデベロッパアカウントは停止されるとの事なので、気を付けた方が良さそうです。
VGS Chiptune Musicとかは、大丈夫だと思いますが。

しかし、昨日アップして今日早々に怒られたということは、結構DL数が伸びているのかな?
Googleが独自にチェックしている可能性も無くは無いでしょうけど、第三者からの報告の方が可能性が高そうな気がするので。DL数は1日経たないと分からないので、まだ不明。

追記:警告メールに「GooglePlayチームによる定期的なレビューにより」と書かれていたので、Google自身によるチェックなのかも。Googleからのメールは全般的に英語で来るから、結構ドキドキします。(英語だとなんて書いてあるかは分かり難いけど、怒っているかどうかは分かります)

NO・KO・GI Rider - Information (15-Mar, 2013)

SHOT04 - NOKOGI Riderは、シンプルな縦スクロール弾幕STGです。

(スクリーンショット)
90年代アーケード風のグラフィックと波形メモリ音源(VGS)による厚みのあるBGMが特徴です。
ゲームそのものはレトロ・テイストですが、操作性については、スマートフォンのタッチパネルでプレイすることを前提にデザインしました。
たとえば、アーケードから移植したゲームのように、操作し難いソフトウェア・ボタンによる操作は一切不要です。
片手で快適にプレイすることができます。

■入手方法
NOKOGI Riderには、Android版とWindows版があります。
また、有償の製品版と、無償のライト版があります。

①Android版
https://play.google.com/store/apps/developer?id=SUZUKI+PLAN 

②Windows版
http://www.melonbooks.com/index.php?main_page=product_info&products_id=IT0000157766

③iPhone/iPodTouch版
Coming soon!

機能差異を解除したい場合、製品版の購入をご検討ください。
なお、本アプリケーションには、アプリ内課金などはありません。
完全な落としきり型の販売となります。

■サポート端末/OS 
  • Android 2.3.x
  • Android 3.x
  • Android 4.x
  • Windows XP + DirectX9
  • Windows Vista + DirectX9
  • Windows 7 + DirectX9
  • Windows 8 + Direct2D (デスクトップアプリケーション)
  • iPhone 4
  • iPhone 4S
  • iPhone 5
  • iPodTouch (第4世代)
  • iPodTouch (第5世代)
■基本的な遊び方
ショットと敵弾を消すことができるレーザーを駆使して、クリアを目指してください。
全部で5ステージあります。
Lite版は1ステージのみです。

■■■操作方法■■■

(Android版)
・画面をタッチすると、ショットを打ちながら、その地点を目指して自機が移動します。
・画面から指を離すと、レーザーメーターをチャージします。
※画面を2点マルチタッチした状態は、画面から指を離した状態と判断します。
・レーザーメーターが満タンの状態で画面をタッチすると、レーザーを発射します。
・戻るボタンを押すか、画面を3点マルチタッチすると、ポーズします。
・ホームボタンを押すと、ポーズ状態にしてからホーム画面に戻ります。

(Windows版)
・タッチ=左クリック
・ポーズ=右クリック


(iPhone/iPodTouch版)
・画面をタッチすると、ショットを打ちながら、その地点を目指して自機が移動します。
・画面から指を離すと、レーザーメーターをチャージします。
※画面を2点マルチタッチした状態は、画面から指を離した状態と判断します。
・レーザーメーターが満タンの状態で画面をタッチすると、レーザーを発射します。
・画面を3点マルチタッチすると、ポーズします。
・ホームボタンを押すと、アプリを終了してからホーム画面に戻ります。


(カスタマイズ)
デフォルトの状態では、タッチした地点(Android/iPhone/iPodTouch版の場合、タッチ地点よりも少し上の地点)をターゲットの中心とする [POINT] という方式で操作します。これにより、タブレットなど、画面が大きな端末でプレイされる方でも、スマートフォンと同様の操作性で操作することができます。
CONFIGURATIONのINPUTで、縦方向(VERTICAL)、横方向(HORIZONTAL)それぞれを個別に [SLIDE](スライド)という方式に変更することもできます。[SLIDE]方式に変更した場合、画面をスライドした量だけ、ターゲットを移動します。
なお、「縦方向だけ[SLIDE]で、横方向だけ[POINT]」といった設定をすることも可能です。
ご使用される端末でもっとも操作し易い設定にして、お楽しみください。
※Lite版の場合、カスタマイズした設定内容はEXITするとクリアされます

■■■アイテム■■■
(1)メダル
・空中の敵を倒すとメダルが出てきます
・メダルは自機が近づけば吸い寄せられます
・レーザー中は、自機が近づかなくても吸い寄せられます
・吸い寄せられる条件は、レーザー以外にも色々あります
・レーザー中にメダルを取ると、レーザーメーターが少し回復します
・メダルはSHOT値(後述)が大きい時に取ると高得点になります
・メダルの累計値は、ミスをするとゼロになります

(2)スター
・地上の敵を倒すとスターがでてきます。
・ショットを打ちながらスターを取ると「+1」と表示されます
・停止中かレーザーを打ちながらスターを取ると「Energy」と表示されます
・「+1」をたくさん取れば、短時間でSHOT値(後述)を増加できます
・「Energy」を取れば、レーザーメーターが満タンになります
・「+1」の累計値はミスをすると半分になります

(3)星くず
・敵弾を消すか、敵弾をカスると星くずがでてきます
・星くずは勝手に自機に吸い寄せられます
・星くずを取るとスコアが少しだけアップしたりします
・星くずの累計値はステージ毎にリセットされます

(4)1up
・特定の敵を倒すと1upがでてきます
・1upを取ると、エクステンドします

なお、このゲームには、パワーアップという概念がありません。
初期状態が最強の状態です。

■■■自機■■■
3種類の自機が用意されています。
・TYPE A: もっとも平均的な性能の機体(中級者向け)
・TYPE B: 高速&低範囲の攻撃を得意とする機体(上級者向け)
・TYPE C: 低速&広範囲の攻撃を得意とする機体(初級者向け)

■■■難易度■■■
3種類の難易度が用意されています・
・BEGINNER: もっとも簡単なモードです
・SOLDIER: 普通のゲーマーが楽しめる程度
・NINJA: シューター向け
どんなに腕に覚えのあるシューターでも、まずはBEGINNERでクリアするところから始めることをオススメします。

■■■エクステンド■■■
スコアが一定量に達すると最大6回エクステンドします。
・1回目: 1,000,000点
・2回目: 3,000,000点
・3回目: 6,000,000点
・4回目: 10,000,000点
・5回目: 20,000,000点
・6回目: 30,000,000点
なお、残機が8機の状態でエクステンドすると、何も起きません。

■■■SHOT値■■■
敵弾への打ち込みなどをすると、SHOT値が増加します。
SHOT値は画面左上に表示されます。最大値は99,999です。
SHOT値が10,000以上になると、加点スコアが2倍になります。
一定時間、SHOT値の増加が無いと、物凄い勢いで減ります。
SHOT値が減るまでの時間は、難易度が難しいほど遅くなります。
つまり、BEGINNERよりもNINJAの方が、SHOT値を減らさずに繋ぎ易くなります。

■■■リプレイ■■■ ※製品版限定
ゲームオーバー後にタイトル画面で「SAVE REPLAY」を選択すると、直前のプレイのリプレイを最大8つ保存することができます。
保存したリプレイは、「LOAD REPLAY」で再生することができます。

■■■プラクティス■■■
1度でも到達したことのあるステージは、プラクティスモードで練習することができます。
プラクティスモードでは、獲得した最大スコアと、最大スコアを獲得した時のリプレイが自動的に保存されます。
なお、プラクティスモードの場合、開始時の残機数が8機になります。
リプレイの保存と2面以降のプラクティスは製品版限定です。

■■■プレイ・データ■■■
タイトル画面で「PLAY DATA」を選択すると、プレイの記録を確認することができます。
プレイの記録とは、スコア・ランキングや各ステージのプレイ回数、プレイ時間などです。
プレイ・データの保存は製品版限定です。
Lite版は、一度EXITすると全てのデータが初期化されます。

■■■音楽室■■■
タイトル画面で「CONFIGURATION」から「MUSIC ROOM」を選択すると、NOKOGI Riderで使われている全ての音楽(全10曲)を聴くことができます。
Lite版の場合、聴けるBGMはSTAGE1、STAGE2、BOSS1、CLEARのみです。

■■■ヒント■■■
このゲームの攻略の鍵は、レーザーの打ち所を抑えることです。
レーザーを駆使すれば、比較的簡単にクリアできると思います。
まずは、レーザーを打ちまくってクリアを目指してください。
しかし、レーザーを使うとSHOT値の維持が難しいため、スコアが低くなってしまいます。
なので、レーザーを駆使してクリアできるようになったら、今度は「如何にレーザーを打たずに攻略するか」を探ってみてください。
あと、通常のショットは、敵の至近距離で打ち込んだ方が、得点が高くなったりします。

■■■対応機種(Android版)■■■
Android2.3以降に対応しています。Android2.2以前では動作できません。
ただし、Android2.3以降だったとしても、正常に動作できない端末も存在します。
以下に、SUZUKI PLANが実施した、Android端末(実機)での動作確認結果を開示します。

Lenovo IdeaPad A1 (Android2.3) → 以下の注意点があります
 (1) フレーム数が62.5fpsで安定します。(若干難易度が難しくなります)
Sony Walkman NW-Z1000 series (Android2.3) → 以下の注意点があります
 (1) フレーム数が55fpsで安定します。(若干難易度が落ちてしまいます)
 (2) パソコンにUSBケーブルを接続中と切断中で、データ保存先が異なります
  - 接続中: 内部ストレージ(SDカード)にデータを保存します
  - 切断中: アプリケーションデータ領域にデータを保存します
Sony Walkman NW-F800 series (Android4.0) → NW-Z1000と同等の動作をします 
Motorola RAZR (Android2.3) → 正常に動作します
Motorola RAZR (Android4.0) → 端末またはOSの不具合によりフレーム数が安定しません
Sony Ericsson Xperia ray SO-03C (Android2.3) → 以下の注意点があります
 (1) フレーム数が63fpsで安定します。(若干難易度が難しくなります)

※2012年12月1日現在の情報です.

■■■アップデート・プラン■■■
アップデートに関する方針は、基本的に次の通りです。
①重大な不具合があった場合、可能な限り即座にアップデートを実施します。
②軽微な不具合については、頻繁なアップデートは行いません。
③エンハンスは、データの互換性に影響しない範囲で実施します。
※例えば、敵のアルゴリズムを変更したり、弾の速度を調整するなどの変更は基本的にやりません。

【Version 1.09】(予定)
(1)対応機種にiPhone/iPod touchを追加
(2)5面で異常終了する恐れがある問題を対策(製品版限定)

【Version 1.08】(Android/Lite版限定)
(1)デモ画面中にSUZUKI PLANのアプリ一覧へのリンクを追加
(2)クリア後の購入促進メッセージの内容を変更
(3)クリア後の画面に製品版へのリンクを追加

【Version 1.07】(Windows版限定)
(1)Windows 8の正式サポート

【Version 1.06】 (15-Sept, 2012)
(1) 非フルスクリーンモード時にタッチ位置がズレることがある問題の対策
(2) リプレイ再生したときのスコアがプレイ時と異なる場合がある問題の対策(製品版限定)
(3) Lite版の「PLAY DATA」にプレイしたスコアがランキングされない問題の対策(Lite版限定)
(4) デフォルト設定を非フルスクリーンに変更

【Version 1.05】 (7-Sept, 2012)
(1) 非フルスクリーンモードへの対応 (Android版限定)
(2) エクステンドした時に効果音が鳴らない問題の対策 (Adnroid/Lite版限定)
(3) リプレイを再生時に、ステージ5クリア後はタッチしてからリセットするようにする (製品版限定)
(4) ENDINGのBGMのベース音がデカイ問題の対策 (製品版限定)
※Android版のみリリースしました。(Version 1.05のWindows版のリリース予定はありません)

【補足事項】
GooglePlayのコメント欄や、eメールでご連絡いただければ、可能な限り対応します。ライト版・製品版のどちらでも、気になる点がありましたら、ご連絡ください。ただし、方針③に影響する案件については、申し訳ありませんが、対応できない可能性が高いです。申し訳ありません。
あと、万が一、Android版で強制クローズする問題が発生した場合、発生した時にレポートを送信していただけると、早期に問題解決ができる可能性が高くなるので、とても助かります。(※ただし、レポート送信は、Javaの例外で落ちたときしかできないようです。SUZUKI PLANのゲームは全般的に、Javaを殆ど使っていない(99.8%ぐらいの割合でCです)ので、仮に落ちる事象が発生する場合、レポートできないかもしれません。そういう時は、GooglePlayのコメント欄やメールで「xxxをやっている時に落ちた」とご連絡ください。「xxxをやっている時に」(発生条件)が重要です。この部分が具体的であるほど、問題が対策される可能性が高くなります)

2012年5月5日土曜日

NO・KO・GI Rider(体験版)完成

開発中のSTG「SHOT04 - NO・KO・GI Rider」の体験版がほぼ完成しました。
タイトルは正式に「NO・KO・GI Rider」にしてしまいました。

このタイトルから、「バトライダーのパクリゲーか?」と期待されるマニアな方のために補足すると、バトライダー的な要素は全くありません。ただし、1面のボスが戦車で、バック走行しながら戦い、オプション破壊するとワッショイな辺りは、インスパイアされていると言えなくもないかもしれませんが。(このタイトルの正式な由来は、以前ブログで書いたような気がするので、詳細は過去ログ参照です)

現在、リリースに向けた最終テスト中です。
完了次第、Google Playで配布開始します。
何とか、目標通り、GW中に体験版をリリースできそうです。
GWなど無かった・・・。

一応、タイトルに「SHOT04」と冠を付けておきました。
前作(SHOT03)との関連性は皆無&SHOTxxシリーズの知名度もほぼ無いのですが、念のため。
SHOT02は、VectorでPickupされたり、雑誌に載ったりしたお陰で、若干沢山出回ったので、もしかすると覚えていてくれる人が居ないとも限らないですし。(ちなみに「沢山」といってもVectorでのDL数は精々2,000本程度)

製品版の完成は・・・2012年中が目標です。
とりあえず、今年は夏休みが長い(というより2回ある)ので、夏が勝負。
できれば、夏頃に完成させたいところ。


追記:
いま、アップロードする作業が終わりました。
明日の昼頃には、GooglePlayで「suzukiplan」で検索すれば見つかると思いますので、是非。


なんとかGW中に間に合った・・・と、思ったら明日(時刻的には今日)も休みか。
明日はジックリとiPod touchの怒首領蜂を堪能します。
ちなみに、(Android版は対応していなくて買えなかった)大復活も買ってみました。
大復活が出た当時、ゲーセンに行ってなかった(というより、横浜ではシューティングができるゲーセンが無いに等しい)ので、ほぼ初プレイ。最大往生もその内出るのかな?できればゲーセンでやりたいけど、例の如く、横浜には皆無らしい。





追記2:
今、GooglePlayをチェックしたところ、もうアップされているようでした。
とりあえず、私のスマホにも、GooglePlayからダウンロードして入れてみました。
販売しているアプリの場合、GooglePlayからインストールすることはできない(自分のものを自分で購入することはGoogleCheckoutのポリシー違反なようで、ブロックされる)のですが、無料で配っているアプリの場合、問題無いようです。

2012年5月4日金曜日

VGS version up(1.01)

http://suzukiplan.blogspot.jp/2012/05/blog-post_476.html
上記記事の対策を施したVGSをアップしました。

InvaderBlockは昨日の内に早々とアップできたのですが、VGSの方は1曲追加して出したので、曲を作るのに時間が掛かり、予定(昨日中)よりも0.5日程度遅れましたが、ギリギリセーフか。

これで大往生に専念できる・・・と、思ったら、体験版を作成する作業をやらなければ・・・
しかし、コレ(大往生)が450円というのは、ちょっと微妙な気分。安過ぎる。
大往生なら700円だろうが、3000円だろうが買うつもりだったんですが。

課金アイテムを販売しているのが値段のカラクリ?
本体は激安or無料にして、課金アイテムで利益を得るという手法は、STGでは微妙な気がしますが。
課金でエキストラステージみたいなものが追加されるのなら買うかもしれませんが。

iPod touch購入

iPod touchを購入。

というのも、iPod touchがあれば大往生ができるらしいので・・・で、大往生も購入。
将来的には、開発中のSTGをiPhone/iPod touchに移植するので必要なんですが、当面は大往生用。

とりあえず、Normalでやったら初見で1周できてしまったので、「こんな楽だったか?」と思いましたが、Endingの後、Hardじゃないと2周目にいけないっぽいことを言われたので、通常モード=Hard以降らしい。なるほど。

ちなみに、使用機種はTypeA/レイニャン(レーザー強化)。
無印の怒首領蜂の頃からTypeA・レーザー強化一筋です。
正確には、無印をやり始めの頃はTypeBでしたが、TypeA(ショットが散らばらないで真っ直ぐ飛ぶ)の方がパターンが組み易くて楽です。(レーザー強化にしているのは、ショットが弱いから、コンボを繋ぎ易いため)

iPod版だと、アーケードみたいにショットとレーザーの切り替えが楽ではないのが難点。
ただ、レバーよりも移動に関しては高速にできるので、TypeA+レーザーなら終始レーザーだけで問題無いっぽい。
コンボを繋ぐのにはショットが必要ですが・・・

2012年5月3日木曜日

強制停止になる原因

ようやく、ソースが触れる環境に帰ってきました。
で、早速エラーレポートで報告されている事案の調査をしました。

ちなみに、落ちたクラス(VgeSurfaceView)のソースは↓のような感じ。
/*
*------------------------------------------------------------------------
* メインループ (スレッド)
*------------------------------------------------------------------------
*/
@Override
public void run() {
SurfaceHolder holder=getHolder();
Canvas canvas;
while (isAttached) {
// 仮想VRAMへの描画処理
PSGTEST.setVram(vram);
// 仮想VRAMを実VRAMへ転送
canvas=holder.lockCanvas();
canvas.drawBitmap(vram,vramRect,screenRect,screenPaint);
holder.unlockCanvasAndPost(canvas);
}
}

赤い網掛け部分がNullPointerExceptionが発生した部分。
なので、青い網掛け(lockCanvas)がnullを返したことが原因。

Android SDKのマニュアルを読んでいたら、妙な記述を発見。(以下、抜粋)
If you call this repeatedly when the Surface is not ready (before Callback.surfaceCreated or after Callback.surfaceDestroyed), your calls will be throttled to a slow rate in order to avoid consuming CPU.

上記を逆説すれば、「リトライは必要」ということ。
(ついでに、リトライ時にsleepをしなくてもハングにはならないらしい)

なので、以下のように修正すればOKかな。
Invader BlockとVGE Chiptune Musicの両方に下記の対策を入れて、本日中にリリース予定です。
public void run() {
SurfaceHolder holder=getHolder();
Canvas canvas;
while (isAttached) {
// 仮想VRAMへの描画処理
IBLOCK.setVram(vram);
// 仮想VRAMを実VRAMへ転送
canvas=holder.lockCanvas();
while(null==canvas && isAttached) canvas=holder.lockCanvas();
if(null==canvas) break;
canvas.drawBitmap(vram,vramRect,screenRect,screenPaint);
holder.unlockCanvasAndPost(canvas);
}
}
修正ポイント:
・リトライ要の場合、リトライ(Destroy時は中断して抜ける)
・リトライ中にDestroyになった場合はスレッド停止

久々にAndroidアプリ開発っぽい内容の記事でした。

初エラーレポート

VGS Chiptune musicがいつの間にやら100DL超えてました。
コメントを見る限り、私の音楽自体が好評みたいで、うれしい限りです。
ありがとうございます。

そして、初めてエラーレポートを1件頂きました。
Javaソース部分でSurfaceViewの使い方にマズイところがあるようです。
マズイですね、これは。
たぶん、Invader Blockの方にも同件の問題がありそう。
今日の夜には、調査&対策したいと思います。

本当は、今から即効で対策したいところですが、Javaソースの入った開発環境には夜にならないと触れない・・・お出かけ環境にJavaソースを持ってくるのを失念してました。ソースが無くてもある程度推理できますが。
・SurfaceViewのrunで落ちている(NullPointerException)
・SurfaceViewのrunでやっていること
 (1) VGEのグラフィック更新(JNI)→AndroidBitmap作成
 (2) Canvasをlockし、AndroidBitmapを書き込み、unlock
で、NullPointerExceptionになるということは、(2)に問題がある可能性が高い筈。
SurfaceHolder.getHolderで取得したホルダーのインスタンスを、スレッド生存中に使い回しているのがマズイのかな?(ソースを見ていないから、ハズレの可能性も高いですが)
 
しかし、ソースを難読化しなかったお陰で、Java部分でバグがあればすぐに分かって便利。
Javaソースは全体の1%に満たない(99%はCでできている)から、仮に解読されても問題ありません。

1面完成

1面がとりあえず一通り完成。
現状、ステージ後半とボスが成分未調整で、かなり鬼畜な難易度です。
最高難度はこれぐらいでちょうど良いかも。
1面から飛ばし過ぎじゃないか?と思いましたが、最高難度は全面そんな感じであれば。。

しかし、低難度(Easy/Normal)はもっと調整が必要。
ちなみに、難易度はEasy/Normal/Hardの3種類。
ただ、Easy/Normal/Hardという呼び名が気に入らなかったので、
Beginner = Easy
Soldier = Normal
Ninja = Hard
という感じにしました。

東方の難易度に置き換えると、

Beginner = EasyとNormalの中間
Soldier = NormalとHardの中間
Ninja = HardとLunaticの中間
ぐらいのイメージ。
いわゆる弾幕STGではないから、一概に比べることはできませんが。


あと、細かいバグが未対策だったり、エフェクトを付けてない部分も多々あります。
システムも未だノータッチの部分も多数(スコアとかクリアとかコンティニューとか・・・)。
体験版(1面のみ)の完成はまだ遠い。
GW中に体験版が出せるかどうかは、依然として微妙。

2012年5月2日水曜日

αブレンド

自作ゲームエンジン(VGE)に、αブレンド機能を入れようかどうか、迷い中。
とりあえず、
(1)スプライトを特定の色でマスクする機能
(2)スプライトを1/2に縮小表示する機能
を追加で実装。

これらを準備することで、例えば、敵に弾が当たった時の点滅は(1)、空中の機体の影の表示は(1)+(2)という感じで機械的に作成することができます。(当初、ダメージパターンと影パターンをパーツ別に準備していました...)

影の表示は、2フレームの1回の間隔で影パターンを表示して半透明表示を実現しています。
つまり、錯覚を利用してます。
αブレンド(要するに透過表示機能ですね)を実装すれば、毎フレーム描画が可能。

ただ、毎フレーム描画するメリットといえば、画面のスナップショットを撮るのに失敗するのが無くなる以外にどんなメリットがあるのかと、考えると微妙過ぎて実装する気が起きない・・・という訳です。
決定的なメリットがあれば、頑張って実装すれば良いのですが。

逆に、αブレンドを実装しないメリットとしては、処理性能が良いということ。
αブレンドは色素(RGB)毎に平均値を取得する必要があるので若干重い。
ただし、平均値算出に要する演算処理は、αブレンドの方式にもよりけりですが、最もシンプルな方式であればAND演算、ADD演算、SHIFT演算だけ(=一般的なCPUで処理コストが軽い部類の命令だけ)だし、αブレンド対応に伴う追加の分岐も発生しないから、パイプラインとの相性も良いです。なので、必要最小限に絞って使うようにすれば、性能面でのデメリットはほぼ生じない気もしますが。

使う or 使わないは別にして、とりあえず実装してみるのが吉な気がします。
ただ、Android用のエンジンにも手を入れなければ作れない(Android用のエンジンは16bitカラー、Windows用のエンジンは24bitカラーという違いがある)から、面倒なので、とりあえず後回しで。