養命酒とか飲んだことないし、暇だしJavaScript読もうぜ。

とってつけたかのようなねこ

注意

テキスト装飾とかめんどくさかったんで文字だけです。
だれか清書してくれたのむ。

序・コピペ改変は面倒

そんな事よりお前ら、ちょいと聞いてくれよ。記事とあんま関係ないけどさ。
こないだtwitterやってたんですよ。twitter。
そしたらなんか養命酒とか言ってるんですよ。
で、よく見たらなんかリンク貼ってあって、音ゲー開催中、とか書いてあるんです。
もうね、アホかと。馬鹿かと。
この改変が一番時間かかるってどういうことだよ。
要するに素人にはお薦め出来ない。そんなわけでソースコード見てみようぜ。

あ、ゲームは http://yomeishu-icho-de-joujou.com/ な。
将来リンク死んだらそん時はそん時だろ。

破・自分の限界に達した俺は――

何度やっても最高スコアが97.986で止まった俺はソースコードを見ることにした。
JavaScriptとかいう言語のことクソオブクソだと思ってるけど、ソースが楽に見れるのだけは良いよね。
adobeはさっさとflashとかいうキングオブクソ廃止して?

ソースコードを開くでござるよ

<script type=”text/javascriptsrc=”http://code.jquery.com/jquery-1.11.2.js“></script>
<script type=”text/javascriptsrc=”js/jquery.cookie.js“></script>
<script type=”text/javascriptsrc=”js/music.js“></script>
<script type=”text/javascriptsrc=”js/enchant.js“></script>
<script type=”text/javascriptsrc=”js/tl.enchant.js“></script>

んでまあゲームページでソース開いたらこんなの書いてあるわけじゃん。
ソースの味方が分からないじょうよわはみんなだいすきchrome使ってURLの先頭に view-source: って付けとけ
あとどうでもいいけどこの引用符クソダサいからCSS暇なときにでも変えといてくれ>管理人

内容がないよう

ソースを超えて何度我々の前に立ちはだかるというのか、jquery!

つってもまあ一番上のjqueryくんは今回気にしなくてもいい。2007年時点ではjqueryでないとこのほうが珍しいし。(最近は人気が減ってるという話もあるけど本筋じゃないんで省略)
んでjquery.cookieとかいうやつもまあcookieだし今回はほぼほぼ関係ねーだろ。飛ばす飛ばす。

むじっく

music.js。みゅーじっく。それっぽい名前ジャン!開いてみるモッコシ!

