Help
RSS
API
Feed
Maltego
Contact
Domain > geometry.best
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2020-02-12
104.28.3.40
(
ClassC
)
2024-09-13
172.67.189.210
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyDate: Fri, 13 Sep 2024 04:32:40 GMTContent-Type: text/htmlTransfer-Encoding: chunkedConnection: keep-aliveLocation: https://geometry.best/CF-Cache-Status: DYNAMICReport-To: {endpoints:{url:https:\/\/a.nel.cloudflare.com\/report\/v4?sElKfGT4clFg6MSEidv9i706P%2BRrReck%2BQtFSGyG6MlVQ%2FBgV%2FH%2F4FVaEaav6O8ThgX2gOYr%2BK7O2P%2Fd7qy%2BckJwVAfJo%2FtO82i4F093miCyfQOFVg8T7uLhq2N7cKSk9},group:cf-nel,max_age:604800}NEL: {success_fraction:0,report_to:cf-nel,max_age:604800}Server: cloudflareCF-RAY: 8c256a2b8cb7c741-SEAalt-svc: h3:443; ma86400 html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>nginx/1.18.0/center>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Fri, 13 Sep 2024 04:32:40 GMTContent-Type: text/html; charsetUTF-8Transfer-Encoding: chunkedConnection: keep-aliveCF-Cache-Status: DYNAMICReport-To: {endpoints:{url:https:\/\/a.nel.cloudflare.com\/report\/v4?sJ4bxN01ZV%2B0UdvT%2F2GY0DTJgX2XrwheslCgI%2FkDLhcnY4DR5qh6NHzpjHp5I9Gqyr5ji1Kq87eAsj1ECvo3jsomvYdANd4kfMDA79sueFAF5BYKVwSmWqoAiNrMBT%2BeN},group:cf-nel,max_age:604800}NEL: {success_fraction:0,report_to:cf-nel,max_age:604800}Server: cloudflareCF-RAY: 8c256a2c8d4f308d-SEAalt-svc: h3:443; ma86400 !DOCTYPE html>html langen xml:langen xmlnshttp://www.w3.org/1999/xhtml> head> script> var dynamicContentRoot ; var dynamicContentPrefix ; var gtmOptions { cookie_flags: secure;samesitenone };/script>script>let HouseAds;var shellLogo img/logo.svg;async function getAds() { const response await fetch(dynamicContentPrefix + data/housePromo.json? + Date.now()); HouseAds await response.json(); if (HouseAds.shellLogo ! undefined && HouseAds.shellLogo.length > 0) { const useLogo HouseAds.shellLogo.filter(logo > logo.active); if (useLogo.length > 0) { shellLogo dynamicContentPrefix + data/img/art/ + useLogo0.id + useLogo0.imageExt; } }}getAds();class Loader { constructor () { this.logo ; this.blueWizSrcAlt ; } static show () { let container document.createElement(div); container.id progress-container; container.style ` position: fixed; top: 0; left: 0; height: 100vh; width: 100vw; z-index: 2000; background-image: var(--ss-lightoverlay); `; const progressWrapper document.createElement(div); progressWrapper.id progress-wrapper; progressWrapper.className load_screen align-items-center; progressWrapper.style ` position: absolute; left: 50%; top: -6em; transform: translateX(-50%); background-image: none; `; const blueWizLogo document.createElement(img); if (this.blueWizSrcAlt) { blueWizLogo.src this.blueWizSrcAlt; } else { blueWizLogo.src img/blueWizard_logo.png; } blueWizLogo.style` width: 16em; display: block; margin: 5em auto 0; z-index: 2000; position: absolute; left: 50%; bottom: 8em; transform: translateX(-50%); `; this.logo document.createElement(img); this.logo.src shellLogo; this.logo.style height: 16em; this.logo.id logo-svg; // container.appendChild(logo); const progressOuter document.createElement(div); progressOuter.id progress-outer; progressOuter.style ` position: relative; background: #643219; border-radius: 2em; height: 3.3em; width: 24em; margin-top: 2em; `; let progress document.createElement(div); progress.style ` margin-top: 1em; width: 23em; height: 2.2em; background: white; padding: 0.5em; border-radius: 2em; margin: .3em .5em 0; `; container.appendChild(progress); let progressBar document.createElement(span); progressBar.id progressBar; progressBar.style ` display: block; width: 20%; height: 100%; background: orange; border-radius: 2em; margin-left: 80%; margin: 0 .3em .5em 0; opacity: 0; transition: margin-left linear 500ms; transition-timing-function: ease-in-out; `; const progressBarOutside document.createElement(div); progress.appendChild(progressBar); progressWrapper.appendChild(this.logo); progressOuter.appendChild(progress); progressWrapper.appendChild(progressOuter); container.appendChild(progressWrapper); container.appendChild(blueWizLogo); // Minor for the progress bar intial load setTimeout(() > progressBar.style.opacity 1, 600); Loader.barInterval setInterval(() > { if (Loader.progressBar.style.marginLeft 0%) { Loader.progressBar.style.marginLeft 80%; } else { Loader.progressBar.style.marginLeft 0%; } }, 500); Loader.progressBar progressBar; Loader.container container; let app document.body; app.appendChild(container); } static hide () { Loader.container.style opacity : 0; transition: opacity 1s;; setTimeout(() > { Loader.container.remove(); }, 1000); } static addTask () { let id Loader.loaded.length; //console.log(Loading tasks: , ++Loader.actualTasks); Loader.loaded.push(0); return id; } static finish (id) { clearInterval(Loader.barInterval); if (Loader.progressBar) { Loader.progressBar.style.marginLeft 0%; Loader.progressBar.style.transition ; Loader.loadedid 1; Loader.updateBar(); } } static progress (id, value, total) { clearInterval(Loader.barInterval); if (Loader.progressBar) { Loader.progressBar.style.marginLeft 0%; Loader.progressBar.style.transition ; Loader.loadedid value / total; Loader.updateBar(); } return id; } static updateBar () { let loadedTotal 0; for (let l of Loader.loaded) { loadedTotal + l; } let percent loadedTotal / Loader.tasks * 95 + 5; // no more than 100% if (percent > 100) { percent 100; } Loader.progressBar.style.width percent + %; } static loadJS (path, callback) { let p path; (function (p, cb) { let xhr new XMLHttpRequest(); xhr.open(GET, p, true); let id Loader.addTask(); xhr.onprogress event > { if (Loader.progressBar) { id Loader.progress(id, event.loaded, event.total); } }; xhr.onload () > { if (xhr.status ! 200) { console.log(`Error ${xhr.status}: ${xhr.statusText}`); } else { Loader.finish(id); let script document.createElement(script); script.innerHTML xhr.response; document.body.appendChild(script); if (cb) cb(); } }; xhr.send(); })(path, callback); }}Loader.actualTasks 0;Loader.tasks 17;Loader.loaded ;window.Loader Loader;window.indexedDB window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;function openFirebaseDb () { return new Promise((resolve, reject) > { let req window.indexedDB.open(firebaseLocalStorageDb); req.onsuccess () > { let db req.result; let transaction db.transaction(firebaseLocalStorage, readwrite); let store transaction.objectStore(firebaseLocalStorage); resolve({ db, store }); } req.onerror err > reject(err); req.onupgradeneeded () > { let db req.result; let store db.createObjectStore(firebaseLocalStorage, { keyPath: fbase_key }); resolve({ db, store }); } });}var redirectIframefunction postStorageAndRedirect (iframe, storage, firebaseDb) { iframe.contentWindow.postMessage({ storage, firebaseDb }, *); window.location https://shellshock.io + window.location.search + window.location.hash;}window.addEventListener(DOMContentLoaded, () > { // Loader.blueWizSrcAlt img/blueWizard_logo_borg.png; Loader.show();});/script>!-- title, seo meta and favicons -->meta charsetUTF-8 />meta nameviewport contentwidthdevice-width, initial-scale1>meta namefacebook-domain-verification content6lfua33vx0abiv1asnt9p13aac29xy />title>Shell Shockers 🍳 Multiplayer io game/title>meta nameDescription contentBlocked? Try geometry.monster | The OFFICIAL home of Shell Shockers, the world’s best egg-based shooter! It’s like your favorite FPS battlefield game… with eggs.>meta nameKeywords contentPlay, Free, Online, Multiplayer, Games, IO, ShellShockers, Shooter, Bullets, Top Down>meta nameauthor contentBlue Wizard Digital>meta nametheme-color content#0B93BD />meta namebackground-color content#0B93BD />link relicon hreffavicon.ico typeimage/x-icon>link relapple-touch-icon hreffavicon192.png sizes192x192 />link relicon hreffavicon256.png sizes512x512 />meta propertyog:url contenthttps://www.shellshock.io />meta propertyog:type contentwebsite />meta propertyog:image:width content1000 />meta propertyog:image:height content500 />meta propertyog:image contenthttps://www.shellshock.io/img/previewImage_shellShockers.jpg />meta nameimage propertyog:image contenthttps://www.shellshock.io/img/previewImage_shellShockers.jpg />meta propertyog:title contentShell Shockers | by Blue Wizard Digital />meta propertyog:description contentBlocked? Try geometry.monster | The OFFICIAL home of Shell Shockers, the world’s best egg-based shooter! It’s like your favorite FPS battlefield game… with eggs. />meta nametwitter:card contentsummary_large_image>meta nametwitter:site content@eggcombat>meta nametwitter:creator content@eggcombat>meta nametwitter:title contentShell Shockers | by Blue Wizard Digital>meta nametwitter:description contentBlocked? Try geometry.monster | The OFFICIAL home of Shell Shockers, the world’s best egg-based shooter! It’s like your favorite FPS battlefield game… with eggs.>meta nametwitter:image contenthttps://www.shellshock.io/img/previewImage_shellShockers.jpg>!-- Styles & Fonts -->link hrefhttps://fonts.googleapis.com/css?familySigmar+One|Nunito:100,200,600,700,900 relstylesheet>link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css crossoriginanonymous>link relstylesheet hrefstyles/style.min.css?1726004714>script>function storageFactory(getStorage) { const inMemoryStorage {}; function isSupported() { try { var testKey __some_random_key_you_are_not_going_to_use__; getStorage().setItem(testKey, testKey); getStorage().removeItem(testKey); return true; } catch (e) { return false; } } function clear() { if (isSupported()) { getStorage().clear(); } else { inMemoryStorage {}; } } function getItem(name) { if (isSupported()) { return getStorage().getItem(name); } if (inMemoryStorage.hasOwnProperty(name)) { return inMemoryStoragename; } return null; } function key(index) { if (isSupported()) { return getStorage().key(index); } else { return Object.keys(inMemoryStorage)index || null; } } function removeItem(name) { if (isSupported()) { getStorage().removeItem(name); } else { delete inMemoryStoragename; } } function setItem(name, value) { if (isSupported()) { getStorage().setItem(name, value); } else { inMemoryStoragename String(value); } } function length() { if (isSupported()) { return getStorage().length; } else { return Object.keys(inMemoryStorage).length; } } return { getItem: getItem, setItem: setItem, removeItem: removeItem, clear: clear, key: key, get length() { return length(); } }; } const localStore storageFactory(() > localStorage); const sessionStore storageFactory(() > sessionStorage);/script>style>.eggIcon { display: inline-block; color: #444444; width: .8em; height: .8em; fill: currentColor;}/style> style>.eggIconLocked { display: inline-block; color: #444444; width: .8em; height: .8em; fill: currentColor;}/style> svg styleposition: absolute; width: 0; height: 0; overflow: hidden version1.1 xmlnshttp://www.w3.org/2000/svg xmlns:xlinkhttp://www.w3.org/1999/xlink> defs> symbol idicon-egg-locked viewBox0 0 14.59 18.12>g> path classst0 dM7.3,5.4c-0.6,0-1.1,0.5-1.1,1.1v1.3h2.2V6.5C8.4,5.9,7.9,5.4,7.3,5.4z/> path classst0 dM7.5,0.1c-4,0-7.4,6.7-7.4,10.7S3.4,18,7.3,18c3.9,0,7.2-3.2,7.2-7.2S11.5,0.1,7.5,0.1z M11.3,12.5 c0,0.9-0.7,1.6-1.6,1.6H4.8c-0.9,0-1.6-0.7-1.6-1.6V7.8h1.5V6.5C4.8,5.1,5.9,4,7.3,4c1.4,0,2.5,1.1,2.5,2.5v1.3h1.5V12.5z/>/g> /symbol> /defs>/svg>!-- ParsedURL -->script> var parsedUrl (function parseUrl () { var url {}; var loc window.location; url.root loc.origin + loc.pathname; var query loc.search.substring(1).split(&); url.query {}; for (let i 0; i query.length; i++) { var arr queryi.split(); if (arr0) { if (arr1 undefined) { arr1 true; } else if (!isNaN(arr1)) { arr1 parseFloat(arr1); } url.queryarr0 arr1; } } url.hash loc.hash.substring(1); var host loc.host.split(.); url.dom host0; url.top host1; if (url.hash.length 0) url.hash undefined; return url; })();/script>!-- third party globals -->script> var pokiActive false, crazyGamesActive false, thirdPartyAdblocker false, testCrazy false; let crazyGamesHouseAdCheck null; // we need a getter and setter for the vue instance const getCrazyGamesActive { _value: , set value(newValue) { this._value newValue; crazyGamesActive newValue; triggerCheck(newValue); }, get value() { return this._value; } }; function triggerCheck(value) { if (crazyGamesHouseAdCheck) { crazyGamesHouseAdCheck.isCrazyGames value; } } class CrazyGames { constructor() { this.initialized false; this.crazysdk null; this.thirdPartyAdblocker false; } async init() { if (!window.CrazyGames || !window.CrazyGames.SDK) { console.log(CrazyGames SDK not available); return; } try { await window.CrazyGames.SDK.init(); this.crazysdk window.CrazyGames.SDK; this.thirdPartyAdblocker await this.crazysdk.ad.hasAdblock(); this.initialized true; crazyGamesActive true; getCrazyGamesActive.value true; console.log(CrazyGames SDK initialized successfully.); } catch (error) { console.error(Failed to initialize CrazyGames SDK:, error); } } async performAction(action, ...args) { if (!this.initialized) { return; } try { const result action.call(this, ...args); if (result instanceof Promise) { await result; } } catch (error) { console.error(Error performing action:, error); } } inviteLink(invite) { if (!this.initialized) { return; } return this.crazysdk.game.inviteLink(invite); } async requestBanner(banner) { try { await this.performAction(() > this.crazysdk.banner.requestBanner(banner)); } catch (error) { console.error(Error requesting banner:, error); } } async requestResponsiveBanner(banner) { try { await this.performAction(() > this.crazysdk.banner.requestResponsiveBanner(banner)); } catch (error) { console.error(Error requesting responsive banner:, error); } } clearAllBanners() { this.performAction(() > this.crazysdk.banner.clearAllBanners()); } showInviteButton(invite) { this.performAction(() > this.crazysdk.game.showInviteButton(invite)); } hideInviteButton() { this.performAction(() > this.crazysdk.game.hideInviteButton()); } requestAd(type, callbacks) { this.performAction(() > this.crazysdk.ad.requestAd(type, callbacks)); } gameplayStop() { this.performAction(() > this.crazysdk.game.gameplayStop()); } gameplayStart() { this.performAction(() > this.crazysdk.game.gameplayStart()); } adBlocker() { return this.initialized ? this.thirdPartyAdblocker : undefined; } } // Third party globals function initializeCrazyGamesSDK() { if (!window.crazySdk) { window.crazySdk new CrazyGames(); window.crazySdk.init(); } else { console.log(CrazyGames SDK is already initialized.); } } window.addEventListener(load, initializeCrazyGamesSDK);/script>!-- Crazy Games -->!-- European Union detection -->script>isFromEU 0 ? true : false/script>!-- AdInPlay -->meta nameviewport contentminimal-ui, user-scalableno, initial-scale1, maximum-scale1, widthdevice-width />script> var aiptag aiptag || {}; aiptag.cmd aiptag.cmd || ; aiptag.cmd.display aiptag.cmd.display || ; aiptag.cmd.player aiptag.cmd.player || ;/script> script async src//api.adinplay.com/libs/aiptag/pub/SSK/shellshock.io/tag.min.js>/script>!-- GTM -->!-- Google tag (gtag.js) -->script async srchttps://www.googletagmanager.com/gtag/js?idG-79NWRZXYCB>/script>script> window.dataLayer window.dataLayer || ; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, G-79NWRZXYCB, gtmOptions);/script>!-- Google Tag Manager -->script>(function(w,d,s,l,i){wlwl||;wl.push({gtm.start:new Date().getTime(),event:gtm.js});var fd.getElementsByTagName(s)0,jd.createElement(s),dll!dataLayer?&l+l:;j.asynctrue;j.srchttps://www.googletagmanager.com/gtm.js?id+i+dl;f.parentNode.insertBefore(j,f);})(window,document,script,dataLayer,GTM-K5MSJHJ);/script>!-- End Google Tag Manager -->!-- In house ads -->script> window.googletag window.googletag || {cmd: }; let inHouseSlot; const slots ; const dpfNetwork /21743024831/, inHouseAdSlot ShellShockers_LoadingScreen_HouseAds inHouseAdSize 468, 60, 970, 90, 970, 250, 728, 90, inHouseAdDiv ShellShockers_LoadingScreen_HouseAds, adSlots ; // Helper to setup slots and add to slot array const adDefineSlot (slot, sizes, id) > { return adSlots.push({slot, sizes, id}); }; // Defining the slots for the the array const loadingScreeningAd adDefineSlot(inHouseAdSlot, inHouseAdSize, inHouseAdDiv); // Helper to add slots to google service function addServiceToSlot() { slots.forEach(slot > { slot.addService(googletag.pubads()); }); } // Get all the slots, add to google ad defineSlot method function getAllDefinedSlots(allSlots) { let definedSlots ; allSlots.forEach(adSlot > { for (var i 0, len adSlot.length; i len; i++) { slots.push(googletag.defineSlot(dpfNetwork + adSloti.slot, adSloti.sizes, adSloti.id)); } }) return addServiceToSlot(slots); } const gtagInHouseLoadingBannerIntialLoad () > { if (typeof hasPoki ! undefined) { console.log(haspoki, typeof(hasPoki)); return; } googletag.cmd.push(function() { getAllDefinedSlots(adSlots); googletag.pubads().disableInitialLoad(); googletag.enableServices(); }); }; gtagInHouseLoadingBannerIntialLoad(); const adRenderedEvent () > { return googletag.pubads().addEventListener(slotRenderEnded, (event) > { vueApp.disaplyAdEventObject(event); }); }; const gtagInHouseLoadingBanner () > { googletag.cmd.push(function() { googletag.pubads().refresh(slots0); adRenderedEvent(); }); }; const destroyInhouseAdForPaid () > { googletag.destroySlots(slots0); };/script>!-- Firebase -->script srchttps://www.gstatic.com/firebasejs/9.17.2/firebase-app-compat.js>/script>script srchttps://www.gstatic.com/firebasejs/9.17.2/firebase-auth-compat.js>/script>script srchttps://www.gstatic.com/firebasejs/ui/6.0.2/firebase-ui-auth.js>/script>link typetext/css relstylesheet hrefhttps://www.gstatic.com/firebasejs/ui/6.0.2/firebase-ui-auth.css />!-- Facebook -->!-- Facebook Pixel Code -->script> !function(f,b,e,v,n,t,s){if(f.fbq)return;nf.fbqfunction(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbqn; n.pushn;n.loaded!0;n.version2.0;n.queue;tb.createElement(e);t.async!0; t.srcv;sb.getElementsByTagName(e)0;s.parentNode.insertBefore(t,s)}(window, document,script,https://connect.facebook.net/en_US/fbevents.js); fbq(init, 771186996377132); fbq(track, PageView);/script>noscript> img height1 width1 styledisplay:none srchttps://www.facebook.com/tr?id771186996377132&evPageView&noscript1/>/noscript>!-- DO NOT MODIFY -->!-- End Facebook Pixel Code -->!-- progressive web app -->!-- button idaddToHomescreen stylez-index:333;display: none; position:absolute; top:0px; right: 75%; cursor:pointer; classss_button btn_yolk bevel_yolk>Add to your desktop!/button> -->script> let pwaBlockAds false; // if (serviceWorker in navigator) { // console.log(Will the service worker register?); // navigator.serviceWorker.register(service-worker.js) // .then(function(reg){ // console.log(Yes, it did.); // }).catch(function(err) { // console.log(No it didnt. This happened:, err) // }); // } if (window.matchMedia((display-mode: standalone)).matches) { pwaBlockAds utm_source in parsedUrl.query && parsedUrl.query.utm_source homescreen; ga(send, event, pwa, desktop opened); } /script> !-- Music audio tag -->audio idtheAudio preloadmetadata>/audio>!-- VueJS -->script src./js/vue/vue.min.2.6.10.js>/script>!-- tools and varibles -->script srchttps://cdn.jsdelivr.net/npm/fuse.js@6.6.2>/script>script> localStore.removeItem(brbTime); String.prototype.format String.prototype.f function() { var s this, i arguments.length; while (i--) { s s.replace(new RegExp(\\{ + i + \\}, gm), argumentsi); } return s;};// HTMLCanvasElement.prototype.getContext function(origFn) {// return function(type, attribs) {// attribs attribs || {};// attribs.preserveDrawingBuffer true;// return origFn.call(this, type, attribs);// };// }(HTMLCanvasElement.prototype.getContext);function getKeyByValue (obj, value) { // if (!obj && !value) { // return; // } for (var prop in obj) { if (obj.hasOwnProperty(prop)) { if (objprop value) { return prop; } } }}function objToStr (obj) { var str JSON.stringify(obj, null, 4).replace(/\\|/g, ); //str str.replace(/\\|/g, ); return str;}function detectChromebook() { return /\bCrOS\b/.test(navigator.userAgent);}function removeChildNodes (name) { var myNode document.getElementById(name); while (myNode.firstChild) { myNode.removeChild(myNode.firstChild); }}function logCallStack() { var stack new Error().stack; console.log(stack);}function getRequest (url, callback) { if (url.startsWith(./)) url url.slice(2); url dynamicContentPrefix + url; var req new XMLHttpRequest(); if (!req) { return false; } if (typeof callback ! function) callback function () {}; req.onreadystatechange function(){ if(req.readyState 4) { return req.status 200 ? callback(null, req.responseText) : callback(req.status, null); } } req.open(GET, url, true); req.send(null); return req;}function hasValue (a) { return (a ! undefined && a ! null && a ! 0);}Array.prototype.shallowClone function() { return this.slice(0);}function deepClone (o) { return JSON.parse(JSON.stringify(o));}function isString (value) { return typeof value string || value instanceof String;}const capitalize (s) > { if (typeof s ! string) return return s.charAt(0).toUpperCase() + s.slice(1)};function isHttps() { //return true // TODOJOSH return (document.location.protocol https:);}function elOverlap(el1, el2) { const domRect1 el1.getBoundingClientRect(); const domRect2 el2.getBoundingClientRect(); return !( domRect1.top > domRect2.bottom || domRect1.right domRect2.left || domRect1.bottom domRect2.top || domRect1.left > domRect2.right ); } function loadJS(FILE_URL, async true, callback, errorCallback) { let scriptEle document.createElement(script); scriptEle.setAttribute(src, FILE_URL); scriptEle.setAttribute(type, text/javascript); scriptEle.setAttribute(async, async); document.body.appendChild(scriptEle); // success event scriptEle.addEventListener(load, () > { if (callback) callback(); console.log(File loaded) }); // error event scriptEle.addEventListener(error, (ev) > { if (errorCallback) errorCallback(); console.log(Error on loading file, ev); }); } function debounce(fn, wait){ let timer; return function(...args){ if(timer) { clearTimeout(timer); // clear any pre-existing timer } const context this; // get the current context timer setTimeout(()>{ fn.apply(context, args); // call the function if time expires }, wait); }} function getStoredNumber (name, def) { var num localStore.getItem(name); if (!num) { return def; } return Number(num);}function getStoredBool (name, def) { var str localStore.getItem(name); if (!str) { return def; } return str true ? true : false;}function getStoredString (name, def) { var str localStore.getItem(name); if (!str) { return def; } return str;}function getStoredObject (name, def) { var str localStore.getItem(name); if (!str) { return def; } return JSON.parse(str);}function getSetIncrementStoredNum(name, set) { const val localStore.getItem(name); if (val) { localStore.setItem(name, Number(val) + set); } else { localStore.setItem(name, set); } return Number(localStore.getItem(name));} var shellColors #ffffff, #c4e3e8, #e2bc8b, #d48e52, #cb6d4b, #8d3213, #5e260f, #e70a0a, #aa24ce, //#f17ff9, // Old Pink #E0219A, // Barbie Pink #FFD700, #33a4ea, #3e7753, #59db27, //#99953a;var freeColors shellColors.slice(0, 7);var paidColors shellColors.slice(7, shellColors.length); const RESPAWNADUNIT shellshockers_respawn_banner-pr2; const RESPAWN2ADUNIT shellshockers_respawn_banner_2-pr; const RESPAWN3ADUNIT shellshockers_respawn_banner_3-pr; const AIPSUBID proxy; var Slot { Primary: 0, Secondary: 1 }; var EGGCOLOR { white: 0, skyblue: 1, beige: 2, tan: 3, brown: 4, caramel: 5, chocolate: 6, red: 7, purple: 8, violet: 9, yellow: 10, babyblue: 11, darkgreen: 12, green: 13 } // Type matches contents of the item_type table (could be generated from a db query but ... meh) var ItemType { Hat: 1, Stamp: 2, Primary: 3, Secondary: 4, Grenade: 6, Melee: 7 } var CharClass { Soldier: 0, Scrambler: 1, Ranger: 2, Eggsploder: 3, Whipper: 4, Crackshot: 5, TriHard: 6 }; const PurchaseType { vip: 0, purchase: 1 }; const DmgType { name: Eggk47 }, { name: Scrambler }, { name: FreeRanger }, { name: Cluck9mm }, { name: Rpegg }, { name: Whipper }, { name: Crackshot }, { name: TriHard }, { name: Grenade }, { name: Melee }, { name: Fall } ; const SOCIALMEDIA fa-facebook-square, fa-instagram-square, fa-tiktok, fa-discord, fa-youtube, fa-twitter-square, fa-twitch ; const ItemIcons { Hat: #ico-hat, Stamp: #ico-stamp, Primary: #ico-primary, Secondary: #ico-secondary, Grenade: #ico-grenade, Melee: #ico-melee }; const PhotoBoothCMD { size: 0, pose: 1, map: 2, color: 0, itemHide: 4, open: 5, close: 6, reset: 7, screenGrab: 8, }; const ChallengePeriod { 0: {type: daily, period: 86400}, 1: {type: weekly, period: 604800}, 2: {type: monthly, period: 2592000}, };const ChallengeType { 0: kills, 1: damage, 2: deaths, 3: movement, 4: collect, 5: timed, 6: kotc, 7: cts, 8: ffa, 9: items, 10: eggsEarned, 11: shop,};const ChallengeSubType { 0: killStreak, 1: weaponType, 2: damage, 3: distance, 4: jump, 5: map, 6: timePlayed, 7: timeAlive, 8: condition, 9: color, 10: kills, 11: shot, 12: hp, 13: scoped, 14: scope, 15: death, 16: oneShot, 17: reload, 18: collect, 20: capturing, 21: capture, 22: contest, 23: win,};const ChallengeConditions { 0: killstreak, 1: weaponType, 2: damage, 3: distance, 4: jump, 5: map, 6: timesPlayed, 7: timeAlive, 8: condition, 9: color, 10: kills, 11: shot, 12: hp, 13: scoped, 14: scope, 15: oneShot, 16: ammo, 17: grenade, 18: victim,}; /* Ranges Hat 1000 - 1999 Stamp 2000 - 2999 Secondary 3000 - 3099 Soldier 3100 - 3399 Range 3400 - 3599 Scrambler 3600 - 3799 Eggsploder 3800 - 3999 Whipper 4000 - 4199 Crackshot 4200 - 4499 TriHard 4500 - 16000 Grenade 16000 - 16383 *//script>!-- shellshockers js -->script> function ssJSComplete () { window.onloadingcomplete(); } setTimeout(() > { Loader.loadJS(js/screenShot.js?1706568175); Loader.loadJS(js/shellshock.js?1726004735, ssJSComplete); }, 100);/script> style> #ad-block-test { width: 1px; height: 1px; position: absolute; left: -9999px; background: url(https://ads.example.com/ad.jpg) no-repeat; } /style> /head> body> !-- google tag manager noscript --> !-- Google Tag Manager (noscript) -->noscript>iframe srchttps://www.googletagmanager.com/ns.html?idGTM-K5MSJHJheight0 width0 styledisplay:none;visibility:hidden>/iframe>/noscript>!-- End Google Tag Manager (noscript) --> svg width0 height0 styleposition:absolute>symbol viewBox0 0 31.571 27.155 idico-backToGame xmlnshttp://www.w3.org/2000/svg>path dM2.057 26.506c-2.893-4.578-5.684-18.63 13.655-18.63h1.522V0L31.57 11.857 17.234 23.716V15.84h-4.35c-5.621 0-11.757 1.656-8.87 9.685.622 1.722-1.231 2.13-1.957.98Z/>/symbol>symbol xml:spacepreserve styleenable-background:new 0 0 24 19.9 viewBox0 0 24 19.9 idico-checkmark xmlnshttp://www.w3.org/2000/svg>path dM10 18.2c-.2 0-.4-.1-.6-.2l-6.7-4.5c-.5-.3-.6-.9-.3-1.4l2.5-3.8c.2-.2.4-.4.7-.4h.1c.3 0 .6.1.8.3l3.4 3.1 6.8-9.1c.2-.2.5-.4.8-.4.3 0 .6.1.8.4l3.3 4c.3.4.3 1-.1 1.3L10.7 17.9c-.2.2-.5.3-.7.3z stylefill:#f7ef1d/>path dm17.4 2.7 3.3 4L10 17.2l-6.7-4.5 2.5-3.8 4.2 3.8 7.4-10m0-2c-.7 0-1.2.3-1.6.8L9.7 9.8 7.1 7.4c-.3-.3-.8-.5-1.3-.5h-.2c-.6.1-1.2.4-1.5.9l-2.5 3.8c-.6.9-.4 2.2.5 2.8l6.7 4.5c.3.2.7.3 1.1.3.5 0 1-.2 1.4-.6L22.1 8.1c.7-.7.8-1.9.1-2.7l-3.3-4c-.3-.4-.9-.7-1.5-.7z stylefill:#0c576f/>/symbol>symbol viewBox0 0 18.703 34.574 idico-costDollar xmlnshttp://www.w3.org/2000/svg>path dM16.876 27.512c-1.219 1.391-2.86 2.306-4.923 2.744v1.793c0 .756-.214 1.366-.642 1.83s-.983.695-1.663.695-1.235-.232-1.663-.695-.642-1.074-.642-1.83v-1.646c-2.437-.341-4.522-1.134-6.256-2.379-.395-.268-.675-.572-.84-.914C.083 26.769 0 26.318 0 25.757c0-.732.192-1.366.577-1.903.383-.536.84-.805 1.366-.805.263 0 .527.05.79.146.264.098.604.281 1.02.55.966.584 1.867 1 2.701 1.243a9.456 9.456 0 0 0 2.667.366c1.163 0 2.047-.213 2.65-.64.605-.427.907-1.067.907-1.921 0-.512-.181-.933-.544-1.262-.362-.33-.813-.591-1.35-.787s-1.323-.439-2.354-.732c-1.646-.463-2.996-.932-4.05-1.408-1.054-.476-1.965-1.22-2.733-2.232C.877 15.36.494 14.001.494 12.293c0-1.952.614-3.646 1.844-5.086 1.23-1.439 2.854-2.39 4.874-2.853v-1.83c0-.732.219-1.335.658-1.81A2.147 2.147 0 0 1 9.516 0c.68 0 1.235.232 1.663.695s.642 1.073.642 1.83v1.72c1.822.316 3.6 1.084 5.334 2.304.396.292.675.616.84.969.165.354.247.787.247 1.3 0 .731-.198 1.366-.593 1.902s-.856.805-1.383.805a2 2 0 0 1-.757-.147c-.242-.097-.592-.28-1.053-.548a37.775 37.775 0 0 0-1.022-.604 8.013 8.013 0 0 0-1.695-.732 6.624 6.624 0 0 0-1.926-.274c-.988 0-1.79.238-2.404.713-.615.475-.922 1.116-.922 1.92 0 .782.35 1.367 1.054 1.757.702.39 1.81.781 3.325 1.17 1.625.416 2.958.855 4.001 1.318 1.042.463 1.943 1.207 2.7 2.232.757 1.024 1.136 2.402 1.136 4.134 0 1.976-.61 3.658-1.827 5.048Z/>/symbol>symbol viewBox0 0 24.675 30.834 idico-costEgg xmlnshttp://www.w3.org/2000/svg>path dM12.612 0c6.814 0 12.063 12.114 12.063 18.774s-5.524 12.06-12.338 12.06S0 25.434 0 18.774 5.798 0 12.612 0Z/>/symbol>symbol viewBox0 0 24 24 xml:spacepreserve idico-disabled xmlnshttp://www.w3.org/2000/svg>g fill#0B93BD>path dM12 24C5.4 24 0 18.6 0 12S5.4 0 12 0s12 5.4 12 12-5.4 12-12 12zm0-22C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2z/>path dM19.8 20.8c-.3 0-.5-.1-.7-.3L3.5 4.9c-.4-.4-.4-1 0-1.4s1-.4 1.4 0l15.6 15.6c.4.4.4 1 0 1.4-.2.2-.5.3-.7.3z/>/g>/symbol>symbol viewBox0 0 24 24 xml:spacepreserve idico-egg-w-outline xmlnshttp://www.w3.org/2000/svg>path classafegg-fill dM12 21.6c-4.4 0-8-3.5-8-7.8 0-4 3.4-11.4 8.1-11.4 4.8 0 7.8 7.5 7.8 11.4.1 4.3-3.5 7.8-7.9 7.8z stylefill-rule:evenodd;clip-rule:evenodd/>path classafegg-stroke dM12.1 3.9c3.6 0 6.3 6.4 6.3 9.9s-2.9 6.3-6.5 6.3-6.5-2.8-6.5-6.3c.1-3.5 3.2-9.9 6.7-9.9m0-3C6.2.9 2.5 9.4 2.5 13.8c0 5.2 4.3 9.3 9.5 9.3s9.5-4.2 9.5-9.3C21.5 9.4 18.2.9 12.1.9z/>/symbol>symbol viewBox0 0 35.313 35.313 idico-fullscreen xmlnshttp://www.w3.org/2000/svg>path dM31.243 0h-19.91a4.074 4.074 0 0 0-4.07 4.07v13.21H4.07A4.074 4.074 0 0 0 0 21.351v9.892a4.074 4.074 0 0 0 4.07 4.07h9.892a4.074 4.074 0 0 0 4.07-4.07V28.05h13.211a4.074 4.074 0 0 0 4.07-4.07V4.07A4.074 4.074 0 0 0 31.243 0ZM14.526 31.244c0 .31-.253.563-.564.563H4.07a.564.564 0 0 1-.564-.563V21.35c0-.31.253-.564.564-.564h3.193v3.194a4.074 4.074 0 0 0 4.07 4.07h3.193v3.193Zm17.28-7.263c0 .31-.252.563-.563.563h-19.91a.564.564 0 0 1-.564-.563V4.07c0-.31.253-.564.564-.564h19.91c.31 0 .564.253.564.564v19.91Z/>/symbol>symbol viewBox0 0 30.281 36.454 idico-goldenEgg xmlnshttp://www.w3.org/2000/svg>path dM15.14 36.45c9.214.215 16.596-7.384 14.897-17.837C28.537 9.395 21.957 0 15.14 0S1.744 9.395.245 18.613c-1.7 10.453 5.682 18.052 14.896 17.837Z stylefill:#f7941d/>path dM21.984 7.734a.42.42 0 0 0 .346-.665c-1.55-2.204-6.684-8.21-12.969-1.834l-.061.066c-1.718 1.528-3.26 3.76-4.173 6.336-1.941 5.477-.647 10.123 2.658 11.294 3.305 1.172 8.42-2.123 10.362-7.6.725-2.043.945-4.06.77-5.849-.08-.818.483-1.56 1.301-1.647.66-.07 1.258-.11 1.766-.101Z stylefill:#fab413/>path dM6.532 29.874c-.297-.103-.517.274-.283.483 2.236 1.995 7.782 5.884 14.261 2.568 7.119-3.643 7.38-11.682 6.402-15.857-.072-.308-.52-.284-.562.03-.392 2.92-1.934 9.49-7.948 12.181-5.194 2.324-9.717 1.342-11.87.595Z stylefill:#ca7918/>path dM7.257 10.709s.697-3.93 4.722-6.338 4.468 1.807 2.313 2.979-4.257.087-7.035 3.359Z stylefill:#fcd884/>/symbol>symbol xml:spacepreserve styleenable-background:new 0 0 30.3 36.5 viewBox0 0 30.3 36.5 idico-goldenEgg-callout xmlnshttp://www.w3.org/2000/svg>path dM15.1 36.4c9.2.2 16.6-7.4 14.9-17.8C28.5 9.4 22 0 15.1 0S1.7 9.4.2 18.6c-1.7 10.5 5.7 18.1 14.9 17.8z stylefill:#f7941d/>path dM22 7.7c.2 0 .4-.2.4-.4 0-.1 0-.2-.1-.2-1.5-2.2-6.7-8.2-13-1.8C7.6 6.8 6 9.1 5.1 11.6c-1.9 5.5-.6 10.1 2.7 11.3 3.3 1.2 8.4-2.1 10.4-7.6.7-2 .9-4.1.8-5.8-.1-.8.5-1.6 1.3-1.6.6-.1 1.2-.2 1.7-.2z stylefill:#fab413/>path dM6.5 29.9c-.3-.1-.5.3-.3.5 2.2 2 7.8 5.9 14.3 2.6 7.1-3.6 7.4-11.7 6.4-15.9-.1-.3-.5-.3-.6 0-.4 2.9-1.9 9.5-7.9 12.2-5.2 2.3-9.7 1.3-11.9.6z stylefill:#ca7918/>path dM7.3 10.7S8 6.8 12 4.4s4.5 1.8 2.3 3-4.3 0-7 3.3z stylefill:#fcd884/>path dM13 21c-.5 0-.8-.1-.9-.1-.1-.1-.1-.4-.2-.9 0-.1-.1-.2-.1-.3v-1.1c0-.2-.1-.8-.3-1.8v-.5c0-.1-.1-.3-.1-.5V15c0-.4-.1-.6-.1-.7v-.4c0-.2 0-.5-.1-.9 0-.1 0-.3-.1-.6-.1-.6-.2-1.2-.2-1.6 0-.3-.1-.7-.2-1.1v-.1s.1 0 .1-.1c.3-.1.7-.2 1.2-.2h.7c.3 0 .5 0 .7-.1.1 0 .2 0 .4-.1h4.6c.1.1.2.1.3.2.3.1.5.2.7.4.1.1.1.2.1.4 0 .8-.1 1.4-.3 2l-.7 4v.2c-.1.1-.1.2-.1.4l-.1.4v.2c0 .4-.1.9-.2 1.6-.1.5-.3 1.2-.4 2 0 0 0 .1-.1.1s-.2.1-.3.1c-.3.1-1 .1-2.1.1H14c-.4-.1-.7-.1-1-.2zm2.7 7h-1.9c-.7 0-1.2 0-1.6-.1-.2 0-.3 0-.3-.1l-.1-2.4v-1.1c0-.1 0-.2.1-.3v-.5c0-.1 0-.2.1-.3.1-.1.2-.2.4-.2H16c.6 0 1.1 0 1.5.1.5.1.8.2.8.5V25c0 .1 0 .6.1 1.3v1c0 .3-.1.4-.1.6-.2.1-.3.1-.5.2h-.5c-.7 0-1.2 0-1.6-.1z stylefill:#fff/>/symbol>symbol viewBox0 0 58 58 idico-grenade xmlnshttp://www.w3.org/2000/svg>path dm41.24 26.11 1.95-2a1.91 1.91 0 0 0 0-2.71l-3.29-3.23.21-.21a1 1 0 0 0 0-1.45l-3.33-3.32a1 1 0 0 0-1.46 0l-1.92 1.93a4.57 4.57 0 1 0-5.28 7.31C23.8 23 19 25.21 16.69 27.57A10.18 10.18 0 0 0 17.07 42a10.18 10.18 0 0 0 14.4.3c3-3 6-9.87 5.32-14.68l.14.14a1.89 1.89 0 0 0 1.51.55L40 29.92a1.52 1.52 0 0 1 .29 1.65l-5.21 12.12 1.29.5a.88.88 0 0 0 1.05-.45l6.51-12.28a1.54 1.54 0 0 0-.09-1.59Zm-14.3-7.75a3.21 3.21 0 0 1 6.25-1.05l-2 2a1.91 1.91 0 0 0-.37 2.18 2.93 2.93 0 0 1-.67.07 3.21 3.21 0 0 1-3.21-3.2Z/>/symbol>symbol viewBox0 0 58 58 idico-hat xmlnshttp://www.w3.org/2000/svg>path dM45.62 33a17.85 17.85 0 0 0-4.76-.7s-1.71-15.38-6-15.38c-2 0-4.32 2-5.9 2s-3.93-2-5.9-2c-4.25 0-6 15.38-6 15.38a17.85 17.85 0 0 0-4.76.7c-1.94.69-2.6 2.61-1.21 3.91 2.07 1.93 7.81 4 17.83 4.13 10-.16 15.76-2.2 17.83-4.13 1.47-1.28.81-3.2-1.13-3.91Z stylefill:#fff/>/symbol>symbol viewBox0 0 33.956 34.476 idico-map-size-large xmlnshttp://www.w3.org/2000/svg>path dM33.868 33.088 30.273 25.1a1.613 1.613 0 0 0-1.47-.95h-5.872a82.739 82.739 0 0 1-4.097 4.925l-1.842 2.033-1.841-2.033a82.739 82.739 0 0 1-4.098-4.926h-5.9a1.61 1.61 0 0 0-1.47.951L.088 33.088a.984.984 0 0 0 .898 1.388H32.97a.984.984 0 0 0 .898-1.388Z classalcls-1/>path dM16.992 27.408s1.185-1.308 2.75-3.258c3.057-3.806 7.569-10.062 7.569-13.831C27.31 4.619 22.69 0 16.992 0S6.673 4.62 6.673 10.319c0 3.769 4.512 10.025 7.569 13.831a79.831 79.831 0 0 0 2.75 3.258Zm-2.836-12.124V8.496c0-.347.104-.625.312-.833.208-.207.49-.31.846-.31.364 0 .652.103.864.31.212.208.317.486.317.833v5.988h2.924c.737 0 1.107.318 1.107.954 0 .322-.091.558-.274.712-.183.152-.46.228-.833.228h-4.182c-.347 0-.615-.093-.8-.28-.187-.186-.28-.457-.28-.814Z classalcls-1/>/symbol>symbol viewBox0 0 33.956 34.476 idico-map-size-med xmlnshttp://www.w3.org/2000/svg>path dM30.273 25.1a1.613 1.613 0 0 0-1.47-.95h-5.872a82.739 82.739 0 0 1-4.097 4.926l-1.842 2.033-1.841-2.033a82.739 82.739 0 0 1-4.098-4.926h-5.9a1.61 1.61 0 0 0-1.47.951L.088 33.088a.984.984 0 0 0 .898 1.388H32.97a.984.984 0 0 0 .898-1.388L30.273 25.1Z classamcls-1/>path dM16.992 27.408s1.185-1.308 2.75-3.258c3.057-3.806 7.569-10.062 7.569-13.831C27.31 4.619 22.69 0 16.992 0S6.673 4.62 6.673 10.319c0 3.769 4.512 10.025 7.569 13.831a79.831 79.831 0 0 0 2.75 3.258ZM14.11 16.122c-.199.2-.457.298-.776.298-.308 0-.562-.097-.762-.29s-.297-.46-.297-.796v-7.21c0-.353.107-.64.324-.861s.492-.331.828-.331c.24 0 .455.068.65.205s.358.334.49.59l2.438 4.585 2.426-4.585c.273-.53.644-.795 1.113-.795.336 0 .61.11.821.33s.319.509.319.862v7.21c0 .336-.098.6-.292.795s-.45.291-.769.291c-.31 0-.562-.097-.761-.29s-.298-.46-.298-.796v-3.896l-1.511 2.783c-.15.282-.31.483-.478.602s-.367.18-.596.18-.429-.06-.596-.18c-.168-.119-.327-.32-.478-.602l-1.497-2.704v3.817c0 .326-.1.59-.298.788Z classamcls-1/>/symbol>symbol viewBox0 0 33.956 34.476 idico-map-size-small xmlnshttp://www.w3.org/2000/svg>path dM30.273 25.1a1.613 1.613 0 0 0-1.47-.95h-5.872a82.739 82.739 0 0 1-4.097 4.926l-1.842 2.033-1.841-2.033a82.739 82.739 0 0 1-4.098-4.926h-5.9a1.61 1.61 0 0 0-1.47.951L.088 33.088a.984.984 0 0 0 .898 1.388H32.97a.984.984 0 0 0 .898-1.388L30.273 25.1Z classancls-1/>path dM16.992 27.408s1.185-1.308 2.75-3.258c3.057-3.806 7.569-10.062 7.569-13.831C27.31 4.619 22.69 0 16.992 0S6.673 4.62 6.673 10.319c0 3.769 4.512 10.025 7.569 13.831a79.831 79.831 0 0 0 2.75 3.258ZM13.48 15.585c-.15-.114-.26-.233-.326-.357s-.098-.282-.098-.477c0-.265.079-.495.238-.69s.345-.291.557-.291c.114 0 .225.017.33.053.107.036.24.102.398.199.363.203.723.35 1.08.437.359.088.763.133 1.213.133.522 0 .916-.077 1.187-.232a.743.743 0 0 0 .403-.683c0-.203-.125-.378-.377-.523s-.731-.29-1.438-.431c-.874-.186-1.56-.406-2.054-.662-.495-.257-.842-.559-1.041-.908-.198-.349-.298-.77-.298-1.266 0-.565.168-1.078.504-1.537.336-.46.797-.82 1.385-1.08s1.248-.392 1.981-.392c.645 0 1.219.071 1.723.213.504.14.963.362 1.378.662.159.115.272.237.338.364.066.13.1.286.1.471 0 .265-.078.495-.232.69-.155.194-.338.29-.55.29-.115 0-.222-.014-.318-.045a2.16 2.16 0 0 1-.411-.206 10.59 10.59 0 0 0-.378-.205c-.207-.11-.45-.199-.729-.265s-.581-.1-.908-.1c-.45 0-.813.086-1.086.26-.274.171-.411.399-.411.68 0 .169.048.306.145.412.098.106.279.21.544.311.265.102.658.205 1.179.312.849.185 1.516.41 2.002.669.485.26.83.563 1.033.908s.305.751.305 1.219a2.54 2.54 0 0 1-.49 1.544c-.328.446-.785.79-1.372 1.034-.587.243-1.27.364-2.047.364a7.943 7.943 0 0 1-1.968-.231c-.606-.156-1.103-.37-1.491-.644Z classancls-1/>/symbol>symbol viewBox0 0 58 58 styleenable-background:new 0 0 58 58 xml:spacepreserve idico-melee xmlnshttp://www.w3.org/2000/svg>path dM12.4 46.3c.7.6 1.7.9 2.6.6.6-.2 1.2-.6 1.6-1.1L25 36c.2-.3.2-.6 0-.9v-.2l2.1-2.1h.1c3.1-.5 12.2-2.2 16.7-6.2 1.6-1.4 2.6-3.3 3-5.4.3-2.1 0-4.2-1.1-6.1-.6-1.2-1.6-2.2-2.8-2.8-1.8-1-4-1.4-6.1-1.1-2.1.3-4 1.4-5.4 3-4.1 4.6-5.8 13.6-6.2 16.7v.1l-2.2 2c-.3-.3-.7-.3-1 0l-9.8 8.4c-.5.4-.9 1-1.1 1.6-.3.9-.1 2 .7 2.7l.5.6zm20.4-31c1.4-1.6 3.4-2.6 5.6-2.6.5 0 .9 0 1.4.1-2.2.8-4.1 2.1-5.7 3.8-2.3 2.4-4.3 5.7-5.8 8.6.9-3.5 2.4-7.5 4.5-9.9zm2.6 2.6c2.3-2.5 4.8-3.6 6.6-3.6h.5L28.9 27.9c1.5-3.1 3.9-7.3 6.5-10zm8.3-2.4c.3 1.8-.8 4.5-3.6 7.1-2.8 2.6-6.9 4.9-10 6.5l13.6-13.6zm-1 9.7c-2.4 2.2-6.4 3.6-9.9 4.6 2.9-1.5 6.2-3.6 8.6-5.8 1.7-1.5 3-3.5 3.8-5.7.2 1.3.1 2.6-.3 3.8-.4 1.1-1.2 2.2-2.2 3.1z stylefill:#fff/>/symbol>symbol viewBox0 0 37.146 24.123 idico-nav-equipment xmlnshttp://www.w3.org/2000/svg>path dM35.197 16.086c-1.938-.688-4.76-.704-4.76-.704S28.723 0 24.475 0c-1.973 0-4.32 2.004-5.902 2.004S14.643 0 12.67 0C8.423 0 6.709 15.382 6.709 15.382s-2.822.016-4.76.704c-1.94.688-2.6 2.608-1.207 3.906 2.066 1.926 7.813 3.965 17.83 4.13 10.019-.165 15.766-2.204 17.832-4.13 1.392-1.298.732-3.218-1.207-3.906Z/>/symbol>symbol viewBox0 0 43.927 30.364 idico-nav-friends xmlnshttp://www.w3.org/2000/svg>path dm38.849 15.363-.008-.002a6.921 6.921 0 0 0-.34-.086l-.034-.008a6.956 6.956 0 0 0-.32-.063l-.056-.01a6.98 6.98 0 0 0-.308-.043l-.069-.008a7.047 7.047 0 0 0-.312-.026l-.067-.005a7.063 7.063 0 0 0-.378-.011h-.08a6.26 6.26 0 0 0-4.893-11.438 10.81 10.81 0 0 1 .933 4.402c0 1.95-.527 3.832-1.48 5.468 3.902 1.977 6.478 6.035 6.478 10.524v2.91h6.012v-4.896a6.972 6.972 0 0 0-5.078-6.708Zm-33.77 0 .007-.002c.112-.032.226-.06.34-.086l.035-.008c.105-.024.212-.044.32-.063l.055-.01a6.98 6.98 0 0 1 .308-.043l.07-.008c.103-.012.207-.02.311-.026l.067-.005c.125-.007.251-.011.379-.011h.08a6.26 6.26 0 0 1 4.893-11.438 10.81 10.81 0 0 0-.934 4.402c0 1.95.527 3.832 1.48 5.468-3.902 1.977-6.478 6.035-6.478 10.524v2.91H0v-4.896a6.972 6.972 0 0 1 5.079-6.708Z classaqcls-1/>path dm28.483 15.415-.01-.003a8.895 8.895 0 0 0-.438-.11l-.044-.01a8.93 8.93 0 0 0-.412-.081c-.024-.005-.048-.01-.071-.013a8.975 8.975 0 0 0-.397-.055l-.09-.012a9.02 9.02 0 0 0-.401-.033l-.086-.007a9.11 9.11 0 0 0-.488-.013h-.103a8.064 8.064 0 1 0-7.96 0h-.102a8.98 8.98 0 0 0-8.98 8.98v6.306h26.125v-6.307c0-4.114-2.768-7.58-6.543-8.642Z classaqcls-1/>/symbol>symbol viewBox0 0 32.36 31.597 idico-nav-home xmlnshttp://www.w3.org/2000/svg>path dM15.468.295.297 15.465c-.634.635-.185 1.72.712 1.72H4.57c.556 0 1.006.45 1.006 1.006V30.59c0 .556.451 1.007 1.007 1.007h4.91c.556 0 1.006-.451 1.006-1.007v-8.174c0-.556.451-1.007 1.007-1.007h5.345c.556 0 1.007.451 1.007 1.007v8.174c0 .556.45 1.007 1.007 1.007h4.91c.555 0 1.006-.451 1.006-1.007v-12.4c0-.556.45-1.006 1.007-1.006h3.562c.897 0 1.346-1.085.712-1.72L16.892.296a1.007 1.007 0 0 0-1.424 0Z/>/symbol>symbol viewBox0 0 26.805 31.155 idico-nav-profile xmlnshttp://www.w3.org/2000/svg>path dm20.092 15.817-.01-.003a9.136 9.136 0 0 0-.45-.114l-.045-.01a9.18 9.18 0 0 0-.423-.083c-.025-.004-.049-.01-.073-.013a9.204 9.204 0 0 0-.407-.057l-.092-.011a9.276 9.276 0 0 0-.413-.035l-.087-.007a9.352 9.352 0 0 0-.501-.014h-.105a8.275 8.275 0 1 0-8.167 0h-.105A9.214 9.214 0 0 0 0 24.684v6.47h26.805v-6.47c0-4.221-2.84-7.777-6.713-8.867Z/>/symbol>symbol viewBox0 0 33.411 31.155 idico-nav-shop xmlnshttp://www.w3.org/2000/svg>path dM33.124 5.345a1.35 1.35 0 0 0-1.055-.528H7.877l-.95-3.797A1.322 1.322 0 0 0 5.627 0h-4.29a1.336 1.336 0 1 0 0 2.672h3.27l5.415 22.083a1.32 1.32 0 0 0 1.3 1.02H26.76a1.336 1.336 0 1 0 0-2.673H12.342l-.773-3.13h17.3c.598 0 1.126-.421 1.301-.984l3.2-12.518a1.3 1.3 0 0 0-.246-1.125Z/>circle cx13.819 cy29.01 r2.145/>circle cx24.896 cy29.01 r2.145/>/symbol>symbol viewBox0 0 58 58 idico-primary xmlnshttp://www.w3.org/2000/svg>path dm48.31 10.74-1.93 1.62a12.45 12.45 0 0 1-3.79-3.42l-.88.75A16.38 16.38 0 0 1 44.45 14l-.39.33L41.32 13l-1.52 1.21-.74-.44-5.23 4.3.12 1-.22.18-1.62-.48-2.39 2.18-.59-.37-.53.54 1.16 1.41L17 33l.2 3-1.2 2-1.39-.08-6.39 5.55L13 49l6.67-10.6.58-.25 3.94 10.91L29.08 45l-2.9-6.32 3.23-3-1.35-2.25c1.25 1.23 8.23 7.67 17.55 7.08l.57-6.88s-8 .58-13.25-5.32l.16-.57 10.15-8.92-.09-.82 6.63-5.72ZM25.62 37.42l-.71-1.56 1.64-.81-.2-.59-2 .14 2.11-1.42 1.34 2.21ZM12.9 20.87a5.82 5.82 0 0 0 1.75 1.31 5.64 5.64 0 0 0 2.15.59h.45a5.82 5.82 0 0 0 2.18-.41 6 6 0 0 0 1.86-1.16 5.85 5.85 0 0 0 1.9-3.92v-.45a6 6 0 0 0-1.58-4 6 6 0 0 0-1.75-1.31 5.87 5.87 0 0 0-2.15-.58h-.45a6 6 0 0 0-2.18.41 6.14 6.14 0 0 0-1.86 1.16 6 6 0 0 0-1.32 1.76 5.78 5.78 0 0 0-.59 2.15v.45a6 6 0 0 0 .42 2.13 6.22 6.22 0 0 0 1.17 1.87Zm2.24-7.79a.76.76 0 0 1 .63-.26h1.55a.83.83 0 0 1 .93.94v6.41a1 1 0 0 1-.26.74.87.87 0 0 1-.67.26 1 1 0 0 1-.7-.26 1 1 0 0 1-.26-.74v-5.61h-.59a.79.79 0 0 1-.63-.26.85.85 0 0 1-.23-.61.87.87 0 0 1 .23-.61Z stylefill:#fff/>/symbol>symbol viewBox0 0 44 39.001 idico-private-game-config xmlnshttp://www.w3.org/2000/svg>rect classavcls-1 y4 width44 height4 rx1.952 ry1.952/>circle classavcls-1 cx22.236 cy6 r6/>rect classavcls-1 y31.001 width44 height4 rx1.952 ry1.952/>circle classavcls-1 cx12 cy33.001 r6/>rect classavcls-1 y17.501 width44 height4 rx1.952 ry1.952/>circle classavcls-1 cx32.335 cy19.501 r6/>/symbol>symbol viewBox0 0 58 58 idico-secondary xmlnshttp://www.w3.org/2000/svg>path dm43.75 16.19.79-.58-2.62-3.29-1.87 1.49-1.52-.81L37 14.12l.53 1.72L29 22.65l-1.39.08-6.38 5.1-.78-.65-1.35 1 .47 1-.7.56a.72.72 0 0 0-.17.93l3.16 5.27 2.22.33 4.33 9.48 2.64 1 4.56-4.37.27-2.72-2.37-5.37 5-4.59-2.25-3.3 2.8-2.4-.34-.89 5.61-4.58-.33-.48.63-.48Zm-7.31 13.27-3.57 3.31-.41-.93 1.67-1.66-2.52-1.47 2.36-2 .57.31Zm-14.38-7.83a5.87 5.87 0 0 0 1.31-1.76 5.68 5.68 0 0 0 .63-2.15v-.45a6 6 0 0 0-3.33-5.35 5.87 5.87 0 0 0-2.15-.58h-.45a6 6 0 0 0-4 1.58 6.16 6.16 0 0 0-1.32 1.75 5.68 5.68 0 0 0-.58 2.15v.45a5.91 5.91 0 0 0 1.58 4 6.16 6.16 0 0 0 1.75 1.32 5.83 5.83 0 0 0 2.15.59H18a6 6 0 0 0 2.18-.41 6.15 6.15 0 0 0 1.88-1.14Zm-5.81-.16a1.45 1.45 0 0 1-.84-.22.81.81 0 0 1-.31-.6 1.4 1.4 0 0 1 .44-.93l.77-.81.1-.1.71-.79.35-.39a3.28 3.28 0 0 0 .23-.28 9.49 9.49 0 0 0 .72-1.09 1.91 1.91 0 0 0 .21-.72.65.65 0 0 0-.2-.53.69.69 0 0 0-.54-.2.61.61 0 0 0-.53.22 2.34 2.34 0 0 0-.34.64 3 3 0 0 1-.33.65.71.71 0 0 1-.54.23.91.91 0 0 1-.65-.23 1 1 0 0 1-.28-.62 2.55 2.55 0 0 1 .38-1.35 2.9 2.9 0 0 1 1-1A3 3 0 0 1 18 13a2.54 2.54 0 0 1 1 .19 2.17 2.17 0 0 1 .85.51 2.39 2.39 0 0 1 .58.8 2.33 2.33 0 0 1 .21 1 2.75 2.75 0 0 1-.26 1.19 4.21 4.21 0 0 1-.58.94 11.56 11.56 0 0 1-.93 1.05 11.15 11.15 0 0 0-.87 1h2a.86.86 0 0 1 .64.25 1.11 1.11 0 0 1 .23.62.79.79 0 0 1-.25.61.78.78 0 0 1-.65.27Z stylefill:#fff/>/symbol>symbol viewBox0 0 33.956 34.086 idico-settings xmlnshttp://www.w3.org/2000/svg>path dm32.988 14.471-2.331-.412c-.48-.068-.892-.48-1.03-.891a17.065 17.065 0 0 0-.754-1.989c-.205-.411-.205-.96.138-1.372l1.44-1.92a1.245 1.245 0 0 0-.137-1.577l-1.098-1.166-1.097-1.166a1.245 1.245 0 0 0-1.577-.137l-1.92 1.371c-.412.275-.96.343-1.372.069a9.532 9.532 0 0 0-1.92-.823 1.254 1.254 0 0 1-.892-1.029l-.343-2.4C20.026.41 19.478 0 18.929 0h-3.155c-.617 0-1.097.411-1.234 1.029l-.412 2.332c-.069.48-.48.891-.96 1.028-.686.206-1.372.48-2.058.823-.411.206-.96.206-1.371-.137l-1.92-1.44a1.245 1.245 0 0 0-1.578.137L5.075 4.869 3.91 5.967a1.245 1.245 0 0 0-.137 1.577l1.372 1.989c.274.412.274.96.068 1.372a10.125 10.125 0 0 0-.823 1.989c-.137.48-.548.823-1.028.891l-2.332.343c-.55.069-1.03.617-1.03 1.166v3.155c0 .617.412 1.097 1.029 1.234l2.332.412c.48.068.891.411 1.028.891.206.686.48 1.372.755 1.99.205.41.205.96-.137 1.371l-1.44 1.92a1.245 1.245 0 0 0 .136 1.578l1.098 1.166 1.097 1.166c.412.411 1.097.48 1.578.137l1.988-1.372c.412-.274.96-.274 1.372-.069.617.343 1.303.618 1.989.823.48.138.823.55.892 1.03l.343 2.331c.068.617.617 1.029 1.165 1.029h3.155c.617 0 1.098-.412 1.235-1.029l.411-2.332c.069-.48.48-.891.892-1.029.617-.205 1.303-.48 1.852-.754.411-.206.96-.206 1.371.137l1.92 1.44c.48.343 1.166.275 1.578-.137l1.166-1.097 1.166-1.097c.411-.412.48-1.098.137-1.578l-1.372-1.92c-.274-.412-.274-.96-.068-1.372a9.533 9.533 0 0 0 .823-1.92c.137-.48.548-.823 1.028-.892l2.4-.343c.618-.068 1.03-.617 1.03-1.166v-3.154c.068-.755-.343-1.303-.96-1.372ZM16.94 23.935c-3.84 0-6.995-3.154-6.995-6.995s3.154-6.995 6.995-6.995 6.995 3.154 6.995 6.995-3.154 6.995-6.995 6.995Z/>/symbol>symbol viewBox0 0 58 58 idico-specialItem xmlnshttp://www.w3.org/2000/svg>path dM42.05 25.32h-8.88a.74.74 0 0 1-.71-.52l-2.75-8.44a.75.75 0 0 0-1.42 0l-2.75 8.44a.74.74 0 0 1-.71.52H16a.75.75 0 0 0-.44 1.35l7.19 5.22a.76.76 0 0 1 .27.84l-2.75 8.45a.75.75 0 0 0 1.16.83l7.18-5.22a.75.75 0 0 1 .88 0L36.62 42a.75.75 0 0 0 1.16-.83L35 32.73a.76.76 0 0 1 .27-.84l7.19-5.22a.75.75 0 0 0-.41-1.35Z stylefill:#fff/>/symbol>symbol idico-stamp viewBox0 0 58 58 xmlnshttp://www.w3.org/2000/svg>defs>style>.azcls-1{fill:#fff}/style>/defs>circle classazcls-1 cx26.49 cy29.42 r1.41/>circle classazcls-1 cx31.86 cy29.42 r1.41/>path classazcls-1 dM32.65 32.55a.91.91 0 0 0-1.11.64 2.4 2.4 0 0 1-4.64 0 .91.91 0 1 0-1.75.47 4.21 4.21 0 0 0 8.14 0 .91.91 0 0 0-.64-1.11Z/>path classazcls-1 dM29 11c-8.2 0-14.86 13-14.86 21.22a14.86 14.86 0 0 0 29.72 0C43.86 24 37.2 11 29 11Zm.18 29.16a8.53 8.53 0 1 1 8.52-8.53 8.53 8.53 0 0 1-8.52 8.49Z/>/symbol>symbol viewBox0 0 29.297 30.465 idico-star xmlnshttp://www.w3.org/2000/svg>path dm11.527.247 6.535 6.356a.87.87 0 0 0 .777.23l8.94-1.782a.87.87 0 0 1 .951 1.238l-4.024 8.18a.87.87 0 0 0 .021.81l4.457 7.952a.87.87 0 0 1-.884 1.287l-9.022-1.3a.87.87 0 0 0-.764.27l-6.186 6.696a.87.87 0 0 1-1.497-.442L9.28 20.759a.87.87 0 0 0-.493-.642l-8.28-3.815a.87.87 0 0 1-.042-1.56l8.064-4.252a.87.87 0 0 0 .459-.668L10.056.77a.87.87 0 0 1 1.47-.522Z/>/symbol>symbol classbbvip-svg-icon-wrap viewBox0 0 58 58 styleenable-background:new 0 0 58 58 xml:spacepreserve idico-vip xmlnshttp://www.w3.org/2000/svg>path classbbvip-svg-icon bbvip-svg-icon-wings dM28.1 42.7s-.8-.1-1.5-.2c-.4-.1-.8-.1-1.1-.1-.3-.1-.5-.1-.5-.1-.2-2.9-1.2-4.3-2-5.1-.5-.4-1.8-1-1.8-1 0 .9-.1 2 .2 3.1.3 1 1 2.1 2.4 2.7-.1.1-4.2-1.4-4.1-1.6.3-1.4.3-2.5.1-3.4-.1-.9-.3-1.5-.6-2s-1.3-1.4-1.3-1.4c-.3.8-.7 1.8-.8 2.9-.1.6.1 1.1.3 1.7.2.5.6 1.2 1.2 1.6 0 0-1-.6-1.9-1.3-.5-.3-.9-.7-1.2-1L15 37c1.3-2.5 1.8-4.2 1-6.4-.2-.3-.3-.4-.3-.4-1.1 1.2-3 3.2-1.5 6 0 0-.7-.9-1.3-1.8-.3-.4-.5-1-.7-1.3l-.3-.6c2.1-1.9 3-3.2 3.1-4.3.2-1.1-.1-2.1-.1-2.1-1.5.9-4 2.2-3.5 5.3l-.2-.6c-.1-.4-.2-.9-.4-1.5-.2-1.1-.3-2.2-.3-2.2 2.7-1 3.8-2.3 4.3-3.4s.4-2 .4-2c-1.7.5-4.4 1.1-4.8 4.1 0 0 0-1.1.1-2.2s.3-2.2.3-2.2c2.9-.3 4.3-1.2 5-1.9.4-.4.9-1.5.9-1.5-.9-.2-1.9-.3-3-.1-1.1.2-2.1.9-2.7 2.3 0 0 0-.2.1-.5s.2-.6.3-1c.3-.7.5-1.4.5-1.4.6-.2 1.4-.6 2.1-1.3.7-.7 1-1.8 1.7-3.9-2.4-.2-3.9 1.2-4.4 2.3-.6 1.2-.3 2.2-.1 2.7 0 0-.3.7-.6 1.5-.1.4-.2.8-.3 1.1-.1.3-.1.5-.1.5.2-1.6-.1-2.9-.5-4.1-.4-1.2-.9-2.3-1.1-3.4 0 0-.3.3-.7.9-.3.6-.7 1.4-.9 2.3-.3 1.8.4 4.1 3 5.3 0 0-.2 1.2-.3 2.3-.1 1.2 0 2.4 0 2.4-.5-3.2-2.6-4.7-3.9-6.4 0 0-.6 1.5-.4 3.2.2 1.8 1.4 3.8 4.3 4.3 0 0 .1 1.2.3 2.3.2 1.2.6 2.3.6 2.3-1.4-2.9-3.7-3.9-5.5-5.2 0 0-.2 1.5.5 3.2.7 1.6 2.4 3.5 5.4 3 0 0 .1.3.3.7.2.4.4 1 .8 1.4.7 1 1.4 1.9 1.4 1.9-2.3-2.2-4.9-2.3-7-3.1 0 0 .1.4.4 1 .3.6.7 1.4 1.3 2.1 1.4 1.3 3.6 2.3 6.2.8l.5.5c.3.3.8.7 1.3 1.1.5.4 1 .7 1.4 1 .3.2.6.3.6.4-.8-.2-1.4-.5-2.1-.6-.7-.1-1.4 0-1.9-.1-1.2 0-2.4.3-3.5.3 0 0 .2.3.7.8.5.4 1.1 1.1 1.9 1.4.9.4 1.9.6 2.9.5 1.1-.2 2.1-.7 3.1-1.8-.1.1 3.5 1.5 4.3 1.6h-2.1c-.7.1-1.3.3-1.9.5-1.2.4-2.2 1-3.2 1.4 0 0 .3.2.8.5s1.3.6 2.2.7c1.8.3 4-.3 5.3-2.9 0 0 .2 0 .5.1.3 0 .7.1 1.1.1l1.6.2c.2 0 .4-.2.4-.4.2.2 0 0-.2 0zm1.8 0s.8-.1 1.5-.2c.4-.1.8-.1 1.1-.1.3-.1.5-.1.5-.1.2-2.9 1.2-4.3 2-5.1.5-.4 1.8-1 1.8-1 0 .9.1 2-.2 3.1-.3 1-1 2.1-2.4 2.7 0 .1 4.2-1.4 4.1-1.6-.3-1.4-.3-2.5-.1-3.4.1-.9.3-1.5.6-2s1.3-1.4 1.3-1.4c.3.8.7 1.8.7 2.9.1.6-.1 1.1-.3 1.7-.2.5-.6 1.2-1.2 1.6 0 0 1-.6 1.9-1.3.5-.3.9-.7 1.2-1l.5-.5c-1.3-2.5-1.8-4.2-1-6.4.2-.3.3-.4.3-.4 1.1 1.2 3 3.2 1.5 6 0 0 .7-.9 1.3-1.8.3-.4.5-1 .7-1.3l.3-.6c-2.1-1.9-3-3.2-3.2-4.3-.2-1.1.1-2.1.1-2.1 1.5.9 4 2.2 3.5 5.3l.2-.6c.1-.4.2-.9.4-1.5.2-1.1.3-2.2.3-2.2-2.7-1-3.8-2.3-4.3-3.4s-.5-2-.5-2c1.7.5 4.4 1.1 4.8 4.1 0 0 0-1.1-.1-2.2s-.3-2.2-.3-2.2c-2.9-.3-4.2-1.2-5-1.9-.4-.4-.9-1.5-.9-1.5.9-.2 1.9-.3 3-.1 1 .2 2.1.9 2.7 2.3 0 0 0-.2-.1-.5s-.2-.6-.3-1c-.3-.7-.5-1.4-.5-1.4-.6-.2-1.4-.6-2.1-1.3-.7-.7-1-1.8-1.7-3.9 2.4-.2 3.9 1.2 4.4 2.3.6 1.2.3 2.2.1 2.7 0 0 .3.7.6 1.5.1.4.2.8.3 1.1.1.3.1.5.1.5-.2-1.6.1-2.9.5-4.1.4-1.2.9-2.3 1.1-3.4 0 0 .3.3.7.9.3.6.7 1.4.9 2.3.4 1.9-.3 4.2-2.9 5.4 0 0 .2 1.2.3 2.3.1 1.2 0 2.4 0 2.4.5-3.2 2.6-4.7 3.9-6.4 0 0 .6 1.5.4 3.2-.2 1.8-1.4 3.8-4.3 4.3 0 0-.1 1.2-.3 2.3-.2 1.2-.6 2.3-.6 2.3 1.4-2.9 3.7-3.9 5.5-5.2 0 0 .2 1.5-.5 3.2-.7 1.6-2.4 3.5-5.4 3 0 0-.1.3-.3.7-.2.4-.4 1-.8 1.4-.7 1-1.4 1.9-1.4 1.9 2.3-2.2 4.9-2.3 7-3.1 0 0-.1.4-.4 1-.3.6-.7 1.4-1.3 2.1-1.4 1.3-3.6 2.3-6.2.8l-.5.5c-.3.3-.8.7-1.3 1.1-.5.4-1 .7-1.4 1-.3.2-.6.3-.6.4.8-.2 1.4-.5 2.1-.6.7-.1 1.4 0 2-.1 1.2 0 2.4.3 3.5.3 0 0-.2.3-.7.8-.5.4-1.1 1.1-1.9 1.4-.9.4-1.9.6-2.9.5-1.1-.2-2.1-.7-3.1-1.8.1.1-3.5 1.5-4.3 1.6h2.1c.7.1 1.3.3 1.9.5 1.2.4 2.2 1 3.2 1.4 0 0-.3.2-.8.5s-1.3.6-2.2.7c-1.8.3-4-.3-5.3-2.9 0 0-.2 0-.5.1-.3 0-.7.1-1.1.1l-1.6.2c-.2 0-.4-.2-.4-.4-.1.1.1-.1.3-.1z/>path classbbvip-svg-icon bbvip-svg-icon-emblem dM29 12.7c-.1 0-.2 0-.3.1-1.9 1-7.1 3.2-9.4 4.1-.7.3-.8.4-.8.6-.1 2.5-.3 8.6 1.2 12.3 2 4.7 7.5 7 9.1 7.6h.4c1.6-.6 7.1-2.9 9-7.6 1.5-3.7 1.4-9.8 1.2-12.3 0-.2-.1-.4-.8-.6-2.2-.9-7.5-3-9.3-4.1-.1-.1-.2-.1-.3-.1z/>/symbol>symbol viewBox0 0 106 106 xml:spacepreserve idico-weapon-crackshot xmlnshttp://www.w3.org/2000/svg>path classbcst0 dm97.3 9.6-3.1-3.1-3.6 2-36.2 31.7h-.8l-1.4-1.6 1.4-1.2 4.2-2 3.7-2.8-4.9-5.6-3.6 2.8-3.8 5.3-.4-.5-1.9 1.6.4.5-9.8 8.3-.5-.6-1.9 1.6.5.6-6.6 3.3-1.8 1.8 5.2 5.7 2.1-1.8 4-5.6 1.5 1.8-.5 1.6-1.1-.8-1.6 1.2.6.9-1.9 1.7 2.9 3.2-3.4 6.2-3.9.4-17 14 2.4 2.1-1.5 1.5-2.3-1.9-4.1 3.9 16.6 13.8 3.3-4.2-2.3-1.9 1.2-1.3 1.5 1.3L41 75.4l6 2.4 4-4-5.7-6-.4-2.8 3.3-4.3 2.3 2.4h6.3l3.7-3.2 1-5.7-3.2-3.6 22-19-3.1-4 16.9-14.1 3.2-3.9zM18.1 83.7l3 2.7-1.4 1.3-3.2-2.7 1.6-1.3zm6.2 7.9-2.4-2 1.3-1.3 2.3 2-1.2 1.3zm17.3-42-1-1.1 9.8-8.2 1.1 1.2-9.9 8.1zm17.3 5.6-.4 3.5-2.5 2.4-4.6.3-1.9-2.1.7-.9 1.3 1.4h3.4l.9-.8-2.8-.7-1.4-1.7.2-.3 4.6-4 2.5 2.9z/>/symbol>symbol viewBox0 0 106 106 xml:spacepreserve idico-weapon-ranger xmlnshttp://www.w3.org/2000/svg>path classbdst0 dm76.8 32.6-.1-2.2 22.5-19.3-3.3-3.3-11.4 9.6-4.7-1.3-7.6 6.5-2.2-1-25.7 21.8-3.6-3.5.9-.7 6.5-3.9 2.7.2 1.2-1.1s-1.8-3.4-6.9-8l-1.2 1.3v2.1l-4.6 5.8-8.3 8-3.9 1.7-13.9 11.1-2.9.9s1 2.1 2.4 3.6c2 2 4 3.2 3.7 3l.8-2.6 13.1-11.7 2.5-3.1.2-.2 3.5 3.8-12.4 10.6 1.7 8.9-19 16.5L17 98.2l16.9-17 3.4 7.5 11.3-6.3-5-9.4 9.4-9.8-2.2-3.8 1.5.8 6.6 5.5 8.7-10.8c-7.7-4.6-9.6-8-9.6-8l5.2-2 13.6-12.3zm1.2-12 1.8.6-4.6 4-1-1.1 3.8-3.5zM17.5 89.1l-3.5-5 2.5-2.2 3.8 4.4-2.8 2.8zm8.1-4.2-4.4-7.3L29 71l3.5 7.3-6.9 6.6zm23.9-22.1-7.3 7.6-2.5-4.6 4.9-2.3-.3-2c-1.5.6-2.5-.1-3.2-.7l4.9-3.7.1.1 3.4 5.6z/>/symbol>symbol viewBox0 0 106 106 xml:spacepreserve idico-weapon-rpegg xmlnshttp://www.w3.org/2000/svg>path classbest0 dm78.1 48.5-5.1-.1.1-1.7 6.2-5.1 1.4-3.2.9 1.1 19.2-13.1s-.9-3.1-3.7-7l.2-1.8c.2-1.2-.7-2.3-1.9-2.4l-1.9-.2c-1.7-1.7-3.7-3.4-6.2-5L70.9 26.6l1.3 1.5-1.5.5-5.5-2.6-4.9 4.1.8 4.4-4.7 3.8-4-4.6.1-.1 1.4.3 7.4-6.9.6.7 4.2-3.4-5.3-6.3-4.2 3.4.4.6-7.8 6v1.5l-12.4 8.6 5.4 6.2 5.7-6 3.4 4.7-1.6-.4-3.7 2.8 1 1.3-22.3 19-1.4-.5-3.5 2.8.2 1.3-8.8 5.2-2.2-.3-3.9 3.5s3.4 11.5 14.7 18.2l4.4-3.5.3-2.2 6-7.5.6-.5 1.3.4 3.2-2.8-.1-1.4 2.9-2.5 11.1 11.6 7.1-6.2-10-12.6 9.5-8.2 8.3.2.2.3-2.1 2.1 5.1 6.8 1.8-1.7 5.8 9 6.5-6.1-4.2-10.8 5.2-5.7-4.6-6.1zm-1.4 2.6 2.5 3.6-3.2 3.4-2-2.5 2.5-1.9-.6-.7-3.1-.1.1-1.9 3.8.1zM63.2 31.2l2.4-2 1.4.7-.3.1-3.3 2.6-.2-1.4z/>/symbol>symbol viewBox0 0 106 106 xml:spacepreserve idico-weapon-scrambler xmlnshttp://www.w3.org/2000/svg>path classbfst0 dM94.5 15.3c-.3-.6-.9-1.5-1.8-2.6-.9-1-1.6-1.8-2.2-2.3-.5-.4-1.1-.4-1.6-.1l-3.7 3-2.2-.6-3.1 2.2.5 2.2L46 44.6c-.2.2-.4.4-.7.6l-2.6-2.5-1.7 1.5 2.5 3c-5.2 6.5-10 17.3-10 17.3l-3.3.2L11.4 83l11.3 12.9L41 67.7l2.8 1.5.6-.2c7.9-2.4 9.5-7.5 9.5-7.7l.2-.7-3.9-5.1 10.5-6.8L85.1 28c.8-.7.9-1.8.3-2.7l-.7-1 9.4-7.5c.5-.3.7-1 .4-1.5zM44.1 66.1l-1.5-.8 2.5-3.8h3l.9-1-2.1-1.5 1.2-1.4 2.7 3.5c-.5 1.1-2.3 3.5-6.7 5z/>/symbol>symbol viewBox0 0 106 106 xml:spacepreserve idico-weapon-soldier xmlnshttp://www.w3.org/2000/svg>path classbgst0 dm61.7 51.4.4-1.3 22.4-19.7-.2-1.8 14.6-12.7-3.3-3.3-4.3 3.6C86.7 13.9 83 8.7 83 8.7l-1.9 1.7c3.5 4 5.2 7.5 6.1 9.5l-.9.7-6.1-3-3.4 2.8-1.6-1-11.5 9.5.2 2.2-.5.4-3.6-1.1-5.3 4.8-1.3-.8-1.2 1.2 2.6 3.1-28 23.2.4 6.5-2.7 4.5-3.1-.2L7.1 85l10.5 12.1 14.8-23.3 1.3-.5 8.7 24.1 10.8-9.1-6.4-13.9 7.1-6.7-3-5c2.8 2.7 18.2 16.9 38.8 15.6L91 63.1s-17.8 1.3-29.3-11.7zm24.9-36.3c.2-.2.5-.2.8 0l1.6 1.2c.3.2.3.7 0 1l-.6.5c-.3.2-.7.2-.9-.2l-.9-1.7c-.3-.3-.2-.7 0-.8zM45.5 71.6 44 68.2l4.2-2.1-.5-.9-2.7-.7.9-2 1.4-.3 2.9 4.9-4.7 4.5z/>/symbol>symbol viewBox0 0 106 106 xml:spacepreserve idico-weapon-trihard xmlnshttp://www.w3.org/2000/svg>path dm94.3 7.4-2.8.5-1 3-12.1 11.8-1.1-.9-5 4.5 3.8 4.1.6 2.9-2 1.4-5.4-6.5-9-1-12 10.3-.5-.5 2-1.7-3.5-4.3-2.1 2-.7-.7-5.1 4.9.7.7-2 1.8 3.1 3.7 2.4-2 .6.6-6.2 5.2 1.8 1.9 7.9-6.8h1l1.1 1.2.2.7-.3.3.3 2.3-2 1.3-1.2-1.1-28.2 21.2 2.2 2.7-12.1 9.4v4.2l9.4 8.6 1.7-.6 6.2 6.1 5.2-4.6.6-14h2.9l1.5-1.4s2.9 3.2 6.7 6.1c3.8 2.9 10.3 8.1 10.3 8.1L58.3 81v-2.4l-2.7-.6s-8-4.8-11.6-9.1l1.1-1.1-1.1-2.6 7.4-6.5L59 70.5l3.4 1.1 9.5-8-5.7-15.9 1.9-1.4 1.5 1.1 2.3-1.8-1-1.9 1-.8 11.7 10.9 2.7-2.5L77.4 38l4.3-3.3-.7-6.2-.8-1.3.3-1.5L95 15.3l2.8-.5.5-2.9-4-4.5zm-37 31.2-4.3.6.8 2.3-1.8.5-1.1-.3-.9-1.3v-.9l11-9.6 2.3 1.5-.4 2.3-3.2-.1.9 2.2-4.2.4.9 2.4zm11.1 23.6-4.6 4.4-4.6-8 .8-2.4.9-.1-.1-1.6-1.7-2.5 4.3-3.8 5 14z/>/symbol>symbol viewBox0 0 106 106 xml:spacepreserve idico-weapon-whipper xmlnshttp://www.w3.org/2000/svg>path classbist0 dm98 16.8-2.9-3.4c-.4-.4-1.1-.5-1.5-.1L90.4 16c-.3.3-.5.7-.3 1.1l-6.4 5.6-5.4-5.7-2-1-4-3.9-.7.5-.5 1.1-1.7-2.1-1 .8 1.7 2.1-1.2.2-1.8 1.4.2 1.1-1.1.8-1.1-.4-1.7 1.3.2 1.2-.9.9-1.1-.4-1.7 1.4.2 1.2-1 .8-1.2-.4-1.6 1.3.2 1.3-1.1.8-1.3-.4-1.7 1.4v1.3l-2.8-3.5-1.8 1.5 3.7 4.5-.8 1.2 1.8 8.1L7.8 78l16 16.3H26l18.4-16 10.5-.5 9.5-5.5 5.2-7.1v-7.4l9-6.2 2.1 4.1 5.3-4.2v-6.9l-3.7-6.2 3.7-3.2 3.9 4.2 4.1-3.3-4.7-6.1h-4l.8-2.2 7.6-6.6c.3.1.7 0 1-.2l3.2-2.7c.4-.4.5-1.1.1-1.5zM58.6 66.1l-6.2 4.5-6.6-7.3 10.6-9c1.5 1.9 4.6 4.9 4.6 4.9l-2.4 6.9zm-.8-29.5-.6-2.3 14.4-12.1 3 .5-16.8 13.9zM74.4 50l-4.1-3.3-.8-3.3 5.5-4.6 4.4 6.2-5 5z/>/symbol>symbol viewBox0 0 73.59 154.88 classbjicon-spatula idico_spatula>path dM63.08 0H10.51C4.73 0 0 5.15 0 11.44V57.2c0 6.29 4.73 11.44 10.51 11.44h21.03v21.92c0 2.59-.95 5.07-2.63 6.9s-2.63 4.31-2.63 6.9v40.76c0 5.39 4.02 9.76 8.97 9.76h3.09c4.95 0 8.97-4.37 8.97-9.76v-40.76c0-2.59-.95-5.07-2.63-6.9s-2.63-4.31-2.63-6.9V68.64h21.03c5.78 0 10.51-5.15 10.51-11.44V11.44C73.59 5.15 68.86 0 63.08 0ZM42.05 17.16v34.32c0 3.16-2.35 5.72-5.26 5.72-2.9 0-5.26-2.56-5.26-5.72V17.16c0-3.16 2.35-5.72 5.26-5.72 2.9 0 5.26 2.56 5.26 5.72ZM57.82 57.2c-2.9 0-5.26-2.56-5.26-5.72V17.16c0-3.16 2.35-5.72 5.26-5.72 2.9 0 5.26 2.56 5.26 5.72v34.32c0 3.16-2.35 5.72-5.26 5.72ZM21.03 17.16v34.32c0 3.16-2.35 5.72-5.26 5.72-2.9 0-5.26-2.56-5.26-5.72V17.16c0-3.16 2.35-5.72 5.26-5.72 2.9 0 5.26 2.56 5.26 5.72Z stylestroke-width:0 data-nameLayer 1/>/symbol>symbol viewBox0 0 21.95 19.37 idico_stampArrow xmlnshttp://www.w3.org/2000/svg>path dM21.69 10.34 11.61.26a.9.9 0 0 0-1.27 0L.26 10.34c-.57.57-.16 1.53.63 1.53h4.08v6.6c0 .5.4.9.9.9h10.19c.5 0 .9-.4.9-.9v-6.6h4.08c.8 0 1.2-.97.63-1.53Z stylestroke-width:0 data-nameLayer 1/>/symbol>symbol viewBox0 0 38.919 34.476 idico_watchAd xmlnshttp://www.w3.org/2000/svg>path dM0 12.44v17.55a4.487 4.487 0 0 0 4.487 4.486h29.945a4.487 4.487 0 0 0 4.487-4.487V12.44H0Zm25.075 11.533-7.18 4.788a1.313 1.313 0 0 1-2.042-1.093v-9.575A1.313 1.313 0 0 1 17.895 17l7.18 4.788c.78.52.78 1.666 0 2.185ZM5.933 9.774h6.368L22.075 0h-6.368L5.933 9.774zM34.316 0h-6.368l-9.774 9.774h6.368L34.316 0zM9.834 0H4.487A4.487 4.487 0 0 0 0 4.487v5.287h.06L9.834 0Zm20.581 9.774h8.504V4.487c0-.914-.275-1.763-.744-2.473l-7.76 7.76Z stylefill:#fff/>/symbol>/svg> !-- Ads --> div idgameAdContainer classhideme>/div>div idshellshockers_titlescreen>/div>div idshellshockers_chicken_nugget_banner>/div>div idshellshockers_respawn_banner-pr2>/div>div idshellshockers_respawn_banner_2-pr>/div>div idshellshockers_respawn_banner_3-pr>/div>div idshellshockers_respawn_banner>/div>div idshellshockers_respawn_banner-new>/div>div idShellShockers_LoadingScreen_HouseAds>/div>div idshellshock-io_728x90_HP>/div>div idvideoAdContainer> div idpreroll>/div>/div>!-- div classvideo_ad_wrapper> video idasc_video_ad classvideo-js vjs-default-skin controls preloadauto width640 height360 mutedtrue styledisplay: none;> source srcvideo/tiny.mp4 typevideo/mp4 /> /video>/div> --> div idss_background>/div> !-- Instantiate the Vue instance --> div idapp :classcurrentLanguageCode, appClassObj, appClassScreen, isPhotoBooth> !-- vue instance div: all vue-controlled elements MUST be inside this tag -->!-- asc-video-player idmainVideoPlayer refmainVideoPlayer adTagUrladTagUrl>/asc-video-player> --> div classfirebaseID>firebase ID: {{ firebaseId }}, maskedEmail: {{ maskedEmail }} isAnonymous: {{ isAnonymous }}, isEmailVerified: {{ isEmailVerified }}/div> !-- Canvas --> div refgameCanvas classcanvas-wrapper gameCanvas> canvas idcanvas refcanvas>/canvas> /div> !-- Overlays --> light-overlay idlightOverlay reflightOverlay>/light-overlay> dark-overlay iddarkOverlay refdarkOverlay>/dark-overlay> spinner-overlay idspinnerOverlay refspinnerOverlay :locloc :hide-adshideAds :ad-unitdisplayAd.adUnit.spinner :account-dateaccountCreated>/spinner-overlay> !-- GDPR --> gdpr idgdpr refgdpr :locloc>/gdpr> div refheaderAdContainer>/div> account-panel v-showui.showHomeEquipUi idaccount_panel refaccountPanelHome :locloc :selected-language-codecurrentLanguageCode :eggseggs :languageslanguages :current-lang-optionslocLanguage :show-corner-buttonsui.showCornerButtons :is-private-gameextern.isPrivateGame :show-bottomtrue :photo-urlphotoUrl :is-anonymousisAnonymous :is-of-ageisOfAge :show-targeted-adsshowTargetedAds :current-screenshowScreen :screensscreens :is-egg-store-saleisEggStoreSaleItem :is-subscriberisSubscriber @sign-in-clickedonSignInClicked @sign-out-clickedonSignOutClicked :is-twitchtwitchLinked>/account-panel> div idmain-content classmain-content display-grid height-100vh> aside v-showshowScreen ! screens.photoBooth classmain-aside> main-sidebar refmainMenu v-showui.showHomeEquipUi :locloc :player-nameplayerName :menu-itemsui.mainMenu :current-screenshowScreen :screensscreens :modeequipMode :current-modecurrentEquipMode :is-game-pausedgame.isPaused :in-gamegame.on :picked-game-typecurrentGameType @previous-screensetPreviousScreen>/main-sidebar> photo-booth-ui idphotoBooth refphotoBooth v-show!ui.showHomeEquipUi :locloc :player-nameplayerName :item-type-changeui.photoBooth.type @bg-change-coloronPhotoboothBgColorChange @bg-change-imageonPhotoBoothBgImageChange @hide-uionPhotoBoothHideUi>/photo-booth-ui> house-ad v-showshowScreen ! screens.game && ui.showHomeEquipUi :locloc :upgrade-nameupgradeName :is-upgradedisUpgraded :is-subscriberisSubscriber :has-mobile-rewardhasMobileReward :crazy-games-activeui.crazyGames :is-pokiisPoki :chw-countchw.winnerCounter :chw-readyshowAdBlockerVideoAd :chw-limit-reachedchw.limitReached :adui.houseAds.small :in-gamegame.on @chw-video-requestshowNuggyPopup>/house-ad> chw refchwHomeScreen :locloc :chwchw :firebase-idfirebaseId :current-screenshowScreen :screensscreens :uiui>/chw> !-- .chw-timer --> /aside> !-- .chw-home-timer --> main idmainScreens> div idpaper_doll_container classpaper-doll-click-container centered z-index-1 v-showshowScreen screens.home || showScreen screens.equip>/div> home-screen idhome_screen refhomeScreen v-show(showScreen screens.home || showScreen screens.profile)>/home-screen> equip-screen idequip_screen classheight-100vh refequipScreen v-showshowEquipScreens @photo-booth-type-idphotoBoothTypeChange>/equip-screen> game-screen idgame_screen refgameScreen v-show(showScreen screens.game) :knamekillName :kdnamekilledName>/game-screen> /main> /div> div idgameDescription v-show(showScreen screens.home)> section classsocial-icons ss_marginright> social-panel refsocialIconPanel idsocial_panel :locloc :is-pokiisPoki :use-socialui.socialMedia.footer :social-mediaui.socialMedia.selected>/social-panel> /section> section classgame-info> h1 classtext-center>{{ loc.home_desc_about }}/h1> p classtext-center>{{ loc.home_desc_pick }} svg classeggIcon>use xlink:href#icon-egg>/use>/svg> {{ loc.home_desc_loadout }} svg classeggIcon>use xlink:href#icon-egg>/use>/svg> {{ loc.home_desc_madeof }}/p> section classtext-center> p>{{ loc.home_blocked_start }} geometry.monster {{ loc.home_blocked_end }}/p> /section> div classdisplay-grid grid-column-2-eq gap-1 > section> p>{{ loc.home_desc_p1 }}/p> p> img srcimg/eggPose05.png stylewidth: 350px; float: left; margin-right: 1em; shape-outside: polygon(0% 0%, 100% 0%, 100% 41%, 84% 48%, 80% 63%, 59% 74%, 46% 100%, 0% 99%);>{{ loc.home_desc_p2 }} /p> /section> section> p> img srcimg/eggPose01.png stylefloat: right; margin-left: 1em; margin-top: 1em; shape-outside: polygon(1% 0%, 100% 1%, 100% 99%, 50% 100%, 28% 86%, 16% 68%, 14% 51%, 0 35%);> {{ loc.home_desc_p3 }} br />br /> {{ loc.home_desc_p4 }} /p> /section> /div> section> header> h2 classtext-center>{{ loc.home_game_mode_title }}/h2> /header> ul classdisplay-grid grid-column-2-eq gap-1 > li v-htmlloc.home_game_mode_content_li_1>/li> li v-htmlloc.home_game_mode_content_li_2>/li> li v-htmlloc.home_game_mode_content_li_3>/li> li v-htmlloc.home_game_mode_content_li_4>/li> /ul> /section> h2 classtext-center>{{ loc.home_desc_controls }}/h2> p classtext-center>{{ loc.home_desc_standard }}/p> ul classdisplay-grid grid-column-2-eq stylemin-width: 25em;max-width: 35em;margin:0 auto> li> {{ loc.home_desc_control1 }}/li> li> {{ loc.home_desc_control2 }}/li> li> {{ loc.home_desc_control3 }}/li> li> {{ loc.home_desc_control4 }}/li> li> {{ loc.home_desc_control5 }}/li> li> {{ loc.home_desc_control6 }}/li> li> {{ loc.home_desc_control7 }}/li> li> {{ loc.home_desc_control8 }}/li> li> {{ loc.home_desc_control9 }} /li> /ul> p classtext-center> button classss_button btn_lg btn_blue bevel_blue @clickopenUnblocked>{{ loc.home_unblocked_text }}/button> /p> p v-htmlfooterLinksFormat>/p> p aligncenter>button classss_button btn_yolk bevel_yolk @clickvueApp.scrollToTop()>{{ loc.home_backtotop }}/button>/p> /section> /div> !-- #gameDescription --> !-- Popup: Settings --> large-popup idsettingsPopup refsettingsPopup @popup-closedonSharedPopupClosed @popup-openedonSettingsPopupOpened @popup-xonSettingsX> template slotcontent> settings idsettings refsettings :locloc :settings-uisettingsUi :languageslanguages :current-language-codecurrentLanguageCode :show-privacy-optionsshowPrivacyOptions @privacy-options-openedonPrivacyOptionsOpened :is-from-eushowPrivacyOptions :controller-idcontrollerId :controller-typecontrollerType :lang-optionlocLanguage :is-vip(hideAds || contentCreator) :region-listregionList :current-region-idcurrentRegionId>/settings> /template> /large-popup> !-- Popup: Private Game Options --> game-options-popup refgameOptionsPopup idgameOptionsPopup :locloc :game-options-popupgameOptionsPopup>/game-options-popup> !-- Popup: Privacy Options --> small-popup idprivacyPopup refprivacyPopup hide-canceltrue @popup-closedonSharedPopupClosed> template slotheader>{{ loc.p_settings_privacy }}/template> template slotcontent> label classss_checkbox label> {{ loc.p_settings_of_age }} input idofAgeCheck typecheckbox v-modelisOfAge @changeofAgeChanged($event)> span classcheckmark>/span> /label> label classss_checkbox label> {{ loc.p_settings_target_ads }} input idtargetedAdsCheck typecheckbox v-modelshowTargetedAds @changetargetedAdsChanged($event)> span classcheckmark>/span> /label> !-- input idofAgeCheck typecheckbox v-modelisOfAge @changeofAgeChanged($event)> {{ loc.p_settings_of_age }}br> input idtargetedAdsCheck typecheckbox v-modelshowTargetedAds @changetargetedAdsChanged($event)> span idtargetedAdsText>{{ loc.p_settings_target_ads }}/span> --> /template> template slotconfirm>{{ loc.ok }}/template> /small-popup> !-- Popup: Help & Feedback --> large-popup idhelpPopup refhelpPopup stop-key-capturetrue @popup-closedonSharedPopupClosed> template slotcontent> help idhelp refhelp :locloc :account-typeaccountStatus :feedback-typefeedbackType :open-with-typefeedbackSelected @resetFeedbackTyperesetFeedbackType>/help> /template> /large-popup> !-- Popup: VIP Help & Feedback --> large-popup idvipPopup refvipPopup stop-key-capturetrue @popup-closedonVipHelpClosed> template slotcontent> vip-help idvip-help refvip-help :locloc :is-vipisSubscriber>/help> /template> /large-popup> !-- Popup: Egg Store --> large-popup ideggStorePopup refeggStorePopup stop-key-capturetrue @popup-closedonSharedPopupClosed :overlay-closefalse> template slotcontent> subscription-store ideggStore refeggStore :locloc :productseggStoreItems :sale-eventisSale>/subscription-store> /template> /large-popup> img v-ifblackFridayBanner classblack-friday-banner styledisplay: none srcimg/black-friday-banner.jpg altBlack Friday Sale/> !-- Popup: VIP store --> large-popup idsubStorePopup refsubStorePopup stop-key-capturetrue @popup-closedonSharedPopupClosed :overlay-closetrue> template slotcontent> subscription-store idshell-subscriptions refshell-subscriptions :locloc :subssubStoreItems>/subscription-store> /template> /large-popup> !-- Popup: VIP ended --> small-popup idvipEnded refvipEnded stop-key-capturetrue @popup-confirmshowSubStorePopup @popup-closedonSharedPopupClosed :overlay-closetrue classvip> template slotcontent> figure> img srcimg/vip-club/vip-club-popup-emblem.png altShell Shockers VIP> /figure> div classvip-ended-popup> {{ loc.account_vip_expired }} /div> /template> template slotconfirm>{{ loc.account_vip_expire_3 }}/template> template slotcancel>{{ loc.account_vip_expired_2 }}/template> /small-popup> !-- Popup: Egg Store single --> large-popup idpopupEggStoreSingle refpopupEggStoreSingle stop-key-capturetrue @popup-closedonSharedPopupClosed :overlay-closefalse classpopup-store-single> template slotcontent> egg-store-item v-foritem in premiumShopItems :keyitem.sku :itemitem :locloc :account-setaccountSettled v-ifeggStorePopupSku && item.sku eggStorePopupSku>/egg-store-item> /template> /large-popup> !-- Popup: Unsupported Platform --> large-popup idunsupportedPlatformPopup refunsupportedPlatformPopup hide-closetrue> template slotcontent> h2>{{ locunsupported_platform }}/h2> div>{{ locunsupportedPlatformPopup.contentLocKey }}/div> /template> /large-popup> !-- Popup: Missing Features --> large-popup idmissingFeaturesPopup refmissingFeaturesPopup hide-closetrue> template slotcontent> h2>{{ locoh_no }}/h2> span>{{ locmissing_features }}/span> ul> li v-forf in missingFeatures v-htmlf>/li> /ul> span>{{ locmissing_help }}/span> /template> /large-popup> !-- Popup: No Anon --> small-popup idnoAnonPopup refnoAnonPopup @popup-confirmonNoAnonPopupConfirm @popup-closedonSharedPopupClosed> template slotheader>{{ loc.no_anon_title }}/template> template slotcontent> div>{{ loc.no_anon_msg1 }}/div> div>{{ loc.no_anon_msg2 }}/div> /template> template slotcancel>{{ loc.cancel }}/template> template slotconfirm>{{ loc.no_anon_signup }}/template> /small-popup> !-- Popup: Give Stuff --> give-stuff-popup refgiveStuffPopup idgiveStuffPopup :locloc :give-stuff-popupgiveStuffPopup>/give-stuff-popup> !-- Popup: Open URL --> small-popup idopenUrlPopup refopenUrlPopup @popup-confirmonOpenUrlPopupConfirm @popup-closedonSharedPopupClosed> template slotheader>{{ locopenUrlPopup.titleLocKey }}/template> template slotcontent> !-- content not locd (yet) --> {{ openUrlPopup.content }} /template> template slotcancel>{{ locopenUrlPopup.cancelLocKey }}/template> template slotconfirm>{{ locopenUrlPopup.confirmLocKey }}/template> /small-popup> !-- Popup: Changelog --> large-popup idchangelogPopup refchangelogPopup @popup-closedonSharedPopupClosed> template slotcontent> h1 idpopup_title nospace classroundme_sm> {{ loc.changelog_title }} /h1> div classchangelog_content roundme_lg> section v-for(log, idx) in changelog.current> h3>{{ log.version }} - i>time>{{ log.date }}/time>/i>/h3> ul> li v-fordata in log.content v-htmldata>/li> /ul> hr classblue> /section> /div> div idbtn_horizontal> button v-ifchangelog.showHistoryBtn @clickshowHistoryChangelogPopup classss_button btn_green bevel_green>{{ loc.more }}/button> button @clickhideChangelogPopup classss_button btn_red bevel_red>{{ loc.close }}/button> /div> /template> /large-popup> !-- Popup: Golden Chicken --> large-popup idgoldChickenPopup refgoldChickenPopup :overlay-closefalse> template slotcontent> gold-chicken-popup idgold_chicken refgold_chicken :locloc @close-chw-popuphideChickenPopup @open-chw-gamegoldChickenPopupOpenChw>/gold-chicken-popup> /template> /large-popup> !-- Popup: Chicken Nugget --> large-popup idchicknWinner refchicknWinner :hide-close!chwMiniGameComplete :overlay-closechwMiniGameComplete @popup-closedonChwPopupClosed> template slotcontent> chicken-nugget-popup idchickenNugget refchickenNugget :keychw.nuggetReset :locloc :firebase-idfirebaseId :rewardchw.reward :ad-unitdisplayAd.adUnit.nugget :chwchw @chw-start-rewardchwDoIncentivized @chw-mini-game-completechwMiniGameCompleted>/chicken-nugget-popup> display-ad idshellshockers_chicken_nugget_banner_ad refnuggetDisplayAd classpauseFiller center_h :ignore-sizetrue :ad-unitdisplayAd.adUnit.nugget ad-size728x90>/display-ad> /template> /large-popup> !-- Popup: Generic Message --> small-popup idgenericPopup refgenericPopup :popup-modelgenericMessagePopup :hide-canceltrue @popup-closedonSharedPopupClosed> template slotheader>{{ locgenericMessagePopup.titleLocKey }}/template> template slotcontent>{{ locgenericMessagePopup.contentLocKey }}/template> template slotconfirm>{{ locgenericMessagePopup.confirmLocKey }}/template> /small-popup> !-- Popup: Anon warning message --> small-popup v-ifisAnonymous idanonWarningPopup refanonWarningPopup :hide-closetrue :overlay-closefalse @popup-cancelanonWarningPopupCancel @popup-confirmanonWarningPopupConfrim> template slotheader>img srcimg/svg/ico_goldenEgg.svg classegg_icon />{{ loc.account_anon_warn_popup_title }}! img srcimg/svg/ico_goldenEgg.svg classegg_icon />/template> template slotcontent> p v-htmlanonPopupContent>/p> /template> template slotcancel>{{ loc.pwa_no_thanks }}/template> template slotconfirm>{{ loc.sign_in }}/template> /small-popup> !-- Popup: Need More eggs popup --> small-popup idneedMoreEggsPopup refneedMoreEggsPopup @popup-confirmshowEggStorePopup> template slotheader>{{ loc.p_buy_isf_title }}!/template> template slotcontent> p>{{ loc.p_buy_isf_content }}./p> /template> template slotcancel>{{ loc.p_buy_item_cancel }}/template> template slotconfirm>{{ loc.account_title_eggshop }}/template> /small-popup> !-- Popup: Firebase Sign In --> large-popup idfirebaseSignInPopup reffirebaseSignInPopup :overlay-closefalse> template slotcontent> h1 classnospace>{{ loc.sign_in }}/h1> div idfirebaseui-auth-container>/div> div idbtn_horizontal classf_center> button @clickonSignInCancelClicked() classss_button btn_red bevel_red btn_sm>{{ loc.cancel }}/button> /div> /template> /large-popup> small-popup refadBlockerPopup idadBlockerPopup :overlay-closefalse hide-confirmtrue hide-canceltrue hide-closetrue> template slotheader> Weve detected ad blocker! /template> template slotcontent> p>To i>avoid/i> this message please turn i>off/i> ad blocker./p> h4>Please wait/h4> h3>{{adBlockerCountDown}}/h3> /template> /small-popup> !-- Popup: PWA --> small-popup idpwaPopup classpwa-popup refpwaPopup hide-confirmtrue @popup-closedonSharedPopupClosed> !-- template slotheader>{{ loc.p_settings_privacy }}/template> --> template slotcontent> p>{{loc.pwa_desc_one}}/p> p>{{loc.pwa_desc_two}}/p> button @clickpwaBtnClick classss_button btn_big btn_green bevel_green btn_height_auto btn-pwa-download> div classpwa-btn-img-box roundme_lg bg-darkgreen> img srcfavicon192.png altEgg yolk> i classfas fa-share aria-hiddentrue>/i> /div> {{loc.pwa_btn_line_one}}br/>{{loc.pwa_btn_line_two}} /button> /template> template slotcancel>{{loc.pwa_no_thanks}}/template> /small-popup> large-popup idadBlockerVideo refadBlockerVideo @popup-closedonSharedPopupClosed :overlay-closefalse hide-confirmtrue hide-canceltrue hide-closetrue> template slotcontent> p classtext-center>{{ loc.ad_blocker_big_popup_title }}br /> span v-htmlloc.ad_blocker_big_popup_desc>/span>/p> img srcimg/shellshockers-unite-lg.png alt> !-- house-ad idhouse-ad-video-replacement refhouse-ad-video-replacement :databannerHouseAd :isshowingshowAdBlockerVideoAd>/house-ad> --> /template> /large-popup> large-popup refkotcInstrucPopup idkotcInstrucPopup :overlay-closetrue hide-confirmtrue hide-canceltrue> template slotcontent> img classkotc-wordmark srcimg/kotc/kotc-wordmark.svg alt> div classkotc-how-to-play-wrapper box_absolute> h2 classkotc-how-to-play-title text-center>span classroundme_md>{{ loc.home_kotc_popup_how_to }}/span>br />{{ loc.home_play }}!/h2> img srcimg/kotc/kotc-arrow.svg aria-hiddentrue> /div> div classdisplay-grid grid-column-2-eq grid-gap-space-lg fullwidth ss_margintop_xxxxl> div classimg-container roundme_lg fullwidth step-one> div classfullwidth> p classtext-center>span classsr-only>Step /span>1/p> h6 classtext-center>{{loc.home_kotc_popup_step_one}}/h6> /div> /div> div classimg-container roundme_md fullwidth step-two> div classfullwidth> p classtext-center>span classsr-only>Step /span>2/p> h6 classtext-center>{{loc.home_kotc_popup_step_two}}/h6> /div> /div> /div> div classdisplay-grid grid-column-2-eq grid-gap-space-lg roundme_md fullwidth ss_margintop_lg kotc-play-now step-three-wrapper> div classfullwidth box_relative step-three> img classkotc-logo box_absolute srcimg/kotc/kotc-rooster.svg altThe King of the Coop Rooster> div> p classtext-center>span classsr-only>Step /span>3/p> h6 classtext-center v-htmlloc.home_kotc_popup_step_three>/h6> /div> /div> div classfullwidth f_col f_space_between> div classdisplay-grid grid-column-5-eq kotc-crowns> img aria-hiddentrue srcimg/kotc/kotc-crown.svg altCrowns> img aria-hiddentrue srcimg/kotc/kotc-crown.svg altCrowns> img aria-hiddentrue srcimg/kotc/kotc-crown.svg altCrowns> img aria-hiddentrue srcimg/kotc/kotc-crown.svg altCrowns> img aria-hiddentrue srcimg/kotc/kotc-crown.svg altCrowns> /div> button classss_button btn_big btn_green bevel_green fullwidth @clickonClickPlayKotcNow>i classfa fa-play fa-sm>/i> {{ loc.home_play }}/button> /div> /div> /template> /large-popup> large-popup refnotificationPopup idnotificationPopup @popup-closedonSharedPopupClosed :overlay-closefalse :hide-closetrue> template slotheader>Notifications/template> template slotcontent> notification-content refnotifiContent :notificationui.notification :locloc :bonusui.bonus.showing @open-bundleonOpenBundle @close-popuponCloseNotification>/notification-content> /template> /large-popup> !-- Popup: Banned --> large-popup idbannedPopup refbannedPopup hide-closetrue> template slotcontent> h1>{{ locbanned_title }}/h1> p>{{ locbanned_msg }}/p> p>{{ locbanned_expire }} {{ bannedPopup.expire }}/p> /template> /large-popup>!-- small-popup idopenUrlPopup refopenUrlPopup @popup-confirmonOpenUrlPopupConfirm @popup-closedonSharedPopupClosed> template slotheader>{{ locopenUrlPopup.titleLocKey }}/template> template slotcontent> {{ openUrlPopup.content }} /template> template slotcancel>{{ locopenUrlPopup.cancelLocKey }}/template> template slotconfirm>{{ locopenUrlPopup.confirmLocKey }}/template> /small-popup>--> small-popup iddeleteAccountApprovalPopup refdeleteAccountApprovalPopup @popup-confirmonAccountDelectionConfirmed> !-- template slotheader>{{ loc.p_settings_privacy }}/template> --> template slotcontent> h1 v-htmlloc.feedback_account_deletion_title>/h1> p classtext-center> i classfas fa-exclamation-triangle fa-2x text_red>/i> /p> p v-htmlloc.feedback_account_deletion_desc_1>/p> p v-htmlloc.feedback_account_deletion_desc_2>/p> /template> template slotcancel>{{loc.cancel}}/template> template slotconfirm>{{loc.feedback_account_delection_confirm}}/template> /small-popup> !-- Popup: Leave Game Confirm --> small-popup idleaveGameConfirmPopup refleaveGameConfirmPopup :overlay-closefalse :hide-closetrue @popup-confirmonLeaveGameConfirm @popup-cancelonLeaveGameCancel @popup-openedsharedIngamePopupOpened @popup-closedsharedIngamePopupClosed> template slotheader>{{ loc.leave_game_title }}/template> template slotcontent> p>{{ loc.leave_game_text }}/p> /template> template slotcancel>{{ loc.no }}/template> template slotconfirm>{{ loc.yes }}/template> /small-popup> small-popup idfbTransferAccountSignin reffbTransferAccountSignin :hide-confirmtrue :overlay-closefalse @popup-cancelonLeaveGameCancel @popup-openedsharedIngamePopupOpened @popup-closedsharedIngamePopupClosed> !-- template slotheader>{{ loc.leave_game_title }}/template> --> template slotcontent> p>{{ loc.signin_fb_msg}}/p> /template> template slotcancel>{{ loc.close }}/template> !-- template slotconfirm>{{ loc.yes }}/template> --> /small-popup> !-- Popup: Tutorial --> small-popup idtutorialPopup reftutorialPopup :hide-confirmtrue :hide-canceltrue @popup-closedonTutorialClosed> template slotheader>{{ loc.tutorial_title }}/template> template slotcontent> div classbox_relative display-grid grid-template tutorial-labels> span v-for(item, idx) in ui.tutorialPopup.keys :keyidx v-htmllocitem.locKey classbox_absolute :classitem.cls>/span> img srcimg/tutorial/ss_tutorial_Keyboard.png classtutorial-keyboard altTutorial keyboard image> img srcimg/tutorial/ss_tutorial_Mouse.png classtutorial-mouse altTutorial mouse image > /div> div classtutorial-content display-grid align-items-center center_h> div> img srcimg/tutorial/ss_tutorial_EggTarget.png classtutorial-egg altTutorial egg image > /div> ul classtutorial-list list-no-style> li classtext-left>{{ loc.tutorial_point_1 }}/li> li classtext-left>{{ loc.tutorial_point_2 }}/li> li classtext-left>{{ loc.tutorial_point_3 }}/li> /ul> /div> /template> /small-popup> !-- Popup: xsollaPopup --> small-popup idxsollaPopup refxsollaPopup @popup-confirmxsollaPopupConfrim @popup-cancelxsollaPopupCancel> template slotheader>Warning!/template> template slotcontent> div>Welcome to our exciting world of egg recipe experiments! Please note that while were eager to explore the endless possibilities, we cannot guarantee the outcome of all purchases. So, lets embark on this culinary adventure together, but be prepared for the occasional crack in the shell. Happy cooking!/div> /template> template slotcancel>{{ loc.cancel }}/template> template slotconfirm>Continue/template> /small-popup> !-- div idkotc-play-kotc classkotc-play-kotc display-grid> img classkotc-play-kotc-watermark srcimg/kotc/kotc-crown-indicator.svg alt> img classkotc-play-kotc-arrow srcimg/kotc/kotc-arrow.svg aria-hiddentrue> /div> --> !-- #kotc-play-kotc -->/div> !-- End of vue instance div -->script> var vueApp; var vueData { ready: false, accountSettled: false, missingFeatures: , showChangelogHistoryBtn: true, itemSearchVal: , changelog: { version: , current: , history: , showHistoryBtn: true }, onClickSignIn: false, checkProducts: 0, firebaseId: null, photoUrl: null, maskedEmail: null, isEmailVerified: false, isAnonymous: true, showPrivacyOptions: isFromEU, isOfAge: false, showTargetedAds: false, delayTheCracking: false, displayAdFunction: Function, titleScreenDisplayAd: Function, displayAdObject: false, hideAds: false, feedbackSelected: null, isPoki: false, isPokiGameLoad: false, pokiRewardReady: false, isPokiNewRewardTimer: false, videoRewardTimers: { initial: 300000, primary: 420000 }, pokiRewNum: 1, displayAd: { adUnit: { home: shellshockers_titlescreen, nugget: shellshockers_chicken_nugget_banner, house: ShellShockers_LoadingScreen_HouseAds, spinner: shellshockers_respawn_banner, respawn: RESPAWNADUNIT, respawnTwo: RESPAWN2ADUNIT, respawnThree: RESPAWN3ADUNIT, header: shellshock-io_728x90_HP, }, header: 0 }, cGrespawnBannerTimeout: null, cGrespawnBannerErrors: 0, classIdx: 0, playerName: , eggs: 0, kills: 0, deaths: 0, kdr: 0, streak: 0, accountCreated: null, kdrLifetime: 0, statsCurrent: {}, statsLifetime: {}, challengesClaimedUnique: 0, challengesClaimed : { total: 0, unique: 0 }, eggsSpent: 0, eggsSpentMonthly: 0, eggsEarnedBalance: 0, isUpgraded: false, upgradeName: , isSubscriber: false, regionList: , // Populated by Matchmaker API currentRegionId: null, currentRegionLocKey: , currentGameType: 0, volume: 0, getMusicVolume: 0.5, selectedWeaponDisabled: false, currentLanguageCode: en, feedbackType: { comment: {id: 0, locKey: fb_type_commquest}, request: {id: 1, locKey: fb_type_request}, bug: {id: 2, locKey: fb_type_bug}, purchase: {id: 3, locKey: fb_type_purchase}, account: {id: 4, locKey: fb_type_account}, abuse: {id: 5, locKey: fb_type_abuse}, other: {id: 6, locKey: fb_type_other}, delete: {id: 7, locKey: fb_type_delete} }, icon: { inventory : ico-nav-equipment, shop: ico-nav-shop, invite: fas fa-user-friends, home: ico-nav-home, user: ico-nav-profile, settings: fas fa-cog, fullscreen: fas fa-expand-alt, egg: fas fa-egg, dollar: fas fa-dollar-sign }, showScreen: 0, previousScreen: 0, screens: { home: 0, equip: 1, game: 2, profile: 3, photoBooth: 4, }, currentEquipMode: null, equipMode: { inventory: 0, gear: 1, featured: 2, skins: 3, shop: 4, }, ui: { overlayType: { none: 0, dark: 1, light: 2, }, overlayClass: { inGame: overlay_game }, team: { blue: 1, red: 2 }, houseAds: { small: null, big: null, homeScreen: }, showCornerButtons: true, hideUi: false, showHomeEquipUi: true, events: { twitch: false, }, crazyGames: false, photoBooth: { type: 1, vignette: false, }, tutorialPopup: { show: false, keys: { locKey: keybindings_grenade, cls: tutorial-grenade }, { locKey: keybindings_melee, cls: tutorial-melee }, { locKey: keybindings_reload, cls: tutorial-reload }, { locKey: keybindings_fire, cls: tutorial-shoot }, { locKey: keybindings_aim, cls: tutorial-aim }, { locKey: keybindings_jump, cls: tutorial-jump }, { locKey: keybindings_swapweapon, cls: tutorial-swap-weapons }, { locKey: tutorial_move_up, cls: tutorial-move-up }, { locKey: tutorial_move_down, cls: tutorial-move-down }, { locKey: tutorial_move_left, cls: tutorial-move-left }, { locKey: tutorial_move_right, cls: tutorial-move-right }, { locKey: tutorial_q, cls: tutorial-q tutorial-special-keys tutorial-key-top text-uppercase text_blue5 }, { locKey: tutorial_w, cls: tutorial-w tutorial-special-keys tutorial-key-top text-uppercase text_blue5 }, { locKey: tutorial_e, cls: tutorial-e tutorial-special-keys tutorial-key-top text-uppercase text_blue5 }, { locKey: tutorial_r, cls: tutorial-r tutorial-special-keys tutorial-key-top text-uppercase text_blue5 }, { locKey: tutorial_a, cls: tutorial-a tutorial-special-keys tutorial-key-bottom text-uppercase text_blue5 }, { locKey: tutorial_s, cls: tutorial-s tutorial-special-keys tutorial-key-bottom text-uppercase text_blue5 }, { locKey: tutorial_d, cls: tutorial-d tutorial-special-keys tutorial-key-bottom text-uppercase text_blue5 }, { locKey: tutorial_f, cls: tutorial-f tutorial-special-keys tutorial-key-bottom text-uppercase text_blue5 }, { locKey: tutorial_spacebar, cls: tutorial-spacebar tutorial-special-keys text-uppercase text_blue5}, { locKey: tutorial_move_shift, cls: tutorial-shift tutorial-special-keys text-uppercase text_blue5 }, , imgKeys: , imgMouse: , }, notification: null, bonus: { showing: false, amount: 1000 }, mainMenu: { locKey: account_title_home, icon: ico-nav-home, screen: 0, mode: , hideOn: 2, }, { locKey: account_title_profile, icon: ico-nav-profile, screen: 3, mode: , hideOn: , }, { locKey: p_pause_equipment, icon: ico-nav-equipment, screen: 1, mode: 0, hideOn: , }, { locKey: eq_shop, icon: ico-nav-shop, screen: 1, mode: 3, 4, 2, hideOn: , }, // { // locKey: screen_photo_booth_menu, // icon: ico-nav-shop, // screen: 4, // mode: , // hideOn: , // }, , profile: { statTab: 0, statTabClicked: false }, playerListOverflow: false, typeSelectors: { img: ItemIcons.Primary, type: ItemType.Primary }, { img: ItemIcons.Secondary, type: ItemType.Secondary }, { img: ItemIcons.Stamp, type: ItemType.Stamp }, { img: ItemIcons.Hat, type: ItemType.Hat }, { img: ItemIcons.Grenade, type: ItemType.Grenade }, { img: ItemIcons.Melee, type: ItemType.Melee } , socialMedia: { footer: {name: Facebook, reward: Facebook, url: https://www.facebook.com/bluewizarddigital, imgPath: footer-social-media-bubble-facebook.png, icon: fa-facebook, id: 1227, owned: false}, {name: Twitter, reward: Twitter, url: https://twitter.com/bluewizardgames, imgPath: footer-social-media-bubble-twitter.png, icon: fa-twitter, id: 1234, owned: false}, {name: Instagram, reward: Instagram, url: https://www.instagram.com/bluewizardgames/, imgPath: footer-social-media-bubble-instagram.png, icon: fa-instagram, id: 1219, owned: false}, {name: TikTok, reward: tiktok, url: https://www.tiktok.com/@bluewizarddigital, imgPath: footer-social-media-bubble-tiktok.png, icon: fa-tiktok, id: 1208, owned: false}, {name: Discord, reward: discord, url: https://discord.gg/bluewizard, imgPath: footer-social-media-bubble-discord.png, icon: fa-discord, id: 1200, owned: false}, {name: Steam, reward: Steam, url: https://store.steampowered.com/publisher/bluewizard, imgPath: footer-social-media-bubble-steam.png, icon: fa-steam-symbol, id: 1223, owned: false}, {name: Twitch, reward: Twitch, url: https://www.twitch.tv/bluewizarddigital, imgPath: footer-social-media-bubble-twitch.png, icon: fa-twitch, id: 1268, owned: false}, {name: newYolker, reward: , url: https://bluewizard.com/subscribe-to-the-new-yolker, imgPath: , icon: fa-envelope-open-text, id: null, owned: null}, , selected: }, isEvent: { active: false, houseAdImg: , homeBtnImg: , popupImg: , popupBtnLoc: , }, premiumFeaturedTag: , game : { stats: { loading: false }, spectate: false, spectatingPlayerName: null } }, twitchLinked: 0, twitchName: , languages: { name: English, code: en }, { name: French, code: fr }, { name: German, code: de }, { name: Russian, code: ru }, { name: Spanish, code: es }, { name: Portuguese, code: pt }, { name: Korean, code: ko }, { name: Chinese, code: zh }, { name: Dutch, code: nl } , locLanguage: {}, playTypes: { joinPublic: 0, createPrivate: 1, joinPrivate: 2 }, gameTypes: { locKey: gametype_ffa, value: 0, order: 2 }, { locKey: gametype_teams, value: 1, order: 1 }, { locKey: gametype_ctf, value: 2, order: 0 }, { locKey: gametype_king, value: 3, order: 3 }, , // This makes me mad, but until Vue is put in the clojure with GameType, // where it should have been to begin with, HERE IT IS >:( gameTypeKeys: FFA, Teams, Spatula, King , reportReasons: { locKey: report_reason_cheating, value: 1 }, { locKey: report_reason_harassment, value: 2 }, { locKey: report_reason_offensive, value: 4 }, { locKey: report_reason_other, value: 8 } , banDurations: { label: 5 Minutes, value: 0 }, { label: 15 Minutes, value: 1 }, { label: 1 hour, value: 2 } , twitchStreams: , youtubeStreams: , newsfeedItems: , maps: , settingsUi: { settings: , adjusters: { misc: { id: volume, locKey: p_settings_mastervol, min: 0, max: 1, step: 0.01, value: 1, multiplier: 100 } , mouse: { id: mouseSpeed, locKey: p_settings_mousespeed, min: 1, max: 100, step: 1, value: 30 } , gamepad: { id: sensitivity, locKey: p_settings_sensitivity, min: 1, max: 100, step: 1, value: 30 }, { id: deadzone, locKey: p_settings_deadzone, min: 0, max: 1, step: 0.01, value: 0.3, precision: 2 } , // music: // { id: musicVolume, locKey: p_settings_music_volume, min: 0, max: 1, step: 0.01, value: 0.5, multiplier: 100 } // , }, togglers: { misc: { id: holdToAim, locKey: p_settings_holdtoaim, value: true }, { id: enableChat, locKey: p_settings_enablechat, value: true }, { id: safeNames, locKey: p_settings_safenames, value: false }, { id: autoDetail, locKey: p_settings_autodetail, value: true }, { id: shadowsEnabled, locKey: p_settings_shadows, value: true }, { id: highRes, locKey: p_settings_highres, value: false }, // { id: musicStatus, locKey: p_settings_music, value: true } , misc2: { id: hideBadge, locKey: p_settings_badge_hide, value: false }, { id: closeWindowAlert, locKey: p_settings_close_alert, value: false }, { id: shakeEnabled, locKey: p_settings_shake, value: true }, { id: centerDot, locKey: p_settings_center_dot, value: true }, { id: hitMarkers, locKey: p_settings_hit_markers, value: true }, , mouse: { id: mouseInvert, locKey: p_settings_invertmouse, value: false }, { id: fastPollMouse, locKey: p_settings_fastpollmouse, value: false }, , gamepad: { id: controllerInvert, locKey: p_settings_invertcontroller, value: false }, }, controls: { keyboard: { // The ids map to the field names in settings.controlscategory game: { id: up, side: left, locKey: keybindings_forward, value: W }, { id: down, side: left, locKey: keybindings_backward, value: S }, { id: left, side: left, locKey: keybindings_left, value: A }, { id: right, side: left, locKey: keybindings_right, value: D }, { id: jump, side: left, locKey: keybindings_jump, value: SPACE }, { id: melee, side: left, locKey: keybindings_melee, value: F }, { id: inspect, side: left, locKey: keybindings_inspect, value: G }, { id: despawn, side: left, locKey: keybindings_despawn, value: P }, { id: fire, side: right, locKey: keybindings_fire, value: MOUSE 0 }, { id: scope, side: right, locKey: keybindings_aim, value: SHIFT }, { id: reload, side: right, locKey: keybindings_reload, value: R }, { id: swap_weapon, side: right, locKey: keybindings_swapweapon, value: E }, { id: grenade, side: right, locKey: keybindings_grenade, value: Q }, , spectate: { id: ascend, locKey: keybindings_spectate_ascend, value: SPACE }, { id: descend, locKey: keybindings_spectate_descend, value: SHIFT }, { id: toggle_freecam, locKey: keybindings_spectate_freecam, value: V }, { id: slow, locKey: keybindings_spectate_slow, value: MOUSE 0}, }, gamepad: { // The ids map to the field names in settings.gamepadcategory game: { id: jump, locKey: keybindings_jump, value: 0 }, { id: fire, locKey: keybindings_fire, value: 1 }, { id: scope, locKey: keybindings_aim, value: 2 }, { id: reload, locKey: keybindings_reload, value: 3 }, { id: swap_weapon, locKey: keybindings_swapweapon, value: 4 }, { id: grenade, locKey: keybindings_grenade, value: 5 }, { id: melee, locKey: keybindings_melee, value: 6 }, { id: inspect, locKey: keybindings_inspect, value: 7 } , spectate: { id: ascend, locKey: keybindings_spectate_ascend, value: 1 }, { id: descend, locKey: keybindings_spectate_descend, value: 2 } } } }, songChanged: false, music: { isMusic: false, musicJson: data/sponsors.json, musicSrc: , theAudio: , playing: false, sponsors: {}, sponsor: , currIndex: 0, currentTime: 0, duration: 0, timer: null, progress: 0, volume: 10, hideClass: music-widget--fade-out, serverTracks: { id: , title: , artist: , album: , albumArt: , url: , trackUrltest: https://shellshock.io, sponsor: , sponsorUrl: , } }, home: { joinPrivateGamePopup: { code: , showInvalidCodeMsg: false, validate: function () { if (this.code.length 0) { console.log(failed validation); this.showInvalidCodeMsg true; BAWK.play(ui_reset); return false; } console.log(passed validation); return true; }, reset: function () { this.code ; this.showInvalidCodeMsg false; } }, gaugeData: { default: { min: 164, max: 196, default: 180, }, min: 185, max: 195, loadvalue: 190, setValue: 180, active: false, }, }, hvsm: { hero: { name: Heroes, items: , img: img/gauge-bar/shell_E&E_good_popup.png, }, monster: { name: Monsters, items: , img: img/gauge-bar/shell_E&E_evil_popup.png, }, }, equip: { get showingItems () { return this._showingItems; }, set showingItems (items) { this._showingItems items; for (let i 0; i this.lazyRenderTimeouts.length; ++i) { clearTimeout(this.lazyRenderTimeoutsi); } }, lazyRenderTimeouts: , equippedPrimary: null, equippedSecondary: null, equippedHat: null, equippedStamp: null, equippedGrenade: null, posingHat: null, posingStamp: null, posingWeapon: null, posingGrenade: null, posingMelee: null, posingStampPositionX: 0, posingStampPositionY: 0, showingWeaponType: ItemType.Primary, selectedItemType: ItemType.Primary, itemSearchTerm: , itemSearchNone: false, itemSearchVal: , selectedItem: null, _showingItems: , buyingItem: null, colorIdx: 0, extraColorsLocked: true, categoryLocKey: null, showSpecialItems: false, specialItemsTag: null, showUnVaultedItems: , bundlePopupItems: , chwRewardBuyItem: false, displayAdHeaderRefresh: true, bundle: { owned: false, items: , }, redeemCodePopup: { code: , showInvalidCodeMsg: false, validate: function () { if (this.code.length 0) { console.log(failed validation); this.showInvalidCodeMsg true; BAWK.play(ui_reset); return false; } console.log(passed validation); return true; }, reset: function () { this.code ; this.showInvalidCodeMsg false; } }, physicalUnlockPopup: { item: null } }, game: { on: false, isPaused: true, shareLinkPopup: { url: }, gameType: 0, team: 1, respawnTime: 0, tipIdx: 0, isGameOwner: false, openPopupId: , pauseScreen: { id: pausePopup, adContainerId: pauseAdPlacement, classChanged: false, wasGameInventoryOpen: false, mainContainer: , canvas: , showMenu: true, }, disableRespawn: false, mapName: , serverName: , killDeathMsg: { showing: false, msgs: , msg: , style: , timer: null, }, challengeMsg: { showing: false, msgs: , icon: , title: , timer: null, }, ctsMsg: { showing: false, teams: , blue, red, team: 0, msg: , timer: null, }, streakMsg: { showing: false, msg: , count: 0, timer: null, }, bestStreak: { count: 0, timer: null, }, ingameNotification: { item: {type: 0, msg: , streak : 0, style: }, showing: false, timer: null, multiTimer: null, }, inGameNotification: { type: 0, timer: null, }, shellStreakTimers: { msg: ks_double_eggs, msgId: double-eggs, }, { msg: ks_miniegg, msgId: shrink, }, { msg: ks_dmg, msgId: egg-breaker, } }, isEvent: false, doubleEggWeekendSoon: false, doubleEggWeekend: false, announcementMessage: null, playerActionsPopup: { playerId: 0, uniqueId: 0, isGameOwner: false, playerName: , muted: false, muteFunc: null, bootFunc: null, reportFunc: null, social: false, vipMember: false }, banPlayerPopup: { reason: }, reportPlayerPopup: { checked: false, false, false, false }, giveStuffPopup: { titleLoc: , eggs: 0, items: , type: }, openUrlPopup: { url: , titleLocKey: , contentLocKey: , confirmLocKey: ok, cancelLocKey: no_thanks }, bannedPopup: { expire: }, genericMessagePopup: { titleLocKey: keybindings_right, contentLocKey: p_popup_chicken_nuggetbutton, confirmLocKey: ok }, unsupportedPlatformPopup: { titleLocKey: unsupported_platform, contentLocKey: }, windowDimensions: { width: 0, height: 0, }, bannerAds: { bannerElId: , }, googleAnalytics: { isUser: null, cat: { purchases: Purchases, purchaseComplete: Purchase Complete, itemShop: Item Shop, inventory: Inventory, playerStats: player stats, play: play game, redeem: Redeem }, action : { eggShackClick: Egg Shack Click, eggShackProductClick: Egg Shack Product Click, purchaseComplete: Purchase Complete, goldenChickenProductClick: Golden Chicken Product Click, goldenChickenNuggetClick: Golden Chicken Nugget Click, shopClick: Shop Opened , shopItemClick: Shop Item Selected, shopItemPopupClick: Shop Item Popup Click, shopItemPopupBuy: Item purchased, shopItemNeedMoreEggsPopup: Need More Eggs Popup, inventorySelected: Inventory Item , eggCount: Egg Count, inventoryTabClick: Inventory Opened, playGameClick: Play Game Click, redeemed: Redeemed, redeemClick: Redeem open, languageSwitch: Language setting change, langBeforeUpdate: Language before auto detect, privateGame: Private Game, shareGamePopup: Share game Popup, shareGameCopy: Shared game code, createGame: Created game, joinGame: Joined game, playerLimit: Player limit, timesPlayed: Times played, anonymousPopupOpenAuto: Anon warning auto opened, anonymousPopupOpen: Anon warning opened, anonymousPopupSignupClick: Anon warning Sign in clicked, anonymousPopupAgreeClick: Anon warning Understood clicked, denyAnonUserPopup: Deny anon user popup, denyAnonUserPopupSignin: sign in click, faqPopupClick: FAQ popup open, switchTeams: Switched Teams, error: error, signIn: Sign in }, label : { signInClick: sign in click, understood: Understood click, getMoreEggs: Get More Eggs Click, waitForGameReadyTimeout: waitForGameReady timeout, signInAuthFailed: authorization failed, signInTiming: Sign in delay, signInCompleted: Completed, signInOut: Signed out, signInFailed: , homeToGameLoading: Home to game loading, loading: Loading } }, urlParams: null, urlParamSet: null, adTagUrl: https://pubads.g.doubleclick.net/gampad/ads?iu/21743024831/ShellShock_Video&description_url__page-url__&envvp&impls&correlator&tfcd0&npa0&gdfp_req1&outputvast&sz640x480&unviewed_position_start1, eggStoreItems: , subStoreItems: , premiumShopItems: , eggStoreReferral: , eggStoreHasSale: false, eggStorePopupSku: egg_pack_small, showNugget: true, // isMiniGameComplete: false, miniEggGameAmount: 0, showGoldenChicken: false, nugStart: null, nugCounter: null, isBuyNugget: false, adBlockerCountDown: 10, controllerType: generic, controllerId: , controllerButtonIcons: { xbox: A, B, X, Y, LB, RB, LT, RT, Select, Start, img classss_buttonbind_icon srcimg/controller/button_stickleft.svg>, img classss_buttonbind_icon srcimg/controller/button_stickright.svg>, img classss_buttonbind_icon srcimg/controller/button_dpadup.svg>, img classss_buttonbind_icon srcimg/controller/button_dpaddown.svg>, img classss_buttonbind_icon srcimg/controller/button_dpadleft.svg>, img classss_buttonbind_icon srcimg/controller/button_dpadright.svg> , ps: img classss_buttonbind_icon srcimg/controller/button_cross.svg>, img classss_buttonbind_icon srcimg/controller/button_circle.svg>, img classss_buttonbind_icon srcimg/controller/button_square.svg>, img classss_buttonbind_icon srcimg/controller/button_triangle.svg>, LB, RB, LT, RT, Select, Start, img classss_buttonbind_icon srcimg/controller/button_stickleft.svg>, img classss_buttonbind_icon srcimg/controller/button_stickright.svg>, img classss_buttonbind_icon srcimg/controller/button_dpadup.svg>, img classss_buttonbind_icon srcimg/controller/button_dpaddown.svg>, img classss_buttonbind_icon srcimg/controller/button_dpadleft.svg>, img classss_buttonbind_icon srcimg/controller/button_dpadright.svg> , switchpro: B, A, Y, X, LB, RB, LT, RT, -, +, img classss_buttonbind_icon srcimg/controller/button_stickleft.svg>, img classss_buttonbind_icon srcimg/controller/button_stickright.svg>, img classss_buttonbind_icon srcimg/controller/button_dpadup.svg>, img classss_buttonbind_icon srcimg/controller/button_dpaddown.svg>, img classss_buttonbind_icon srcimg/controller/button_dpadleft.svg>, img classss_buttonbind_icon srcimg/controller/button_dpadright.svg> , generic: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, pwaDeferEvent: , blackFridayBanner: false, isSale: false, smallHouseAd: {}, bannerHouseAd: false, showAdBlockerVideoAd: false, hasMobileReward: false, killName: null, killedName: null, killedByMessage: null, killedMessage: null, chw: { reward: { eggs: null, itemIds: , ownedItems: null, }, winnerCounter: 0, resets: 0, winnerDailyLimitReached: false, isError: false, miniGameComplete: true, hasPlayClicked: false, onClick: false, activeTimer: 6000, homeTimer: null, homeEl: null, signInClicked: false, adBlockDetect: false, nuggetReset: 0, hours: 0, minutes: 0, seconds: 0, progress: 0, limitReached: false, ready: false, imgs: { // loot: img/chicken-nugget/chickLoop_sleep.svg, // speak: img/chicken-nugget/chickLoop_speak.svg, // limit: img/chicken-nugget/chickLoop_daily_limit.svg, // sleep: img/chicken-nugget/chickLoop_sleep.svg, // idle: img/chicken-nugget/chickLoop_idle.svg, idle: img/chicken-nugget/alt/cyborg/chickLoop_idle.svg, speak: img/chicken-nugget/alt/cyborg/chickLoop_speak.svg, limit: img/chicken-nugget/alt/cyborg/chickLoop_sleep.svg, sleep: img/chicken-nugget/alt/cyborg/chickLoop_sleep.svg, loot: img/chicken-nugget/alt/cyborg/chickLoop_sleep.svg, } }, isChicknWinnerError: false, chwMiniGameComplete: true, hasChwPlayClicked: false, chwActiveTimer: 6000, chwHomeTimer: null, chwHomeEl: null, chwSignInClicked: false, chwRewardIds: , contentCreator: false, eggOrg: false, playClicked: false, dev: { store: { sku: null, sub: false, } }, player: { challenges: , challengeDailyData: 0, challengeTimer: { played: 0, alive: 0, } }, gameOptionsPopup: { resetClicked: false, usingDefaults: true, options: {}, togglers: { id: locked, name: Locked, locKey: game_options_locked, value: 0 }, { id: noTeamChange, name: Disable Manual Team Change, locKey: game_options_noTeamChange, value: 0 }, { id: noTeamShuffle, name: Disable Automatic Team Change, locKey: game_options_noTeamShuffle, value: 0 } , adjusters: { id: gravity, locKey: game_options_gravity, min: 0.25, max: 1, step: 0.25, value: 1, precision: 2 }, { id: damage, locKey: game_options_damage, min: 0, max: 2, step: 0.25, value: 1, precision: 2 }, { id: healthRegen, locKey: game_options_healthRegen, min: 0, max: 4, step: 0.25, value: 1, precision: 2 } }} // var vueData new VueData();/script>!-- Shared tags must come before the screen tags -->script iddisplay-ad-template typetext/x-template> div> div v-showisAdShowing :idid classdisplay-ad-container :classtheClass>/div> house-ad :datahouseAdData :isshowingisAdShowing && houseAdData && adBlocker>/house-ad> /div>/script>script> // Register popup components globallyVue.component(display-ad, createDisplayAdComponent(#display-ad-template));function createDisplayAdComponent(templateId) { return { template: templateId, props: id, adUnit, isHidden, poki, adSize, override, houseAd, ignoreSize, noRefresh, checkProducts, width, height, data: function () { return { isAdShowing: false, refreshAllowed: true, hideAds: false, theAd: , houseAdData: , adBlocker: false, finishedSetup: false // timerPeriod: 30000, // timerId: null, // observer: null, // isAdVisible: false, } }, mounted() { this.$nextTick(() > { this.getTheAd(); }); // this.override this.override || false; }, methods: { getTheAd() { if (extern.adsLoaded) { return; } this.theAd document.getElementById(this.adUnit); if (this.finishedSetup) { console.log(display ad stop trying to append); return; } const wrap document.getElementById(this.id); wrap.appendChild(this.theAd); if (this.houseAd && !crazyGamesActive && !pokiActive) { googletag.cmd.push(function() { googletag.display(ShellShockers_LoadingScreen_HouseAds) }); } this.finishedSetup true; // this.setUpObserver(); }, setUpObserver() { this.observer new IntersectionObserver(this.onElObserved, { root: null, threshold: 0.1}); this.observer.observe(this.theAd); }, onElObserved(ad) { this.isAdVisible Math.floor(ad0.intersectionRatio * 100) > 10 ? true : false; }, setVisible(visible) { // dont trigger ads if not paused or vip if ((visible && !extern.gamePaused && extern.inGame) || extern.productBlockAds) { return; } this.isAdShowing visible; // if (!this.isAdShowing) { // if (!crazyGamesActive) window.removeEventListener(resize, this.hideAdBasedOnscreenSize); // } else { // this.triggerAd(); // if (!crazyGamesActive) { // setTimeout(() > this.hideAdBasedOnscreenSize(), 500); // window.addEventListener(resize, this.hideAdBasedOnscreenSize); // } // } if (this.isAdShowing) { this.triggerAd(); } }, show() { if (extern.productBlockAds) return; console.log(`display ad container ${this.id} showing`); this.setVisible(true); }, hide() { console.log(`display ad container ${this.id} hiding`); this.setVisible(false); }, crazyGamesAd(id) { crazySdk.requestBanner({ id: id, width: this.width, height: this.height, }); }, triggerAd() { this.adBlocker extern.adBlocker; if (this.adBlocker) { this.adblockerSetup(); return; } if (!crazyGamesActive && !testCrazy) { if (this.houseAd) { gtagInHouseLoadingBanner(); return; } if (this.noRefresh) { return; } if (hasValue(this.timerId)) { clearTimeout(this.timerId); this.timerId null; } // Ensure aiptag has a value before setting subid and pushing a command if (typeof aiptag undefined || aiptag null) { return; } aiptag.subid AIPSUBID; aiptag.cmd.display.push(() > { aipDisplayTag.display(this.adUnit); console.log(display ad requested, this.adUnit); // this.refreshAllowed false; // this.timerId window.setTimeout(() > this.refreshAllow(), this.timerPeriod); }); } }, destroyAd() { // this.setVisible(false); this.setVisible(false); if (extern.productBlockAds) { return; } else { if (!crazyGamesActive) { console.log(display ad destroy, this.adUnit); aiptag.cmd.display.push(() > { aipDisplayTag.destroySlot(this.adUnit); }); } } }, toggleAd(val) { console.log(display ad toggle visibility, this.adUnit, val); if (extern.productBlockAds) { this.isAdShowing false; } else { this.$nextTick(() > { this.isAdShowing val; // if (this.refreshAllowed && val) { // console.log(display ad toggle triggers refresh, this.adUnit); // this.triggerAd(); // } }); } }, adblockerSetup() { if (pokiActive) return; switch(this.id) { case div-gpt-ad-shellshockers-loading-houseads-wrap: case shellshockers_respawn_banner_ad: case shellshockers_respawn_banner-new_ad: this.houseAdData extern.getHouseAd(bigBanner); break; case shellshockers_respawn_banner_2_ad: case shellshockers_titlescreen_wrap: this.houseAdData extern.getHouseAd(small); break; default: console.log(House ads say, huh?); } }, hideAdBasedOnscreenSize() { let adWidth this.$el.offsetWidth; let intViewportWidth window.innerWidth; if (vueApp.displayAdObject && vueApp.displayAdObject > 1 ) { if (vueApp.displayAdObject 970) { return; } if (vueApp.displayAdObject > intViewportWidth ) { this.hide(); } } else { if (adWidth 970) { return; } if (adWidth > intViewportWidth ) { this.hide(); } } }, adVisibility() { if (this.ignoreSize) return; googletag.pubads().addEventListener(slotVisibilityChanged, e > { if (e.inViewPercentage 51) { this.hide(); } else { this.show(); } } ); }, refreshAllow() { this.refreshAllowed true; if (this.isAdShowing && this.isAdVisible) { console.log(display ad auto refresh, this.adUnit); this.triggerAd(); } else { console.log(display ad auto refresh cancelled, this.adUnit); } } }, computed: { theClass() { return this.adUnit.toLowerCase().replace(/_/g, -); } }, watch: { isHidden(value) { if (!value) { this.hide(); } }, checkProducts(val) { if (val && extern.productBlockAds) { this.hide(); } }, // isAdVisible(val) { // console.log(display ad visible, this.adUnit, val); // if (val && this.isAdShowing && this.refreshAllowed) { // this.triggerAd(); // } // } } }}/script>script idevents-template typetext/x-template> div v-ifshowEvent idevent-notifications> div classdouble-eggs f_row align-items-center> img :srcdoubleEggEventUrl /> /div> /div>/script>script> const comp_events { template: #events-template, props: show, currentScreen, screens, mounted() { this.day this.now.getUTCDay(); this.hours this.now.getUTCHours(); }, data() { return { now: new Date(), day: 0, hours: 0, doubleEggSoonImgSrc: img/events/2XEggWeekend_cominSoon.png, doubleEggLiveImgSrc: img/events/2XEggWeekend_onNow.png, }; }, methods: { isEventDate(days) { return days.includes(this.day); }, }, computed: { doubleEggWeekendSoon() { return this.isEventDate(4) || this.isEventDate(5) && this.hours 20; }, doubleEggWeekend() { return this.day > 5 && this.hours > 20 || this.isEventDate(6,0); }, doubleEggEventUrl() { if (this.doubleEggWeekendSoon && !this.doubleEggWeekend) { return this.doubleEggSoonImgSrc; } else if (!this.doubleEggWeekendSoon && this.doubleEggWeekend) { return this.doubleEggLiveImgSrc; } }, showEvent() { return (this.doubleEggWeekendSoon || this.doubleEggWeekend) && this.currentScreen this.screens.game; }, } };/script>script>var comp_light_overlay { template: `transition namefade> div idlightOverlay v-showshow :classoverlayClass classoverlay overlay_light>/div>/transition>`, data: function () { return { show: false, overlayClass: , }; },};/script>script>var comp_dark_overlay { template: `transition namefade> div iddarkOverlay v-showshow :classoverlayClass classoverlay overlay_dark>/div>/transition>`, data: function () { return { show: false, overlayClass: , }; },};/script>script idspinner-overlay-template typetext/x-template> transition namefadeout> div v-showisShowing classload_screen align-items-center> h3 classload_message>{{ header }}/h3> wobbly-egg>/wobbly-egg> p classload_message>{{ footer }}/p> div v-showtip && isShowTips classspinner-tips display-grid> img srcimg/shellShockers_loadingTipEgg.png /> p classload_message tips v-htmlloctip>/p> /div> display-ad idshellshockers_respawn_banner_spinner refloadingScreenDisplayAd classpauseFiller :ignoreSizefalse :adUnitadUnit adSize728x90 width728 height90>/display-ad> /div> /transition>/script>script idwobble-egg-template typetext/x-template> div idwobbly-egg> svg viewBox0 0 240 240 :classloadEggcontainer, {noanimate: noAnimate} width240 height240 xmlnshttp://www.w3.org/2000/svg> defs> radialGradient r0.5 cy0.4 cx0.4 idload_yolkgradient spreadMethodpad> stop stop-color#fed offset0.3/> stop stop-color#fb0 offset0.32/> stop stop-color#fa0 offset1/> /radialGradient> filter idload_eggshadow :class{noanimate: noAnimate} x-30% y-30% width160% height160% > feDropShadow dx0 dy8 stdDeviation8 flood-color#124 flood-opacity0.3 /> /filter> /defs> g> path filterurl(#load_eggshadow) :classloadEggwhite, {noanimate: noAnimate} stroke#000 idsvg_eggwhite dm190.13055,40.86621c30.25552,23.71378 -12.26575,57.24017 0,81.77167c12.26575,24.5315 4.9063,80.13624 -33.52639,82.58939c-38.43269,2.45315 -55.60474,-26.16693 -94.03742,-17.98977c-38.43269,8.17717 -11.44803,-30.25552 -17.98977,-44.97442c-6.54173,-14.7189 -24.5315,-46.60985 -4.9063,-71.14135c9.8126,-12.26575 22.07835,-14.92333 34.95739,-15.02554c12.87904,-0.10221 19.01191,-15.63883 31.27766,-17.68312c12.26575,-2.04429 21.46506,17.58091 33.83303,11.2436c12.36797,-6.3373 35.26403,-20.64735 50.39179,-8.79045z stroke-width0 fill#fff /> /g> g> ellipse :classloadEggyolk, {noanimate: noAnimate} ry38 rx38 idsvg_eggyolk cy120 cx120 stroke-width0 fillurl(#load_yolkgradient)/> /g> /svg> /div>/script>script> var comp_wobbly_egg { template: #wobble-egg-template, props: noAnimate, data: function () { return { loadEggyolk: load_eggyolk, loadEggwhite: load_eggwhite, loadEggcontainer: load_eggcontainer } } };/script>script>var comp_spinner_overlay { template: #spinner-overlay-template, components: { wobbly-egg: comp_wobbly_egg }, props: loc, adblockerbanner, hideAds, adUnit, accountDate, data: function () { return { isShowing: false, header: , footer: , adIsShowing: false, isShowTips: false, tipKey: null, tips: , tip: , } }, methods: { show: function (headerLocKey, footerLocKey, showTips) { this.header this.locheaderLocKey; this.footer this.locfooterLocKey; this.isShowing true; this.isShowTips showTips; }, showSpinnerLoadProgress: function (percent) { var msg this.locui_game_loading; this.header this.locbuilding_map; this.footer {0}... {1}%.format(msg, percent); this.isShowTips true; this.isShowing true; }, hide: function () { this.isShowing false; this.isShowTips this.isShowing; this.$emit(close-display-ad); }, hideDisplayAd() { this.adIsShowing false; console.log(do it); }, showDisplayAd() { this.adIsShowing true; }, toggleDisplayAd() { return this.adIsShowing this.adIsShowing ? false : true; }, getTipKey() { if (!this.accountDate) { this.tipKey tipNew_; } else { if (!this.accountDays) { this.accountDays Math.ceil((new Date().getTime() - new Date(this.accountDate).getTime()) / (1000 * 3600 * 24)); } if (this.accountDays 14) { this.tipKey tipNew_; } else { this.tipKey tip_; } } }, randomTip() { if (this.tipKey null) { this.getTipKey(); } if (this.tips.length 0) { Object.keys(this.loc).forEach(key > { if (key.startsWith(this.tipKey)) { this.tips.push(key); } }); } this.tip this.tipsMath.floor(Math.random() * this.tips.length); } }, watch: { isShowing(val, old) { if (val && !old) { this.randomTip(); } } }};/script>script idsmall-popup-template typetext/x-template> transition namefade> div v-showisShowing classpopup_window popup_sm roundme_md centered> div> button v-show!hideClose @clickonXClick classroundme_sm popup_close clickme>i classfas fa-times text_white fa-2x>/i>/button> h3 idpopup_title v-show!hideHeader classroundme_sm shadow_blue4 nospace text_white> slot nameheader>/slot> /h3> /div> div v-show!hideContent classpopup_sm_content>slot namecontent>/slot>/div> div idbtn_horizontal classf_center> button classss_button btn_red bevel_red width_sm v-show!hideCancel @clickcancelClick>slot namecancel>/slot>/button> button classss_button btn_green bevel_green width_sm v-show!hideConfirm @clickconfirmClick>slot nameconfirm>/slot>/button> /div> slot namefooter>/slot> /div> /transition>/script>script idlarge-popup-template typetext/x-template> transition namefade> div idpopupPause v-showisShowing classpopup_window popup_lg centered roundme_md :classsetOverlayCls> button @clickonXClick v-show!hideClose classpopup_close clickme roundme_sm>i classfas fa-times text_white fa-2x>/i>/button> slot namecontent>/slot> /div> /transition>/script>script>// Register popup components globallyVue.component(small-popup, createPopupComponent(#small-popup-template));Vue.component(large-popup, createPopupComponent(#large-popup-template));function createPopupComponent(templateId) { return { template: templateId, props: hideHeader, hideContent, hideClose, hideCancel, hideConfirm, overlayType, overlayClass, popupModel, uiModel, stopKeyCapture, overlayClose, data: function () { return { isShowing: false, overlays: vueData.ui.overlayType, popupId: , removeOverlayClick: } }, created() { this.popupId this.$attrs && this.$attrs.id; }, destroyed: function() { document.removeEventListener(keyup, this.escapeKeyClose); }, methods: { setVisible: function (visible) { this.isShowing visible; if (extern.inGame) { if (this.isShowing) { extern.releaseKeys(); } else { extern.captureKeys(); } } if (this.isShowing && this.popupModel && this.popupModel.reset) { this.popupModel.reset(); } if (!this.isShowing || this.overlayType this.overlays.none || this.popupId pausePopup) { vueApp.setDarkOverlay(false); vueApp.setLightOverlay(false); } else { vueApp.setDarkOverlay(true); } if (!this.isShowing) { console.log(Closed: + this.popupId); this.$emit(popup-closed, this.popupId); vueApp.$refs.equipScreen.onPopupClosed(); vueApp.gameUiRemoveClassForNoScroll(); this.cancelEventOverLayClickEscapeClose(); } else { console.log(Opened: + this.popupId); this.$emit(popup-opened, this.popupId); vueApp.$refs.equipScreen.onPopupOpened(); vueApp.scrollToTop(); vueApp.gameUiAddClassForNoScroll(); this.addEventListeners(); } if (vueApp.showScreen ! vueApp.screens.game) { vueApp.toggleTitleScreenAd(this.isShowing ? false : true); } else { vueApp.toggleRespawnDisplayAd(this.isShowing ? false : true); } }, toggle: function () { this.isShowing !this.isShowing; this.setVisible(this.isShowing); }, show: function () { this.setVisible(true); }, hide: function () { this.setVisible(false); }, close: function () { this.setVisible(false); console.log(Closing); }, onCloseClick: function () { this.close(); BAWK.play(ui_popupclose); }, onXClick: function () { this.$emit(popup-x); this.close(); BAWK.play(ui_popupclose); }, cancelClick: function () { this.close(); this.$emit(popup-cancel); BAWK.play(ui_popupclose); }, confirmClick: function () { if (this.popupModel && this.popupModel.validate && !this.popupModel.validate()) { return; } this.close(); this.$emit(popup-confirm); BAWK.play(ui_playconfirm); }, addEventListeners: function() { document.addEventListener(click, this.handleOutsideClick); document.addEventListener(keyup, this.escapeKeyClose); }, escapeKeyClose: function(e) { if (hasValue(this.overlayClose)) { return; } if ((this.overlayClose undefined || hasValue(this.overlayClose)) && e.keyCode 27) { e.stopPropagation(); this.onCloseClick(); } }, handleOutsideClick: function(e) { if (this.overlayClose undefined || this.overlayClose ! false) { e.stopPropagation(); if ( e.target.id.includes(Overlay) ) { this.$emit(popup-x); this.onCloseClick(); } } }, cancelEventOverLayClickEscapeClose: function() { document.removeEventListener(click, this.handleOutsideClick); document.removeEventListener(keyup, this.escapeKeyClose); } }, computed: { setOverlayCls() { if (extern.inGame) { return overlay_game; } } } }}/script>script> const SvgIcon { template: `svg :classcls> use :xlink:hrefsvgName>/use> /svg>`, props: name, cls, // data() { // return { // }; // }, // methods: { // }, computed: { svgName() { return `#${this.name}`; } }, }; // Register component globally Vue.component(icon, SvgIcon);/script>template idcomp-ss-button typetext/x-template> button :idbtnId :classcls classss_button>i v-ificonLeft classiconLeft>/i> {{ locTxt }} i v-ificonRight classiconRight>/i>/button>/template>template idcomp-ss-button-dropdown-template typetext/x-template> button refssDropDown :idbtnId @clickonDropdownClick classis-for-play ss_button btn_dropdown btn_big common-box-shadow btn_game_mode bg_blue6 text-left box_relative ss-dropdown-select :classclsBtn> h3 classss-dropdown-select text_blue3 :classbtnId>{{ locTxt.title }}/h3> p classgame-mode-type ss-dropdown-select text_blue5 :classbtnId>{{ locTxt.subTitle }}/p> span classopen-close centered_y ss-dropdown-select :classbtnId> i classfas ss-dropdown-select :classcaretDirection, btnId, cartOnOpen>/i> /span> div :classmenuPosClass classoption-box box_absolute roundme_sm common-box-shadow bg_blue6 v-showisPromptOpen> ul refoptionBoxList classlist-no-style nospace ss-dropdown-select f_col> li v-iflistItems refitems v-for(g, idx) in dropdownList :class{ selected : selectedItem g.value || selectedItem idx || selectedItem g.id } classdisplay-grid gap-sm align-items-center text_blue5 font-nunito @clickonListItemClick(g, idx)>div classf_row align-items-center>icon v-showselectedItem g.value classoption-box-checkmark nameico-checkmark>/icon>/div> {{ listItemTxt(g) }}/li> slot namedropdown>/slot> /ul> /div> /button>/template>script> const createSsBtn (tempId) > { return { template: tempId, props: loc, cls, locTxt, iconRight, iconLeft, listItems, selectedItem, menuDown, menuPos, sort, locList, data: function() { return { isPromptOpen: false, btnId: btn- + (Math.random() + 1).toString(36).substring(7), onClickVal: null, caret: { up: fa-caret-up, down: fa-caret-down, right: fa-caret-right, rotate: fa-rotate-180 } } }, methods: { onListItemClick(val, idx) { if (val.value ! undefined) { this.onClickVal val.value; } else if (val.subdom ! undefined) { this.onClickVal val.id; } else { this.onClickVal idx; } this.$emit(onListItemClick, this.onClickVal); }, onDropdownClick(e) { if (!this.isPromptOpen) { this.isPromptOpen true; this.$emit(dropdownOpen); document.addEventListener(click, this.onOutsideClick); } else { this.isPromptOpen false; this.$emit(dropdownClosed); document.removeEventListener(click, this.onOutsideClick); } }, onOutsideClick(e) { if (this.isPromptOpen) { if (e.target.classList.contains(this.btnId) false) { this.isPromptOpen false; this.$emit(dropdownClosed); document.removeEventListener(click, this.onOutsideClick); } } }, listItemTxt(val) { if (val.name ! undefined) { if (this.locList ! undefined) { return this.locval.name; } return val.name; } else { return this.locval.locKey; } } }, computed: { menuPosClass() { if (this.menuPos bottom) { return pos-bottom; } else if (this.menuPos right) { return pos-right; } }, caretDirection() { if (this.menuPos bottom) { return this.caret.down; } else if (this.menuPos right) { return this.caret.right; } else { return this.caret.up; } }, cartOnOpen() { if (this.isPromptOpen) { return this.caret.rotate; } }, clsBtn() { return `${this.cls} ${this.btnId}`; }, dropdownList() { if (this.sort) { return this.listItems.sort((a, b) > { return a.order - b.order; }); } else { return this.listItems; } } }, watch: { isPromptOpen(val) { BAWK.play(ui_toggletab); } } }; } Vue.component(ss-button, createSsBtn(#comp-ss-button)); Vue.component(ss-button-dropdown, createSsBtn(#comp-ss-button-dropdown-template));/script>template idhouse-display-ad> transition namefade> figure v-ifisshowing && data classhouse-wrap> img :srcsrc :alttitle @clickadClicked /> /figure> /transition>/template>script> function createHouseAd() { return { template: #house-display-ad, props: isshowing, data, data() { return { count: 0 } }, methods: { adClicked() { if (link in this.data) { this.data.link this.data.link + /?utm_sourceshell_shockers&utm_mediumreferral&utm_campaignhouse-ads; } extern.clickedHouseLink(this.data); } }, computed: { src() { return dynamicContentPrefix + `data/img/art/${this.data.id}${this.data.imageExt}`; }, alt() { return `${this.data.label} banner image!`; }, link() { return `${this.data.link}/?utm_sourceshell_shockers&utm_mediumreferral&utm_campaignhouse-ads`; }, title() { return `Play ${this.data.label} now!`; } } } } Vue.component(house-ad, createHouseAd());/script>script idlanguage-selector-template typetext/x-template> select idpickLanguage v-modellanguageCode @changeonChangeLanguage classss_select ss_marginright_sm> option v-for(language, code) in langOptions v-bind:valuecode> {{ language }} /option> /select>/script>script>var comp_language_selector { template: #language-selector-template, props: languages, selectedLanguageCode, loc, langOptions, data: function () { return { languageCode: this.selectedLanguageCode, } }, methods: { playSound (sound) { BAWK.play(sound); }, onChangeLanguage: function () { vueApp.changeLanguage(this.languageCode); // Update localStore for selected language. localStore.setItem(languageSelected, this.languageCode); BAWK.play(ui_onchange); ga(send, event, { eventCategory: vueData.googleAnalytics.cat.playerStats, eventAction: vueApp.googleAnalytics.action.languageSwitch, eventLabel: this.languageCode, }); } }, watch: { selectedLanguageCode: function (code) { this.languageCode code; } }};/script>script idgdpr-template typetext/x-template> transition namefade> div v-showisShowing> div idconsent v-showshowingNotification classgdpr_banner f_row> div>{{ loc.gdpr_notification }} a hrefhttp://www.bluewizard.com/privacypolicy target_window>{{ loc.gdpr_link }}/a> /div> div classf_row> button @clickonDisagreeClicked() classss_button btn_red bevel_red ss_marginright ss_marginleft>{{ loc.gdpr_disagree }}/button> button @clickonAgreeClicked() classss_button btn_green bevel_green>{{ loc.gdpr_agree }}/button> /div> /div> div iddoConsent v-showshowingConsent classgdpr_banner f_row> div>{{ loc.gdpr_consent }}/div> div> button @clickclose() classss_button btn_green bevel_green btn_md>{{ loc.ok }}/button> /div> /div> div idnoConsentv-showshowingNoConsent classgdpr_banner f_row> div>{{ loc.gdpr_noConsent }}/div> div> button @clickclose() classss_button btn_green bevel_green btn_md>{{ loc.ok }}/button> /div> /div> /div> /transition>/script>script>var comp_gdpr { template: #gdpr-template, props: loc, data: function () { return { isShowing: false, showingNotification: false, showingConsent: false, showingNoConsent: false } }, methods: { show: function () { this.isShowing true; this.showingNotification true; this.showingConsent false; this.showingNoConsent false; }, close: function () { this.isShowing false; BAWK.play(ui_playconfirm); }, onAgreeClicked: function () { this.showingConsent true; this.showingNotification false; extern.doConsent(); BAWK.play(ui_onchange); }, onDisagreeClicked: function () { this.showingNoConsent true; this.showingNotification false; extern.doNotConsent(); BAWK.play(ui_onchange); } }};/script>script idsettings-template typetext/x-template> div> h1 classroundme_sm text-center>{{ loc.p_settings_title }}/h1> div classdisplay-grid grid-column-3-eq gap-sm> button idkeyboard_button @clickselectTab classss_bigtab bevel_blue roundme_md font-sigmar f_row align-items-center justify-content-center gap-sm :class(showKeyboardTab ? selected : )>img srcimg/ico_keyboard.svg classss_bigtab_icon> img srcimg/ico_mouse.svg classss_bigtab_icon>/button> button idcontroller_button @clickselectTab classss_bigtab bevel_blue roundme_md font-sigmar f_row align-items-center justify-content-center gap-sm :class(showControllerTab ? selected : )>img srcimg/ico_gamepad.svg classss_bigtab_icon>/button> button idmisc_button @clickselectTab classss_bigtab bevel_blue ss_bigtab bevel_blue roundme_md font-sigmar f_row align-items-center justify-content-center gap-sm :class(showMiscTab ? selected : )>img srcimg/ico_monitor.svg classss_bigtab_icon> img srcimg/ico_speaker.svg classss_bigtab_icon> /button> /div> div idpopupInnards classroundme_sm fullwidth f_col ss_margintop_sm ss_marginbottom_xl> div idsettings_keyboard v-showshowKeyboardTab classsettings-section> h3 classmargin-bottom-none h-short>{{ loc.p_settings_keybindings }}/h3> div classf_row ss_margintop> div classf_col> div v-forc in settingsUi.controls.keyboard.game v-ifc.side left v-showshowForCrazyGame(c.locKey)classnowrap> settings-control-binder :locloc :control-idc.id :control-valuec.value @control-capturedonGameControlCaptured>/settings-control-binder> div classlabel>{{ locc.locKey }}/div> /div> div classss_margintop_xl> div v-forc in settingsUi.controls.keyboard.spectate classnowrap> settings-control-binder :locloc :control-idc.id :control-valuec.value @control-capturedonSpectateControlCaptured>/settings-control-binder> div classlabel>{{ locc.locKey }}/div> /div> /div> /div> div classf_col ss_marginleft_xl> div v-forc in settingsUi.controls.keyboard.game v-ifc.side right classnowrap> settings-control-binder :locloc :control-idc.id :control-valuec.value @control-capturedonGameControlCaptured>/settings-control-binder> div classlabel>{{ locc.locKey }}/div> /div> div classss_margintop> div v-fort in settingsUi.adjusters.mouse classnowrap> settings-adjuster :locloc :loc-keyt.locKey :control-idt.id :control-valuet.value :mint.min :maxt.max :stept.step :multipliert.multiplier @setting-adjustedonSettingAdjusted>/settings-adjuster> /div> div v-fort in settingsUi.togglers.mouse classnowrap> settings-toggler v-if(t.id shadowsEnabled || t.id highRes) ? showDetailSettings : true :locloc :loc-keyt.locKey :control-idt.id :control-valuet.value @setting-toggledonSettingToggled>/settings-toggler> /div> /div> /div> /div> /div> div idsettings_controller v-showshowControllerTab classsettings-section> h3 classmargin-bottom-none h-short>{{ loc.p_settings_gamepadbindings }}/h3> div classf_row ss_margintop> div classf_col> div v-forc in settingsUi.controls.gamepad.game classnowrap> settings-gamepad-binder :locloc :control-idc.id :control-valuec.value @control-capturedonGamepadGameControlCaptured :controller-typecontrollerType>/settings-gamepad-binder> div classlabel>{{ locc.locKey }}/div> /div> /div> div classf_col ss_marginleft_xl> div classss_marginbottom_xl> div v-forc in settingsUi.controls.gamepad.spectate classnowrap> settings-gamepad-binder :locloc :control-idc.id :control-valuec.value @control-capturedonGamepadSpectateControlCaptured :controller-typecontrollerType>/settings-gamepad-binder> div classlabel>{{ locc.locKey }}/div> /div> /div> div v-fort in settingsUi.adjusters.gamepad classnowrap> settings-adjuster :locloc :loc-keyt.locKey :control-idt.id :control-valuet.value :mint.min :maxt.max :stept.step :multipliert.multiplier :precisiont.precision @setting-adjustedonSettingAdjusted>/settings-adjuster> /div> div v-fort in settingsUi.togglers.gamepad classnowrap> settings-toggler v-if(t.id shadowsEnabled || t.id highRes) ? showDetailSettings : true :locloc :loc-keyt.locKey :control-idt.id :control-valuet.value @setting-toggledonSettingToggled>/settings-toggler> /div> /div> /div> p classtext_blue5 nospace>{{ getControllerId }}/p> p classtext_blue8 nospace>{{ loc.p_settings_controllerhelp }} a target_blank classtext_blue5 hrefhttps://hardwaretester.com/gamepad>hardwaretester.com/a>/p> /div> div idsettings_misc v-showshowMiscTab classsettings-section> div classdisplay-grid grid-column-2-eq> div classf_col> div v-fort in settingsUi.adjusters.misc classnowrap> settings-adjuster :locloc :loc-keyt.locKey :control-idt.id :control-valuet.value :mint.min :maxt.max :stept.step :multipliert.multiplier @setting-adjustedonSettingAdjusted>/settings-adjuster> /div> div v-fort in settingsUi.adjusters.music classnowrap> settings-adjuster :locloc :loc-keyt.locKey :control-idt.id :control-valuet.value :mint.min :maxt.max :stept.step :multipliert.multiplier @setting-adjustedonSettingAdjusted>/settings-adjuster> /div> /div> div classf_col> h3 classmargin-bottom-none h-short>{{loc.p_servers_title}}/h3> select idregionSelect v-modelcurrentRegion @changeonChangeRegion classss_select ss_marginright_sm ss_select> option v-for(region, id) in regionList v-bind:valueregion.id>{{ locregion.locKey }} {{ region.ping }}ms/option> /select> /div> div classf_col> h3 classmargin-bottom-none h-short>{{ loc.p_settings_language }}/h3> language-selector :languageslanguages :locloc :selectedLanguageCodecurrentLanguageCode classss_select :langOptionslangOption>/language-selector> /div> /div> h3 classmargin-bottom-none h-short>More options/h3> div classdisplay-grid grid-column-2-eq> div classf_col> div v-fort in settingsUi.togglers.misc> settings-toggler v-if(t.id shadowsEnabled || t.id highRes) ? showDetailSettings : true :locloc :loc-keyt.locKey :control-idt.id :control-valuet.value :hidehideSetting(t.id) @setting-toggledonSettingToggled>/settings-toggler> /div> button v-ifshowPrivacyOptions @clickonPrivacyOptionsClicked classss_button btn_blue bevel_blue btn_md ss_margintop_xl>{{ loc.p_settings_privacy }}/button> /div> div classf_col> div v-fort in settingsUi.togglers.misc2> settings-toggler v-if(t.id shadowsEnabled || t.id highRes) ? showDetailSettings : true :locloc :loc-keyt.locKey :control-idt.id :control-valuet.value :hidehideSetting(t.id) @setting-toggledonSettingToggled>/settings-toggler> /div> /div> /div> /div> /div> div classdisplay-grid grid-align-items-center justify-items-strech grid-column-3-eq grid-gap-1 fullwidth gap-sm> button @clickonCloseClick classss_button btn_red bevel_red btn_md no_margin_bottom>{{ loc.cancel }}/button> button @clickonResetClick classss_button btn_yolk bevel_yolk btn_md no_margin_bottom>{{ loc.p_settings_reset }}/button> button @clickonSaveClick classss_button btn_green bevel_green btn_md no_margin_bottom>{{ loc.confirm }}/button> /div> /div>/script>script idsettings-control-binder-template typetext/x-template> input refcontrolInput @changeBAWK.play(ui_onchange) typetext v-modelcurrentValue :placeholderloc.press_key classss_keybind clickme text_blue8 :class(currentValue undefined ? ss_keybind_undefined : ) v-on:mousedownonMouseDown($event) v-on:keydownonKeyDown($event) v-on:keyuponKeyUp($event) v-on:wheelonWheel($event) v-on:focusoutonFocusOut($event)>/script>script>var comp_settings_control_binder { template: #settings-control-binder-template, props: loc, controlId, controlValue, data: function () { return { currentValue: this.controlValue, isCapturing: false } }, methods: { playSound (sound) { BAWK.play(sound); }, reset: function () { this.currentValue (this.controlValue null) ? undefined : this.controlValue; this.isCapturing false; this.$refs.controlInput.blur(); }, capture: function (value) { this.isCapturing false; this.$refs.controlInput.blur(); this.$emit(control-captured, this.controlId, value); }, onMouseDown: function (event) { if (!this.isCapturing) { this.currentValue ; this.isCapturing true; } else { BAWK.play(ui_onchange) this.capture(MOUSE + event.button); } }, onKeyDown: function (event) { this.currentValue ; event.stopPropagation(); }, onKeyUp: function (event) { event.stopPropagation(); var key event.key; if (key Escape || key Tab || key Enter) { return; } if (key ) { key space; event.preventDefault(); } this.capture(key); }, onWheel: function (event) { if (this.isCapturing) { BAWK.play(ui_onchange) if (event.deltaY > 0) { this.capture(WHEEL DOWN); } else if (event.deltaY 0) { this.capture(WHEEL UP); } } }, onFocusOut: function (event) { this.reset(); } }, watch: { // The value prop gets updated by the parent control; watch for changes and update the backing field of the textbox controlValue: function (newValue) { this.currentValue (newValue null) ? undefined : newValue; } }};/script>script idsettings-gamepad-binder-template typetext/x-template> button refgamepadInput classss_keybind clickme :class(currentValue undefined ? ss_keybind_undefined : ) v-on:mousedownonMouseDown($event) v-on:keydownonKeyDown($event) v-on:keyuponKeyUp($event) v-on:focusoutonFocusOut($event) :keycontrollerType> span v-htmlcurrentValue>/span>/button>/script>script>var comp_settings_gamepad_binder { template: #settings-gamepad-binder-template, props: loc, controlId, controlValue, controllerType, data: function () { return { currentValue: (this.controlValue null) ? undefined : vueData.controllerButtonIconsthis.controllerTypethis.controlValue, isCapturing: false } }, beforeUpdate: function () { if (!this.isCapturing) { this.setIcon(this.controlValue); } }, methods: { playSound (sound) { BAWK.play(sound); }, reset: function () { this.setIcon(this.controlValue); this.isCapturing false; removeEventListener(gamepadbuttondown, this.onButtonDown); removeEventListener(gamepadbuttonup, this.onButtonUp); }, capture: function (value) { this.isCapturing false; this.$refs.gamepadInput.blur(); this.$emit(control-captured, this.controlId, value); this.reset(); }, onMouseDown: function (event) { if (!this.isCapturing) { this.currentValue this.loc.press_button; this.isCapturing true; addEventListener(gamepadbuttondown, this.onButtonDown); addEventListener(gamepadbuttonup, this.onButtonUp); } }, onKeyDown: function (event) { event.stopPropagation(); }, onKeyUp: function (event) { event.stopPropagation(); }, onButtonDown: function (event) { if (event.detail 8 || event.detail 9) return; BAWK.play(ui_onchange) this.capture(event.detail); }, onFocusOut: function (event) { this.reset(); }, setIcon: function (value) { this.currentValue (value null) ? undefined : vueData.controllerButtonIconsthis.controllerTypevalue; } }, watch: { // The value prop gets updated by the parent control; watch for changes and update the backing field of the textbox controlValue: function (newValue) { this.setIcon(newValue); } }};/script>script idsettings-adjuster-template typetext/x-template> div> h3 v-if!smallHeader classmargin-bottom-none h-short v-htmlloclocKey>/h3> label v-ifsmallHeader classlabel v-htmlloclocKey>/label> div classf_row> input classss_slider :disableddisabled typerange :minmin :maxmax :stepstep v-modelcurrentValue @changeonChange> label classss_slider label text_blue4>{{ getCurrentValue() }}{{ labelSuffix }}/label> /div> /div>/script>script>var comp_settings_adjuster { template: #settings-adjuster-template, props: loc, smallHeader, locKey, controlId, controlValue, disabled, min, max, step, multiplier, precision, labelSuffix , data: function () { return { currentValue: this.controlValue } }, methods: { onChange: function (event) { this.$emit(setting-adjusted, this.controlId, this.currentValue); BAWK.play(ui_onchange); }, getCurrentValue: function () { if (this.precision) { return Number.parseFloat(this.currentValue).toFixed(this.precision); } else { return Math.floor(this.currentValue * (this.multiplier || 1)); } } }, watch: { // controlValue prop could change when player Xs out or clicks Cancel controlValue: function (newValue) { if (this.currentValue ! newValue) { this.currentValue newValue; } } }};/script>script idsettings-toggler-template typetext/x-template> label v-if!hide classss_checkbox label> {{ loclocKey }} input typecheckbox v-modelcurrentValue @changeonChange($event)> span classcheckmark>/span> /label>/script>script>var comp_settings_toggler { template: #settings-toggler-template, props: loc, locKey, controlId, controlValue, hide, data: function () { return { currentValue: this.controlValue } }, methods: { onChange: function (event) { this.$emit(setting-toggled, this.controlId, this.currentValue); BAWK.play(ui_onchange); } }, watch: { // controlValue prop could change when player Xs out or clicks Cancel controlValue: function (newValue) { if (this.currentValue ! newValue) { this.currentValue newValue; } } }};/script>script>var comp_settings { template: #settings-template, components: { settings-control-binder: comp_settings_control_binder, settings-gamepad-binder: comp_settings_gamepad_binder, language-selector: comp_language_selector, settings-adjuster: comp_settings_adjuster, settings-toggler: comp_settings_toggler }, props: loc, settingsUi, languages, currentLanguageCode, showPrivacyOptions, controllerId, isFromEU, controllerType, langOption, isVip, regionList, currentRegionId, data: function () { return { showKeyboardTab: true, showControllerTab: false, showMiscTab: false, originalSettings: {}, showDetailSettings: false, originalLanguage: , originalMusicVolume: , musicStatChg: , currentRegion: , } }, methods: { onChangeRegion() { if (vueData.currentRegionId ! this.currentRegion) { extern.selectRegion(this.currentRegion); BAWK.play(ui_onchange); } }, selectTab: function (e) { return this.switchTab(e.target.id) }, switchTab(tab) { this.showKeyboardTab false; this.showControllerTab false; this.showMiscTab false; switch (tab) { case keyboard_button: this.showKeyboardTab true; break; case controller_button: this.showControllerTab true; break; case misc_button: this.showMiscTab true; break; } BAWK.play(ui_toggletab); }, captureOriginalSettings: function () { this.originalSettings deepClone(vueData.settingsUi); this.originalLanguage this.currentLanguageCode; // this.originalMusicVolume this.originalSettings.adjusters.music0.value; }, applyOriginalSettings: function () { vueData.settingsUi this.originalSettings; this.showDetailSettings !vueData.settingsUi.togglers.misc.find( a > { return a.id autoDetail; }).value; console.log(applying original settings: + JSON.stringify(vueData.settingsUi)); }, onGameControlCaptured: function (id, value) { this.onControlCaptured(this.settingsUi.controls.keyboard.game, id, value) }, onSpectateControlCaptured: function (id, value) { this.onControlCaptured(this.settingsUi.controls.keyboard.spectate, id, value) }, onGamepadGameControlCaptured: function (id, value) { this.onControlCaptured(this.settingsUi.controls.gamepad.game, id, value) }, onGamepadSpectateControlCaptured: function (id, value) { this.onControlCaptured(this.settingsUi.controls.gamepad.spectate, id, value) }, onControlCaptured: function (controls, id, value) { value value.toLocaleUpperCase(); controls .forEach( (c) > { if (c.id id) { c.value value; } else { if (c.value value) { c.value null; } } }); }, onSettingToggled: function (id, value) { console.log(value: + value); Object.values(this.settingsUi.togglers).forEach(v > { var toggler v.find(t > { return t.id id; }); if (toggler) toggler.value value; }) if (id autoDetail) { this.showDetailSettings !value; } if (id safeNames) { extern.setSafeNames(value); } // if (id musicStatus) { // extern.setMusicStatus(value); // this.musicStatChg true; // if (extern.inGame) { // vueApp.toggleMusic(); // } // } }, onSettingAdjusted: function (id, value) { Object.values(this.settingsUi.adjusters).forEach(v > { var adjuster v.find( (a) > { return a.id id; }); if (adjuster) adjuster.value value; }) if (id volume) { extern.setVolume(value); } if (id mouseSpeed) { extern.setMouseSpeed(value); } if (id sensitivity) { extern.setControllerSpeed(value); } if (id deadzone) { extern.setDeadzone(value); } if (id musicVolume) { extern.setMusicVolume(value); } }, onVolumeChange: function () { extern.setVolume(this.settingsUi.volume); }, onPrivacyOptionsClicked: function () { this.$emit(privacy-options-opened); BAWK.play(ui_popupopen); }, onCancelClick: function () { this.applyOriginalSettings(); //extern.setMusicVolume(this.originalMusicVolume); this.cancelLanguageSelect(); if (this.musicStatChg) { if (extern.inGame) { vueApp.toggleMusic(); } }; this.$parent.close(); }, onCloseClick: function () { this.applyOriginalSettings(); //extern.setMusicVolume(this.originalMusicVolume); this.cancelLanguageSelect(); if (this.musicStatChg) { if (extern.inGame) { vueApp.toggleMusic(); } }; vueApp.sharedIngamePopupClosed(); this.$parent.toggle(); BAWK.play(ui_popupclose); }, quickSave() { extern.applyUiSettings(this.settingsUi, this.originalSettings); this.resetOriginalLanguage(); }, onSaveClick: function () { // if (vueApp.music.serverTracks.title) { // this.gaMusicVol(); // } // this.gaMusicVol(); extern.applyUiSettings(this.settingsUi, this.originalSettings); this.resetOriginalLanguage(); vueApp.sharedIngamePopupClosed(); this.$parent.toggle(); BAWK.play(ui_playconfirm); ga(send, event, game, settings, volume, settings.volume); ga(send, event, game, settings, mouse speed, settings.mouseSpeed); ga(send, event, game, settings, mouse invert, settings.mouseInvert); ga(send, event, game, settings, fast polling mouse, settings.fastPollMouse); ga(send, event, game, settings, deadzone, settings.deadzone); ga(send, event, game, settings, controller speed, settings.controllerSpeed); ga(send, event, game, settings, controller invert, settings.controllerInvert); }, gaMusicVol() { let newVol Number(this.settingsUi.adjusters.music0.value); if (newVol Number(this.originalMusicVolume)) return; if ((Math.round(newVol*100)) 1) { ga(send, event, music, mute, vueApp.music.serverTracks.title); } }, onResetClick: function () { extern.resetSettings(); BAWK.play(ui_reset); }, cancelLanguageSelect: function() { this.originalLanguage vueApp.$data.currentLanguageCode ? vueApp.changeLanguage(vueApp.$data.currentLanguageCode) : vueApp.changeLanguage(this.originalLanguage); // Revert localStore for language localStore.setItem(languageSelected, this.originalLanguage); this.resetOriginalLanguage(); }, resetOriginalLanguage: function() { this.originalLanguage ; }, setSettings: function (settings) { var getSettingById (list, id) > { return list.filter( o > { return o.id id; })0; }; // Keyboard getSettingById(this.settingsUi.controls.keyboard.game, up).value settings.controls.keyboard.game.up; getSettingById(this.settingsUi.controls.keyboard.game, down).value settings.controls.keyboard.game.down; getSettingById(this.settingsUi.controls.keyboard.game, left).value settings.controls.keyboard.game.left; getSettingById(this.settingsUi.controls.keyboard.game, right).value settings.controls.keyboard.game.right; getSettingById(this.settingsUi.controls.keyboard.game, jump).value settings.controls.keyboard.game.jump; getSettingById(this.settingsUi.controls.keyboard.game, melee).value settings.controls.keyboard.game.melee; getSettingById(this.settingsUi.controls.keyboard.game, inspect).value settings.controls.keyboard.game.inspect; getSettingById(this.settingsUi.controls.keyboard.game, fire).value settings.controls.keyboard.game.fire; getSettingById(this.settingsUi.controls.keyboard.game, scope).value settings.controls.keyboard.game.scope; getSettingById(this.settingsUi.controls.keyboard.game, reload).value settings.controls.keyboard.game.reload; getSettingById(this.settingsUi.controls.keyboard.game, swap_weapon).value settings.controls.keyboard.game.swap_weapon; getSettingById(this.settingsUi.controls.keyboard.game, grenade).value settings.controls.keyboard.game.grenade; getSettingById(this.settingsUi.controls.keyboard.spectate, ascend).value settings.controls.keyboard.spectate.ascend; getSettingById(this.settingsUi.controls.keyboard.spectate, descend).value settings.controls.keyboard.spectate.descend; getSettingById(this.settingsUi.controls.keyboard.spectate, toggle_freecam).value settings.controls.keyboard.spectate.toggle_freecam; getSettingById(this.settingsUi.controls.keyboard.spectate, slow).value settings.controls.keyboard.spectate.slow; // Gamepad getSettingById(this.settingsUi.controls.gamepad.game, jump).value settings.controls.gamepad.game.jump; getSettingById(this.settingsUi.controls.gamepad.game, fire).value settings.controls.gamepad.game.fire; getSettingById(this.settingsUi.controls.gamepad.game, scope).value settings.controls.gamepad.game.scope; getSettingById(this.settingsUi.controls.gamepad.game, reload).value settings.controls.gamepad.game.reload; getSettingById(this.settingsUi.controls.gamepad.game, swap_weapon).value settings.controls.gamepad.game.swap_weapon; getSettingById(this.settingsUi.controls.gamepad.game, grenade).value settings.controls.gamepad.game.grenade; getSettingById(this.settingsUi.controls.gamepad.game, melee).value settings.controls.gamepad.game.melee; getSettingById(this.settingsUi.controls.gamepad.game, inspect).value settings.controls.gamepad.game.inspect; getSettingById(this.settingsUi.controls.gamepad.spectate, ascend).value settings.controls.gamepad.spectate.ascend; getSettingById(this.settingsUi.controls.gamepad.spectate, descend).value settings.controls.gamepad.spectate.descend; // Misc getSettingById(this.settingsUi.adjusters.misc, volume).value settings.volume; // getSettingById(this.settingsUi.adjusters.music, musicVolume).value settings.musicVolume; getSettingById(this.settingsUi.adjusters.mouse, mouseSpeed).value settings.mouseSpeed; getSettingById(this.settingsUi.adjusters.gamepad, sensitivity).value settings.controllerSpeed; getSettingById(this.settingsUi.adjusters.gamepad, deadzone).value settings.deadzone; getSettingById(this.settingsUi.togglers.mouse, mouseInvert).value (settings.mouseInvert ! 1); getSettingById(this.settingsUi.togglers.mouse, fastPollMouse).value settings.fastPollMouse; getSettingById(this.settingsUi.togglers.gamepad, controllerInvert).value (settings.controllerInvert ! 1); getSettingById(this.settingsUi.togglers.misc, holdToAim).value settings.holdToAim; getSettingById(this.settingsUi.togglers.misc, enableChat).value settings.enableChat; getSettingById(this.settingsUi.togglers.misc, safeNames).value settings.safeNames; getSettingById(this.settingsUi.togglers.misc, autoDetail).value settings.autoDetail; getSettingById(this.settingsUi.togglers.misc, shadowsEnabled).value settings.shadowsEnabled; getSettingById(this.settingsUi.togglers.misc, highRes).value settings.highRes; getSettingById(this.settingsUi.togglers.misc2, hideBadge).value settings.hideBadge; getSettingById(this.settingsUi.togglers.misc2, closeWindowAlert).value settings.closeWindowAlert; getSettingById(this.settingsUi.togglers.misc2, shakeEnabled).value settings.shakeEnabled; getSettingById(this.settingsUi.togglers.misc2, centerDot).value settings.centerDot; getSettingById(this.settingsUi.togglers.misc2, hitMarkers).value settings.hitMarkers; // getSettingById(this.settingsUi.togglers.misc, musicStatus).value settings.musicStatus; console.log(auto detail: + settings.autoDetail); this.showDetailSettings !settings.autoDetail; }, hideSetting(id) { if (id hideBadge && !this.isVip) { return true; } return false; }, onHelpClickDelete() { vueApp.hideSettingsPopup(); vueApp.showHelpPopupFeedbackWithDelete(); ga(send, event, vueApp.googleAnalytics.cat.playerStats, vueApp.googleAnalytics.action.faqPopupClick); BAWK.play(ui_popupopen); }, showForCrazyGame(locRef) { return locRef ! keybindings_despawn || crazyGamesActive; } }, computed: { getControllerId() { if (this.controllerId No controller detected) { return vueApp.locp_settings_nocontroller } else { return this.controllerId } } }, watch: { currentRegionId(val) { if (this.currentRegion ! val) { this.currentRegion val; } } }};/script>script idhelp-template typetext/x-template> div> div classf_row align-items-center justify-content-center> button idfaq_button @clicktoggleTabs classss_bigtab bevel_blue ss_marginright roundme_md font-sigmar :class(showTab1 ? selected : )>{{ loc.faq }}/button> button idfb_button @clicktoggleTabs classss_bigtab bevel_blue roundme_md font-sigmar :class(!showTab1 ? selected : )>{{ loc.feedback }}/button> /div> div v-showshowTab1> div idfeedback_panel> h1>{{ loc.faq_title }}/h1> help-questions :contentlocalizeThis>/help-questions> hr> div idbtn_horizontal classf_center> button @clickonBackClick classss_button btn_md btn_red bevel_red ss_marginright>{{ loc.cancel }}/button> /div> /div> /div> div v-show!showTab1> div idfeedback_panel> h1 :class{text-center : isAccountDeleteReq}>{{ feedbackTitle }}/h1> p v-if!isAccountDeleteReq>{{ loc.fb_feedback_intro }}/p> h4 v-ifisNoAccountForDelete classtext-center>{{loc.feedback_sign_in_msg}}/h4> div idbtn_horizontal classf_center> select v-modelselectedType classss_field ss_marginright @clickBAWK.play(ui_click) @changeBAWK.play(ui_onchange)> option v-fortype in feedbackType :valuetype.id>{{ loctype.locKey }}/option> /select> input idfeedbackEmail v-modelemail :placeholderloc.fb_email_ph classss_field v-on:keyupvalidateEmail> /div> div> textarea v-if!isAccountDeleteReq idfeedbackText classss_field v-modelfeedback :placeholderloc.fb_feedback_ph v-on:keyupvalidateMessage>/textarea> /div> div classf_center f_col> span v-showemailInvalid classss_marginright error_text>{{ loc.fb_bad_email }}/span> span v-showmessageInvalid classss_marginright error_text>{{ loc.fb_no_comment }}/span> /div> div idbtn_horizontal classf_center> button @clickonBackClick classss_button btn_md btn_red bevel_red ss_marginright>{{ loc.cancel }}/button> button @clickonSendClick classss_button btn_md btn_green bevel_green>{{ sendBtnText }}/button> /div> /div> /div> /div>/script>script idhelp-question-template typetext/x-template> div> div v-forqa in content> a :nameqa0>/a> h3>{{ qa1 }}/h3> span v-htmlqa2>/span> /div> /div>/script>script>var comp_help_question { template: #help-question-template, props: content,};/script>script>var comp_help { template: #help-template, components: { help-questions: comp_help_question, }, props: loc, accountType, feedbackType, openWithType, mounted() { this.helpLocSetup(); }, data: function () { return { showTab1: true, selectedType: 0, email: , feedback: , doValidation: false, emailInvalid: false, messageInvalid: false, qaNum: 1,2,3,4,5,6,7,8,9,10,11, newLoc: , localizeThis: , } }, feedbackValidateTimeout: 0, methods: { playSound (sound) { BAWK.play(sound); }, validateEmail: function () { if (!this.doValidation) { return; } // Insane e-mail-validating regex var re /(?:a-z0-9!#$%&*+/?^_`{|}~-+(?:\.a-z0-9!#$%&*+/?^_`{|}~-+)*|(?:\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f|\\\x01-\x09\x0b\x0c\x0e-\x7f)*)@(?:(?:a-z0-9(?:a-z0-9-*a-z0-9)?\.)+a-z0-9(?:a-z0-9-*a-z0-9)?|\(?:(?:250-5|20-40-9|01?0-90-9?)\.){3}(?:250-5|20-40-9|01?0-90-9?|a-z0-9-*a-z0-9:(?:\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f|\\\x01-\x09\x0b\x0c\x0e-\x7f)+)\)/; this.emailInvalid (this.email || !re.test(this.email)); return !this.emailInvalid; }, validateMessage: function () { if (!this.doValidation) { return; } this.messageInvalid this.feedback ; return !this.messageInvalid; }, toggleTabs: function () { this.showTab1 !this.showTab1; this.selectedType 0; this.$emit(resetFeedbackType); BAWK.play(ui_toggletab); if ( !this.showTab1) { ga(send, event, feedback opened); } }, onBackClick: function () { vueApp.$refs.helpPopup.toggle(); BAWK.play(ui_popupclose); }, sendFeedbackApi(selected) { if (!selected) { selected this.selectedType; } extern.api_feedback(selected, this.email, this.feedback); setTimeout(() > { if (this.selectedType ! this.feedbackType.delete.id) { this.$parent.toggle(); } this.selectedType 0; this.feedback null; this.email null; }, 900); }, onSendClick: function () { if (this.isNoAccountForDelete) { vueApp.hideHelpPopup(); vueApp.showFirebaseSignIn(); return; } this.doValidation true; if (this.selectedType this.feedbackType.delete.id) { this.comment null; this.$parent.toggle(); vueApp.showDeleteAccoutApprovalPopup(); BAWK.play(ui_popupopen); return; } else { if (!this.validateEmail() || !this.validateMessage() ) { return; } } BAWK.play(ui_playconfirm); // Send that shit out this.sendFeedbackApi(); }, onAccountDelectionConfirmed() { this.sendFeedbackApi(this.feedbackType.delete.id); }, helpLocSetup(locContent) { let content this.loc; // if (locContent) { // content locContent // } const locArray Object.entries(content); this.newLoc locArray.filter( (item, i) > { if (item0.includes(faqItems_q)) { return item; } }); const tranlateThat ; for (let n 0; n this.qaNum.length; n++) { tranlateThat.push(); for (let i 0; i this.newLoc.length; i++) { if (this.newLoci0.includes(faqItems_q + this.qaNumn + _)) { tranlateThatn.push(this.newLoci1); } } } // Cause once again... vue setTimeout(() > {this.localizeThis tranlateThat}, 500); }, openFeedbackTabWith(type) { this.showTab1 false; if (type) { this.selectedType type; } } }, computed: { isAccountDeleteReq() { return this.selectedType this.feedbackType.delete.id; }, isNoAccountForDelete() { return this.isAccountDeleteReq && this.accountType no-account; }, sendBtnText() { if (this.isNoAccountForDelete) { return this.loc.sign_in; } else { return this.loc.fb_send; } }, feedbackTitle() { if (!this.isAccountDeleteReq) { return this.loc.fb_feedback_title; } else { return this.loc.fb_delete_account; } } }, watch: { loc(val) { this.helpLocSetup(val); }, }};/script>script idvip-help-template typetext/x-template> div> div idfeedback_panel> h1>{{ loc.vipHelptitle }}/h1> strong>small classtext_yellow>i classfas fa-exclamation-triangle>/i> {{loc.vipHelpDesc2}}/small>/strong> p>{{loc.vipHelpDesc}}/p> div> a :nameloc.vipFaqItems_q1_anchor>/a> h3>{{ loc.vipFaqItems_q1_q }}/h3> p>{{ loc.vipFaqItems_q1_a_1 }}/p> ul> li>{{ loc.vipFaqItems_q1_li_1 }}/li> li>{{ loc.vipFaqItems_q1_li_2 }}/li> li>{{ loc.vipFaqItems_q1_li_3 }}/li> li>{{ loc.vipFaqItems_q1_li_4 }}/li> li>{{ loc.vipFaqItems_q1_li_5 }}/li> li>{{ loc.vipFaqItems_q1_li_6 }}/li> /ul> /div> div> a :nameloc.vipFaqItems_q2_anchor>/a> h3>{{ loc.vipFaqItems_q2_q }}/h3> p>{{ loc.vipFaqItems_q2_a_1 }}/p> /div> div> a :nameloc.vipFaqItems_q3_anchor>/a> h3>{{ loc.vipFaqItems_q3_q }}/h3> p>{{ loc.vipFaqItems_q3_a_1 }}/p> /div> div> a :nameloc.vipFaqItems_q4_anchor>/a> h3>{{ loc.vipFaqItems_q4_q }}/h3> p>{{ loc.vipFaqItems_q4_a_mobile_3 }}/p> p>{{ loc.vipFaqItems_q4_a_1 }}/p> p>{{ loc.vipFaqItems_q4_a_2 }}/p> /div> div> a :nameloc.vipFaqItems_q5_anchor>/a> h3>{{ loc.vipFaqItems_q5_q }}/h3> p>{{ loc.vipFaqItems_q5_a_1 }}/p> p>{{ loc.vipFaqItems_q5_a_2 }}/p> p>{{ loc.vipFaqItems_q5_a_3 }}/p> /div> div> a :nameloc.vipFaqItems_q6_anchor>/a> h3>{{ loc.vipFaqItems_q6_q }}/h3> p>{{ loc.vipFaqItems_q6_a_1 }}/p> p>{{ loc.vipFaqItems_q6_a_2 }}/p> p>{{ loc.vipFaqItems_q6_a_3 }}/p> /div> div> a :nameloc.vipFaqItems_q7_anchor>/a> h3>{{ loc.vipFaqItems_q7_q }}/h3> p>{{ loc.vipFaqItems_q7_a_1 }}/p> /div>!-- div v-forqa in loc.vipFaqItems> a :nameqa.anchor>/a> h3>{{ qa.q }}/h3> p v-forp in qa.a> {{p}} /p> ul v-ifqa.li> li v-forli in qa.li>{{li}}/li> /ul> /div> --> hr> div idbtn_horizontal classf_center> button @clickopenVipStore classss_button btn_md btn_green bevel_green ss_marginright>{{ subButtonTxt }}/button> button @clickonBackClick classss_button btn_md btn_red bevel_red ss_marginright>{{ loc.cancel }}/button> /div> /div> /div>/script>script>var vip_help { template: #vip-help-template, props: loc, isVip, data: function () { return { } }, methods: { onBackClick() { BAWK.play(ui_popupclose); this.$parent.hide(); }, openVipStore() { this.$parent.hide(); vueApp.showSubStorePopup(); } }, computed: { subButtonTxt() { return this.isVip ? this.loc.sManageBtn : this.loc.account_vip; } }};/script>script idhouse-ad-big-template typetext/x-template> div v-show(useAd ! null)> button @clickonCloseClicked classpopup_close splash_ad_close ad_close>i classfas fa-times text_white fa-2x>/i>/button> img :srcadImageUrl @clickonClicked classsplash_ad_image centered roundme_md> /div>/script>script>var comp_house_ad_big { template: #house-ad-big-template, data: function() { return { removeOverlayClick: , } }, props: useAd, bigAdTimeout: null, methods: { onCloseClicked: function () { console.log(big ad closed); this.close(); }, onClicked: function () { this.close(); BAWK.play(ui_click); extern.clickedHouseAdBig(this.useAd); }, close: function () { if (this.useAd null) { return; } BAWK.play(ui_popupclose); this.$emit(big-house-ad-closed); }, outsideClickClose: function() { const showingId document.getElementById(house-ad-big-template, true); this.removeOverlayClick this.handleOutsideClick; document.addEventListener(click, this.removeOverlayClick); }, handleOutsideClick: function(e) { // Stop bubbling e.stopPropagation(); // If the target does NOT include the class splash_ad_image use the onCloseClicked method and remove the eventListener if ( ! e.target.id.includes(splash_ad_image) ) { this.onCloseClicked(); document.removeEventListener(click, this.removeOverlayClick); } }, }, computed: { adImageUrl: function () { if (!hasValue(this.useAd)) { return; } return dynamicContentPrefix + data/img/art/{0}{1}.format(this.useAd.id, this.useAd.imageExt); } }, watch: { useAd: function (bigAd) { if (hasValue(bigAd)) { setTimeout(() > { vueApp.hideTitleScreenAd(); }, 100); this.$options.bigAdTimeout setTimeout(function () { vueApp.ui.houseAds.big null; }, 15000); // Close with outside click this.outsideClickClose(); } else { vueApp.showTitleScreenAd(); } } }};/script>script idhouse-ad-small-template typetext/x-template> img v-show(useAd ! null) :srcadImageUrl @clickonClicked classnews_banner roundme_md>/script>script>var comp_house_ad_small { template: #house-ad-small-template, props: useAd, methods: { onClicked: function () { BAWK.play(ui_click); extern.clickedHouseAdSmall(this.useAd); } }, computed: { adImageUrl: function () { if (!hasValue(this.useAd)) { return; } ga(send, event, { eventCategory: House banner ad, eventAction: show, eventLabel: this.useAd.label }); return dynamicContentPrefix + data/img/art/{0}{1}.format(this.useAd.id, this.useAd.imageExt); } }};/script>script iditem-template typetext/x-template> div v-ifactive classbox_relative center_h> div :classtooltip reftheTooltip> span v-ifshowTooltip classpaddings_sm display-grid> div> h4 classnospace text_yolk>{{ itemName }}/h4> /div> !-- p classnospace text_blue5>{{ tooltipTxt.desc }}/p> --> /span> div refeggItemInvetory classgrid-item roundme_lg clickme common-box-shadow box_relative :classitemClass, itemType, itemTagsString @clickonClick> div v-show!renderDone classcentered>i classfas fa-egg fa-spin fa-2x>/i>/div> span v-ifisVipItem> icon nameico-vip classequip-vip-icon>/icon> /span> div v-ifhasBanner && !notify classequip-item-banner shadow> span classvisibility-hidden>{{bannerTxt}}/span> /div> div v-ifhasBanner && !notify classequip-item-banner> {{bannerTxt}} /div> div v-ifshowPrice && renderDone classequip_smallprice display-grid box_absolute grid-column-auto-1 gap-sm> div classequip_cost box_absolute f_row align-items-center :classequipCostTagCls> i v-ifisPremium && !isItemOwned :classpriceIcon>/i>span v-if!isPremium && !isItemOwned && !hidePrice classegg-price-egg>svg xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24 xml:spacepreserve>path classegg-fill dM12 21.6c-4.4 0-8-3.5-8-7.8 0-4 3.4-11.4 8.1-11.4 4.8 0 7.8 7.5 7.8 11.4.1 4.3-3.5 7.8-7.9 7.8z stylefill-rule:evenodd;clip-rule:evenodd;/>path classegg-stroke dM12.1 3.9c3.6 0 6.3 6.4 6.3 9.9s-2.9 6.3-6.5 6.3-6.5-2.8-6.5-6.3c.1-3.5 3.2-9.9 6.7-9.9m0-3C6.2.9 2.5 9.4 2.5 13.8c0 5.2 4.3 9.3 9.5 9.3s9.5-4.2 9.5-9.3C21.5 9.4 18.2.9 12.1.9z/>/svg>/span>{{ itemPrice }} /div> /div> canvas refitemCanvas classequip_icon centered :classcanvasCls width250 height250>/canvas> div v-ifnotify && hasBanner classnotification-banner box_relative> img :srcbannerIconImg alt> /div> p v-ifshowItemOnly classitem-name text-center>{{ item.name }}/p> /div> button classss_button btn_green bevel_green btn_sm fullwidth ss_margintop box_absolute v-showhasBuyBtn && isSelected @clickonClickBuy>Get it now!/button> /div> /div>/script>script>var comp_item { template: #item-template, props: loc, item, showItemOnly, isSelected, equippedSlot, hasBuyBtn, isShop, hidePrice, showTooltip, notify, data: function () { return { itemOnly: hasValue(this.showItemOnly) ? this.showItemOnly : false, active: true, itemLimited: false, itemUnlock: purchase, itemTags: , itemTagsString: , renderDone: false, premTxt: { title: , desc: } } }, mounted() { this.prepareItem(); this.itemHightlightedOrder(); }, methods: { prepareItem: function () { this.itemUnlock this.item.unlock; if (this.itemUnlock premium && !this.item.activeProduct && this.isShop) { this.active false; } // We dont need this mess if (this.itemUnlock physical && this.isShop) { this.active false; } this.setUpTags(); this.isEquippedSlot(); // this.tooltipOnMouseOver(); }, setUpTags() { if (this.item.item_data ! undefined && this.item.item_data.tags ! undefined && this.item.item_data.tags.length) { this.item.item_data.tags.forEach(el > this.itemTags.push(item-tag- + el.toLowerCase().replace(/\s+/g, -))); this.itemTagsString this.itemTags.toString().replace(/,/g, ); } }, isEquippedSlot() { if (this.equippedSlot) { this.active true; } vueApp.equip.lazyRenderTimeouts.push(setTimeout(() > this.renderItem(), 0)); }, tooltipOnMouseOver() { this.$refs.theTooltip.addEventListener(mouseover, (event) > { const tooltipBounds this.$refs.theTooltip.getBoundingClientRect(); const itemGrid document.getElementById(item-smack-down); const searchBox document.getElementById(item-search-wrap); const searchBoxBounds searchBox.getBoundingClientRect(); const itemGridBounds itemGrid.getBoundingClientRect(); const elTouchSearch Math.floor(tooltipBounds.y) Math.floor(searchBoxBounds.y); const topTouch Math.floor(tooltipBounds.y) Math.floor(itemGridBounds.y); const leftTouch Math.floor(tooltipBounds.left - 10) Math.floor(itemGridBounds.left); const rightTouch Math.floor(tooltipBounds.right + 10) > Math.floor(itemGridBounds.right); if (topTouch && !rightTouch && !leftTouch) { this.$refs.theTooltip.classList.add(tooltip-bottom); } if (leftTouch) { this.$refs.theTooltip.classList.add(tooltip-left); } if (rightTouch) { this.$refs.theTooltip.classList.add(tooltip-right); } }); }, highlightSelected: function () { return this.isSelected ? highlight : ; }, itemHightlightedOrder: function() { if (this.isPhysicalMerch && vueData.currentEquipMode vueData.equipMode.shop) return; return this.$refs.eggItemInvetory.classList.contains(highlight) ? this.$refs.eggItemInvetory.style.order-1 : null; }, renderItem() { if (this.$refs.itemCanvas undefined) return; extern.renderItemToCanvas(this.item, this.$refs.itemCanvas, () > { this.renderDone true; }); }, onClick: function () { this.$emit(item-selected, this.item); }, onClickBuy() { extern.buyProductForMoney(this.item.sku0); }, countWords (str) { str str.trim(); const words str.match(/\S+/g); words.forEach((w, i) > { if (w.length > 10) { const wLength Math.floor(w.length / 2); const newWord w.substring(0, wLength) + - + w.substring(wLength, w.length); wordsi newWord; } }); return words.join( ); }, }, computed: { isItemSellable: function () { return (!this.itemOnly && vueData.currentEquipMode vueData.equipMode.shop) || (!this.itemOnly && vueData.currentEquipMode vueData.equipMode.skins) || (!this.itemOnly && vueData.currentEquipMode vueData.equipMode.featured); }, showPrice () { return this.isItemSellable && this.item.price > 0; }, isPhysicalMerch () { return this.isItemSellable && this.itemUnlock physical; }, isPremium() { return this.itemUnlock premium && !this.itemTags.includes(item-tag-vipitem); }, isVipItem() { return this.itemUnlock vip; }, isLimited() { return this.itemTags.includes(item-tag-limited); }, isDrop() { return this.itemTags.includes(drop); }, isItemOwned() { return extern.isItemOwned(this.item); }, hasBanner() { return this.isPremium || this.isVipItem || this.isLimited || this.isPremiumEggPurchase; }, isPremiumEggPurchase() { return this.itemUnlock purchase && this.itemTags.includes(item-tag-premium) && this.item.price > 200000; }, itemType() { return getKeyByValue(ItemType, this.item.item_type_id).toLowerCase(); }, bannerTxt() { if (!this.hasBanner) { return; } else { if (this.isPremium || this.isPremiumEggPurchase) { return PREMIUM; } if (this.isVipItem) { return VIP; } if (this.isLimited) { return this.loc.eq_limited; } } }, canvasCls() { if (!this.isItemSellable) { return full-width-height } }, itemClass() { return { is-premium: this.isPremium || this.isPremiumEggPurchase, is-vip: this.isVipItem, highlight: this.isSelected, } }, itemPrice() { if (this.hidePrice) { if (this.isItemOwned ) { return this.loc.eq_owned; } } else { return !this.isItemOwned ? this.item.price : this.loc.eq_owned + !; } }, priceIcon() { if (this.isPremium) { return vueApp.icon.dollar; } }, equipCostTagCls() { if (this.isPremium && !this.isItemOwned) { return premium-item-cost; } else if (this.isItemOwned) { return equip-cost-is-owned; } }, tooltipTxt() { if (this.showTooltip) { return this.premTxt; } }, tooltip() { if (this.showTooltip) { return tool-tip; } }, bannerIconImg() { if (this.isPremium) { return img/store/PremiumTag.png; } else if (this.isVipItem) { return img/store/VIPTag.png; } }, itemName() { return this.countWords(this.item.name); } }, watch: { item: function (val) { this.prepareItem(); } }};/script>script idchickn-winner-template typetext/x-template> div idpopupInnards classbox_dark roundme_sm fullwidth f_col> header classdisplay-grid grid-column-1-eq align-items-center roundme_lg> h1 classchickn-winner-title nospace text-center>{{ loc.p_chicken_header_txt}}/h1> /header> section idchickn-winner-wrapper classegg-chick-wrapper f_row roundme_lg box_relative justify-content-center> div v-showeggGameReady classegg-chick-box box_relative v-foregg in eggs :keyegg.id> div v-ifshowAmountRewarded && busted && egg.value > 5 classtext-center chw-reward-amount box_absolute> h2 classbox_relative shadow_grey>{{ showAmountRewarded }} img classchw-winner-egg srcimg/ico_goldenEgg.svg />/h2> /div> img classincentivized-egg-chick box_relative :classeggClass(egg.value) @clickcheckIfReady :srceggSrc(egg.value) :idegg.id> div v-ifrewardHasItem && egg.value > 5 classcentered> item :locloc :itemrewardItem :has-buy-btnfalse :is-shopfalse>/item> h4 classtext_white text-center nospace text-shadow-black-40>{{ rewardItem.name }}/h4> /div> /div> img v-show!eggGameReady classincentivized-egg-chick centered :srcchickSrc> button v-showshowAdWatch classss_button btn_large btn_green bevel_green btn_shiny ss_marginbottom_lg @clickwatchVideo>{{ loc.chw_btn_watch_ad }}/button> h2 classcentered nospace fullwidth text-center>{{ txtState.desc }}/h2> div v-show!chw.ready && !chw.adBlockDetectclasschw-progress-bar-wrap-popup roundme_sm box_relative bg_blue5 center_h ss_marginbottom_lg ss_button> p classchw-progress-bar-msg box_absolute centered nospace text-center fullwidth chw-msg chw-p-msg text_white> span v-showchw.hours classchw-pie-num>{{chw.hours}}:/span>span classchw-pie-num>{{chw.minutes}}:/span>span classchw-pie-num>{{chw.seconds}}/span> /p> div classchw-progress-bar-inner-popup bg_blue4 :style{width: chwBarProgress}>/div> /div> /section> !-- #chickn-winner-wrapper --> footer classnugget-footer text-center box_relative> div> button v-showshowPopupBtn idgotWinnerOk @clickonGotWinner classss_button btn_medium btn_yolk bevel_yolk btn_shiny>{{ txtState.btn }}/button> button v-show!firebaseId @clicksignIn classss_button btn_medium btn_green bevel_green btn_shiny>{{ loc.sign_in}}/button> /div> /footer> /div> !-- #popupInnards -->/script>script>var comp_chickn_winner_popup { template: #chickn-winner-template, props: loc, firebaseId, reward, adUnit, chw, components: { item: comp_item, }, data: function () { return { clickedIdx: 0, eggs: {id:eggOne, value: 0, active: true, hide: 0}, {id:eggTwo, value: 0, active: true, hide: 0}, {id:eggThree, value: 0, active: true, hide: 0}, isMiniGameComplete: false, bustedSrc: `img/incentivized-mini-game/svg/Egg07.svg`, busted: false, showEggGame: false, clickBeforeReady: false, watchAdClicked: false, show: false } }, methods: { placeBannerAdTag: function (tagEl) { this.$refs.chickenNuggetAdContainer.appendChild(tagEl); }, eggSrc(count) { if (count > 6) { return `img/incentivized-mini-game/svg/Egg06.svg`; } return `img/incentivized-mini-game/svg/Egg0${count}.svg`; }, eggSrcBusted() { setTimeout(() > { return `img/incentivized-mini-game/svg/Egg07.svg`; }, 2424); }, eggBg(count) { if (count > 5) { return incentivized-show } }, eggClass(count) { let hide; if (count > 5 && this.reward.itemIds.length > 0) { hide visibility-hidden cyborg-egg; } if (count > 5) { return `chick-alive ${hide} egg-${count} cyborg-egg`; } }, checkIfReady(e) { this.eggClickCounter(e); }, eggClickCounter(e) { if (!this.busted) { BAWK.play(mini-egg-game_shellhit); } else { BAWK.play(mini-egg-game_chick); } this.clickedIdx this.eggs.findIndex(i > i.id e.target.id); let elem document.getElementById(this.eggsthis.clickedIdx.id); if (this.eggsthis.clickedIdx.value 6) { elem.classList.add(chickn-winner-clicked); setTimeout(() > elem.classList.remove(chickn-winner-clicked), 650); } if (this.eggsthis.clickedIdx.value 5) { this.isMiniGameComplete true; ga(send, event, Chickn Winner, Egg Game, `egg-cracked-${this.eggsthis.clickedIdx.id}`); setTimeout(() > { this.eggsthis.clickedIdx.active false; elem.src this.bustedSrc; }, 1414); this.busted true; extern.api_checkBalance(); this.eggs.forEach(i > { if (i.id e.target.id) return; let btn document.getElementById(i.id); if (btn) { btn.style.pointerEvents none; btn.disabled true; } }); } if (this.eggsthis.clickedIdx.value 100) { BAWK.play(mini-egg-game_shial); } this.eggsthis.clickedIdx.value++; }, resetGame() { if (this.firebaseId ! null) { extern.checkStartChicknWinner(true); } if (extern.inGame) { vueApp.disableRespawnButton(false); vueApp.showGameMenu(); } setTimeout(() > { this.$emit(chw-mini-game-complete, true); this.isMiniGameComplete false; this.busted false; this.reward.eggs null; this.reward.itemIds.length 0; this.reward.ownedItem null; this.reward.ownedItems null; this.clickBeforeReady false; this.watchAdClicked false; this.eggs.forEach(i > { const Btn document.getElementById(i.id); if (Btn) { Btn.style.pointerEvents all; Btn.disabled false; } i.value 0; i.active true; i.hide 0; }); }, 500); }, onGotWinner: function () { BAWK.play(ui_popupclose); this.$parent.hide(); }, watchVideo() { if (this.watchAdClicked) { return; } this.watchAdClicked true; vueApp.chwDoIncentivized(); setTimeout(() > { this.watchAdClicked false; }, 2000); }, signIn() { this.$parent.hide(); vueApp.onChwSignInClicked(); vueApp.onSignInClicked(); } }, computed: { chwBarProgress() { return this.chw.progress + %; }, showAmountRewarded() { if (this.reward.eggs) { return `+${this.reward.eggs}`; } }, rewardItem() { return this.reward.itemIds.length > 0 ? extern.catalog.findItemById(this.reward.itemIds0) : ; }, txtState() { let t {}; if (!this.firebaseId) { t.desc this.loc.chw_create_account; t.btn this.loc.not_now; } else { if (this.eggGameReady) { t.desc this.loc.p_nugget_instruction; t.btn this.loc.p_nugget_button; if (this.busted) { t.desc ; } } else { if (this.chw.winnerCounter > 3) { t.desc this.loc.chw_daily_limit_msg_two; t.btn this.loc.close; } else { t.desc ; t.btn this.loc.close; } } } return t; }, limitReached() { return this.chw.winnerCounter > 3; }, eggGameReady() { return ((this.reward.eggs || this.reward.itemIds.length > 0) && this.firebaseId && !this.limitReached); }, showCountDown() { return (!(this.reward.eggs || this.reward.itemIds.length > 0) && this.firebaseId && !this.limitReached && !this.chw.ready); }, showAdWatch() { return (!(this.reward.eggs || this.reward.itemIds.length > 0) && this.firebaseId && !this.limitReached && this.chw.ready); }, showDescTxt() { return (!this.chw.ready && this.limitReached); }, showPopupBtn() { return ((this.busted && (this.reward.eggs || this.reward.itemIds.length > 0)) || this.showCountDown || this.showAdWatch || this.limitReached || !this.firebaseId); }, chickSrc() { if (this.limitReached || !this.firebaseId) { return this.chw.imgs.limit; } return this.chw.imgs.sleep; }, rewardHasItem() { return this.reward.itemIds.length > 0 && !this.reward.eggs && this.busted; }, }, watch: { busted(val) { if (val) { BAWK.play(mini-egg-game_shellburst); setTimeout(() > { BAWK.play(mini-egg-game_victory); }, 500); } }, }};/script>script idsocial-panel-template typetext/x-template> div refsocialMediaIcons classsocial_icons roundme_sm f_row gap-sm ss_margintop_xl fullwidth justify-content-end> !-- a :hrefnewsLetterUrl target_blank @clickplaySound(newYolker)> div classicon-wrap bg_blue3 roundme_sm> span classsr-only>Get the Shell Shockers Newsletter: The New Yolker/span> i aria-hiddentrue classtext_blue1 fas fa-envelope-open-text>/i> /div> /a> --> !-- name, reward, url, img, icon --> social-promo refsocialIcons v-for(item, idx) in socialItems :keyidx :nameitem.name :rewarditem.reward :urlitem.url :imgitem.imgPath :iconitem.icon :is-activeitem.active :locloc :is-pokiisPoki :use-socialsocialMedia :iditem.id>/social-promo> !-- social-promo refsocialIcons :nameshowSocialMedia.name :rewardshowSocialMedia.reward :urlshowSocialMedia.url :imgshowSocialMedia.imgPath :iconshowSocialMedia.icon :is-activeshowSocialMedia.active :locloc :is-pokiisPoki :use-socialshowSocialMedia.reward :overlapadOverlap>/social-promo> --> /div>/script>script idsocial-promo-template typetext/x-template> div classsocial-media box_relative :classcls> div v-ifisActive classtool-tip :class{active : isBubbleActive}> a :hrefurl target_blank :titleurlTitle classbg_blue4 @clickonClickReward()> div classicon-wrap bg_blue3 f_row align-items-center justify-content-center roundme_sm text-center> span classsr-only>Vist Shell Shockers {{ name }} page/span> i aria-hiddentrue classtext_blue1 :classuseIcon>/i> /div> /a> div classtool-tip--bubble v-showbubbleHover> div classtool-tip--group display-grid grid-column-1-2> div classtool-tip--image box_relative> img v-ifimg classdiscord-bubble-img box_absolute :srcimgSrc :altimgAlt> /div> div classtool-tip--text text-left> section v-htmlsocialDesc>/section> /div> /div> !-- .tool-tip--group --> /div> !-- .tool-tip--bubble --> /div> !-- .tool-tip --> a v-if!isActive :hrefurl target_blank classbg_blue4 @clickonClickReward()> div classicon-wrap bg_blue3 f_row align-items-center justify-content-center roundme_sm text-center> span classsr-only>Vist Shell Shockers {{ name }} page/span> i aria-hiddentrue classtext_blue1 fab :classuseIcon>/i> /div> /a> /div>/script>script>var COMPSOCIALPROMO { template: #social-promo-template, props: name, reward, url, img, icon, loc, isPoki, useSocial, id, data: function () { return { isBubbleActive: false, bubbleRepeat : , bubbleHover: true, isActive: false, isItemOwned: false, inventoryCheck: 0 } }, mounted() { this.discordBubbleTimer(); }, methods: { playSound (label) { BAWK.play(ui_click); }, discordBubbleTimer() { if (this.reward this.useSocial) { if (extern.isGameReady) { this.inventoryCheck 0; setTimeout(() > { this.isItemOwned extern.isItemOwned({id: this.id}); if (!this.isItemOwned) { this.isActive true; this.bubbleRepeat setInterval(() > { this.isBubbleActive this.isBubbleActive ? false : true; }, 3000); } }, 1000); } else { this.inventoryCheck++; if (this.inventoryCheck 6 && !this.isActive) { setTimeout(() > this.discordBubbleTimer(), 2000); } } } }, onClickReward() { if (!this.reward) return; this.gaSend(this.reward); if (!this.isItemOwned && this.reward) { extern.socialReward(this.reward); } this.playSound(); this.isBubbleActive false; this.bubbleHover false; if (this.bubbleRepeat) { clearInterval(this.bubbleRepeat); } }, gaSend(label) { if (!label) return; ga(send, event, social-buttons, click, label); } }, computed: { itemRedeemed() { return localStore.getItem(this.reward + Rewarded); }, urlTitle() { return `Blue Wizard ${this.name} page`; }, imgAlt() { return `Join Blue Wizards ${this.name} page`; }, imgSrc() { return `img/social-media/${this.img}`; }, socialDesc() { return this.locfooter_social_media_ + this.name.toLowerCase(); }, cls() { return this.useSocial this.reward ? `active-social-${this.useSocial.toLowerCase()}` : ; }, useIcon() { if (this.name newYolker) { return `fas ${this.icon}`; } else { return `fab ${this.icon}`; } }, }, watch: { // useSocial(val) { // if (!val) { // return; // } // this.isActive this.reward val; // } }};/script>script>var comp_social_panel { template: #social-panel-template, components: { social-promo: COMPSOCIALPROMO }, props: loc, isPoki, socialMedia, useSocial, data: function () { return { // adOverlap: false, newsLetterUrl: https://bluewizard.com/subscribe-to-the-new-yolker/, } }, computed: { // showSocialMedia() { // return this.useSocialMath.floor(Math.random()*this.useSocial.length); // }, socialItems() { const idx this.useSocial.findIndex(el > el.reward this.socialMedia); if (idx > 0) { const social this.useSocialidx this.useSocial.splice(idx, 1); this.useSocial.push(social); } return this.useSocial; } }};/script>script idchw-home-screen typetext/x-template> div refchw-home-timer styledisplay: none v-showshowChw classchw-home-timer display-grid grid-column-1-2 grid-align-items-center box_absolute grid-gap-1> div classbox_relative> img classbox_absolute chw-loot-img srcimg/chicken-nugget/chw-loot-btn.png /> img classchw-home-timer-chick box_absolute :srcchwChickSrc> /div> div classchw-bubble-wrap box_relative :classchwHomeTimerCls> div classdisplay-grid grid-align-items-center bg_white chw-circular-timer-container box_relative gap-sm :classchwClass> div v-show!chw.onClick> p classchw-circular-timer-countdown nospace text-center> span classchw-pie-remaining text-center chw-msg chw-r-msg v-htmlremainingMsg>/span> br /> span v-show!chw.ready && !chw.adBlockDetect>span v-showchw.hours classchw-pie-num>{{chw.hours}}:/span>span v-showchwShowTimer classchw-pie-num>{{chw.minutes}}:/span>span v-showchwShowTimer classchw-pie-num>{{chw.seconds}}/span>/span> /p> button v-ifchwShowBtn classss_button btn_sm btn_yolk bevel_yolk :classbtnStyle @clickplayIncentivizedAd v-htmlplayAdText>icon v-showchw.winnerCounter nameico_watchAd classchw-icon-watch-ads>/icon>/button> /div> /div> div classspeech-tail>/div> div classchw-circular-timer-container-shadow>/div> /div> /div> !-- .chw-timer -->/script>script>const CompChwHomeScreen { template: #chw-home-screen, props: loc, screens, currentScreen, ui, chw, firebaseId, data: function () { return {} }, methods: { playIncentivizedAd() { vueApp.playIncentivizedAd(); } }, computed: { remainingMsg() { if (this.chw.adBlockDetect) { return Please turn off ad blocker; } if (this.isChicknWinnerError) { return this.loc.chw_error_text; } if (this.chw.limitReached && !this.chw.ready) { return this.loc.chw_daily_limit_msg; } if (this.chw.ready) { return this.chw.winnerCounter > 0 ? this.loc.chw_cooldown_msg : this.loc.chw_ready_msg; } return this.loc.chw_time_until; }, chwHomeTimerCls() { if (this.chw.limitReached) { return chw-home-screen-max-watched; } else { if (this.chw.ready) { return is-ready active; } else { return not-ready; } } }, chwClass() { if (this.chw.limitReached || this.isChicknWinnerError) { return grid-column-1-eq; } else { return grid-column-1-eq; } }, chwChickSrc() { if (this.chw.limitReached || this.isChicknWinnerError) { // return img/chicken-nugget/chickLoop_daily_limit.svg; return this.chw.imgs.limit; } else { if (!this.chw.ready) { // return img/chicken-nugget/chickLoop_sleep.svg; return this.chw.imgs.sleep; } else { // return img/chicken-nugget/chickLoop_speak.svg; return this.chw.imgs.speak; } } }, chwShowTimer() { return true; if (this.chw.limitReached) { // this.chwStopCycle(); return false; } else { if (this.chw.ready) { this.chwShowCycle(); return false; } else { // this.chwStopCycle(); return true; } } }, chwShowBtn() { if ((this.chw.ready && !this.chw.limitReached && !this.chw.adBlockDetect) || (!this.chw.ready && this.chw.limitReached && !this.chw.adBlockDetect)) { return true; } else { return false; } }, playAdText() { if (this.chw.limitReached) { return this.loc.chw_wake.format(200 * (this.chw.resets + 1)); } else { return this.loc.chw_btn_free_reward; } }, btnStyle() { if (this.chw.limitReached) { return chw-limit-reached; } }, showChw() { return this.firebaseId && this.currentScreen ! this.screens.game && this.ui.showHomeEquipUi }, }};/script>script idhome-screen-template typetext/x-template> div> div classtwitch-btn-wrap box_absolute> button v-ifui.events.twitch && !extern.inGame classss_button twitch-btn btn_sm box_relative text-right @clickonTwitchDropsClick>Twitch Drops Live!span classtwitch-btn-status v-htmlisTwitchLinked>/span> img classbox_absolute srcimg/twitch-drops/twitch-drops-parachute.svg alt>/button> /div> house-ad-big idbig-house-ad refbigHouseAd :useAdui.houseAds.big @big-house-ad-closedonBigHouseAdClosed>/house-ad-big> div iddisplay-ad-header-home refdisplayAdHeader> display-ad idshellshock-io_728x90_HP_wrap refheaderDisplayAd classdisplay-ad-header centered_x :ignoreSizetrue :adUnitdisplayAd.adUnit.header adSize468x60 :check-productscheckProducts>/display-ad> /div> !-- gauge-meter v-showshowScreen ! screens.profile refgaugeMeter @gauge-meter-clickonGaugeMeterClick>/gauge-meter> --> div classhomescreen-main-wrapper display-grid> div classbox_relative fullwidth> profile-screen idprofileScreen refprofileScreen :locloc :claimedchallengesClaimed v-show(showScreen screens.profile) @leave-game-confimedleaveGameConfirmed>/profile-screen> play-panel idplay_game refplayPanel v-showshowScreen screens.home :show-screenshowScreen :screensscreens :locloc :player-nameplayerName :game-typesgameTypes :current-game-typecurrentGameType :is-game-readyaccountSettled :region-listregionList :current-region-idcurrentRegionId :homehome :play-clickedplayClicked :current-classclassIdx :language-codecurrentLanguageCode @playerNameChangedonPlayerNameChanged @game-type-changedonGameTypeChanged :mapsmaps>/play-panel> /div> aside classsecondary-aside box_relative display-grid justify-content-end> div classsecondary-aside-wrap box_relative> media-tabs refmediaTabs :locloc :newsfeedItemsnewsfeedItems :twitchStreamstwitchStreams :youtubeStreamsyoutubeStreams :challengesplayer.challenges :challenge-daily-dataplayer.challengeDailyData :firebase-idfirebaseId @chlgRerollchallengeReroll>/media-tabs> display-ad idshellshockers_titlescreen_wrap reftitleScreenDisplayAd classhouse-small box_absolute :ignoreSizetrue :adUnitdisplayAd.adUnit.home adSize300x250 :check-productscheckProducts>/display-ad> /div> /aside> !-- house-ad-small idbanner-ad :useAdui.houseAds.small>/house-ad-small> --> /div> div idmainFooter classcentered_x> !-- chicken-panel refchickenPanel idchicken_panel :localloc :do-upgradedisUpgraded>/chicken-panel> --> section> footer-links-panel idfooter_links_panel :locloc :versionchangelog.version :is-pokiisPoki>/footer-links-panel> /section> /div> !-- Popup: Check Email --> small-popup idcheckEmailPopup refcheckEmailPopup :hide-canceltrue> template slotheader>{{ loc.p_check_email_title }}/template> template slotcontent> p>{{ loc.p_check_email_text1 }}:/p> h5 classnospace text-center>{{ maskedEmail }}/h5> p classss_marginbottom>{{ loc.p_check_email_text2 }}/p> /template> template slotconfirm>{{ loc.ok }}/template> /small-popup> !-- Popup: Resend Email --> small-popup idresendEmailPopup refresendEmailPopup @popup-confirmonResendEmailClicked @popup-xonHideResendEmail @popup-cancelonHideResendEmail> template slotheader>{{ loc.p_resend_email_title }}/template> template slotcontent> p>{{ loc.p_resend_email_text1 }}:/p> h5 classnospace text-center>{{ maskedEmail }}/h5> p classss_marginbottom>{{ loc.p_resend_email_text2 }}/p> /template> template slotcancel>{{ loc.ok }}/template> template slotconfirm>{{ loc.p_resend_email_resend }}/template> /small-popup> small-popup idresendEmailConfirm refresendEmailConfirm :hide-canceltrue @popup-closedonHideResendEmail> template slotheader>{{ loc.verify_email_sent }}/template> template slotcontent> !-- content not locd (yet) --> {{ loc.verify_email_instr }} /template> template slotconfirm>{{ loc.close }}/template> /small-popup> !-- large-popup idhvsmPopup refhvsmPopup @popup-closedonHvsmPopupClose @popup-openedonHvsmPopupOpen @popup-xonHvsmPopupClose> template slotcontent> div idhvsm-popup-item-grid-wrap classhvsm-popup-item-grid-wrap paddings_lg display-grid gap-1 grid-column-3-eq> div classhvsm-popup-item-grid hvsm-popup-heroes-column> header> img classdisplay-block center_h :srchvsm.hero.img altHeroes logo> h3 classtext-center text-uppercase text_blue5>{{ hvsm.hero.name }}/h3> /header> div idequip_grid classcenter_h f_row align-content-start align-content-start gap-sm> item v-for(item, idx) in hvsm.hero.items :locloc :itemitem :keyitem.id @item-selectedonHvsmClicked :is-shopfalse>/item> /div> button classss_button btn_md btn_yolk bevel_yolk fullwidth @clickonHvsmClicked(hvsm.hero.name)> Hero Items /button> /div> div classhvsm-popup-desc> header> h1 classnospace text_white text-shadow-black-40 text-center>Egg Org & Eggventure/h1> /header> p classtext_blue5> Welcome brave Eggventurers, to a tale of mystery, magic, & mayhem! /p> p classtext_blue5> Equip your skins of choice to choose your side. Each kill with an equipped Monsters or Heroes item will bring your side closer to victory! Who will win to unlock an item for all? You decide. /p> p classtext_blue5> Grab your swords & prepare yourshellves, for the eggventure of a lifetime awaits! /p> /div> div classhvsm-popup-item-grid hvsm-popup-monsters-column> header> img classdisplay-block center_h :srchvsm.monster.img altMonsters logo> h3 classtext-center text-uppercase text_blue5>{{ hvsm.monster.name }}/h3> /header> div idequip_grid classcenter_h f_row align-content-start align-content-start gap-sm> item v-for(item, idx) in hvsm.monster.items :locloc :itemitem :keyitem.id @item-selectedonHvsmClicked :is-shopfalse>/item> /div> button classss_button btn_md btn_yolk bevel_yolk fullwidth @clickonHvsmClicked(hvsm.monster.name)> Monster Items /button> /div> /div> /template> /large-popup> --> /div>/script>script idcreate-private-game-template typetext/x-template> div> div classroundme_sm fullwidth> div> div classcreate-game-map-select display-grid> h1 classcreate-game-header roundme_sm text-center> {{ loc.p_privatematch_title }} /h1> div classcreate-game-map-search box_relative> !-- input refmapSearch namename v-bind:placeholderloc.p_privatematch_find_map v-on:keyuponMapSerachKeyup($event) classss_field font-nunito box_relative> --> div classbox_relative display-grid grid-column-auto-1 gap-sm> div classbox_relative> label forsearch-map classcentered_y>i classfas fa-search text_blue3 :classmapSearchResults.length || mapNotFound ? fa-times-circle : fa-search @clickonMapSearchReset>/i>/label> input refmapSearch namesearch-map v-bind:placeholderloc.p_privatematch_find_map v-on:keyuponMapSerachKeyup($event) @bluronBlurSearhFocus classss_field font-nunito box_relative fullwidth> /div> button classss_button btn_blue bevel_blue box_relative text-shadow-none create-game-map-btn-random @clickonRandomMapClick>i classfas fa-random>/i>/button> /div> div v-showmapSearchResultsShow classoption-box box_absolute roundme_sm common-box-shadow bg_blue6 pos-right> ul classlist-no-style nospace ss-dropdown-select f_col> li v-show!mapSearchResults.length classtext_blue5 font-nunito @clickonMapSearchReset>{{ loc.p_privatematch_map_not_found }}/li> li v-for(item, idx) in mapSearchResults :keyidx @clickonMapSearchResultClick(item) classtext_blue5 font-nunito> {{ item.name }} /li> /ul> /div> /div> div idprivate_maps classroundme_md :style{ backgroundImage: url( + mapImgPath + ) }> !-- img :srcmapImgPath idmapThumb classroundme_sm text-center> --> div idmapNav> button idmapLeft @clickonMapChange(-1) classclickme map-arrows text_white>i classfas fa-caret-left fa-3x>/i>/button> h5 idmapText classtext-shadow-black-40> {{ mapListmapIdx.name }} span classmap_playercount text-shadow-black-40 font-nunito box_absolute> icon classmap-avg-size-icon fill-white shadow-filter :namemapSizeIcon>/icon> /span> /h5> button idmapRight @clickonMapChange(1) classclickme map-arrows text_white>i classfas fa-caret-right fa-3x>/i>/button> /div> /div> div classhideme>{{ currentRegionId }}/div> ss-button-dropdown classbtn-1 fullwidth :locloc :loc-txtgameTypeTxt :list-itemsgameTypes :selected-itempickedGameType menuPosright @onListItemClickonGameTypeChange>/ss-button-dropdown> !-- ss-button-dropdown :locloc :loc-txtmapTxt :list-itemsgameTypeMapList :selected-itemmapIdx @onListItemClickonMapChangeClick>/ss-button-dropdown> --> !-- ss-button-dropdown classbtn-2 fullwidth :locloc :loc-txtserverTxt :list-itemsregions :selected-itemcurrentRegionId menuPosright @onListItemClickonServerChange>/ss-button-dropdown> --> ss-button-dropdown classplay-panel-region-select btn-2 fullwidth :locloc :loc-txtserverTxt :selected-itemcurrentRegionId @onListItemClickonServerChange menuPosright> template slotdropdown> li v-ifregions refitems v-for(g, idx) in regions :class{ selected : currentRegionId g.id } classdisplay-grid gap-1 align-items-center text_blue5 font-nunito regions-select @clickonServerChange(g.id)> div classf_row align-items-center> icon v-showcurrentRegionId g.id nameico-checkmark classoption-box-checkmark>/icon> /div> div> {{ locg.locKey }} /div> div classtext-right> {{ g.ping }}ms /div> /li> /template> /ss-button-dropdown> !-- button classss_button button_blue bevel_blue fullwidth @clickonServerClick>{{ loc.server }}: {{ locserverLocKey }}/button> --> button nameplay @clickonPlayClick classbtn-3 f_row align-items-center gap-sm is-for-play ss_button btn_md text-uppercase font-sigmar fullwidth btn_green bevel_green margin-0>{{ loc.p_privatematch_button }} icon classfill-white shadow-filter nameico-backToGame>/icon>/button> /div> /div> /div> /div>/script>script>var comp_create_private_game_popup { template: #create-private-game-template, props: loc, regionLocKey, mapImgBasePath, isGameReady, gameTypeTxt, mapList, regions, currentRegionId, gameTypes, pickedGameType, mounted() { this.randomMap(); }, data: function () { return { showingRegionList: false, mapIdx: 0, playClickedBeforeReady: false, map: , mapLocKey: , mapImgPath: , mapNotFound: false, mapSearchResults: , mapSearchResultsIdx: 0, mapSearchResultsMax: 5, mapSearchResultsMin: 0, mapSearchResultsShow: false, mapSearchIsFocused: false, mapKeyListners: , vueData, } }, methods: { randomMap() { this.mapIdx Math.randomInt(0, this.mapList.length); this.map this.mapListthis.mapIdx; this.mapLocKey this.map.locKey; this.mapImgPath this.mapImgBasePath + this.map.filename + .png? + this.map.hash; }, onRandomMapClick() { BAWK.play(ui_onchange); this.selectMapForPickedGameType(, true); }, playSound (sound) { BAWK.play(sound); }, onCloseClick: function () { this.$parent.close(); BAWK.play(ui_popupclose); }, onRegionChanged: function () { this.showingRegionList true; this.$parent.toggle(); vueApp.$refs.homeScreen.$refs.playPanel.$refs.pickRegionPopup.toggle(); BAWK.play(ui_click); }, onMapChange: function (dir) { this.selectMapForPickedGameType(dir); BAWK.play(ui_onchange); }, selectMapForPickedGameType (dir, rnd) { let idx this.mapIdx; let gameTypeShortName; for (var i 0; i vueData.maps.length; i++) { // Prevent race condition if (dir) idx (idx + dir + vueData.maps.length) % vueData.maps.length; if (rnd) idx Math.randomInt(0, vueData.maps.length); let map vueData.mapsidx; gameTypeShortName vueData.gameTypeKeysthis.pickedGameType; if (map.modesgameTypeShortName) { break; } if (dir 0) dir 1 //idx (idx + dir + vueData.maps.length) % vueData.maps.length; } console.log(Random map deets: , gameTypeShortName, vueData.mapsidx.modesgameTypeShortName); this.mapImgPath this.mapImgBasePath + vueData.mapsidx.filename + .png? + vueData.mapsidx.hash; this.mapLocKey vueData.mapsidx.locKey; this.mapIdx idx; }, onKeyDownMapSelect() { document.addEventListener(keydown, this.handleKeydown, true); }, handleKeydown(e) { const keyName e.key; switch (keyName) { case ArrowRight: this.onMapChange(1); break; case ArrowLeft: this.onMapChange(-1); break; case ArrowDown: case ArrowUp: if (this.mapSearchIsFocused) return; this.mapSearchIsFocused true; this.$refs.mapSearch.focus(); default: break; } }, removeKeydown() { this.mapSearchIsFocused false; document.removeEventListener(keydown, this.handleKeydown, true); }, onGameTypeChanged () { BAWK.play(ui_onchange); this.selectMapForPickedGameType(0); }, onPlayTypeWhenSignInComplete() { return this.playClickFunction(); }, onPlaySentBeforeSignIn() { this.gameClickedBeforeReady true; vueApp.showSpinner(signin_auth_title, signin_auth_msg); }, onPlayClick: function () { this.removeKeydown(); this.$parent.close(); if (!this.isGameReady) { this.onPlaySentBeforeSignIn(); return; } vueApp.externPlayObject(vueData.playTypes.createPrivate, this.pickedGameType, this.vueData.playerName, this.mapIdx, ); BAWK.play(ui_playconfirm); }, onGameTypeChange(val) { // Not using a select here because its not possible to style it so we have to update the game mode // manually. This is a bit of a hack but it works. this.pickedGameType val; // Minor change here. Sending the game type to update global game type change this if we want. this.$emit(onGameTypeChange, this.pickedGameType); this.selectMapForPickedGameType(0); }, onMapChangeClick(idx) { if (idx > 0) { for (var i 0; i this.mapList.length; i++) { // Prevent race condition let map this.mapListidx; let gameTypeShortName vueData.gameTypeKeysthis.pickedGameType; if (map.modesgameTypeShortName) { break; } } this.mapImgPath this.mapImgBasePath + this.mapListidx.filename + .png? + this.mapListidx.hash; this.mapLocKey this.mapListidx.locKey; this.mapIdx idx; BAWK.play(ui_onchange); } }, onServerChange(val) { this.$emit(onRegionPicked, val); }, onMapSerachKeyup(e) { if (this.$refs.mapSearch.value.length > 1) { this.mapSearchResultsShow true; this.mapSearchResults this.mapList.filter((map, idx) > { if (map.name.toLowerCase().replace(/^a-zA-Z /g, ).startsWith(this.$refs.mapSearch.value.toLowerCase())) { if (map.modesvueData.gameTypeKeysthis.pickedGameType) { if (!this.mapSearchResults.some(map > idx map.id)) { return true; } return false; } } else { return false; } }); if (!this.mapSearchResults.length) { this.mapNotFound true; } } else { this.mapSearchResults.length 0; this.mapSearchResultsShow false; this.mapNotFound false; } if (this.mapSearchResults.length 1) { this.onMapChangeClick(this.mapList.findIndex(m > m.filename this.mapSearchResults0.filename)); this.mapSearchResultsShow false; this.mapNotFound false; } }, onMapSearchReset() { this.$refs.mapSearch.value ; this.mapSearchResultsShow false; this.mapSearchResults.length 0; this.mapNotFound false; this.mapSearchIsFocused false; }, onMapSearchResultClick(map) { this.onMapSearchReset(); this.onMapChangeClick(this.mapList.findIndex(m > m.filename map.filename)); }, onBlurSearhFocus() { this.mapSearchIsFocused false; } }, computed: { serverTxt() { let name ; if (hasValue(this.regions) && hasValue(this.currentRegionId)) { name this.regions.filter(s > s.id this.currentRegionId)0.locKey; } return { title: this.loc.p_servers_title, subTitle: this.locname } }, mapSizeIcon() { if (this.mapListthis.mapIdx.numPlayers 13) { return ico-map-size-small; } else if (this.mapListthis.mapIdx.numPlayers > 14 && this.mapListthis.mapIdx.numPlayers 17) { return ico-map-size-med; } else if (this.mapListthis.mapIdx.numPlayers > 17) { return ico-map-size-large; } } }, watch: { isGameReady(val) { if (this.gameClickedBeforeReady && val) { setTimeout(() > this.onPlayClick(), 700); } } } };/script>script idaccount-panel-template typetext/x-template> div> div idaccount_top classf_row f_end_only account-wrapper align-items-center > event-panel v-showshowCornerButtons :current-screencurrentScreen :screensscreens>/event-panel> !-- eggstore-notify refshirtStore :showshowCornerButtons :locloc :skusku iconfa-tshirt :text-hidetrue textp_egg_shop_sale_notify titleaccount_threadless colorblue urlhttps://bluewizard.threadless.com/ analyticsthreadless>/eggstore-notify> --> !-- eggstore-notify refeggStoreSaleNotify :text-hide!hideNewItemNotify :showshowCornerButtons :locloc :skusku titleaccount_premium_item iconfa-gem textp_egg_shop_sale_notify analyticsdiamond>/eggstore-notify> --> div classaccount_eggs roundme_sm clickme f_row align-items-center @clickonEggStoreClick v-bind:titlelocaccount_title_eggshop> div classbox_relative> img :srcisAnonymous ? img/svg/ico_goldenEgg_callout.svg : img/svg/ico_goldenEgg.svg classegg_icon> /div> span refeggCounter classegg_count>{{ eggBalance }}/span> /div> !-- button v-ifshowVipButton @clickonSubscriptionClick classss_button btn_yolk bevel_yolk btn_vip :titlelocaccount_vip :class{has-sub : isVipLive}>img srcimg/vip-club/vip-club-emblem-sm.png altVIP Emblem> {{vipButtonText}}/button> --> button v-showshowNotInGame :classaccountBtnCls @clickonAccountBtnClick classss_button btn-account-status font-sigmar align-items-center text-center justify-content-center> span v-if!isNotSignedIn> icon nameico-vip>/icon> /span> {{ accountBtnText }} /button> !-- input typeimage srcimg/ico_nav_leaderboards.png classaccount_icon roundme_sm> --> div idcorner-buttons v-showshowCornerButtons classf_row f_end_only align-items-center > button v-ifisPrivateGame && !showNotInGame classss_button btn_blue bevel_blue box_relative pause-screen-ui btn-account-w-icon text-shadow-none text_blue1 @clickonGameOptionsClick :titleloc.p_privateoptions_button> !-- img classicon-md srcimg/svg-icons/ico-private-game-config.svg> --> icon nameico-private-game-config classicon-md svg-icon>/icon> /button> !-- input typeimage srcimg/ico_nav_shop.png @clickitemStoreClick classaccount_icon roundme_sm v-bind:titlelocaccount_title_shop> --> !-- input typeimage srcimg/ico_nav_help.png @clickonHelpClick classaccount_icon roundme_sm v-bind:titlelocaccount_title_faq> --> button @clickonTutorialClicked v-showcurrentScreen screens.game classss_button btn_blue bevel_blue box_relative pause-screen-ui btn-account-w-icon text-shadow-none text_blue1 :titleloc.tutorial_title>i classfas fa-question>/i>/button> button @clickonShareLinkClick v-showshowShareLinkButton classss_button btn_blue bevel_blue box_relative pause-screen-ui btn-account-w-icon text-shadow-none text_blue1 :titleloc.p_pause_sharelink>i :classvueData.icon.invite>/i>/button> button @clickonSettingsClick classss_button btn_blue bevel_blue box_relative pause-screen-ui btn-account-w-icon text-shadow-none text_blue1 :titleloc.account_title_settings>i :classvueData.icon.settings>/i>/button> button @clickonFullscreenClick v-ifisCrazyGames classss_button btn_blue bevel_blue box_relative pause-screen-ui btn-account-w-icon text-shadow-none text_blue1 :titleloc.account_title_fullscreen>icon nameico-fullscreen classbtn-fullscreen>/icon>/button> /div> /div> !-- div idaccount_bottom v-showshowBottom> language-selector :languageslanguages :locloc :selectedLanguageCodeselectedLanguageCode :langOptionscurrentLangOptions>/language-selector> button idsignInButton v-show(isAnonymous && showSignIn) @clickonSignInClicked classss_button btn_yolk bevel_yolk>{{ loc.sign_in }}/button> button idsignOutButton v-show!isAnonymous @clickonSignOutClicked classss_button btn_yolk bevel_yolk>{{ loc.sign_out }}/button> div idplayer_photo classbox_relative v-showphotoUrl ! null && photoUrl ! undefined && photoUrl ! && ! isAnonymous> img :srcphotoUrl classroundme_sm bevel_blue/> div v-ifisTwitch classbox_absolute account-panel-twitch roundme_sm @clickonTwitchIconClick>i classfab fa-twitch>/i>/div> /div> /div> --> /div>/script>template idegg-store-notify> div v-ifshow classegg-store-sale-notify :class{white-blue : color} @clicknotifyClick> button classaccount_icon roundme_sm account_icon-item :titlegetTitle>i aria-hiddentrue classfas :classicon>span classhideme>Egg/span>/i> span classtext :class{hideme : textHide}> {{loctext}}/span> /button> /div>/template>script> const compEggStoreSaleNotify { template: #egg-store-notify, props: loc, show, sku, textHide, text, icon, color, url, title, analytics, methods: { notifyClick() { if (this.analytics) ga(send, event, header-buttons, click, this.analytics); if (this.url) { window.open(this.url, _window); return; } // if (!vueData.firebaseId) { // vueApp.showGenericPopup(p_redeem_error_no_player_title, p_redeem_error_no_player_content, ok); // return; // } vueApp.eggStoreReferral Sale notify ref; if (this.sku) { return vueApp.showPopupEggStoreSingle(this.sku) } return vueApp.onPremiumItemsClicked(); } }, computed: { getTitle() { if (!this.title) return null; return this.locthis.title; } } };/script>script>var comp_account_panel { template: #account-panel-template, components: { language-selector: comp_language_selector, eggstore-notify: compEggStoreSaleNotify, event-panel: comp_events, }, props: loc, eggs, languages, selectedLanguageCode, isPaused, photoUrl, isAnonymous, isOfAge, showTargetedAds, showCornerButtons, ui, isEggStoreSale, sku, isSubscriber, isTwitch, currentLangOptions, currentScreen, screens, isPrivateGame, data: function () { return { languageCode: this.selectedLanguageCode, eggBalance: 0, vueData, } }, created() { this.getEggsLocalStorage(); }, methods: { getEggsLocalStorage() { const raw localStore.getItem(localLoadOut); if (!raw) { return; } const storage JSON.parse(raw); if (!balance in storage) { return; } return this.eggBalance storage.balance; }, onEggStoreClick: function () { if (vueData.showAdBlockerVideoAd) { return; } if (!vueData.firebaseId) { vueApp.showGenericPopup(p_redeem_error_no_player_title, p_redeem_error_no_player_content, ok); return; } vueApp.openEquipSwitchTo(vueApp.equipMode.shop) BAWK.play(ui_popupopen); this.gaSend(eggCount); }, itemStoreClick: function() { this.gaSend(openItemShop); vueApp.openEquipSwitchTo(); vueApp.$refs.equipScreen.switchToShop(); BAWK.play(ui_popupopen); }, onHelpClick: function () { vueApp.showHelpPopup(); this.gaSend(openHelp); BAWK.play(ui_popupopen); }, onSettingsClick: function () { this.gaSend(openSettings); this.onSharedPopupOpen(); vueApp.showSettingsPopup(); BAWK.play(ui_popupopen); }, onTutorialClicked() { this.gaSend(openTutorial); vueApp.onTutorialPopupClick(); BAWK.play(ui_popupopen); }, onFullscreenClick: function () { this.gaSend(fullscreen); extern.toggleFullscreen(); BAWK.play(ui_click); }, onSignInClicked: function () { vueApp.setDarkOverlay(true); this.$emit(sign-in-clicked); }, onSignOutClicked: function () { vueApp.setDarkOverlay(true); this.$emit(sign-out-clicked); }, onShareLinkClick: function () { this.gaSend(openShareLink); this.onSharedPopupOpen(); extern.inviteFriends(); }, onAnonWarningClick: function() { ga(send, event, vueApp.googleAnalytics.cat.playerStats, vueApp.googleAnalytics.action.anonymousPopupOpen); vueApp.showAttentionPopup(); }, onSubscriptionClick() { this.gaSend(openVipPopup); vueApp.showSubStorePopup(); }, gaSend(label) { if (!label) return; ga(send, event, header-buttons, click, label); }, onTwitchIconClick() { window.open(dynamicContentPrefix + twitch); }, onAccountBtnClick() { if (this.isAnonymous && this.showSignIn) { this.onSignInClicked(); } else { this.onSubscriptionClick(); } }, eggShake() { this.$refs.eggCounter.classList.add(egg-shake); setTimeout(() > this.$refs.eggCounter.classList.remove(egg-shake), 300); }, onSharedPopupOpen() { // if (extern.inGame) { // vueApp.hideRespawnDisplayAd(); // } }, onGameOptionsClick() { ga(send, event, respawn-popup, click, gameOptions); vueApp.onGameOptionsClick(); }, }, computed: { showSignIn: function () { if (!isFromEU) { return true; } return isFromEU && this.isOfAge && this.showTargetedAds; }, showShareLinkButton: function () { return this.showCornerButtons && this.currentScreen this.screens.game; }, hideNewItemNotify() { // if (!ssChangelogDate) return false; // if (!this.showCornerButtons) return false; // const lapsed Date.now() - ssChangelogDate.valueOf(), // days Math.floor((lapsed / (60*60*24*1000))); // if (days 5 ) return true; // return false; return; }, vipButtonText() { return this.isSubscriber && !extern.account.upgradeIsExpired ? : this.loc.s_btn_txt_subscribe; }, showVipButton() { return this.showScreen this.screens.home || this.showScreen this.screens.equip; }, isVipLive() { return this.isSubscriber && !extern.account.upgradeIsExpired; }, accountBtnCls() { if (this.isAnonymous && this.showSignIn) { return btn_green bevel_green } else { if (this.isSubscriber) { return btn_yolk bevel_yolk btn_vip width-auto vertical-align-middle; } else { return btn_yolk bevel_yolk btn_vip vertical-align-middle; } } }, accountBtnText() { if (this.isAnonymous && this.showSignIn) { return this.loc.sign_in; } else { if (this.isSubscriber) { return ; } else { return this.loc.s_btn_txt_subscribe; } } }, isNotSignedIn() { return this.isAnonymous && this.showSignIn; }, showNotInGame() { return this.currentScreen ! this.screens.game && !extern.inGame }, isGameOwner() { return extern.isGameOwner; }, isCrazyGames() { return !crazyGamesActive; }, }, watch: { eggs() { this.eggShake(); this.eggBalance this.eggs; }, }};/script>script idplay-panel-template typetext/x-template> div idplay-panel classbox_relative> weapon-select-panel idweapon_select classjustify-content-center centered_x :locloc :account-settledisGameReady :current-classcurrentClass :current-screenshowScreen :screensscreens :play-clickedplayClicked @changed-classonChangedClass>/weapon-select-panel> div classplay-panel-btn-group display-grid grid-auto-flow-column gap-1 centered_x> button @clickonJoinPrivateGameClick classis-for-play ss_button btn_big btn_blue_light bevel_blue_light btn_play_w_friends display-grid align-items-center box_relative> !-- img srcimg/svg/ico_star_gold.svg classicon-star top-left/> --> span>{{ loc.p_privatematch_friends }}/span> /button> button @clickonPlayButtonClick classis-for-play ss_button btn_big btn_green bevel_green play-button box_relative v-htmlplayBtn>/button> ss-button-dropdown :locloc :loc-txtgameTypeTxt :list-itemsgameTypes :selected-itempickedGameType @onListItemClickonGameTypeChange @dropdownOpenonGameTypeBtnOpen @dropdownClosedonGameTypeBtnClosed sortorder>/ss-button-dropdown> /div> !-- Popup: Pick Region --> large-popup idpickRegionPopup refpickRegionPopup @popup-closedonPickRegionPopupClosed> template slotheader>{{ loc.server }}/template> template slotcontent> region-list-popup idregion_list_popup refregionListPopup v-if(regionList.length > 0) :locloc :regionsregionList :region-idcurrentRegionId @region-pickedonRegionPicked>/region-list-popup> /template> /large-popup> !-- Popup: Join Private Game --> large-popup idjoinPrivateGamePopup refjoinPrivateGamePopup :classjoinOnlyCls :popup-modelhome.joinPrivateGamePopup @popup-confirmonJoinConfirmed :hide-canceltrue @popup-closedonCloseCreateGame> template slotcontent> div class> div v-show!joinUrlRequest classplay-panel-panels roundme_md> create-private-game-popup idcreatePrivateGame refcreatePrivateGame :locloc :region-loc-keyregionLocKey :is-game-readyisGameReady :picked-game-typepickedGameType :game-type-txtgameTypeTxt :game-typesgameTypes @onGameTypeChangeonGameTypeChange @onRegionPickedonRegionPicked map-img-base-pathmaps/ :mapListmaps :regionsregionList :currentRegionIdcurrentRegionId>/create-private-game-popup> div classerror_text shadow_red v-showhome.joinPrivateGamePopup.showInvalidCodeMsg>{{ loc.p_game_code_blank }}/div> /div> div classplay-panel-panels play-panel-panels-join roundme_md> div classprivate-game-wrapper fullwidth> div classinner-wrapper> header> h1 classnospace>{{ loc.p_game_code_title }}/h1> /header> div classdisplay-grid grid-column-2-1 gap-sm> input typetext classss_field fullwidth v-modelhome.joinPrivateGamePopup.code v-bind:placeholderloc.p_game_code_enter @focusonJoinGameFocus v-on:keyup.enteronJoinConfirmed> button classss_button common-box-shadow ss_button_join @clickonJoinConfirmed>{{ loc.p_game_code_title }}!/button> /div> /div> /div> /div> /div> /template> template slotcancel>{{ loc.cancel }}/template> template slotconfirm>{{ loc.confirm }}/template> /large-popup> small-popup idshowGameModePopup refshowGameModePopup @popup-confirmonGameModePopupConfirm> template slotheader>Game Mode/template> template slotcontent> div classselect-box-wrap> label forcreate-select-type classss_button btn_yolk bevel_yolk>i classfas fa-chevron-down>/i>/label> select idcreate-select-type namegameType v-modelpickedGameType classss_select select @changeonGameTypeChange($event)> option v-forg in gameTypes v-bind:valueg.value :classgame-select- + g.locKey v-htmllocg.locKey>/option> /select> /div> /template> template slotcancel>{{ loc.cancel }}/template> template slotconfirm>{{ loc.confirm }}/template> /small-popup> /div>/script>script idregion-list-template typetext/x-template> div> h1 classroundme_sm>{{ loc.p_servers_title }}/h1> {{ regions }} - {{ regionId }} div v-forr in regions :keyr.id> div idregion_list_item> input typeradio :id(rb_ + r.id) namepickRegion v-bind:valuer.id v-modelregionId @clickBAWK.play(ui_onchange)> label :for(rb_ + r.id) classregionName>{{ getLockText }} /label> label :for(rb_ + r.id) classregionPingWrap roundme_sm> span classpingBar :classbarColorClass(r) :stylebarStyle(r)>/span> /label> label :for(rb_ + r.id) classregionPingNumber ss_marginleft_lg> {{ r.ping }}ms/label> /div> /div> div idbtn_horizontal classf_center> button @clickonConfirmClick() classss_button btn_green bevel_green btn_sm>{{ loc.ok }}/button> /div> /div>/script>script>var comp_region_list_popup { template: #region-list-template, props: loc, regions, regionId, data: function () { return { colorClasses: greenPing, yellowPing,orangePing, redPing, } }, methods: { playSound (sound) { BAWK.play(sound); }, barColorClass: function (region) { var colorIdx Math.min(3, Math.floor(region.ping / 150)); return this.colorClassescolorIdx; }, barStyle: function (region) { return { width: (10 - Math.min(9, region.ping / 50)) + em } }, onConfirmClick: function () { this.$emit(region-picked, this.regionId); this.$parent.close(); BAWK.play(ui_playconfirm); } }, computed: { getLockText() { return extern.getLocText(this.locKey); } }};/script>template idweaponselect_panel_template typetext/x-template> div classcenter_h ss_marginbottom_sm> div v-showshowDesc classgrid-span-column-all text-center align-items-center ss_marginbottom_sm> h3 classnospace text_blue8>{{ weapon.title }}/h3> p classnospace text_blue3>i>{{ weapon.desc }}/i>/p> /div> div :classgridCls> div classnospace @clickonWeaponSelect(charClass.Soldier)> icon nameico-weapon-soldier classweapon_img roundme_md :clsaddSelectedCssClass(charClass.Soldier)>/icon> /div> div classnospace @clickonWeaponSelect(charClass.Scrambler)> icon nameico-weapon-scrambler classweapon_img roundme_md :clsaddSelectedCssClass(charClass.Scrambler)>/icon> /div> div classnospace @clickonWeaponSelect(charClass.Ranger)> icon nameico-weapon-ranger classweapon_img roundme_md :clsaddSelectedCssClass(charClass.Ranger)>/icon> /div> div classnospace @clickonWeaponSelect(charClass.Eggsploder)> icon nameico-weapon-rpegg classweapon_img roundme_md :clsaddSelectedCssClass(charClass.Eggsploder)>/icon> /div> div classnospace @clickonWeaponSelect(charClass.Whipper)> icon nameico-weapon-whipper classweapon_img roundme_md :clsaddSelectedCssClass(charClass.Whipper)>/icon> /div> div classnospace @clickonWeaponSelect(charClass.Crackshot)> icon nameico-weapon-crackshot classweapon_img roundme_md :clsaddSelectedCssClass(charClass.Crackshot)>/icon> /div> div classnospace @clickonWeaponSelect(charClass.TriHard)> icon nameico-weapon-trihard classweapon_img roundme_md :clsaddSelectedCssClass(charClass.TriHard)>/icon> /div> /div> div v-ifcurrentScreen screens.game && !disabler classgrid-span-column-all text-center align-items-center ss_marginbottom_sm> h3 classnospace text_blue8>{{ weapon.title }}{{ selectedWeaponDisabled }}/h3> p classnospace text_blue3>i>{{ weapon.desc }}/i>/p> /div> /div>/template>script>var comp_weapon_select_panel { template: #weaponselect_panel_template, props: currentClass, loc, accountSettled, playClicked, currentScreen, screens, hideDesc, disabler, data: function () { return { charClass: CharClass } }, methods: { onWeaponSelect: function (classIdx) { if (!extern.inGame && (!this.accountSettled || this.playClicked || (this.currentClass classIdx))) { return; } else { if (this.$parent.$attrs.id ! game_screen && !this.disabler) { extern.changeClass(classIdx); this.$emit(changed-class, classIdx); } else if (this.disabler) { if (!extern.isGameOwner) return; vueApp.$nextTick(() > this.$forceUpdate()); this.$emit(weapon-toggled, classIdx); } else { if (!extern.GameOptions.value.weaponDisabledclassIdx) { extern.changeClass(classIdx); this.$emit(changed-class, classIdx); } } BAWK.play(ui_click); } }, addSelectedCssClass: function (classIdx) { if (this.disabler) { let classes ; if (vueData.gameOptionsPopup.options.weaponDisabled && vueData.gameOptionsPopup.options.weaponDisabledclassIdx) { classes + weapon_disabled ; } if (!extern.isGameOwner) { classes + interactive-disabled ; } return classes; } else { if (this.$parent.$attrs.id game_screen && extern.GameOptions.value && extern.GameOptions.value.weaponDisabledclassIdx ) { return weapon_disabled noclick; } else if (this.currentClass classIdx) { return weapon_selected; } } return ; } }, computed: { weapon() { let className getKeyByValue(this.charClass, this.currentClass).toLowerCase(); return { title: this.loc`weapon_${className}_title`, desc: this.loc`weapon_${className}_content`, } }, selectedWeaponDisabled () { let weap this.disabler ? vueData.gameOptionsPopup.options.weaponDisabled : extern.GameOptions.value.weaponDisabled; return weapthis.currentClass ? ` (${this.locp_weapon_disabled})`: ; }, isDisabled () { return this.disabled ? interactive-disabled : ; }, showDesc() { return !this.hideDesc && this.currentScreen ! this.screens.game; }, gridCls() { if (this.currentScreen this.screens.game) { return weapon-grid f_row f_wrap-wrap justify-content-center gap-sm; } return display-grid grid-auto-flow-column justify-content-around gap-sm; }, containerCls() { return this.currentScreen this.screens.game ? center_h : ; } }};/script>script>var comp_play_panel { template: #play-panel-template, components: { create-private-game-popup: comp_create_private_game_popup, region-list-popup: comp_region_list_popup, weapon-select-panel: comp_weapon_select_panel, }, props: loc, playerName, gameTypes, currentGameType, regionList, currentRegionId, home, isGameReady, maps, currentClass, showScreen, screens, playClicked, languageCode, data: function() { return { pickedGameType: this.currentGameType, isButtonDisabled: true, playClickedBeforeReady: false, playClickFunction: Function, kotcPrompt: , typeSelect: , isPromptOpen: false, joinUrlRequest: false, } }, methods: { onPickRegionButtonClick: function () { this.$refs.pickRegionPopup.toggle(); BAWK.play(ui_popupopen); }, onRegionPicked: function (regionId) { if (vueData.currentRegionId regionId) { return; } vueData.currentRegionId regionId; extern.selectRegion(vueData.currentRegionId); BAWK.play(ui_onchange); }, onPickRegionPopupClosed: function () { if (this.$refs.createPrivateGame.showingRegionList) { this.$refs.createPrivateGame.showingRegionList false; this.$refs.createPrivateGamePopup.toggle(); this.$refs.createPrivateGame.onKeyDownMapSelect(); } }, onNameChange: function (event) { console.log(name changed to: + event.target.value); this.$emit(playerNameChanged, event.target.value); }, onPlayerNameKeyUp: function (event) { event.target.value extern.filterUnicode(event.target.value); event.target.value extern.fixStringWidth(event.target.value); event.target.value event.target.value.substring(0, 128); // Send username to server to start the game! if (event.code Enter || event.keyCode 13) { if (vueData.playerName.length > 0) { vueApp.externPlayObject(vueData.playTypes.joinPublic, this.pickedGameType, this.playerName, -1, ); } } }, onGameTypeBtnOpen() { if (this.isWinSizeSmall()) vueApp.hideTitleScreenAd(); }, onGameTypeBtnClosed() { if (this.isWinSizeSmall()) vueApp.showTitleScreenAd(); }, isWinSizeSmall() { var win window, doc document, docElem doc.documentElement, body doc.getElementsByTagName(body)0, x win.innerWidth || docElem.clientWidth || body.clientWidth, y win.innerHeight|| docElem.clientHeight|| body.clientHeight; // if (x 1366 && y 768) { if (x 1366) { return true; } return false; }, onGameTypeChange: function (event) { let type; if (event.target ! undefined) { type event.target.value; } else { type event; } this.pickedGameType type; this.$emit(game-type-changed, this.pickedGameType); extern.selectGameType(this.pickedGameType); BAWK.play(ui_onchange); }, onPlayTypeWhenSignInComplete() { return this.playClickFunction(); }, onPlaySentBeforeSignIn(callback) { this.gameClickedBeforeReady true; vueApp.showSpinner(signin_auth_title, signin_auth_msg); this.playClickFunction callback; }, hasValidPlayerNameCheck() { console.log(invalid player name); vueApp.showGenericPopup(play_pu_name_title, play_pu_name_content, ok); vueApp.hideSpinner(); return; }, onPlayButtonClick: function () { if (!hasValue(this.playerName)) { this.hasValidPlayerNameCheck(); return; } if (!this.isGameReady) { this.onPlaySentBeforeSignIn(this.onPlayButtonClick); return; } this.onCloseCreateGame(); vueApp.game.respawnTime 0; vueApp.externPlayObject(vueData.playTypes.joinPublic, this.pickedGameType, this.playerName, -1, ); BAWK.play(ui_playconfirm); }, onCloseCreateGame() { this.$refs.createPrivateGame.removeKeydown(); }, onJoinPrivateGameClick: function () { this.showJoinPrivateGamePopup(vueData.home.joinPrivateGamePopup.code); BAWK.play(ui_popupopen); }, showJoinPrivateGamePopup: function (showCode, urlRequest) { // The popup must be active before it will update; set code after showing this.joinUrlRequest hasValue(urlRequest); this.$refs.joinPrivateGamePopup.show(); this.$refs.createPrivateGame.onKeyDownMapSelect(); vueData.home.joinPrivateGamePopup.code showCode; }, onJoinConfirmed: function () { if (!hasValue(this.playerName)) { this.hasValidPlayerNameCheck(); return; } if (!this.isGameReady) { this.onPlaySentBeforeSignIn(this.onJoinConfirmed) return; } let match null; if (vueData.home.joinPrivateGamePopup.code.match(/\#\w+/)) { match vueData.home.joinPrivateGamePopup.code.match(/\#\w+/)0; } else if (vueData.home.joinPrivateGamePopup.code.includes(crazyShare)) { match vueData.home.joinPrivateGamePopup.code.match(/\w*$/)0.substring(1); } else { // In case someone copy/pastes the thing without including the # match vueData.home.joinPrivateGamePopup.code; } if (!match) { return; } match match.trim(); if (match.startsWith(#)) match match.substring(1) vueData.home.joinPrivateGamePopup.code match; this.$refs.joinPrivateGamePopup.hide(); // checking if the invite code is being used since, we are only trying to determine extern.onJoinGameClick true; vueApp.externPlayObject(vueData.playTypes.joinPrivate, , this.playerName, , vueData.home.joinPrivateGamePopup.code); }, kotcAttachSetup() { const typePostion this.typeSelect.getBoundingClientRect(); const kotcPrompt this.kotcPrompt.getBoundingClientRect(); this.kotcPrompt.style.top typePostion.top + px; this.kotcPrompt.style.left typePostion.right + 16 + px; }, anchorKotcPrompt() { this.$nextTick(() > this.kotcAttachSetup()); }, onGameTypeClick() { if (this.isPromptOpen) { this.isPromptOpen false; } else { this.isPromptOpen true; } // this.$refs.showGameModePopup.show(); }, onGameModePopupConfirm() { this.$refs.showGameModePopup.hide(); }, onJoinGameFocus() { this.$refs.createPrivateGame.removeKeydown(); }, onChangedClass() { vueApp.$refs.equipScreen.onChangedClass(); } }, computed: { regionLocKey: function () { if (!hasValue(this.regionList) || this.regionList.length 0) { return ; } var region this.regionList.find(r > { return r.id vueData.currentRegionId; }); return hasValue(region) ? server_ + region.id : ; }, regionName: function () { if (!hasValue(this.regionList) || this.regionList.length 0) { return N/A; } var region this.regionList.find(r > { return r.id vueData.currentRegionId; }); if (!region) return N/A; return this.locregion.locKey || region.id; }, selectedGameType() { return this.locthis.gameTypes.filter(el > el.value this.pickedGameType)0locKey; }, gameTypeTxt() { return { title: this.loc.stat_game_mode, subTitle: this.locthis.gameTypes.filter(el > el.value this.pickedGameType)0locKey } }, serverText () { return { title: this.loc.p_servers_title, subTitle: this.currentRegionId ? this.loc`server_${this.currentRegionId}` : , } }, playBtn() { if (this.languageCode de || this.languageCode es || this.languageCode pt || this.languageCode nl){ return `i classfa fa-play fa-sm>/i> span>${this.loc.home_play}/span>` } return `i classfa fa-play fa-sm>/i> ${this.loc.home_play}`; }, joinOnlyCls() { return this.joinUrlRequest ? join-request-only : ; } }, watch: { currentGameType: function (val) { this.pickedGameType val; }, isGameReady(val) { this.isButtonDisabled val ? false : true; if (this.gameClickedBeforeReady && val) { this.onPlayTypeWhenSignInComplete() } } }};/script>script idnewsfeed-panel-template typetext/x-template> section classnews-panel> article v-ifitems v-foritem in activeItems :keyitem.id @clickonItemThatIsClicked(item) classmedia-item news_item clickme> img :srcimageSrc(item) classnews_img roundme_sm> p>{{ item.content }}/p> /article> /section>/script>script>var comp_newsfeed_panel { template: #newsfeed-panel-template, props: items, data: function () { return vueData; }, // mounted: function () { // // this.fetchWebData(); // this.checklocalForNewsData(); // }, methods: { imageSrc(item) { return dynamicContentPrefix + data/img/newsItems/ + item.id + item.imageExt; }, onItemThatIsClicked(item) { console.log(item); extern.clickedWebFeedItem(item); BAWK.play(ui_click); }, }, computed: { activeItems() { return this.items.filter(item > item.active); } }};/script>script idchicken-panel-template typetext/x-template> div idshowBuyPassDialogButton classnew> div classchicken-panel--upgraded v-showdoUpgraded && !isSubscriber> div classtool-tip tool-tip--right> span v-ifnugCounter idnugget-countdown>{{nugCounter}} Minutes remaining./span> img classupgraded-nugget srcimg/chicken-nugget/goldenNugget_static.png> !-- div idnugget-timer classnugget-timer--wrapper> div classtimer-background>/div> div classtimer spinner>/div> div classtimer filler>/div> div classmask>/div> /div> --> /div> /div> div classchicken-panel--no-upgraded v-show!doUpgraded> img srcimg/chicken-nugget/starburst.png @clickonChickenClick classclickme starburst> img srcimg/chicken-nugget/goldenNuggetGIFWIP.gif @clickonChickenClick classclickme nugget-chick> div idbuyPassChickenSpeech> img srcimg/speechtail.png classbuyPassChickenSpeechTail> span v-htmlloc.chicken_cta>/span> /div> /div> /div>/script>script>var comp_chicken_panel { template: #chicken-panel-template, props: local, doUpgraded, data: function () { return vueData; }, methods: { onChickenClick: function () { BAWK.play(ui_chicken); vueApp.showGoldChickenPopup(); ga(send, event, this.googleAnalytics.cat.purchases, Golden Chicken Click); }, },};/script>script idfooter-links-panel-template typetext/x-template> footer classmain-footer> !-- section classsocial-icons> social-panel idsocial_panel :locloc :is-pokiisPoki :use-socialselectedSocial :social-mediasocialMedia>/social-panel> /section> --> section classcentered> nav classfooter-nav text-center> button @clickonChangelogClicked classclickme ss_button_as_text>{{ version }}/button> | !-- a hrefhttps://shell-shockers.myshopify.com/collections/all target_blank @clickBAWK.play(ui_click)>{{ loc.footer_merchandise }}/a> | --> button classss_button_as_text target_blank @clickopenInNewTab(https://www.bluewizard.com/privacypolicy)>{{ loc.footer_privacypolicy }}/button> | button classss_button_as_text target_blank @clickopenInNewTab(https://bluewizard.com/terms/)>{{ loc.footer_termsofservice }}/button> | button classss_button_as_text @clickonHelpClick>{{ locaccount_title_faq }}/button> | button classss_button_as_text target_blank @clickopenInNewTab(https://www.bluewizard.com)>© 2024 img classmain-footer--logo-blue-wiz-mini srcimg/blue-wizard-logo-tiny-min.png :altloc.footer_bluewizard + logo>span classhideme>{{ loc.footer_bluewizard }}/span>/button> /nav> /section> /footer>/script>script>var comp_footer_links_panel { template: #footer-links-panel-template, props: loc, version, isPoki, socialMedia, selectedSocial, methods: { onChangelogClicked: function () { vueApp.showChangelogPopup(); BAWK.play(ui_popupopen); }, playSound() { BAWK.play(ui_click); }, onHelpClick() { vueApp.showHelpPopup(); // this.gaSend(openHelp); BAWK.play(ui_popupopen); }, openInNewTab(url) { window.open(url, _blank).focus(); this.playSound(); } }};/script>template idcomp-vip-cta> div classhouse-ad-wrapper> div classvip-club-cta v-showisVisible> button v-if!isSubscriber && hasMobileReward && showVip classvip-club-cta-pos ss_button btn_sm btn_pink bevel_pink @clickonClicked> {{ loc.ui_game_playeractions_join_vip }} /button> h4 v-ifisSubscriber && showVip classsub-name> {{locsubName}} /h4> img classhouse-ad-img :classimgCls :srcimgSrc :altaltText @clickadOnClick> /div> div v-if!isCrazyGames classss_margintop box_relative> a hrefhttps://freegames.io/game/shell-shockers?utm_sourceshellshockershomepage&utm_mediumreferral target_blank titlePlay Free Games on... well, Free Games dot io> img srcimg/free-games-io.png altFreeGames.io logo classdisplay-block center_h free-games-logo> /a> /div> /div>/template>script> const CompHouseAd { template: #comp-vip-cta, props: loc, upgradeName, isUpgraded, isSubscriber, hasMobileReward, isPoki, chwCount, chwReady, chwLimitReached, ad, crazyGamesActive, inGame, data: function () { return { isVisible: true, isCrazyGames : false, } }, created() { crazyGamesHouseAdCheck this; }, methods: { adOnClick() { extern.clickedHouseLink(this.ad); }, }, computed: { imgSrc() { if (this.ad null) { return; } return dynamicContentPrefix + data/img/art/ + this.ad.id + this.ad.imageExt; }, altText() { if (this.ad null) { return; } return this.ad.id.label; }, getImgSrcAlt() { if (this.useEventData) { return this.eventData.eventthis.useEventData.alt; } else { if (!this.isPoki) { if (this.hasMobileReward) { return this.eventData.event.vipImgSrc.alt; } else { return this.eventData.event.mobile.alt; } } } }, showVip() { return false; if (!this.hasPlayedKotc || !this.hasMobileReward || this.isBlackFryday) { return false; } else { return true; } }, imgCls() { if (this.ad null) { return; } return `${this.ad.label.replace(/\s+/g, -).toLowerCase()}-img`; }, }, watch: { upgradeName(val) { if (!hasValue(val)) { return; } this.subName `s-${val.replace( , -).toLowerCase().replace( , -)}-title`; }, inGame(val) { if (val && this.ad && this.ad.linksTo linksToCreateGame) { this.isVisible false; } else { this.isVisible true; } }, } };/script>script idmedia-tabs-template typetext/x-template> div> div classmedia-tabs-wrapper box_relative border-blue5 roundme_sm bg_blue6 common-box-shadow ss_margintop_sm> div classmedia-tab-container display-grid align-items-center gap-sm bg_blue3> h4 classcommon-box-shadow text-shadow-black-40 text_white dynamic-text> div classdynamic-text stylewidth: 8em;>div classdynamic-text>{{ tabName }}/div>/div> span v-ifcurrentTab challenges-tab> span v-ifhasChlgs classtext_yellow_bright font-nunito font-800 justify-self-end nospace>span v-showchallengeDailyData.days>D: {{ challengeDailyData.days }}/span> span>{{ challengeDailyData.hours }}/span>:span>{{ challengeDailyData.minutes }}/span>:span>{{ challengeDailyData.seconds }}/span>/span> /span> /h4> div classdisplay-grid grid-auto-flow-column gap-sm> button v-for(tab, idx) in mediaTabs :keyidx :idtab.id @clickonTabClicked(tab.id) classmedia-tab ss_smtab roundme_sm nospace :class(currentTab tab.id ? selected : )>i :classtab.icon>/i>/button> /div> /div> div classmedia-tabs-content f_col :class(currentTab news-tab ? tab-news-active : )> div classtab-content :classtabContentStyle> div refnewsContainer classnews-container f_row :classnewsContainerStyle> player-challenge-list v-showcurrentTab challenges-tab :locloc :challengeschallenges :challenge-datachallengeDailyData :in-gamefalse @chlgRerollchallengeReroll>/player-challenge-list> !-- newsfeed-panel v-showcurrentTab news-tab idnews_scroll classmedia-tab-scroll refnewsScroll :itemsnewsItems >/newsfeed-panel> --> media-panel v-showcurrentTab news-tab idnews_scroll classmedia-tab-scroll :itemsnews typenews :locloc>/media-panel> media-panel v-showcurrentTab twitch-tab idnews_scroll classmedia-tab-scroll :itemstwitch typetwitch :locloc>/media-panel> media-panel v-showcurrentTab video-tab idnews_scroll classmedia-tab-scroll :itemsyouTube typeyoutube :locloc>/media-panel> !-- streamer-panel v-showcurrentTab twitch-tab idtwitch_panel :locloc :streamstwitchStreams :titleloc.twitch_title :viewersloc.twitch_viewers iconico_twitch>/streamer-panel> --> /div> /div> !-- #news-tab --> /div> !-- .media-tabs-content --> /div> !-- .media-tabs-container --> /div>/script>template idplayer_challenge_list> div classplayer-challenges-aside box_relative bg_blue6 :classwrapStyle> div v-ifinGame classmedia-tab-container media-tab-challenges display-grid align-items-center gap-sm bg_blue3> div classdynamic-text stylewidth: 12.5em;> h4 classcommon-box-shadow text-shadow-black-40 text_white dynamic-text>{{ loc.challenges }}/h4> /div> p classtext_yellow_bright font-nunito font-800 justify-self-end text-shadow-black-40 nospace> i v-showhasChlgs classfar fa-clock>/i> span v-show!hasChlgs classfont-size-md>No challenges!/span> span v-ifhasChlgs>{{ challengeData.hours }}:{{ challengeData.minutes }}:{{ challengeData.seconds }}/span> /p> /div> div classnews-container f_row> section classplayer-challenges-container overflow-hidden> player-challenge v-forchallenge in challenges :keychallenge.challengeId :locloc :datachallenge :timerstimers @chlg-rerollchallengeReroll>/player-challenge> /section> /div> /div>/template>script idplayer_challenge typetext/x-template> div classplayer-challenge-single box_relative display-flex align-items-center f_row> div v-ifcompleted classcheckmark-wrap> icon nameico-checkmark>/icon> /div> div classplayer-chal lenge-single-wrap ss_paddingright ss_paddingleft display-grid grid-column-1-2 align-items-center gap-sm fullwidth> div refcontent classplayer-challenge-single-content> header> div reftitle classnospace dynamic-title stylewidth: 100%; height: 1em> h4 classplayer-challenge-single-name font-size-lg nospace text_blue5 line-height-1 dynamic-text>{{ title }}/h4> /div> div refdesc classnospace dynamic-title stylewidth: 100%; height: 1em> p classnospace text_yellow_bright font-size-lg font-nunito dynamic-text>{{ desc }}/p> /div> /header> div v-show!data.claimed classplayer-challenge-single-progress display-grid grid-column-2-1 align-items-center> div classplayer-challenge-single-progress-wrap roundme_md bg_blue5> div classplayer-challenge-single-progress-bar bg_yellow roundme_md :style{ width: progress + % }>/div> !-- div classplayer-challenge-single-progress-bar bg_yellow roundme_md stylewidth: 10%>/div> --> /div> div classfont-size-md ss_marginleft_sm text_blue5 font-800> {{ trueProgress }}/{{ getGoal }} /div> /div> div classdisplay-grid grid-column-2-eq align-items-center> div classplayer-challenge-single-reward text-shadow-black-40 display-grid align-items-center grid-column-auto-1 gap-sm> img srcimg/svg/ico_goldenEgg.svg> {{ reward }} /div> div classplayer-challenge-single-action justify-self-end margin-0 box_relative :classactionState> div v-showshowActionBtn classplayer-challenge-tool-tip box_relative> div classtool-tip> button classss_button pause-screen-ui margin-0 player-challenge-single-action-btn :disabledonRerollClicked :classactionBtnStyle @clickonActionBtnClick>i v-show!data.reset && !completed classfas fa-sync-alt>/i> span>{{ actionBtnContent }}/span>/button> span v-if!completed classtool-tip-text>{{ loc.challenges_reroll }}/span> /div> /div> div v-showactionContentShow> p classnospace text_blue3 player-challenge-claimed>{{ actionBtnContent }}/p> /div> /div> /div> /div> figure classplayer-challenge-single-icon nospace f_row align-items-center> img :srcimgSrc classdisplay-block center_h alt> /figure> !-- div>Completion indicatior/div> --> /div> /div>/script>script>const CompPlayerChallengeSingle { template: #player_challenge, props: loc, data, timers, data () { return { now: 0, diff: 0, end: 0, minutes: 0, seconds: 0, hours: 0, days: 0, gap: 0, timerDisplay: , reward: 0, reset: 0, goal: 0, period: 0, locRef: , type: , subType: , challengeData: , onClaimClicked: false, onRerollClicked: false, conditional: , value: null, valueTwo: null, } }, mounted() { this.now Math.trunc((Date.now()/1000)); this.end this.now + this.data.period; const dbData extern.Challenges.filter(chlg > chlg.id this.data.challengeId)0; this.reward dbData.reward; this.goal dbData.goal; this.period dbData.period; this.locRef dbData.loc_ref; this.value dbData.value; this.valueTwo dbData.valueTwo; if (dbData.conditional ! null) { this.conditional ChallengeConditionsdbData.conditional; } this.type ChallengeTypedbData.type; this.subType ChallengeSubTypedbData.subType; setInterval(this.timer, 1000); }, methods: { onActionBtnClick(e) { if (!this.data.reset && !this.completed) { if (!this.onRerollClicked) { this.onRerollClicked true; BAWK.play(ui_reset); this.$emit(chlg-reroll, this.data.challengeId); // this.$emit(chlgReroll, this.data.challengeId); } } else { if (!this.onClaimClicked) { this.onClaimClicked true; BAWK.play(pickup); extern.playerChallenges.claim(this.data.challengeId); } } }, timer() { this.gap Math.floor(this.end - (Math.trunc(Date.now()/1000))); if (this.gap 0) { this.gap 0; this.progress 100; } let hoursLeft 0; let minutesLeft 0; this.days Math.floor(this.gap/24/60/60); hoursLeft Math.floor((this.gap) - (this.days*86400)); this.hours this.timeFormat(Math.floor(hoursLeft/3600)); minutesLeft Math.floor((hoursLeft) - (this.hours*3600)); this.minutes this.timeFormat(Math.floor(minutesLeft/60)); this.seconds this.timeFormat(this.gap % 60); }, timeFormat(time) { return time 10 ? 0 + time : time; }, resizeTextToFit(container, maxFontSize) { const text container.querySelector(.dynamic-text); const containerWidth container.clientWidth; const containerHeight container.clientHeight; let fontSize maxFontSize; // Start with a base font size in em text.style.fontSize fontSize + em; // Increase font size until it overflows while (text.scrollWidth containerWidth && text.scrollHeight containerHeight) { fontSize + 0.1; if (fontSize > maxFontSize) { fontSize - 0.1; break; } text.style.fontSize fontSize + em; } // Step back to last valid font size fontSize - 0.1; text.style.fontSize fontSize + em; // Fine-tune decrease to avoid overflow while (text.scrollWidth > containerWidth || text.scrollHeight > containerHeight) { fontSize - 0.01; text.style.fontSize fontSize + em; if (fontSize 0.5) break; // Prevent the font size from becoming too small } }, dynamicChallengeText() { setTimeout(() > { this.resizeTextToFit(this.$refs.title, .9); this.resizeTextToFit(this.$refs.desc, .75); }, 100); } }, computed: { title() { this.dynamicChallengeText(); return this.locthis.locRef + _title; }, desc() { return this.locthis.locRef + _desc; }, imgSrc() { return extern.playerChallenges.iconSrc(this.locRef); }, progress() { const p Math.floor((this.data.progress/this.data.goal)*100); return p > 100 ? 100 : p; }, completed() { return this.data.progress > this.data.goal || this.data.completed; // return true; }, showActionBtn() { if (this.data.claimed || (this.data.reset && this.completed && this.data.claimed) || (this.data.reset && !this.completed)) { return false; } else { return true; } }, actionBtnStyle() { if (!this.completed && !this.data.claimed) { return btn_blue bevel_blue box_relative text-shadow-none text_blue1 btn_sm; } else if (this.completed && !this.data.claimed) { return btn_pink bevel_pink box_relative text-shadow-none text_white btn_sm; } }, actionContentShow() { return this.data.reset && !this.completed || this.data.claimed && this.completed; }, actionBtnContent() { if (this.completed && !this.data.claimed) { return this.loc.claim; } else if (this.completed && this.data.claimed) { return this.loc.claimed; } else if (!this.completed && !this.data.claimed && this.data.reset) { return ; } }, trueProgress() { let p, gc_mem_caches; if (this.subType timePlayed && this.type ! kills) { p Math.floor(this.data.progress / 60); g Math.floor(this.data.goal / 60); } else { p this.data.progress; g this.data.goal; } return p > g ? g : p; }, actionState() { if (this.data.claimed) { return player-challenge-single-action-claimed; } else if (this.data.reset && this.completed) { return player-challenge-single-action-completed; } }, timerData() { if (this.subType timePlayed) { return this.timers.played; } else if (this.subType timeAlive) { return this.timers.alive; } }, getGoal () { if (this.subType timePlayed && this.type ! kills) { return Math.floor(this.data.goal / 60) + m; } else { return this.data.goal; } } },};/script>script>const CompPlayerChallengeList { template: #player_challenge_list, components: { player-challenge: CompPlayerChallengeSingle, }, props: loc, challenges, challengeData, timers, inGame, data () { return { chlgsBeforeReroll: , chlgRerollID: null, } }, mounted() { }, methods: { challengeReroll(challengeId) { this.chlgRerolled challengeId; this.chlgsBeforeReroll this.challenges; extern.playerChallenges.reroll(challengeId); }, }, computed: { hasChlgs() { return Array.isArray(this.challenges) && this.challenges.length > 0 ? true : false; }, wrapStyle() { if (this.inGame) { return border-blue5 roundme_sm common-box-shadow; } else { return home-screen; } } }, watched: { challenges(newChallenges) { if (this.chlgRerolled && this.chlgsBeforeReroll.length > 0 && this.chlgRerollID ! null) { const oldChallenges this.chlgsBeforeReroll; // Find the new challenge that is not in the old challenges const newChallenge newChallenges.find(newChlg > !oldChallenges.some(oldChlg > oldChlg.id newChlg.id) ); if (newChallenge) { // Find the index of the missing challenge in the old data using chlgRerollID const missingChallengeIndex oldChallenges.findIndex(oldChlg > oldChlg.id this.chlgRerollID); if (missingChallengeIndex ! -1) { // Create a new array maintaining the original order const updatedChallenges ...oldChallenges; updatedChallenges.splice(missingChallengeIndex, 1, newChallenge); this.challenges updatedChallenges; } } this.chlgsBeforeReroll ; this.chlgRerollID null; } else { this.challenges newChallenges; } } }};/script>script idmedia-panel typetext/x-template> section classmedia-panel news-panel> component :istype v-for(item, idx) in items :itemitem :keyidx :locloc>/component> div classno-stream roundme_sm v-ifitems.length 1 && type twitch> p v-htmlloc.twitch_no_steam>/p> /div> div classf_row v-ifshowNav> button classss_button btn_sm btn_yolk bevel_yolk btn_media-nav text_blue5 @clickbackItem> i classfas fa-chevron-left>/i> /button> button classss_button btn_sm btn_yolk bevel_yolk btn_media-nav text_blue5 @clicknextItem> i classfas fa-chevron-right>/i> /button> span>({{currentSpot}} / {{ maxSpot }})/span> /div> /section>/script>script idnews-content typetext/x-template> article @clickonItemThatIsClicked classmedia-item news_item clickme media-item-border> img :srcimageSrc classnews_img roundme_sm> p>{{ item.content }}/p> /article>/script>script>var NewsContent { template: #news-content, props: { item: { type: Object, default: () > { return { title: , content: , id: , imageExt: , } } }, }, methods: { onItemThatIsClicked() { console.log(this.item); extern.clickedWebFeedItem(this.item); BAWK.play(ui_click); }, }, computed: { imageSrc() { return dynamicContentPrefix + data/img/newsItems/ + this.item.id + this.item.imageExt; }, }};/script>script idstreamer-panel-template typetext/x-template> div classpanel_streamer noscroll media-item-border> div idstream_scroll v-ifitem.name> div classmedia-item stream_item clickme> a :hrefitem.link target_blank classf_row> img :srcitem.image classstream_img roundme_sm ss_marginright> span> p classstream_name>{{ item.name }}/p> p v-ifitem.viewers classstream_viewers>{{ item.viewers }} Viewers/p> /span> /a> /div> /div> div classno-stream roundme_sm v-if!item.name> p v-htmlloc.twitch_no_steam>/p> /div> /div>/script>script> var comp_streamer_panel { template: #streamer-panel-template, props: { item: { type: Object, default: () > { return { name: , viewers: , link: , image: , } } }, loc: { type: Object, default: () > { return { twitch_no_steam: , } } } }, methods: { playSound (sound) { BAWK.play(sound); } } };/script>script idyoutube-content-template typetext/x-template> article @clickonVideoClick() classmedia-item ytube-item clickme media-item-border> div classimage-wrap news_img roundme_sm> img :srcimgSrc alt classnews_img /> /div> div classcontent-wrap f_col f_space_between> p>{{ item.title }}/p> p v-ifitem.desc>{{ item.desc }}/p> p classtext-right>{{ item.author }}/p> /div> /article>/script>script>var YoutubeContent { template: #youtube-content-template, props: { item: { type: Object, default: () > { return { title: , desc: , author: , link: , externalImg: , } } }, }, data: function () { return { }; }, methods: { onVideoClick() { ga(send, creator, videoClick, this.item.title); window.open(this.item.link, _window); }, }, computed: { imgSrc() { if (this.item.externalImg.includes(hqdefault)) { return this.item.externalImg.replace(hqdefault, mqdefault); } return this.item.externalImg; }, }, watch: { item: function (newVal, oldVal) { console.log(newVal, newVal); console.log(oldVal, oldVal); } }};/script>script>var CompMediaPanel { template: #media-panel, components: { news: NewsContent, twitch: comp_streamer_panel, youtube: YoutubeContent, }, props: { items: { type: Array, default: () > }, type: { type: String, default: }, loc: { type: Object, default: {} }, }, data: function () { return { currentIdx: 0, maxIdx: 0, showNav: false, }; }, methods: { nextItem() { if (this.maxIdx this.currentIdx) { this.currentIdx 0; } else { this.currentIdx ++; } }, backItem() { if (this.currentIdx 0) { this.currentIdx this.maxIdx; } else { this.currentIdx --; } } }, computed: { showItem() { return this.itemsthis.currentIdx; }, showNews() { return this.type news; }, showTwitch() { return this.type twitch; }, showYoutube() { return this.type youtube; }, currentSpot() { return this.currentIdx + 1; }, maxSpot() { return this.maxIdx + 1; } }, watch: { // items: function(val) { // if (val.length > 0) { // this.showNav true; // this.maxIdx this.items.length - 1; // } // } }};/script>script> const MEDIATABS { template: #media-tabs-template, components: { player-challenge-list: CompPlayerChallengeList, media-panel: CompMediaPanel }, props: loc, newsfeedItems, twitchStreams, youtubeStreams, challenges, challengeDailyData, firebaseId, mounted() { // this.autoRotateTabs(); const tabs document.querySelector(.news-container); tabs.addEventListener(mouseenter, (e) > { clearTimeout(this.rotateTimeout); }); this.$nextTick(() > { this.fetchJson(); }); this.randomTabSelect(); this.autoRotateTabs(); }, data: function () { return { mediaTabs: { id: news-tab, name: News, icon: fas fa-bullhorn }, { id: twitch-tab, name: Twitch, icon: fab fa-twitch }, { id: video-tab, name: YouTube, icon: fab fa-youtube } , news: , twitch: , youTube: , delay: 7000, rotateTimeout: , currentTab: news-tab, challenge: , chlg: { now: 0, diff: 0, end: 0, minutes: 0, seconds: 0, hours: 0, days: 0, gap: 0, timerDisplay: , reward: 0, reset: 0, goal: 0, period: 0, locRef: , challengeDailyData: , newRequest: false, timer: null } } }, methods: { fetchJson() { extern.requestJson(data/shellNews.json, (data) > { if (crazyGamesActive) { const newNews this.data.filter((item, idx) > { if (item.hideOnCrazyGames ! null && item.hideOnCrazyGames) { return false; } else { return true; } }); this.news newNews; } this.news data; }); extern.requestJson(data/shellYouTube.json, (data) > this.youTube data); extern.requestJson(data/twitchStreams.json, (streams) > { streams.sort((a, b) > { return b.viewers - a.viewers; }); let streamsArray streams.map(stream > { return { name: stream.name, viewers: stream.viewers, link: https://twitch.tv/ + stream.name, image: dynamicContentPrefix + data/img/twitchAvatars/ + stream.avatar } }) this.twitch streamsArray; }); }, selectTab: function (id, playSound) { this.currentTab id; extern.playerChallenges.resizeAllText(); }, cancelRotate() { clearTimeout(this.rotateTimeout); this.autoRotateTabs(); }, rotateTab() { let currentIdx this.mediaTabs.findIndex(tab > tab.id this.currentTab); if (currentIdx + 1 > this.mediaTabs.length - 1) { this.selectTab(this.mediaTabs0.id); } else { this.selectTab(this.mediaTabscurrentIdx + 1.id); } // start the countdown again this.autoRotateTabs(); }, autoRotateTabs() { if (this.currentTab challenges-tab) { var delay 14000; } else { var delay this.delay; } this.rotateTimeout setTimeout(() > this.rotateTab(), delay); }, onTabClicked(id) { this.selectTab(id); //click cancels the rotation and restarts it this.cancelRotate(); ga(send, event, media-tabs, click, id); BAWK.play(ui_toggletab); }, randomTabSelect() { this.selectTab(this.mediaTabsMath.floor(Math.random() * this.mediaTabs.length).id); }, timeFormat(time) { return time 10 ? 0 + time : time; }, timer() { this.chlg.gap Math.floor(this.end - (Math.trunc(Date.now()/1000))); if (this.chlg.gap 0) { this.chlg.gap 0; if (!this.newRequest) { this.newRequest true; clearInterval(this.chlg.timer); this.chlg.timer null; extern.playerChallenges.getNew(); } } let hoursLeft 0; let minutesLeft 0; this.chlg.days Math.floor(this.chlg.gap/24/60/60); hoursLeft Math.floor((this.chlg.gap) - (this.chlg.days*86400)); this.chlg.hours this.timeFormat(Math.floor(hoursLeft/3600)); minutesLeft Math.floor((hoursLeft) - (this.chlg.hours*3600)); this.chlg.minutes this.timeFormat(Math.floor(minutesLeft/60)); this.chlg.seconds this.timeFormat(this.chlg.gap % 60); }, challengeReroll(id) { extern.playerChallenges.reroll(id); }, // Adds the Challenges tab if it doesnt exist addChallengesTab() { const exists this.mediaTabs.find(tab > tab.id challenges-tab); if (!exists) { this.mediaTabs.unshift({ id: challenges-tab, name: Challenges, icon: fas fa-trophy }); } }, // Removes the Challenges tab if it exists removeChallengesTab() { this.mediaTabs this.mediaTabs.filter(tab > tab.id ! challenges-tab); }, }, computed: { tabName() { switch (this.currentTab) { case news-tab: return this.loc.home_latestnews; break; case twitch-tab: return Twitch break; case video-tab: return YouTube break; case challenges-tab: return this.loc.challenges; break; default: break; } }, newsItems() { // crazyGamesActive true; if (crazyGamesActive) { const newNews this.newsfeedItems.filter((item, idx) > { if (item.hideOnCrazyGames ! null && item.hideOnCrazyGames) { return false; } else { return true; } }); return newNews; } return this.newsfeedItems; }, hasChlgs() { return Array.isArray(this.challenges) && this.challenges.length > 0 ? true : false; }, tabContentStyle() { if (this.currentTab ! challenges-tab) { return ss_paddingright ss_paddingleft; } }, newsContainerStyle() { if (this.currentTab challenges-tab) { return overflow-hidden; } else { return v_scroll; } } }, watch: { firebaseId(val) { if (val) { this.addChallengesTab(); this.selectTab(challenges-tab); this.cancelRotate(); } else { this.removeChallengesTab(); this.randomTabSelect(); } }, challenges(val) { if (val.length > 0) { this.$nextTick(() > { const challengeHeight this.$refs.newsContainer.querySelector(.player-challenges-container); if (challengeHeight ! null) { const computedStyle window.getComputedStyle(this.$refs.newsContainer); const baseFontSize parseFloat(computedStyle.fontSize); const heightInPixels challengeHeight.clientHeight; const heightInEms heightInPixels / baseFontSize; this.$refs.newsContainer.style.height heightInEms + em; } }); } } } };/script>template idmusic-widget> div v-ifisMusic classmusic-widget roundme_md :class!show ? hideClass : > div v-iftheAudio classmusic-widget--wrapper flex flex-nowrap> figure classmusic-widget--content> header class roundme_md> h3 classmusic-widget--now-playing>{{ loc.musicwidget_now_playing }}/h3> /header> figcaption classmusic-widget--content-wrapper> h4 classmusic-widget--album-title>{{ serverTracks.artist }}/h4> /figcaption> figcaption classmusic-widget--content-wrapper> p v-ifserverTracks.url classmusic-widget--song-title>a @clickgaSendEvent(click-track, getTitleAlbum) :hrefserverTracks.url :titletheTitleAttr target_blank>{{ getTitleAlbum }}/a>/p> p v-else classmusic-widget--song-title>{{ getTitleAlbum }}/p> /figcaption> div v-ifvolumeSlider v-fort in settingsUi.adjusters.music classmusic-widget--volume-control nowrap> slider-component :locloc :loc-keyt.locKey :control-idt.id :control-valuet.value :mint.min :maxt.max :stept.step :multipliert.multiplier @setting-adjustedvolumeControl>/slider-component> /div> /figure> div classmusic-widget--cover-image music-widget--cover-controls roundme_md> template v-ifserverTracks.url> a v-ifserverTracks.albumArt @clickgaSendEvent(click-albumArt, getTitleAlbum) :hrefserverTracks.url :titletheTitleAttr classss-absolute target_blank>img :srcserverTracks.albumArt classroundme_md ss-absolute :altserverTracks.album />/a> /template> template v-else> img v-ifserverTracks.albumArt :srcserverTracks.albumArt classss-absolute roundme_md altAlbum cover art for :altserverTracks.album /> /template> button v-ifplayBtn @clickplayAudio> i v-ifplaying classmusic-widget--cover-control-icon music-widget--cover-control-pause far fa-pause-circle fa-2x>/i> i v-if!playing classmusic-widget--cover-control-icon music-widget--cover-control-pause far fa-play-circle fa-2x>/i> /button> /div> div classmusic-widget--sponsor> a @clickgaSendEvent(click-sponsor, sponsor.name) v-ifsponsor :hrefsponsor.link :titlegetSponsorTitleAttr target_blank>img :srcgetSponsorImg classmusic-widget--sponsor-icon :altsponsor.name />span classhideme>{{sponsor.name}}/span>/a> button v-ifsettings @clickopenSettings classmusic-widget--sponsor--settings-btn>i classfas fa-cog>/i>span classhideme>Music Settings/span>/button> button classmusic-widget--sponsor--settings-btn @clicktoggleMusic>i classfas aria-hiddentrue :classtogglePlayStopIcon>/i>span classhideme>Music/span>/button> /div> /div> /div>/template>script> const createMusicWidget templateId > { return { template: #music-widget, props: loc,volumeSlider, playBtn, settings, settingsUi, show, components: { slider-component: comp_settings_adjuster }, data () { return vueData.music; }, mounted () { this.theAudio document.getElementById(theAudio); }, methods: { loadVolume() { this.$nextTick(() > { this.theAudio.volume Number(this.settingsUi.adjusters.music0.value); }); }, getAudioServer() { if (parsedUrl.dom localhost || parsedUrl.dom dev || parsedUrl.dom localshelldev) { var url uswest2-music.shellshock.io; } else { var server vueApp.regionList.filter(server > region.locKey vueApp.currentRegionLocKey)0; var url server.subdom.slice(0, -1) + -music. + parsedUrl.dom + . + parsedUrl.top; } this.musicSrc https:// + url + /shellshock.ogg; }, setIndex(k) { this.$nextTick(() > { this.play(); }) this.currIndex k; }, play() { if (!this.isMusic) return; this.getAudioServer(); }, playMusic() { // var audio this.theAudio; this.theAudio.src this.musicSrc; console.log(Play Music); clearInterval(this.timer); this.theAudio.play() .then( // Returns a Promise () > { // Success this.playing true; this.loadVolume(); this.duration this.theAudio.duration; this.theAudio.addEventListener(stalled, () > this.isMusic false); }, () > { // Fail // What to do... just try again after a few seconds, I guess? setTimeout(() > this.play(), 2000); } ); }, pause() { this.playing false; this.theAudio.pause(); clearInterval(this.timer); }, /* next() { if (this.currIndex this.tracks.length - 1) { this.currIndex++; } else { this.currIndex 0; } }, prev() { if (this.currIndex > 0) { this.currIndex--; } else { this.currIndex this.tracks.length - 1; } }, */ playOnce() { if (this.playing) return; return this.play(); }, playAudio() { if (this.theAudio.paused) { this.play(); } else { this.pause(); } }, openSettings() { vueApp.showSettingsPopup(); vueApp.onSettingsPopupSwitchTabMisc(); this.gaSendEvent(click, widgetOpenSettings); }, volumeControl(id, value) { extern.setMusicVolume(value); vueApp.onSettingsQuickSave(); }, hideMe() { return this.$refs.id.classList.addClass(fade-out-3); }, showMe() { this.show true; setTimeout(() > this.show false, 2000); }, gaSendEvent(action, label) { action action || ; label label || ; return ga(send, event, music, action, label); }, toggleMusic() { if (this.playing) { this.theAudio.removeEventListener(stalled, () > this.isMusic false); this.playing false; this.pause(); this.musicSrc ; this.theAudio.removeAttribute(src); extern.setMusicStatus(false); this.gaSendEvent(toggleMusic, off); return; } this.theAudio.src ; this.play(); extern.setMusicStatus(true); this.gaSendEvent(toggleMusic, on); }, changeVolume(val) { this.theAudio.volume val; } }, watch: { currIndex: { handler() { this.$nextTick(() > { this.play(); }) } }, serverTracks(val) { let sponsor this.sponsors.filter(sponsor > sponsor.id val.sponsor); this.sponsor sponsor.length || sponsor.length > 0 ? sponsor0 : ; }, musicSrc(val) { if (val) { this.playMusic(); } }, }, computed: { theTitleAttr() { return Read more about + this.serverTracks.title; }, getTitleAlbum() { return this.serverTracks.title + - + this.serverTracks.album; }, getSponsorImg() { if (!this.sponsor) { return; } return data/img/sponsor/ + this.sponsor.id + this.sponsor.imageExt; }, getSponsorTitleAttr() { return See more about our sponsor + this.sponsor.name; }, togglePlayStopIcon() { return this.playing ? fa-stop-circle : fa-play-circle; }, }, }; }; // Register component globally Vue.component(music-widget, createMusicWidget(#music-widget));/script>script idmain-sidebar-template typetext/x-template> div idscreens-menu v-ifisGamePaused classscreens-menu box_relative> !-- logo --> div idlogo classbox_relative> a hrefhttps://www.shellshock.io @clickonLogoClick>img classhome-screen-logo :srclogo @clickonLogoClick>/a> !-- img v-ifeggOrg classegg-org-logo srcimg/egg-org/logo_EggOrg.svg> --> button v-ifinGame && currentScreen ! screens.game classss_button btn_md btn_green bevel_green box_relative box_absolute screens-menu-btn-return f_row align-items-center gap-sm justify-content-center text-uppercase @clickonBackClick>{{ loc.p_pause_game_on }} icon classfill-white shadow-filter nameico-backToGame>/icon>/button> /div> div classbox_relative> player-name v-ifcurrentScreen screens.home :locloc :player-nameplayerName :picked-game-typepickedGameType :current-screencurrentScreen :screensscreens>/player-name> !-- main-menu --> div idmain-menu classmain-menu box_relative :class{is-home-screen : currentScreen screens.home}> menu classnospace> ul classnospace text-left list-no-style display-grid gap-sm> menu-item v-for(item, idx) in menuItems :locloc :keyidx :itemitem :current-screencurrentScreen :screensscreens :modemode :currentModecurrentMode :is-pausedinGame @previous-screenpreviousScreen>/menu-item> /ul> /menu> /div> /div> /div> !-- main-sidebar -->/script>script idmain-menu-item typetext/x-template> li :classlistCls>button classfullwidth main-menu-button text-left font-sigmar roundme_sm text-uppercase box_relative f_row align-items-center @clickonMenuItemClick :classitemCls> svg classcentered xmlnshttp://www.w3.org/2000/svg viewBox0 0 356.331 71>path dM293.124 71H4V9h340.08c11.045 0 16.429 13.48 8.42 21.084L321.213 59.79A40.795 40.795 0 0 1 293.123 71Z stylefill-rule:evenodd;fill:#1192bc;opacity:.5/>path classmain-nav-item-bg dM289.124 64H2V2h338.08c11.045 0 16.429 13.48 8.42 21.084L317.213 52.79A40.795 40.795 0 0 1 289.123 64Z stylestroke-miterlimit:10;stroke-width:4px;fill-rule:evenodd/>/svg> icon :namegetIcon classmenu-icon>/icon> {{ loclocKey }} /button>/li>/script>script idchw-bubble-template typetext/x-template> div refchw-home-timer v-show!isPoki && firebaseId classchw-home-timer display-grid grid-column-1-2 align-items-center box_absolute gap-1 :classchwHomeTimerCls> div> img classchw-home-timer-chick :srcchwChickSrc> /div> div classdisplay-grid align-items-center bg_white chw-circular-timer-container box_relative :classchwClass> div v-showchwShowTimer classchw-home-screen-timer>/div> !-- #chw-circular-timer-outer --> div> p classchw-circular-timer-countdown nospace> span classchw-pie-remaining text-center chw-msg chw-r-msg>{{ remainingMsg }}/span> span v-showchwShowTimer classchw-pie-num chw-pie-hours>/span>span v-showchwShowTimer classchw-pie-num chw-pie-mins>/span>span v-showchwShowTimer classchw-pie-num chw-pie-secs>/span> /p> button v-ifready && !hasChwPlayClicked && !error classss_button btn_sm btn_yolk bevel_yolk @clickplayIncentivizedAd>{{ playAdText }}/button> /div> /div> /div> !-- .chw-home-timer -->/script>script>var COMPCHWBUBBLE { template: #chw-bubble-template, components: { }, props: loc, isPoki, firebaseId, limitReached, ready, error, counter, hasChwPlayClicked, imgs, data: function() { return { } }, methods: { showNuggyPopup() { vueApp.showChicknWinnerPopup(); }, playIncentivizedAd(e) { if (this.showAdBlockerVideoAd) { return; } if (!this.ready || this.hasChwPlayClicked) { e.preventDefault(); return; } ga(send, event, Chickn Winner, Free eggs btn, click-home); this.hasChwPlayClicked true; vueApp.loadNuggetVideo(); vueApp.chicknWinnerNotReady(); }, // needs emit chwShowCycle() { this.chwHomeEl document.querySelector(.chw-home-timer); if (this.chwHomeEl) { this.chwHomeTimer setInterval(() > { this.chwHomeEl.classList.toggle(active); }, this.chwActiveTimer); } }, }, computed: { playAdText() { if (this.ready && this.counter 0) { return this.loc.chw_btn_free_reward; } else { return this.loc.chw_btn_free_reward; } }, chwClass() { if (this.limitReached || this.error) { return grid-column-1-eq; } else { if (this.ready) { return grid-column-1-eq; } else { return grid-column-1-2; } } }, chwHomeTimerCls() { //{chw-home-screen-max-watched: limitReached} if (this.limitReached) { return chw-home-screen-max-watched; } else { if (this.ready) { return is-ready active; } else { return not-ready; } } }, chwChickSrc() { if (this.limitReached || this.error) { return img/chicken-nugget/chickLoop_daily_limit.svg; } else { if (!this.ready) { return img/chicken-nugget/chickLoop_sleep.svg; } else { return img/chicken-nugget/chickLoop_speak.svg; } } }, chwShowTimer() { if (this.limitReached) { // this.chwStopCycle(); return false; } else { if (this.ready) { this.chwShowCycle(); return false; } else { // this.chwStopCycle(); return true; } } }, remainingMsg() { if (this.error) { return this.loc.chw_error_text; } if (this.limitReached && this.counter > 0) { return this.loc.chw_daily_limit_msg; } if (this.ready) { if (this.counter 0) { return this.loc.chw_ready_msg; } else { return this.loc.chw_cooldown_msg; } } else { return this.loc.chw_time_until; } }, progressBarWrapClass() { if (this.ready) { return chw-progress-bar-wrap-complete; } }, }, watch: { }};/script>script>const MainMenuItem { template: #main-menu-item, props: loc, item, currentScreen, screens, mode, currentMode, isPaused, data: function() { return { inGame: false } }, methods: { onMenuItemClick() { if (this.item.screen this.currentScreen && !this.item.mode) { return; } this.$emit(previous-screen, this.currentScreen); switch (this.item.screen) { case this.screens.home: if (!extern.inGame) { if (this.currentScreen this.screens.equip) { vueApp.onBackClick(); } vueApp.switchToHomeUi(); } else { vueApp.onHomeClicked(); ga(send, event,respawn-popup, click, quit); } break; case this.screens.equip: // this should only show once a day setTimeout(() > vueApp.showChickenPopup(), 500); if (this.item.mode.includes(this.mode.inventory)) { ga(send, event, extern.inGame ? respawn-popup : home, click, inventory); vueApp.openEquipSwitchTo(this.mode.inventory); } else { ga(send, event, extern.inGame ? respawn-popup : home, click, shop); vueApp.openEquipSwitchTo(this.mode.shop); } if (extern.inGame) { setTimeout(() > { extern.resize(); }, 200); } break; case this.screens.profile: if (this.currentScreen this.screens.equip) { vueApp.onBackClick(); } ga(send, event, extern.inGame ? respawn-popup : home, click, profile); vueApp.switchToProfileUi(); break; case this.screens.photoBooth: vueApp.switchToPhotoBoothUi(); break; default: break; } }, // showOn(item) { // if (item.locKey account_title_home && extern.inGame) { // return false; // } else { // return item.showOn.alwasyOn || (!item.showOn.alwasyOn && item.showOn.screen this.currentScreen); // } // } }, computed: { locKey() { if ((this.isPaused) && this.item.locKey account_title_home) { return p_pause_quit; } else { return this.item.locKey; } }, iconCls() { return `${this.item.icon}`; }, listCls() { return `${this.locthis.item.locKey.toLowerCase().replace(/\s/g, ) + -menu-item}` }, getIcon() { return `${this.item.icon}`; }, itemCls() { if (this.item.mode.length 0) { if (this.item.screen this.currentScreen) { return current-screen; } } else if (this.item.mode.includes(this.currentMode) && this.item.screen this.currentScreen) { return current-screen; } }, }, watch: { currentScreen() { this.inGame extern.inGame; } }};/script>script idplayer-name-input typetext/x-template> input idplayer-name namename :valueplayerName v-bind:placeholderloc.play_enter_name @changeonNameChange($event) v-on:keyuponPlayerNameKeyUp($event) :classcls>/script>script>const PlayerNameInput { template: #player-name-input, props: loc, playerName, pickedGameType, currentScreen, screens, data: function() { return { } }, methods: { onNameChange (event) { console.log(name changed to: + event.target.value); console.log(play name event handler); vueApp.setPlayerName(event.target.value); BAWK.play(ui_onchange); }, onPlayerNameKeyUp (event) { event.target.value extern.filterUnicode(event.target.value); event.target.value extern.fixStringWidth(event.target.value); event.target.value event.target.value.substring(0, 128); // Send username to server to start the game! if (event.code Enter || event.keyCode 13) { if (vueData.playerName.length > 0) { if (vueData.playerName.length > 0) { vueApp.externPlayObject(vueData.playTypes.joinPublic, this.pickedGameType, this.playerName, -1, ); } } } }, }, computed: { cls() { return this.currentScreen this.screens.profile ? font-sigmar text-shadow-black-40 text_white box_relative profile-name : box_absolute ss_field font-nunito ss_name; } }};/script>script>var COMPMAINSIDE { template: #main-sidebar-template, components: { menu-item: MainMenuItem, player-name: PlayerNameInput }, props: loc, playerName, menuItems, currentScreen, screens, mode, currentMode, inGame, isGamePaused, pickedGameType, data: function() { return { itemSelected: 0, logo: shellLogo, } }, methods: { onLogoClick(e) { if (extern.inGame) { e.preventDefault(); return; } BAWK.play(ui_click) }, onBackClick() { if (this.currentScreen this.screens.equip) { vueApp.onBackClick(); } setTimeout(() > { extern.resize(); }, 1); vueApp.hideTitleScreenAd(); vueApp.switchToGameUi(); vueApp.showGameMenu(); }, previousScreen(screen) { this.$emit(previous-screen, screen); } },};/script>script idprofile-screen-template typetext/x-template> div idmainLayout classprofile-content-wrap> section classprofile-page-content roundme_sm ss_marginright bg_blue6 common-box-shadow> section classdisplay-grid grid-column-2-eq paddings_xl bg_blue3 gap-sm> header classf_row align-items-center> section> h1 classtext-shadow-black-40 text_white nospace>{{ playerName }}/h1> !-- player-name :locloc :player-nameplayerName :picked-game-typecurrentGameType :current-screenshowScreen :screensscreens>/player-name> --> !--button v-ifshowTwitchEvent classss_button btn-twitch bevel_twitch justify-content-center btn_sm box_relative f_row gap-sm align-items-center @clickonTwitchDropsClick>i aria-hiddentrue classfab fa-twitch>/i> {{ isTwitchLinked }}/button>--> /section> /header> aside classjustify-self-end text-right> p classaccount-create-date nospace text_white opacity-7 v-htmlaccountStatus>/p> button idaccount-button @clickonAccountBtnClicked classss_button btn_md font-800 :classaccountBtnCls>{{ accountBtnTxt }}/button> /aside> /section> section classprofile-stat-wrap center_h paddings_xl box_relative> div v-ifui.game.stats.loading classstats-loading box_absolute> strong>span classtext_blue5 font-size-md text-uppercase>Stats loading... i classfas fa-spinner fa-spin>/i>/span>/strong> /div> stats-content :locloc :stats-monthlystatsCurrent :stats-lifetimestatsLifetime :kdrLifetimekdrLifetime :showLifetimeui.profile.statTab :eggs-spenteggsSpent :eggs-spent-monthlyeggsSpentMonthly :challenges-claimedclaimed>/stats-content> /section> /section> small-popup idloginPopupWarning refloginPopupWarning @popup-confirmonQuitAndLoginManage> template slotheader>{{ loc.feedback_account_deletion_title }}/template> template slotcontent> div>{{ loginPopupWarningTxt }}/div> /template> template slotcancel>{{ loc.no }}/template> template slotconfirm>{{ loc.yes }}/template> /small-popup> /div> !-- .main-content -->/script>script idstats-stats-template typetext/x-template> div classstats-box> div v-ifrenderReady> header classdisplay-grid stats-grid-other stat-grid-main-header stat-wrapper ss_paddingright_lg ss_paddingleft_xl> div>h3 classtext-shadow-black-40 text_white nospace>Stats/h3>/div> div classtext-center>h3 classtext-shadow-black-40 text_white nospace>{{ loc.stat_lifetime }}/h3>/div> div classtext-center>h3 classtext-shadow-black-40 text_white nospace>{{ loc.stat_monthly }}/h3>/div> /header> div classstats-container box_relative center_h ss_margintop_sm> div classbg_blue2 roundme_lg ss_marginright_sm> div classstat-wrapper paddings_lg> section v-ifrenderReady classstat-columns> stat-item :locloc :stat{name: kills, lifetime: statsLifetime.kills.total, current: statsMonthly.kills.total }>/stat-item> stat-item :locloc :stat{name: deaths, lifetime: statsLifetime.deaths.total, current: statsMonthly.deaths.total }>/stat-item> stat-item :locloc :stat{name: streak, lifetime: statsLifetime.streak, current: statsMonthly.streak }>/stat-item> stat-item :locloc :stat{name: kdr, kdr: true, lifetime: statsLifetime.kills.total, statsLifetime.deaths.total, current: statsMonthly.kills.total, statsMonthly.deaths.total }>/stat-item> stat-item :locloc :stat{name: stat_kotc_wins, lifetime: statsLifetime.gameType.kotc.wins, current: statsMonthly.gameType.kotc.wins }>/stat-item> stat-item :locloc :stat{name: stat_kotc_captured, lifetime: statsLifetime.gameType.kotc.captured, current: statsMonthly.gameType.kotc.captured }>/stat-item> stat-item :locloc :stat{name: stat_eggs_spent, lifetime: eggsSpent, current: eggsSpentMonthly }>/stat-item> stat-item :locloc :stat{name: stat_public_kdr, kdr: true, lifetime: statsLifetime.kills.mode.public, statsLifetime.deaths.mode.public, current: statsMonthly.kills.mode.public, statsMonthly.deaths.mode.public }>/stat-item> stat-item :locloc :stat{name: stat_private_kdr, kdr: true, lifetime: statsLifetime.kills.mode.private, statsLifetime.deaths.mode.private, current: statsMonthly.kills.mode.private, statsMonthly.deaths.mode.private }>/stat-item> stat-item :locloc :stat{name: stat_fa_kdr, kdr: true, lifetime: statsLifetime.kills.gameType.ffa, statsLifetime.deaths.gameType.ffa, current: statsMonthly.kills.gameType.ffa, statsMonthly.deaths.gameType.ffa }>/stat-item> stat-item :locloc :stat{name: stat_teams_kdr, kdr: true, lifetime: statsLifetime.kills.gameType.team, statsLifetime.deaths.gameType.team, current: statsMonthly.kills.gameType.team, statsMonthly.deaths.gameType.team }>/stat-item> stat-item :locloc :stat{name: stat_ctf_kdr, kdr: true, lifetime: statsLifetime.kills.gameType.spatula, statsLifetime.deaths.gameType.spatula, current: statsMonthly.kills.gameType.spatula, statsMonthly.deaths.gameType.spatula }>/stat-item> stat-item :locloc :stat{name: stat_kotc_kdr, kdr: true, lifetime: statsLifetime.kills.gameType.kotc, statsLifetime.deaths.gameType.kotc, current: statsMonthly.kills.gameType.kotc, statsMonthly.deaths.gameType.kotc }>/stat-item> /section> /div> header classdisplay-grid stats-grid-other stat-grid-main-header stat-wrapper ss_paddingright_lg ss_paddingleft_xl ss_paddingtop_sm ss_paddingbottom_sm> div>h4 classnospace>{{ loc.stat_game_mode }}/h4>/div> div classtext-center display-grid grid-auto-flow-column stylemargin-left: 0.9em;>h4 classnospace>{{ loc.kills }}/h4> h4 classnospace>{{ loc.deaths }}/h4>/div> div classtext-center display-grid grid-auto-flow-column stylemargin-left: 0.9em;>h4 classnospace>{{ loc.kills }}/h4> h4 classnospace>{{ loc.deaths }}/h4>/div> /header> div classstat-wrapper paddings_lg> section v-ifrenderReady classstat-columns> stat-item :locloc :stat{name: stat_public, lifetime: statsLifetime.kills.mode.public, statsLifetime.deaths.mode.public, current: statsMonthly.kills.mode.public, statsMonthly.deaths.mode.public }>/stat-item> stat-item :locloc :stat{name: stat_private, lifetime: statsLifetime.kills.mode.private, statsLifetime.deaths.mode.private, current: statsMonthly.kills.mode.private, statsMonthly.deaths.mode.private }>/stat-item> stat-item :locloc :stat{name: gametype_ffa, lifetime: statsLifetime.kills.gameType.ffa, statsLifetime.deaths.gameType.ffa, current: statsMonthly.kills.gameType.ffa, statsMonthly.deaths.gameType.ffa }>/stat-item> stat-item :locloc :stat{name: gametype_teams, lifetime: statsLifetime.kills.gameType.team, statsLifetime.deaths.gameType.team, current: statsMonthly.kills.gameType.team, statsMonthly.deaths.gameType.team }>/stat-item> stat-item :locloc :stat{name: gametype_ctf, lifetime: statsLifetime.kills.gameType.spatula, statsLifetime.deaths.gameType.spatula, current: statsMonthly.kills.gameType.spatula, statsMonthly.deaths.gameType.spatula }>/stat-item> stat-item :locloc :stat{name: gametype_king, lifetime: statsLifetime.kills.gameType.kotc, statsLifetime.deaths.gameType.kotc, current: statsMonthly.kills.gameType.kotc, statsMonthly.deaths.gameType.kotc }>/stat-item> /section> /div> header classdisplay-grid stats-grid-other stat-grid-main-header stat-wrapper ss_paddingright_lg ss_paddingleft_xl ss_paddingtop_sm ss_paddingbottom_sm> div>h4 classnospace>{{ loc.stat_weapons }}/h4>/div> div classtext-center display-grid grid-auto-flow-column stylemargin-left: 0.9em;>h4 classnospace>{{ loc.kills }}/h4> h4 classnospace>{{ loc.deaths }}/h4>/div> div classtext-center display-grid grid-auto-flow-column stylemargin-left: 0.9em;>h4 classnospace>{{ loc.kills }}/h4> h4 classnospace>{{ loc.deaths }}/h4>/div> /header> div classstat-wrapper paddings_lg> section v-ifrenderReady classstat-columns> stat-item :locloc :stat{name: item_type_3_0, lifetime: statsLifetime.kills.dmgType.eggk, statsLifetime.deaths.dmgType.eggk, current: statsMonthly.kills.dmgType.eggk, statsMonthly.deaths.dmgType.eggk }>/stat-item> stat-item :locloc :stat{name: item_type_3_1, lifetime: statsLifetime.kills.dmgType.scrambler, statsLifetime.deaths.dmgType.scrambler, current: statsMonthly.kills.dmgType.scrambler, statsMonthly.deaths.dmgType.scrambler }>/stat-item> stat-item :locloc :stat{name: item_type_3_2, lifetime: statsLifetime.kills.dmgType.ranger, statsLifetime.deaths.dmgType.ranger, current: statsMonthly.kills.dmgType.ranger, statsMonthly.deaths.dmgType.ranger }>/stat-item> stat-item :locloc :stat{name: item_type_3_3, lifetime: statsLifetime.kills.dmgType.rpegg, statsLifetime.deaths.dmgType.rpegg, current: statsMonthly.kills.dmgType.rpegg, statsMonthly.deaths.dmgType.rpegg }>/stat-item> stat-item :locloc :stat{name: item_type_3_4, lifetime: statsLifetime.kills.dmgType.whipper, statsLifetime.deaths.dmgType.whipper, current: statsMonthly.kills.dmgType.whipper, statsMonthly.deaths.dmgType.whipper }>/stat-item> stat-item :locloc :stat{name: item_type_3_5, lifetime: statsLifetime.kills.dmgType.crackshot, statsLifetime.deaths.dmgType.crackshot, current: statsMonthly.kills.dmgType.crackshot, statsMonthly.deaths.dmgType.crackshot }>/stat-item> stat-item :locloc :stat{name: item_type_3_6, lifetime: statsLifetime.kills.dmgType.trihard, statsLifetime.deaths.dmgType.trihard, current: statsMonthly.kills.dmgType.trihard, statsMonthly.deaths.dmgType.trihard }>/stat-item> stat-item :locloc :stat{name: weapon_cluck_9mm, lifetime: statsLifetime.kills.dmgType.pistol, statsLifetime.deaths.dmgType.pistol, current: statsMonthly.kills.dmgType.pistol, statsMonthly.deaths.dmgType.pistol }>/stat-item> stat-item :locloc :stat{name: item_type_6, lifetime: statsLifetime.kills.dmgType.grenade, statsLifetime.deaths.dmgType.grenade, current: statsMonthly.kills.dmgType.grenade, statsMonthly.deaths.dmgType.grenade }>/stat-item> stat-item :locloc :stat{name: item_type_7, lifetime: statsLifetime.kills.dmgType.melee, statsLifetime.deaths.dmgType.melee, current: statsMonthly.kills.dmgType.melee, statsMonthly.deaths.dmgType.melee }>/stat-item> /section> /div> /div> div classbg_blue2 roundme_lg ss_marginright_sm ss_margintop_sm> div classstat-wrapper paddings_lg> h3 classtext-shadow-black-40 text_white nospace>{{ loc.challenges_completed }}/h3> div classstat font-600> div classroundme_sm ss_paddingleft ss_paddingtop_micro ss_marginbottom_sm> p classnospace text_white>{{ loc.total }}: {{ challengesClaimed.total }}/p> /div> /div> div classstat font-600> div classroundme_sm ss_paddingleft ss_paddingtop_micro ss_marginbottom_sm> p classnospace text_white>{{ loc.unique }}: {{ challengesClaimed.unique }}/p> /div> /div> /div> /div> /div> /div> /div>/script>script idthe-stat-template typetext/x-template> section classstat display-grid font-600 :classstatWrapper> div classtext_white roundme_sm_top-bottom_right ss_paddingleft ss_paddingtop_micro ss_marginbottom_sm>p>{{ statTitle }}/p>/div> div classtext-center text_white roundme_sm_top-bottom_left ss_paddingleft ss_paddingtop_micro ss_marginbottom_sm ss_marginright_sm :classlifetimeCls v-htmlstatLifetime>/div> div classtext-center text_white roundme_sm ss_paddingleft ss_paddingtop_micro ss_marginbottom_sm :classcurrentCls v-htmlstatMonthly>/div> /section>/script>script>var StatTemplate { template: #the-stat-template, props: loc, stat, data: function () { return { lifetimeCls: , currentCls: , } }, methods: { statName(key) { if (key eggk) { key eggK-47; } return key.toUpperCase(); }, kdr(kills, deaths) { return Math.floor((kills / Math.max(deaths, 1)) * 100) / 100; }, setupStat(stat) { if (this.stat.kdr ! undefined && stat.length ! undefined) { return this.kdr(stat0, stat1); } else if (stat && stat.length ! undefined) { return `div>${stat0}/div> div>${stat1}/div>`; } else { return stat; } } }, computed: { statTitle() { // if (this.stat.name eggk) { // return eggK-47; // } return this.locthis.stat.name; // return this.stat.name; }, statMonthly() { if (this.stat.current && this.stat.current.length ! undefined && this.stat.kdr undefined) { this.currentCls display-grid grid-column-2-eq; } return this.setupStat(this.stat.current); }, statLifetime() { if (hasValue(this.stat.lifetime) && this.stat.lifetime.length ! undefined && this.stat.kdr undefined) { this.lifetimeCls display-grid grid-column-2-eq; } return this.setupStat(this.stat.lifetime); }, statWrapper() { // return this.stat.lifetime.length ! undefined && this.stat.kdr undefined ? stats-grid-other : stats-grid; return stats-grid-other; }, },};/script>script>var STATSPOPUP { template: #stats-stats-template, props: loc, statsMonthly, statsLifetime, kdrLifetime, showLifetime, eggsSpent, eggsSpentMonthly, challengesClaimed, components: { stat-item: StatTemplate }, methods: { statName(key) { if (key eggk) { key eggK-47; } return key.toUpperCase(); }, kdr(kills, deaths) { return Math.floor((kills / Math.max(deaths, 1)) * 100) / 100; } }, computed: { // VUE is taking its time passing these props, so we need to wait for them to be ready renderReady() { return Object.keys(this.statsLifetime).length > 0 && Object.keys(this.statsMonthly).length > 0; } }};/script>script>const ProfileScreen { template: #profile-screen-template, components: { stats-content: STATSPOPUP, // player-name: PlayerNameInput }, props: claimed, data: function () { return vueData; }, methods: { showSignIn: function () { extern.showSignInDialog(); vueApp.$refs.firebaseSignInPopup.show(); }, onAccountBtnClicked: function () { if (this.showAdBlockerVideoAd) { return; } if (extern.inGame) { this.$refs.loginPopupWarning.show(); } else { if (this.isAnonymous && this.showSignIn) { vueApp.onSignInClicked(); } else { vueApp.onSignOutClicked(); } } }, onQuitAndLoginManage() { vueApp.onLeaveGameConfirm(); setTimeout(() > { this.$emit(leave-game-confimed); }, 1000); }, onTwitchDropsClick() { if (this.showAdBlockerVideoAd) { return; } ga(send, event, profilePage, click, twitch_drops); window.open(dynamicContentPrefix + twitch); }, selectTab(val) { if (this.ui.profile.statTab val) { return; } this.ui.profile.statTabClicked true; setTimeout(() > this.ui.profile.statTabClicked false, 500); BAWK.play(ui_toggletab); this.ui.profile.statTab val; } }, computed: { isEggStoreSaleItem() { return this.eggStoreItems.some( item > itemsalePrice ! ); }, showTwitchEvent() { return this.ui.events.twitch; }, isTwitchLinked() { return this.twitchLinked ? this.loc.account_linked_to_twitch : this.loc.account_link_to_twitch; }, accountStatus() { if (this.accountCreated) { return `${this.loc.account_created}: strong>${this.accountCreated}/strong>`; } return this.loc.account_profile_login_desc; }, accountBtnCls() { if (this.isAnonymous && this.showSignIn) { return btn_green bevel_green; } return btn_yolk bevel_yolk; }, accountBtnTxt() { if (this.isAnonymous && this.showSignIn) { return this.loc.sign_in; } return this.loc.sign_out; }, loginPopupWarningTxt(){ return this.isAnonymous && this.showSignIn ? this.loc.sign_in_and_leave_game : this.loc.sign_out_and_leave_game; } }};/script>script idgauge-template typetext/x-template> div idss-shell-meter-wrap> {{popupOpen}} div idgauge-meter classgauge-meter centered_x @clickonGaugeMeterClick> div classhvsm-character-area hvsm-heroes-area-glow box_absolute :styleheroesStyle> /div> div classhvsm-character-area hvsm-monsters-area-glow box_absolute :stylemonstersStyle> /div> !-- div idmotion-demo>/div> --> div classss-shell-meter centered_x> !-- ss-shell-gauge--> div idss-shell-gauge classgauge> img srcimg/gauge-bar/hero-vs-monster-bar.png classcentered_x> div refneedle classneedle> !-- div classneedle-head>/div> --> img srcimg/gauge-bar/hero-vs-monster-pointer.svg classcentered_x> /div> !-- .needle --> /div> !-- #ss-shell-gauge --> /div> !-- .ss-shell-meter --> /div> /div>/script>script>var CompGauge { template: #gauge-template, props: popupOpen, data() { return { current: 180, min: 164, max: 196, loadvalue: null, setValue: 180, stop: false, started: false, rotateAnimation: hvsm-animation, pauseAnimation: hvsm-paused, stopCount: 0, }; }, methods: { setGaugeMeterData(data) { this.min Number(data.min); this.max Number(data.max); this.loadvalue Number(data.loadvalue); this.stop data.active; this.setValue Number(data.setValue); }, startMeter() { this.current this.loadvalue; this.$refs.needle.addEventListener(animationend, () > this.restartAnimation()); this.startAnimation(); }, getRandomInt(min, max) { min Math.ceil(min); max Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; }, startAnimation() { const NeedleCls this.$refs.needle.classList, Current this.current, End Math.round(this.getRandomInt(this.min, this.max)), StepTime ((Math.max(End, this.current) - Math.min(End,this.current)) * 1000), Timer Math.min(StepTime, 7000); if (NeedleCls.contains(this.pauseAnimation)) this.$refs.needle.classList.remove(this.pauseAnimation); if (NeedleCls.contains(this.rotateAnimation)) this.$refs.needle.classList.remove(this.rotateAnimation); this.setAnimationTimer(Timer); this.setAnimationStart(this.current); if (this.stop) { this.current this.setValue this.setGaugeValue(this.current); } else { this.setGaugeValue(End); this.current End; } this.$refs.needle.classList.add(this.rotateAnimation); }, restartAnimation() { this.$refs.needle.classList.remove(this.rotateAnimation); if (this.stopCount > 1) { this.stopMeter(); this.stopCount 0; } if (this.stop) { this.startAnimation(); this.stopCount++; return; } setTimeout(() > { this.startAnimation(); }, 3500); }, minMax(val) { return val this.min || val > this.max; }, stopMeter() { this.$refs.needle.classList.add(this.pauseAnimation); this.$refs.needle.removeEventListener(animationend, () > this.restartAnimation()); }, opacityChange() { if (this.current > 180) { return .1; } else { return ((180 - this.current) / 180) * 10; } }, opacityChangeMonster() { if (this.current 180) { return .1; } else { return ((180 - this.current) / 180) * -10; } }, onGaugeMeterClick() { this.$emit(gauge-meter-click); }, setAnimationTimer(val) { this.$refs.needle.style.setProperty(--gauge-timer-sec, val/1000+s); }, setAnimationStart(val) { this.$refs.needle.style.setProperty(--gauge-value-start, val+deg); }, setGaugeValue(val) { this.$refs.needle.style.setProperty(--gauge-value, val+deg); }, }, computed: { monsters() { return this.opacityChangeMonster() }, heroes(){ return this.opacityChange() }, heroesStyle() { return { opacity: this.heroes, }; }, monstersStyle() { return { opacity: this.monsters, }; }, isPopupOpen() { return this.popupOpen ? hvsm-popup-open : ; }, }, watch: { loadvalue(val) { if (val && !this.started) this.startMeter(); }, },};/script>script>var comp_home_screen { template: #home-screen-template, components: { play-panel: comp_play_panel, house-ad-big: comp_house_ad_big, house-ad-small: comp_house_ad_small, account-panel: comp_account_panel, chicken-panel: comp_chicken_panel, footer-links-panel: comp_footer_links_panel, event-panel: comp_events, media-tabs: MEDIATABS, profile-screen: ProfileScreen, gauge-meter: CompGauge, item: comp_item, // pwa-button: comp_pwa_btn, }, data: function () { return vueData; }, methods: { onHvsmPopupOpen() { this.getHvsmItems(); }, onHvsmPopupClose() { }, onHvsmClicked(item) { let tag; if (typeof item object) { tag item.item_data.tags.includes(Monsters) ? Monsters : Heroes; } else { tag item; } vueApp.showTaggedItemsOnEquipScreen(tag); // this.$refs.hvsmPopup.close(); }, playSound (sound) { BAWK.play(sound); }, onEquipClicked: function () { if (this.showAdBlockerVideoAd) { return; } vueApp.openEquipSwitchTo(); BAWK.play(ui_equip); }, showSignIn: function () { extern.showSignInDialog(); vueApp.$refs.firebaseSignInPopup.show(); }, onSignInClicked: function () { if (this.showAdBlockerVideoAd) { return; } this.showSignIn(); }, onSignOutClicked: function () { if (this.showAdBlockerVideoAd) { return; } extern.signOut(); }, leaveGameConfirmed() { if (this.showAdBlockerVideoAd) { return; } if (this.isAnonymous && this.showSignIn) { this.onSignInClicked(); } else { extern.signOut(); } }, onResendEmailClicked: function () { extern.sendFirebaseVerificationEmail(); // vueApp.showGenericPopup(verify_email_sent, verify_email_instr, ok); this.$refs.resendEmailConfirm.show(); }, onHideResendEmail() { extern.accountCreationNotification(); // setTimeout(()> vueApp.setDarkOverlay(true), 100); }, onBigHouseAdClosed: function () { console.log(big house ad closed event received); this.ui.houseAds.big null; this.urlParamSet this.urlParams ? true : null; vueApp.showTitleScreenAd(); vueApp.shellShockUrlParamaterEvents(); }, onPlayerNameChanged: function (newName) { console.log(play name event handler); vueApp.setPlayerName(newName); BAWK.play(ui_onchange); }, onEggPlayClick() { play: play game, ga(send, event, vueData.googleAnalytics.cat.play, vueData.googleAnalytics.action.eggDollClick); vueApp.$refs.homeScreen.$refs.playPanel.onPlayButtonClick(); }, api_incentivizedVideoRewardRequest() { extern.api_incentivizedVideoRewardRequested(); }, onTwitchDropsClick() { if (this.showAdBlockerVideoAd) { return; } window.open(dynamicContentPrefix + twitch); }, chwStopCycle() { if (this.chwHomeTimer) { clearInterval(this.chwHomeTimer); this.chwHomeTimer ; this.chwHomeEl.classList.remove(.active); } }, onGameTypeChanged(val) { vueApp.onGameTypeChanged(val); }, // onGaugeMeterClick() { // this.$refs.hvsmPopup.show(); // }, getHvsmItems() { this.hvsm.hero.items extern.getTaggedItems(this.hvsm.hero.name).filter( item > item.is_available); this.hvsm.monster.items extern.getTaggedItems(this.hvsm.monster.name).filter( item > item.is_available); }, challengeReroll(id) { // TODO: update challenge slot and add to player Account functionality // Add to limiter if reroll is consistently requested extern.playerChallenges.reroll(id); } }, computed: { isEggStoreSaleItem() { return this.eggStoreItems.some( item > itemsalePrice ! ); }, twitchDropsBtnImgSrs() { if (this.twitchLinked) { return ../img/events/twitch-drops-btn-linked.png; } return ../img/events/twitch-drops-btn-link-now.png; }, isTwitchLinked() { if (this.twitchLinked) return i classfas fa-check-circle text_twitch_yellow>/i>; return i classfas fa-times-circle text_grey>/i>; } }};/script>script idgold-chicken-template typetext/x-template> div> img classchw-popup-img srcimg/chicken-nugget/ssAd_chicknWinner800x600-min.png /> h2 classcentered_x bottom-2 text_vip_yellow chw-popup-title fullwidth text-center>{{ loc.chw_popup_play }}/h2> div idbtn_horizontal classcentered_x bottom-2> button @clickonCloseClick() classss_button btn_red bevel_red>{{ loc.no_thanks }}/button> button classss_button btn_green bevel_green @clickonChickenClick>{{ loc.play_now }}/button> /div> /div>/script>script>var comp_gold_chicken_popup { template: #gold-chicken-template, data: function () { return vueData; }, props: , methods: { onCloseClick: function () { this.$emit(close-chw-popup); }, onChickenClick: function () { this.$emit(open-chw-game); } }};/script>script idequip-screen-template typetext/x-template> div id#equip_wrapper :classscreenCls data-html2canvas-ignore> div iddisplay-ad-header-equip refdisplayAdHeader>/div> div classhome-main-wrapper display-grid box_absolute height-100vh> section idequip_panel_middle classequip_panel middle_panel box_relative align-items-center> div v-ifshowShopUi classpanel_tabs display-grid grid-column-3-eq gap-sm> button classss_bigtab bevel_blue roundme_md font-sigmar :classgetButtonToggleClass(equipMode.shop) @clickswitchTo(equipMode.shop)>{{ loc.eq_shop }}/button> button classss_bigtab bevel_blue roundme_md font-sigmar :disabled!accountSettled :classgetButtonToggleClass(equipMode.featured) @clickswitchTo(equipMode.featured)>{{ loc.eq_featured }}/i>/button> button classss_bigtab bevel_blue roundme_md font-sigmar :disabled!accountSettled :classgetButtonToggleClass(equipMode.skins) @clickswitchTo(equipMode.skins)>{{ loc.eq_skins }}/i>/button> /div> div v-showisOnShopInventoryLimited idequip_purchase_top classequip_purchase_top> physical-tag idphysical-tag classss_marginright v-ifequip.physicalUnlockPopup.item refphysical-tag :locloc :itemequip.physicalUnlockPopup.item @buy-item-clickedonBuyItemClicked>/physical-tag> /div> div v-ifisSubscriber v-showequip.selectedItemType 2 idstamp-controls> div classrow> button classbutton @clickmoveStampClick(0, 1)> svg classarrow up> use xlink:href#ico_stampArrow>/use> /svg> /button> /div> div classrow> button classbutton @clickmoveStampClick(-1, 0)> svg classarrow left> use xlink:href#ico_stampArrow>/use> /svg> /button> div classpreview @clickresetStampPosition()> canvas classcanvas refstampCanvas width250 height250>/canvas> /div> button classbutton @clickmoveStampClick(1, 0)> svg classarrow right> use xlink:href#ico_stampArrow>/use> /svg> /button> /div> div classrow> button classbutton @clickmoveStampClick(0, -1)> svg classarrow down> use xlink:href#ico_stampArrow>/use> /svg> /button> /div> /div> div v-showisEquipModeInventory || isOnEquipModeSkins idequip_weapon_panel> weapon-select-panel idweapon_select refweapon_select :locloc :account-settledaccountSettled :play-clickedplayClicked :current-classclassIdx :current-screenshowScreen :screensscreens :hide-desc!ui.showHomeEquipUi @changed-classonChangedClass>/weapon-select-panel> /div> color-select v-ifisEquipModeInventory || isOnEquipModeSkins idequip.equipped_slots refcolorSelect :locloc :is-upgradeisUpgraded :color-idxequip.colorIdx :extra-colors-lockedequip.extraColorsLocked @color-changedonColorChanged :current-screenshowScreen :screensscreens>/color-select> div idlimited-un-vaulted v-showisOnEquipModeFeatured || isEquipModeShop classlimited-un-vaulted centered_x bottom-1 bg_blue2 roundme_lg paddings_lg> item-grid iditem_grid refitemGridVaulted :locloc :itemsequip.showUnVaultedItems :has-buy-btnfalse :selectedItemequip.selectedItem @item-selectedonItemSelected :in-shopisInShop :in-inventoryshowShopCart>/item-grid> h4 classtext-center text-uppercase nospace text_blue5>{{ loc.eq_unvaulted_limited_msg }}/h4> div classprice-tag-wrap> price-tag idprice_tag v-ifequip.selectedItem && isSelectedInUnVaulted refprice_tag :locloc :itemequip.selectedItem :hide-get-more-eggstrue :egg-totaleggs @buy-item-clickedonBuyItemClicked :chw-readychw.ready>/price-tag> /div> /div> /section> !-- end .middle_panel --> section idequip_panel_right classequip_panel right_panel> h3 v-if!showPurchasesUi classequip-title text-center margins_sm box_relative text_white text-shadow-black-40 nospace>{{ locequip.categoryLocKey }}/h3> div v-ifisOnEquipModeFeatured classlimited-msg-wrapper box_relative display-grid align-items-center text-center text_vip_yellow bg-limited roundme_md> p classnospace>{{ loc.eq_limited_msg }}/p> /div> item-type-selector v-ifisOnShopInventory classbox_relative iditem_type_selector refitem_type_selector :itemsui.typeSelectors :in-limitedisOnEquipModeFeatured :selected-item-typeequip.selectedItemType :show-special-itemsequip.showSpecialItems :in-shopisInShop @item-type-changedswitchItemType>/item-type-selector> egg-store v-ifisEquipModeShop :locloc :productseggShopSortItems :sale-eventisSale @on-bundle-info-clickedopenProductBundlePopup @on-try-prem-item-onequipTryPremItemOn>/egg-store> div v-show!isEquipModeShop iditem-search-wrap classitem-search-wrap box_relative> label foritem-search classcentered_y item-search-label>i classfas fa-search text_blue3 :classequip.itemSearchTerm ? fa-times-circle text_red : fa-search @clickonItemSearchReset>/i>/label> input refitemSearch nameitem-search v-bind:placeholderloc.eq_search_items v-on:keyuponItemSearchChange classss_field font-nunito box_relative fullwidth> !-- input refitemSearch nameitem-search v-bind:placeholderloc.eq_search_items v-modelitemSearchVal v-on:keyuponItemSearchChange classss_field font-nunito box_relative fullwidth> --> /div> div v-ifcurrentEquipMode ! equipMode.shop idequip_sidebox classequip-main-item-grid roundme_md box_relative ss_marginbottom_lg> div v-showui.showHomeEquipUi iditem_mask>/div> div iditem-smack-down> item-grid v-ifisOnShopInventoryLimited iditem_grid refitem_grid :locloc :classgridCls :itemsequip.showingItems :selectedItemequip.selectedItem :category-loc-keyequip.categoryLocKey :in-shopisInShop :in-inventoryshowShopCart :is-searchingequip.itemSearchTerm :show-tooltipstrue @item-selectedonItemSelected @switch-to-skinsonSwitchToSkinsClicked>/item-grid> /div> !--house-ad-small idbanner-ad v-show!isInShop>/house-ad-small>--> /div> div v-showisEquipModeInventory classss_paddingright> button classss_button btn_blue bevel_blue box_relative fullwidth text-uppercase :class{visibility-hidden : !ui.showHomeEquipUi} @clickonRedeemClick>{{ loc.eq_redeem }}/button> button classss_button box_relative fullwidth text-uppercase btn-open-photo-booth :classphotoBoothBtnUi.cls @clickonPhotoboothClick :disabledextern.inGame>{{ photoBoothBtnUi.txt }}/button> /div> price-tag idprice_tag v-ifshowPriceTag refprice_tag :locloc :itemequip.buyingItem :egg-totaleggs @buy-item-clickedonBuyItemClicked :chw-readychw.ready :chw-watch-countchw.winnerCounter>/price-tag> /section> !-- .right_panel--> /div> !-- Popup: Buy Item --> small-popup idbuyItemPopup refbuyItemPopup @popup-confirmonBuyItemConfirm @popup-closedonBuyItemClose> template slotheader>{{ loc.p_buy_item_title }}/template> template slotcontent> div> canvas idbuyItemCanvas refbuyItemCanvas width250 height250>/canvas> /div> div classf_row f_center> img v-if!isBuyingItemPrem srcimg/ico_goldenEgg.png classegg_icon/> i v-else classfas fa-dollar-sign>/i> h1>{{ (equip.buyingItem) ? equip.buyingItem.price : }}/h1> /div> /template> template slotcancel>{{ loc.p_buy_item_cancel }}/template> template slotconfirm>{{ loc.p_buy_item_confirm }}/template> template slotfooter> div v-ifequip.chwRewardBuyItem classfullwidth ss_margintop> button classss_button btn_yolk bevel_yolk fullwidth @clickchwWatchAd>{{ locchwButtonTxt }} icon v-showchw.ready && chw.winnerCounter > 0 nameico_watchAd classchw-icon-watch-ads>/icon>/button> /div> /template> /small-popup> !-- Popup: Redeem Code --> small-popup idredeemCodePopup refredeemCodePopup :popup-modelequip.redeemCodePopup @popup-confirmonRedeemCodeConfirm> template slotheader>{{ loc.p_redeem_code_title }}/template> template slotcontent> div classerror_text shadow_red v-showequip.redeemCodePopup.showInvalidCodeMsg>{{ loc.p_redeem_code_no_code }}/div> p>input typetext classss_field ss_margintop ss_marginbottom text-center width_lg v-modelequip.redeemCodePopup.code v-bind:placeholderloc.p_redeem_code_enter>/p> /template> template slotcancel>{{ loc.cancel }}/template> template slotconfirm>{{ loc.confirm }}/template> /small-popup> !-- Popup: Physical Unlock --> small-popup idphysicalUnlockPopup refphysicalUnlockPopup :popup-modelequip.physicalUnlockPopup @popup-confirmonPhysicalUnlockConfirm> template slotheader>{{ loc.p_physical_unlock_title }}/template> template slotcontent> div v-if(equip.physicalUnlockPopup.item ! null)> div> item :locloc :itemequip.physicalUnlockPopup.item :isSelectedfalse :show-item-onlytrue>/item> div classf_row f_center> img srcimg/ico_goldenEgg.png classegg_icon/> h1>{{ loc.p_buy_special_price }}/h1> /div> /div> div classpopup_sm__item_desc> {{ locequip.physicalUnlockPopup.item.item_data.physicalUnlockLocKey }} /div> /div> /template> template slotcancel>{{ loc.cancel }}/template> template slotconfirm>{{ loc.confirm }}/template> /small-popup> small-popup idbundlePopup refbundlePopup @popup-closeonBundlePopupClose @popup-confirmonBundlePopupConfirm> template slotheader>{{ locequip.bundle.name }}/template> template slotcontent> img v-ifequip.bundle.img :srcequip.bundle.img classbundle-popup-img centered_y/> item-grid idbundleGrid refbundleGrid :locloc :itemsequip.bundle.items :has-buy-btnfalse :selectedItemnull @item-selectedonItemSelected :in-inventoryfalse :hide-pricetrue :show-tooltipstrue>/item-grid> h2 v-if!equip.bundle.owned classbundle-popup-price text_yellow>sup>$/sup>{{ equip.bundle.price }} USD/h2> p v-ifequip.bundle.owned>{{ loc.product_bundles_items_owned }}/p> /template> template slotcancel>{{ loc.cancel }}/template> template slotconfirm>{{ bundlePopupConfirmTxt }}/template> /small-popup> !-- large-popup idhvsmPopup refhvsmPopup @popup-closedonHvsmPopupClose @popup-openedonHvsmPopupOpen @popup-xonHvsmPopupClose :overlayTypeui.overlayType.none> template slotcontent> div idhvsm-popup-item-grid-wrap v-showisOnEquipModeFeatured || isEquipModeShop classhvsm-popup-item-grid-wrap paddings_lg display-grid grid-auto-flow-column align-items-center justify-content-center> div classhvsm-popup-item-grid> header> img classdisplay-block center_h srcimg/gauge-bar/shell_E&E_good_popup.png altHeroes logo> h4 classtext-center text-uppercase nospace text_blue5>Heroes/h4> /header> item-grid idhvsmHeroesItemGrid refhvsmHeroesItemGrid :locloc :itemsequip.hvsmHeroItems :has-buy-btnfalse :selectedItemequip.selectedItem @item-selectedonItemSelected :in-shopisInShop :in-inventoryisEquipModeInventory>/item-grid> div classprice-tag-wrap> price-tag idprice_tag v-ifonHsvmItemSelected(equip.hvsmHeroItems) refprice_tag :locloc :itemequip.selectedItem :hide-get-more-eggstrue :egg-totaleggs @buy-item-clickedonBuyItemClicked>/price-tag> /div> /div> div classhvsm-popup-desc> header> h2 classnospace text_white text-shadow-black-40 text-center>Egg Org & Eggventure/h2> /header> p classtext_blue5> You should never have opened that chest & rolled the ancient arcane dice within… Welcome brave Eggventurers, to a tale of mystery, magic, & mayhem! /p> p classtext_blue5> Here on the Outer Reach, Heroes & Monsters clash in epic battles, & danger lurks in the forest. Will the mighty Warriors, skilled Sorcerers, & cunning Rogues defeat the Beholders, Owlbears and Gelatinous Mounds?! /p> p classtext_blue5> Equip your skins of choice to choose your side. Each kill with the equipped Monsters or Heroes items will bring your side closer to victory! Who will win? You decide. Either way you need to survive to get out of here! /p> p classtext_blue5> Grab your swords & prepare yourshellves, for the eggventure of a lifetime awaits! /p> /div> div classhvsm-popup-item-grid> header> img classdisplay-block center_h srcimg/gauge-bar/shell_E&E_evil_popup.png altMonsters logo> h4 classtext-center text-uppercase nospace text_blue5>Monsters/h4> /header> item-grid idhvsmMonsterItemGrid refhvsmMonsterItemGrid :locloc :itemsequip.hvsmMonsterItems :has-buy-btnfalse :selectedItemequip.selectedItem @item-selectedonItemSelected :in-shopisInShop :in-inventoryisEquipModeInventory>/item-grid> div classprice-tag-wrap> price-tag idprice_tag v-ifonHsvmItemSelected(equip.hvsmHeroItems) refprice_tag :locloc :itemequip.selectedItem :hide-get-more-eggstrue :egg-totaleggs @buy-item-clickedonBuyItemClicked>/price-tag> /div> /div> /div> /template> /large-popup> --> /div>/script>script idequipped-slots-template typetext/x-template> div> h3 classmargins_sm>{{ loc.eq_equipped }}/h3> div idequip_equippedslots> div classequip_item roundme_lg clickme f_row f_center @clickonClick(itemType.Primary)> item :locloc idprimary_item refprimary_item v-ifprimaryItem :itemprimaryItem classequip_icon :equippedSlottrue>/item> div v-if!primaryItem classequip_icon equip_icon_hat equip_icon_no_item>img srcimg/inventory-icons/ico_weaponPrimary.svg altPrimary equip slot>/div> /div> div classequip_item roundme_lg clickme f_row f_center @clickonClick(itemType.Secondary)> item :locloc idsecondary_item refsecondary_item v-ifsecondaryItem :itemsecondaryItem classequip_icon :equippedSlottrue>/item> div v-if!secondaryItem classequip_icon equip_icon_hat equip_icon_no_item>img srcimg/inventory-icons/ico_weaponSecondary.svg altSecondary equip slot>/div> /div> div classequip_item roundme_lg clickme f_row f_center @clickonClick(itemType.Grenade)> item :locloc idgrenade_item refgrenade_item v-ifgrenadeItem :itemgrenadeItem classequip_icon :equippedSlottrue>/item> div v-if!grenadeItem classequip_icon equip_icon_hat equip_icon_no_item>img srcimg/inventory-icons/ico_grenade.svg altGrenade equip slot>/div> /div> div classequip_item roundme_lg clickme f_row f_center @clickonClick(itemType.Hat)> item :locloc idhat_item refhat_item v-ifhatItem :itemhatItem :equippedSlottrue>/item> div v-if!hatItem classequip_icon equip_icon_hat equip_icon_no_item>img srcimg/inventory-icons/ico_hat.svg altHat item slot>/div> /div> div classequip_item roundme_lg clickme f_row f_center @clickonClick(itemType.Stamp)> item :locloc idstamp_item refstamp_item v-ifstampItem :itemstampItem :equippedSlottrue>/item> div v-if!stampItem classequip_icon equip_icon_stamp equip_icon_no_item>img srcimg/inventory-icons/ico_stamp.svg altStamp item slot>/div> /div> /div> /div>/script>script>var comp_equipped_slots { template: #equipped-slots-template, components: { item: comp_item }, props: loc, primaryItem, secondaryItem, hatItem, stampItem, grenadeItem, data: function () { return { itemType: ItemType } }, methods: { onClick: function (itemType) { this.$emit(equipped-type-selected, itemType); } }, computed: { emptyHatClass: function () { return (this.hatItem null) ? equip_icon_hat : ; }, emptyStampClass: function () { return (this.stampItem null) ? equip_icon_stamp : ; } }};/script>script idcolor-select-template typetext/x-template> div classtext-center egg-color-select roundme_sm common-box-shadow> !-- h3 classmargins_sm>{{ loc.eq_color }}/h3> --> div idequip_free_colors classdisplay-grid text-center grid-auto-flow-column align-items-center > !-- svg v-for(c, index) in freeColors classeggIcon equip_color :style{ color: c } :classisSelectedClass(index) @clickonClick(index)>use xlink:href#icon-egg>/use>/svg> --> span v-for(c, index) in freeColors classbox_relative roundme_sm egg-color-icon @clickonClick(index)> img v-ifindex colorIdx classcentered_x color-select-arrow srcimg/svg/ico-arrow-colorPicker.svg/> i classfas fa-egg :style{ color: c } :classisSelectedClass(index)>/i> /span> !-- /div> div idequip_paid_colors classdisplay-grid text-center grid-auto-flow-column align-items-center > --> !-- svg v-for(c, index) in paidColors classeggIcon equip_color :style{ color: c } :classisSelectedClass(index + freeColors.length) @clickonClick(index + freeColors.length)>use :xlink:hrefgetExtraColorEggIcon>/use>/svg> --> span v-for(c, index) in paidColors classbox_relative roundme_sm egg-color-icon @clickonClick(index + freeColors.length)> img v-ifcolorIdx (index + freeColors.length) classcentered_x color-select-arrow srcimg/svg/ico-arrow-colorPicker.svg/> span classfa-stack roundme_sm :classisSelectedClass(index + freeColors.length)> i classfas fa-egg fa-stack-1x :style{ color: c }>/i> i v-if!isUpgrade classfas fa-lock fa-stack-1x text_white>/i> /span> /span> /div> /div>/script>script>var comp_color_select { template: #color-select-template, props: loc, colorIdx, extraColorsLocked, isUpgrade, data: function () { return { freeColors: freeColors, paidColors: paidColors } }, methods: { isSelectedClass: function (idx) { return (idx this.colorIdx) ? selected : }, onClick: function (idx) { if (idx > freeColors.length && this.extraColorsLocked true) { vueApp.showSubStorePopup(); // BAWK.play(ui_chicken); return; } this.$emit(color-changed, idx); }, }, computed: { getExtraColorEggIcon() { return (this.extraColorsLocked true && !this.isUpgrade) ? #icon-egg-locked : #icon-egg; }, }};/script>script iditem-timer-template typetext/x-template> div> div idequip_timerem classbox_blue3 roundme_sm shadow_blue4> i classfas fa-hourglass-start>/i> 9{{ loc.eq_day }}span classblink>:/span>12{{ loc.eq_hour }} br>{{ loc.eq_remaining }} /div> /div>/script>script>var comp_item_timer { template: #item-timer-template, props: loc};/script>script idprice-tag-template typetext/x-template> div idequip_purchase_items v-ifisNoPrice classequip_purchase_items box_relative> button v-if!playerNeedsMoreEggs && !isItemOwned classss_button btn_green bevel_green btn_md btn_buy_item display-grid fullwidth font-nunito f_row align-items-center justify-content-center @clickonBuyClick> {{priceTagText}} img v-if!isPremium srcimg/ico_goldenEgg.png classss_marginright_sm ss_marginleft> i v-else classfas fa-dollar-sign ss_marginleft>/i> {{ item.price }} /button> button v-showplayerNeedsMoreEggs && !isItemOwned classss_button btn_yolk bevel_yolk text-shadow-black-40 fullwidth text-center @clickonWatchAdsClick>{{ watchAdsTxt }}! icon v-showshowChwVideoIcon nameico_watchAd classchw-icon-watch-ads>/icon>/button> button v-show!hideGetMoreEggs && !isItemOwned classss_button btn_blue bevel_blue text-shadow-black-40 fullwidth text-center @clickonGetMoreEggsClick>{{ loc.account_title_eggshop }}/button> /div>/script>script>var comp_price_tag { template: #price-tag-template, props: loc, item, eggTotal, chwReady, hideGetMoreEggs, chwWatchCount, data() { return { }; }, methods: { onBuyClick: function () { if (this.isPremium) { return extern.buyProductForMoney(this.item.sku0); } this.$emit(buy-item-clicked, this.item); }, onWatchAdsClick() { if (this.chwReady) ga(send, event, Chickn Winner, `btnClick${extern.inGame ? InGame : Home}`, watchToWinEggs); vueApp.showNuggyPopup(); }, onGetMoreEggsClick() { vueApp.openEquipSwitchTo(vueApp.equipMode.shop) } }, computed: { isPremium() { return this.item.unlock premium; }, isNoPrice() { return this.item.price 1000000000; }, playerNeedsMoreEggs() { if (this.isPremium) { return false; } else { return this.item.price > this.eggTotal; } }, priceTagText() { if (!this.playerNeedsMoreEggs) { return this.loc.eq_buy; } return; }, priceTagTextCls() { if (!this.playerNeedsMoreEggs) { return text_blue5; } else { return text_red; } }, watchAdsTxt() { if (this.chwReady) { return this.loc.chw_btn_watch_ad; } else { return Wait for more eggs; } }, isItemOwned() { return extern.isItemOwned(this.item) }, showChwVideoIcon() { return this.chwReady && this.chwWatchCount > 0; } }};/script>script idphysical-tag-template typetext/x-template> div idequip_get_physical_item classequip_purchase_items> div idequip_pricetag classequip_pricetag shadow_blue2> img srcimg/pricetag_left.png> div classequip_pricetag__tag equip_pricetag__is_special_tag> img srcimg/ico_goldenEgg.png classss_marginright>{{ loc.p_buy_special_price }} /div> img srcimg/pricetag_right.png> /div> button classss_button btn_yolk bevel_yolk is_special_get_btn @clickonBuyClick>{{ loc.p_chicken_goldbutton }}/button> /div>/script>script>var comp_physical_tag { template: #physical-tag-template, props: loc, item, methods: { onBuyClick: function () { this.$emit(buy-item-clicked, this.item); } }};/script>script iditem-type-selector-template typetext/x-template> div classss_marginbottom_sm> div idequip_itemtype classequip_panelhead display-grid grid-auto-flow-column align-items-center f_space_between> div v-foritem in items classico_itemtype clickme roundme_lg f_row align-items-center :class{selected : item.type selectedItemType} @clickonItemTypeClick(item.type)> svg> use :xlink:hrefitem.img>/use> /svg> /div> /div> /div>/script>script>var comp_item_type_selector { template: #item-type-selector-template, props: items, showSpecialItems, selectedItemType, inShop, inLimited, data: function () { return { showingTagged: false, selected: null } }, methods: { onItemTypeClick: function (itemType) { this.selected itemType; this.$emit(item-type-changed, itemType); }, }};/script>script iditem-grid-template typetext/x-template> div> div v-ifaccountSettled idequip_grid :classgridCls classdisplay-grid> item v-fori in itemsSorted :locloc :itemi :keyi.id :isSelectedisSelected(i) :has-buy-btnhasBuyBtn @item-selectedonItemSelected :is-shopinShop :hide-pricehidePrice :show-tooltipshowTooltips>/item> div v-showinInventory && !isSearching classgrid-item roundme_sm clickme morestuff box_relative common-box-shadow btn_green bevel_green f_row align-items-center justify-content-center @clickonSwitchToSkinsClick> icon classfill-white shadow-filter nameico-nav-shop>/icon> /div> div v-show(inShop && !hiddenPremItemCheck) || !itemsSorted.length classgrid-item roundme_lg box_absolute centered soldout text-center> div classsoldout_head shadow_bluebig5 v-htmlemptyGridMsg.title>/div> div classsoldout_text shadow_bluebig5 v-htmlemptyGridMsg.text>/div> /div> /div> div iditems-account-not-loaded v-show!accountSettled classtext-center> h3>{{loc.signin_auth_title}}/h3> p>{{loc.signin_auth_msg}}/p> /div> /div>/script>script>var comp_item_grid { template: #item-grid-template, components: { item: comp_item }, props: items, selectedItem, gridClass, categoryLocKey, inShop, hasBuyBtn, inInventory, hidePrice, showTooltips, isSearching, data() { return vueData; }, methods: { onItemSelected: function (selectedItem) { this.$emit(item-selected, selectedItem); }, isSelected: function (item) { if (!hasValue(this.selectedItem)) { return false; } return (this.selectedItem.id item.id); }, onSwitchToSkinsClick: function () { this.$emit(switch-to-skins); BAWK.play(ui_playconfirm); }, isPremItemInStore() { let hasItem false; for (let i 0; i this.items.length; i++) { const item this.itemsi; const isItem vueApp.premiumShopItems.find(i > i.isActive && i.itemId.id item.id); if (hasValue(isItem)) { hasItem true; break; } } return hasItem; } }, computed: { categoryName: function () { if (!hasValue(this.selectedItem)) { return null; } return this.locitem_type_ + this.selectedItem.item_type_id; }, hiddenPremItemCheck() { if (this.items.some(i > i.unlock purchase) || this.items.length ! 0) return true; if (this.items.some(i > i.unlock premium)) return this.isPremItemInStore(); return false; }, gridCls() { if (this.hasBuyBtn) { return grid-auto-flow-column gap-1; } else { return grid-column-3-eq align-content-start align-content-start gap-sm; } }, itemsSorted() { const unlockPriority premium, vip, physical, manual, default, purchase; return this.items.sort((b, a) > { const aTags Array.isArray(a.item_data.tags) ? a.item_data.tags : ; const bTags Array.isArray(b.item_data.tags) ? b.item_data.tags : ; // Check for Premium tag with purchase unlock const aIsPremiumPurchase aTags.includes(Premium) && a.unlock purchase; const bIsPremiumPurchase bTags.includes(Premium) && b.unlock purchase; if (aIsPremiumPurchase && !bIsPremiumPurchase) return 1; if (!aIsPremiumPurchase && bIsPremiumPurchase) return -1; const aPriority unlockPriority.indexOf(a.unlock); const bPriority unlockPriority.indexOf(b.unlock); return bPriority - aPriority; }); }, emptyGridMsg() { if (this.isSearching) { return { title: this.loceq_search_out_head, text: this.loceq_search_out_text } } else { return { title: this.loceq_sold_out_head, text: this.loceq_sold_out_text } } } }};/script>script idegg-store-template typetext/x-template> div classf_col> egg-store-item v-foritem in products :keyitem.sku :itemitem :locloc inStoretrue :account-setaccountSettled :isUpgradedisUpgraded :isSaleEventsaleEvent @on-bundle-info-clickedopenProductBundlePopup @on-try-prem-item-ononTryPremItemOn>/egg-store-item> /div>/script>template idcomp-store-item> div v-ifshowItem classsingle-egg-store-item box_relative align-items-center roundme_md common-box-shadow :classitemCls, {purchased: purchased}> header v-ifproductTypeItem || productTypeBundle classgrid-span-2-start-1> h6 classsingle-egg-store-header nospace f_row align-items-center f_space_between> {{ loctitle }} icon v-ifproductTypeItem classegg-store-item-type :nameproductIcon>/icon> /h6> /header> div classdisplay-grid grid-column-1-2 align-items-center text-center> div> img :srcimg classeggshop_image roundme_md display-block center_h :classimgCls @clickonTryPremItemOn> div v-ifproductTypeItem classtext-center> div classeggshop_pricebox text_brown :class{ slashed: item.salePrice }> ${{ price }} span>USD/span> /div> /div> /div> div> header v-if!productTypeItem && !productTypeBundle> h6 classeggshop_bigtitle nospace text_blue5>{{ loctitle }}/h6> /header> div classdisplay-grid> p v-ifshowSubtitle classeggshop_subtitle font-sigmar :classsubTitleCls v-htmllocdescription>/p> /div> div classsingle-egg-store-price box_relative z-index-2> p v-if!productTypeItem classeggshop_pricebox nospace display-inline :classpriceCls>span classeggshop-dollar-sign>$/span>{{ item.price }}span classeggshop-currency-type> USD/span>/p> button v-ifproductTypeBundle classbtn_store ss_button btn_yolk bevel_yolk btn_sm @clickonBundleInfoClicked>More info/button> button classbtn_store ss_button btn_green bevel_green btn_sm @clickonItemClicked() :disabledpurchased && productTypeBundle>{{ buyBtnText }}/button> /div> button v-ifproductTypeItem && !purchased && inStore classss_button btn_yolk bevel_yolk btn_sm center_h vip-get-btn f_row align-items-center @clickonVipClick>span v-htmlloc.p_egg_shop_free_with_vip>/span>icon classegg-store-item-type shadow-filter nameico-vip>/icon>/button> /div> /div> !-- div v-ifitem.salePrice classsale-desc box_absolute bottom-0>{{ loc.egg_pack_special_msg }}/div> --> /div>/template>script> const comp_store_item { template: #comp-store-item, props: loc, item, inStore, accountSet, isUpgraded, isSaleEvent, data() { return { purchased: false, attempt: 0, productItems: , productIcon: , bundleInfo: { items: , isOwned: false, price: 0, img: , name: , }, }; }, mounted() { this.setupProduct(); }, methods: { onTryPremItemOn() { if (this.productTypeItem) { this.$emit(on-try-prem-item-on, this.productItems0); } }, onItemClicked() { if (!this.accountSet || !vueApp.accountSettled) { vueApp.hideEggStorePopup(); setTimeout(() > { if (this.attempt 5) { this.onItemClicked(this.item.sku); this.attempt++; } else { vueApp.showGenericPopup(uh_oh, error, ok); } }, 300); vueApp.pleaseWaitPopup(); return; } // vueApp.hidePopupEggStoreSingle(); if ((this.item.type item || this.item.type bundle) && !hasValue(this.item.itemIds0)) { vueApp.showGenericPopup(uh_oh, p_egg_shop_no_item_id, ok); return; } if (this.purchased && this.productTypeItem) { console.log(Item is owned so lets go see it.); vueApp.showItemOnEquipScreen(extern.catalog.findItemById(this.item.itemIds0)); return; } extern.buyProductForMoney(this.item.sku); ga(send, event, vueApp.googleAnalytics.cat.purchases, vueApp.googleAnalytics.action.eggShackProductClick, this.item.sku); }, onBundleInfoClicked() { if (this.bundleInfo.items.length 0) { this.productItems.forEach(item > { this.bundleInfo.items.push(item); }); this.bundleInfo.isOwned this.purchased; this.bundleInfo.price this.price; this.bundleInfo.img this.img; this.bundleInfo.name this.description; } this.$emit(on-bundle-info-clicked, this.bundleInfo); }, onVipClick() { // this.$parent.$parent.hide(); vueApp.showSubStorePopup(); }, getItemType() { const item extern.catalog.findItemById(this.item.itemIds0); const obj {}; if (item.exclusive_for_class ! null) { obj.name getKeyByValue(CharClass, item.exclusive_for_class).toLowerCase(); obj.isClass true; } else { obj.name getKeyByValue(ItemType, item.item_type_id).toLowerCase(); obj.isClass false; } return obj; }, setupProduct() { switch (this.item.type) { case item: this.productItems extern.catalog.findItemById(this.item.itemIds0); this.purchased extern.isItemOwned(this.productItems0); this.getIcon(); break; case bundle: let owned ; this.productItems extern.catalog.findItemsByIds(this.item.itemIds); this.productItems.forEach(item > { if (extern.isItemOwned(item)) { owned.push(item.id) } }); this.purchased owned.length this.productItems.length; break; default: break; } }, getIcon() { if (this.productItems0.exclusive_for_class ! null) { this.productIcon `ico-weapon-${getKeyByValue(CharClass, this.productItems0.exclusive_for_class).toLowerCase()}`; } else { this.productIcon `ico-${getKeyByValue(ItemType, this.productItems0.item_type_id).toLowerCase()}`; } } }, computed: { productTypeItem() { return this.item.type item }, productTypeBundle() { return this.item.type bundle }, productTypeCurrency() { return this.item.type currency }, title() { if (this.productTypeBundle) { return `product_bundles_title`; } return `${this.item.sku}_title`; }, imgCls() { return this.productTypeBundle ? box_absolute egg-store-bundle-img centered_y z-index-1 : ; }, priceCls() { return this.productTypeBundle ? text_yellow : text_blue5; }, description() { if (this.productTypeBundle) { return `${this.item.sku}_title`; } return `${this.item.sku}_desc`; }, saleDesc() { if (this.item.salePrice) { return `${this.item.sku}_sale_desc`; } }, img() { switch (this.item.type) { case item: return `img/store/items/${this.item.sku}.gif`; break; case bundle: return `img/store/bundles/${this.item.sku}.png`; break; default: return `img/${!this.isSaleEvent ? : store-black-friday/}${this.item.sku}.png`; break; } }, itemType() { return single-egg-store-item-is- + this.item.type; }, itemCls() { return `${this.itemType} ${this.item.sku} ${this.item.type currency ? : }`; }, buyBtnText() { if (this.purchased && this.productTypeItem) { return this.loc.p_egg_shop_see_item; } else if (this.productTypeBundle && this.purchased) { return this.loc.eq_owned; } return this.loc.p_buy_item_confirm; }, showItem() { if (this.inStore) return this.item.inStore; return true; }, flagTxt() { if (this.item.salePrice) { return fa-tag; } return fa-gem }, showSubtitle() { if (this.productTypeItem) return true; if (this.isSaleEvent) { return false; } return true; }, price() { if (this.item.salePrice) { return this.item.salePrice; } else { return this.item.price; } }, subTitleCls() { switch (this.item.type) { case item: return text-center text_brown; break; case bundle: return text-shadow-black-40 text_white; break; default: return text_blue5 nospace; break; } }, }, };/script>script>var comp_egg_store { template: #egg-store-template, components: { egg-store-item: comp_store_item, }, data() { return vueData; }, props: products, saleEvent, methods: { onItemClicked: function (sku) { if (!this.accountSettled) { console.log(this.$parent.hide()); setTimeout(() > { this.onItemClicked(sku0) }, 300); vueApp.pleaseWaitPopup(); return; } if (vueApp.$refs.genericPopup.isShowing true) vueApp.$refs.genericPopup.close(); this.$parent.hide(); extern.buyProductForMoney(sku0); ga(send, event, this.googleAnalytics.cat.purchases, this.googleAnalytics.action.eggShackProductClick, sku); }, openProductBundlePopup(items) { this.$emit(on-bundle-info-clicked, items); }, onTryPremItemOn(item) { this.$emit(on-try-prem-item-on, item); }, },};/script>script>var comp_equip_screen { template: #equip-screen-template, components: { equipped-slots: comp_equipped_slots, color-select: comp_color_select, item-timer: comp_item_timer, price-tag: comp_price_tag, physical-tag: comp_physical_tag, item-type-selector: comp_item_type_selector, item-grid: comp_item_grid, house-ad-small: comp_house_ad_small, weapon-select-panel: comp_weapon_select_panel, item: comp_item, // account-panel: comp_account_panel, house-ad-small: comp_house_ad_small, egg-store: comp_egg_store, settings-control-binder: comp_settings_control_binder, settings-gamepad-binder: comp_settings_gamepad_binder, language-selector: comp_language_selector, settings-adjuster: comp_settings_adjuster, settings-toggler: comp_settings_toggler }, created() { this.debouncedSearch debounce((newValue, oldValue) > this.onItemSearch(newValue, oldValue), 500); }, data: function () { return vueData; }, equippedItems: {}, methods: { onItemSearchChange() { this.itemSearchVal this.$refs.itemSearch.value; }, setupItemGridMain() { if (this.isOnEquipModeFeatured) { this.populateItemGridWithTagged(this.equip.specialItemsTag); } else { this.populateItemGridWithType(this.equip.selectedItemType); } }, setup: function (itemType, wasFeatured) { if (!itemType) { itemType ItemType.Primary; } this.updateEquippedItems(); this.equip.posingStampPositionX extern.account.stampPositionX || 0; this.equip.posingStampPositionY extern.account.stampPositionY || 0; this.poseEquippedItems(); if (itemType tagged || wasFeatured) { this.populateItemGridWithTagged(this.equip.specialItemsTag); } else { this.populateItemGridWithType(itemType); } this.selectEquippedItemForType(); }, itemAvailForPurchase(i) { return i.is_available && i.unlock purchase; }, onPopupOpened() { if (this.equip.selectedItemType ItemType.Stamp) { this.removeKeyboardStampPositionHandlers(); } }, onPopupClosed() { if (this.equip.selectedItemType ItemType.Stamp && this.currentEquipMode this.equipMode.inventory) { this.addKeyboardStampPositionHandlers(); } }, onHvsmPopupOpen() { this.setup(tagged); this.equip.hvsmHeroItems extern.getTaggedItems(premFeatOne).filter(i > this.itemAvailForPurchase(i)); this.equip.hvsmMonsterItems extern.getTaggedItems(premFeatOne).filter(i > this.itemAvailForPurchase(i)); }, onHvsmPopupClose() { vueApp.switchToHomeUi(); }, // onHsvmItemSelected(items) { // return this.equip.selectedItem ! undefined ? items.some(i > i.id this.equip.selectedItem.id) : false; // }, updateEquippedItems: function () { this.equipped extern.getEquippedItems(); this.equip.posingStampPositionX extern.account.stampPositionX; this.equip.posingStampPositionY extern.account.stampPositionY; }, clamp: function(value, min, max) { return Math.min(Math.max(value, min), max); }, moveStampClick: function(x, y) { BAWK.play(ui_onchange); this.moveStamp(x, y); }, moveStamp: function(x, y) { if (this.isSubscriber) { x this.clamp(this.equip.posingStampPositionX + x, -12, 12); y this.clamp(this.equip.posingStampPositionY + y, -15, 17); this.equip.posingStampPositionX x; this.equip.posingStampPositionY y; if (this.currentEquipMode this.equipMode.inventory) { extern.account.stampPositionX x; extern.account.stampPositionY y; } extern.setStampPosition(x, y); } }, resetStampPosition: function() { BAWK.play(ui_onchange); this.equip.posingStampPositionX 0; this.equip.posingStampPositionY 0; extern.setStampPosition(0, 0); }, poseEquippedItems: function () { let items { ItemType.Hat: this.equippedItemType.Hat, ItemType.Stamp: this.equippedItemType.Stamp, ItemType.Primary: this.equippedItemType.Primary, ItemType.Secondary: this.equippedItemType.Secondary, ItemType.Grenade: this.equippedItemType.Grenade, ItemType.Melee: this.equippedItemType.Melee } if (this.ui.showHomeEquipUi false) { Object.keys(items).forEach(key > { key parseInt(key, 10); if (key ! this.equip.selectedItemType) { delete itemskey; } }); } else { switch (this.equip.showingWeaponType) { case ItemType.Primary: itemsItemType.Melee null; itemsItemType.Grenade null; break; case ItemType.Secondary: itemsItemType.Melee null; itemsItemType.Grenade null; break; case ItemType.Melee: itemsItemType.Primary null; itemsItemType.Grenade null; break; case ItemType.Grenade: itemsItemType.Secondary null; itemsItemType.Melee null; break; default: itemsItemType.Melee null; itemsItemType.Grenade null; break; } } var stampPosX this.equip.posingStampPositionX; var stampPosY this.equip.posingStampPositionY; extern.poseWithItems(items, stampPosX, stampPosY); }, selectEquippedItemForType: function () { this.equip.selectedItem this.equippedthis.equip.selectedItemType; }, populateItemGridWithType: function (itemType) { this.equip.selectedItemType itemType; var items extern.getItemsOfType(itemType); this.populateItemGrid(items); this.equip.categoryLocKey item_type_{0}{1}.format(itemType, ((itemType ItemType.Primary) ? _ + this.classIdx : )); }, populateItemGridWithTagged: function (tag, itemType) { var items extern.getTaggedItems(tag, itemType); this.populateItemGrid(items); this.equip.categoryLocKey item_type_5; }, populateItemGrid: function (items) { if (this.currentEquipMode vueData.equipMode.inventory) { items items.filter(i > extern.isItemOwned(i) || (i.is_available && i.unlock default)); } else { items items.filter(i > i.is_available && !extern.isItemOwned(i) && (i.unlock purchase || (i.unlock premium && i.sku && i.activeProduct))); } this.equip.showingItems items; }, onBackClick: function () { vueApp.showSpinner(); if (!this.isInShop) { extern.account.stampPositionX this.equip.posingStampPositionX; extern.account.stampPositionY this.equip.posingStampPositionY; } extern.saveEquipment(() > { if (extern.inGame) { // vueApp.showRespawnDisplayAd(); extern.closeEquipInGame(); } vueApp.hideSpinner(); this.equip.showingWeaponType ItemType.Primary; }); }, stampPositionKeyboardHandler(e) { var keybinds this.settingsUi.controls.keyboard.game; if (e.key.toUpperCase() keybindskeybinds.findIndex(item > item.id up).value) { this.moveStamp(0, 1); } else if (e.key.toUpperCase() keybindskeybinds.findIndex(item > item.id down).value) { this.moveStamp(0, -1); } else if (e.key.toUpperCase() keybindskeybinds.findIndex(item > item.id left).value) { this.moveStamp(-1, 0); } else if (e.key.toUpperCase() keybindskeybinds.findIndex(item > item.id right).value) { this.moveStamp(1, 0); } }, addKeyboardStampPositionHandlers: function () { document.addEventListener(keydown, this.stampPositionKeyboardHandler, false); }, removeKeyboardStampPositionHandlers: function () { document.removeEventListener(keydown, this.stampPositionKeyboardHandler); }, switchItemType: function (itemType) { if (itemType ! this.equip.selectedItemType) { // skins should only show the selected primary/secondary weapon if its on the primary/secondary tab if (this.currentEquipMode this.equipMode.skins) { this.equippedItemType.Primary extern.account.getPrimaryWeapon(); this.equippedItemType.Secondary extern.account.getSecondaryWeapon(); } if (itemType ItemType.Primary || itemType ItemType.Secondary || itemType ItemType.Grenade || itemType ItemType.Melee) { this.equip.showingWeaponType itemType; } else { this.equip.showingWeaponType null; } this.equip.selectedItemType itemType; if (!this.ui.showHomeEquipUi) this.$emit(photo-booth-type-id); this.poseEquippedItems(); if (itemType ItemType.Stamp && this.currentEquipMode this.equipMode.inventory) { this.addKeyboardStampPositionHandlers(); setTimeout(() > this.renderStamp(), 0); } else { this.removeKeyboardStampPositionHandlers(); } this.populateItemGridWithType(itemType); if (this.equip.itemSearchTerm) { this.itemSearch(); } if (this.isEquipModeInventory) { this.selectEquippedItemForType(); } else { this.selectFirstItemInShop(); } } if (!this.isInShop) { this.hideItemForSale(); this.hideItemForSpecial(); } BAWK.play(ui_click); }, itemSearch() { const SearchItems new Fuse(this.equip.showingItems, extern.fuseOptions).search(this.equip.itemSearchTerm); if (SearchItems.length > 0) { console.log(ItemSearch result start); console.log(ItemSearch Term, this.equip.itemSearchTerm); console.log(ItemSearch Items array); console.log(ItemSearch SearchItems, SearchItems); this.equip.showingItems.length 0; SearchItems.forEach(i > { console.log(ItemSearch item: , i.item.name, tags: , i.item.hasOwnProperty(item_data) && i.item.item_data.hasOwnProperty(tags) ? JSON.stringify(i.item.item_data.tags) : , meshName: , i.item.hasOwnProperty(item_data) && i.item.item_data.hasOwnProperty(meshName) ? i.item.item_data.meshName : None, i am a stamp, unlock: , i.item.unlock) this.equip.showingItems.push(i.item) }); console.log(ItemSearch result end); } else { this.equip.showingItems.length 0; } }, onItemSearch(newVal, oldVal) { // reset the grid if the search term shortens so we search the full list again if (newVal ! oldVal) { this.setupItemGridMain(); } if (newVal.length > 1) { this.equip.itemSearchTerm newVal.toLowerCase().replace(/\s/g, ); this.itemSearch(); } else if (!newVal.length) { this.onItemSearchReset(); } }, onItemSearchReset() { this.itemSearchVal ; this.equip.itemSearchTerm ; this.$refs.itemSearch.value ; this.setupItemGridMain(); }, onTaggedItemsClicked: function () { if (this.equip.selectedItemType tagged) { return; } this.showTaggedItems(this.equip.specialItemsTag); this.selectFirstItemInShop(); }, onTaggedResetItems() { this.showTaggedItems(this.equip.specialItemsTag); this.selectFirstItemInShop(); }, onPremiumItemsClicked() { if (this.equip.selectedItemType premium) { return; } this.showPremiumItems(); this.selectFirstItemInShop(); }, showPremiumItems() { this.equip.selectedItemType premium; var items extern.getPremiumItems(); this.populateItemGrid(items); this.equip.categoryLocKey item_type_7; }, showTaggedItems: function (tag, itemType) { this.equip.selectedItemType tagged; if ((this.isEquipModeInventory && !this.ownsTaggedItems(this.equip.specialItemsTag)) || extern.openShopOnly) { this.currentEquipMode this.equipMode.shop; vueApp.conditionalAnonWarningCall(); extern.openShopOnly false; } this.populateItemGridWithTagged(tag); }, showSelectedTagItems(tag) { this.equip.selectedItemType tagged; // if (this.equip.mode this.equip.equipMode.inventory) { // this.equip.mode this.equip.equipMode.shop; // } this.populateItemGridWithTagged(tag); }, ownsTaggedItems: function (tag) { return extern.getTaggedItems(tag).filter(i > { return extern.isItemOwned(i); }).length > 0; }, selectFirstItemInShop: function () { if (this.isInShop && this.equip.showingItems.length > 0) { this.selectItem(this.equip.showingItems0); } }, switchTo: function (mode, useItemType) { this.equip.showingItems ; if (!useItemType) this.equip.showingWeaponType ItemType.Primary; if (useItemType) this.switchItemType(useItemType); this.$refs.itemSearch.value ; this.equip.itemSearchTerm ; switch (mode) { case this.equipMode.shop: this.currentEquipMode this.equipMode.shop; this.getVaultedItemsForGrid(true); this.updateEquippedItems(); this.poseEquippedItems(); this.removeKeyboardStampPositionHandlers(); vueApp.conditionalAnonWarningCall(); break; case this.equipMode.inventory: if (this.equip.selectedItemType tagged && this.isOnEquipModeSkins || this.equip.selectedItemType tagged && this.isOnEquipModeFeatured) { if (!this.ownsTaggedItems(this.equip.specialItemsTag)) { this.switchItemType(ItemType.Primary); } } this.currentEquipMode this.equipMode.inventory; this.equip.stampPositionX extern.account.stampPositionX; this.equip.stampPositionY extern.account.stampPositionY; extern.setStampPosition(this.equip.stampPositionX, this.equip.stampPositionY); this.hideItemForSale(); this.hideItemForSpecial(); this.poseEquippedItems(); this.showItemsAfterEquipModeSwitch(); this.selectEquippedItemForType(); if (this.equip.selectedItemType ItemType.Stamp) { this.addKeyboardStampPositionHandlers(); } break; case this.equipMode.featured: this.updateEquippedItems(); this.poseEquippedItems(); this.showTaggedItems(this.equip.specialItemsTag) this.onTaggedItemsClicked(); this.getVaultedItemsForGrid(true); this.removeKeyboardStampPositionHandlers(); this.currentEquipMode this.equipMode.featured; vueApp.conditionalAnonWarningCall(); break; case this.equipMode.skins: this.setup(useItemType); this.currentEquipMode this.equipMode.skins; this.showItemsAfterEquipModeSwitch(); this.removeKeyboardStampPositionHandlers(); if (useItemType ItemType.Stamp) { setTimeout(() > this.renderItem(), 0); } vueApp.conditionalAnonWarningCall(); break; default: break; } // stop the ad from manually refreshing on every tab switch and inventory if (this.equip.displayAdHeaderRefresh) { vueApp.showHeaderAd(); this.equip.displayAdHeaderRefresh false; } this.selectFirstItemInShop(); BAWK.play(ui_toggletab); // vueApp.histPushState({game: this.screens.equip}, Shellshockers equipment shop, ?equipshop); }, showItemsAfterEquipModeSwitch: function () { if (this.equip.selectedItemType tagged) { this.showTaggedItems(this.equip.specialItemsTag) } else if (this.equip.selectedItemType premium) { this.showPremiumItems(); } else { this.populateItemGridWithType(this.equip.selectedItemType); } }, onEquippedTypeSelected: function (itemType) { this.equip.selectedItemType itemType; if (ItemType.Primary, ItemType.Secondary, ItemType.Grenade, ItemType.Melee.includes(this.equip.selectedItemType)) { this.equip.showingWeaponType itemType; } else { this.equip.showingWeaponType null; } this.switchTo(this.equipMode.inventory); }, onChangedClass: function () { this.hideItemForSale(); this.hideItemForSpecial(); this.updateEquippedItems(); if (this.equip.selectedItemType ! ItemType.Primary) { this.onEquippedTypeSelected(ItemType.Primary); } this.populateItemGridWithType(this.equip.selectedItemType); if (this.equip.itemSearchTerm) { this.itemSearch(); } if (extern.inGame && this.showScreen ! this.screens.equip) { this.equip.showingWeaponType ItemType.Primary; extern.closeEquipInGame(true); } if (!this.ui.showHomeEquipUi) this.$emit(photo-booth-type-id); this.poseEquippedItems(); }, autoSelectItem: function (item) { if (extern.isItemOwned(item)) { this.switchTo(this.equipMode.inventory); } else { this.switchTo(this.equipMode.skins); } if (item.exclusive_for_class) { extern.changeClass(item.exclusive_for_class); this.onChangedClass(); } else { this.switchItemType(item.item_type_id); } this.selectItem(item); }, selectItemClickSound(selectedItem) { let selectSound; if (!ItemType.Hat, ItemType.Stamp.includes(selectedItem.item_type_id) && selectedItem.unlock ! default) { switch (selectedItem.item_type_id) { case ItemType.Grenade: selectSound selectedItem.item_data.sound; break; case ItemType.Melee: const sounds Object.keys(BAWK.sounds).filter(s > s.startsWith(selectedItem.item_data.meshName)); selectSound soundsMath.floor(Math.random() * sounds.length); break; default: selectSound selectedItem.item_data.meshName + _fire; break; } } BAWK.play(selectSound, , ui_click); }, onItemSelected: function (item) { if (this.$refs.buyItemPopup.isShowing) return; this.selectItem(item); }, isPremItemInStore(item) { let hasItem false; const isItem this.premiumShopItems.find(i > i.isActive && i.itemId.id item.id); if (hasValue(isItem)) { hasItem true; } return hasItem; }, selectItem: function (item) { if (!hasValue(item)) return; var selectingSame hasValue(this.equip.selectedItem) && this.equip.selectedItem.id item.id; var selectedId selectingSame ? this.equip.selectedItem.id : null; var isWeapon (item.item_type_id ItemType.Primary || item.item_type_id ItemType.Secondary || item.item_type_id ItemType.Grenade || item.item_type_id ItemType.Melee); var typeId item.item_type_id; if (selectingSame) { if (this.isInShop) { this.hideItemForSale(); } else { if (!isWeapon) { this.equippedtypeId null; extern.tryEquipItem(null, typeId) } } this.equip.selectedItem null; this.updateEquippedItems(); this.poseEquippedItems(); this.renderStamp(); return; } this.equippedtypeId item; if (item) { this.equip.selectedItem item; if (this.currentEquipMode this.equipMode.featured || this.currentEquipMode this.equipMode.shop) { this.equip.selectedItemType typeId; if (isWeapon) { this.equip.showingWeaponType typeId } else { this.equip.showingWeaponType null; } } // this.equip.selectedItemType null; if (!this.ui.showHomeEquipUi) this.$emit(photo-booth-type-id); } if (!this.isInShop) extern.tryEquipItem(item, typeId); if (hasValue(item)) { if (this.isInShop) { switch (item.unlock) { case purchase: case premium: this.offerItemForSale(item); this.hideItemForSpecial(); break; } } } else { this.hideItemForSale(); this.hideItemForSpecial(); } this.selectItemClickSound(item); this.poseEquippedItems(); if (item.item_type_id ItemType.Stamp) { this.renderStamp(); } }, getButtonToggleClass: function (equipMode) { return (equipMode this.currentEquipMode) ? btn_toggleon : btn_toggleoff; }, offerItemForSpecial: function(item) { return this.equip.physicalUnlockPopup.item item; }, hideItemForSpecial: function() { this.equip.physicalUnlockPopup.item null; }, offerItemForSale: function (item) { this.equip.buyingItem item; }, hideItemForSale: function () { this.equip.buyingItem null; // this.equip.physicalUnlockPopup.item null }, onBuyItemClicked: function () { // If item is buying item show buyItemPopup or show physicalUnlockPopup if (this.equip.selectedItem && (this.isEquipModeShop || this.isOnEquipModeFeatured)) { this.equip.buyingItem this.equip.selectedItem; } if (this.equip.buyingItem) { if (this.chwRewardIds.includes(this.equip.buyingItem.id)) { this.equip.chwRewardBuyItem true; } this.$refs.buyItemPopup.toggle(); extern.renderItemToCanvas(this.equip.buyingItem, this.$refs.buyItemCanvas) } else { this.$refs.physicalUnlockPopup.toggle() } BAWK.play(ui_popupopen); }, onBuyItemConfirm: function () { if (this.equip.buyingItem.unlock premium) { extern.buyProductForMoney(this.equip.buyingItem.sku0); return; } else { extern.api_buy(this.equip.buyingItem, this.boughtItemSuccess, this.boughtItemFailed); } BAWK.play(ui_playconfirm); }, onBuyItemClose() { if (this.equip.chwRewardBuyItem) this.equip.chwRewardBuyItem false; }, boughtItemSuccess: function () { this.equip.selectedItem this.equip.buyingItem; ga(send, event, { eventCategory: this.googleAnalytics.cat.itemShop, eventAction: this.googleAnalytics.action.shopItemPopupBuy, eventLabel: this.equip.buyingItem.name, eventValue: this.equip.selectedItem.price }); var itemType this.equip.selectedItem.item_type_id; if (itemType ItemType.Primary || itemType ItemType.Secondary || itemType ItemType.Grenade || itemType ItemType.Melee) { this.equip.showingWeaponType itemType; } else { this.equip.showingWeaponType null; } this.hideItemForSale(); this.setup(itemType, this.isOnEquipModeFeatured); if (this.isEquipModeShop) { this.equip.showUnVaultedItems ; setTimeout(() > this.equip.showUnVaultedItems extern.getTaggedItems(this.ui.premiumFeaturedTag), 1); } }, boughtItemFailed: function () { vueApp.showGenericPopup(p_buy_error_title, p_buy_error_content, ok); BAWK.play(ui_reset); }, onRedeemClick: function () { this.$refs.redeemCodePopup.code ; this.$refs.redeemCodePopup.toggle(); BAWK.play(ui_popupopen); }, onRedeemCodeConfirm: function () { if (this.equip.redeemCodePopup.code.toUpperCase() D3LL0RKC1R) { this.giveStuffPopup.eggOrg false; this.giveStuffPopup.rickroll true; vueApp.showGiveStuffPopup(p_give_stuff_title); } else { this.giveStuffPopup.rickroll false; this.giveStuffPopup.eggOrg false; extern.api_redeem(this.equip.redeemCodePopup.code, this.redeemCodeSuccess, this.redeemCodeFailed); } BAWK.play(ui_playconfirm); }, redeemCodeSuccess: function (eggs, items) { this.populateItemGridWithType(this.equip.selectedItemType); this.giveStuffPopup.eggs eggs; this.giveStuffPopup.items items; vueApp.showGiveStuffPopup(p_give_stuff_title, eggs, items); let itemString ; this.giveStuffPopup.items.forEach(item > itemString + item.name); ga(send, event, { eventCategory: this.googleAnalytics.cat.redeem, eventAction: this.googleAnalytics.action.redeemed, eventLabel: `${itemString ? itemString : } ${this.giveStuffPopup.eggs ? this.giveStuffPopup.eggs + eggs : }` }); }, redeemCodeFailed: function () { vueApp.showGenericPopup(p_redeem_error_title, p_redeem_error_content, ok); BAWK.play(ui_reset); }, onPhysicalUnlockConfirm: function () { window.open(this.equip.physicalUnlockPopup.item.item_data.physicalItemStoreURL, _blank); }, onColorChanged: function (colorIdx) { this.equip.colorIdx colorIdx; extern.setShellColor(this.equip.colorIdx); BAWK.play(ui_onchange); }, onSwitchToSkinsClicked: function () { this.switchTo(this.equipMode.skins, this.equip.selectedItemType); }, getVaultedItemsForGrid(selectFirstItem) { this.equip.showUnVaultedItems.splice(0, this.equip.showUnVaultedItems.length) this.$nextTick().then(() > { this.equip.showUnVaultedItems extern.getTaggedItems(this.ui.premiumFeaturedTag); if (selectFirstItem) { this.equip.selectedItem this.equip.showUnVaultedItems0; } }); }, onPhotoboothClick: function () { if (extern.inGame) { return; } vueApp.switchToPhotoBoothUi(); BAWK.play(ui_popupopen); }, openProductBundlePopup(bundle) { if (this.equip.bundle.items.length 0) { this.equip.bundle.items.length 0; this.equip.bundle.items bundle.items; this.equip.bundle.owned bundle.isOwned; this.equip.bundle.price bundle.price; this.equip.bundle.img bundle.img; this.equip.bundle.name bundle.name; } this.$refs.bundlePopup.toggle(); }, onBundlePopupConfirm() { if (this.equip.bundle.owned) { return this.equipAllItemsInbundle(); } const activeBundle extern.getActiveBundles(); extern.buyProductForMoney(activeBundle0.sku); }, onBundlePopupClose() { this.equip.bundle.owned false; this.equip.bundle.items.length 0; }, equipTryPremItemOn(item) { BAWK.play(ui_click); this.selectItem(item); extern.tryEquipItem(item) }, equipAllItemsInbundle() { this.equip.bundle.items.forEach(item > { this.selectItem(item); extern.tryEquipItem(item) }); }, chwWatchAd() { this.$refs.buyItemPopup.toggle(); vueApp.chwDoIncentivized(); }, renderStamp() { if (this.$refs.stampCanvas undefined) return; var item this.equip.selectedItem; if (this.currentEquipMode ! this.equipMode.inventory) { item this.equippedItemType.Stamp } extern.renderItemToCanvas(item, this.$refs.stampCanvas); }, }, computed: { showShop() { return this.showScreen this.screens.equip; }, isOnEquipModeSkins() { return this.currentEquipMode this.equipMode.skins; }, isOnEquipModeFeatured() { return this.currentEquipMode this.equipMode.featured; }, isEquipModeInventory() { return this.currentEquipMode this.equipMode.inventory; }, isEquipModeShop() { return this.currentEquipMode this.equipMode.shop; }, isInShop: function () { return (this.isOnEquipModeSkins || this.isOnEquipModeFeatured || this.isEquipModeShop); }, isOnShopInventoryLimited() { return (this.isOnEquipModeSkins || this.isEquipModeInventory || this.isOnEquipModeFeatured) }, isOnShopInventory() { return (this.isOnEquipModeSkins || this.isEquipModeInventory) }, getGridClass: function () { if (this.equip.selectedItemType ! tagged) { return`item-grid-${getKeyByValue(ItemType, this.equip.selectedItemType).toLowerCase()}`; } }, gridCls() { return box_relative center_h overflow-x-hidden; }, isEggStoreSaleItem() { return this.eggStoreItems.some( item > itemsalePrice ! ); }, isBuyingItemPrem() { if (!this.equip.buyingItem) { return; } return this.equip.buyingItem.unlock premium; }, showPurchasesUi() { return this.showShop && this.isEquipModeShop; }, showShopUi() { return this.showShop && (this.isOnEquipModeSkins || this.isOnEquipModeFeatured || this.isEquipModeShop); }, screenCls() { return `screen-${getKeyByValue(this.equipMode, this.currentEquipMode)}`; }, isSelectedInUnVaulted() { return this.equip.showUnVaultedItems.some(item > item.id this.equip.selectedItem.id); }, showPriceTag() { return this.equip.buyingItem && (this.isOnEquipModeFeatured || this.isOnEquipModeSkins) && this.equip.showingItems.length > 0 }, showShopCart(){ return this.isEquipModeInventory && this.ui.showHomeEquipUi; }, photoBoothBtnTxt() { return this.ui.showHomeEquipUi ? this.loc.screen_photo_booth_menu : this.loc.screen_photo_booth_menu_close; }, eggShopSortItems() { return this.eggStoreItems.sort((b, a) > { if (a.type item && b.type ! item) return 1; if (a.type ! item && b.type item) return -1; if (a.type bundle && b.type ! bundle) return 1; if (a.type ! bundle && b.type bundle) return -1; return 0; }); }, photoBoothBtnUi() { return { icon: this.ui.showHomeEquipUi ? fa-camera : fa-times, cls: this.ui.showHomeEquipUi ? btn_blue bevel_blue : btn_red bevel_red, txt: this.ui.showHomeEquipUi ? this.loc.screen_photo_booth_menu : this.loc.screen_photo_booth_menu_close } }, chwButtonTxt() { if (this.chw.ready) { return chw_chance_to_win_item; } else { return chw_wait_msg; } }, bundlePopupConfirmTxt() { return this.equip.bundle.owned ? this.loc.product_bundles_popup_owned_text : this.loc.p_buy_item_confirm; }, }, watch: { itemSearchVal(val, old) { this.debouncedSearch(val, old); }, }};/script>script idgame-screen-template typetext/x-template> div :classpauseScreenStateClass> div refcanvasWrap>/div> !-- end .pause-screen-header --> div refvipWrapper> div idchickenBadge refchickenBadge v-showgame.isPaused && isSubscriber && showScreen screens.game>img :srcupgradeBadgeUrl>/div> /div> div refgameUIWrapper> div refgameUiInner classpaused-game-ui z-index-1 centered_x fullwidth v-showshowScreen screens.game> div refplayerListWrapper classplayer-list-wrapper> div refplayerContainer classplayer__container v-showshowScreen screens.game> div idplayerSlot classplayerSlot styledisplay: none> div> span>/span> !-- Name --> span>/span> !-- Score --> /div> div styledisplay: block;>/div> !-- Icons --> /div> !-- end .playerSlot --> div idplayerList>/div> div v-ifextern.GameOptions.value.flags & extern.GameFlags.locked :keygameOptionsPopup.options.flags classfa fa-lock fa-2x text_white>/div> /div> !-- end .player__container --> /div> !-- end .player_list_wrapper --> !-- Scope --> div idscopeBorder> div idmaskleft>/div> div idmaskmiddle>/div> div idmaskright>/div> /div> !-- Best Streak --> div idshellStreakContainer classdisplay-grid grid-column-1-auto align-items-center gap-sm> span refshellStreakCap idshellStreakCaptionStreak classh1 text_yellow>span>x/span>{{game.bestStreak.count}}/span> div classshellStreakCaptionWrap> h1 idshellStreakCaption>Best br>Streak/h1> !-- p idshellStreakMessage v-showgame.streakMsg.msg classtext_yellow>{{ game.streakMsg.msg }}/p> --> /div> /div> !-- Challenge --> div idplayerChallengeComplete v-showgame.challengeMsg.showing classcentered_x in-game-notification> img idplayerChallengeImg :srcgame.challengeMsg.icon alt> h2 idplayerChallengetitle classtext_white nospace>{{game.challengeMsg.title}}/h2> p classtext_yellow nospace>{{ loc.complete }}/p> /div> !-- Team Scores --> div idteamScores classcentered_x display-grid grid-auto-flow-column align-items-center gap-sm> div idteamScore2 classteamScore red inactive box_relative> i classfas fa-egg>/i> p idteamScoreNum2 classnumber centered_x>0/p> /div> h3 classtext_white vs>VS/h3> div idteamScore1 classteamScore blue inactive box_relative> i classfas fa-egg>/i> p idteamScoreNum1 classnumber centered_x>0/p> /div> !--div> img srcimg/spatulaIcon.png stylewidth: 3em; transform: rotate(60deg)> /div>--> /div> !-- Capture Icon --> div refcaptureIconWrap idcaptureIconWrap> div refcaptureIconContainer idcaptureIconContainer> div idcaptureInsideContainer> div idcaptureIconCaption>20M/div> div idcaptureRingBackground>/div> div idcaptureRingContainer> div idcaptureRing>/div> /div> svg idcaptureIcon viewBox0 0 53.6 36> use hrefimg/kotc/crown.svg#crown /> /svg> /div> /div> /div> !-- Hit Markers --> div idhitMarkerContainer> div idhitMarker0 classhideme>/div> div idhitMarker1 classhideme>/div> div idhitMarker2 classhideme>/div> div idhitMarker3 classhideme>/div> /div> !-- Reticle --> div idreticleDot>/div> div idreticleContainer> div idredDotReticle>/div> div idcrosshairContainer> div idcrosshair0 classcrosshair normal>/div> div idcrosshair1 classcrosshair normal>/div> div idcrosshair2 classcrosshair normal>/div> div idcrosshair3 classcrosshair normal>/div> /div> div idshotReticleContainer> div idshotBracket0 classshotReticle border normal>/div> div idshotBracket1 classshotReticle border normal>/div> div idshotBracket2 classshotReticle fill normal>/div> div idshotBracket3 classshotReticle fill normal>/div> /div> div idreadyBrackets> div classreadyBracket>/div> div classreadyBracket>/div> div classreadyBracket>/div> div classreadyBracket>/div> /div> /div> !-- Capture Zone progress --> div idcaptureContainer> div classcaptureScoreContainer> svg classcaptureCrown viewBox0 0 53.6 36> use hrefimg/kotc/crown.svg#crown fillvar(--ss-team-red-light) /> /svg> div idcaptureScoreRed classcaptureScore>0/5/div> /div> div idcaptureCenter> div idcaptureBarContainer> div idcaptureBar>/div> /div> div idcaptureBarText>/div> /div> div classcaptureScoreContainer> svg classcaptureCrown viewBox0 0 53.6 36> use hrefimg/kotc/crown.svg#crown fillvar(--ss-team-blue-light) /> /svg> div idcaptureScoreBlue classcaptureScore>0/5/div> /div> /div> !-- Big Message Bar --> div idbigMessageContainer styledisplay: none> div idbigMessageBar> div idbigMessage>/div> div idbigMessageCaption>/div> /div> /div> !-- Weapon --> div idweaponBox> div idgrenades> img idgrenade3 classgrenade srcimg/ico_grenadeEmpty.png?v1/> img idgrenade2 classgrenade srcimg/ico_grenadeEmpty.png?v1/> img idgrenade1 classgrenade srcimg/ico_grenadeEmpty.png?v1/> /div> h2 idweaponName>/h2> h2 idammo classshadow_grey>/h2> /div> !-- Health --> div idhealthContainer v-show!game.isPaused && !ui.game.spectate> svg classhealthSvg> circle idhardBoiled-bar classhealthBar-hardBoiled healthBar-area cx50% cy50% r2.85em /> circle idhardBoiled-stroke classhealthBar-hardBoiled-stroke healthBar-area cx50% cy50% r2.4em /> circle idhealthBar classhealthBar healthBar-area cx50% cy50% r2.15em /> circle classhealthYolk cx50% cy50% r1.35em /> /svg> div idhealthHp classcentered>100/div> /div> div idegg-breaker-wrap classegg-breaker-wrap box_absolute font-nunito grid-auto-flow-column gap-1> shell-streak-msg v-formsg in game.shellStreakTimers :locloc :msgIdmsg.msgId :msgmsg.msg>/shell-streak-msg> /div> !-- egg-breaker-wrap end --> icon idspatulaPlayer nameico_spatula>/icon> !-- Grenade throw power --> div idgrenadeThrowContainer> div idgrenadeThrow>/div> /div> div idkill-death-box refkillDeathBox v-showgame.ingameNotification.showing classin-game-notification centered_x> img v-showgame.ingameNotification.item.type ! 2 srcimg/ico_streak.png alt classcentered_x kill-death-box-img /> span v-showgame.ingameNotification.item.type 2 classh1 text_yellow centered_x>span>x/span>{{game.ingameNotification.item.streak}}/span> h2 v-showgame.ingameNotification.item.type 2 classnospace text_white>{{ loc.ks_shell_streak }}!/h2> div classkill-death-msg refkillMsg v-showgame.ingameNotification.item.type ! 2 :classgame.ingameNotification.item.style v-htmlgame.ingameNotification.item.msg>/div> p v-showgame.ingameNotification.item.type 2 classnospace text_yellow text-uppercase>{{ game.ingameNotification.item.msg }}/p> /div> transition namefade> div idcts-message v-showgame.ctsMsg.showing :classgame.ctsMsg.teamsgame.ctsMsg.team classcentered_y in-game-notification light-dark display-grid grid-auto-flow-column gap-1 align-items-center> div> h1 classteam-title nospace text-right>{{ game.ctsMsg.teamsgame.ctsMsg.team }}/h1> p classnospace text_white text-right>{{ locgame.ctsMsg.msg }}/p> /div> icon classicon-spatula nameico_spatula>/icon> /div> /transition> !-- Game messages --> div idgameMessage>/div> !-- Kill ticker --> div refkillTickerWrapper> div refkillTicker idkillTicker classchat>/div> /div> !-- Spectator controls --> div idspectate> div classh4 margins_sm>{{ loc.ui_game_spectating }}/div> div v-ifui.game.spectatingPlayerName> div classh1 margins_sm>{{ ui.game.spectatingPlayerName }}/div> div> span classfas fa-arrow-up>/span> / span classfas fa-arrow-down>/span> {{ loc.ui_game_spectate_select }} /div> /div> div>{{ spectateControls }}/div> /div> div refspectateWrap classspectate-wrapper> button refspectateBtn v-show!isRespawning && game.isPaused && showScreen screens.game && delayTheCracking @clickonSpectateClicked() classss_button btn_blue bevel_blue btn_sm pause-screen-btn-spectate :disabledisRespawning :titleloc.p_pause_spectate> i classfas fa-eye fa-2x>/i> /button> /div> /div> /div> !-- ref gameUIWrapper --> div refchatWrapper :class{chat-hidden: !chatEnabled} classchat-wrapper pause-ui-element box_absolute roundme_lg> div refannouncementMsg v-showannouncementMessage idannouncement_message classfont-nunito text_white>span classtext_yellow>Announcement: /span>{{ announcementMessage }}/div> div v-show!chatEnabled classpaddings_md> h4 classtext_white nospace>{{ loc.ingame_chat_hidden }}/h4> p @clickonSettingsClicked(true) classnospace text_white>{{ loc.ingame_chat_open_settings }}/p> /div> div refchatContainer v-showchatEnabled classchat-container> div idchatOut classchat roundme_sm>/div> input idchatIn classchat roundme_sm maxlength64 tabindex-1 v-bind:placeholderloc.ingame_press_tab_to_exit onkeydownextern.onChatKeyDown(event) onclickextern.startChat(event) onblurextern.stopChat(event)>/input> /div> /div> !-- Chat --> !-- Ingame UI Stuff --> div idinGameUI classroundme_lg> div id serverAndMapInfo> h5 classnospace title text-right>{{ loc.map }}/h5> p classname>{{ game.mapName }}/p> h5 classnospace title text-right>{{ loc.server }}/h5> p classname>{{ serverLoc }}/p> /div> div idreadouts> h5 classnospace title>{{ loc.ui_game_fps }}/h5> p idFPS classname>/p> h5 classnospace title>{{ loc.ui_game_ping }}/h5> p idping classname>/p> /div> /div> !-- Popup: Mute/Boot Player --> small-popup idplayerActionsPopup refplayerActionsPopup :hide-confirmtrue @popup-openedsharedPopupOpened> template slotheader>{{ playerActionsPopup.playerName }}/template> template slotcontent> div v-ifplayerActionsPopup.vipMember classvip-member-wraper display-grid align-items-center grid-column-1-2 ss_marginbottom_xl> figure classplayer-action-vip-img center_h> img srcimg/vip-club/vip-club-popup-emblem.png altVip member icon classcenter_h> /figure> div> h6 classroundme_sm shadow_blue4 ss_margintop ss_marginbottom>{{loc.ui_game_playeractions_vip_member}}/h6> button v-if!isSubscriber classss_button btn_pink bevel_pink fullwidth @clickopenVipPopup>{{loc.ui_game_playeractions_join_vip}}/button> /div> /div> !-- .vip-member-wraper --> p>{{ loc.ui_game_playeractions_header }}/p> button v-ifplayerActionsPopup.social classss_button btn_medium btn_yolk bevel_yolk fullwidth @clickonClickCreator(playerActionsPopup.social.url)>i classfab :classplayerSocial>/i> {{loc.ui_game_playeractions_creator}}/button> h4 classss_button btn_medium btn_blue bevel_blue v-on:clickonMuteClicked>{{ muteButtonLabel }}/h4> h4 classss_button btn_medium btn_red bevel_red v-on:clickonReportActionClicked>{{ loc.ui_game_playeractions_report }}/h4> h4 classss_button btn_medium btn_yolk bevel_yolk v-ifextern.isGameOwner v-on:clickonBootClicked>{{ loc.ui_game_playeractions_boot }}/h4> h4 classss_button btn_medium btn_pink bevel_pink v-ifextern.adminRoles & 4 v-on:clickonBanActionClicked>{{ loc.ui_game_playeractions_ban }}/h4> h4 classss_button btn_medium btn_green bevel_green v-ifextern.adminRoles & 64 v-on:clickonInfoClicked>Info/h4> /template> template slotcancel>{{ loc.cancel }}/template> /small-popup> !-- Popup: Ban Player --> small-popup idbanPlayerPopup refbanPlayerPopup :hide-confirmtrue @popup-openedsharedPopupOpened @popup-closedsharedPopupClosed> template slotheader>Ban Player/template> template slotcontent> h5 classtext_yellow>{{ playerActionsPopup.playerName }}/h5> input refbanReason typetext placeholderReason classss_field ss_margintop ss_marginbottom fullwidth @focus$event.target.select()> select refbanDuration classss_field> option v-ford in banDurations v-bind:valued.value v-htmld.label>/option> /select> h4 classss_button btn_medium btn_green bevel_green v-ifextern.adminRoles & 4 v-on:clickonBanClicked>{{ loc.ui_game_playeractions_ban }}/h4> /template> template slotcancel>{{ loc.cancel }}/template> /small-popup> !-- Popup: Report Player --> small-popup idreportPlayerPopup refreportPlayerPopup :hide-confirmtrue @popup-openedsharedPopupOpened @popup-closedsharedPopupClosed> template slotheader>{{ loc.report_player_title }}/template> template slotcontent> h5 classtext_yellow>{{ playerActionsPopup.playerName }}/h5> p v-for(r, i) in reportReasons> label classss_checkbox label> {{ locr.locKey }} input typecheckbox v-modelreportPlayerPopup.checkedi> span classcheckmark>/span> /label> /p> br> button classss_button btn_medium btn_green bevel_green :disabled!isReportFilled v-on:clickonReportClicked>{{ loc.ui_game_playeractions_report }}/button> /template> template slotcancel>{{ loc.cancel }}/template> /small-popup> !-- Popup: Switch Team --> small-popup idswitchTeamPopup refswitchTeamPopup :overlay-closefalse @popup-confirmonSwitchTeamConfirm @popup-openedsharedPopupOpened> template slotheader>{{ loc.p_switch_team_title }}/template> template slotcontent> h4 classroundme_sm :classnewTeamColorCss>{{ newTeamName }} i classfa fa-flag>/i>/h4> p>{{ loc.p_switch_team_text }}/p> /template> template slotcancel>{{ loc.no }}/template> template slotconfirm>{{ loc.yes }}/template> /small-popup> !-- Popup: Share Link --> small-popup idshareLinkPopup refshareLinkPopup :popup-modelgame.shareLinkPopup @popup-confirmonShareLinkConfirm @popup-openedsharedPopupOpened> template slotheader>{{ loc.p_sharelink_title }}/template> template slotcontent> p>{{ loc.p_sharelink_text }}/p> p>input refshareLinkUrl typetext classss_field ss_margintop ss_marginbottom fullwidth v-modelgame.shareLinkPopup.url @focus$event.target.select() @popup-openedsharedPopupOpened @popup-closedsharedPopupClosed>/p> /template> template slotcancel>{{ loc.close }}/template> template slotconfirm>{{ loc.p_sharelink_copylink }}/template> /small-popup> div refpausePopupWrap idpausePopupWrap> div v-showgame.pauseScreen.showMenu refpausePopup classpause-container centered> div idrespawn-group classdisplay-grid> div idrespawn-menu> div classdisplay-grid grid-column-2-eq gap-sm> div v-showfirebaseId idchw-progress-wrapper classchw-progress-wrapper box_relative pause-screen-ui grid-span-2-start-1> !-- incentivized-mini-game --> img classbox_aboslute chw-progress-img chw-chick :srcchwChickSrc /> div classchw-progress-bar-wrap ss_button btn-account-status box_relative :classprogressBarWrapClass @clickplayIncentivizedAd> p classchw-progress-bar-msg box_aboslute centered nospace text-center chw-msg chw-p-msg text-shadow-black-40> {{ progressMsg }} span v-show!chw.ready && !chw.adBlockDetect> span v-if!chw.ready> span v-showchw.hours classchw-pie-num>{{chw.hours}}:/span> span classchw-pie-num>{{chw.minutes}}:/span> span classchw-pie-num>{{chw.seconds}}/span> br /> span v-showchw.limitReached v-htmlwakeTheChw>/span> /span> icon v-showchwShowVideoIcon nameico_watchAd classchw-icon-watch-ads>/icon> /span> /p> div classchw-progress-bar-inner @clickplayIncentivizedAd :class{chw-ready : chw.ready} :style{width: chwProgress}>/div> /div> img srcimg/egg_pack_small.png classcentered_y chw-egg-bundle /> /div> !-- #chw-progress-wrapper --> player-challenge-list :locloc :challengesplayer.challenges :challenge-dataplayer.challengeDailyData :timersplayer.challengeTimer :in-gametrue @challengeRerollchallengeReroll>/player-challenge-list> div classpause-ad-wrap display-grid align-items-center> div classpause-screen-content pause-bg roundme_md box_relative center_h> section idbtn_horizontal classpause-game-weapon-select pause-popup--btn-group> div classmedia-tab-container display-grid align-items-center ss_marginbottom bg_blue3> h4 classcommon-box-shadow text-shadow-black-40 text_white>{{loc.p_weapon_title}}/h4> /div> weapon-select-panel refweaponSelect idweapon_select :locloc :current-classclassIdx :account-settledtrue :play-clickedfalse @changed-classpauseWeaponSelect :current-screenshowScreen :screensscreens >/weapon-select-panel> /section> /div> !-- end .pause-screen-content --> !-- div classpause-screen-play-btn center_h text-center> --> button v-if!extern.observingGame @clickonPlayClicked() classss_button btn_big btn-dark-bevel btn-respawn :classplayBtnColor :disabledisRespawning> i v-ifdelayTheCracking v-show!isRespawning classfa fa-play>/i>{{ playBtnText }} span styledisplay: inline-block; font-size: 0.4em;>{{ playBtnAdBlockerText }}/span> /button> button v-ifdelayTheCracking v-showisTeamGame @clickonSwitchTeamClicked classss_button btn_big btn_team_switch btn-dark-bevel btn-respawn :classteamColorCss> div classdisplay-grid grid-column-1-2 align-items-center> i classfa fa-flag fa-2x>/i> div v-htmlteamName classteam-switch-text text-left>/div> /div> /button> h1 classtext_white v-ifextern.observingGame>OBSERVING - SPECTATE ONLY/h1> !-- /div> --> /div> /div> !-- respawn menu--> /div> div idrespawn-ad-two> div v-if!isSubscriber classrespawn-container respawn-two display-grid> div>/div> display-ad idshellshockers_respawn_banner_2_ad refrespawnTwoDisplayAd classpauseFiller :ignoreSizefalse :adUnitdisplayAd.adUnit.respawnTwo adSize300x250 :check-productscheckProducts>/display-ad> /div> !-- .respawn-two smaller--> /div> div idrespawn-ad-one> div classpause-screen-wrapper grid-span-2-start-1 :classpauseScreenWrapGrid> div refpauseContainer classpause-popup--container box_relative roundme_lg display-grid gap-1> !-- wrapper --> div v-if!isSubscriber classrespawn-container respawn-one display-block> display-ad idshellshockers_respawn_banner-new_ad refrespawnDisplayAd classpauseFiller :ignoreSizefalse :adUnitdisplayAd.adUnit.respawn adSize728x90 :check-productscheckProducts>/display-ad> /div> !-- .respawn-one --> /div> !-- end .pause-popup--container --> /div> !-- end .pause-screen-wrapper --> /div> /div> /div> /div> /div> /script>script idshell-streak-msg typetext/x-template> div :idhtmlId :classhtmlClass> div classegg-breaker-container display-grid> div idegg-breaker-icon-wrap classbox_relative> div classbox_absolute> svg idLayer_2 data-nameLayer 2 classegg-breaker-icon xmlnshttp://www.w3.org/2000/svg viewBox0 0 112.49 135.74>path classcls-1 dm64.53.31-4.95 14.66 16.84 5.2-26 27.81 7.69-23.51H42.74L49.14 0C21.43 6.67 0 50.83 0 79.49 0 96.65 7.69 112 19.81 122.32l15.92-16.8-2.5 25.28a55.973 55.973 0 0 0 23.02 4.93c6.03 0 11.84-.96 17.29-2.72l-2.76-11.5H57.67v-14.98l5.65 9.04 16.96-3.84 7.56 14.29c14.88-10.12 24.66-27.19 24.66-46.54C112.49 51.25 91.66 7.94 64.53.31Z idLayer_1-2 data-nameLayer 1/>/svg> div :idhtmlClass classcentered>15/div> /div> /div> div classegg-breaker-msg text-uppercase> span classfont-sigmar x-two-msg>span>x/span>2/span> {{ msgLoc }} /div> /div> /div>/script>script>const CompShellStreakMsg { template: #shell-streak-msg, props: loc, msgId, svg, msg, computed: { htmlId() { return shellStreak- + this.msgId; }, htmlClass() { return `shellStreak-${this.msgId}-timer`; }, msgLoc() { return this.locthis.msg; } }, watched: { }};/script>script>var comp_game_screen { template: #game-screen-template, components: { account-panel: comp_account_panel, weapon-select-panel: comp_weapon_select_panel, weapon-select-panel: comp_weapon_select_panel, player-challenge-list: CompPlayerChallengeList, shell-streak-msg: CompShellStreakMsg }, props: kname, kdname, data: function () { return vueData; }, created: function () { this.isPoki pokiActive; }, methods: { sharedPopupOpened(id) { this.game.openPopupId id ? id : ; }, sharedPopupClosed(id) { }, showGameMenu: function () { vueApp.setDarkOverlay(false); this.game.pauseScreen.showMenu true; this.game.gameType extern.gameType; if (this.showScreen this.screens.game) { vueApp.showRespawnDisplayAd(); vueApp.hideHeaderAd(); } setTimeout(() > vueApp.disableRespawnButton(false), 500); vueApp.gameUiAddClassForNoScroll(); addEventListener(gamepadbuttondown, this.onControllerButton); this.crazyAdsRespawn(); vueApp.hideShareLinkPopup(); this.pauseUi(); vueApp.setPause(true); addEventListener(resize, this.announcementMsg()); this.ui.showCornerButtons true; this.ui.game.spectate false; if (this.announcementMessage) { this.announcementMsg(); } }, announcementMsg() { this.$nextTick(() > { const fontSize parseFloat(getComputedStyle(this.$refs.announcementMsg).fontSize); const heightInPx this.$refs.announcementMsg.clientHeight; const heightInEm heightInPx / fontSize; this.$refs.chatWrapper.style.height `calc(var(--ss--chat-height) + ${heightInEm}em)`; }); }, announcementMsgReset() { if (this.game.isPaused) { this.$refs.chatWrapper.style.height calc(var(--ss--chat-height) + 0em); } else { this.$refs.chatWrapper.style.height auto; } }, delayGameMenuPlayButtons() { setTimeout(() > { this.delayTheCracking true; }, 3000); }, hideGameMenu: function () { if (!extern.inGame) { return; } this.game.pauseScreen.showMenu false; crazySdk.clearAllBanners(); // Per CGs request vueApp.gameUiAddClassForNoScroll(); vueApp.hideRespawnDisplayAd(); if (!this.game.isPaused) { this.announcementMsgReset(); } removeEventListener(gamepadbuttondown, this.onControllerButton); // removeEventListener(resize, this.pauseScreenPlayerListOverflowCheck); }, onLeaveGameConfirm: function () { if (this.showScreen this.screens.equip) { vueApp.onBackClick(); } this.resetUi(); this.leaveGame(); this.delayTheCracking false; }, onLeaveGameCancel: function () { this.showGameMenu(); }, leaveGame: function () { // clientGame.js manipulates chickenBadge element directly to hide/show it this.resetMsgs(); this.clearMsgTimers(); removeEventListener(resize, this.pauseScreenPlayerListOverflowCheck); vueApp.disablePlayButton(false); this.$refs.chickenBadge.style.display none; document.body.style.overflow visible; window.scrollY 0; this.hidePopupsIfGameCloses(); extern.leaveGame(this.afterLeftGame); this.player.challengeTimer.played 0; this.player.challengeTimer.alive 0; vueData.ui.showCornerButtons true; // OneSignal elements are not part of the Vue app var oneSignalBell document.getElementById(onesignal-bell-container); if (oneSignalBell) { oneSignalBell.style.display none; } }, hidePopupsIfGameCloses: function() { const gamePopups vueApp.$refs.gameScreen.$children; if (Array.isArray(gamePopups)) { gamePopups.forEach( gamePopup > {; if ( gamePopup.isShowing true && gamePopup.$el.id ! pausePopup ) { gamePopup.close(); console.log(`Closing ${gamePopup.$el.id}`); } }); } }, afterLeftGame: function () { vueApp.showSpinner(); setTimeout(() > { // extern.resize(); vueApp.hideSpinner(); }, 200); vueApp.switchToHomeUi(); }, onHelpClicked: function () { // this.hideGameMenu(); vueApp.showHelpPopup(); BAWK.play(ui_popupopen); }, onShareLinkClicked: function () { extern.inviteFriends(); BAWK.play(ui_popupopen); }, onSettingsClicked: function (openMisc) { if (!openMisc) openMisc false; // this.hideGameMenu(); vueApp.showSettingsPopup(); BAWK.play(ui_popupopen); if (openMisc) vueApp.onSettingsPopupSwitchTabMisc(); }, onShareLinkConfirm: function () { extern.copyFriendCode(this.$refs.shareLinkUrl); }, onEquipClicked: function () { this.game.pauseScreen.wasGameInventoryOpen true; this.game.pauseScreen.classChanged false; this.gaSend(inventory); vueApp.openEquipSwitchTo(this.equipMode.inventory); BAWK.play(ui_equip); }, onSwitchTeamClicked: function () { // this.hideGameMenu(); BAWK.play(ui_popupopen); this.$refs.switchTeamPopup.show(); }, onSwitchTeamConfirm: function () { extern.switchTeam(); }, onControllerButton: function (e) { switch (e.detail) { case 9: if (document.hasFocus() && !this.isRespawning && this.delayTheCracking) { this.onPlayClicked(); } break; case 4: case 6: case 14: vueData.classIdx Math.max(0, vueData.classIdx - 1); this.$refs.weaponSelect.onWeaponSelect(vueData.classIdx); break; case 5: case 7: case 15: vueData.classIdx Math.min(6, vueData.classIdx + 1); this.$refs.weaponSelect.onWeaponSelect(vueData.classIdx); break; } }, gaSendOnClassChange() { if (!this.game.pauseScreen.wasGameInventoryOpen && this.game.pauseScreen.classChanged) { ga(send, event, respawn-popup, classClick, Object.keys(CharClass).find(key > CharClasskey vueApp.classIdx)); } // reset for good measure this.game.pauseScreen.wasGameInventoryOpen false; this.game.pauseScreen.classChanged false; }, onPlayClicked() { if ((!this.delayTheCracking && !this.isRespawning) || (this.delayTheCracking && this.isRespawning) || this.game.disableRespawnButton) { return; } vueApp.disableRespawnButton(true); vueData.ui.showCornerButtons false; extern.respawn(); BAWK.play(ui_playconfirm); this.gaSendOnClassChange(); }, onSpectateClicked: function () { this.gaSend(spectate); this.hideGameMenu(); vueData.ui.showCornerButtons false; extern.enterSpectatorMode(); this.ui.game.spectate true; BAWK.play(ui_playconfirm); }, showPlayerActionsPopup: function () { // this.hideGameMenu(); this.$refs.playerActionsPopup.show(); }, onMuteClicked: function () { this.$refs.playerActionsPopup.hide(); this.playerActionsPopup.muteFunc(); }, onReportActionClicked: function () { for (let i 0; i this.reportPlayerPopup.checked.length; i++) { this.reportPlayerPopup.checkedi false; } this.$refs.playerActionsPopup.hide(); this.$refs.reportPlayerPopup.show(); }, onReportClicked: function () { this.$refs.reportPlayerPopup.hide(); let reasons 0; for (let i 0; i this.reportPlayerPopup.checked.length; i++) { if (this.reportPlayerPopup.checkedi) { reasons | (1 i); } } this.playerActionsPopup.reportFunc(reasons); }, onBootClicked: function () { this.$refs.playerActionsPopup.hide(); this.playerActionsPopup.bootFunc(); }, onBanActionClicked: function () { this.$refs.playerActionsPopup.hide(); this.$refs.banPlayerPopup.show(); }, onBanClicked: function () { this.$refs.banPlayerPopup.hide(); this.playerActionsPopup.banFunc(this.$refs.banReason.value, this.$refs.banDuration.value); }, onInfoClicked: function () { this.$refs.playerActionsPopup.hide(); this.playerActionsPopup.infoFunc(); }, resizeBannerAdTagForGame: function() { const pauseAdPlacement document.getElementById(pauseAdPlacement); const rect document.getElementById(pausePopup).getBoundingClientRect(); pauseAdPlacement.style.top (rect.height).toString() + px; }, earnInGameReward() { // this.hideGameMenu(); vueApp.setDarkOverlay(true); this.pokiRewardReady false; this.isPokiNewRewardTimer false; extern.api_inGameReward(this.inGameRewardSuccessCallback, this.inGameRewardFailedCallback, this.rewardReachedDailyLimits); extern.setVolume(0); }, inGameRewardSuccessCallback() { extern.pokiRewardedBreak(this.inGameRewardIsGranted, this.inGameRewardFailedCallback); }, inGameRewardIsGranted(rewardValue) { console.log(inGameRewardSuccessCallback); this.isPokiNewRewardTimer true; vueApp.showGiveStuffPopup(reward_title, rewardValue, ); ga(send, event, Poki, Rewarded Video, Reward Success, this.pokiRewNum); this.pokiRewNum ++; }, inGameRewardFailedCallback() { vueApp.showGenericPopup(p_redeem_error_title, in_game_reward_try_again, ok); this.isPokiNewRewardTimer false; ga(send, event, Poki, Rewarded Video, Failed); }, rewardReachedDailyLimits() { vueApp.showGenericPopup(in_game_reward_title, in_game_reward_try_again, ok); this.isPokiNewRewardTimer false; localStore.setItem(inGameRewardLimitDate, Date.now()); extern.setVolume(); ga(send, event, Poki, Rewarded Video, Reached Daily Limit); }, pokiTimers(value, milliseconds) { let pokiSetTimer; if (value false) { clearTimeout(pokiSetTimer); console.log(cancelTimer); return; } pokiSetTimer setTimeout(() > this.pokiRewardReady true, milliseconds); }, pauseWeaponSelect() { this.game.pauseScreen.wasGameInventoryOpen false; this.game.pauseScreen.classChanged true; vueApp.$refs.equipScreen.onChangedClass(); }, songHasChanged() { setTimeout(() > this.songChanged false , 2000); }, // So crazy games requires an array for multiple display ad calls on the same screen crazyAdsRespawn() { this.cGrespawnBannerErrors 0; this.$nextTick(() > { // crazySdk.requestBanner({ // id: shellshockers_respawn_banner-new_ad, // width: 728, // height: 90, // }); // crazySdk.requestBanner({ // id: shellshockers_respawn_banner_2_ad, // width: 300, // height: 600, // }); crazySdk.requestResponsiveBanner(shellshockers_respawn_banner-new_ad); crazySdk.requestResponsiveBanner(shellshockers_respawn_banner_2_ad); }); }, onClickCreator(url) { window.open(url, ) }, openVipPopup() { this.$refs.playerActionsPopup.hide(); vueApp.showSubStorePopup(); }, gaSend(label) { if (!label) return; ga(send, event, respawn-popup, click, label); }, playIncentivizedAd() { vueApp.playIncentivizedAd(); }, onEggShopClicked() { vueApp.openEquipSwitchTo(this.equipMode.shop); }, onFullscreenClicked() { extern.toggleFullscreen(); }, pauseUi() { this.resetMsgs(true); this.clearMsgTimers(); // vueApp.$refs.gameCanvas.appendChild(this.$refs.gameUiInner); }, resetUi() { // this.$refs.pausePopupWrap.appendChild(this.$refs.pausePopup); }, resetMsgs(saveStreak) { // Reset the killDeathMsg object this.game.killDeathMsg { showing: false, msgs: , msg: , style: , timer: null }; // Reset the challengeMsg object this.game.challengeMsg { showing: false, msgs: , icon: , title: , timer: null }; // Reset the ctsMsg object properties this.game.ctsMsg.showing false; this.game.ctsMsg.team 0; this.game.ctsMsg.msg ; this.game.ctsMsg.timer null; // Reset the streakMsg object this.game.streakMsg { showing: false, msg: , count: 0, timer: null }; if (!saveStreak) { // Reset the bestStreak object this.game.bestStreak { count: 0, timer: null }; } // Reset the ingameNotification object this.game.ingameNotification { item: { type: 0, msg: , streak: 0, style: }, showing: false, timer: null, multiTimer: null }; }, clearMsgTimers() { if (this.game.killDeathMsg.timer) clearTimeout(this.game.killDeathMsg.timer); if (this.game.challengeMsg.timer) clearTimeout(this.game.challengeMsg.timer); if (this.game.ctsMsg.timer) clearTimeout(this.game.ctsMsg.timer); if (this.game.streakMsg.timer) clearTimeout(this.game.streakMsg.timer); if (this.game.bestStreak.timer) clearTimeout(this.game.bestStreak.timer); if (this.game.ingameNotification.timer) clearTimeout(this.game.ingameNotification.timer); if (this.game.ingameNotification.multiTimer) clearTimeout(this.game.ingameNotification.multiTimer); if (this.game.inGameNotification.timer) clearTimeout(this.game.inGameNotification.timer); }, onTutorialPopupClick() { this.gaSend(tutorial); vueApp.onTutorialPopupClick(); }, onLockClicked () { if (!extern.gameIsOwnerLocked) { extern.sendChat(/lock); extern.gameIsOwnerLocked true; } else { extern.sendChat(/unlock); extern.gameIsOwnerLocked false; } }, challengeReroll(id) { extern.playerChallenges.reroll(id); }, killDeathMsg() { if (this.game.killDeathMsg.msgs.length > 0) { if (this.game.killDeathMsg.msgs0.type 0) { // show kill this.killDeathMsg.msg this.locui_game_youkilled.format(this.game.killDeathMsg.msgs0.name) this.killDeathMsg.style killed; } else { // show death this.killDeathMsg.msg this.locui_game_killedby.format(this.game.killDeathMsg.msgs0.name) this.killDeathMsg.style died; } this.game.killDeathMsg.showing true; this.game.killDeathMsg.msgs.shift(); setTimeout(() > { this.game.killDeathMsg.showing false; this.killDeathMsg(); }, 4000); } }, challengeMsg() { const { challengeMsg } this.game; if (challengeMsg.msgs.length > 0) { BAWK.play(challenge_notify); challengeMsg.icon ; challengeMsg.title ; // Destructure the first message directly, avoiding repetitive access const { icon, title } challengeMsg.msgs.shift(); challengeMsg.icon icon; challengeMsg.title title; challengeMsg.showing true; // Use an arrow function to maintain the context of `this` naturally setTimeout(() > { challengeMsg.showing false; this.challengeMsg(); // Recursive call to process the next message }, 2000); } }, ctsCapturedMsg() { this.game.ctsMsg.showing true; // if timer is null, set it if (this.game.ctsMsg.timer null) { this.game.ctsMsg.timer setTimeout(() > { this.game.ctsMsg.showing false; this.game.ctsMsg.timer null; }, 3000); } else { // if timer is not null, clear it and set it again clearTimeout(this.game.ctsMsg.timer); this.game.ctsMsg.timer null; this.ctsCapturedMsg(); } }, bestStreakUpdate() { this.$refs.shellStreakCap.classList.add(streak-blow-out); if (this.game.streakMsg.timer ! null) { clearTimeout(this.game.streakMsg.timer); this.game.streakMsg.timer null; } this.game.streakMsg.timer setTimeout(() > { this.$refs.shellStreakCap.classList.remove(streak-blow-out); this.game.streakMsg.timer null; }, 300); }, ingameNotification() { const { ingameNotification } this.game; const { item } ingameNotification; // Types 0, 1 are for kill/death messages // Simplify message setting based on type // HardBoiled: 1, // EggBreaker: 2, // Restock: 3, // OverHeal: 4, // MiniEgg: 5, // DoubleEggs: 6 if (item.type 0 || item.type 1) { const messages ui_game_youkilled, ui_game_killedby; const styles killed, died; item.msg this.locmessagesitem.type.format(item.msg); item.style stylesitem.type; } else { if (item.streakType) { const ksLocs , ks_hardboiled, ks_egg_breaker, ks_restock, ks_overheal, ks_double_eggs, ks_miniegg; if (ksLocs) { item.msg this.locksLocsitem.streakType; } else { return; } } } // Attempt to show the notification this.attemptToShowNotification(); }, attemptToShowNotification() { const { ingameNotification } this.game; const { showing } ingameNotification; this.applyNotificationEffects(); // Set showing to true to start or continue display ingameNotification.showing true; // Clear any existing timer and set a new one clearTimeout(ingameNotification.timer); ingameNotification.timer setTimeout(() > { this.clearNotificationEffects(); ingameNotification.showing false; }, 3000); }, applyNotificationEffects() { this.$refs.killMsg.classList.add(streak-blow-out); // Clear any previous short-duration effects clearTimeout(this.game.ingameNotification.multiTimer); this.game.ingameNotification.multiTimer setTimeout(() > { this.$refs.killMsg.classList.remove(streak-blow-out); }, 200); }, clearNotificationEffects() { // Remove visual effects this.$refs.killMsg.classList.remove(streak-blow-out); clearTimeout(this.game.ingameNotification.multiTimer); this.game.ingameNotification.multiTimer null; }, }, computed: { isRespawning: function () { return this.game.respawnTime > 0; }, isTeamGame: function () { // Would be better to use the same enum as the client game code return this.game.gameType ! 0; }, teamColorCss: function () { return this.game.team this.ui.team.blue ? blueTeam btn_red bevel_red : redTeam btn_blue bevel_blue; }, teamName: function () { return this.game.team this.ui.team.blue ? this.loc.p_pause_joinred : this.loc.p_pause_joinblue; }, newTeamColorCss: function () { return this.game.team this.ui.team.blue ? redTeam btn_red : blueTeam btn_blue; }, newTeamName: function () { return this.game.team this.ui.team.blue ? this.loc.team_red : this.loc.team_blue; }, muteButtonLabel: function () { return this.playerActionsPopup.muted ? this.loc.ui_game_playeractions_unmute : this.loc.ui_game_playeractions_mute; }, showIngameWidget() { if (!this.game.isPaused && this.songChanged) { this.songHasChanged(); return true; } return false; }, showMusicWidget() { return this.showScreen 2; }, isEggStoreSaleItem() { return this.eggStoreItems.some( item > itemsalePrice ! && this.ui.showCornerButtons); }, upgradeBadgeUrl() { return img/vip-club/vip-club-popup-emblem.png; }, playerSocial() { return SOCIALMEDIAthis.playerActionsPopup.social.id; }, chwShowVideoIcon() { return this.chw.winnerCounter > 0 && !this.chw.limitReached && this.chw.ready; }, progressMsg() { if (this.chw.adBlockDetect) { return Please turn off ad blocker; } if (this.isChicknWinnerError) { return this.loc.chw_error_text; } if (this.chw.ready && !this.chw.limitReached) { return this.chw.winnerCounter > 0 ? this.loc.chw_cooldown_msg : this.loc.chw_ready_msg; } if (!this.chw.ready && !this.chw.limitReached) { return this.loc.chw_time_until; } if (this.chw.limitReached) { return this.loc.chw_daily_limit_msg; } }, progressBarWrapClass() { if (this.isChicknWinnerError) { return chw-progress-bar-wrap-error; } if (this.chw.ready && !this.chw.limitReached) { return chw-progress-bar-wrap-complete; } }, playAdText() { return vueApp.getChwPlayAdText(); }, chwShowCountdown() { if (this.chw.limitReached || this.isChicknWinnerError) { return hideme; } else { if (this.chw.ready) { return hideme; } else { return display-inline; } } }, chwChickSrc() { if (this.chw.limitReached || this.isChicknWinnerError) { return this.chw.imgs.limit; } else { if (!this.chw.ready) { return this.chw.imgs.sleep; } else { return this.chw.imgs.speak; } } }, playBtnColor() { if (!this.delayTheCracking && !this.isRespawning || this.delayTheCracking && this.isRespawning) { return btn_red bevel_red; } else { return ss_button btn_green bevel_green; } }, playBtnText() { if (!this.delayTheCracking && !this.isRespawning) { return this.loc.ui_game_get_ready; } else if (this.delayTheCracking && this.isRespawning) { if (this.game.respawnTime > 5) { return this.game.respawnTime - 5; } else { return this.game.respawnTime } } else { return this.loc.p_pause_play; } }, playBtnAdBlockerText() { if (this.delayTheCracking && this.isRespawning && extern.adBlocker && this.game.respawnTime 5 && !extern.productBlockAds && !this.isPoki) { return Ad block delay!; } }, classGameType() { if (this.game.gameType 0) { return pause-screen-free-for-all } }, pauseScreenWrapGrid() { if (!this.isSubscriber) { return pause-screen-wrapper-no-vip; } else { return pause-screen-wrapper-is-vip } }, pauseScreenStateClass() { if (this.game.isPaused) { return `is-paused ${this.game.openPopupId}` } }, chatEnabled() { return this.settingsUi.togglers.miscthis.settingsUi.togglers.misc.findIndex(item > item.id enableChat).value }, chwProgress() { return this.chw.progress + %; }, isReportFilled () { return this.reportPlayerPopup.checked.some(checked > checked true); }, serverLoc() { return this.locserver_ + this.currentRegionId; }, spectateControls () { let key this.settingsUi.controls.keyboard.spectatethis.settingsUi.controls.keyboard.spectate.findIndex(item > item.id toggle_freecam).value; return this.locui_game_spectate_controls.format(key); }, canChangeTeams () { return !(extern.GameOptions.value.flags & extern.GameFlags.noTeamChange); }, optionsButtonClass () { if (this.gameOptionsPopup.usingDefaults) { return btn_blue bevel_blue; } return btn_yolk bevel_yolk; }, wakeTheChw() { return this.loc.chw_wake.format(200 * (this.chw.resets + 1)); } }, watch: { isPokiGameLoad(value) { this.pokiTimers(value, this.videoRewardTimers.initial); // this.pokiTimers(value, 300); }, isPokiNewRewardTimer(value) { this.pokiTimers(value, this.videoRewardTimers.primary); // this.pokiTimers(value, 300); }, kname(val) { this.killedByMessage this.locui_game_killedby.format(val); }, kdname(val) { this.killedMessage this.locui_game_youkilled.format(val); }, announcementMessage(val) { if (val) { this.announcementMsg(); } else { this.announcementMsgReset(); } } }};/script>script idphotoBooth-screen-template typetext/x-template> div data-html2canvas-ignore> div classbox_relative margins_lg screens-menu :class{phb-active-bg : bgIdx}> div v-showuiActive> h3 classpb-title text-center text_white display-grid grid-auto-flow-column justify-content-center gap-sm text-shadow-black-40>img classpb-title-img srcimg/photo-booth/ico_shelfieStars.svg />Shellfiebr /> Booth img classpb-title-img pb-title-img-flipsrcimg/photo-booth/ico_shelfieStars.svg />/h3> section idphotoBooth-map classss_marginbottom photo-booth-map-section> ss-button-dropdown classbtn-1 fullwidth :locloc :loc-txtmapTxt :list-itemsbgData :selected-itembgIdx menuPosright @onListItemClickonChangeMap>/ss-button-dropdown> /section> section idphotoBooth-egg-sizes classss_marginbottom> ss-button-dropdown classbtn-1 fullwidth :locloc :loc-txteggSizeTxt :list-itemsegg.sizes :selected-itemeggSize menuPosright @onListItemClickonChangeEggSize :loc-listtrue>/ss-button-dropdown> /section> !-- section idphotoBooth-vignette classph-egg-hide pb-vignette-setting btn_big common-box-shadow btn_game_mode bg_blue6 text-left border-blue5 ss_marginbottom display-grid align-items-center> h3 classss-dropdown-select text_blue3 display-grid grid-column-2-1 fullwidth align-items-center>{{ loc.screen_photo_booth_vignette }} Vignettelabel classss_checkbox label justify-self-end> span classhideme>{{ loc.screen_photo_booth_vignette }}/span> input typecheckbox :checkedvignette @changeonVignetteChange(true)> span classcheckmark>/span>/label>/h3> /section> --> section idphotoBooth-egg-hide-item classph-egg-hide btn_big common-box-shadow btn_game_mode bg_blue6 text-left border-blue5 ss_marginbottom> h3 classss-dropdown-select text_blue3>{{ loc.screen_photo_booth_show_hide }}/h3> div classdisplay-grid grid-column-3-eq justify-items-center align-items-center center_h> button v-for(item, idx) in egg.items :iditem.id :keyitem.value classico_itemtype clickme roundme_sm f_row align-items-center @clickhideEggItem(item.value, idx) :class{selected : !item.hidden}> svg> use :xlink:hrefitem.icon>/use> /svg> /button> /div> /section> section idphotoBooth-instructions classph-egg-hide btn_big common-box-shadow btn_game_mode bg_blue6 text-left border-blue5 ss_marginbottom> h3 classss-dropdown-select text_blue3>{{ loc.screen_photo_booth_instructions }}/h3> ul classfont-nunito text_blue5> li>strong>{{ loc.screen_photo_booth_point_one }}/strong>/li> li>strong>{{ loc.screen_photo_booth_point_two }}/strong>/li> /ul> /section> /div> div classfullwidth ss_marginbottom display-flex> button classss_button btn_yolk bevel_yolk box_relative fullwidth text-uppercase @clickscreenGrabStartProcess>i classfas fa-camera>/i> {{ loc.screen_photo_booth_screenshot }}/button> /div> div refphotoBoothDisplayAd classhideme f_col align-items-center>/div> /div> small-popup idscreenshotPopup refscreenshotPopup @popup-confirmscreenGabDownload> template slotheader>{{ loc.screen_photo_booth_screenshot2 }}/template> template slotcontent> div refgrabImage classphoto-booth-screen-grab>/div> /template> template slotcancel>{{ loc.close }}/template> template slotconfirm>{{ loc.screen_photo_booth_download }}/template> /small-popup> /div>/script>script>const CompPhotoboothUi { template: #photoBooth-screen-template, props: loc, playerName, itemTypeChange, data: function () { return { eggSize: 0, bgIdx: 0, uiActive: true, showBtn : true, screenshotImg: , // vignette: false, // vignetteUpdated: false, egg: { sizes: { id: egg-size-normal, name: screen_photo_booth_size_normal, value: 0 }, { id: egg-size-medium, name: screen_photo_booth_size_medium, value: 1 }, { id: egg-size-large, name: screen_photo_booth_size_large, value: 2 } , items: { id: item-type-3, name: Primary, value: 3, hidden: false, icon: ItemIcons.Primary}, { id: item-type-4, name: Secondary, value: 4, hidden: false, icon: ItemIcons.Secondary}, { id: item-type-1, name: Hat, value: 1, hidden: false, icon: ItemIcons.Hat}, { id: item-type-2, name: Stamp, value: 2, hidden: false, icon: ItemIcons.Stamp}, { id: item-type-6, name: Grenade, value: 6, hidden: false, icon: ItemIcons.Grenade}, { id: item-type-7, name: Melee, value: 7, hidden: false, icon: ItemIcons.Melee} , }, background: { map: { names: none, aqueduct, chickenitzaeggsmas, backstage, backstageeggsmas, bedrock, castle, castletwo, catacombs, dirt, downfall, enchanted, exposure, jinx, mansion, outerreacheggsmas, quarters, raceway, rats2, scales, skyscratcher, spacefactory, teggtris, timetwist, twotowers, wimble, quarry, }, color: { none: , colorRed: bg_red, colorBlue: bg_blue3, colorGreen: bg_green, } }, } }, methods: { onChangeEggSize(size) { if (size this.eggSize) return; this.eggSize size; extern.photoBooth.eggDollSize(this.eggSize); BAWK.play(ui_click); }, onChangeMap(idx) { if (idx this.bgIdx) return; this.bgIdx idx; if (this.bgDatathis.bgIdx.bgColor) { this.$emit(bg-change-image, this.bgData0.url); this.$emit(bg-change-color, this.background.colorthis.bgDatathis.bgIdx.url); } else { this.$emit(bg-change-color, this.background.color.none); this.$emit(bg-change-image, this.bgDatathis.bgIdx.url); } BAWK.play(ui_click); }, hideEggItem(item, idx, hideAudio) { if (this.egg.itemsidx.hidden) { this.egg.itemsidx.hidden false; this.$nextTick().then(()> { vueApp.$refs.equipScreen.switchItemType(this.egg.itemsidx.value); }) } else { this.egg.itemsidx.hidden true; } extern.photoBooth.hideItem(this.egg.itemsidx); if (!hideAudio || hideAudio undefined) { BAWK.play(ui_click); } }, onShowOuterUi() { this.showOuterUi(this.uiActive ? false : true); BAWK.play(ui_click); }, showOuterUi(val) { this.uiActive val; this.$emit(hide-ui, this.uiActive); }, open() { // this.onVignetteChange(); // randomize background this.onChangeMap(Math.floor(Math.random()*this.background.map.names.length)); }, close() { // this.vignette false; this.eggSize 0; this.bgIdx 0; this.uiActive true; this.showBtn true; this.screenshotLoaded false; this.egg.items.forEach((el, idx) > this.egg.itemsidx.hidden false); // this.updateVignette(this.vignette); this.$emit(bg-change-image, this.background.map.namesthis.bgIdx.url); this.$emit(bg-change-color, this.background.color.none); }, screenGrabStartProcess() { BAWK.play(ui_click); // if (!this.bgIdx) { // this.updateVignette(false); // this.vignetteUpdated true; // } extern.photoBooth.getScreenshot(!this.bgIdx); // this.$nextTick().then(() > { // extern.photoBooth.getScreenshot(!this.bgIdx); // }); }, screenGrabDone(canvas) { if (!hasValue(canvas)) { this.showOuterUi(true); return; } // if (this.vignetteUpdated) { // this.updateVignette(true); // this.vignetteUpdated false; // } if (this.screenshotImg) { if (this.$refs.grabImage.hasChildNodes()) { this.$refs.grabImage.removeChild(this.$refs.grabImage.children0); this.screenshotImg null; } } this.screenshotImg new Image(); this.screenshotImg.src canvas; // this.$refs.grabCanvas.appendChild(canvas); this.$refs.grabImage.appendChild(this.screenshotImg); this.showOuterUi(true); // extern.photoBooth.screenGrab(false, this.$refs.screenshotPopup.show()); this.$refs.screenshotPopup.show() this.gaSendStuff(); }, gaSendStuff() { let items extern.getEquippedItems(); Object.keys(items).forEach((key) > { let idx this.egg.items.findIndex(el > el.value Number(key)); ga(send, event, photo-booth, getKeyByValue(ItemType, Number(key)), !hasValue(itemskey) || this.egg.itemsidx.hidden ? hidden : `${itemskey.name}` ); }); ga(send, event, photo-booth, background, this.bgDatathis.bgIdx.url); }, screenGrabStart() { extern.photoBooth.screenGrabRequested true; extern.photoBooth.screenGrab(); }, screenGabDownload() { if (this.screenshotImg) { this.screenshotImg.crossOrigin anonymous; const link document.createElement(a); link.download `Shellshock-io-${this.playerName}.png`; link.href this.screenshotImg.src; link.click(); ga(send, event, photo-booth, click, download); } }, updateTypeVisibility(val) { let idx this.egg.items.findIndex(el > el.value val); if (this.egg.itemsidx.hidden) this.egg.itemsidx.hidden false; }, }, computed: { eggSizeTxt() { return { title: this.loc.screen_photo_booth_size_title, subTitle: this.locthis.egg.sizesthis.eggSize.name, } }, mapTxt() { return { title: this.loc.screen_photo_booth_background, subTitle: this.bgDatathis.bgIdx.name, } }, uiTxt() { return this.uiActive ? this.loc.screen_photo_booth_hide_ui : this.loc.screen_photo_booth_show_ui; }, bgData() { const maps ; this.background.map.names.forEach((el, idx) > maps.push({ name: this.loc`screen_photo_booth_map_${el}`, value: idx, url: el, bgColor: el.includes(color) ? true : false})); return maps; } }, watch: { }};/script>script idvip-club-template typetext/x-template> div classvip-club centered> img classvip-club-background centered src/img/vip-club/vip-club-popup-background.png alt> div classvip-club-log-content--outer roundme_sm display-grid grid-column-1-2 grid-gap-space-lg box_relative> header classgrid-span-2-start-1> !-- h2>span classtext-orange>V/span>ery span classtext-orange>I/span>mportant span classtext-orange>P/span>oultry/h2> --> span classsr-only>Very Important Poultry/span> img classvip-club-water-mark display-block center_h srcimg/vip-club/very-important-poultry.png altVery Important Poultry text image> /header> div classvip-club--logo display-grid align-content-space-between> img srcimg/vip-club/vip-club-popup-emblem.png> button v-on:clickopenVipPopup classdisplay-block ss_button btn_sm bevel_blue btn_blue center_h>{{loc.faq}}/button> /div> div classvip-club--content> div classsubs-info> ul classdisplay-grid align-content-space-between> li classdisplay-grid align-items-start>img classvip-club-star src/img/vip-club/vip-club-popup-bullet-point-star.png altstar-list-img>{{loc.p_chicken_goldfeature1}}/li> li classdisplay-grid align-items-start>img classvip-club-star src/img/vip-club/vip-club-popup-bullet-point-star.png altstar-list-img> span v-htmlloc.p_chicken_goldfeature3>/span>/li> li classdisplay-grid align-items-start>img classvip-club-star src/img/vip-club/vip-club-popup-bullet-point-star.png altstar-list-img>span v-htmleggsPerKill>/span>/li> li classdisplay-grid align-items-start>img classvip-club-star src/img/vip-club/vip-club-popup-bullet-point-star.png altstar-list-img> {{loc.s_popup_feature_premium_items}}/li> li classdisplay-grid align-items-start>img classvip-club-star src/img/vip-club/vip-club-popup-bullet-point-star.png altstar-list-img> {{loc.s_popup_feature_premium_stamp_pos}}/li> li classdisplay-grid align-items-start>img classvip-club-star src/img/vip-club/vip-club-popup-bullet-point-star.png altstar-list-img> {{loc.s_popup_and_more}}/li> /ul> /div> /div> /div> h3 classbox_relative text-center text_white ss_margintop_micro ss_marginbottom_micro text-shadow-black-40 z-index-1>{{ membershipTxt }}/h3> div classsubscription-plans box_relative :classsubStyle> div classvip-club-items--outer display-grid :classhasPlan ? grid-column-1-eq justify-items-center : grid-column-3-eq> sub-item v-forsub in getSubs :keysub.sku :itemsub :locloc :upgrade-nameupgradeName :is-subscriberisSubscriber :is-upgradedisUpgraded :account-setaccountSettled>/sub-item> /div> div v-ifhasPlan classmanage-subscription-wrapper> div v-ifhasPlan classplan-details text-center vip-club-log-content--outer roundme_sm> h5>{{loc.sRenewalDate}}:/h5> p v-ifexpireDate classplan-expiry>{{ expireDate }}/p> p classmanage-details v-htmlmanageInfo>/p> button classdisplay-block ss_button btn_sm bevel_blue btn_blue center_h v-on:clickonManageClick>{{loc.sManageBtn}}/button> /div> /div> /div> img classpayment-options display-block center_h box_relative ss_margintop_micro src/img/store/UI_paymentOptions.png altPayment options: Visa, Mastercard PayPay, Amazon Pay, Google Pay> p classss_margintop_micro box_relative text-center font-size-lg font-800>{{loc.s_popup_and_more}}/p> /div> !-- end .vip-club -->/script>template idcomp-sub-item> div v-ifisActive classvip-item text-center box_relative center_h :classvipStyle> div classvip-item--inner centered> div classsubscription-details> header> h3 classtext_white>{{locname}}/h3> /header> p classprice-tag roundme_sm v-htmlpriceTag>/p> p classvalue nospace font-size-md>{{valueTxt}}/p> button v-if!hasSub classss_button btn_sm btn_blue bevel_blue v-on:clicksubClick> {{locbuyBtnText}} /button> /div> /div> div v-ifflagText classvip-banner :classflagText> span>{{locflagText}}/span> /div> img aria-hiddentrue :srcimg /> /div>/template>script> const comp_sub_item { template: #comp-sub-item, props: loc, item, upgradeName, isUpgraded, isSubscriber, data() { return { isCurrentSub: false, hasSub: false, hasUpgrade: false, locName: , numberWords: { 1: one, 12: twelve, 3: three, } }; }, methods: { subClick() { if (this.$parent.$el.id shell-subscriptions) { this.$parent.$parent.hide(); } else { this.$parent.hide(); } BAWK.play(ui_click); if (this.hasSub) { extern.buyProductForMoney(); } else { extern.buyProductForMoney(this.item.sku, true); ga(send, event, subscriptions, click, this.locName); } } }, computed: { nameLowerCaseHyphens() { this.locName this.item.name.replace( , -).toLowerCase().replace( , -); return this.locName; }, vipStyle() { //img aria-hiddentrue srcimg/vip-club/vip-club-popup-item--bg.png> return this.nameLowerCaseHyphens.replace(/\d/g, match > this.numberWordsmatch); }, name() { return `s-${this.locName}-title`; }, img() { return `img/vip-club/vip-club-popup-item-${this.locName}-bg.png`; }, priceTag() { let price this.item.salePrice ? this.item.salePrice : this.item.price, priceWcents `${(price / 100).toFixed(2)}`, thePrice priceWcents.split(.); return `$${thePrice0}span classprice-tag--cents>.${thePrice1}/span>`; }, buyBtnText() { if (this.isCurrentSub && this.hasUpgrade) { return sManageBtn; } return s_btn_txt_subscribe; }, isActive() { if (this.isCurrentSub && this.hasUpgrade) { return true } else if (this.hasSub && this.hasUpgrade) { return false } else { return true }; }, flagText() { if (this.isCurrentSub && this.hasUpgrade) return p_egg_shop_purchased; return this.item.flagText; }, valueTxt() { const amt { 25: 10, 26: 30, 27: 120, } return this.locs-membership-value.format(amtthis.item.id); } }, watch: { upgradeName(val) { }, isUpgraded(val) { this.hasUpgrade val; this.hasSub this.isSubscriber && this.hasUpgrade; this.isCurrentSub this.upgradeName this.item.name && this.hasUpgrade; } } };/script>script>var compVipClubTemplate { template: #vip-club-template, components: { sub-item: comp_sub_item, }, data() { return vueData; }, props: subs, methods: { onManageClick() { if (this.$parent.$el.id shell-subscriptions) { this.$parent.$parent.hide(); } else { this.$parent.hide(); } extern.buyProductForMoney(); }, openVipPopup() { if (this.$parent.$el.id shell-subscriptions) { this.$parent.$parent.hide(); } else { this.$parent.hide(); } BAWK.play(ui_click); vueApp.showVipPopup(); } }, computed: { hasPlan() { return this.isSubscriber && this.isUpgraded; }, expireDate() { if (this.hasPlan) { return new Date(extern.account.upgradeExpiryDate).toUTCString(); } return; }, planName() { if (this.hasPlan) { return s- + this.upgradeName.replace( , -).toLowerCase().replace( , -) + -title; } return; }, manageInfo() { return this.loc.sManageInfo; }, membershipTxt() { return this.hasPlan ? Membership : Membership Options; }, subStyle() { return this.hasPlan ? display-grid grid-column-1-2 vip-club-has-plan : ; }, eggsPerKill() { return this.loc.p_chicken_goldfeature2.format(img srcimg/svg/ico_goldenEgg.svg />); }, getSubs() { if (this.hasPlan) { if (this.subs && this.subs.length > 0) { return this.subs.filter(i > i.id extern.account.upgradeProductId); } } else { return this.subs; } } }};/script>script idgive-stuff-popup typetext/x-template> !-- Popup: Give Stuff --> !-- large-popup idgiveStuffPopup refgiveStuffPopup :popup-modelgiveStuffPopup @popup-closedonSharedPopupClosed :classgiveStuffPopup.type> --> large-popup idgiveStuffPopup refgiveStuffPopup :popup-modelgiveStuffPopup :classgiveStuffPopup.type> template slotcontent> div idgiveStuffPopup-content classgiveStuffPopup-content :class{fullwidth : giveStuffPopup.type twitchDrops}> div v-ifgiveStuffPopup.type vip idgive-stuff-icon classgive-stuff-icon> img srcimg/vip-club/vip-club-popup-emblem.png altShell Shockers VIP> /div> h3 v-ifgiveStuffPopup.type ! twitchDrops :class{popup-title-vip : giveStuffPopup.type vip} idpopup_title classroundme_sm text-center text_white> {{ popupTitle }} /h3> h2 v-ifgiveStuffPopup.type twitchDrops idpopup_title classroundme_sm text-center title-shadow text-twitch-yellow> {{ locgiveStuffPopup.titleLoc }} /h2> p v-ifgiveStuffPopup.type twitchDrops classtext-center>{{ loc.give_stuff_twitch_sub_desc }}/p> div v-show(giveStuffPopup.eggs) classf_row> div classegg-give-stuff> img srcimg/egg_pack_small.png /> h2>+ img classvertical-align-middle width_1 srcimg/svg/ico_goldenEgg.svg />{{giveStuffPopup.eggs}}/h2> /div> /div> div v-showgiveStuffPopup.rickroll classf_row> img srcimg/rickroll.gif stylemargin-bottom: 1em; height: 25em; /> /div> div v-showgiveStuffPopup.eggOrg classf_row> img srcimg/egg-org/eggOrg_timeTravel_splash800x600-min.png stylemargin-bottom: 1em;> /div> div v-show(giveStuffPopup.items && giveStuffPopup.items.length > 0) classitems-container f_row gap-1 :class{popup-items-vip : giveStuffPopup.type vip}> item v-fori in giveStuffPopup.items :locloc :itemi :keyi.id :isSelectedfalse :show-item-onlytrue>/item> /div> p v-ifgiveStuffPopup.type twitchDrops>/p> /div> footer :class{text-center : giveStuffPopup.type twitchDrops}> !-- p v-ifgiveStuffPopup.type twitchDrops classtext-center>{{ loc.give_stuff_twitch_footer_desc }}/p> --> button classss_button width_xs text-center :classgiveStuffPopup.type twitchDrops ? twitch-btn twitch-btn-purple : btn_green bevel_green @clickonGiveStuffComplete>{{ loc.ok }}/button> button v-ifgiveStuffPopup.type twitchDropsclassss_button twitch-btn twitch-btn-pink width_xs text-center @clickonClickTwitchDropsMore>{{ loc.eq_buy_stuff }}/button> /footer> /template> template slotconfirm>{{ loc.confirm }}/template> /large-popup>/script>script>const GIVESTUFFPOPUP { template: #give-stuff-popup, components: { item: comp_item, }, props: loc, giveStuffPopup, data: function () { return { languageCode: this.selectedLanguageCode, eggBalance: 0, vueData, } }, methods: { onGiveStuffComplete: function () { this.giveStuffPopup.eggOrg false; this.giveStuffPopup.rickroll false; vueApp.onGiveStuffComplete(); }, onClickTwitchDropsMore() { window.open(dynamicContentPrefix + twitch); this.onGiveStuffComplete(); } }, computed: { popupTitle() { if (this.giveStuffPopup.type rew_monsterswin) { return this.locthis.giveStuffPopup.titleLoc; } else { return this.loc.reward_title; } }, }};/script>script idgame-options-popup typetext/x-template> !-- Popup: Private Game Options --> large-popup idgameOptionsPopup refgameOptionsPopup :popup-modelgameOptionsPopup @popup-xonCancel> template slotcontent> h1 classtext_white margin-0>{{ loc.game_options_title }}/h1> b stylemargin-block: 0.5em>{{ loc.p_sharelink_text }}/b> div classnowrap> i :classicon.invite stylesize: 1em; zoom: 1.5; color: var(--ss-blue5)>/i> input refshareLinkUrl typetext styleflex: auto; width: 29em classss_field v-modelgame.shareLinkPopup.url @focus$event.target.select()> button classss_button btn_blue bevel_blue btn_md @clickonShareLinkCopy>{{ loc.game_options_copyShareLink }}/button> /div> section classss_section stylewidth: 40em;> div classf_center f_row> h3 classtext_darkblue margin-0>{{ loc.game_options_serverSettings }}/h3> /div> div classf_center f_row> div classf_col ss_marginright_lg> div v-fort in gameOptionsPopup.togglers classnowrap> label classss_checkbox label>{{t.name}} input :disabled!extern.isGameOwner :idt.id typecheckbox v-modelt.value> span classcheckmark ss_marginbottom_lg>/span> /label> /div> /div> div classf_col> div v-fort in gameOptionsPopup.adjusters classnowrap> settings-adjuster :disabled!extern.isGameOwner small-headertrue :locloc :loc-keyt.locKey :control-idt.id :control-valuet.value :mint.min :maxt.max :stept.step :precisiont.precision :multipliert.multiplier labelSuffixx @setting-adjustedonSettingAdjusted>/settings-adjuster> /div> /div> /div> /section> section classss_section stylewidth: 40em;> div classf_center f_row> h3 classtext_darkblue margin-0>{{ loc.game_options_weaponsHeader }}/h3> /div> weapon-select-panel idweapon_select :locloc :disablertrue :hide-desctrue :account-settledaccountSettled :play-clickedfalse :current-classclassIdx @weapon-toggledtoggleWeaponClass :current-screenshowScreen :screensscreens>/weapon-select-panel> /section> div classss_button_row> button v-ifextern.isGameOwner classss_button btn_red bevel_red btn_md :disabledgameOptionsPopup.resetClicked @clickresetGame>{{ loc.game_options_reset_button }}/button> button v-ifextern.isGameOwner classss_button btn_yolk bevel_yolk btn_md @clickonDefaults>{{ loc.game_options_defaults_button }}/button> button v-ifextern.isGameOwner classss_button btn_green bevel_green btn_lg @clickonApply>{{ loc.game_options_apply_button }}/button> button v-if!extern.isGameOwner classss_button btn_green bevel_green btn_lg @clickonOkClicked>{{ loc.ok }}/button> /div> /template> /large-popup>/script>script>var comp_game_options_popup { template: #game-options-popup, components: { settings-adjuster: comp_settings_adjuster, weapon-select-panel: comp_weapon_select_panel, //settings-toggler: comp_settings_toggler }, data: function () { return vueData; }, methods: { onShareLinkCopy () { extern.copyFriendCode(this.$refs.shareLinkUrl); }, onDefaults () { this.gameOptionsPopup.options deepClone(extern.GameOptions.getDefaults()); this.init(); BAWK.play(ui_onchange); }, onShow () { this.gameOptionsPopup.resetClicked false; this.gameOptionsPopup.options deepClone(extern.GameOptions.value); this.init(); BAWK.play(ui_popupopen); }, onApply () { this.gameOptionsPopup.options.flags 0; this.gameOptionsPopup.togglers.forEach(t > { if (t.value true) { this.gameOptionsPopup.options.flags | extern.GameFlagst.id; } }); this.gameOptionsPopup.adjusters.forEach(t > { this.gameOptionsPopup.optionst.id parseFloat(t.value); }); extern.GameOptions.value deepClone(this.gameOptionsPopup.options); this.gameOptionsPopup.usingDefaults extern.GameOptions.usingDefaults(); if (extern.inGame) { extern.sendGameOptions(); extern.sendGameOptionsMetrics(); } vueData.selectedWeaponDisabled extern.GameOptions.isSelectedWeaponDisabled(this.classIdx); this.close(); BAWK.play(ui_playconfirm); }, onCancel () { this.gameOptionsPopup.options deepClone(extern.GameOptions.value); this.close(); BAWK.play(ui_popupclose); }, onOkClicked () { this.close(); BAWK.play(ui_popupclose); }, onSettingAdjusted (id, value) { var adjuster this.gameOptionsPopup.adjusters.find( (a) > { return a.id id; }); if (adjuster) adjuster.value value; }, toggleWeaponClass (classIdx) { this.gameOptionsPopup.options.weaponDisabledclassIdx !this.gameOptionsPopup.options.weaponDisabledclassIdx; }, init () { this.gameOptionsPopup.togglers.forEach(t > { t.value this.gameOptionsPopup.options.flags & extern.GameFlagst.id ? true : false; }); this.gameOptionsPopup.adjusters.forEach(a > { a.value this.gameOptionsPopup.optionsa.id; }); }, close () { this.$refs.gameOptionsPopup.close(); vueApp.onGameOptionsClosed(); }, resetGame () { this.gameOptionsPopup.resetClicked true; extern.sendGameAction(extern.GameActions.reset); } }, computed: { inGame: () > { return extern.inGame; } }}/script>script idnotification-content typetext/x-template> !-- Popup: Give Stuff --> !-- large-popup idgiveStuffPopup refgiveStuffPopup :popup-modelgiveStuffPopup @popup-closedonSharedPopupClosed :classgiveStuffPopup.type> --> div idgive-stuff-wrap classf_row gap-1> div v-fornotify in notification classnotification-content :classtypeBg(notify.type)> section> notification-slider v-ifnotify.data.items.length > 0 :locloc :itemsnotify.data.items :typenotify.type :idsnotify.data.ids @open-bundleopenBundle @close-popuponClosePopup @close-itemonItemClosed>/notification-slider> div v-show(notify.data.eggs) && eggsActive classnotify-group notify-group-eggs f_col justify-content-center roundme_lg box_relative :classeggPackClass(notify.data.eggs)> button @clickonEggPackClosed classpopup_close clickme roundme_sm>i classfas fa-times text_blue5 fa-2x>/i>/button> div classegg-give-stuff> header> h1 classtext-center>{{ rewardTitle }}/h1> /header> img srcimg/egg_pack_small.png /> h2>img classvertical-align-middle width_1 egg-img srcimg/svg/ico_goldenEgg.svg />{{notify.data.eggs}}/h2> p classitem-name text-center text_blue5>{{eggName(notify.data.eggs)}}/p> button v-ifbonus @clickgoToShop classss_button btn_lg btn_green bevel_green f_row align-items-center justify-content-center fullwidth>{{loc.account_creation_popup_button}}/button> /div> /div> /section> /div> /div>/script>script idnotification-slider typetext/x-template> div v-ifactive classnotify-group notify-group-items f_col justify-content-center roundme_lg box_relative :classclsType> div v-ifisChallenge classnotify-group-challenges-checkmark-wrap> icon nameico-checkmark>/icon> /div> button v-ifendOfItems @clickcloseItem classpopup_close clickme roundme_sm text_blue5>i classfas fa-times text_blue5 fa-2x>/i>/button> img v-ifisVip classvip-emblem centered_x :srcimgSrc> header v-if!isChallenge> h1 classtext-center>{{ title }}/h1> /header> item v-iftype ! challenges v-for(i, idx) in items v-showidx notifyIdx :locloc :itemi :keyi.id :isSelectedfalse :show-item-onlytrue :notifytrue>/item> div v-iftype challenges && chlg.length > 0 v-for(i, idx) in chlg v-showidx notifyIdx> h1 classtext_white text-center text-shadow-black-40>Challenge Complete!/h1> img v-ifisChallenge classchlg-icon display-block center_h :srcchlgImg(i.loc_ref)> h3 classtext_blue5 text-center nospace v-htmlchlgName(i.loc_ref)>/h3> p classtext-center text_blue5 nospace v-htmlchlgDesc(i.loc_ref)>/p> div classaccount_eggs roundme_sm clickme f_row justify-content-center ss_margintop_lg ss_marginbottom_lg> span classegg_count text-center text-shadow-black-40>img srcimg/svg/ico_goldenEgg.svg classegg_icon> {{ i.reward }}/span> /div> /div> !-- challenges --> button v-show!isSingleItem @clicknextItem classss_button f_row align-items-center justify-content-center :classbtnStyle>{{btnTxt}} i classfas fa-caret-right fa-2x v-show!endOfItems && !isChallenge>/i>/button> /div>/script>script>const NotifiSlider { template: #notification-slider, components: { item: comp_item, }, props: loc, items, type, ids, data: function () { return { notifyIdx: 0, active: true, lastIdx: this.items.length, chlg: , bundleTxt: Cluck yeah!, Keep em coming!, Theres more?, See bundle, , vipTxt: Ooh... shiny!, Golden, Hallelujah!, Ok, , } }, methods: { nextItem() { if (this.notifyIdx this.items.length - 1) { this.notifyIdx++; } else { // equip bundle if (this.isBundle) { this.$emit(open-bundle); } this.closeItem(); } }, closeItem() { this.active false; this.$emit(close-item); }, chlgName(ref) { return this.loc`${ref}_title`; }, chlgDesc(ref) { return this.loc`${ref}_desc`; }, chlgImg(ref) { return extern.playerChallenges.iconSrc(ref); } }, computed: { btnTxt() { if (!this.isSingleItem) { if (this.isBundle) { return this.bundleTxtthis.notifyIdx; } else if (this.isVip) { return this.vipTxtthis.notifyIdx; } else if (this.isChallenge) { return Claim; } } }, endOfItems() { if (this.isSingleItem) { return true; } else { return this.notifyIdx this.items.length - 1; } }, isSingleItem() { return this.items.length 1; }, title() { switch (this.type) { case bundle: const product extern.getProductTitle(this.ids); if (product0.sku) { return this.loc`${product0.sku}_title` + Bundle; } break; case item: return this.loc.reward_title; break; case subscription: return Thanks for subscribing!; break; case challenge: return Thanks for subscribing!; break; default: break; } }, isBundle() { return this.type bundle; }, isVip() { return this.type subscription; }, isChallenge() { if (this.type challenges) { this.items.forEach(item > { extern.Challenges.find(el > { if (el.id item) { this.chlg.push(el); } }); }); return true; } }, clsType() { return `notify-group-${this.type}` }, imgSrc() { if (this.isVip) { return img/vip-club/vip-club-popup-emblem.png; } }, btnStyle() { if (this.isChallenge) { return btn_sm btn_pink bevel_pink; } return btn_lg btn_green bevel_green; } },};/script>script> const notifiInitState () > { return { eggBalance: 0, notifyIdx: 0, activeIdxs: 0, eggsActive: true } } const NotificationContent { template: #notification-content, components: { notification-slider: NotifiSlider, }, props: loc, notification, bonus, data: function () { return notifiInitState(); }, methods: { resetState() { Object.assign(this.$data, notifiInitState()); }, onItemClosed() { if (!this.activeIdxs) { this.activeIdxs this.notification.length; } this.activeIdxs--; if (this.activeIdxs 0) { this.onClosePopup(); } }, onEggPackClosed() { this.eggsActive false; this.onItemClosed(); }, onGiveStuffComplete: function () { this.giveStuffPopup.eggOrg false; this.giveStuffPopup.rickroll false; vueApp.onGiveStuffComplete(); }, onClickTwitchDropsMore() { window.open(dynamicContentPrefix + twitch); this.onGiveStuffComplete(); }, typeBg(type) { switch (type) { case vip: return bg_blue5; break; case purchases: return bg_blue6; break; case challenges: return ; break; default: return ; break; } }, getProductTitle(data) { const product extern.getProductTitle(data); if (product0.sku) { return this.loc`${product0.sku}_title`; } }, openBundle() { this.$emit(open-bundle, this.activeIdxs); }, onClosePopup() { this.$emit(close-popup); }, eggPackClass(eggs) { const name extern.getProductTitleByEggVaule(eggs); if (name) { return name; } }, eggName(eggs) { const name extern.getProductTitleByEggVaule(eggs); if (name) { return this.locname + _title + EGGS!; } }, goToShop() { this.onEggPackClosed(); if (vueApp.ui.bonus.showing) { vueApp.ui.bonus.showing false; vueApp.openEquipSwitchTo(vueData.equipMode.skins, ItemType.Hat); } else { vueApp.openEquipSwitchTo(vueData.equipMode.skins); } } }, computed: { rewardTitle() { if (this.bonus) { return this.loc.account_creation_popup_title; } else { this.loc.reward_title; } }, } };/script>script> function startVue(languageCode, locData) { vueData.extern extern; vueData.loc locData; extern.GameOptions.init(); vueApp new Vue({ el: #app, components: { dark-overlay: comp_dark_overlay, light-overlay: comp_light_overlay, spinner-overlay: comp_spinner_overlay, gdpr: comp_gdpr, settings: comp_settings, help: comp_help, vip-help: vip_help, subscription-store: compVipClubTemplate, // subscription-store: comp_egg_store, item: comp_item, home-screen: comp_home_screen, equip-screen: comp_equip_screen, game-screen: comp_game_screen, gold-chicken-popup: comp_gold_chicken_popup, chicken-nugget-popup: comp_chickn_winner_popup, egg-store-item: comp_store_item, give-stuff-popup: GIVESTUFFPOPUP, game-options-popup: comp_game_options_popup, main-sidebar: COMPMAINSIDE, account-panel: comp_account_panel, house-ad: CompHouseAd, photo-booth-ui: CompPhotoboothUi, notification-content: NotificationContent, social-panel: comp_social_panel, chw: CompChwHomeScreen }, data: vueData, createdTime: null, mountedTime: null, fullyRenderedTime: null, multisizeAdTag: null, created () { console.log(Vue instance created); createdTime performance.now(); this.currentLanguageCode languageCode; this.urlParams parsedUrl.query.open ? parsedUrl.query.open : null; }, mounted () { console.log(Vue instance mounted); mountedTime performance.now(); console.log(create -> mount time (ms): + (mountedTime - createdTime)); this.currentGameType extern.gameType; // Cannot modify data within the mounted hook, so wait until next tick this.$nextTick(function () { fullyRenderedTime performance.now(); console.log(mounted -> fully rendered time (ms): + (fullyRenderedTime - mountedTime)); console.log(created -> fully rendered time (ms): + (fullyRenderedTime - createdTime)); this.ready true; this.getLocLang(); extern.continueStartup(); this.changelog.version extern.version; this.changelog.current this.changelogContent(); this.ui.crazyGames crazyGamesActive; this.resetGameOptions(); this.$refs.headerAdContainer.appendChild(this.$refs.homeScreen.$refs.displayAdHeader); }); // window.addEventListener(visibilitychange, () > this.handleVisibilityChange(), false); // window.addEventListener(focus, () > this.handleVisibilityChange(true), false); // window.addEventListener(blur, () > this.handleVisibilityChange(false), false); }, methods: { getGameElements: function () { return { canvas: this.$refs.canvas, canvasWrapper: this.$refs.canvasWrapper, } }, // handleVisibilityChange(val) { // if (document.hidden || document.visibilityState ! visible || !val) { // this.setDisplayAdVisibility(false); // } else { // this.setDisplayAdVisibility(true); // } // }, playMusic: function () { myAudio new Audio(./sound/theme); // Uncomment for looping. // myAudio.addEventListener(ended, function() { // this.currentTime 0; // this.play(); // }, false); myAudio.volume this.volume; myAudio.play(); }, changeLanguage: function (languageCode) { extern.getLanguageData(languageCode, this.setLocData); }, setLocData: function (languageCode, newLocData) { this.currentLanguageCode getStoredString(languageSelected, null) ? localStore.getItem(languageSelected) : languageCode; this.loc newLocData; }, setPlayerName: function (playerName) { this.playerName playerName.substring(0, 128); }, showSpinner: function (headerLocKey, footerLocKey, showTips) { this.$refs.spinnerOverlay.show(headerLocKey, footerLocKey, showTips); }, showSpinnerLoadProgress: function (percent) { this.$refs.spinnerOverlay.showSpinnerLoadProgress(percent); }, hideSpinner: function () { this.$refs.spinnerOverlay.hide(); }, onSettingsPopupOpened: function () { this.$refs.settings.captureOriginalSettings(); this.sharedIngamePopupOpened(); }, onSettingsPopupSwitchTabMisc: function () { this.$refs.settings.switchTab(misc_button); }, onSettingsX: function () { this.$refs.settings.applyOriginalSettings(); this.$refs.settings.cancelLanguageSelect(); this.sharedIngamePopupClosed(); }, onSettingsQuickSave() { this.$refs.settings.quickSave(); }, onNoAnonPopupConfirm: function () { ga(send, event, this.googleAnalytics.cat.playerStats, this.googleAnalytics.action.denyAnonUserPopup, this.googleAnalytics.label.signInClick); this.showFirebaseSignIn(); }, onSharedPopupClosed: function () { // If in-game, show game menu after closing the popup this.blackFridayBanner false; // if (this.showScreen this.screens.game && extern.inGame) { // this.showGameMenu(); // } }, sharedIngamePopupOpened() { if (extern.inGame) this.$refs.gameScreen.sharedPopupOpened(); }, sharedIngamePopupClosed() { if (extern.inGame) this.$refs.gameScreen.sharedPopupClosed(); }, onGiveStuffComplete: function () { this.$refs.giveStuffPopup.$refs.giveStuffPopup.hide(); if (extern.inGame) { this.showGameMenu(); if (this.$refs.equipScreen.showScreen this.$refs.equipScreen.screens.equip) { vueApp.setDarkOverlay(false); } } }, onPrivacyOptionsOpened: function () { this.showPrivacyPopup(); }, /** * Creates a generic popup that passes content 3 data options to slots on the genericPopup smallPopup * @param titleLockKey mixed - popup header text * @param contentLocKey mixed- popup content * @param confirmLocKey mixed - popup button text */ showGenericPopup: function (titleLocKey, contentLocKey, confirmLocKey) { this.genericMessagePopup.titleLocKey titleLocKey; this.genericMessagePopup.contentLocKey contentLocKey; this.genericMessagePopup.confirmLocKey confirmLocKey; this.hidePausePopupIfGenericPopupOpen(); this.$refs.genericPopup.show(); }, hidePausePopupIfGenericPopupOpen: function() { if (!this.$refs.gameScreen.$refs.pausePopup && $refs.gameScreen.$refs.pausePopup.isShowing false) { return; } // return this.$refs.gameScreen.$refs.pausePopup.hide(); }, showOpenUrlPopup: function (url, titleLocKey, content, confirmLocKey, cancelLocKey) { console.log(title: + this.loctitleLocKey); console.log(confirm: + this.locconfirmLocKey); console.log(cancel: + this.loccancelLocKey); this.openUrlPopup.url url; this.openUrlPopup.titleLocKey titleLocKey; this.openUrlPopup.content content; this.openUrlPopup.confirmLocKey confirmLocKey; this.openUrlPopup.cancelLocKey cancelLocKey; this.$refs.openUrlPopup.show(); }, onOpenUrlPopupConfirm: function () { extern.openUrlAndGiveReward(); }, showUnsupportedPlatformPopup: function (contentLocKey) { this.showScreen -1; this.unsupportedPlatformPopup.contentLocKey contentLocKey; this.$refs.unsupportedPlatformPopup.show(); }, showMissingFeaturesPopup: function () { this.showScreen -1; this.$refs.missingFeaturesPopup.show(); }, showFirebaseSignIn: function () { this.$refs.homeScreen.showSignIn(); }, hideFirebaseSignIn: function () { this.$refs.firebaseSignInPopup.hide(); }, showCheckEmail: function () { this.$refs.homeScreen.$refs.checkEmailPopup.show(); }, hideCheckEmail: function () { this.$refs.homeScreen.$refs.checkEmailPopup.hide(); }, showResendEmail: function () { this.$refs.homeScreen.$refs.resendEmailPopup.show(); }, hideResendEmail: function () { this.$refs.homeScreen.$refs.resendEmailPopup.hide(); }, dontShowChwStuff() { return (extern.inGame || (this.isChicknWinnerError || !this.chw.ready || this.chw.winnerCounter > 3)) }, showChickenPopup: function () { if (this.dontShowChwStuff()) { return; } const show localStore.getItem(chickenPopupShow), today new Date(), dd String(today.getDate()).padStart(2, 0), mm String(today.getMonth() + 1).padStart(2, 0), //January is 0! yyyy today.getFullYear(), whole dd + mm + yyyy; if (!show || show ! whole) { this.$refs.goldChickenPopup.show(); localStore.setItem(chickenPopupShow, whole); } }, hideChickenPopup: function () { this.$refs.goldChickenPopup.hide(); ga(send, event, Chickn Winner, chw-cta-popup, click-close-btn ); }, goldChickenPopupOpenChw() { this.hideChickenPopup(); if (this.dontShowChwStuff()) { return; } ga(send, event, Chickn Winner, chw-cta-popup, click-play-btn ); this.chwDoIncentivized(); }, showHelpPopup: function () { if (!extern.inGame) { this.hideGameMenu(); } this.$refs.helpPopup.show(); }, showHelpPopupFeedbackWithDelete() { this.$refs.help.openFeedbackTabWith(this.feedbackType.delete.id); this.showHelpPopup(); }, showVipPopup: function () { if (!extern.inGame) { this.hideGameMenu(); } BAWK.play(ui_popupopen); this.$refs.vipPopup.show(); }, showAttentionPopup: function () { if (!extern.inGame) { this.hideGameMenu(); } this.$refs.anonWarningPopup.show(); }, hideHelpPopup: function () { this.$refs.helpPopup.hide(); }, showSettingsPopup: function () { if (!extern.inGame) { this.hideGameMenu(); } this.$refs.settingsPopup.show(); extern.settingsMenuOpened(); this.sharedIngamePopupOpened(); }, hideSettingsPopup: function () { this.$refs.settingsPopup.hide(); }, showEggStorePopup: function () { this.$nextTick(() > { this.hideGameMenu(); this.$refs.eggStorePopup.show(); if (this.isSale) { this.blackFridayBanner true; } ga(send, event, this.googleAnalytics.cat.itemShop, this.googleAnalytics.action.shopItemNeedMoreEggsPopup, this.googleAnalytics.label.getMoreEggs); }); }, showSubStorePopup: function () { this.$nextTick(() > { if (!extern.inGame) { this.hideGameMenu(); } this.$refs.subStorePopup.show(); BAWK.play(ui_popupopen); // ga(send, event, this.googleAnalytics.cat.itemShop, this.googleAnalytics.action.shopItemNeedMoreEggsPopup, this.googleAnalytics.label.getMoreEggs); }); }, vipEndedPopup() { this.$refs.vipEnded.show(); BAWK.play(ui_popupopen); }, showPopupEggStoreSingle(sku) { if (!sku) { console.log(No sku for popup); return; } if (!this.premiumShopItems.some( i > i.sku sku)) { vueApp.showGenericPopup(uh_oh, p_egg_shop_no_item_desc, ok); return; } this.eggStorePopupSku sku; this.$refs.popupEggStoreSingle.show(); }, hidePopupEggStoreSingle() { this.eggStorePopupSku null; this.$refs.popupEggStoreSingle.hide(); }, hideEggStorePopup: function () { this.$refs.eggStorePopup.hide(); }, showChangelogPopup: function () { this.$refs.changelogPopup.show(); }, showHistoryChangelogPopup() { fetch(./changelog/oldChangelog.json, {cache: no-cache}) .then(response > response.json()) .then(data > { data.forEach((log, idx) > { const content this.changelogSetup(log); log.content.length 0; log.content.push(...content); this.changelog.current.push(log) }); }); this.changelog.showHistoryBtn false; }, hideChangelogPopup: function () { this.$refs.changelogPopup.hide(); }, photoBoothTypeChange() { this.$refs.photoBooth.updateTypeVisibility(this.equip.selectedItemType); }, openPhotoBooth() { this.$nextTick().then( () > { this.openEquipSwitchTo(this.equipMode.inventory); this.$nextTick().then(() > { this.switchToPhotoBoothUi(); }); }); }, switchToPhotoBoothUi: function () { const homeDisplayAd document.getElementById(shellshockers_titlescreen_wrap); const homeDisplayAdChild homeDisplayAd ? homeDisplayAd.firstElementChild : null; this.ui.showHomeEquipUi this.ui.showHomeEquipUi ? false : true; this.$refs.photoBooth.$refs.photoBoothDisplayAd.classList.toggle(hideme, this.ui.showHomeEquipUi); if (this.ui.showHomeEquipUi) { extern.photoBooth.close(); if (homeDisplayAd) { homeDisplayAd.appendChild(this.$refs.photoBooth.$refs.photoBoothDisplayAd.firstElementChild); } } else { extern.photoBooth.open(); if (homeDisplayAdChild) { this.$refs.photoBooth.$refs.photoBoothDisplayAd.appendChild(homeDisplayAdChild); this.showTitleScreenAd(); } } ga(send, event, photo-booth, click, this.ui.showHomeEquipUi ? close : open); BAWK.play(ui_toggletab); }, onPhotoboothBgColorChange(bgClass) { document.getElementById(ss_background).className bgClass; }, onPhotoBoothBgImageChange(url) { document.getElementById(ss_background).style.backgroundImage (url && url ! none) ? `url(img/photo-booth/maps/${url}.jpg)` : ; }, onPhotoBoothHideUi(show) { if (!show) { this.showScreen -1; } else { this.showScreen this.screens.equip; } }, // photoBoothVignetteChange(val) { // this.ui.photoBooth.vignette val; // }, screenGrabDone(canvasData) { this.$refs.photoBooth.screenGrabDone(canvasData); }, gameUiAddClassForNoScroll() { let html document.getElementsByTagName(html)0; html.classList.add(noScrollIngame); }, showGiveStuffPopup: function (titleLoc, eggs, items, type, callback) { if (this.giveStuffPopup.eggOrg) { ga(send, event, Egg Org, Code Cracked, redeemed); } type type || ; this.giveStuffPopup.titleLoc titleLoc; this.giveStuffPopup.eggs eggs; this.giveStuffPopup.items items; this.giveStuffPopup.type type; this.$refs.giveStuffPopup.$refs.giveStuffPopup.show(); if (callback) callback(); }, showPurchasesPopup: function (types, callback) { this.$refs.notifiContent.resetState() this.ui.notification types; this.$refs.notificationPopup.show(); if (callback) callback(); }, showChallengesAutoClaimed(chlgs) { // { id: 11, status: claimed } this.showPurchasesPopup({challenges: chlgs}); }, showEggOrgPopup() { this.giveStuffPopup.eggOrg true; this.showGiveStuffPopup(p_give_stuff_title); }, showShareLinkPopup: function (url) { if (!extern.inGame) { this.hideGameMenu(); } this.game.shareLinkPopup.url url; BAWK.play(ui_popupopen); this.$refs.gameScreen.$refs.shareLinkPopup.show(); }, hideShareLinkPopup() { if (!this.$refs.gameScreen.$refs.shareLinkPopup.isShowing) { return; } this.$refs.gameScreen.$refs.shareLinkPopup.hide(); }, showJoinPrivateGamePopup: function (code) { this.$refs.homeScreen.$refs.playPanel.showJoinPrivateGamePopup(code, true); }, showCreateGamePopup: function (code) { if (this.screen ! this.screens.home) { this.switchToHomeUi(); } this.$refs.homeScreen.$refs.playPanel.showJoinPrivateGamePopup(); }, showPrivateGamePopup() { this.$refs.homeScreen.$refs.playPanel.$refs.createPrivateGamePopup.toggle(); }, showBannedPopup: function (expire) { this.bannedPopup.expire expire; //this.ui.notification types; this.$refs.bannedPopup.show(); //if (callback) callback(); }, onBackClick() { this.$refs.equipScreen.onBackClick(); }, switchToHomeUi: function () { this.showScreen this.screens.home; this.$refs.equipScreen.removeKeyboardStampPositionHandlers(); this.equip.displayAdHeaderRefresh true; BAWK.play(ui_toggletab); vueApp.showTitleScreenAd(); this.gameUiRemoveClassForNoScroll(); extern.resetPaperDoll(); }, switchToProfileUi: function () { this.showScreen this.screens.profile; this.$refs.equipScreen.removeKeyboardStampPositionHandlers(); this.equip.displayAdHeaderRefresh true; this.hideGameMenu(); BAWK.play(ui_toggletab); vueApp.showTitleScreenAd(); this.gameUiRemoveClassForNoScroll(); }, openEquipSwitchTo: function (mode, itemType) { this.showScreen this.screens.equip; this.$refs.equipScreen.setup(); this.$refs.equipScreen.switchTo(mode, itemType); if (extern.inGame) { this.hideGameMenu(); extern.openEquipInGame(); } else { vueApp.hideTitleScreenAd(); } }, switchToGameUi: function () { this.showScreen this.screens.game; this.$refs.equipScreen.removeKeyboardStampPositionHandlers(); this.equip.displayAdHeaderRefresh true; }, gameUiAddClassForNoScroll() { let html document.getElementsByTagName(html)0; html.classList.add(noScrollIngame); }, gameUiRemoveClassForNoScroll() { let html document.getElementsByTagName(html)0; html.classList.remove(noScrollIngame); }, switchToGameUiQuickPlay () { this.showScreen this.screens.game; this.ui.showCornerButtons false; vueApp.hideTitleScreenAd(); this.gameUiAddClassForNoScroll(); }, showGameMenu: function () { this.$refs.gameScreen.showGameMenu(); }, hideGameMenu: function () { this.$refs.gameScreen.hideGameMenu(); }, onMiniGameCompleted: function () { this.$refs.homeScreen.onMiniGameCompleted(); }, setShellColor: function (colorIdx) { this.equip.colorIdx colorIdx; }, setAccountUpgraded: function (upgraded, endDate) { this.isUpgraded upgraded; this.equip.extraColorsLocked !this.isUpgraded; this.nugStart endDate; }, setDarkOverlay: function (visible, overlayClass) { this.$refs.darkOverlay.show visible; this.$refs.darkOverlay.overlayClass overlayClass; }, setLightOverlay: function (visible, overlayClass) { this.$refs.lightOverlay.show visible; this.$refs.darkOverlay.overlayClass overlayClass; }, authCompleted: function () { this.accountSettled true; if (vueApp.$refs.firebaseSignInPopup.isShowing) this.hideFirebaseSignIn(); }, runProductCheck() { this.checkProducts++; }, showItemOnEquipScreen: function (item) { this.openEquipSwitchTo(); this.$refs.equipScreen.autoSelectItem(item); }, showItem: function (item) { vueApp.openEquipSwitchTo(this.equipMode.inventory); this.$refs.equipScreen.autoSelectItem(item); }, showTaggedItemsOnEquipScreen: function (tag) { this.openEquipSwitchTo(this.equipMode.featured); this.$refs.equipScreen.showTaggedItems(tag); }, useHouseAdSmall: function (smallHouseAd) { this.ui.houseAds.small smallHouseAd; }, useHouseAdBig: function (bigHouseAd) { this.ui.houseAds.big bigHouseAd; }, denyAnonUser: function () { ga(send, event, vueApp.googleAnalytics.cat.playerStats, vueApp.googleAnalytics.action.denyAnonUserPopup); if (extern.inGame) { this.hideGameMenu(); } this.$refs.noAnonPopup.show(); }, showGdprNotification: function () { this.$refs.gdpr.show(); }, showPrivacyPopup: function () { this.hideSettingsPopup(); this.$refs.privacyPopup.show(); }, hidePrivacyPopup: function () { this.$refs.privacyPopup.hide(); this.showSettingsPopup(); }, ofAgeChanged: function () { extern.setOfAge(this.isOfAge); BAWK.play(ui_onchange); }, targetedAdsChanged: function () { extern.setTargetedAds(this.showTargetedAds); BAWK.play(ui_onchange); }, setPrivacySettings: function (ofAge, targetedAds) { this.isOfAge ofAge; this.showTargetedAds targetedAds; }, gameJoined: function (gameType, team) { this.game.gameType gameType; this.setTeam(team); }, setTeam: function (team) { if (hasValue(team)) { this.game.team team; } }, showGoldChickenPopup: function () { this.$refs.goldChickenPopup.show(); }, hideGoldChickenPopup: function () { this.$refs.goldChickenPopup.hide(); }, showChicknWinnerPopup: function () { this.$refs.chicknWinner.show(); this.$refs.nuggetDisplayAd.show(); this.isBuyNugget true; }, hideChicknWinnerPopup: function () { this.$refs.chicknWinner.hide(); this.$refs.chickenNugget.onGotWinner(); console.log(Hide nugget); }, chicknWinnerIsReady() { if (this.chw.limitReached) { this.chwOnClick(true); return; } }, chwAdBlockerDetected() { this.chw.adBlockDetect true; }, chicknWinnerError(val) { this.isChicknWinnerError val; }, chicknWinnerDailyLimit() { this.chicknWinnerDailyLimitReached true; }, loadNuggetVideo() { if (!extern.inGame) { this.hideGameMenu(); } this.chwDoIncentivized(); BAWK.play(ui_playconfirm); }, chwDoIncentivized() { extern.chwTryPlay(); }, chwOnClick(val) { this.chw.onClick val; }, chwMiniGameCompleted(val) { this.$refs.nuggetDisplayAd.destroyAd(); this.chwMiniGameComplete val; this.chw.nuggetReset + 1; setTimeout(() > this.chwOnClick(false), 1000); }, onChwPopupClosed() { this.$refs.chickenNugget.resetGame(); }, placeBannerAdTagForNugget: function (tagEl) { this.$refs.chickenNugget.placeBannerAdTag(tagEl); }, useSpecialItemsTag: function (tag) { this.equip.specialItemsTag tag; this.equip.showSpecialItems true; }, disableSpecialItems: function () { this.equip.showSpecialItems false; }, setUiSettings: function (settings) { this.settingsUi.settings settings; this.$refs.settings.setSettings(settings); }, leaveGame: function () { this.$refs.gameScreen.leaveGame(); }, showPlayerActionsPopup: function (slot) { if (this.showAdBlockerVideoAd) { return; } this.playerActionsPopup slot; this.$refs.gameScreen.showPlayerActionsPopup(); }, onSignInCancelClicked: function () { vueApp.$refs.firebaseSignInPopup.hide(); BAWK.play(ui_popupclose); }, anonWarningPopupCancel: function() { let anonWarnConfrimed localStore.getItem(anonWarningConfirmed); this.urlParamSet this.urlParams ? true : null; this.shellShockUrlParamaterEvents(); ga(send, event, this.googleAnalytics.cat.playerStats, this.googleAnalytics.action.anonymousPopupOpenAuto, this.googleAnalytics.label.understood); return anonWarnConfrimed null && localStore.setItem(anonWarningConfirmed, true); }, anonWarningPopupConfrim() { let anonWarnConfrimed localStore.getItem(anonWarningConfirmed); anonWarnConfrimed null && localStore.setItem(anonWarningConfirmed, true); ga(send, event, this.googleAnalytics.cat.playerStats, Account egg bonus popup, this.googleAnalytics.label.signInClick); extern.showSignInDialog(); this.urlParamSet false; vueApp.$refs.firebaseSignInPopup.show(); }, conditionalAnonWarningCall: function() { if (!this.isAnonymous) { return; } // set eggTotal checks let lastIdx localStore.getItem(anonPopupLastIdx); const allChecks 100000, 90000, 80000, 70000, 60000, 50000, 40000, 30000, 20000, 10000, 1000, 100, 0; // Need to remove the all the past values so all the checks to run with each screen change lastIdx lastIdx null ? allChecks.length : lastIdx; const checks allChecks.filter( (i, idx) > lastIdx > idx); // set localStore items to match the values in checks const localItems ; checks.forEach((i, idx) > localItems.push(`anonPopup${i}`)); for (let i 0; i localItems.length; i++) { if (localStore.getItem(localItemsi) null) { if (this.eggsEarnedBalance > checksi) { vueApp.showAttentionPopup(); ga(send, event, this.googleAnalytics.cat.playerStats, Account egg bonus popup auto, checksi); localStore.setItem(localItemsi, true); localStore.setItem(anonPopupLastIdx, i); break; } } } }, needMoreEggsPopupCall: function() { ga(send, event, this.googleAnalytics.cat.itemShop, this.googleAnalytics.action.shopItemNeedMoreEggsPopup); this.$refs.needMoreEggsPopup.show(); }, /** * Not 100 % certain this should live in vue but here it is. * Add the ability to use url paramaters to trigger events in the game. * e.g. shellshock.io/?openeggStore&typeHat&item1111 will open the spiderman hat item. * Called in the extern closure under gameApp.js > afterGameReady() */ shellShockUrlParamaterEvents() { // VUE next tick https://vuejs.org/v2/api/#Vue-nextTick this.$nextTick( ()> { this.doSsUlrParams(); }); }, doSsUlrParams() { if ( ! this.urlParams) { return; } console.log(hasValue(this.isAnonymous)); if (hasValue(this.ui.houseAds.big)) { this.urlParamSet false; return; } else if (this.isAnonymous && ! hasValue(localStore.getItem(anonWarningConfirmed))) { this.urlParamSet false; console.log(Almost there!); this.conditionalAnonWarningCall(); return; } console.log(Passed Popup gate); switch (this.urlParams) { case eggStore : // Opens the purchase egg store popup this.showEggStorePopup(); break; case goldenChicken : // Opens the golden chicken popup vueApp.$refs.goldChickenPopup.show(); break; case twoTimesTheEggs : // Opens the chicken nugget video extern.chwTryPlay(); BAWK.play(ui_playconfirm); break; case itemShop : // Opens shop options // /?openitemShop // /?openitemShop&typeHat/Stamp/Primary/Secondary/Grenade/Premium/Tagged // /?openitemShop&gunClassSoldier/Soldier/Scrambler/Ranger/Eggsploder/Whipper/Crackshot/TriHard // /?openitemShop&item1111 opens hat store and then selects item // /?openitemShop&item1111&openBuyNow1 opens hat store, selects item and then opens items popup this.openEquipSwitchTo(this.equipMode.shop); this.eggStoreUrlParams(); break; case vipStore : vueApp.showSubStorePopup(); break; case redeem : vueApp.openEquipSwitchTo(this.equipMode.inventory); BAWK.play(ui_popupopen); this.$refs.equipScreen.$refs.redeemCodePopup.show(); if (code in parsedUrl.query) this.equip.redeemCodePopup.code parsedUrl.query.code; break; case faq : this.showHelpPopup(); break; case taggedItems : this.openSpecialTagItemsTab(); break; case privateGame : this.showPrivateGamePopup(); break; case kotcInstruction : this.showKotcInstrucPopup(); break; default: null; }; }, eggStoreUrlParams() { if (parsedUrl.query.hasOwnProperty(item)) { this.urlParamShowItem(parseInt(parsedUrl.query.item), parsedUrl.query.hasOwnProperty(openBuyNow)); return; } else if (parsedUrl.query.hasOwnProperty(type)) { this.urlParamShowItemType(parsedUrl.query.type); return; } else if (parsedUrl.query.hasOwnProperty(gunClass) && CharClass.hasOwnProperty(parsedUrl.query.gunClass)) { this.urlParamShowClass(parsedUrl.query.gunClass) return; } }, urlParamShowItem(itemId, openBuy) { let item extern.catalog.findItemById(itemId); if (!item.is_available) { vueApp.showGenericPopup(uh_oh, no_anon_title, ok); return; } this.$nextTick().then(() > { this.$refs.equipScreen.autoSelectItem(item); if (openBuy) { vueApp.$refs.equipScreen.onBuyItemClicked(); } }) }, urlParamShowItemType(type) { if (ItemType.hasOwnProperty(type)) { this.$nextTick().then(() > this.equipSwitchTo(item, ItemTypeparsedUrl.query.type)) } else if (type Premium || type Tagged) { this.$nextTick().then(() > this.openEquipSwitchTo(this.equipMode.featured)); } }, urlParamShowClass(gClass) { if (!CharClass.hasOwnProperty(gClass)) return; this.$nextTick().then(() > { this.equipSwitchTo(item, ItemTypePrimary) this.$nextTick().then(() > { this.openEquipSwitchTo(this.equipMode.skins); this.$nextTick().then(() > { this.equipSwitchTo(class, CharClassgClass) }) }) }) }, equipSwitchTo(type, val) { switch (type) { case item: vueApp.$refs.equipScreen.switchItemType(val); break; case class: vueApp.$refs.equipScreen.$refs.weapon_select.selectClass(val); break; default: break; } }, openSpecialTagItemsTab() { let tag parsedUrl.query.tag ? parsedUrl.query.tag : null; vueApp.showTaggedItemsOnEquipScreen(tag); }, delayInGamePlayButtons() { vueApp.$refs.gameScreen.delayGameMenuPlayButtons(); }, displayAdEventObject(event) { let object event; this.displayAdObject object.size0; }, //Call/hide display ads hideRespawnDisplayAd() { if (extern.productBlockAds) { return; } if (this.showScreen this.screens.game) { this.$refs.gameScreen.$refs.respawnDisplayAd.destroyAd(); this.$refs.gameScreen.$refs.respawnTwoDisplayAd.destroyAd(); } }, showRespawnDisplayAd() { if (extern.productBlockAds) { return; } if (!this.ui.tutorialPopup.show) { this.$refs.gameScreen.$refs.respawnDisplayAd.show(); this.$refs.gameScreen.$refs.respawnTwoDisplayAd.show(); } }, toggleRespawnDisplayAd(val) { if (extern.productBlockAds) { return; } if (this.showScreen this.screens.game) { this.$refs.gameScreen.$refs.respawnDisplayAd.toggleAd(val); this.$refs.gameScreen.$refs.respawnTwoDisplayAd.toggleAd(val); } }, setDisplayAdVisibility(val) { if (extern.productBlockAds) { return; } this.$refs.gameScreen.$refs.respawnDisplayAd.setWindowVisibility(val); this.$refs.gameScreen.$refs.respawnTwoDisplayAd.setWindowVisibility(val); this.$refs.homeScreen.$refs.titleScreenDisplayAd.setWindowVisibility(val); this.$refs.homeScreen.$refs.headerDisplayAd.setWindowVisibility(val); }, hideLoadingScreenAd() { this.$refs.spinnerOverlay.$refs.loadingScreenDisplayAd.destroyAd() }, showLoadingScreenAd() { if (this.ui.tutorialPopup.show) { return; } this.$refs.spinnerOverlay.$refs.loadingScreenDisplayAd.show(); // this.histPushState({game: 3}, Shellshockers Loading display ad, ?loadingAdtrue); }, showTitleScreenAd() { if (extern.productBlockAds) { return; } this.$refs.homeScreen.$refs.titleScreenDisplayAd.show(); if (!crazyGamesActive) { vueApp.showHeaderAd(); } else { this.$nextTick(() > { crazySdk.requestBanner({ id: shellshockers_titlescreen_wrap, width: 300, height: 250, }); }); } }, // setTitleScreenAdVisibility(val) { // if (extern.productBlockAds && this.showScreen this.screens.game) { // return; // } // this.$refs.homeScreen.$refs.titleScreenDisplayAd.setWindowVisibility(val); // this.$refs.homeScreen.$refs.headerDisplayAd.setWindowVisibility(val); // }, hideTitleScreenAd() { if (extern.productBlockAds) { return; } this.$refs.homeScreen.$refs.titleScreenDisplayAd.destroyAd(); }, showHeaderAd() { if (extern.productBlockAds) { return; } if (!crazyGamesActive) { this.$nextTick().then(() > { this.$refs.homeScreen.$refs.headerDisplayAd.show(); }) } }, hideHeaderAd() { if (extern.productBlockAds) { return; } this.$refs.homeScreen.$refs.headerDisplayAd.destroyAd(); }, toggleTitleScreenAd(val) { if (extern.productBlockAds || this.showScreen this.screens.game) { return; } if (this.showScreen ! this.screens.equip) { this.$refs.homeScreen.$refs.titleScreenDisplayAd.toggleAd(val); } this.$refs.homeScreen.$refs.headerDisplayAd.toggleAd(val); }, scrollToTop() { let position document.body.scrollTop || document.documentElement.scrollTop, scrollAnimation; if (position) { window.scrollBy(0, -Math.max(1, Math.floor(position / 10))); scrollAnimation setTimeout(this.scrollToTop, 10); } else clearTimeout(scrollAnimation); }, externPlayObject(playType, gameType, playerName, mapIdx, joinCode) { extern.play({playType, gameType, playerName, mapIdx, joinCode}); }, pleaseWaitPopup() { vueApp.showGenericPopup(signin_auth_title, signin_auth_msg); }, isPlayingPoki() { this.isPoki true; this.ready true; return; }, histPushState(obj, title, param) { return history.pushState(obj, title, param); }, disablePlayButton(val) { const playBtns document.querySelectorAll(.is-for-play); playBtns.forEach(btn > btn.disabled val); this.playClicked val; // document.querySelector(.play-button).disabled val; }, disableRespawnButton(val) { this.game.disableRespawn val; }, disaplyAdEventObject(event) { this.displayAdObject event.size null ? null : event.size0; }, adBlockerPopupToggle() { return vueApp.$refs.adBlockerPopup.toggle(); }, // musicPlayOnce() { // return setTimeout(() > this.$refs.gameScreen.$refs.gameScreenMusic.playOnce(), 2000); // }, // musicPause() { // this.$refs.gameScreen.$refs.gameScreenMusic.pause(); // }, musicVolumeControl(value) { return; this.settingsUi.adjusters.music0.value Number(value); this.$refs.gameScreen.$refs.gameScreenMusic.loadVolume(); }, toggleMusic() { this.$refs.gameScreen.$refs.gameScreenMusic.toggleMusic(); }, musicWidget(val) { this.music.isMusic val; }, fetchSponsors() { fetch(this.music.musicJson) .then((response) > response.json()) .then((sponsors) > this.music.sponsors sponsors) .catch((error) > console.log(Sponsors fetch error, error)); }, pwaPopup() { return this.$refs.pwaPopup.show(); }, pwaBtnClick() { // Track the click ga(send, event, pwa, button, click); //close popup this.$refs.pwaPopup.hide(); // Get the event this.pwaDeferEvent extern.getPwaEvent; if (!this.pwaDeferEvent) { return; } this.pwaDeferEvent.prompt(); this.pwaDeferEvent.userChoice .then((choiceResult) > { if (choiceResult.outcome accepted) { console.log(User accepted the A2HS prompt); } else { console.log(User dismissed the A2HS prompt); } ga(send, event, pwa, a2hs, choiceResult.outcome); this.pwaDeferEvent null; }); this.pwaDeferEvent ; }, signOut() { this.isUpgraded false; this.equip.extraColorsLocked true; this.upgradeName ; this.isSubscriber false; }, mediaTabsStartRotate() { return this.$refs.homeScreen.$refs.mediaTabs.autoRotateTabs(); }, mediaTabsCancelRotate() { return this.$refs.homeScreen.$refs.mediaTabs.cancelRotate(true); }, stopClicksFAdBlocker(e) { e.stopPropagation(); e.preventDefault(); }, showAdBlockerVideo() { document.addEventListener(click,this.stopClicksFAdBlocker, true); this.bannerHouseAd extern.getHouseAd(bigBanner); this.showAdBlockerVideoAd true; if (!extern.inGame) { this.hideGameMenu(); } this.$refs.adBlockerVideo.show(); }, hideAdBlockerVideo() { document.removeEventListener(click, this.stopClicksFAdBlocker, true); this.$refs.adBlockerVideo.hide(); if (extern.inGame) { this.showGameMenu(); } this.bannerHouseAd {}; this.showAdBlockerVideoAd false; }, showKotcInstrucPopup() { this.$refs.kotcInstrucPopup.show(); }, kotcInstrucPopupHide() { this.$refs.kotcInstrucPopup.hide(); }, onClickPlayKotcNow() { this.externPlayObject(vueData.playTypes.joinPublic, 3, this.playerName, , ); this.kotcInstrucPopupHide(); }, onVipHelpClosed() { this.onSharedPopupClosed(); this.showSubStorePopup(); }, getLocLang(val) { let data this.loc, langSetup {}; if (val) data val; const newLoc Object.entries(data).filter(item > item0.includes(locLang)).forEach(lang > langSetuplang0.split(_).pop().split(-).pop() lang1); this.$nextTick(() > { this.locLanguage langSetup }); }, onClickTwitchDropsMore() { window.open(dynamicContentPrefix + twitch); this.onGiveStuffComplete(); }, onPremiumItemsClicked() { this.openEquipSwitchTo(this.equipMode.shop); this.$refs.equipScreen.onPremiumItemsClicked(); }, useTags(val) { this.ui.socialMedia.selected val.socialMedia; this.ui.premiumFeaturedTag val.premFeat; }, onAccountDelectionConfirmed() { this.$refs.help.onAccountDelectionConfirmed(); }, showDeleteAccoutApprovalPopup() { this.$refs.deleteAccountApprovalPopup.show(); }, resetFeedbackType(){ this.feedbackSelected 0; }, playIncentivizedAd(e) { const { adBlockDetect, ready, limitReached, onClick } this.chw; const { inGame } extern; if (onClick) { return; } if (this.showAdBlockerVideoAd || adBlockDetect || (!ready && !limitReached)) { return; } this.chwOnClick(true); const action limitReached ? Reset : Free eggs btn; const btnClick inGame ? click-in-game : click-home; if (limitReached) { extern.chwResetWithEggs(); } else { if (inGame) { this.playChwIngame(); } this.loadNuggetVideo(); } ga(send, event, Chickn Winner, action, btnClick); }, playChwIngame() { vueApp.hideGameMenu(); vueApp.disableRespawnButton(true); }, chwStopCycle() { if (this.chwHomeTimer) { clearInterval(this.chwHomeTimer); this.chwHomeTimer ; this.chwHomeEl.classList.remove(.active); } }, chwShowCycle() { this.chwHomeEl document.querySelector(.chw-home-timer); if (this.chwHomeEl) { this.chwHomeTimer setInterval(() > { this.chwHomeEl.classList.toggle(active); }, this.chwActiveTimer); } }, // onHomeClicked() { // this.$refs.gameScreen.onHomeClicked(); // }, setInGame(val) { this.game.on val; }, setPause(val) { this.game.isPaused val; }, onHomeClicked: function () { BAWK.play(ui_click); this.hideRespawnDisplayAd(); this.$refs.leaveGameConfirmPopup.show(); }, onLeaveGameConfirm: function () { this.$refs.gameScreen.onLeaveGameConfirm(); }, onLeaveGameCancel: function () { this.$refs.gameScreen.onLeaveGameCancel(); }, leaveGame: function () { this.$refs.gameScreen.leaveGame(); }, statsLoading() { if (!extern.inGame) { this.ui.game.stats.loading false; return; } this.ui.game.stats.loading this.ui.game.stats.loading ? false : true; }, onSignInClicked() { BAWK.play(ui_playconfirm); this.$refs.homeScreen.onSignInClicked(); }, onSignOutClicked() { BAWK.play(ui_reset); this.$refs.homeScreen.onSignOutClicked(); }, showNuggyPopup() { if (this.chw.ready && this.firebaseId ! null) { return this.playIncentivizedAd() } this.showChicknWinnerPopup(); }, openUnblocked() { // if (crazyGamesActive) { // window.open(https://scrambled.world/unblocked); // } // else { // } window.open(unblocked); }, onGameTypeChanged(val) { this.currentGameType val; }, onGamePauseUi() { this.$refs.gameScreen.pauseUi(); }, onChwSignInClicked() { this.chwSignInClicked true }, setUiGaugeMeterData(data) { this.$refs.homeScreen.$refs.gaugeMeter.setGaugeMeterData(data) }, fbTransferAccountSignin() { this.hideFirebaseSignIn(); BAWK.play(ui_popupopen); this.$refs.fbTransferAccountSignin.show(); }, setPreviousScreen(screen) { this.previousScreen screen; }, onTutorialPopupClick() { this.ui.tutorialPopup.show true; if (!extern.inGame) { this.hideLoadingScreenAd(); } this.$refs.tutorialPopup.show(); }, onTutorialClosed() { this.ui.tutorialPopup.show false; if (!extern.inGame) { this.showLoadingScreenAd(); } else { setTimeout(() > { this.showRespawnDisplayAd(); }, 100); } }, onGameOptionsClick() { this.$refs.gameOptionsPopup.onShow(); this.$refs.gameOptionsPopup.$refs.gameOptionsPopup.show(); }, onGameOptionsClosed() { this.$refs.gameScreen.$forceUpdate(); setTimeout(() > { this.showRespawnDisplayAd(); }, 100); }, resetGameOptions () { extern.GameOptions.init(); }, openDevXsollaPopup(sku, sub) { this.$refs.xsollaPopup.show(); this.dev.store.sku sku; }, xsollaPopupConfrim() { localStore.setItem(xsollaPopupConfrim, true); extern.buyProductForMoney(this.dev.store.sku); this.xsollaPopupCancel(); }, xsollaPopupCancel() { this.dev.store.sku null; }, changelogSetup(log) { const content ; log.content.forEach((item, idx) > { if (Array.isArray(item)) { if (item0) { content.push(item0); } else { return; } } else { content.push(item); } }); return content; }, changelogContent() { const log extern.changelogData0; const content this.changelogSetup(log); log.content.length 0; log.content.push(...content); return log; }, onOpenBundle(itemsOpen) { if (itemsOpen 0) { this.onCloseNotification(); } this.openEquipSwitchTo(this.equipMode.shop); }, onCloseNotification() { this.$refs.notificationPopup.hide(); }, timeFormat (time) { return time.toString().length 2 ? `0${time}` : `${time}`; }, chwUiTimerUpdate(hours, minutes, seconds, progress, ready, limitReached, count, resets) { this.chw.hours hours ? this.timeFormat(hours) : 0; this.chw.minutes this.timeFormat(minutes); this.chw.seconds this.timeFormat(seconds); this.chw.progress progress; this.chw.ready ready; this.chw.limitReached limitReached; this.chw.winnerCounter count; this.chw.resets resets; }, chwHomeForceReset() { this.chwOnClick(false); this.$refs.chwHomeScreen.$forceUpdate(); }, getChwPlayAdText() { return this.playAdText; }, getChwRemainingMsg() { return this.remainingMsg; }, setGameDataUi(map) { this.game.mapName map; }, killDeathMsg(msg) { this.game.killDeathMsg.msgs.push(msg); this.$refs.gameScreen.killDeathMsg(); }, challengeMsg(msg) { // Add the new message this.game.challengeMsg.msgs.push(msg); // Remove duplicates: Convert the array to a Set and back to an array this.game.challengeMsg.msgs ...new Set(this.game.challengeMsg.msgs); // Proceed with displaying the message if not already showing if (!this.game.challengeMsg.showing) { this.$refs.gameScreen.challengeMsg(); } }, ctsCapturedMsg(msg) { this.game.ctsMsg.team msg.team; this.game.ctsMsg.msg msg.msg; this.$refs.gameScreen.ctsCapturedMsg(); }, shellStreakMsg(msg) { if (msg.streak > 1 && (msg.streak > this.game.streakMsg.count)) { this.$refs.gameScreen.gameScreenStreakAction(); } this.game.streakMsg.count msg.streak; this.game.streakMsg.msg msg.msg; }, bestStreakUpdate(streak) { const hasInc streak > this.game.bestStreak.count ? true : false; this.game.bestStreak.count streak; if (hasInc) { this.$refs.gameScreen.bestStreakUpdate(); } }, shellIngameNotification(item) { this.game.ingameNotification.item item; this.$refs.gameScreen.ingameNotification(); }, }, computed: { appClassObj() { return { playing-poki: this.isPoki, playing-crazy-games: crazyGamesActive, is-vip: this.isSubscriber && this.isUpgraded ? true : false, is-paused: this.game.isPaused && this.game.on && this.showScreen this.screens.game } }, appClassScreen() { return getKeyByValue(this.screens, this.showScreen) + -screen; }, isPhotoBooth() { return !this.ui.showHomeEquipUi ? photo-booth : ; }, bigBannerAdLink() { return this.bigHouseAd.link }, bigBannerAdImg() { return dynamicContentPrefix + `data/img/art/${this.bigHouseAd.id}${this.bigHouseAd.imageExt}`; }, showEquipScreens() { return this.showScreen this.screens.equip || this.showScreen this.screens.featured || this.showScreen this.screens.gear || this.showScreen this.screens.limited; }, accountStatus() { if (this.isAnonymous) { return this.isAnonymous && hasValue(this.firebaseId) ? anon : no-account; } else { return hasValue(this.firebaseId) ? signed-in : no-account; } }, chwClass() { if (this.chw.limitReached || this.isChicknWinnerError) { return grid-column-1-eq; } else { return grid-column-1-eq; } }, chwHomeTimerCls() { if (this.chw.limitReached) { return chw-home-screen-max-watched; } else { if (this.chw.ready) { return is-ready active; } else { return not-ready; } } }, chwChickSrc() { if (this.chw.limitReached || this.isChicknWinnerError) { // return img/chicken-nugget/chickLoop_daily_limit.svg; return this.chw.imgs.limit; } else { if (!this.chw.ready) { // return img/chicken-nugget/chickLoop_sleep.svg; return this.chw.imgs.sleep; } else { // return img/chicken-nugget/chickLoop_speak.svg; return this.chw.imgs.speak; } } }, chwShowTimer() { return true; if (this.chw.limitReached) { // this.chwStopCycle(); return false; } else { if (this.chw.ready) { this.chwShowCycle(); return false; } else { // this.chwStopCycle(); return true; } } }, remainingMsg() { const { adBlockDetect, ready, limitReached, winnerCounter } this.chw; const { chw_error_text, chw_cooldown_msg, chw_ready_msg, chw_time_until, chw_daily_limit_msg } this.loc; if (adBlockDetect) { return Please turn off ad blocker; } if (this.isChicknWinnerError) { return chw_error_text; } if (limitReached) { return chw_daily_limit_msg; } if (ready) { return winnerCounter > 0 ? chw_cooldown_msg : chw_ready_msg; } return chw_time_until; }, progressBarWrapClass() { if (this.chw.ready && !this.chw.limitReached) { return chw-progress-bar-wrap-complete; } }, playAdText() { if (this.chw.limitReached) { return `i classfas fa-egg>/i> ${200 * (this.chw.resets + 1)} Wake Now!`; } else { return this.loc.chw_btn_free_reward; } }, isEggStoreSaleItem() { return this.eggStoreItems.some( item > itemsalePrice ! ); }, footerLinksFormat() { let link https://badegg.io/?utm_sourceshellshock_homepage&utm_mediumreferral, https://basketbros.io/?utm_sourceshellshock_homepage&utm_mediumreferral, https://wrestlebros.io/?utm_sourceshellshock_homepage&utm_mediumreferral, https://www.crazygames.com/game/bad-egg, https://www.crazygames.com/game/basketbros, https://www.crazygames.com/game/wrestle-bros; if (!crazyGamesActive) { return this.loc.home_desc_p7.format(link0, link1, link2); } else { return this.loc.home_desc_p7.format(link3, link4, link5); } }, anonPopupContent() { return this.loc.account_anon_warn_paragraph_block.format(img srcimg/svg/ico_goldenEgg.svg classegg_icon />); }, chwShowBtn() { //chw.ready && !chw.adBlockDetect if ((this.chw.ready && !this.chw.limitReached && !this.chw.adBlockDetect) || (!this.chw.ready && this.chw.limitReached && !this.chw.adBlockDetect)) { return true; } else { return false; } } }, watch : { loc(val) { this.getLocLang(val); }, firebaseId(val) { if (val && this.chwSignInClicked) { vueApp.showChicknWinnerPopup(); this.chwSignInClicked false; } } } }); }/script> div idad-block-test classadsbygoogle>/div> div idublock-test styledisplay:none;> /body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]