くまちゃんのiOS/Androidゲームプログラミング

マイペースでゲームつくってます。

【Android】RPG、ボスを描く

テンションあがってまいりました。

Androidで開発中のRPGですが、ストーリーは相変わらずいい案が思い浮かばないままです。
このままでは先に進まないので、とりあえずストーリーは横に置いておいて、先にダンジョンとボスをつくってしまい、ゲームシステムをつくりあげることを優先させることにしました。
ダンジョンも完成させることを主眼にするため欲張らずに1階層あたり20x20で地下6階までで、地下6階はボスがいる、と。
で、ボスはどうせならデカイほうがいいなあ、ということで96x128ピクセルとしました。
ボスのデザインは当初はリッチをイメージしていたんですけど、いざドットを置いて描きはじめると・・・結局、ナイトになってしまいました・・・。ま、いっか・・・。
盛り上がっておもむくままに描くほうが、まだ完成に至るので。
とにかく、個人製作はダレるのが一番の大敵なので、モチベーションをあげるためには自分が楽しむことが大事。楽しいからつくっているんですしね。
これだけデカイキャラになると、とてもじゃないですけど左右向きなんて描いてられないのですが、一枚絵はあまりに寂しい、ということでせめて足は3パターン描いてアニメーションさせることにしました。右足前、両足揃い、左足前。ゲームに実装する際には、右足前>両足揃い>左足前>両足揃いの4枚絵をつかってループさせると歩いているように見えます。アニメーションのスピードは通常キャラより遅くして、巨大感を演出。巨神兵が歩いているようなイメージですね。
実際にプログラムに組み込んで、動いている姿を見たときは自作ながらテンションあがりましたね。うん、やっててよかった。
こうして歩く姿を見ると、腕も動かしたくなるなー。でもそれはやりだすとキリがないよなー。とにかく今は一本道を完成させて、リリースすることを最大の目標にしよう・・・。

いきあたりばったりでつくり始めたRPG、ストーリーは小さく、ボス出現、となるとなんだかソーサリアンみたいになってきました。見た目ドラクエ、バトルと1話完結ストーリーはソーサリアン。案外、この方式はいいかも。
f:id:tadakazu1972:20151108205218p:plain

「ねこひろい」アップデート作業中

疲れました〜。今日はハッカソンに参加していました。
コード書く、モックアップどーのこーのという以前に、アイディアを実際に現実的に回すしくみ、いわゆるビジネス・ディベロップメントの部分で相当議論を行って消耗しております。

さて、前回のエントリーでは機嫌よくAndroidRPGをつくれるようになったと書いていたのですが、人のココロとはうつろいやすいもので、一方の道のメドが立つと、つまり「いつでもできる状態」になるとそれはそれで「まあ、いっか」となって優先順位が下がってしまって結局そんなにガンガン進んでおりません。なんなんでしょうね。毎回毎回この現象。誰か心理学の世界とかでネーミングしていないのかしらん。プログラマーは結構自覚あると思いますよ。アプリのコード書きすすめていて、カベにぶつかって、「うー、これどーすりゃいいーんだあああ」という状態の時はその課題に必死にかじりつくんですが、クリアするとスッと興味がなくなってそのあと完成までに至らないという。

今回のRPGはストーリー展開がいまいち自分でも納得いくストーリーが浮かんでいないのが大きなブレーキの原因なんですが、こればっかりは悩んでも浮かぶものではないので、何か舞い降りてくるまで待つしかないな、あまり時間かかりそうだったら面白くなくても進めるか、という状態です。

で、今週はRPGが止まっている間をぬって、「ねこひろい」のアップデートがさくさく進みました。

登場するねこをぶち、トラ、黒と3種類増やして計4種類。ステージが始まるとランダムでどれかが選ばれるようにして、1/5の確率で4種が同時に登場するミックスも出るようにしました。最初、すべてミックスにしてみたんですが、1000匹ミックスって目にうるさいし、思ったほどのインパクトは無いなと。やっぱり1000匹は1色のほうがインパクトがありました。むしろ、たまにミックスを登場させたほうが効果的かと。

そして、ステージをとりあえず既存のボツゲームから流用して15ステージに増加。それをランダムで登場させるように。

