テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

(etiles report) Google Play Serviceのリーダーボードと連携させました

play.google.com

当初の予定ではリーダーボードの実装は正式リリース後と思っていたのですが,

  • このゲームはリーダーボードなしでは続けてプレイするモチベーションを保てない
  • リリースしたあとに難しい実装を追加するのは大変

ということでBetaでやることにしました. お楽しみください. 上のリンクをスマホから開くか, あるいはGoogle Playで"etiles"と検索してもらえば見つかります.

www.youtube.com

Google Play Serviceは, アカウントの管理やリーダーボードなど, モバイルゲームに必要な機能を無料で提供しています. アカウント管理は認証自体はグーグルアカウントと結びついていて, 他のアプリでログインしてると(通常はGMailとかでログインしてますよね)自動的にログインされます(そしてそれが要求仕様です). しかし, 本名でリーダーボードには載りたくないのがふつうなので, Gamers IDというのを設定することが出来て(というか自動的に要求されます), これが使われます. おれはGodAimAkiraです.

実装上の仕組みとしては, Androidの起動時にMainActivityを立ち上げるところで(実際には閉じてからまた開くケースを考えてonResumeに実装することが推奨されています)バックグラウンドのサインイン(signinSilently)を実行して, 失敗した場合のみIntentを表示します. その後はReactNative用とのブリッジが初期化されて, その中でアプリケーショングローバルなコンテキストを使ってサインイン状態に常にアクセスしつつ, リーダーボードへの処理(submitScoreImmediateなど)を実行するという感じです.

Androidのことがわからなかったので少し勉強が必要でしたが, 実装は自体は難しくありませんでした. しかし, なかなかリーダーボードにスコアを送ることが出来ずに嵌りました. リーダーボードが使えないとこのアプリは完全に無価値です. すでに100時間はゆうに時間をかけてしまっており, オープンソースにしてしまい開発実績として終わりにするのも少しためらわれるレベルになっていました. ノイローゼになってました.

症状としては, 「Google Playにリリースしたものはダメだが, ローカルでのデバグビルドやリリースビルドはスコアを送信出来る」というもので, 色々なことを疑って, 結果として副次的にgradle.buildを改善出来たりもしたので良かったとは思いますが, 根本的な原因を共有します.

Google Play Serviceのリーダーボードを利用する時には, アプリとリンクします. アプリには鍵がついており, リンク時にはアプリのパッケージ名と鍵のSHA1で認識します. リンクされたアプリから送られてきたリクエスト以外は弾くという仕組みです. リーダーボードは複数作ることが出来て, etilesの場合ではオープンβ用のbetaと, ローカルでのデバグビルド用のtestという2つのリーダーボードを使い分けています.

Androidのアプリを開発する時にサインをすることが必要です. デフォルトではデバグ用の鍵は自動生成されますが, リリース用には必要で, keytoolを使って作成します. その上で, 作ったkeystoreを使うように設定ファイルを書いたりすれば, ビルド時にサインをするという仕組みです. etilesの場合は, デバグビルド用にも鍵を用意してます. なぜかというと, 自動生成された謎の鍵ではリーダーボードとリンクすることが出来ないからです. そのためリリースビルドと同様に明示的に鍵を作る必要があります.

その上で, 以下のようにリーダーボードと鍵をリンクさせたために失敗していました.

  • リーダーボード (beta)
    • リリース用鍵
  • リーダーボード (test)
    • デバグ用鍵

しかしこれではGoogle Playから落としたAPKでプレイした時にリーダーボードに弾かれます. なぜかというと, Google Playに上げた時点で, Google PlayはAPKをサインし直すからです. 以下のページのUse Google Play Signingというのを見てください.

Sign Your App | Android Studio

このGoogle Play Signingという機能は使わないことも出来るのですが, ガイダンスに自然に従うと使うように設定されてしまうため, ほとんどの人は使うようになっていると思います. 使う場合, 自分で生成した鍵というのは正確にはupload時にしか使われない鍵であり, それ以降は捨てられてしまうのです.

