2014年10月12日日曜日

RPGで宝箱の取りこぼしが気になる?

先日、約7カ月放置していた android 版の ff4 をクリアしました。 ラストダンジョンまでは来ていたんですけどね、ラスダンなっがいな~、という 現実を前に二の足を踏み続けていた結果です。

そもそも、なぜラスダン(月の渓谷)が長いと知りうるのか? これは、攻略サイトを見ながらプレイしているから。 BF12くらいまであるし、宝箱もいっぱい取らないといけないっしー、これは時間がかかりそうだ。

常に攻略サイトをべったり見ながら、というほどでもないんですが、 結局道に迷ったりすると時間の無駄だし、ある程度情報なしで進めるパートもあったりしますが、最終的に 「やっぱりマップ見よう」となります。 で、見たら見たでなんか宝箱関係をコンプリートしないといけないような気分になる。 で、クリスタルの小手というのを守っているレッドドラゴンが強くて、何回もトライしてようやく倒しましたわ。 アイスシールドとかいう中古品とのろいの指輪を組み合わせると、炎のダメージを吸収する! というアイデアにたどりついてようやく。

でも、別にクリスタルの小手、そんなに必要か? と問われれば別にいらんかったね。と思います。 ラスボスも苦労しましたが奴と戦うとときは魔法防御が最も高くなる武装にするのが理想的なので、別にいらんかったね。と、いう…。 ちなみにFC版のドラクエIIのロングダンジョン、ロンダルキアではそこで手に入る有力な装備は「いなずまのけん」「ロトのよろい」だけみたい ですからね。これくらいシンプルなのでいいわ、ホントに。

FF4のリメイクはDS版とiPhone版とandroid版がほぼ同じ作りみたいなんですが、 デカントっていう追加スキルの要素があります。 うまく使えば相当な戦力アップになる要素なのですが、 これがまた、取り方を知らないとまともに収集できません。 途中で離脱するキャラに使えないデカントを覚えさせた方がいいだとか、ボスを倒したあとに二度と行かないダンジョンに戻って探したりだとか…。 予備知識なしじゃダメダメな利用実績で最終局面にいくのは間違いありません。 どう考えても攻略サイトを見ながらプレイすることを制作側は前提としています。

で、このへんのアレを見直したいな、という気持ちがあって 拙作「乙Q迷伝」では、次のような作り方をしています。
・あらゆる装備品はランダムダンジョンの宝箱からランダムに収集する
・宝箱はレーダーによって探知できる。取りこぼしが有る無しは一目瞭然である
・初期のダンジョンでもハイスペックなレア装備が低確率で入手できる
・標準的な装備は入手確率が高いので、最低限は運が悪くても手に入る
・店売りの装備品はなし。ある条件を満たすと在庫は売れるようになる
・鎧は最高級だが、兜は三流品みたいに偏った装備になりやすい
・中途半端なスペックの武器でも終盤の敵にダメージは与えられる
・どれだけ運がよくてもアイテムのコンプリートはそもそも無理。スーパーレアは集めきれない
これだと、まだ宝箱残っているけど無理をして探索すれば全滅するかもしれないしやめておこうか、 死線をくぐりぬけて手に入れたってクダラナイ一品である可能性の方が高いんだし…。 という「現場の勘」みたいなものを活かしながらプレイできます。 また手持ちの武装の中で、どの組み合わせが一番なのか試行錯誤する楽しみも固定アイテムで作るよりもアップします。

まあ文句ばかり書きましたが、FF4 は面白かったです。 思いのほか時間がかかったのが、アレだっただけで…。

2014年10月11日土曜日

休日に500円玉を機械で両替する方法

今回は趣向がちょっと違いますが、裏技的なテクニックの紹介です。

ご存じのとおり、土日祝は銀行のATMで硬貨を預け入れることはできません。 それで、困る状況っていうのは、例えば 「500円玉貯金(あるいは会社の行事費みたいので集めた大量の小銭)を紙幣に変換して使いたい」っていうシチュエーション。 その辺のお店で知らない店員に頼むのも気が引けるなあ、という方にお勧め。 もちろん、手数料はいただきません。

前口上を長く書いてもつまらないので結論を書きます。 ボートピアへ行け。 つまり、舟券(馬券みたいなもの)を販売している券売機を利用するのです。

近所にボートピアがあるのなら、入場。 適当に階段を上るかエスカレーターで上に行きましょう。 たくさんのスクリーンと発券機、大型のビジョンと椅子などがある広めのフロア、そこが目的地です。すぐ見つかります。 まずはマークシートの投票カードが机の上に無数にあるので1枚もらいます。 次に券売機に行って目的の硬貨をぶっこみます。 マークシートに不備があると、例えば開催場、レース、予想、金額などのどれかが欠落してる場合。 そういうときは機械が受け付けてくれませんので、返金ボタンでやり直しとなります。 で、返金されるときは投入した硬貨がお札になって返ってくるわけです。 もちろん正確に計量してくれます。 20枚くらいなら楽勝、おそらく一度に40枚とか50枚でもいけると思います。 警備員さんがいるので「あっ、いけねえ、間違えた!」みたいな猿芝居をお好みでどうぞ。 別に悪いことをしているわけではないので、気にしなくてイイデストモ。

JRAのウィンズなんかでも可能だと思います。 競輪もいけるでしょうね。 なにせ、ああいうやつは一口100円からなので、小銭を受け付けるようにできているんです。 おカネの話、万歳!

2014年10月5日日曜日

キーストアとフィンガープリント