そして、「ねこ缶」を登場させました。
「ねこひろい」はねこを追いかけるだけだったんですが、「ねこ缶」をゲットするとねこがそれをめがけて集まってくるようにしました。
・・・まあ、根本的にゲームプレイを変えてしまう要素なのですけども、これはこれで楽しくて。

以上のアップデート要素を実装してみると、自分で言うのもなんですが、おもしろくて繰り返し繰り返し遊ぶようになり、6ステージ1周を何周も遊ぶようになりました。そして、1周するごとにねこの移動スピードをアップさせるようにして。

もう少しステージデザインをブラッシュアップして、アップデート審査に出そうと思います。
f:id:tadakazu1972:20151101215352j:plain
f:id:tadakazu1972:20151101215807j:plain

【Android】RPGの開発、ようやくエンジンがかかり始める

やーーーーーっと軌道に乗ってきました。

これまで、RPGiOSドラクエライクをつくったり、ローグライクをつくったりしてきたのですが、どうにも続かず中途半端に頓挫していました。

原因はわりとはっきりしていて、マップの作り込みと、ユーザーインターフェイスまわりの作り込みですね。

マップの作り込みはもうこれは理屈でもなんでもなく、忍耐しかないわけですよ。
趣味のゲームづくりはだいたいがちょこっとした小さなプログラムから作り始めるので、マップを表示させる仕組みをつくったら満足してしまい、あとはいくらでもデータをこさえればいいだけなんですが、これがまあ〜見事に続きません。200x200のマップとか無理。Macのちっちゃな13インチモニターでは無理ですわ。さらに、ツールもない中、マップに置く「絵」と「数値」がいきあたりばったりなので、あとで「あ、移動できる数値としてもう1枚絵を増やしたい・・・」となってもこれまでに配置した数値をすべてズラすこともできずイライラすることになってしまいます。まあ、これも最初から計画すれば防ぐことができるんですが、そこはそれ、趣味でつくるのにそこまで準備して、というのもこれまたモチベーションが下がってしまうわけなんですよ、はい。

ユーザーインターフェイスは、とにかくメッセージの表示と対話がめんどくさい。
攻撃における魔法の選択や、武器屋での商品選びまではなんとかつくることができたのですが、意外とつまづいたのが「村人の会話」。
定型メッセージではないので、さまざまな長さがあるし、ストーリーによっていろいろ分岐させたいし、メッセージを表示するにあたって改行だ、スクロールだと気にし始めるとそれだけで結構立派な「クラス」をつくる必要がでてきて、正直そこにエネルギーを注いでいるとどんどんゲームづくりから離れていってしまうので、結局イヤになってしまって。

・・・ってなことで、私のiPhoneには結局、完成に至らず無味乾燥なアイコンのままの、無残なRPGのなりそこないが結構ゴロゴロころがっています。その派生のひとつが「ねこひろい」なんですけども。

先週、iOSのゲームのアップデートを立て続けに2つやって結構満足感が得られたのもあって、止まっていたRPGをポチポチ再開させるかなーとAndroidをごそごそいじりはじめました。そこで気をつけたことは前述した2点。

まず、マップは小さくすると決めました。1画面を10x10のチップを配置、それを4画面つなげダンジョン1レベル分としました。つまり、地上も4画面分しかない小さな村、ということにしました。

そしてユーザーインタフェース。これはiOSAndroidを天秤にかけた結果、AndroidのSurfaceViewが、テキスト表示とボタン類のUIの扱いが比較的簡単・・・というか、サンプルプログラムがネット上にも充実している、ということで採用。iOSのAutoLayout苦手なんですよ。
そして試行錯誤していくうちに、ふとこれまでの悩みだった「村人の会話」問題のめどがついたんです。長いメッセージも、元データをテキストファイルから読み込ませる方法でいくらでも書き足すことができるようになりました。

これが大きかったですね。
登場人物別に、ストーリーの進行にあわせて表示できるようになると、毎日少しづつ、まるで小説を書くようにRPGをつくることができるようになりました。こうなると俄然やる気が出てきました。
次にストーリーをどう進めたら面白いか?と開発そのものが楽しくなってきたので、この状態はシメタものです。
アクションゲームはシステムをつくったらほぼ完成ですが、RPGはやっぱりストーリー。これをプログラミングとともに考えながら続けるサイクルを生み出すことができたのが、良かったですね。

