きらファンの「ブロックきらら」について調査した

<調査対象>
main.js
kirara.js
・開発者コンソールのNetworkタブ

<作った会社>
おそらくカヤック。
根拠は、main.jsのヘッダーの以下の記載や

 * cl-kirarafantasia:
 *   license: MIT (http://opensource.org/licenses/MIT)
 *   author: KAYAC Inc.
 *   homepage: https://github.com/kayac/cl-kirarafantasia#readme
 *   version: 0.0.0

テスト用ホスト

var TEST_HOST="kirarafantasia-aj.kayac.cc";

の記載。

<貰える壁紙>
クロモン
カンナ&ライネ
クレア&ポルカ&コルク
きらら&ランプ&マッチ

ソースは、main.jsに定義されている、update(percent,days)関数。
読みやすい形にしたものが以下。

function update(percent,days){
  var per=Math.round(percent/10),day=String(days).split("");
  this.$per.attr("class","percent-liquid n"+per);
  if(percent>=100){
    this.$percent.addClass("complete");
    this.$day[0].attr("class","left-day ten n"+day[0]);
    this.$day[1].attr("class","left-day one n"+day[1])
  }
  var $wl=$(".present-list a");
  if(percent>=100)
    $wl.eq(3)
    .attr("href","/download/kirara_wallpaper_04_BKOyI6i43b.png")
    .addClass("get")
    .find("img")
    .attr("src","/assets/img/present/wp4_get.png");
  if(percent>=75)
    $wl.eq(2)
    .attr("href","/download/kirara_wallpaper_03_EhSSgyhkhF.png")
    .addClass("get")
    .find("img")
    .attr("src","/assets/img/present/wp3_get.png");
  if(percent>=50)
    $wl.eq(1)
    .attr("href","/download/kirara_wallpaper_02_fa6Y7bcTQt.png")
    .addClass("get")
    .find("img")
    .attr("src","/assets/img/present/wp2_get.png");
  if(percent>=25)
    $wl.eq(0)
    .attr("href","/download/kirara_wallpaper_01_Sp63BWxPiC.png")
    .addClass("get")
    .find("img")
    .attr("src","/assets/img/present/wp1_get.png")
}

<完成度の判定方法>
このJSONから得た情報を元に完成度を判定している。
countdownプロパティ
 アクセスした日からAJ2018初日の3月24日(土)までの日数。
 例えば、03/18にアクセスした場合は、3/24 - 3/16 = 6。
completionプロパティ
 完成度(%)。

#Percent配下の.percent-flask配下の.percent-liquidに付与される、
nN」(Nは完成度を10で割って一の位を四捨五入した値)クラスに応じて、
フラスコの内容量が変化する。
完成度が100%以上になった場合の処理は、上記のupdate関数に記載されている通り。

<どのタイミングで完成度に貢献されているのか>
シェアボタン(#Share)がクリックされた際に呼び出されるtweet(event)関数を読んだが、
ツイートするウィンドウを表示して、
親ウィンドウにフォーカスされた際にカットイン効果を開始するためのイベントをセットするのみで、
シェアされたことをAPIで外部に送信しているわけではなさそうだった。

function tweet(event){
  var _this2=this;
  event.preventDefault();
  this.sound.playTweet();
  var shareText=this.percent<100?SHARE_TEXT_1:SHARE_TEXT_2,
  url=encodeURIComponent(this.url),
  text=encodeURIComponent(shareText),
  tags=encodeURIComponent(TWITTER_TAG),
  param="url="+url+"&text="+text+"&hashtags="+tags,
  href="http://twitter.com/share?"+param;
  _open({
    url:href,
    title:"ツイッターでシェア",
    w:550,
    h:450,
    x:(window.screen.availWidth-550)/2,
    y:(window.screen.availHeight-450)/2}
  );
  this.$win.one("focus",function(e){
    _this2.cutin.start(_this2.percent,_this2.segment)
  })
}

tweet関数で参照している各定数の宣言は以下の通り。

var TWITTER_TAG="ブロックきらら #きららファンタジア #AnimeJapan2018";
var SHARE_TEXT_1="3/24(土)‒3/25 (日) 開催予定のAnime Japan2018に「きららファンタジア」のブースが登場!みんなのツイートで約75,000ピースのブロックきららを完成させて、Anime Japan2018に召喚しよう! ";
var SHARE_TEXT_2="3/24(土)‒3/25 (日) 開催予定のAnime Japan2018に合計75000ピースのブロックきららを召喚!さらに会場内のQRコードを読み取るとオリジナルステッカーをプレゼント!ぜひ、遊びに来てね!";

そもそも、ツイートウィンドウからツイートしてもしなくても、
閉じた時にカットイン効果が開始されるので、なんとなくそんな気はしていたが…。
考えられるのは、
TWITTER_TAGで定義されているハッシュタグを使ったツイートをピースとして数えている」説。
おそらくTwitterの検索APIを使うことになると思うが、
通常は検索期間に制限があるため、無制限にツイートを検索して数えられるわけではない。
これも推測だが、企業でTwitterAPIを使う契約をしているため、
無制限に対象のツイートを検索してその数を集計する、ということができるのではないだろうか。
同一ユーザーによるツイートもユーザーIDを見ればフィルタリングできるので、
こちらの方法の方が楽なのかもしれない。

<カットイン演出について>
○各バージョンの素材
・キャラ
 https://blockcampaign2018.kirarafantasia.com/assets/img/cutin/krr[1-4].png
・テキスト
 https://blockcampaign2018.kirarafantasia.com/assets/img/cutin/txt[1-4].png

ソースは、.cutin-chara配下の.v[1-4]と、.cutin-text配下の.v[1-4]

それ以外の詳しい動作の中身は読んでない。
start(percent,segment)関数とか読めばわかるのかもしれない…。

<その他気になったところ>
BGM
status.json取得に関連する定数

var TEST_HOST="kirarafantasia-aj.kayac.cc";
var DEV_HOST="https://d37ngg8eesko7j.cloudfront.net";
var API_URL="/api/status.json";
var FALLBACK_COMPLETION=50;
var KIRARA_DAY="2018/03/24";

TEST_HOSTでstatus.jsonにアクセスしたら認証を求められ、
DEV_HOSTでstatus.jsonにアクセスしたらテスト用のJSONっぽいのが返ってきた。

コメント

このブログの人気の投稿

わたてん!(私に天使が舞い降りた!)の聖地巡礼をしてきた

2017年の百合アニメを振り返る

『うらら迷路帖』7巻の感想と、総評