なので, 動くようにするためには

  • リーダーボード (beta)
  • リーダーボード (test)
    • デバグ用鍵

のように設定する必要があるのです. こうすれば, ローカルのどのビルドでも, Google Play経由でもAPKが正常動作します.

Google Play Serviceを利用するとか, React-Nativeから使うとかに関しての知見はたまったので, 困っている方は相談してください.

(etiles report) etilesのオープンβを開始しました

この前の龍飛崎旅行で朦朧としながらアルファレベルのものを作り上げて, それから実際にナインタイルプレイヤーの人と議論させてもらってそれを反映させたりして, ベータの準備が整ったので公開しました.

play.google.com

react-nativeで作っているので基本的にはiOSでもemulatorでの動作を確認しているのですが, まずはAndroidで育てて, それからiOSという流れでやっていこうと思っています.

とにかくデザインがしょぼいのが気になっているので, デザインの刷新(アプリのデザインのみならずアイコンやVideoも)は外注しようかと思っていますが, そのための費用が明らかに百万単位でかかるため, それは広告で稼ぐことにします. 広告で稼いだ分は当面はアプリの改善に全投資していくことになります.

本リリースまでに出来るだけフィードバックを集めて反映させていきたいのでプレイお願いします.

龍飛崎にかちこむ

2泊3日で龍飛崎に旅行に行くことにした. 龍飛崎というのは青森の左半島の先端だ. 東京から奥津軽いまべつまで3h30m. そこからローカル線とバスを乗り継いで1時間のところにあるホテル竜飛に宿泊する.

www.hoteltappi.co.jp

単に龍飛崎は一度行ってみたいと思ってたというのと, あとは心のリフレッシュが目的だが, その他にもetilesというアプリの開発合宿も目的に含まれる.

twitter.com

機能面は大体作ってあるため, あとは見た目の実装をして, Android版のドッグフードを今週中, βテストを来週中にして, 3月中旬までにはリリースしたいという思いがある. 帰りの新幹線の中では, 新しく買ったP10 Liteというスマホにインストールして遊び倒すというのが理想だ.

βテストに参加したい人, 最新の開発状況を知りたい人はTwitterをぜひフォローしてほしい.

広告を非表示にする

(csgo) あるボタンを押した回数と投げ物の持ち替えをマップするスクリプト

投げ物の持ち替えで多くのプレイヤーは次の2つの方法をとっていると思う

  1. 各投げ物を特定のキーにバインドする (例: fにフラッシュ, cにスモーク, ...)
  2. あるキーを押すと投げ物を選択し, それからマウスホイールで選択する

それぞれの問題は,

  1. フラッシュスモークモロトフグレまで全部バインドすると4つキーを消費する
  2. 今何を持っているかに依存する

1に対してキーを2つで良く, 2の問題も解決する方法は, 特定のキーを押した回数を投げ物にマップすることだ (例: 2回押すとスモーク. 3回押すとモロトフ). 以下のスクリプトは, bを押した回数によって投げ物が変わり, nを使うことで状態をリセット出来る.

alias use_throwing use_throwing_0
alias use_throwing_0 "use weapon_flashbang; alias use_throwing use_throwing_1"
alias use_throwing_1 "use weapon_smokegrenade; alias use_throwing use_throwing_2"
alias use_throwing_2 "use weapon_molotov; use weapon_incgrenade; alias use_throwing use_throwing_3"
alias use_throwing_3 "use weapon_hegrenade; alias use_throwing use_throwing_0"
bind b use_throwing
bind n "alias use_throwing use_throwing_0"

Aim Labという神ゲー

Aimゲーで有名なものにAim Heroというのがありますが, Aim Heroはもう終わったと言ってもいいでしょう. Aim Labが出てしまったからです.

app.famitsu.com

『Aim Lab』を開発しているStatespaceには、少なくとも3名の神経科学博士号保有者がいるという話もあり、その知見への期待や、学者がesportsを分析するとどうなるのかという関心が寄せられ、こちらのソフト開発には多方面から注目が集まっている。

