Cookie Clicker(ブラウザ版)の配色が気に食わない
OBが1人で3枠は取りすぎな気がしますが、記事が余ってた&カレンダーが23:30時点でまだ空いてたので呉高専アドベントカレンダー 5日目に放流します。呉高専なーんも関係ない短編です。
ネタバレを多く含みますのでご注意ください。
Cookie Clickerの説明は省きます。知らない人はまずここにアクセスして遊んでください:https://orteil.dashnet.org/cookieclicker/
僕は攻略wikiは見るけどゲームを有利に進めるmodは入れない立場です。なのでmodには基本消極的なのですが…
ゲームを進めていくと遊べるstock marketというミニゲーム、その配色がどうも気に食わないのです。
valueが安いときに買って高いときに売るってだけなのですが、どれが安くてどれが高いのかマジで分かりません。
この配色を、modで変更します。こんな感じ。
背景色とかをいい感じにするほうがいい気がしますが、とりあえずこれでひとつ。
0: Cookie Clickerのmod
ブラウザのブックマーク機能を使い、ブックマークレットを実行することで実現します。
1: 値段に応じてpriceの色を変化させる
stock marketの各アイテムの情報はGame.Objects.Bank.minigame.goods[?]
を見ます。wikiにある計算式に基づいて標準価格を計算し、その0.5倍から2倍にかけてpriceの色を赤から緑に変化させていきます。プレイしている感じ、あまりよい色の付け方ではないです。安いものは5倍ぐらい振れるし高いのは1.5倍にすらならないので。あとfff4f4とかfafff4とか人の目じゃ分からないです。
// 赤<-> 緑 let rgAry = ["#ff0000","#ff2b2b","#ff5555","#ff8080","#ffaaaa","#ffd5d5","#ffeaea","#fff4f4","#ffffff","#fafff4","#f4ffea","#eaffd5","#d5ffaa","#bfff80","#aaff55","#95ff2b","#80ff00"]; for(let [key,val] of Object.entries(Game.Objects.Bank.minigame.goods)){ let price=val.val; // 現在の価格 let center=10+val.id*10+Game.Objects.Bank.level-1; // 標準価格 let left=center/2; // の半分 let right=center*2; // の倍 if(center < price){ // 高い let d=Math.min(8,Math.floor(8*(price-center)/(right-center))); // 1倍~2倍を8段階に分けた時、どれぐらいか val.valL.style.color=rgAry[8+d]; // 高いほど緑 } else if(price < center){ // 安い let d=Math.min(8,Math.floor(8*(center-price)/(center-left))); // 0.5倍~1倍を段階づける val.valL.style.color=rgAry[8-d]; // 安いほど赤く } }
2: 在庫があるときの色は緑から黄色に
価格表示に緑を使う関係から、在庫があるときのstockの色が緑だとまずいです。黄色にします。在庫が0になったら元の薄い白に戻すのも忘れずに。
if(val.stock!==0){ val.stockBoxL.style.color = "#ffff00"; // 黄色 } else{ val.stockBoxL.style.color = "#ffffffb3"; // デフォルト }
3: 隠し実績
Third-partyという隠し実績があり、特定のmodを入れると解除されます(通常プレイで使われない実績解除コマンドがmod内で叩かれてるってだけで、やろうと思えば開発者モードからの解除も可能なのですが。)。せっかくなので解除します。
if(Game.Achievements['Third-party'].won==0){ Game.Win('Third-party'); }
4: 以上をまとめて毎秒更新
stock marketの情報は時々刻々変化するので一定時間で更新します。1秒に1回で十分です。
setInterval( function(){ // ここに1-3の内容を書くことで毎秒実行される } ,1000 );
全体
setInterval( function(){ if(Game.Achievements['Third-party'].won==0){ Game.Win('Third-party'); } if(Game.Objects.Bank.minigameLoaded){ let rgAry = ["#ff0000","#ff2b2b","#ff5555","#ff8080","#ffaaaa","#ffd5d5","#ffeaea","#fff4f4","#ffffff","#fafff4","#f4ffea","#eaffd5","#d5ffaa","#bfff80","#aaff55","#95ff2b","#80ff00"]; for(let [key,val] of Object.entries(Game.Objects.Bank.minigame.goods)){ let price=val.val; let center=10+val.id*10+Game.Objects.Bank.level-1; let left=center/2; let right=center*2; if(center < price){ let d=Math.min(8,Math.floor(8*(price-center)/(right-center))); val.valL.style.color=rgAry[8+d]; } else if(price < center){ let d=Math.min(8,Math.floor(8*(center-price)/(center-left))); val.valL.style.color=rgAry[8-d]; } if(val.stock!==0){ val.stockBoxL.style.color = "#ffff00"; } else{ val.stockBoxL.style.color = "#ffffffb3"; } } } }, 1000 );
5: 使う
ネットにアップして、ブックマークレットを作成します
javascript:(function(){Game.LoadMod('httpsから始まるmodソースファイルの場所.js');}());
これをブックマークしてゲームを開いているタブで開けばok
javascript:(function() {Game.LoadMod('https://pointn.github.io/cookiepricecheck/cookiepricecheck.js');}());