var notes = [
  [9280, 0, 0],		//YO
  [9850, 0, 0],		//YO
  [10290, 0, 0],		//YO
  [10550, 0, 0],		//YO
  [10790, 0, 0],		//YO
...

なんかそれっぽいのあんじゃん。
noteという名前の箱に対してYOだかMEIだかSHUだかぶち込んでるってことだろたぶん。noteって名前だけ覚えとけ。

アタリをつけたとこでこっから法則性を探すと

  1. 1番目の列は数字が増えていくだけ→たぶん時間じゃね?
  2. 2番目の列はYOのとき0、MEIのとき1、SHUのとき2になってるからまあそういうことなんだろう(適当)。
  3. 3番目の列は全部0じゃねーか!死ね!

ってことがわかるじゃん?やったな。

あとなんかその下にwords(歌詞っぽいやつ)とかimgBgxxx(画像っぽいやつ)とかあるからそういうことなんだろう(適当)。

これでmusic.jsは解析が8割終わったといっても過言ではあるまい。すげーな。

んでまあこの時点で「落ちてくるタイミング」「落ちてくる位置」が特定できたからあとはその時間に合わせて自動で打つだけ…

と言いたいところだが、音ゲーには当たり時間に応じて「超スゲーじゃん!」「スゲーじゃん!」「まあまあだね」「カス」「ヘタクソ」とかいう5段階評価がある。ありがちだよね?
その判定計算方法を俺たちはまだ知らないッ……!

えんちゃんたー(かっこいい……)

enchant.jsとtl.enchant.js。

なんかいっぱい書いてある! 大変そう!

身も蓋もない話をするとフレームワークなんだ、すまない。
http://enchantjs.com/ja/ 続きはwebで。

あい!まい!まいん!

main.js。メイン。This is 本体。
行数的にはenchantのほうがやばいことになってるので読めないことはない。ないが、めんどくさいのであまり読みたくない。

そんなときこそ変数名で検索だ。さあ、検索を始めよう。キーワードは「note」「window.onload(画面読み込まれたら実行するって合図みたいなもん)」

noteで検索したら function addNote() とかいう物体が見つかる。
中身を見ると

function jPerfect()
function jGreat()
function jGood()
function jMiss()

なんかそれっぽいのある。
こいつらの中身がパフェ~グッドまではそれぞれ該当のスコアを+1する&ミススコアを1減らす、っつー処理になってる。
そうなってる理由はたぶんスルーしたときの処理がめんどくさいことになるからだろう。

んじゃミススコアをあらかじめ定義する必要がある、どこで定義されているんだ。

perfect = 0;
great = 0;
good = 0;
miss = notes.length;

つまりはそういうことだ。

んでもうちょい下でスコア操作の奴らが呼び出されている。
一例としてYoの判定が

function Btnj_Yo() {
	if(btnYo.within(note, 20)){
		jPerfect();
	} else if(btnYo.within(note, 40)) {
		jGreat();
	} else if(btnYo.within(note, 60)) {
		jGood();
	} else if(btnYo.within(note, 80)) {
		jMiss();
	}
};

とか書いてある。
おそらく「Yo」のボタンを押すたびにこのfunctionが呼び出されるんだろう。
btnYoってなんだよ、そんな時は検索だ。検索したら思いっきり位置を指定してボタンを作っていた。おわり。

withinが検索でひっかからない! そんなあなたにはgoogleだ。
上で言ったenchantくんの中にいる。 http://enchantjs.com/ja/tutorial/lets-start-enchant-js/#ref_16
いやあ、フレームワークって便利ですねえ。

within メソッドは、スプライトの中心と中心の間の距離がどれくらい近いかで判定します。

btnYoとnoteが20以内ならPerfect、40以内ならGreat、60以内ならGood、80以内ならMissのようだ。

ここまで来たら最高得点のためにあとはスコア計算方法のみ。探すのめんどい、そんな時こそ検索だ。
スコアだからどうせ「score」で引っかかんだろ。引っかかりました。

var total = perfect+great+good+miss;
score = ((100/total)*perfect)+((95/total)*great)+((90/total)*good);

よくわかんねえな!とりあえずnoteが合計211行あったからtotalは211だろう。

パフェは100/211、0.4739…点
グレートは95/211、0.4502…点
グッドは90/211、0.4265…点

だ! コンボボーナスとかそういったのは一切ないようだ。
んでミスをすると0点になるんで、ミス0が望ましいっつーことだな。

離・結論

とりあえず全部20カウント以内に押せば全パフェ&計算式がパフェ取ればいいだけなんで
noteの時間に合わせて全部押すようにすれば100点余裕じゃね? 養命酒のTシャツ貰ったら教えてね。

あ、あとツール使って訴えられたとしても俺のことまとめて犠牲にしないでね。それだけは伝えておきたい。

チートとかよくないとおもいます!!!!1

The following two tabs change content below.



    • このエントリーをはてなブックマークに追加

    コメント

    1. nnona nnona より:

      養命酒クソまずいっつー話を聞いてからエナジードリンク信じてりゃ良いかなって

    2. 匿名 より:

      まだ生きていたのかenchantjs

      • nnona nnona より:

        みんなだいすきRPGツクールMVがjsに舵取ったから今後増えてくかもね
        外部フレームワークどこまで使えるのかしらんけど

    3. GERI より:

      99.929点とりました… グヘ…グヘヘヘ…