今回、非常に面倒な事態に直面しまして、土曜の朝にイライラは頂点に達しました。 詳細は割愛しますが、Google game services (ゲームサービス)関連ですね。 しかし、最近ずっと疑問に思っていたキーストア関連の何やかんやが スッキリしたので、まとめてみたいと思います。 今回も android でアプリを作る方にとってみれば、非常に役に立つ内容です。

ゲームサービスの導入に関しては先人達が丁寧に解説してくれていますので、 ここでは apk公開後(Google Play に掲載してから)のアクセス、この一点に絞って解説していきたいと思います。

apkファイルを作る際にキーストアが必須となります。 とあるアプリ "X" が公開され、のちにバージョンアップ版が公開されるということは多々ありますが、 最低限のルールが二つ。
・パッケージネームが同一でなければならない
・デジタル署名が同一でなければならない

なので、同一のパッケージネームの同一アプリ―――それのバージョン2を別のキーを使って apkファイルを作ったら…。 下記のような警告文がグーグルさんから発せられて apkファイルを受け付けてくれません。


 アップロードできませんでした

以前の APK とは異なる証明書で署名された APK をアップロードしました。
使用する証明書は同じである必要があります。
既存の APK はフィンガープリント「

[ SHA1: 26:86:47:FD:■■:■■:■■:■■:■■:■■:AB:E1:97:E7:48:C4:E9:60:6D:B7 ]

」の証明書で署名されていますが、
アップロードした APK の署名に使われている証明書のフィンガープリントは「

[ SHA1: 6B:02:EB:C3:■■:■■:■■:■■:■■:■■:8A:D7:C5:EA:DC:0B:84:33:64:56 ]

」です。

(一部■で塗りつぶしております)

もし、一発目のapkファイル(Google Play に製品版としてアップロードしたもの)と違う署名で apkファイルを作って アップロードしようとすると上のように指摘されてしまう。 まあよく分からないんですけど、apkファイルを作る際にキーストア(key store selection)ともう一つ(key alias selection)がある。 キーストアの方は別にdebug.keystoreでいいのだが、 key alias の方は別途作らないといけないと思う。色々なアプリで一つのキーエイリアスを使い回すっていうのは??? できるでしょうけど。。 キーストアもキーエイリアスも一発目(処女版、version1.01)を作ったときに設定したものが基準となるので、 それ以降のアップデータでは同じキーを使わなければならない。 で、最終的に apkファイル=公開版ファイルのフィンガープリントがどうなっているかっていうのは、 apkファイルが完成する最後の最後のページ(あとはfinishを押すだけ)で確認できる。 このタイミングで確認できる SHA1 をコピーしてゲームサービスの方に張り付ければ、公開後のアプリとゲームサービスがきっちり噛み合うんじゃないだろうか?

私もググって見つけた個人で書かれたサイトを寄せ集めて参考にして、 リリース前のテスト状態でうまく立ち回ることができた。 Google の公式解説も英語であるということを抜きにしてもよく分かりません。 で、どのサイトを見ても debug.keystore のフィンガープリントを取得してゲームサービスのサイト上でそれを登録するという一連の流れ。 そして、リリース後も署名を同一のものにしないといけないよという注意。 こういうことが書かれていたと思う。 Eclipse を搭載しているPCとデバック用実機スマホをUSBでつないで、テストというかデバッグをされると思う。 このときは、debug.keystore のフィンガープリントが使われていると思う。 事実、テスト段階ではグーグルゲームサービスとの接続に成功するんだから(ゲームサービスにdebug.keystore のフィンガープリントを登録している場合!)。 しかし、実際に apkファイルを作成する場合は上述のキーエイリアス次第で SHA1 が変わってくる。 えっ、ちょっと、debug.keystore のフィンガープリントって関係なくね?

結論から言うなら
①テスト用のゲームサービスを作る(debug.keystore のフィンガープリント)
②ライブラリの導入やメインアクティビティの一部変更などといった必須作業を行う。
③実機でテストを行う。とりあえずサインインできたら成功。私は実績とリーダーボードも試してみた。
④Eclipse で apkファイルを作るふりをする。このときにキーエイリアスを確定する。最終画面でSHA1 をコピー。
⑤④で得たフィンガープリントを使ってもう1回ゲームサービスを登録する。
なんで?なんで?二度手間じゃん。と思うでしょうが、おそらく一度フィンガープリントを入力してしまうと後から変更できませんから。

いいですか? 実際に公開する用の apkファイルを作る際に用いる「キー」。 その署名情報(SHA1)をデベロッパーコンソールのゲームサービスに入力します。 " debug.keystore " のフィンガープリントを取得して入力しろ。 みたいに書いているんですよ、巷のウェブサイトには。怖いですねぇ。これじゃあ、うまくいきませんねぇ。

しかし、先人たちの経験とレクチャーによって少しずつ近いづいていったのは事実です。 その情報は完ぺきではなかった。ただ、それだけのことです。 テスト段階(公開しない状態)で使ってみてうまくいきました、終了、という方が多かったんじゃないでしょうか?

実績を達成したら、レベルが上がりました。 このレベルはあらゆるゲームアプリ(ゲームサービスに加入しているものに限るが)で、累積されていくようです。 つまり、いろんなゲームをやりまくったヘビーユーザーはレベルが凄いことになっていそうです。 今回、初のソーシャルメディア化に挑戦してみましたが、自前でサーバーを用意したりすることを考えれば、とても気軽に行えます。 欠点として、アプリの容量は大きくなりますが(拙作も無駄に10MB)、最近のスマホはギガなわけで、気にするほどでもないでしょう。 アンドロイド黎明期、今から4~5年前くらいの本には容量は小さくしないとダメだってしつこく書いていましたが、 時代は変わったものです。