さー、小さいストーリーでも、とにかく完成させてリリースまで続けないと。
f:id:tadakazu1972:20151025161927p:plainf:id:tadakazu1972:20151025161944p:plainf:id:tadakazu1972:20151025162037p:plainf:id:tadakazu1972:20151025162053p:plainf:id:tadakazu1972:20151025162119p:plainf:id:tadakazu1972:20151025162148p:plainf:id:tadakazu1972:20151025162215p:plainf:id:tadakazu1972:20151025162235p:plainf:id:tadakazu1972:20151025162245p:plainf:id:tadakazu1972:20151025162257p:plainf:id:tadakazu1972:20151025162307p:plain

アプリのアップデート審査が2日で完了

いや〜、驚きました。こんなこともあるんですね。

前回の記事の最後で、「ねこひろい」に続いて「Spabee」もアップデートし、審査提出したと書いて終わっていました。「ねこひろい」と同じように1週間はかかると思っていたんですけど、意外や意外、わずか2日目の朝4:00にIn Reviewになった通知が来て、その後7:00にはAppStoreでダウンロードできる状態になっていました。

Twitterの#iosreviewtimeを見ていると、極たま〜〜に「Wow!1日で完了した!」なんて書き込みがあって、いいなぁ、そんなラッキーなこと本当にあるんだろうか、アメリカの人だからなんじゃない?とか勝手にひがんでいたんですが、自分にもラッキーがあるとは思いもよりませんでした。Appleさん、ごめんなさい。

まあ、なんで2日間でIn Reviewになったのかは正直わかりません。
すぐ思いつくことは、既存アプリのアップデートは新規アプリの審査よりは早い可能性が高いということでしょう。
でも、「ねこひろい」のときはIn Reviewになるまで5日かかりましたし、さらにReady for Saleにまで1日かかりました。
おそらく、審査担当者さんのキューの溜まり具合にも大きく影響されるのでしょう。
結局は、やはり1〜2週間だと考えておいて、早ければラッキーぐらいに思っておくほうが精神衛生的にも良いと思いますが、早ければ次も、と期待してしまうのが人情ですよね〜。

今回、2本立てつづけにアップデートできたので調子に乗ってまたすぐに「ねこひろい」のアップデートをさらにやりたくなってしまい、昨日、いそいそとバージョンアップのプログラミングをしていました。早く提出しようか悩んだのですが、自分でしばらく遊んだ結論としてもう少し時間をかけてステージ数も増やしてバージョンアップしようと決めたので、リリースはもう少し時間がかかることになります。

それにしても、2本続けてアップデートした結果、どちらも約100本程度すぐにアップデートしていただけたことは素直にうれしかったですね。
趣味の個人製作で100人に遊んでもらえるのは作者としては作りがいがあるもんです。次はもっと楽しんでもらえたらいいなぁ、でもやりすぎてイヤがられたらどうしよ、とか、アップデートでユーザーに向き合う感覚って、これまでの自分にはありませんでした。新作をつくってナンボ、と思っていましたので。
これもスマホならではの開発スタイルかな、とも。

あ、「Spabee」のアップデートは5WAYショットにして火力アップしたことと、背景の星がスピードアップすることだけなんですが、5WAYショットはそれなりに気持ちよくなったと思いますよ。火力アップしたので、増える敵にもそれなりに打ち負けなくなってきて、普通にプレイすると300万点だったスコアが600万点にまで伸びるようになりました。それでも300機まで増える敵には勝てず、1000万点は難しいので次はシールドを追加するかな〜と考えています。

スパビー

スパビー

  • TADAKAZU NAKAMICHI
  • ゲーム
  • 無料

Xcode 7 アプリ提出で少し変わったこと

「ねこひろい」をアップデートしました。
どうもステージが難しくてイライラする、との声がいくつかあったもんでして、ステージデザインを見直しました。

私は昔からのアクションゲームの文脈にのっとった難易度設定をしたと思っていたのですが、21世紀にスマホで「ねこひろい」を遊んでいただく方というのはそれほど昔からゲームやっていた方ではないんですよね。女性も多いでしょうし。そういう意味では完全にターゲットを見誤っていました。その意味ではもっと簡単にしたほうがよかったかもしれません。