ということからガチ感が伝わってきます.

やってみると, 少なくとも自分がどういうタイプのエイムが得意・苦手なのかというデータを示してくれたり, 6つあるゲームモード自体はAim Heroとあまり違いはないのですが, 内容的には, 実際のゲームで必要とされるエイムのエッセンスが詰まってる感じがします. 的の大きさや時間などをカスタマイズ出来ないことからも, その設定に何かしらの根拠を感じ取れます.

どういうエイムゲームが良いゲームと言えるでしょうか?それは, センシが適切でないと点数が出ないゲームが良いゲームだと言えます. センシが適切というのは視界エイムにとって合ってるということです. その意味ではCSGOでのぴこぴこも良いゲームなのですが, Aim LabはReflex以外にもモードがあり, 多角的にセンシを追究出来る点が優れてると言えます. 実際にやってみると, CSGOのレベルで10edpi違うだけでもあれあれ?という差が出ました. おそらく, エイムが少しでもずれているとスコアが出なくなるようにうまく設計されているのではないかと思います.

まだリリースされたばかりということでプレイ人口が少ないからだと思いますが, トラッキングリフレックスでリーダーボード(世界20位以内)に載ることが出来ました. これらもまだスコアを伸ばすことが出来ると思うので, リーダーボードのさらに高いところを目指していきます.

www.youtube.com

www.youtube.com

記録を達成した時のセンシが950edpiですが, これを940とか960にすると特にリフレックスの方はエイムが合わなくなりました. なんとなく, 色々な大きさの的が出てくることがポイントな気がしています. これは室伏広治がバーベルにハンマーをぶら下げることで不安定を作り出すハマロビクスに似ているからです. 不安定さを作り出すことによって, 安定したエイム以外では悪くなるという性質を生み出しているのではないでしょうか.

Aim Labは最高のAimゲームで, まさにおれが欲しかったものです. 1500円くらいするためAim Heroに比べると3倍ほど高いですが, その値打ちは間違いなくあります. ゴッドエイムあきらはAim Labを推奨します.

広告を非表示にする

CSGOのMMは楽しい!!

ゴッドエイムあきらです.

最近, おれの配信のほとんどがCSGOで満たされていることをご存じですか?CSGOのMM(マッチメイキングの略. いわゆるランクマッチ)を楽しんでいます.

10勝しないとランクがつかないですがマッチは内部レートで行われているらしく, 今はソロでやると主にMG帯に割り当てられます. 個人的には結構楽しいと思っています. なぜ楽しいかと思う理由を以下に述べます.

撃ち合いのレベルが高い

みんなエイムがしっかりしています. 油断すると確実に撃ち負けますし, 油断しなくても常にギリギリです. ソロでやってもエイムがガバガバな人はいないし, 信頼出来ることが多いです. どのくらいのレベルかというと, 純粋なマウスコントロールでいってもおれは平均くらいだと思います. OWのようにガバエイムでもやれる仕事というのがないため, クオリティが保たれています. 撃ち合いについては, ヘッドショットの倍率が高く設定されていて(身体に対して4倍とか. OWでは通常は2倍, Widowで3倍), ヘッドショットの確率が高いことが他のゲームに対して優遇されています. エイムに関して上限が高いというのも魅力の一つですし, プレイヤーのエイムを高く保つことに貢献していると考えられます.

VCを使って戦略面で連携をとることが前提

OWではVCを使わない人が多いですが, CSGOの爆破では「敵がどこにいる」「敵がどっちのサイトを狙ってる可能性が高い」ということを報告し合うことが前提です. 場所の報告にはコールアウトと言う, マップ内での名称を使います. これは例えば「バナナ」「バルコニー」とか, 馴染みのない人が聞いても何のこっちゃ分からないようなものですが, MMに参加する人はこれを知ってることが前提となります. また, 上で述べたように基本的には全員撃ち合いに強く, 装備が弱いとまず勝てない(例えばこっちがピストルで相手がアサルトライフルだとほぼ100%勝てません)ということが前提にあるため, 「エコ」と言って「敢えて武器を買わないでお金を貯める」という戦略をとることもあります. そしてその後お金が貯まった時に「バイ」と言って装備を買って勝負に出ます.

