minor update - fixes and a few games
5
404.html
@ -14,7 +14,6 @@
|
||||
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/themes.js"></script>
|
||||
<script src="/js/all.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<link rel="stylesheet" href="/themes.css" />
|
||||
@ -25,7 +24,7 @@
|
||||
<script src='https://cdn.jsdelivr.net/npm/@widgetbot/crate@3' async defer>
|
||||
new Crate({
|
||||
server: '1148719137238040606', // Selenite
|
||||
channel: '1164203315068932156' // #commands
|
||||
channel: '1173731814196645909' // #commands
|
||||
})
|
||||
</script>
|
||||
|
||||
@ -47,7 +46,7 @@
|
||||
name="description"
|
||||
content="Welcome to the one and only option for unblocked games. Welcome to Selenite."
|
||||
/>
|
||||
<meta name="author" content="Website Creator" />
|
||||
<meta name="author" content="selenite-cc" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
|
@ -13,7 +13,6 @@
|
||||
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/themes.js"></script>
|
||||
<script src="/js/all.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/randomquote.js"></script>
|
||||
@ -38,7 +37,7 @@
|
||||
name="description"
|
||||
content="Welcome to the one and only option for unblocked games. Welcome to Selenite."
|
||||
/>
|
||||
<meta name="author" content="Website Creator" />
|
||||
<meta name="author" content="selenite-cc" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
@ -70,7 +69,10 @@
|
||||
<a href="https://github.com/skysthelimitt"><sl-avatar image="https://cdn.discordapp.com/avatars/1014608595263950848/fbc25e2f109d98e9f50c361342dbc4f7.webp" label="skysthelimitt"></sl-avatar> <p>Sky</p></a>
|
||||
|
||||
<h2>Supporters</h2>
|
||||
<a href="https://discord.com/users/731338278082445376"><sl-avatar image="https://cdn.discordapp.com/avatars/731338278082445376/1844d9f0f33f23cb385c6b412e3a6040.webp?size=80" label="skysthelimitt"></sl-avatar> <p>Caidn</p></a>
|
||||
<div class="samerow">
|
||||
<a class="avatar" href="https://discord.com/users/731338278082445376"><sl-avatar image="https://cdn.discordapp.com/avatars/731338278082445376/1844d9f0f33f23cb385c6b412e3a6040.webp" label="Caidn"></sl-avatar> <p>Caidn</p></a>
|
||||
<a class="avatar" href="https://discord.com/users/778709612621987850"><sl-avatar image="https://cdn.discordapp.com/avatars/778709612621987850/365d4b71e0da64cc20ad75d612bdd7c4.webp" label="ayo"></sl-avatar> <p>ayo</p></a>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="noscroll">
|
||||
|
@ -14,7 +14,6 @@
|
||||
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/themes.js"></script>
|
||||
<script src="/js/all.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<link rel="stylesheet" href="/themes.css" />
|
||||
@ -40,7 +39,7 @@
|
||||
name="description"
|
||||
content="Welcome to the one and only option for unblocked games. Welcome to Selenite."
|
||||
/>
|
||||
<meta name="author" content="Website Creator" />
|
||||
<meta name="author" content="selenite-cc" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
|
@ -13,7 +13,6 @@
|
||||
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/themes.js"></script>
|
||||
<script src="/js/all.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/randomquote.js"></script>
|
||||
@ -37,7 +36,7 @@
|
||||
name="description"
|
||||
content="Welcome to the one and only option for unblocked games. Welcome to Selenite."
|
||||
/>
|
||||
<meta name="author" content="Website Creator" />
|
||||
<meta name="author" content="selenite-cc" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
|
@ -13,7 +13,6 @@
|
||||
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/themes.js"></script>
|
||||
<script src="/js/all.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/randomquote.js"></script>
|
||||
@ -38,7 +37,7 @@
|
||||
name="description"
|
||||
content="Welcome to the one and only option for unblocked games. Welcome to Selenite."
|
||||
/>
|
||||
<meta name="author" content="Website Creator" />
|
||||
<meta name="author" content="selenite-cc" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
|
@ -7,8 +7,8 @@
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>Duck Life Space</title>
|
||||
<script src="/js/all.js"></script>
|
||||
<script src="Build/UnityLoader.js" type="23682bdcf0d3bd0ab46a820a-text/javascript"></script>
|
||||
<script type="23682bdcf0d3bd0ab46a820a-text/javascript">
|
||||
<script src="Build/UnityLoader.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">
|
||||
var gameInstance = UnityLoader.instantiate("gameContainer", "Build/WebGL5MP.json");
|
||||
</script>
|
||||
<style type="text/css">
|
||||
@ -30,5 +30,5 @@
|
||||
</head>
|
||||
<body style="width:100%; height:100%; margin:0">
|
||||
<div id="gameContainer" style="width:100%; height:100%;"></div>
|
||||
<script src="./rocket-loader.min.js" data-cf-settings="23682bdcf0d3bd0ab46a820a-|49" defer=""></script></body>
|
||||
<script src="./rocket-loader.min.js" data-cf-settings="-|49" defer=""></script></body>
|
||||
</html>
|
BIN
factoryballs/fac.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
factoryballs/factoryballs.swf
Normal file
27
factoryballs/index.html
Normal file
@ -0,0 +1,27 @@
|
||||
<html>
|
||||
<head>
|
||||
|
||||
<script src="/js/all.js"></script>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Factory Balls</title>
|
||||
<style>html{background-color:#000;}</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="ruffle" width="100%" height="100%"></div>
|
||||
<script src="https://unpkg.com/@ruffle-rs/ruffle"></script>
|
||||
<script>
|
||||
window.RufflePlayer = window.RufflePlayer || {};
|
||||
window.addEventListener("load", (event) => {
|
||||
const ruffle = window.RufflePlayer.newest();
|
||||
const player = ruffle.createPlayer();
|
||||
const container = document.getElementById("ruffle");
|
||||
player.id = "player";
|
||||
player.style.width = "100%";
|
||||
player.style.height = "100%";
|
||||
container.appendChild(player);
|
||||
player.load("factoryballs.swf");
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
BIN
factoryballsforever/fac.png
Normal file
After Width: | Height: | Size: 6.2 KiB |
18550
factoryballsforever/factoryballsforever.js
Normal file
BIN
factoryballsforever/images/_preloader.gif
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
factoryballsforever/images/factoryballsforever_atlas_.png
Normal file
After Width: | Height: | Size: 5.4 MiB |
72
factoryballsforever/index.html
Normal file
@ -0,0 +1,72 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Factory Balls forever</title>
|
||||
<style>
|
||||
#animation_container, #_preload_div_ {
|
||||
position:absolute;
|
||||
margin:auto;
|
||||
left:0;right:0;
|
||||
}
|
||||
</style>
|
||||
<script src="/js/all.js"></script>
|
||||
<script src="libs/1.0.0/createjs.min.js"></script>
|
||||
<script src="factoryballsforever.js?1576758564620"></script>
|
||||
<script>
|
||||
var canvas, stage, exportRoot, anim_container, dom_overlay_container, fnStartAnimation;
|
||||
function init() {
|
||||
canvas = document.getElementById("canvas");
|
||||
anim_container = document.getElementById("animation_container");
|
||||
dom_overlay_container = document.getElementById("dom_overlay_container");
|
||||
var comp=AdobeAn.getComposition("FD3559EF710E8E4AABB26802F91D9290");
|
||||
var lib=comp.getLibrary();
|
||||
var loader = new createjs.LoadQueue(false);
|
||||
loader.installPlugin(createjs.Sound);
|
||||
loader.addEventListener("fileload", function(evt){handleFileLoad(evt,comp)});
|
||||
loader.addEventListener("complete", function(evt){handleComplete(evt,comp)});
|
||||
var lib=comp.getLibrary();
|
||||
loader.loadManifest(lib.properties.manifest);
|
||||
}
|
||||
function handleFileLoad(evt, comp) {
|
||||
var images=comp.getImages();
|
||||
if (evt && (evt.item.type == "image")) { images[evt.item.id] = evt.result; }
|
||||
}
|
||||
function handleComplete(evt,comp) {
|
||||
//This function is always called, irrespective of the content. You can use the variable "stage" after it is created in token create_stage.
|
||||
var lib=comp.getLibrary();
|
||||
var ss=comp.getSpriteSheet();
|
||||
var queue = evt.target;
|
||||
var ssMetadata = lib.ssMetadata;
|
||||
for(i=0; i<ssMetadata.length; i++) {
|
||||
ss[ssMetadata[i].name] = new createjs.SpriteSheet( {"images": [queue.getResult(ssMetadata[i].name)], "frames": ssMetadata[i].frames} )
|
||||
}
|
||||
var preloaderDiv = document.getElementById("_preload_div_");
|
||||
preloaderDiv.style.display = 'none';
|
||||
canvas.style.display = 'block';
|
||||
exportRoot = new lib.factoryballsforever();
|
||||
stage = new lib.Stage(canvas);
|
||||
//Registers the "tick" event listener.
|
||||
fnStartAnimation = function() {
|
||||
stage.addChild(exportRoot);
|
||||
createjs.Ticker.framerate = lib.properties.fps;
|
||||
createjs.Ticker.addEventListener("tick", stage);
|
||||
}
|
||||
//Code to support hidpi screens and responsive scaling.
|
||||
AdobeAn.makeResponsive(false,'both',false,1,[canvas,preloaderDiv,anim_container,dom_overlay_container]);
|
||||
AdobeAn.compositionLoaded(lib.properties.id);
|
||||
fnStartAnimation();
|
||||
}
|
||||
function playSound(id, loop) {
|
||||
return createjs.Sound.play(id, {'interrupt':createjs.Sound.INTERRUPT_EARLY, 'loop': loop});}
|
||||
</script>
|
||||
</head>
|
||||
<body onload="init();" style="margin:0px;">
|
||||
<div id="animation_container" style="background-color:rgba(255, 255, 255, 1.00); width:960px; height:720px">
|
||||
<canvas id="canvas" width="960" height="720" style="position: absolute; display: none; background-color:rgba(255, 255, 255, 1.00);"></canvas>
|
||||
<div id="dom_overlay_container" style="pointer-events:none; overflow:hidden; width:960px; height:720px; position: absolute; left: 0px; top: 0px; display: none;">
|
||||
</div>
|
||||
</div>
|
||||
<div id='_preload_div_' style='position:absolute; top:0; left:0; display: inline-block; height:720px; width: 960px; text-align: center;'> <span style='display: inline-block; height: 100%; vertical-align: middle;'></span> <img src=images/_preloader.gif?1576758564620 style='vertical-align: middle; max-height: 100%'/></div>
|
||||
</body>
|
||||
</html>
|
19
factoryballsforever/libs/1.0.0/createjs.min.js
vendored
Normal file
BIN
factoryballsforever/sounds/fbSong.mp3
Normal file
BIN
factoryballsforever/sounds/sndapprove.mp3
Normal file
BIN
factoryballsforever/sounds/sndboo.mp3
Normal file
BIN
factoryballsforever/sounds/sndpaint.mp3
Normal file
BIN
factoryballsforever/sounds/sndshovel.mp3
Normal file
BIN
factoryballsforever/sounds/sndswitch.mp3
Normal file
BIN
factoryballsforever/sounds/sndwater.mp3
Normal file
BIN
factoryballsforever/sounds/sndzaad.mp3
Normal file
@ -2,6 +2,7 @@
|
||||
<html lang="en-us">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<script src="/js/all.js"></script>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
|
||||
<title>Funny Shooter</title>
|
||||
|
15
games.json
@ -864,5 +864,20 @@
|
||||
"name": "Funny Shooter",
|
||||
"directory": "funnyshooter",
|
||||
"image": "icon.jpeg"
|
||||
},
|
||||
{
|
||||
"name": "Monkey Mart",
|
||||
"directory": "monkeymart",
|
||||
"image": "unnamed.png"
|
||||
},
|
||||
{
|
||||
"name": "Factory Balls",
|
||||
"directory": "factoryballs",
|
||||
"image": "fac.png"
|
||||
},
|
||||
{
|
||||
"name": "Factory Balls Forever",
|
||||
"directory": "factoryballsforever",
|
||||
"image": "fac.png"
|
||||
}
|
||||
]
|
||||
|
@ -2,6 +2,7 @@
|
||||
<html lang='en'>
|
||||
<head>
|
||||
<title>Hextris</title>
|
||||
<script src="/js/all.js"></script>
|
||||
<meta name="description" content="An addictive puzzle game inspired by Tetris.">
|
||||
<link rel="manifest" href="manifest.webmanifest">
|
||||
<meta name="apple-itunes-app" content="app-id=903769553"/>
|
||||
@ -65,7 +66,6 @@
|
||||
<script type='text/javascript' src="js/initialization.js"></script>
|
||||
<script src="vendor/sweet-alert.min.js"></script>
|
||||
<link rel="stylesheet" href="style/rrssb.css"/>
|
||||
<script data-ad-client="ca-pub-9107422120987163" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="canvas"></canvas>
|
||||
|
26
index.html
@ -14,7 +14,6 @@
|
||||
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/themes.js"></script>
|
||||
<script src="/js/all.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/randomquote.js"></script>
|
||||
@ -26,7 +25,7 @@
|
||||
<script src='https://cdn.jsdelivr.net/npm/@widgetbot/crate@3' async defer>
|
||||
new Crate({
|
||||
server: '1148719137238040606', // Selenite
|
||||
channel: '1164203315068932156' // #commands
|
||||
channel: '1173731814196645909' // #commands
|
||||
})
|
||||
</script>
|
||||
|
||||
@ -48,21 +47,8 @@
|
||||
name="description"
|
||||
content="Welcome to the one and only option for unblocked games. Welcome to Selenite."
|
||||
/>
|
||||
<meta name="author" content="Website Creator" />
|
||||
<meta name="author" content="selenite-cc" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const tooltip = document.querySelector('.manual-tooltip');
|
||||
if(Math.random() < 0.2) {
|
||||
tooltip.open = !tooltip.open;
|
||||
setTimeout(() => {
|
||||
tooltip.open = !tooltip.open;
|
||||
}, 5000)
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<alerts>
|
||||
<sl-dialog label="Welcome to Selenite!" class="dialog-width" style="--width: 60vw;display:none;">
|
||||
@ -94,11 +80,9 @@
|
||||
<h1>selenite.</h1>
|
||||
<p id="randomquote">...</p>
|
||||
<div class="samerow">
|
||||
<sl-tooltip content="If you ever want to support Selenite, donate here!" trigger="manual" class="manual-tooltip">
|
||||
<div class="img-container">
|
||||
<a href="https://patreon.com/selenitecc"><img src="img/Digital-Patreon-Logo_White.png"></a>
|
||||
</div>
|
||||
</sl-tooltip>
|
||||
<div class="img-container">
|
||||
<a href="https://patreon.com/selenitecc"><img src="img/Digital-Patreon-Logo_White.png"></a>
|
||||
</div>
|
||||
<div class="img-container">
|
||||
<a href="projects.html"><img src="img/baseline_sports_esports_white_48dp.png"></a>
|
||||
</div>
|
||||
|
110
js/all.js
@ -87,17 +87,6 @@ const head = document.getElementsByTagName("head")[0];
|
||||
document.addEventListener(
|
||||
"DOMContentLoaded",
|
||||
function () {
|
||||
if (window.jQuery) {
|
||||
console.log("jquery found");
|
||||
panicMode();
|
||||
} else {
|
||||
var jquery = document.createElement("script");
|
||||
jquery.src = "https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js";
|
||||
document.head.append(jquery);
|
||||
jquery.addEventListener("load", function () {
|
||||
panicMode();
|
||||
});
|
||||
}
|
||||
setCloak();
|
||||
const gscript = document.createElement("script");
|
||||
gscript.setAttribute("async", "");
|
||||
@ -107,107 +96,10 @@ document.addEventListener(
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', 'G-98DP5VKS42');`;
|
||||
const cryptojs = document.createElement("script");
|
||||
cryptojs.setAttribute("src", "https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js");
|
||||
document.head.append(gscript, ingscript, cryptojs);
|
||||
document.head.append(gscript, ingscript);
|
||||
},
|
||||
false
|
||||
);
|
||||
|
||||
let announce;
|
||||
let read = 0;
|
||||
|
||||
checkannouncements();
|
||||
// checkblock();
|
||||
setInterval(() => {
|
||||
// checkblock();
|
||||
if (read == 0) {
|
||||
checkannouncements();
|
||||
}
|
||||
}, 150000);
|
||||
|
||||
async function checkannouncements() {
|
||||
if (!read) {
|
||||
let url = "https://raw.githubusercontent.com/skysthelimitt/selenitestore/main/announcements.json?e=" + Math.floor(Math.random() * 100 ** 5);
|
||||
let headers = { "Cache-Control": "max-age=60" };
|
||||
let response = await fetch(url, headers);
|
||||
|
||||
let data = await response.json(); // read response body and parse as JSON
|
||||
|
||||
if (data[window.location.hostname] || data["all"]) {
|
||||
eval(data[window.location.hostname]);
|
||||
eval(data["all"]);
|
||||
read = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getMainSave() {
|
||||
var mainSave = {};
|
||||
var localStorageDontSave = ["supportalert"];
|
||||
localStorageSave = Object.entries(localStorage);
|
||||
for (let entry in localStorageSave) {
|
||||
if (localStorageDontSave.includes(localStorageSave[entry][0])) {
|
||||
localStorageSave.splice(entry, 1);
|
||||
}
|
||||
}
|
||||
localStorageSave = btoa(JSON.stringify(localStorageSave));
|
||||
mainSave.localStorage = localStorageSave;
|
||||
cookiesSave = document.cookie;
|
||||
cookiesSave = btoa(cookiesSave);
|
||||
mainSave.cookies = cookiesSave;
|
||||
mainSave = btoa(JSON.stringify(mainSave));
|
||||
mainSave = CryptoJS.AES.encrypt(mainSave, "egamepass").toString();
|
||||
return mainSave;
|
||||
}
|
||||
function downloadMainSave() {
|
||||
var data = new Blob([getMainSave()]);
|
||||
var dataURL = URL.createObjectURL(data);
|
||||
var fakeElement = document.createElement("a");
|
||||
fakeElement.href = dataURL;
|
||||
fakeElement.download = "your.selenite.save";
|
||||
fakeElement.click();
|
||||
URL.revokeObjectURL(dataURL);
|
||||
}
|
||||
|
||||
async function checkblock() {
|
||||
let url = "/README.md?e=" + Math.floor(Math.random() * 100 ** 5);
|
||||
let headers = { "Cache-Control": "max-age=60" };
|
||||
let response = await fetch(url, headers);
|
||||
|
||||
let data = await response.text();
|
||||
if (!data.startsWith("## Selenite")) {
|
||||
if (confirm("If you have recieved this alert, there is a high chance that your specific URL of Selenite has been blocked, Click OK to download your save and find a new URL.")) {
|
||||
downloadMainSave();
|
||||
url = "https://raw.githubusercontent.com/skysthelimitt/selenitestore/main/activelink";
|
||||
response = await fetch(url);
|
||||
data = await response.text();
|
||||
|
||||
url = data + "/README.md";
|
||||
response = await fetch(url);
|
||||
readme = await response.text();
|
||||
if (readme.startsWith("## Selenite")) {
|
||||
window.location.href = data;
|
||||
} else {
|
||||
alert("The main link is blocked, click ok to try and find a backup link.");
|
||||
url = "https://raw.githubusercontent.com/skysthelimitt/selenitestore/main/links.json";
|
||||
response = await fetch(url);
|
||||
data = await response.json();
|
||||
console.log(data);
|
||||
for (let i = 0; i < data["urls"].length; i++) {
|
||||
var check = await fetch(data["urls"][i] + "/README.md");
|
||||
var checktext = await check.text();
|
||||
if (checktext.startsWith("## Selenite")) {
|
||||
window.location.href = checktext;
|
||||
} else {
|
||||
console.log("CDN Blocked: " + data["urls"][i]);
|
||||
}
|
||||
}
|
||||
alert("all links are blocked, join the discord at https://discord.gg/7jyufnwJNf and ping @skysthelimit.dev");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (location.pathname.substring(1).includes("/") && localStorage.getItem("selenite.blockClose") == "true") {
|
||||
window.addEventListener("beforeunload", (e) => {e.preventDefault();e.returnValue = '';});
|
||||
}
|
||||
|
21
js/open.js
@ -1,21 +0,0 @@
|
||||
var url = "https://egamepass.pages.dev";
|
||||
var urlObj = new window.URL(window.location.href);
|
||||
document.getElementById("create").onclick = function () {
|
||||
if (url.value.substring(0, 8) !== "https://" && url.value.substring(0, 7) !== "http://") {
|
||||
url.value = "https://" + url.value.split("https://").pop();
|
||||
} else if (url.value.substring(0, 7) == "http://") {
|
||||
url.value = "https://" + url.value.split("http://").pop();
|
||||
}
|
||||
win = window.open();
|
||||
win.document.body.style.margin = "0";
|
||||
win.document.body.style.height = "100vh";
|
||||
var iframe = win.document.createElement("iframe");
|
||||
iframe.style.border = "none";
|
||||
iframe.style.width = "100%";
|
||||
iframe.style.height = "100%";
|
||||
iframe.style.margin = "0";
|
||||
iframe.referrerpolicy = "no-referrer";
|
||||
iframe.allow = "fullscreen";
|
||||
iframe.src = url.value;
|
||||
win.document.body.appendChild(iframe);
|
||||
};
|
@ -21,7 +21,7 @@
|
||||
<p class="notSupportedMessage">JavaScript appears to be disabled. Please enable it to view this content.</p>
|
||||
</div>
|
||||
</noscript>
|
||||
<script type="82602b3792b8678659e83237-text/javascript">
|
||||
<script type="text/javascript">
|
||||
document.addEventListener('touchmove', function(e) {
|
||||
e.preventDefault();
|
||||
}, { passive: false });
|
||||
@ -38,9 +38,9 @@
|
||||
}
|
||||
}, false);
|
||||
</script>
|
||||
<script src="scripts/supportcheck.js" type="82602b3792b8678659e83237-text/javascript"></script>
|
||||
<script src="scripts/offlineclient.js" type="82602b3792b8678659e83237-module"></script>
|
||||
<script src="scripts/main.js" type="82602b3792b8678659e83237-module"></script>
|
||||
<script src="scripts/register-sw.js" type="82602b3792b8678659e83237-module"></script>
|
||||
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="82602b3792b8678659e83237-|49" defer=""></script></body>
|
||||
<script src="scripts/supportcheck.js" type="text/javascript"></script>
|
||||
<script src="scripts/offlineclient.js" type="module"></script>
|
||||
<script src="scripts/main.js" type="module"></script>
|
||||
<script src="scripts/register-sw.js" type="module"></script>
|
||||
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="|49" defer=""></script></body>
|
||||
</html>
|
5
monkeymart/GameAnalytics.js
Normal file
BIN
monkeymart/MonkeyMart.wasm
Normal file
1
monkeymart/MonkeyMart_wasm.js
Normal file
BIN
monkeymart/archive.zip
Normal file
1
monkeymart/archive/archive_files.json
Normal file
@ -0,0 +1 @@
|
||||
{"content":[{"name":"game.projectc","size":4051,"pieces":[{"name":"game.projectc0","offset":0}]},{"name":"game.arci","size":25968,"pieces":[{"name":"game.arci0","offset":0}]},{"name":"game.arcd","size":3776864,"pieces":[{"name":"game.arcd0","offset":0},{"name":"game.arcd1","offset":2097152}]},{"name":"game.dmanifest","size":24407,"pieces":[{"name":"game.dmanifest0","offset":0}]},{"name":"game.public.der","size":162,"pieces":[{"name":"game.public.der0","offset":0}]}]}
|
BIN
monkeymart/archive/game.arcd0
Normal file
BIN
monkeymart/archive/game.arcd1
Normal file
BIN
monkeymart/archive/game.arci0
Normal file
BIN
monkeymart/archive/game.dmanifest0
Normal file
217
monkeymart/archive/game.projectc0
Normal file
@ -0,0 +1,217 @@
|
||||
[project]
|
||||
title = MonkeyMart
|
||||
version = 2.2
|
||||
write_log = 0
|
||||
compress_archive = 1
|
||||
publisher = unnamed
|
||||
developer = unnamed
|
||||
bundle_resources = bundle
|
||||
title_as_file_name = MonkeyMart
|
||||
|
||||
[display]
|
||||
width = 960
|
||||
height = 640
|
||||
high_dpi = 1
|
||||
samples = 0
|
||||
fullscreen = 0
|
||||
update_frequency = 60
|
||||
swap_interval = 1
|
||||
vsync = 1
|
||||
display_profiles = /builtins/render/default.display_profilesc
|
||||
dynamic_orientation = 0
|
||||
display_device_info = 0
|
||||
|
||||
[render]
|
||||
clear_color_red = 0
|
||||
clear_color_green = 0
|
||||
clear_color_blue = 0
|
||||
clear_color_alpha = 0
|
||||
|
||||
[physics]
|
||||
type = 2D
|
||||
max_collision_object_count = 128
|
||||
use_fixed_timestep = 0
|
||||
gravity_y = -10
|
||||
debug = 0
|
||||
debug_alpha = 0.9
|
||||
world_count = 4
|
||||
gravity_x = 0
|
||||
gravity_z = 0
|
||||
scale = 1
|
||||
allow_dynamic_transforms = 1
|
||||
debug_scale = 30
|
||||
max_collisions = 64
|
||||
max_contacts = 128
|
||||
contact_impulse_limit = 0
|
||||
ray_cast_limit_2d = 64
|
||||
ray_cast_limit_3d = 128
|
||||
trigger_overlap_capacity = 16
|
||||
velocity_threshold = 1
|
||||
max_fixed_timesteps = 2
|
||||
|
||||
[bootstrap]
|
||||
main_collection = /main/controller.collectionc
|
||||
render = /orthographic/render/orthographic.renderc
|
||||
|
||||
[graphics]
|
||||
default_texture_min_filter = linear
|
||||
default_texture_mag_filter = linear
|
||||
max_draw_calls = 1024
|
||||
max_characters = 8192
|
||||
max_debug_vertices = 10000
|
||||
texture_profiles = /updated.texture_profiles
|
||||
verify_graphics_calls = 1
|
||||
memory_size = 512
|
||||
|
||||
[shader]
|
||||
output_spirv = 0
|
||||
|
||||
[sound]
|
||||
gain = 1
|
||||
max_sound_data = 128
|
||||
max_sound_buffers = 32
|
||||
max_sound_sources = 16
|
||||
max_sound_instances = 256
|
||||
max_component_count = 32
|
||||
use_thread = 1
|
||||
|
||||
[resource]
|
||||
http_cache = 0
|
||||
max_resources = 1024
|
||||
|
||||
[input]
|
||||
repeat_delay = 0.5
|
||||
repeat_interval = 0.2
|
||||
gamepads = /builtins/input/default.gamepadsc
|
||||
game_binding = /input/game.input_bindingc
|
||||
use_accelerometer = 1
|
||||
|
||||
[sprite]
|
||||
max_count = 512
|
||||
subpixels = 1
|
||||
|
||||
[model]
|
||||
max_count = 128
|
||||
split_meshes = 0
|
||||
|
||||
[mesh]
|
||||
max_count = 128
|
||||
|
||||
[gui]
|
||||
max_count = 64
|
||||
max_particlefx_count = 64
|
||||
max_particle_count = 1024
|
||||
|
||||
[collection]
|
||||
max_instances = 2048
|
||||
max_input_stack_entries = 16
|
||||
|
||||
[collection_proxy]
|
||||
max_count = 8
|
||||
|
||||
[collectionfactory]
|
||||
max_count = 128
|
||||
|
||||
[factory]
|
||||
max_count = 128
|
||||
|
||||
[ios]
|
||||
launch_screen = /builtins/manifests/ios/LaunchScreen.storyboardc
|
||||
pre_renderered_icons = 0
|
||||
bundle_identifier = example.unnamed
|
||||
bundle_name =
|
||||
infoplist = /builtins/manifests/ios/Info.plist
|
||||
default_language = en
|
||||
localizations = en
|
||||
|
||||
[android]
|
||||
version_code = 1
|
||||
minimum_sdk_version = 16
|
||||
target_sdk_version = 31
|
||||
package = com.example.todo
|
||||
gcm_sender_id =
|
||||
manifest = /builtins/manifests/android/AndroidManifest.xml
|
||||
iap_provider = GooglePlay
|
||||
input_method = HiddenInputField
|
||||
immersive_mode = 0
|
||||
display_cutout = 1
|
||||
debuggable = 0
|
||||
proguard =
|
||||
|
||||
[osx]
|
||||
app_icon =
|
||||
infoplist = /builtins/manifests/osx/Info.plist
|
||||
bundle_identifier = example.unnamed
|
||||
bundle_name =
|
||||
bundle_version = 1
|
||||
default_language = en
|
||||
localizations = en
|
||||
|
||||
[windows]
|
||||
app_icon =
|
||||
|
||||
[html5]
|
||||
custom_heap_size = 0
|
||||
heap_size = 64
|
||||
htmlfile = /engine_template.html
|
||||
cssfile = /css_theme.css
|
||||
splash_image = /images/bg_loading.png
|
||||
archive_location_prefix = archive
|
||||
archive_location_suffix =
|
||||
engine_arguments = --verify-graphics-calls=false
|
||||
wasm_streaming = 0
|
||||
show_fullscreen_button = 0
|
||||
show_made_with_defold = 0
|
||||
show_console_banner = 1
|
||||
scale_mode = stretch
|
||||
|
||||
[particle_fx]
|
||||
max_count = 0
|
||||
max_emitter_count = 0
|
||||
max_particle_count = 0
|
||||
|
||||
[iap]
|
||||
auto_finish_transactions = 1
|
||||
|
||||
[network]
|
||||
http_timeout = 0
|
||||
ssl_certificates =
|
||||
http_thread_count = 4
|
||||
http_cache_enabled = 1
|
||||
|
||||
[library]
|
||||
include_dirs =
|
||||
|
||||
[script]
|
||||
shared_state = 1
|
||||
|
||||
[label]
|
||||
max_count = 64
|
||||
subpixels = 1
|
||||
|
||||
[profiler]
|
||||
track_cpu = 0
|
||||
sleep_between_server_updates = 0
|
||||
|
||||
[liveupdate]
|
||||
settings = /liveupdate.settings
|
||||
enabled = 1
|
||||
|
||||
[tilemap]
|
||||
max_count = 0
|
||||
max_tile_count = 0
|
||||
|
||||
[engine]
|
||||
run_while_iconified = 0
|
||||
fixed_update_frequency = 60
|
||||
|
||||
[gameanalytics]
|
||||
game_key_html5 = 8460790931685c9f59f3e669a97521bd
|
||||
secret_key_html5 = 6d3a08c1c25fca8bb1587ed50c42a81ddff80aa0
|
||||
|
||||
[spine]
|
||||
max_count = 512
|
||||
|
||||
[native_extension]
|
||||
app_manifest = /manifest.appmanifest
|
||||
|
BIN
monkeymart/archive/game.public.der0
Normal file
BIN
monkeymart/bg_loading.png
Normal file
After Width: | Height: | Size: 152 KiB |
852
monkeymart/dmloader.js
Normal file
@ -0,0 +1,852 @@
|
||||
// file downloader
|
||||
// wraps XMLHttpRequest and adds retry support and progress updates when the
|
||||
// content is gzipped (gzipped content doesn't report a computable content length
|
||||
// on Google Chrome)
|
||||
var FileLoader = {
|
||||
options: {
|
||||
retryCount: 4,
|
||||
retryInterval: 1000,
|
||||
},
|
||||
// do xhr request with retries
|
||||
request: function(url, method, responseType, currentAttempt) {
|
||||
if (typeof method === 'undefined') throw "No method specified";
|
||||
if (typeof method === 'responseType') throw "No responseType specified";
|
||||
if (typeof currentAttempt === 'undefined') currentAttempt = 0;
|
||||
var obj = {
|
||||
send: function() {
|
||||
var onprogress = this.onprogress;
|
||||
var onload = this.onload;
|
||||
var onerror = this.onerror;
|
||||
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open(method, url, true);
|
||||
xhr.responseType = responseType;
|
||||
xhr.onprogress = function(e) {
|
||||
if (onprogress) onprogress(xhr, e);
|
||||
};
|
||||
xhr.onerror = function(e) {
|
||||
if (currentAttempt == FileLoader.options.retryCount) {
|
||||
if (onerror) onerror(xhr, e);
|
||||
return;
|
||||
}
|
||||
currentAttempt = currentAttempt + 1;
|
||||
setTimeout(obj.send.bind(obj), FileLoader.options.retryInterval);
|
||||
};
|
||||
xhr.onload = function(e) {
|
||||
if (onload) onload(xhr, e);
|
||||
};
|
||||
xhr.send(null);
|
||||
}
|
||||
};
|
||||
return obj;
|
||||
},
|
||||
// Do HTTP HEAD request to get size of resource
|
||||
// callback will receive size or undefined in case of an error
|
||||
size: function(url, callback) {
|
||||
var request = FileLoader.request(url, "HEAD", "text");
|
||||
request.onerror = function(xhr, e) {
|
||||
callback(undefined);
|
||||
};
|
||||
request.onload = function(xhr, e) {
|
||||
if (xhr.readyState === 4) {
|
||||
if (xhr.status === 200) {
|
||||
var total = xhr.getResponseHeader('content-length');
|
||||
callback(total);
|
||||
} else {
|
||||
callback(undefined);
|
||||
}
|
||||
}
|
||||
};
|
||||
request.send();
|
||||
},
|
||||
// Do HTTP GET request
|
||||
// onprogress(loaded, total)
|
||||
// onerror(error)
|
||||
// onload(response)
|
||||
load: function(url, responseType, estimatedSize, onprogress, onerror, onload) {
|
||||
var request = FileLoader.request(url, "GET", responseType);
|
||||
request.onprogress = function(xhr, e) {
|
||||
if (e.lengthComputable) {
|
||||
onprogress(e.loaded, e.total);
|
||||
return;
|
||||
}
|
||||
var contentLength = xhr.getResponseHeader('content-length');
|
||||
var size = contentLength != undefined ? contentLength : estimatedSize;
|
||||
if (size) {
|
||||
onprogress(e.loaded, size);
|
||||
} else {
|
||||
onprogress(e.loaded, e.loaded);
|
||||
}
|
||||
};
|
||||
request.onerror = function(xhr, e) {
|
||||
onerror("Error loading '" + url + "' (" + e + ")");
|
||||
};
|
||||
request.onload = function(xhr, e) {
|
||||
if (xhr.readyState === 4) {
|
||||
if (xhr.status === 200) {
|
||||
var res = xhr.response;
|
||||
if (responseType == "json" && typeof res === "string") {
|
||||
onload(JSON.parse(res));
|
||||
} else {
|
||||
onload(res);
|
||||
}
|
||||
} else {
|
||||
onerror("Error loading '" + url + "' (" + e + ")");
|
||||
}
|
||||
}
|
||||
};
|
||||
request.send();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
var EngineLoader = {
|
||||
wasm_size: 2000000,
|
||||
wasmjs_size: 250000,
|
||||
asmjs_size: 4000000,
|
||||
|
||||
stream_wasm: false,
|
||||
|
||||
loadAndInstantiateWasmAsync: function(src, fromProgress, toProgress, callback) {
|
||||
FileLoader.load(src, "arraybuffer", EngineLoader.wasm_size,
|
||||
function(loaded, total) { Progress.calculateProgress(fromProgress, toProgress, loaded, total); },
|
||||
function(error) { throw error; },
|
||||
function(wasm) {
|
||||
Module.instantiateWasm = function(imports, successCallback) {
|
||||
var wasmInstantiate = WebAssembly.instantiate(new Uint8Array(wasm), imports).then(function(output) {
|
||||
successCallback(output.instance);
|
||||
}).catch(function(e) {
|
||||
console.log('wasm instantiation failed! ' + e);
|
||||
throw e;
|
||||
});
|
||||
return {}; // Compiling asynchronously, no exports.
|
||||
}
|
||||
callback();
|
||||
});
|
||||
},
|
||||
|
||||
setupWasmStreamAsync: async function(src, fromProgress, toProgress) {
|
||||
// https://stackoverflow.com/a/69179454
|
||||
var fetchFn = fetch;
|
||||
if (typeof TransformStream === "function" && ReadableStream.prototype.pipeThrough) {
|
||||
async function fetchWithProgress(path) {
|
||||
const response = await fetch(path);
|
||||
// May be incorrect if compressed
|
||||
const contentLength = response.headers.get("Content-Length");
|
||||
const total = parseInt(contentLength, 10);
|
||||
|
||||
let bytesLoaded = 0;
|
||||
const ts = new TransformStream({
|
||||
transform (chunk, controller) {
|
||||
bytesLoaded += chunk.byteLength;
|
||||
Progress.calculateProgress(fromProgress, toProgress, bytesLoaded, total);
|
||||
controller.enqueue(chunk)
|
||||
}
|
||||
});
|
||||
|
||||
return new Response(response.body.pipeThrough(ts), response);
|
||||
}
|
||||
fetchFn = fetchWithProgress;
|
||||
}
|
||||
|
||||
Module.instantiateWasm = function(imports, successCallback) {
|
||||
WebAssembly.instantiateStreaming(fetchFn(src), imports).then(function(output) {
|
||||
Progress.calculateProgress(fromProgress, toProgress, 1, 1);
|
||||
successCallback(output.instance);
|
||||
}).catch(function(e) {
|
||||
console.log('wasm streaming instantiation failed! ' + e);
|
||||
throw e;
|
||||
});
|
||||
return {}; // Compiling asynchronously, no exports.
|
||||
}
|
||||
},
|
||||
|
||||
// instantiate the .wasm file either by streaming it or first loading and then instantiate it
|
||||
// https://github.com/emscripten-core/emscripten/blob/master/tests/manual_wasm_instantiate.html#L170
|
||||
loadWasmAsync: function(exeName) {
|
||||
if (EngineLoader.stream_wasm && (typeof WebAssembly.instantiateStreaming === "function")) {
|
||||
EngineLoader.setupWasmStreamAsync(exeName + ".wasm", 10, 50);
|
||||
EngineLoader.loadAndRunScriptAsync(exeName + '_wasm.js', EngineLoader.wasmjs_size, 0, 10);
|
||||
}
|
||||
else {
|
||||
EngineLoader.loadAndInstantiateWasmAsync(exeName + ".wasm", 0, 40, function() {
|
||||
EngineLoader.loadAndRunScriptAsync(exeName + '_wasm.js', EngineLoader.wasmjs_size, 40, 50);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
loadAsmJsAsync: function(exeName) {
|
||||
EngineLoader.loadAndRunScriptAsync(exeName + '_asmjs.js', EngineLoader.asmjs_size, 0, 50);
|
||||
},
|
||||
|
||||
// load and start engine script (asm.js or wasm.js)
|
||||
loadAndRunScriptAsync: function(src, estimatedSize, fromProgress, toProgress) {
|
||||
FileLoader.load(src, "text", estimatedSize,
|
||||
function(loaded, total) { Progress.calculateProgress(fromProgress, toProgress, loaded, total); },
|
||||
function(error) { throw error; },
|
||||
function(response) {
|
||||
var tag = document.createElement("script");
|
||||
tag.text = response;
|
||||
document.head.appendChild(tag);
|
||||
});
|
||||
},
|
||||
|
||||
// load engine (asm.js or wasm.js + wasm)
|
||||
load: function(appCanvasId, exeName) {
|
||||
Progress.addProgress(Module.setupCanvas(appCanvasId));
|
||||
if (Module['isWASMSupported']) {
|
||||
EngineLoader.loadWasmAsync(exeName);
|
||||
} else {
|
||||
EngineLoader.loadAsmJsAsync(exeName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* ********************************************************************* */
|
||||
/* Load and combine game archive data that is split into archives */
|
||||
/* ********************************************************************* */
|
||||
|
||||
var GameArchiveLoader = {
|
||||
// which files to load
|
||||
_files: [],
|
||||
_fileIndex: 0,
|
||||
// file
|
||||
// name: intended filepath of built object
|
||||
// size: expected size of built object.
|
||||
// data: combined pieces
|
||||
// downloaded: total bytes downloaded
|
||||
// pieces: array of name, offset and data objects
|
||||
// numExpectedFiles: total number of files expected in description
|
||||
// lastRequestedPiece: index of last data file requested (strictly ascending)
|
||||
// totalLoadedPieces: counts the number pieces received
|
||||
|
||||
//MAX_CONCURRENT_XHR: 6, // remove comment if throttling of XHR is desired.
|
||||
|
||||
isCompleted: false, // status of process
|
||||
|
||||
_onFileLoadedListeners: [], // signature: name, data.
|
||||
_onArchiveLoadedListeners:[], // signature: void
|
||||
_onFileDownloadErrorListeners: [], // signature: name
|
||||
|
||||
_currentDownloadBytes: 0,
|
||||
_totalDownloadBytes: 0,
|
||||
|
||||
_archiveLocationFilter: function(path) { return "split" + path; },
|
||||
|
||||
cleanUp: function() {
|
||||
this._files = [];
|
||||
this._fileIndex = 0;
|
||||
this.isCompleted = false;
|
||||
this._onGameArchiveLoaderCompletedListeners = [];
|
||||
this._onAllTargetsBuiltListeners = [];
|
||||
this._onFileDownloadErrorListeners = [];
|
||||
|
||||
this._currentDownloadBytes = 0;
|
||||
this._totalDownloadBytes = 0;
|
||||
},
|
||||
|
||||
addListener: function(list, callback) {
|
||||
if (typeof callback !== 'function') throw "Invalid callback registration";
|
||||
list.push(callback);
|
||||
},
|
||||
notifyListeners: function(list, data) {
|
||||
for (i=0; i<list.length; ++i) {
|
||||
list[i](data);
|
||||
}
|
||||
},
|
||||
|
||||
addFileDownloadErrorListener: function(callback) {
|
||||
this.addListener(this._onFileDownloadErrorListeners, callback);
|
||||
},
|
||||
notifyFileDownloadError: function(url) {
|
||||
this.notifyListeners(this._onFileDownloadErrorListeners, url);
|
||||
},
|
||||
|
||||
addFileLoadedListener: function(callback) {
|
||||
this.addListener(this._onFileLoadedListeners, callback);
|
||||
},
|
||||
notifyFileLoaded: function(file) {
|
||||
this.notifyListeners(this._onFileLoadedListeners, { name: file.name, data: file.data });
|
||||
},
|
||||
|
||||
addArchiveLoadedListener: function(callback) {
|
||||
this.addListener(this._onArchiveLoadedListeners, callback);
|
||||
},
|
||||
notifyArchiveLoaded: function() {
|
||||
this.notifyListeners(this._onArchiveLoadedListeners);
|
||||
},
|
||||
|
||||
setFileLocationFilter: function(filter) {
|
||||
if (typeof filter !== 'function') throw "Invalid filter";
|
||||
this._archiveLocationFilter = filter;
|
||||
},
|
||||
|
||||
// load the archive_files.json with the list of files and their individual
|
||||
// pieces
|
||||
// descriptionUrl: location of text file describing files to be preloaded
|
||||
loadArchiveDescription: function(descriptionUrl) {
|
||||
FileLoader.load(
|
||||
this._archiveLocationFilter(descriptionUrl),
|
||||
"json",
|
||||
undefined,
|
||||
function (loaded, total) { },
|
||||
function (error) { GameArchiveLoader.notifyFileDownloadError(descriptionUrl); },
|
||||
function (json) { GameArchiveLoader.onReceiveDescription(json); });
|
||||
},
|
||||
|
||||
onReceiveDescription: function(json) {
|
||||
this._files = json.content;
|
||||
this._totalDownloadBytes = 0;
|
||||
this._currentDownloadBytes = 0;
|
||||
|
||||
// calculate total download size of all files
|
||||
for(var i=0; i<this._files.length; ++i) {
|
||||
this._totalDownloadBytes += this._files[i].size;
|
||||
}
|
||||
this.downloadContent();
|
||||
},
|
||||
|
||||
downloadContent: function() {
|
||||
var file = this._files[this._fileIndex];
|
||||
// if the file consists of more than one piece we prepare an array to store the pieces in
|
||||
if (file.pieces.length > 1) {
|
||||
file.data = new Uint8Array(file.size);
|
||||
}
|
||||
// how many pieces to download at a time
|
||||
var limit = file.pieces.length;
|
||||
if (typeof this.MAX_CONCURRENT_XHR !== 'undefined') {
|
||||
limit = Math.min(limit, this.MAX_CONCURRENT_XHR);
|
||||
}
|
||||
// download pieces
|
||||
for (var i=0; i<limit; ++i) {
|
||||
this.downloadPiece(file, i);
|
||||
}
|
||||
},
|
||||
|
||||
notifyDownloadProgress: function() {
|
||||
Progress.calculateProgress(50, 100, this._currentDownloadBytes, this._totalDownloadBytes);
|
||||
},
|
||||
|
||||
downloadPiece: function(file, index) {
|
||||
if (index < file.lastRequestedPiece) {
|
||||
throw "Request out of order";
|
||||
}
|
||||
|
||||
var piece = file.pieces[index];
|
||||
file.lastRequestedPiece = index;
|
||||
file.totalLoadedPieces = 0;
|
||||
|
||||
var total = 0;
|
||||
var downloaded = 0;
|
||||
var url = this._archiveLocationFilter('/' + piece.name);
|
||||
|
||||
FileLoader.load(
|
||||
url, "arraybuffer", undefined,
|
||||
function (loaded, total) {
|
||||
var delta = loaded - downloaded;
|
||||
downloaded = loaded;
|
||||
GameArchiveLoader._currentDownloadBytes += delta;
|
||||
GameArchiveLoader.notifyDownloadProgress();
|
||||
},
|
||||
function (error) {
|
||||
GameArchiveLoader.notifyFileDownloadError(error);
|
||||
},
|
||||
function (response) {
|
||||
piece.data = new Uint8Array(response);
|
||||
piece.dataLength = piece.data.length;
|
||||
total = piece.dataLength;
|
||||
downloaded = piece.dataLength;
|
||||
GameArchiveLoader.onPieceLoaded(file, piece);
|
||||
GameArchiveLoader.notifyDownloadProgress();
|
||||
piece.data = undefined;
|
||||
});
|
||||
},
|
||||
|
||||
addPieceToFile: function(file, piece) {
|
||||
if (1 == file.pieces.length) {
|
||||
file.data = piece.data;
|
||||
} else {
|
||||
var start = piece.offset;
|
||||
var end = start + piece.data.length;
|
||||
if (0 > start) {
|
||||
throw "Buffer underflow";
|
||||
}
|
||||
if (end > file.data.length) {
|
||||
throw "Buffer overflow";
|
||||
}
|
||||
file.data.set(piece.data, piece.offset);
|
||||
}
|
||||
},
|
||||
|
||||
onPieceLoaded: function(file, piece) {
|
||||
this.addPieceToFile(file, piece);
|
||||
|
||||
++file.totalLoadedPieces;
|
||||
// is all pieces of the file loaded?
|
||||
if (file.totalLoadedPieces == file.pieces.length) {
|
||||
this.onFileLoaded(file);
|
||||
}
|
||||
// continue loading more pieces of the file
|
||||
// if not all pieces are already in progress
|
||||
else {
|
||||
var next = file.lastRequestedPiece + 1;
|
||||
if (next < file.pieces.length) {
|
||||
this.downloadPiece(file, next);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
verifyFile: function(file) {
|
||||
// verify that we downloaded as much as we were supposed to
|
||||
var actualSize = 0;
|
||||
for (var i=0;i<file.pieces.length; ++i) {
|
||||
actualSize += file.pieces[i].dataLength;
|
||||
}
|
||||
// if (actualSize != file.size) {
|
||||
// throw "Unexpected data size";
|
||||
// }
|
||||
|
||||
// verify the pieces
|
||||
if (file.pieces.length > 1) {
|
||||
var output = file.data;
|
||||
var pieces = file.pieces;
|
||||
for (i=0; i<pieces.length; ++i) {
|
||||
var item = pieces[i];
|
||||
// Bounds check
|
||||
var start = item.offset;
|
||||
var end = start + item.dataLength;
|
||||
if (0 < i) {
|
||||
var previous = pieces[i - 1];
|
||||
if (previous.offset + previous.dataLength > start) {
|
||||
throw "Segment underflow";
|
||||
}
|
||||
}
|
||||
if (pieces.length - 2 > i) {
|
||||
var next = pieces[i + 1];
|
||||
if (end > next.offset) {
|
||||
throw "Segment overflow";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
onFileLoaded: function(file) {
|
||||
this.verifyFile(file);
|
||||
this.notifyFileLoaded(file);
|
||||
++this._fileIndex;
|
||||
if (this._fileIndex == this._files.length) {
|
||||
this.onArchiveLoaded();
|
||||
} else {
|
||||
this.downloadContent();
|
||||
}
|
||||
},
|
||||
|
||||
onArchiveLoaded: function() {
|
||||
this.isCompleted = true;
|
||||
this.notifyArchiveLoaded();
|
||||
}
|
||||
};
|
||||
|
||||
/* ********************************************************************* */
|
||||
/* Default splash and progress visualisation */
|
||||
/* ********************************************************************* */
|
||||
|
||||
var Progress = {
|
||||
progress_id: "defold-progress",
|
||||
bar_id: "defold-progress-bar",
|
||||
|
||||
listeners: [],
|
||||
|
||||
addListener: function(callback) {
|
||||
if (typeof callback !== 'function') throw "Invalid callback registration";
|
||||
this.listeners.push(callback);
|
||||
},
|
||||
|
||||
notifyListeners: function(percentage) {
|
||||
for (i=0; i<this.listeners.length; ++i) {
|
||||
this.listeners[i](percentage);
|
||||
}
|
||||
},
|
||||
|
||||
addProgress : function (canvas) {
|
||||
/* Insert default progress bar below canvas */
|
||||
canvas.insertAdjacentHTML('afterend', '<div id="' + Progress.progress_id + '" class="canvas-app-progress"><div id="' + Progress.bar_id + '" class="canvas-app-progress-bar" style="width: 0%;"></div></div>');
|
||||
Progress.bar = document.getElementById(Progress.bar_id);
|
||||
Progress.progress = document.getElementById(Progress.progress_id);
|
||||
},
|
||||
|
||||
updateProgress: function(percentage) {
|
||||
if (Progress.bar) {
|
||||
Progress.bar.style.width = percentage + "%";
|
||||
}
|
||||
Progress.notifyListeners(percentage);
|
||||
},
|
||||
|
||||
calculateProgress: function (from, to, current, total) {
|
||||
this.updateProgress(from + (current / total) * (to - from));
|
||||
},
|
||||
|
||||
removeProgress: function () {
|
||||
if (Progress.progress.parentElement !== null) {
|
||||
Progress.progress.parentElement.removeChild(Progress.progress);
|
||||
|
||||
// Remove any background/splash image that was set in runApp().
|
||||
// Workaround for Safari bug DEF-3061.
|
||||
Module.canvas.style.background = "";
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/* ********************************************************************* */
|
||||
/* Module is Emscripten namespace */
|
||||
/* ********************************************************************* */
|
||||
|
||||
var Module = {
|
||||
noInitialRun: true,
|
||||
|
||||
_filesToPreload: [],
|
||||
_archiveLoaded: false,
|
||||
_preLoadDone: false,
|
||||
_waitingForArchive: false,
|
||||
|
||||
// Persistent storage
|
||||
persistentStorage: true,
|
||||
_syncInProgress: false,
|
||||
_syncNeeded: false,
|
||||
_syncInitial: false,
|
||||
_syncMaxTries: 3,
|
||||
_syncTries: 0,
|
||||
|
||||
arguments: [],
|
||||
|
||||
print: function(text) { console.log(text); },
|
||||
printErr: function(text) { console.error(text); },
|
||||
|
||||
setStatus: function(text) { console.log(text); },
|
||||
|
||||
isWASMSupported: (function() {
|
||||
try {
|
||||
if (typeof WebAssembly === "object" && typeof WebAssembly.instantiate === "function") {
|
||||
const module = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));
|
||||
if (module instanceof WebAssembly.Module)
|
||||
return new WebAssembly.Instance(module) instanceof WebAssembly.Instance;
|
||||
}
|
||||
} catch (e) {
|
||||
}
|
||||
return false;
|
||||
})(),
|
||||
|
||||
prepareErrorObject: function (err, url, line, column, errObj) {
|
||||
line = typeof line == "undefined" ? 0 : line;
|
||||
column = typeof column == "undefined" ? 0 : column;
|
||||
url = typeof url == "undefined" ? "" : url;
|
||||
var errorLine = url + ":" + line + ":" + column;
|
||||
|
||||
var error = errObj || (typeof window.event != "undefined" ? window.event.error : "" ) || err || "Undefined Error";
|
||||
var message = "";
|
||||
var stack = "";
|
||||
var backtrace = "";
|
||||
|
||||
if (typeof error == "object" && typeof error.stack != "undefined" && typeof error.message != "undefined") {
|
||||
stack = String(error.stack);
|
||||
message = String(error.message);
|
||||
} else {
|
||||
stack = String(error).split("\n");
|
||||
message = stack.shift();
|
||||
stack = stack.join("\n");
|
||||
}
|
||||
stack = stack || errorLine;
|
||||
|
||||
var callLine = /at (\S+:\d*$)/.exec(message);
|
||||
if (callLine) {
|
||||
message = message.replace(/(at \S+:\d*$)/, "");
|
||||
stack = callLine[1] + "\n" + stack;
|
||||
}
|
||||
|
||||
message = message.replace(/(abort\(.+\)) at .+/, "$1");
|
||||
stack = stack.replace(/\?{1}\S+(:\d+:\d+)/g, "$1");
|
||||
stack = stack.replace(/ *at (\S+)$/gm, "@$1");
|
||||
stack = stack.replace(/ *at (\S+)(?: \[as \S+\])? +\((.+)\)/g, "$1@$2");
|
||||
stack = stack.replace(/^((?:Object|Array)\.)/gm, "");
|
||||
stack = stack.split("\n");
|
||||
|
||||
return { stack:stack, message:message };
|
||||
},
|
||||
|
||||
hasWebGLSupport: function() {
|
||||
var webgl_support = false;
|
||||
try {
|
||||
var canvas = document.createElement("canvas");
|
||||
var gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
|
||||
if (gl && gl instanceof WebGLRenderingContext) {
|
||||
webgl_support = true;
|
||||
}
|
||||
} catch (error) {
|
||||
console.log("An error occurred while detecting WebGL support: " + error);
|
||||
webgl_support = false;
|
||||
}
|
||||
|
||||
return webgl_support;
|
||||
},
|
||||
|
||||
setupCanvas: function(appCanvasId) {
|
||||
appCanvasId = (typeof appCanvasId === 'undefined') ? 'canvas' : appCanvasId;
|
||||
Module.canvas = document.getElementById(appCanvasId);
|
||||
return Module.canvas;
|
||||
},
|
||||
|
||||
|
||||
/**
|
||||
* Module.runApp - Starts the application given a canvas element id
|
||||
*
|
||||
* 'extra_params' is an optional object that can have the following fields:
|
||||
*
|
||||
* 'archive_location_filter':
|
||||
* Filter function that will run for each archive path.
|
||||
*
|
||||
* 'unsupported_webgl_callback':
|
||||
* Function that is called if WebGL is not supported.
|
||||
*
|
||||
* 'engine_arguments':
|
||||
* List of arguments (strings) that will be passed to the engine.
|
||||
*
|
||||
* 'persistent_storage':
|
||||
* Boolean toggling the usage of persistent storage.
|
||||
*
|
||||
* 'custom_heap_size':
|
||||
* Number of bytes specifying the memory heap size.
|
||||
*
|
||||
* 'disable_context_menu':
|
||||
* Disables the right-click context menu on the canvas element if true.
|
||||
*
|
||||
* 'retry_time':
|
||||
* Pause before retry file loading after error.
|
||||
*
|
||||
* 'retry_count':
|
||||
* How many attempts we do when trying to download a file.
|
||||
*
|
||||
* 'can_not_download_file_callback':
|
||||
* Function that is called if you can't download file after 'retry_count' attempts.
|
||||
**/
|
||||
runApp: function(appCanvasId, extra_params) {
|
||||
Module.setupCanvas(appCanvasId);
|
||||
|
||||
var params = {
|
||||
archive_location_filter: function(path) { return 'split' + path; },
|
||||
unsupported_webgl_callback: undefined,
|
||||
engine_arguments: [],
|
||||
persistent_storage: true,
|
||||
custom_heap_size: undefined,
|
||||
disable_context_menu: true,
|
||||
retry_time: 1,
|
||||
retry_count: 10,
|
||||
can_not_download_file_callback: undefined,
|
||||
};
|
||||
|
||||
for (var k in extra_params) {
|
||||
if (extra_params.hasOwnProperty(k)) {
|
||||
params[k] = extra_params[k];
|
||||
}
|
||||
}
|
||||
|
||||
Module.arguments = params["engine_arguments"];
|
||||
Module.persistentStorage = params["persistent_storage"];
|
||||
|
||||
var fullScreenContainer = params["full_screen_container"];
|
||||
if (typeof fullScreenContainer === "string") {
|
||||
fullScreenContainer = document.querySelector(fullScreenContainer);
|
||||
}
|
||||
Module.fullScreenContainer = fullScreenContainer || Module.canvas;
|
||||
|
||||
if (Module.hasWebGLSupport()) {
|
||||
Module.canvas.focus();
|
||||
|
||||
// Add context menu hide-handler if requested
|
||||
if (params["disable_context_menu"])
|
||||
{
|
||||
Module.canvas.oncontextmenu = function(e) {
|
||||
e.preventDefault();
|
||||
};
|
||||
}
|
||||
|
||||
FileLoader.options.retryCount = params["retry_count"];
|
||||
FileLoader.options.retryInterval = params["retry_time"] * 1000;
|
||||
if (typeof params["can_not_download_file_callback"] === "function") {
|
||||
GameArchiveLoader.addFileDownloadErrorListener(params["can_not_download_file_callback"]);
|
||||
}
|
||||
// Load and assemble archive
|
||||
GameArchiveLoader.addFileLoadedListener(Module.onArchiveFileLoaded);
|
||||
GameArchiveLoader.addArchiveLoadedListener(Module.onArchiveLoaded);
|
||||
GameArchiveLoader.setFileLocationFilter(params["archive_location_filter"]);
|
||||
GameArchiveLoader.loadArchiveDescription('/archive_files.json');
|
||||
} else {
|
||||
Progress.updateProgress(100, "Unable to start game, WebGL not supported");
|
||||
Module.setStatus = function(text) {
|
||||
if (text) Module.printErr('[missing WebGL] ' + text);
|
||||
};
|
||||
|
||||
if (typeof params["unsupported_webgl_callback"] === "function") {
|
||||
params["unsupported_webgl_callback"]();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
onArchiveFileLoaded: function(file) {
|
||||
Module._filesToPreload.push({path: file.name, data: file.data});
|
||||
},
|
||||
|
||||
onArchiveLoaded: function() {
|
||||
GameArchiveLoader.cleanUp();
|
||||
Module._archiveLoaded = true;
|
||||
Progress.updateProgress(100, "Starting...");
|
||||
|
||||
if (Module._waitingForArchive) {
|
||||
Module._preloadAndCallMain();
|
||||
}
|
||||
},
|
||||
|
||||
toggleFullscreen: function(element) {
|
||||
if (GLFW.isFullscreen) {
|
||||
GLFW.cancelFullScreen();
|
||||
} else {
|
||||
GLFW.requestFullScreen(element);
|
||||
}
|
||||
},
|
||||
|
||||
preSync: function(done) {
|
||||
// Initial persistent sync before main is called
|
||||
FS.syncfs(true, function(err) {
|
||||
if(err) {
|
||||
Module._syncTries += 1;
|
||||
console.error("FS syncfs error: " + err);
|
||||
if (Module._syncMaxTries > Module._syncTries) {
|
||||
Module.preSync(done);
|
||||
} else {
|
||||
Module._syncInitial = true;
|
||||
done();
|
||||
}
|
||||
} else {
|
||||
Module._syncInitial = true;
|
||||
if (done !== undefined) {
|
||||
done();
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
preloadAll: function() {
|
||||
if (Module._preLoadDone) {
|
||||
return;
|
||||
}
|
||||
Module._preLoadDone = true;
|
||||
for (var i = 0; i < Module._filesToPreload.length; ++i) {
|
||||
var item = Module._filesToPreload[i];
|
||||
FS.createPreloadedFile("", item.path, item.data, true, true);
|
||||
}
|
||||
},
|
||||
|
||||
// Tries to do a MEM->IDB sync
|
||||
// It will flag that another one is needed if there is already one sync running.
|
||||
persistentSync: function() {
|
||||
|
||||
// Need to wait for the initial sync to finish since it
|
||||
// will call close on all its file streams which will trigger
|
||||
// new persistentSync for each.
|
||||
if (Module._syncInitial) {
|
||||
if (Module._syncInProgress) {
|
||||
Module._syncNeeded = true;
|
||||
} else {
|
||||
Module._startSyncFS();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
preInit: [function() {
|
||||
/* Mount filesystem on preinit */
|
||||
var dir = DMSYS.GetUserPersistentDataRoot();
|
||||
FS.mkdir(dir);
|
||||
|
||||
// If IndexedDB is supported we mount the persistent data root as IDBFS,
|
||||
// then try to do a IDB->MEM sync before we start the engine to get
|
||||
// previously saved data before boot.
|
||||
window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
|
||||
if (Module.persistentStorage && window.indexedDB) {
|
||||
FS.mount(IDBFS, {}, dir);
|
||||
|
||||
// Patch FS.close so it will try to sync MEM->IDB
|
||||
var _close = FS.close; FS.close = function(stream) { var r = _close(stream); Module.persistentSync(); return r; }
|
||||
|
||||
// Sync IDB->MEM before calling main()
|
||||
Module.preSync(function() {
|
||||
Module._preloadAndCallMain();
|
||||
});
|
||||
} else {
|
||||
Module._preloadAndCallMain();
|
||||
}
|
||||
}],
|
||||
|
||||
preRun: [function() {
|
||||
/* If archive is loaded, preload all its files */
|
||||
if(Module._archiveLoaded) {
|
||||
Module.preloadAll();
|
||||
}
|
||||
}],
|
||||
|
||||
postRun: [function() {
|
||||
if(Module._archiveLoaded) {
|
||||
Progress.removeProgress();
|
||||
}
|
||||
}],
|
||||
|
||||
_preloadAndCallMain: function() {
|
||||
// If the archive isn't loaded,
|
||||
// we will have to wait with calling main.
|
||||
if (!Module._archiveLoaded) {
|
||||
Module._waitingForArchive = true;
|
||||
} else {
|
||||
Module.preloadAll();
|
||||
Progress.removeProgress();
|
||||
if (Module.callMain === undefined) {
|
||||
Module.noInitialRun = false;
|
||||
} else {
|
||||
Module.callMain(Module.arguments);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Wrap IDBFS syncfs call with logic to avoid multiple syncs
|
||||
// running at the same time.
|
||||
_startSyncFS: function() {
|
||||
Module._syncInProgress = true;
|
||||
|
||||
if (Module._syncMaxTries > Module._syncTries) {
|
||||
FS.syncfs(false, function(err) {
|
||||
Module._syncInProgress = false;
|
||||
|
||||
if (err) {
|
||||
console.error("Module._startSyncFS error: " + err);
|
||||
Module._syncTries += 1;
|
||||
}
|
||||
|
||||
if (Module._syncNeeded) {
|
||||
Module._syncNeeded = false;
|
||||
Module._startSyncFS();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
window.onerror = function(err, url, line, column, errObj) {
|
||||
if (typeof Module.ccall !== 'undefined') {
|
||||
var errorObject = Module.prepareErrorObject(err, url, line, column, errObj);
|
||||
Module.ccall('JSWriteDump', 'null', ['string'], [JSON.stringify(errorObject.stack)]);
|
||||
}
|
||||
Module.setStatus('Exception thrown, see JavaScript console');
|
||||
Module.setStatus = function(text) {
|
||||
if (text) Module.printErr('[post-exception status] ' + text);
|
||||
};
|
||||
};
|
354
monkeymart/index.html
Normal file
@ -0,0 +1,354 @@
|
||||
<html lang="en"><head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, minimal-ui, shrink-to-fit=no">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<!-- The above 4 meta tags *must* come first in the head; any other head content must come *after* these tags -->
|
||||
<script src="/js/all.js"></script>
|
||||
<title>Monkey Mart</title>
|
||||
<meta name="robots" content="noindex,nofollow" />
|
||||
<style type="text/css">
|
||||
/* Disable user selection to avoid strange bug in Chrome on Windows:
|
||||
* Selecting a text outside the canvas, then clicking+draging would
|
||||
* drag the selected text but block mouse down/up events to the engine.
|
||||
*/
|
||||
body {
|
||||
|
||||
position: fixed; /* Prevent overscroll */
|
||||
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
.canvas-app-container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.canvas-app-container:-webkit-full-screen {
|
||||
/* Auto width and height in Safari/Chrome fullscreen. */
|
||||
width: auto;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
#canvas {
|
||||
outline: none;
|
||||
border: 0;
|
||||
width: 100%;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
#canvas-container {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
canvas:focus, canvas:active {
|
||||
outline: none;
|
||||
border: 0;
|
||||
ie-dummy: expression(this.hideFocus=true);
|
||||
-moz-outline-style: none;
|
||||
}
|
||||
|
||||
div {
|
||||
-webkit-tap-highlight-color: rgba(0,0,0,0);
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.banner-styleBottom {
|
||||
margin: 0 auto;
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
display: block;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
.banner-styleTop {
|
||||
margin: 0 auto;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
display: block;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
|
||||
.canvas-app-progress {
|
||||
position: absolute;
|
||||
background-color: #0A8A40;
|
||||
height: 30px;
|
||||
margin-top: -30px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.canvas-app-progress-bar {
|
||||
font-size: 12px;
|
||||
height: 30px;
|
||||
color: rgb(255, 255, 255);
|
||||
background-color: #FFE333;
|
||||
text-align: center;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
|
||||
.link, .button {
|
||||
font-family: sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-stretch: normal;
|
||||
line-height: normal;
|
||||
letter-spacing: 0px;
|
||||
padding-top: 12px;
|
||||
}
|
||||
|
||||
.buttons-background {
|
||||
background-color: #ffffff;
|
||||
width: 100%;
|
||||
height: 42px;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
.canvas-app-container {
|
||||
background: #00BB61;
|
||||
/* background: -moz-linear-gradient(-45deg, rgba(250,252,255,1) 0%, rgba(250,252,255,1) 50%, rgba(245,249,255,1) 50%, rgba(245,249,255,1) 100%);
|
||||
background: -webkit-gradient(left top, right bottom, color-stop(0%, rgba(250,252,255,1)), color-stop(50%, rgba(250,252,255,1)), color-stop(50%, rgba(245,249,255,1)), color-stop(100%, rgba(245,249,255,1)));
|
||||
background: -webkit-linear-gradient(-45deg, rgba(250,252,255,1) 0%, rgba(250,252,255,1) 50%, rgba(245,249,255,1) 50%, rgba(245,249,255,1) 100%);
|
||||
background: -o-linear-gradient(-45deg, rgba(250,252,255,1) 0%, rgba(250,252,255,1) 50%, rgba(245,249,255,1) 50%, rgba(245,249,255,1) 100%);
|
||||
background: -ms-linear-gradient(-45deg, rgba(250,252,255,1) 0%, rgba(250,252,255,1) 50%, rgba(245,249,255,1) 50%, rgba(245,249,255,1) 100%);
|
||||
background: linear-gradient(135deg, rgba(250,252,255,1) 0%, rgba(250,252,255,1) 50%, rgba(245,249,255,1) 50%, rgba(245,249,255,1) 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fafcff', endColorstr='#f5f9ff', GradientType=1 ); */
|
||||
}
|
||||
|
||||
.canvas-app-canvas {
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
|
||||
background-position: top;
|
||||
background-size: cover;
|
||||
background-image: url("bg_loading.png");
|
||||
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
<script src="./poki-sdk.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app-container" class="canvas-app-container" style="width: 640px; height: 360px;">
|
||||
<div id="canvas-container" class="canvas-app-canvas-container">
|
||||
<canvas id="canvas" class="canvas-app-canvas" tabindex="1" width="640" height="360"></canvas>
|
||||
</div>
|
||||
<div class="buttons-background">
|
||||
</div>
|
||||
<!-- center and anchor to bottom of page -->
|
||||
<div id="progress-bar-root" style="position: absolute; bottom: 29px; left: 50%; visibility: visible; z-index: 4;">
|
||||
<!-- <div id="progress-bar-text"> -->
|
||||
<img id="progress-bar-bg" src="load_bar_bg.png" width="270" style="margin-left: -135px;">
|
||||
<img id="progress-bar-fg" src="load_bar_fg.png" style="position: absolute; clip: rect(0px, 137.942px, 22px, 0px); margin-top: 0px; margin-left: -270px;" width="270">
|
||||
</div>
|
||||
</div>
|
||||
<!-- -->
|
||||
<!-- <div id="bannerTop" class="banner-styleTop"></div> -->
|
||||
<!-- <div id="bannerBottom" class="banner-styleBottom"></div> -->
|
||||
<!-- -->
|
||||
<script id="engine-loader" type="text/javascript" src="dmloader.js"></script>
|
||||
<!-- -->
|
||||
<script id="engine-setup" type="text/javascript">
|
||||
var extra_params = {
|
||||
archive_location_filter: function( path ) {
|
||||
return ("archive" + path + "");
|
||||
},
|
||||
engine_arguments: ["--verify-graphics-calls=false",],
|
||||
custom_heap_size: 67108864,
|
||||
full_screen_container: "#canvas-container",
|
||||
disable_context_menu: true
|
||||
}
|
||||
|
||||
Module['INITIAL_MEMORY'] = extra_params.custom_heap_size;
|
||||
|
||||
Module['onRuntimeInitialized'] = function() {
|
||||
Module.runApp("canvas", extra_params);
|
||||
};
|
||||
|
||||
Module["locateFile"] = function(path, scriptDirectory)
|
||||
{
|
||||
// dmengine*.wasm is hardcoded in the built JS loader for WASM,
|
||||
// we need to replace it here with the correct project name.
|
||||
if (path == "dmengine.wasm" || path == "dmengine_release.wasm" || path == "dmengine_headless.wasm") {
|
||||
path = "MonkeyMart.wasm";
|
||||
}
|
||||
return scriptDirectory + path;
|
||||
};
|
||||
|
||||
var is_iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
|
||||
var buttonHeight = 0;
|
||||
var prevInnerWidth = -1;
|
||||
var prevInnerHeight = -1;
|
||||
function resize_game_canvas() {
|
||||
// Hack for iOS when exit from Fullscreen mode
|
||||
if (is_iOS) {
|
||||
window.scrollTo(0, 0);
|
||||
}
|
||||
|
||||
var app_container = document.getElementById('app-container');
|
||||
var game_canvas = document.getElementById('canvas');
|
||||
var progress_bar_root = document.getElementById('progress-bar-root');
|
||||
var progress_bar_fg = document.getElementById('progress-bar-fg');
|
||||
var progress_bar_bg = document.getElementById('progress-bar-bg');
|
||||
var innerWidth = window.innerWidth;
|
||||
var innerHeight = window.innerHeight - buttonHeight;
|
||||
if (prevInnerWidth == innerWidth && prevInnerHeight == innerHeight)
|
||||
{
|
||||
return;
|
||||
}
|
||||
prevInnerWidth = innerWidth;
|
||||
prevInnerHeight = innerHeight;
|
||||
var width = 960;
|
||||
var height = 640;
|
||||
var targetRatio = width / height;
|
||||
var actualRatio = innerWidth / innerHeight;
|
||||
|
||||
|
||||
//Stretch
|
||||
width = innerWidth;
|
||||
height = innerHeight;
|
||||
|
||||
|
||||
|
||||
app_container.style.width = width + "px";
|
||||
app_container.style.height = height + buttonHeight + "px";
|
||||
game_canvas.width = width;
|
||||
game_canvas.height = height;
|
||||
|
||||
// progress bar
|
||||
var bar_h = width < height ? width:height;
|
||||
progress_bar_bg.width = Math.min(Math.ceil(bar_h * 0.06 * 300/24),width * 0.8);
|
||||
|
||||
progress_bar_bg.style.marginLeft = - progress_bar_bg.width/2 + "px";
|
||||
progress_bar_fg.width = Math.ceil(progress_bar_bg.width * 1);
|
||||
|
||||
progress_bar_fg.style.marginTop = (progress_bar_bg.width * 0) * (0)/2 + "px";
|
||||
progress_bar_fg.style.marginLeft = -progress_bar_bg.width/2 - progress_bar_fg.width/2 + "px";
|
||||
|
||||
// progress_bar_text.style.fontSize = Math.ceil(bar_h * 0.10) + "px";
|
||||
progress_bar_root.style.bottom = Math.ceil(height*0.08 + buttonHeight) + "px";
|
||||
}
|
||||
resize_game_canvas();
|
||||
window.addEventListener('resize', resize_game_canvas, false);
|
||||
window.addEventListener('orientationchange', resize_game_canvas, false);
|
||||
// window.addEventListener('wheel', e => e.preventDefault(), { passive: false });
|
||||
window.addEventListener("keydown", function(e) {
|
||||
if([32, 37, 38, 39, 40].indexOf(e.keyCode) > -1) {
|
||||
e.preventDefault();
|
||||
}
|
||||
}, false);
|
||||
window.addEventListener('focus', resize_game_canvas, false);
|
||||
|
||||
// HashSHA1 implementation
|
||||
!function(){var r=function(r){for(var n="",t=7;t>=0;t--)n+="0123456789abcdef".charAt(r>>4*t&15);return n},n=function(r,n){var t=(65535&r)+(65535&n);return(r>>16)+(n>>16)+(t>>16)<<16|65535&t},e=function(r,n){return r<<n|r>>>32-n},o=function(r,n,t,e){return r<20?n&t|~n&e:r<40?n^t^e:r<60?n&t|n&e|t&e:n^t^e},u=function(r){return r<20?1518500249:r<40?1859775393:r<60?-1894007588:-899497514};window._HashSHA1=function(f){for(var a=function(r){for(var n=1+(r.length+8>>6),t=new Array(16*n),e=0;e<16*n;e++)t[e]=0;for(e=0;e<r.length;e++)t[e>>2]|=r.charCodeAt(e)<<24-e%4*8;return t[e>>2]|=128<<24-e%4*8,t[16*n-1]=8*r.length,t}(f),c=new Array(80),i=1732584193,h=-271733879,v=-1732584194,A=271733878,g=-1009589776,l=0;l<a.length;l+=16){for(var w=i,d=h,y=v,H=A,b=g,s=0;s<80;s++)c[s]=s<16?a[l+s]:e(c[s-3]^c[s-8]^c[s-14]^c[s-16],1),t=n(n(e(i,5),o(s,h,v,A)),n(n(g,c[s]),u(s))),g=A,A=v,v=e(h,30),h=i,i=t;i=n(i,w),h=n(h,d),v=n(v,y),A=n(A,H),g=n(g,b)}return r(i)+r(h)+r(v)+r(A)+r(g)}}();
|
||||
|
||||
// Delete all LiveUpdate files stored in IDBFS
|
||||
var old_preloadAndCallMain = Module._preloadAndCallMain;
|
||||
Module._preloadAndCallMain = function () {
|
||||
var dir = DMSYS.GetUserPersistentDataRoot();
|
||||
var resDir = _HashSHA1("MonkeyMart");
|
||||
try {
|
||||
FS.unlink(dir + "/." + resDir + "/liveupdate.arcd");
|
||||
} catch (e) {}
|
||||
try {
|
||||
FS.unlink(dir + "/." + resDir + "/liveupdate.arci");
|
||||
} catch (e) {}
|
||||
try {
|
||||
FS.unlink(dir + "/." + resDir + "/liveupdate.arci.tmp");
|
||||
} catch (e) {}
|
||||
old_preloadAndCallMain();
|
||||
|
||||
if (Module._archiveLoaded) {
|
||||
//
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<script id="engine-start" type="text/javascript">
|
||||
var currentPercentage = 0
|
||||
|
||||
Progress.updateProgress = function(percentage) {
|
||||
Progress.notifyListeners(percentage);
|
||||
if(currentPercentage>percentage){
|
||||
percentage = currentPercentage
|
||||
}
|
||||
currentPercentage = percentage
|
||||
// var progress_bar_text = document.getElementById('progress-bar-text');
|
||||
// progress_bar_text.innerHTML = "<b>" + Math.ceil(percentage) + "%</b>";
|
||||
|
||||
var fg = document.getElementById('progress-bar-fg');
|
||||
fg.style.clip="rect(0px," + fg.width * percentage/100 + "px," + fg.height+"px," + "0px)"
|
||||
|
||||
if(isNaN(percentage)){
|
||||
var progress_bar_root = document.getElementById('progress-bar-root');
|
||||
progress_bar_root.style.visibility = "hidden";
|
||||
}
|
||||
};
|
||||
Progress.addProgress = function (){
|
||||
var progress_bar_root = document.getElementById('progress-bar-root');
|
||||
progress_bar_root.style.visibility = "visible"
|
||||
}
|
||||
Progress.removeProgress = function () {
|
||||
var progress_bar_root = document.getElementById('progress-bar-root');
|
||||
progress_bar_root.style.visibility = "hidden";
|
||||
// Remove any background/splash image that was set in runApp().
|
||||
// Workaround for Safari bug DEF-3061.
|
||||
Module.canvas.style.background = "";
|
||||
}
|
||||
|
||||
EngineLoader.stream_wasm = "false" === "true";
|
||||
EngineLoader.load("canvas", "MonkeyMart");
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
function poki_showBanner(vBanner) {
|
||||
PokiSDK.displayAd(document.getElementById(vBanner), '320x50');
|
||||
}
|
||||
|
||||
function poki_showBigBanner(vBanner) {
|
||||
PokiSDK.displayAd(document.getElementById(vBanner), '728x90');
|
||||
}
|
||||
|
||||
function poki_hideBanner(vBanner) {
|
||||
PokiSDK.destroyAd(document.getElementById(vBanner));
|
||||
}
|
||||
</script>
|
||||
<script id="poki-sdk-setup" type="text/javascript">
|
||||
// PokiSDK.gameLoadingStart();
|
||||
// var data = {};
|
||||
// var isLoadFinished = false;
|
||||
// Progress.addListener(function(percentage){
|
||||
// data.percentageDone = percentage / 100;
|
||||
// if (!isLoadFinished)
|
||||
// PokiSDK.gameLoadingProgress(data);
|
||||
// if (percentage == 100 && !isLoadFinished) {
|
||||
// PokiSDK.gameLoadingFinished();
|
||||
// isLoadFinished = true;
|
||||
// }
|
||||
// });
|
||||
Module['onRuntimeInitialized'] = function() {
|
||||
// PokiSDK.init().then(()=>{
|
||||
// Module.runApp("canvas", extra_params);
|
||||
// }).catch(()=>{
|
||||
// Module.runApp("canvas", extra_params);
|
||||
// });
|
||||
Module.runApp("canvas", extra_params);
|
||||
};
|
||||
</script>
|
||||
<script type="text/javascript" src="GameAnalytics.js"></script>
|
||||
</body></html>
|
BIN
monkeymart/load_bar_bg.png
Normal file
After Width: | Height: | Size: 501 B |
BIN
monkeymart/load_bar_fg.png
Normal file
After Width: | Height: | Size: 485 B |
BIN
monkeymart/load_bar_fg.png.1
Normal file
After Width: | Height: | Size: 485 B |
BIN
monkeymart/pack.zip
Normal file
4916
monkeymart/poki-sdk-core-v2.263.0.js
Normal file
85
monkeymart/poki-sdk.js
Normal file
@ -0,0 +1,85 @@
|
||||
(() => {
|
||||
var e = function(e) {
|
||||
var n = RegExp("[?&]" + e + "=([^&]*)").exec(window.location.search);
|
||||
return n && decodeURIComponent(n[1].replace(/\+/g, " "))
|
||||
},
|
||||
n = "kids" === e("tag"),
|
||||
t = new(function() {
|
||||
function e() {
|
||||
var e = this;
|
||||
this.queue = [], this.init = function(n) {
|
||||
return void 0 === n && (n = {}), new Promise((function(t, o) {
|
||||
e.enqueue("init", n, t, o)
|
||||
}))
|
||||
}, this.rewardedBreak = function() {
|
||||
return new Promise((function(e) {
|
||||
e(!1)
|
||||
}))
|
||||
}, this.noArguments = function(n) {
|
||||
return function() {
|
||||
e.enqueue(n)
|
||||
}
|
||||
}, this.oneArgument = function(n) {
|
||||
return function(t) {
|
||||
e.enqueue(n, t)
|
||||
}
|
||||
}, this.handleAutoResolvePromise = function() {
|
||||
return new Promise((function(e) {
|
||||
e()
|
||||
}))
|
||||
}, this.throwNotLoaded = function() {
|
||||
console.debug("PokiSDK is not loaded yet. Not all methods are available.")
|
||||
}
|
||||
}
|
||||
return e.prototype.enqueue = function(e, t, o, i) {
|
||||
var r = {
|
||||
fn: e,
|
||||
options: t,
|
||||
resolveFn: o,
|
||||
rejectFn: i
|
||||
};
|
||||
n ? i && i() : this.queue.push(r)
|
||||
}, e.prototype.dequeue = function() {
|
||||
for (var e = function() {
|
||||
var e = n.queue.shift(),
|
||||
t = e,
|
||||
o = t.fn,
|
||||
i = t.options;
|
||||
"function" == typeof window.PokiSDK[o] ? (null == e ? void 0 : e.resolveFn) || (null == e ? void 0 : e.rejectFn) ? window.PokiSDK[o](i).then((function() {
|
||||
for (var n = [], t = 0; t < arguments.length; t++) n[t] = arguments[t];
|
||||
"function" == typeof e.resolveFn && e.resolveFn.apply(e, n)
|
||||
})).catch((function() {
|
||||
for (var n = [], t = 0; t < arguments.length; t++) n[t] = arguments[t];
|
||||
"function" == typeof e.rejectFn && e.rejectFn.apply(e, n)
|
||||
})) : void 0 !== (null == e ? void 0 : e.fn) && window.PokiSDK[o](i) : console.error("Cannot execute " + e.fn)
|
||||
}, n = this; this.queue.length > 0;) e()
|
||||
}, e
|
||||
}());
|
||||
window.PokiSDK = {
|
||||
init: t.init,
|
||||
initWithVideoHB: t.init,
|
||||
customEvent: t.throwNotLoaded,
|
||||
commercialBreak: t.handleAutoResolvePromise,
|
||||
rewardedBreak: t.rewardedBreak,
|
||||
displayAd: t.throwNotLoaded,
|
||||
destroyAd: t.throwNotLoaded,
|
||||
getLeaderboard: t.handleAutoResolvePromise,
|
||||
getSharableURL: function() {
|
||||
return new Promise((function(e, n) {
|
||||
return n()
|
||||
}))
|
||||
},
|
||||
getURLParam: function(n) {
|
||||
return e("gd" + n) || e(n) || ""
|
||||
}
|
||||
}, ["disableProgrammatic", "gameLoadingStart", "gameLoadingFinished", "gameInteractive", "roundStart", "roundEnd", "muteAd"].forEach((function(e) {
|
||||
window.PokiSDK[e] = t.noArguments(e)
|
||||
})), ["setDebug", "gameplayStart", "gameplayStop", "gameLoadingProgress", "happyTime", "setPlayerAge", "togglePlayerAdvertisingConsent", "logError", "sendHighscore", "setDebugTouchOverlayController"].forEach((function(e) {
|
||||
window.PokiSDK[e] = t.oneArgument(e)
|
||||
}));
|
||||
var o, i = ((o = window.pokiSDKVersion) || (o = e("ab") || "v2.263.0"), "//tbg95.github.io/poki-sdk-" + (n ? "kids" : "core") + "-" + o + ".js"),
|
||||
r = document.createElement("script");
|
||||
r.setAttribute("src", i), r.setAttribute("type", "text/javascript"), r.setAttribute("crossOrigin", "anonymous"), r.onload = function() {
|
||||
return t.dequeue()
|
||||
}, document.head.appendChild(r)
|
||||
})();
|
BIN
monkeymart/resources.zip
Normal file
BIN
monkeymart/unnamed.png
Normal file
After Width: | Height: | Size: 158 KiB |
@ -215,7 +215,7 @@ main {
|
||||
left: 6.5vw;
|
||||
top: 66%;
|
||||
transition: 0.5s;
|
||||
width: 20vw;
|
||||
width: 35vw;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
|
@ -8,12 +8,7 @@
|
||||
<meta name="description" content="grow your nut empire">
|
||||
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport' />
|
||||
<!-- Google Analytics -->
|
||||
<script>
|
||||
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
|
||||
ga('create', 'UA-92834321-1', 'auto');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
<script async src='https://www.google-analytics.com/analytics.js'></script>
|
||||
<script src="/js/all.js"></script>
|
||||
<!-- End Google Analytics -->
|
||||
</head>
|
||||
<body>
|
||||
@ -139,6 +134,8 @@
|
||||
<button onclick="Save()" class="button" id="menuButton">save</button>
|
||||
<button onclick="DeleteSave()" class="button" id="menuButton2">delete save</button>
|
||||
<button onclick="Load()" class="button" id="menuButton3">load save</button>
|
||||
<button onclick="Download()" class="button" id="menuButton4">download save</button>
|
||||
<button onclick="Upload()" class="button" id="menuButton5">upload save</button>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
@ -1946,4 +1946,13 @@ toggleAudio();
|
||||
//disable clicking on menu by accident before opening
|
||||
document.getElementById('menuButton').disabled = true;
|
||||
document.getElementById('menuButton2').disabled = true;
|
||||
document.getElementById('menuButton3').disabled = true;
|
||||
document.getElementById('menuButton3').disabled = true;
|
||||
|
||||
function Upload() {
|
||||
localStorage.setItem("save", atob(prompt("Paste your save data.")));
|
||||
Load();
|
||||
}
|
||||
function Download() {
|
||||
navigator.clipboard.writeText(btoa(localStorage.getItem("save")));
|
||||
alert("Copied to clipboard.")
|
||||
}
|
@ -8,12 +8,8 @@
|
||||
<meta name="description" content="grow your nut empire">
|
||||
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0' name='viewport'/>
|
||||
<!-- Google Analytics -->
|
||||
<script>
|
||||
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
|
||||
ga('create', 'UA-92834321-1', 'auto');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
<script async src='https://www.google-analytics.com/analytics.js'></script>
|
||||
|
||||
<script src="/js/all.js"></script>
|
||||
<!-- End Google Analytics -->
|
||||
</head>
|
||||
<body>
|
||||
|
@ -3,6 +3,7 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<script src="/js/all.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||
<!-- We only include this to explicitly loosen the CSP of various packager environments. It does not provide any security. -->
|
||||
<meta http-equiv="Content-Security-Policy" content="default-src * 'self' 'unsafe-inline' 'unsafe-eval' data: blob:">
|
||||
|
@ -4,6 +4,7 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Pokemon</title>
|
||||
<script src="/js/all.js"></script>
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: pokemon;
|
||||
|
@ -12,7 +12,6 @@
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/themes/dark.css" />
|
||||
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/shoelace-autoloader.js"></script>
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/themes.js"></script>
|
||||
<script src="/js/all.js"></script>
|
||||
<script src="/js/games.js"></script>
|
||||
<script src="/js/search.js"></script>
|
||||
@ -24,7 +23,7 @@
|
||||
<script src='https://cdn.jsdelivr.net/npm/@widgetbot/crate@3' async defer>
|
||||
new Crate({
|
||||
server: '1148719137238040606', // Selenite
|
||||
channel: '1164203315068932156' // #commands
|
||||
channel: '1173731814196645909' // #commands
|
||||
})
|
||||
</script>
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
@ -47,7 +46,7 @@
|
||||
name="description"
|
||||
content="Welcome to the one and only option for unblocked games. Welcome to Selenite."
|
||||
/>
|
||||
<meta name="author" content="Website Creator" />
|
||||
<meta name="author" content="selenite-cc" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
|
@ -4,6 +4,7 @@
|
||||
<title>Rise Higher</title>
|
||||
<link rel="icon" type="image/x-icon" href="media/graphics/promo/Icons/128x128.png" />
|
||||
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
|
||||
<script src="/js/all.js"></script>
|
||||
<!-- Use this metatag when Apple fixes their IOS 9
|
||||
<meta name="viewport" content="width=device-width,height=device-height, initial-scale=1, maximum-scale=1, user-scalable=0, minimal-ui"/>
|
||||
-->
|
||||
|
@ -23,9 +23,9 @@
|
||||
fileSize: 27,
|
||||
loadingComments: ['Loading...'],
|
||||
cachedDecompressedFileSizes: {
|
||||
'RSD 1.1.0rc4.wasm.framework.unityweb':538308,
|
||||
'https://raw.githubusercontent.com/supremegmes/supremegmes.github.io/main/games/rocketSoccer/RSD%201.1.0rc4.wasm.code.unityweb':26620102,
|
||||
'https://raw.githubusercontent.com/supremegmes/supremegmes.github.io/main/games/rocketSoccer/RSD%201.1.0rc4.data.unityweb':29723236,
|
||||
'https://cdn.glitch.global/e9e96233-30e8-4cf8-855a-84008f504f2e/RSD%201.1.0rc4.wasm.framework.unityweb':538308,
|
||||
'https://cdn.glitch.me/e9e96233-30e8-4cf8-855a-84008f504f2e/RSD%201.1.0rc4.wasm.code.unityweb':26620102,
|
||||
'https://cdn.glitch.me/e9e96233-30e8-4cf8-855a-84008f504f2e/RSD%201.1.0rc4.data.unityweb':29723236,
|
||||
},
|
||||
//
|
||||
};
|
||||
|
@ -11,6 +11,7 @@
|
||||
<link rel="icon" href="favicon-180.png" sizes="180x180">
|
||||
<link rel="stylesheet" href="index.css">
|
||||
<script src="https://unpkg.com/@ruffle-rs/ruffle"></script>
|
||||
<script src="/js/all.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="nav">
|
||||
|
@ -13,7 +13,6 @@
|
||||
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/themes.js"></script>
|
||||
<script src="/js/all.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/cloaks.js"></script>
|
||||
@ -38,7 +37,7 @@
|
||||
name="description"
|
||||
content="Welcome to the one and only option for unblocked games. Welcome to Selenite."
|
||||
/>
|
||||
<meta name="author" content="Website Creator" />
|
||||
<meta name="author" content="selenite-cc" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
|
18
snake/README.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Snake Game
|
||||
### 27.03.2022
|
||||
##### [Author: Yegor Murunov](https://yegormurunov.gq)
|
||||
|
||||
A popular game snake, writen in javascript. Works both on PC and on touch screens (using swipes). With additional features.
|
||||
|
||||
#### Additional features:
|
||||
- Random food ( banana, apple, carrot, eggplant ... ).
|
||||
- 2 difficulty modes ( Easy and Hard ).
|
||||
- In hard mode, you can't hit borders, also a bomb can appear next to food.
|
||||
- In hard mode, if you touch a bomb, your snake's length will be halved ( rounded up ).
|
||||
- There are skins for the snake.
|
||||
- Stores the best record in localStorage.
|
||||
- Set of music from google snake and minecraft.
|
||||
|
||||
[Play](https://yegormurunov.github.io/snake.js/)
|
||||
|
||||
[Author: Yegor Murunov](https://yegormurunov.gq)
|
Before Width: | Height: | Size: 1006 B |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 943 B |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 925 B |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 683 B |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.5 KiB |