ゴリゴリに80年代アーケードを遊んでいた人向けのゲームって、これからはSteam向けでPCで作っていくほうがいいのかも。
あー、でももう自分としてはWindows+DirectXって断ち切ってしまったんですよねぇ、このiPhone, Androidのモバイル向けでアプリを作る、という決心と引き換えに。
なんか調べたらDirectX11からは以前のDirectX 9よりもさらに低レベルの実装をせねばならんようじゃないですか。DXUTが無いとかなんとか。
Windows8以降、Windows10以降の世界も学習せねばならない新しい約束ごとこともいっぱいありそうだし。でもこのモバイルへの開発者大移動で、以前に比べてネットも書籍もぐっと情報が少なくなっているような気もするし。

もうプラットフォーム毎に付き合っていくのは、時間というリソースの配分にめっちゃ気をつかいますね。

ゲームづくりに関係する技術においては、Androidは枯れたJavaOpenGLでちょっと落ち着いていると思うんですが、iOSMac OS Xも)はここへきてMetalがしゃしゃり出てきました。前からデビューしてましたけど、かなり下支えに活躍してくれるようです。Apple限定技術ですけど、CPUとGPUを効率的に扱えるのは魅力的ですね。チップとOSを一気通貫でつくれるからこそ、そりゃOpenGLより速くなるってもんですわ。なるだけ学習コストがかからないわかりやすい入門書でないかしらん。

で、AppleといえばiOS9とXcode7対応です。
アプリ開発者にとっては毎回心臓を悪くするこのメジャーアップデートの時期、今回はコーディング自体にはさほど影響がある部分はなかった(少なくとも自分の守備範囲において)んですが、意外や意外、アプリ提出での「お作法」が少し変化しており、ヒヤヒヤさせられました。

地味ながらも、一番大きな変更点は

「ビルドしたアプリをiTunes Connectのサーバーにアップロードしても、しばらく「処理中」となってすぐに審査提出用として選択できない」

って仕様変更です。
いや〜、これはかなりビビりますよ。「さ〜、めんどくさいスクショやら記述まわりが終わったし、あとはビルド済みアプリをひもづけて、いざ、審査提出!」と意気揚々とクリックしようにも、選択できないんですから。最初は「え?え??なんで?何か悪いことした?」と相当焦りましたよ。

ちゃんと改訂ガイドラインを精読すれば書いてあるのかもしれないんですが、例の非正規Xcodeでビルドされていないかとか、iOS9からWebは基本httpsとか、App Transport Security、いわゆるセキュリティまわりで悪さしていないかどうかとか、そういった類のチェックがかかっているのかも?と勝手に推測しちゃっていますが。

さらに「ねこひろい」の時は運の悪いことに、Validationはすぐにできたのに、Submitが延々できませんでした。Twitterで同様につぶやいている人もいるっちゃーいるので、どうもサーバーが不安定な時だったようです。あきらめて翌日にしたらすっと提出できたんですけども。

実は今日、「Spabee」をアップデートして提出してみたんですね。そしたら、それはSubmitもすっと通りました。そして、提出後の処理が終わったのがだいたい1時間後。
ですので、今後、 アプリ審査提出はビルドしたアプリを早めに提出して、iTunes Connectでのサーバー処理を先に開始させておいてから、アプリ情報の記述まわりをしたほうがいいと思います。

なんにせよ、Appleはこういった開発環境のアップデートに毎回ついていかないといけないのが大変ですね。ちょっと周回遅れになると取り戻すのが怖い。ですので、Xcodeの大型アップデートが来るたびに、なんでもいいので手持ちのアプリをアップデートしてビルドして提出する、ということを一通りやっておくほうが良いと思います。ふぅ。
https://itunes.apple.com/jp/app/nekohiroi/id1030662126?mt=8&uo=4&at=10l8JW&ct=hatenablog

「ねこひろい」Android版はムリっぽいです...

いや、私の技術力が無いからなんですけども。
1000匹のねこをGLSurfaceViewを使って描画してみたんですが、スロー過ぎてゲームになりませんでした。
一応、描画はできるんですよ。
ですので、スピードを確保するために考え付くことはいろいろやってみたんですが、やっぱり根本的に描画のオブジェクト数が1000あるとダメっぽいです。
描画まわりをチューニングさせるとなると、OpenGL ESについての深く、正しい理解が求められるのですがそこまではちょっと今の私のレベルでは大変過ぎます。BeginとEndのタイミングとか、スレッドのどこに描画を差し込むのがいいのかとかの試行錯誤はカンベンしてください...。
「そもそもDalvikがイケてないんじゃないの?」なんて悪態をついてしまっています。ごめんなさい。