殺した相手の武器を拾うことが出来る

このゲームのマネーシステムは, 勝ったチームにお金がたくさん入るので, 勝ったチームはデスによって武器を失うことも少ないし, 一方的に潤い続けるわけなので, 上に述べたようにエコからのバイで形勢を覆しに行くのですが, その他にも, こちらの武器が弱くても相手を倒してしまった場合, 相手の武器を拾って自分の武器を強化することが出来たりします (例えばエコで運良く相手を殺してアサルトを奪うなどです). このように, 不利な方が有利になる道がいくつもあるため, 有利な方も安心出来ないというのもCSGOを楽しくしています.

まとめ

このように, CSGOは個人プレイとチームプレイの両方が要求される質の高い競技系FPSだということが言えます.

期待していたBattalion 1944のソフトウェアクオリティがチンカスなのと, アジア鯖がないからか日本人プレイヤーが実質50人くらいしかいないということもあり, かなり期待外れなので, 今後もCSGOを続けていこうと思います.

広告を非表示にする

edpiがどれだけ違うとセンシが違うと言えるのか

前に「センシはころころ変える方がいい」という主旨の話をして, 「なるほど」と言う人もいれば, 先入観に囚われていて批判に回る人もいたのだが, では「変える」というのは一体どのくらいかという点について話をしたい.

以下がCSGOプロのセッティングである.

CS:GO Pro Settings & Gear List | ProSettings.net

おれがedpiという言葉を使う時はCSGOの数値を使っていると思ってほしい. 例えば, CSGOでいう1000edpiというのはScreaMが使っているセンシだが, これはviewspeedでによってOWに変換すると3200edpiに相当する. 視界エイムでは, 画面の移動速度(あるいは画面内での距離)が重要であるため, 変換にはviewspeedないしはmonitor distanceを使い, 360度distanceによって一致させるのは無意味だと考えている.

CSGOは極端にエイムが重要なゲームなので, 全体的にセンシは低めとなっている. 典型的には800-1000edpiがくらいが多く, これは一周でいうと40-50cmくらいに相当する.

リストを見ると, センシはおよそ40edpi間隔で分布してることが分かる. 800族, 880族, 920族, 960族, 1000族あたりが多い. ベストなセンシというものが存在すると仮定すると, これだけ多くのプレイヤーが40edpiごとに分布するというのはあり得ないことなので, 彼らは40edpiごとくらいでセンシを「異なる」と判断していると考えられる. 仮に1edpiの単位で違いがあるのであれば, 年収数千万円, 賞金は億にも到達する世界だから, より精密に数値を決定しているはずである. 中には4edpi単位で調整している選手もいるが, これは「なんとなくそれがいいと思うから」という程度であり, 実際には40edpi単位に丸めてしまっても変わらないと思う.

以上より, CSGOでは, 少なくとも40edpi(一周でおよそ2cm)違うとセンシが違うといえることは分かった. CSGOは現存するもっともエイムに厳しいゲームなので, CSGOにおける下限は, おそらく他のゲームにも適用出来る.

ではおれがどう考えているかというと, おれは20edpiは違うと感じることが出来るが, 10edpiの違いは分からない. そもそも, センシというのはその時の身体の状態に依存するものであり, 多少の振れがあり得るものだから, ある時に1000edpiから1010edpiに変えて見て良いと思ったが, 翌日になってみるとダメだと感じることは良くある. では20edpiというと, 同じく翌日になってみるとダメだと思うことはあるが, 10edpiに比べると有意に確率が低いため, 20edpiは十分に離れているのだと考えている.

結論: 20edpi未満の調整は無意味だからやめましょう.