ただ、こうしてAndroidで大量のオブジェクトを描画してみて改めて思うのは、iOSのスピードの素晴らしいこと。
速い速い。
よくぞSprite KitをAppleご謹製でつくっていただいたもんです。
なーんも考えずに素直にプログラムして1000匹余裕で動きます。10000匹にするとちょっと苦しいですが。
これはやっぱり一気通貫でつくっているからなんですかねぇ。詳しくはわかりませんが。
今はまだ月賦が終わっていないのでiPhone6sに機種変更できていないのですが、これ、またスピードアップすると描画数を増やすことができますね。Metalは全然勉強できていなんですが。

ファミ通Appでも「なんとAndroid版がありません」とか、Twitterでも「Android版がないんだよ」とつぶやかれもしましたが、いちいち「いや、iOSのほうがカンタンにできるんだってば!」と言っても声は届かないでしょう。もしかしたらcocos-2Dを使えばいけるのかもしれません。でもサードパーティのんに依拠するのはヤなんですよ。

ですので、Androidはスピードの要求されないゲームをつくることにしました。
マイペースでゆっくりいきます。
f:id:tadakazu1972:20151004233800p:plain

ファミ通appに掲載していただきました

毎朝、枕元に置いているiPhoneiTunes Connectでアプリのダウンロード数をチェックするのが寝起きの日課になっているんですが、いつもは10本ぐらいの数値が150本超えていてびっくらこきました。
「ネット上でなんかあった?」
Twitterで検索すると、なんとファミ通appで取り上げていただいて2度ビックリ。
スマホネイティブの若い世代には、もはや「ファミ」の意味も通じないとのネット記事を見たりするのですが、我々40代にはそれはもうありがたいコトバですよ。まあ、実際には私は「ファミコン」を買ってもらえず、「JR-200」という松下電器製の8bitパソコンでプログラミングせねばゲームをできないという修羅の国に放り込まれることになり、「ファミ通」よりも「ベーマガ」で多感な時期を過ごしたのですが。あ、あと80年代は「ゲーセン」のほうが最新技術を惜しみなく投入したゲームをプレイできたので、そういう意味では「ゲーメスト」も甘酸っぱいあの頃を思い出すキーワードですよね。玉置とか雑君とか。

いえ、で、ファミ通appなんですけども。
編集長のプレイ動画もあって、こうして自作のアプリが客観的に取り上げられていただけるのはうれしいとともに、こっぱずかしいもんですね。
あと、さすがファミ通、きちんとAppStoreから製作者サイトとプライバシーポリシーも見ておられて、私の素性や個人情報は一切入手いたしません、などの記述もナレーションしていただいております。
というか、そこの部分ってAppleの審査向けに英語でしか書いていなくて(ここが審査対象なのか確信はないんですけどね)、自分としては手抜きなんですが、一応必要最小限のことはしておいてよかったというかホッとしたというか。

あと、意外だったのが、ナレーションで「なんと、このアプリはAndroid版がありません」と言われたこと。
「ああ、メーカー製が当然ならばそういう感覚になるんだ」、と勉強になりました。
個人製作者からするともう一個同じのをつくる=移植する作業って、モチベーションがだだ下がりなんですよね〜、なんて知らないよね、フツー、と客観的に思いました。

ただ、実はもともとAndroid版も考えたこともあったんですが、iPhoneならば1000匹のスプライトを動かしても大丈夫という自信があったのですが、AndroidOpenGLをもってしても、1000匹は難しいんじゃね?という疑念があって捨て置いた経過があります。試してはないんですけど。これまでの経験からしてもNexus7では100以上のキャラを動かすとiPhoneよりもっさり具合がひどいような...。特に今回のアプリは「1000匹」が中心概念というか、ほぼネタの全てですので、これが実現できないとアプリとして存続する意味がないので;まあでもTwitterでもAndroidがない、とつぶやかれているので、気乗りはしないのですがテストはしてみますかねぇ。

ま、なんにせよ、こうして遊んでいただけるとつくるかいもあるっていうもんですよ!
app.famitsu.com