6eHTkoShLXAdoNDHv88dLuAyHqtbSJVhaSGKExXVKJoj
Aug 16, 2026 20:16:30.709 +00:00
fs_store in contract mille-trille.testnetimport { CanvasFree } from "../Manage/CanvasClass.mjs";import { ActionButton } from "../Manage/ActionButtonClass.mjs";import { BlueCreatureFunction } from "./BlueCreatureRefactor.mjs";import { SceneItem } from "../Manage/SceneItemClass.mjs";import { unit } from "../Manage/GameManager.mjs";// BlueCreature face imagesexport const blueCreatureFaceImage = new Image();blueCreatureFaceImage.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BlueCreature/BlueCreatureExpressions/SourFace.png"export const blueCreatureFaceImage2 = new Image();blueCreatureFaceImage2.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BlueCreature/BlueCreatureExpressions/SeriousFace.png"export const blueCreature = new Image();blueCreature.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BlueCreature/BlueCreatureBlur.png";export const blueCreatureTurned = new Image();blueCreatureTurned.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BlueCreature/BlueCreatureTurned.png";export const bluecreatureleft = 380 + unit;export const bluecreaturetop = 310 + unit;export const bluecreaturewidth = (386 / 2) * unit;export const bluecreatureheight = (498 / 2) * unit;export const blueCreatureCanvas = new CanvasFree("bluecreaturecanvas", blueCreature, bluecreatureleft, bluecreaturetop, bluecreaturewidth, bluecreatureheight, "1");export const blueCreatureButton = new ActionButton("bluecreaturebutton", bluecreatureleft, bluecreaturetop, bluecreaturewidth, bluecreatureheight, BlueCreatureFunction, "5");export const blueCreatureFaceCanvas = new CanvasFree("bluecreaturefacecanvas", blueCreatureFaceImage, bluecreatureleft, 220, bluecreaturewidth, bluecreatureheight, "3");
fs_store in contract mille-trille.testnetimport {DisplayTextFunction,RemoveTextFunction,textBool,textBubbleString,} from "../Manage/TextBubbleScript.mjs";import { blueCreatureVoice } from "../Manage/SoundManager.mjs";import { MoveSomething, timeLap } from "../Animations/AnimationManager.mjs";import {CheckForItem,PickUpItem,UseItem,inventoryItems,selectedItem,} from "../Manage/InventoryScript.mjs";import {creep,goldenKey,items,letter,remoteControl,slingshot,toothImplant,} from "../Manage/ItemDatabaseScript.mjs";import {ObjectImage,CreateButton,CreateCanvasFree,unit,} from "../Manage/GameManager.mjs";import {blueCreatureFaceImage,blueCreatureFaceImage2,blueCreature,blueCreatureTurned,blueCreatureFaceCanvas,blueCreatureCanvas} from "./BlueCreatureNew.mjs";// Constantsconst BLUE_CREATURE_LEFT = 380;const BLUE_CREATURE_TOP = 310;const BLUE_CREATURE_WIDTH = 386 / 2;const BLUE_CREATURE_HEIGHT = 498 / 2;// Statelet blueCreatureDiscovered = false;export let blueCreatureUp = false;export let questionAsked = false;let presentation = false;let harveyIsDead = false;let spokenOnce = false;// Helper: delay using timeLap multiplierconst delay = (multiplier = 1) =>new Promise((resolve) => setTimeout(resolve, timeLap * multiplier));// Helper: animate face (optionally flipped)async function animateFace(flipped = false) {blueCreatureFaceCanvas.activateOnly();const canvas = document.getElementById("bluecreaturefacecanvas");// Apply flip transformation if neededif (flipped) {canvas.ctx.setTransform(1,0,0,1,0,0);canvas.ctx.translate(BLUE_CREATURE_WIDTH * unit, 0);canvas.ctx.scale(-1, 1);canvas.style.left = unit * 340 + "px";} else {canvas.style.left = unit * 380 + "px";}// Animation sequenceObjectImage(blueCreatureFaceImage2, canvas);await delay();ObjectImage(blueCreatureFaceImage, canvas);await delay();ObjectImage(blueCreatureFaceImage2, canvas);await delay();canvas.style.display = "none";blueCreatureFaceCanvas.deactivate();}// Helper: handle remoteControl giving logic (reduces duplication)async function handleRemoteControlPresentation() {if (harveyIsDead) {await DisplayTextFunction("He ssssaid his machine would rebuild mankind, but in a good a way.\nHe would probably want you to have thisss. He created it.");await animateFace();PickUpItem(remoteControl, true);} else {if (inventoryItems.includes(remoteControl.text)) {await DisplayTextFunction("Oh, you're Harvey's nephew. Haven't sssseen him in a while.\nGood chap, alwayssss ready to help. Sssure hope he'sss OK.");} else {await DisplayTextFunction("Oh, you're Harvey's nephew. Haven't sssseen him in a while.\nIf you find him, give him thissss. It's his, I found it down the sssstream.");}await animateFace();await animateFace(); // Note: two calls preserve original behaviorPickUpItem(remoteControl, true);}presentation = true;}// Exported functionsfunction ToggleBlueCreatureDiscovered() {blueCreatureDiscovered = !blueCreatureDiscovered;}export async function BlueCreatureFunction() {RemoveTextFunction();blueCreatureVoice.play();if (!blueCreatureDiscovered) {await FirstContact();} else if (!blueCreatureUp) {await ThatWasClose();} else if (!questionAsked) {await AsksQuestion();} else {await ShowItem();}}async function FirstContact() {await DisplayTextFunction("Are they sssstill around?");await delay(4);blueCreatureVoice.pause();blueCreatureDiscovered = true;}async function ThatWasClose() {await DisplayTextFunction("Damn, that wassss closssse.");const bluecreaturecanvas = document.getElementById("bluecreaturecanvas")animateFace(true); // flipped expression// Update creature position and imagebluecreaturecanvas.style.top = unit * 220 + "px";bluecreaturecanvas.style.left = unit * 340 + "px";ObjectImage(blueCreatureTurned, bluecreaturecanvas);await MoveSomething("bluecreaturebutton", 369, 220, 181, 150);await delay(4);blueCreatureVoice.pause();blueCreatureUp = true;}async function AsksQuestion() {CheckForItem();const bluecreaturecanvas = document.getElementById("bluecreaturecanvas")// If player didn't select the letter, ask the questionif (selectedItem !== letter.text) {animateFace();await DisplayTextFunction("Who are you, anywaysss?");bluecreaturecanvas.style.left = unit * 380 + "px";ObjectImage(blueCreature, bluecreaturecanvas);await MoveSomething("bluecreaturebutton", 369, 230, 181, 150);await delay(4);blueCreatureVoice.pause();questionAsked = true;return;}// Player selected the letter – proceed with presentation logicbluecreaturecanvas.style.left = unit * 380 + "px";ObjectImage(blueCreature, bluecreaturecanvas);await MoveSomething("bluecreaturebutton", 369, 230, 181, 150);if (!presentation) {await handleRemoteControlPresentation();}// Note: original code also set questionAsked = true regardless of presentationquestionAsked = true;}async function ShowItem() {CheckForItem();// Handle based on selected itemif (selectedItem === letter.text) {UseItem(letter);if (!presentation) {await handleRemoteControlPresentation();} else {if (harveyIsDead) {await DisplayTextFunction("Go and avenge him.");} else {await DisplayTextFunction("Tell him I ssssaid hello.");}await animateFace();animateFace();await delay(4);blueCreatureVoice.pause();}} else if (selectedItem === toothImplant.text) {UseItem(toothImplant);if (!harveyIsDead) {await DisplayTextFunction("Dead, isss he? Damn, thisss isss going the wrong way.");harveyIsDead = true;await animateFace();await delay(6);} else {await DisplayTextFunction("Ssso sssad, ssso sssad...");await animateFace();await delay(4);}blueCreatureVoice.pause();} else if (selectedItem === creep.text) {UseItem(creep);await DisplayTextFunction("Hey, isssn't it little Mr. Cringy! Happy you are well!");await animateFace();await delay(6);blueCreatureVoice.pause();} else if (selectedItem === remoteControl.text) {UseItem(remoteControl);await DisplayTextFunction("It's one of Harvey'ss thingsss. It... makesss ssstuff happen.");await animateFace();animateFace();await delay(6);blueCreatureVoice.pause();} else if (selectedItem === false) {// No item selectedif (!presentation) {await DisplayTextFunction("Who are you, anywaysss?");} else {await DisplayTextFunction("It'sss dangerousss around here.");}await animateFace();await delay(4);blueCreatureVoice.pause();} else {// Some other itemconst item = items.find((item) => item.text === selectedItem);if (item) UseItem(item);await DisplayTextFunction("What'sss you got there?");await animateFace();await delay(4);blueCreatureVoice.pause();}}// Face expression functions (kept for backward compatibility, but now use the helper)export async function BlueCreatureFaceExpressions() {await animateFace(false);}export async function BlueCreatureFaceExpressionsFlipped() {await animateFace(true);}
fs_store in contract mille-trille.testnetimport { CreateCanvas, ObjectImage } from "../Manage/GameManager.mjs";import { AnimationLoopStopOnLastImage, timeLap } from "./AnimationManager.mjs";import { busWreckImage } from "../Manage/ImageDatabase.mjs";import { crowbar, rustyShovel, slingshot } from "../Manage/ItemDatabaseScript.mjs";import { CheckForItem, selectedItem } from "../Manage/InventoryScript.mjs";import { DisplayTextFunction, RemoveTextFunction, removetextbutton } from "../Manage/TextBubbleScript.mjs";import { backgroundVar } from "../Manage/Background.mjs";import { busWreck, thisCurrentPlace } from "../Manage/PlaceClass.mjs";import { ActionButton } from "../Manage/ActionButtonClass.mjs";import { Canvas } from "../Manage/CanvasClass.mjs";import { blueCreatureCanvas } from "./BlueCreatureNew.mjs";//Animation imagesexport const roofMonsterImage = new Image();roofMonsterImage.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/BusRoofMonster.png"const roofMonsterImage1 = new Image();roofMonsterImage1.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/BusRoofMonster1.png";const roofMonsterImage2 = new Image();roofMonsterImage2.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/BusRoofMonster2.png";const roofMonsterImage3 = new Image();roofMonsterImage3.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/BusRoofMonster3.png";const roofMonsterImage4 = new Image();roofMonsterImage4.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/BusRoofMonster4.png";export const roofMonsterImage5 = new Image();roofMonsterImage5.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/BusRoofMonster5.png";export const emptySprite = new Image();emptySprite.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/EmptySprite.png"const closeMonsterStruckImage = new Image();closeMonsterStruckImage.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/BusRoofMonsterStruck.png"const roofMonsterStruckImage = new Image();roofMonsterStruckImage.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/RoofMonsterStruck.png"const roofMonsterFlyingImage = new Image();roofMonsterFlyingImage.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/RoofMonsterFlying.png'const roofMonsterDeadImage = new Image();roofMonsterDeadImage.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/RoofMonsterDead.png'const roofMonsterDeadFalling = new Image();roofMonsterDeadFalling.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/RoofMonsterDeadFalling.png"const roofMonsterDeadFalling1 = new Image();roofMonsterDeadFalling1.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/RoofMonsterDeadFalling1.png"const roofMonsterFallingBehindBus = new Image();roofMonsterFallingBehindBus.src = "https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/BusRoofAnimation/MonsterFallingBehindBus.png"const busRoofMonsters = [roofMonsterImage4, emptySprite, roofMonsterImage4, emptySprite, emptySprite, roofMonsterImage3, roofMonsterImage2, roofMonsterImage1, roofMonsterImage]//Canvascreationconst roofMonsterButton = new ActionButton("roofmonsterbutton", 500, 160, 141, 69, KillRoofMonster);const roofMonsterCanvas = new Canvas("roofmonstercanvas", roofMonsterImage4, "1")function RoofMonsterButton() {roofMonsterButton.activate();}function RoofMonsterCanvas() {roofMonsterCanvas.activate();}export const closemonstercanvas = CreateCanvas("closemonstercanvas");export const flyingmonstercanvas = CreateCanvas("flyingmonstercanvas");//Boolsexport let roofMonsterDead = false;let animationRunning = false;let monsterComing = false;let monsterWillAttack = false;let monsterIsComingNow = false;export let dontRemoveText = false;export function ToggleMonsterIsComingNow() {if (!monsterIsComingNow) {monsterIsComingNow = true;} else {monsterIsComingNow = false;}}function KillRoofMonster() {CheckForItem();if (selectedItem == slingshot.text){ StrikeMonster(threeStrikes) }};async function KillMonster() {monsterComing = false;roofMonsterDead = true;monsterWillAttack = false;dontRemoveText = false;RemoveTextFunction();}export async function StrikeMonster(array) {if (array.length > 0) {let roofmonstercanvas = document.getElementById("roofmonstercanvas")array.shift();await new Promise(resolve => setTimeout(resolve, timeLap / 2));ObjectImage(roofMonsterStruckImage, roofmonstercanvas);await new Promise(resolve => setTimeout(resolve, timeLap / 2));ObjectImage(roofMonsterImage, roofmonstercanvas);}else {KillMonster()}}export async function BusRoofAnimation() {animationRunning = true;roofMonsterCanvas.activateOnly();// busWreck.canvas.push(RoofMonsterCanvas);let roofmonstercanvas = document.getElementById("roofmonstercanvas")await AnimationLoopStopOnLastImage(busWreckImage, busRoofMonsters, roofmonstercanvas);}function MonsterAttacks() {// if (!monsterPassedBy) {dontRemoveText = falseRemoveTextFunction();roofMonsterButton.deactivate();busWreck.buttons = busWreck.buttons.filter((item) => item !== RoofMonsterButton);roofMonsterCanvas.deactivate();busWreck.canvas = busWreck.canvas.filter((item) => item !== RoofMonsterCanvas);ObjectImage(roofMonsterFlyingImage, flyingmonstercanvas);flyingmonstercanvas.style.zIndex = "5";//blueCreatureCanvas.deactivate();thisCurrentPlace.navegationButtons = null;thisCurrentPlace.buttons = null;}//}async function MonsterWins() {ObjectImage(roofMonsterImage5, closemonstercanvas);closemonstercanvas.style.zIndex = "10";flyingmonstercanvas.style.display = "none";await new Promise(resolve => setTimeout(resolve, timeLap * 3));closemonstercanvas.style.display = "block";location.reload();}export async function DeathByRoofMonster() {MonsterAttacks();await new Promise(resolve => setTimeout(resolve, timeLap));MonsterWins();}//Monster dies before it attacksasync function RoofMonsterDies() {if (backgroundVar == busWreckImage) {let roofmonstercanvas = document.getElementById("roofmonstercanvas");if (roofmonstercanvas != null) {ObjectImage(roofMonsterFallingBehindBus, roofmonstercanvas)}roofMonsterButton.deactivate();busWreck.buttons = busWreck.buttons.filter((item) => item !== RoofMonsterButton);}await new Promise(resolve => setTimeout(resolve, timeLap / 2));roofMonsterCanvas.deactivate();busWreck.canvas = busWreck.canvas.filter((item) => item !== RoofMonsterCanvas)await new Promise(resolve => setTimeout(resolve, timeLap * 3));}//Start the roofmonstersequenceexport async function SetTimeRoofMonster() {closemonstercanvas.style.zIndex = "3";if (!roofMonsterDead) {if (!monsterComing) { if (!monsterPassedBy) {monsterComing = true;await new Promise(resolve => setTimeout(resolve, timeLap * 3));//Animation startsif (monsterComing) {if (!animationRunning) {BusRoofAnimation();DisplayTextFunction("Something's coming!");dontRemoveText = truemonsterWillAttack = true;}//Monster climbs up and stops on the roofif (monsterComing) {await new Promise(resolve => setTimeout(resolve, timeLap * 8));roofMonsterButton.activateOnly();busWreck.buttons.push(RoofMonsterButton);let roofmonsterbutton = document.getElementById("roofmonsterbutton");roofmonsterbutton.style.zIndex = "7";await new Promise(resolve => setTimeout(resolve, timeLap * 4));//Monster attacksanimationRunning = false;if (monsterWillAttack) {MonsterAttacks()await new Promise(resolve => setTimeout(resolve, timeLap));MonsterWins();} else {RoofMonsterDies()}}}} else {monsterPassedBy = false;}} }}export let monsterPassedBy = false;export function switchMonsterPassedBy() {if (monsterPassedBy) {monsterPassedBy = false;}}export async function DeactivateRoofMonster() {monsterComing = false;monsterWillAttack = false;monsterIsComingNow = false;animationRunning = false;monsterPassedBy = true;roofMonsterCanvas.deactivate();busWreck.canvas = busWreck.canvas.filter((item) => item !== RoofMonsterCanvas);roofMonsterButton.deactivate();busWreck.buttons = busWreck.buttons.filter((item) => item !== RoofMonsterButton);dontRemoveText = false;RemoveTextFunction();}export function RoofMonsterRevive() {animationRunning = false;monsterComing = false;roofMonsterDead = false;if (threeStrikes.length == 0) {StrikeArrayNumber(threeStrikes, 3)}}export let threeStrikes = [];export function StrikeArrayNumber(array, number) {for (let i = 0; i < number; i++) {array.push(i);}}StrikeArrayNumber(threeStrikes, 3)export function MonsterIsComing() {if (animationRunning) {// if (thisCurrentPlace !== busWreck)DisplayTextFunction("Something's coming!")}}export function BusWreckMonster() {SetTimeRoofMonster()}export function EnterBusPlaceMonsterFunction() {if (animationRunning) {let roofmonstercanvas = document.getElementById("roofmonstercanvas");roofmonstercanvas.style.display = "block";roofmonstercanvas.style.zIndex = "1";}}export function ExitBusPlaceMonsterFunction() {if (animationRunning) {let roofmonstercanvas = document.getElementById("roofmonstercanvas");roofmonstercanvas.style.display = "none";}}
fs_store in contract mille-trille.testnetimport { AnimationLoopStopOnLastImage, timeLap } from "./AnimationManager.mjs";import { monsterCaveImage } from "../Manage/ImageDatabase.mjs";import { CreateCanvas, CreateButton, ObjectImage } from "../Manage/GameManager.mjs";import { DisplayTextFunction, RemoveTextFunction, textBool } from "../Manage/TextBubbleScript.mjs";import { desk, pole } from "../Manage/SceneItemClass.mjs";import { CheckForItem, PickUpItem, UseItem, selectedItem } from "../Manage/InventoryScript.mjs";import { chainCutter, tuningFork, letter, toothImplant } from "../Manage/ItemDatabaseScript.mjs";import { frogMonsterSpeech, frogMonsterSpeechShorter } from "../Manage/SoundManager.mjs";//AnimationSpritesconst caveMonsterBody = new Image();caveMonsterBody.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/CaveMonsterAnimation/CaveMonster.png';export const caveMonsterBody1 = new Image();caveMonsterBody1.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/CaveMonsterAnimation/CaveMonster1.png';const caveMonsterBody2 = new Image();caveMonsterBody2.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/CaveMonsterAnimation/CaveMonster2.png';const caveMonsterBody3 = new Image();caveMonsterBody3.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/CaveMonsterAnimation/CaveMonster3.png';const caveMonsterArms = new Image();caveMonsterArms.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/CaveMonsterAnimation/CaveMonsterArms.png';export const caveMonsterArms1 = new Image();caveMonsterArms1.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/CaveMonsterAnimation/CaveMonsterArms1.png';const caveMonsterArms2 = new Image();caveMonsterArms2.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/CaveMonsterAnimation/CaveMonsterArms2.png';const caveMonsterArms3 = new Image();caveMonsterArms3.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/CaveMonsterAnimation/CaveMonsterArms3.png';let caveMonsterBodyArray = [caveMonsterBody, caveMonsterBody1, caveMonsterBody2, caveMonsterBody3];let caveMonsterArmsArray = [caveMonsterArms, caveMonsterArms1, caveMonsterArms2, caveMonsterArms3];const caveMonsterArmsArrayShorter = [caveMonsterArms, caveMonsterArms1];const caveMonsterBodyArrayShorter = [caveMonsterBody, caveMonsterBody1];const caveMonsterArmsArrayLonger = [caveMonsterArms, caveMonsterArms1, caveMonsterArms2, caveMonsterArms3, caveMonsterArms1, caveMonsterArms, caveMonsterArms2, caveMonsterArms3];const caveMonsterBodyArrayLonger = [caveMonsterBody, caveMonsterBody1, caveMonsterBody2, caveMonsterBody3, caveMonsterBody1, caveMonsterBody, caveMonsterBody2, caveMonsterBody3]let newArmsArray = [caveMonsterArms, caveMonsterArms1, caveMonsterArms2, caveMonsterArms3];let newBodyArray = [caveMonsterBody, caveMonsterBody1, caveMonsterBody2, caveMonsterBody3];export async function MonsterBodyArmsAnimation() {caveMonsterBodyArray = [caveMonsterBody, caveMonsterBody1, caveMonsterBody2, caveMonsterBody3];caveMonsterArmsArray = [caveMonsterArms, caveMonsterArms1, caveMonsterArms2, caveMonsterArms3];WhileLoopThroughArray(caveMonsterArmsArray, newArmsArray);WhileLoopThroughArray(caveMonsterBodyArray, newBodyArray);AnimationLoopStopOnLastImage(monsterCaveImage, newArmsArray, monsterarmscanvas);AnimationLoopStopOnLastImage(monsterCaveImage, newBodyArray, monsterbodycanvas);}export function MonsterBodyArmsShorterAnimation() {AnimationLoopStopOnLastImage(monsterCaveImage, caveMonsterArmsArrayShorter, monsterarmscanvas);AnimationLoopStopOnLastImage(monsterCaveImage, caveMonsterBodyArrayShorter, monsterbodycanvas);}export function MonsterBodyArmsLongerAnimation() {AnimationLoopStopOnLastImage(monsterCaveImage, caveMonsterArmsArrayLonger, monsterarmscanvas);AnimationLoopStopOnLastImage(monsterCaveImage, caveMonsterBodyArrayLonger, monsterbodycanvas);}let caveMonsters = ["Monster1", "Monster2", "Monster3", "Monster4"]let newArrayNow = ["MonsterThis", "monsterThat", "monsternow", "monsterthen"];function WhileLoopThroughArray(array, newArray) {while (array.length > 0) {let randomNumber = getRandomInt(0, array.length -1);console.log("randomNumber = ", randomNumber);newArray.splice(array.length -1, 1, array[randomNumber]);array.splice(randomNumber, 1);}}WhileLoopThroughArray(caveMonsters, newArrayNow);function getRandomInt(min, max) {min = Math.ceil(min);max = Math.floor(max);return Math.floor(Math.random() * (max - min + 1)) + min;}let monsterButtonBool = false;let monsterbutton;let chainCutterGiven = false;async function CaveMonsterSpeech() {CheckForItem();if (selectedItem == letter.text) {DisplayTextFunction("'arvey, aei? I kno' 'im. Used to snoop arou' 'ere, just like youuu...")await new Promise(resolve => setTimeout(resolve, timeLap * 8));frogMonsterSpeech.pause();}if (selectedItem == toothImplant.text) {DisplayTextFunction("I alway' wanted to rip that thing out of there. 'Ow d'you get that?")await new Promise(resolve => setTimeout(resolve, timeLap * 8));frogMonsterSpeech.pause();}}async function MonsterButton() {// if (!monsterButtonBool) {monsterbutton = CreateButton("monsterbutton", 327, 158, 225, 188, async function() {frogMonsterSpeech.play();CheckForItem();if (selectedItem == letter.text) {DisplayTextFunction("'arvey, aei? I kno' 'im. Used to snoop arou' 'ere, just like youuu...")await new Promise(resolve => setTimeout(resolve, timeLap * 8));frogMonsterSpeech.pause();}else if (selectedItem == toothImplant.text) {DisplayTextFunction("I alway' wanted to rip that thing out of there. 'Ow d'you get that?")await new Promise(resolve => setTimeout(resolve, timeLap * 8));frogMonsterSpeech.pause();}else if (selectedItem == tuningFork.text) {if (tuningForkSounded) {if (!chainCutterGiven) {UseItem(tuningFork, true);DisplayTextFunction("Thank you! Oh, Thank you! 'ere, take this. You deserve it!");PickUpItem(chainCutter, true);chainCutterGiven = true;} else {DisplayTextFunction("Good luck ou'dere!")} } else {monsterTalk.activate("Wha's that?");await new Promise(resolve => setTimeout(resolve, timeLap * 4));frogMonsterSpeech.pause();}} else {monsterTalk.activate("Wha' dooo you want, hoomain?");} } );monsterbutton.style.zIndex = '8';monsterbutton.style.display = "block"monsterButtonBool = true;// } else {// monsterbutton.remove();// monsterButtonBool = false;// }}let firstSpeech = false;let rockbutton;let tuningForkSounded = false;async function RockButton() {rockbutton = CreateButton("rockbutton", 689, 349, 236, 191, RockButtonFunction);rockbutton.style.display ="block";}async function RockButtonFunction() {frogMonsterSpeech.play();CheckForItem();if (selectedItem == tuningFork.text) {if (!tuningForkSounded) {DisplayTextFunction("Tha's.. tha's the most beautiful thing I've ever 'eard. Give it to me! Give it!");tuningForkSounded = true;await new Promise(resolve => setTimeout(resolve, timeLap * 8));frogMonsterSpeech.pause();} else {DisplayTextFunction("Give iiiiiit!");await new Promise(resolve => setTimeout(resolve, timeLap * 4));frogMonsterSpeech.pause();}}else if (textBool != "Quite 'eavy, in't it?" && textBool != "Could move it for you, but it'll cost you.") {monsterTalk.activate("Quite 'eavy, in't it?")await new Promise(resolve => setTimeout(resolve, timeLap * 4));frogMonsterSpeech.pause();} else if (textBool != "Could move it for you, but it'll cost you.") {monsterTalk.activate("Could move it for you, but it'll cost you.");await new Promise(resolve => setTimeout(resolve, timeLap * 6));frogMonsterSpeech.pause();} else {RemoveTextFunction();}}let lanternbutton;export function LanternButton() {lanternbutton = CreateButton("lanternbutton", 208, 267, 47, 88, LanternSpeechFunction);lanternbutton.style.display = "block";}async function LanternSpeechFunction() {frogMonsterSpeech.pause();frogMonsterSpeechShorter.play();if (textBool != "That's maine.") {monsterTalk.activate("That's maine.")MonsterBodyArmsShorterAnimation();await new Promise(resolve => setTimeout(resolve, timeLap * 3));frogMonsterSpeechShorter.pause()} else {RemoveTextFunction();}}let deskcanvas;let polecanvas;let monsterbodycanvas;let monsterarmscanvas;function GetCaveImages() {monsterbodycanvas = CreateCanvas("monsterbodycanvas");monsterarmscanvas = CreateCanvas("monsterarmscanvas");monsterarmscanvas.style.zIndex = '3';monsterbodycanvas.style.zIndex = '1'deskcanvas = CreateCanvas("deskcanvas");deskcanvas.style.zIndex = '1';polecanvas = CreateCanvas("polecanvas");polecanvas.style.zIndex = '3';ObjectImage(desk.image, deskcanvas);ObjectImage(pole.image, polecanvas);ObjectImage(caveMonsterArms1, monsterarmscanvas);ObjectImage(caveMonsterBody1, monsterbodycanvas);}export function EnterMonsterCave() {MonsterButton();LanternButton();RockButton()GetCaveImages()}export function ExitMonsterCave() {monsterbutton.remove()lanternbutton.remove();rockbutton.remove();monsterbodycanvas.remove();monsterarmscanvas.remove();deskcanvas.remove()polecanvas.remove()}const monsterTalk = {activate(thisText) {if (!firstSpeech) {DisplayTextFunction("Hey! Wha' dooo you know? A new hoomain!\nNot many hoomains arou' he'");MonsterBodyArmsAnimation();firstSpeech = true;} else {if (textBool != thisText) {DisplayTextFunction(thisText);MonsterBodyArmsAnimation();} else {RemoveTextFunction();}}},deactivate() {RemoveTextFunction();}}
fs_store in contract mille-trille.testnetconst fallingLeaf = new Image();fallingLeaf.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf.png';const fallingLeaf1 = new Image();fallingLeaf1.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf1.png';const fallingLeaf2 = new Image();fallingLeaf2.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf2.png';const fallingLeaf3 = new Image();fallingLeaf3.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf3.png';const fallingLeaf4 = new Image();fallingLeaf4.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf4.png';const fallingLeaf5 = new Image();fallingLeaf5.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf5.png';const fallingLeaf6 = new Image();fallingLeaf6.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf6.png';const fallingLeaf7 = new Image();fallingLeaf7.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf7.png';const fallingLeaf8 = new Image();fallingLeaf8.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf8.png';const fallingLeaf9 = new Image();fallingLeaf9.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf9.png';const fallingLeaf10 = new Image();fallingLeaf10.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf10.png';const fallingLeaf11 = new Image();fallingLeaf11.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf11.png';const fallingLeaf12 = new Image();fallingLeaf12.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf12.png';const fallingLeaf13 = new Image();fallingLeaf13.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf13.png';const fallingLeaf14 = new Image();fallingLeaf14.src = 'https://ipfs.web4.near.page/ipfs/bafybeidrv64w6zd5c2z2st3kqlzynqjimdnvewpacdps5lpp4jykah4c5m/CloseSprites/AnimationSprites/LeafAnimations/Leaf14.png';export const fallingLeafArray = [fallingLeaf, fallingLeaf1, fallingLeaf2, fallingLeaf3, fallingLeaf4, fallingLeaf5, fallingLeaf6, fallingLeaf7, fallingLeaf8, fallingLeaf9, fallingLeaf10, fallingLeaf11, fallingLeaf12, fallingLeaf13, fallingLeaf14];
fs_store in contract mille-trille.testnetimport { AnimationLoop } from './AnimationManager.mjs';import { cabinPondImage, busWreckImage } from '../Manage/ImageDatabase.mjs';import { CreateCanvasFree, unit } from '../Manage/GameManager.mjs';import { fallingLeafArray } from './FallingLeafImages.mjs';import { backgroundVar } from '../Manage/Background.mjs';import { timeLap } from './AnimationManager.mjs';let fallingleafcanvas;let fallingleafcanvasbuswreck;export let fallingLeafBool = false;export let fallingLeafBusWreckBool = false;async function FallingLeafCabinPond() {if (!fallingLeafBool) {fallingLeafBool = true;await AnimationLoop(cabinPondImage, fallingLeafArray, fallingleafcanvas);fallingLeafBool = false;}}//Leaf Animation//Set the coordinates of the leaves.function FirstFallingLeaf() {fallingleafcanvas = document.getElementById("fallingleafcanvas");fallingleafcanvas.style.left = unit * 369 + "px";fallingleafcanvas.style.top = unit * 230 + "px";}function SecondFallingLeaf() {fallingleafcanvas = document.getElementById("fallingleafcanvas");fallingleafcanvas.style.left = unit * 832 + "px";fallingleafcanvas.style.top = unit * 230 + "px";}let fallingLeafInterval;let firstFallingLeaf;let secondFallingLeaf;let rememberLeaf = () => {};//Set intervals for when and where the leaves fallexport async function SetIntervalFallingLeaf() {fallingleafcanvas = CreateCanvasFree("fallingleafcanvas", 380, 250, 91, 292);fallingleafcanvas.style.zIndex = '3';//Set random starting pointif (backgroundVar === cabinPondImage) {let randomTime = Math.random();if (randomTime > 0.5) {await new Promise(resolve => setTimeout(resolve, timeLap * 10));}if (!fallingLeafBool) {let randomLeaf = Math.random();if (randomLeaf > 0.5) {// rememberLeaf = FirstFallingLeaf();FirstFallingLeaf();} else {// rememberLeaf = SecondFallingLeaf();SecondFallingLeaf();}} else {// return rememberLeaf;}await FallingLeafCabinPond();if (backgroundVar == cabinPondImage) {fallingLeafInterval = setInterval(FallingLeafCabinPond, 20000);fallingleafcanvas.style.left = unit * 150 + "px";fallingleafcanvas.style.top = unit * 230 + "px";firstFallingLeaf = setInterval(FirstFallingLeaf, 30000);secondFallingLeaf = setInterval(SecondFallingLeaf, 40000);}} else {fallingleafcanvas.remove();return;}}//Deactivate the animation when change of backgroundexport async function DeactivateFallingLeafFunction() {// fallingleafcanvas.style.display = "none";// fallingleafcanvas.remove();clearInterval(fallingLeafInterval);clearInterval(secondFallingLeaf);clearInterval(firstFallingLeaf);fallingLeafInterval = null;secondFallingLeaf = null;firstFallingLeaf = null;}//Here starts the buswreck animation//async function FallingLeafBusWreck() {if (!fallingLeafBusWreckBool) {fallingleafcanvasbuswreck = document.getElementById("fallingleafcanvasbuswreck");fallingLeafBusWreckBool = true;await AnimationLoop(busWreckImage, fallingLeafArray, fallingleafcanvasbuswreck);fallingLeafBusWreckBool = false;}}function FirstFallingLeafBus() {fallingleafcanvasbuswreck = CreateCanvasFree("fallingleafcanvasbuswreck", 130, 250, 91, 292);//fallingleafcanvasbuswreck = document.getElementById("fallingleafcanvasbuswreck");// fallingleafcanvasbuswreck.style.left = unit * 230 + "px";// fallingleafcanvasbuswreck.style.top = unit * 250 + "px";}function SecondFallingLeafBus() {fallingleafcanvasbuswreck = CreateCanvasFree("fallingleafcanvasbuswreck", 780, 250, 91, 292);//fallingleafcanvasbuswreck = document.getElementById("fallingleafcanvasbuswreck");// console.log(fallingleafcanvasbuswreck)// fallingleafcanvasbuswreck.style.left = unit * 780 + "px";// fallingleafcanvasbuswreck.style.top = unit * 250 + "px";}let fallingLeafIntervalBus;let firstFallingLeafBus;let secondFallingLeafBus;let rememberLeafBus = () => {};//Set intervals for when and where the leaves fallexport async function SetIntervalFallingLeafBusWreck() {fallingleafcanvasbuswreck = CreateCanvasFree("fallingleafcanvasbuswreck", 180, 250, 91, 292);fallingleafcanvasbuswreck.style.zIndex = '3';//Set random starting pointif (backgroundVar == busWreckImage) {let randomTime = Math.random();if (randomTime > 0.5) {await new Promise(resolve => setTimeout(resolve, timeLap * 10));}if (!fallingLeafBusWreckBool) {let randomLeaf = Math.random();if (randomLeaf > 0.5) {// rememberLeafBus = FirstFallingLeafBus();FirstFallingLeafBus();} else {// rememberLeafBus = SecondFallingLeafBus();SecondFallingLeafBus();}} else {// return rememberLeafBus;}await FallingLeafBusWreck();if (backgroundVar == busWreckImage) {fallingLeafIntervalBus = setInterval(FallingLeafBusWreck, 20000);fallingleafcanvasbuswreck.style.left = unit * 150 + "px";fallingleafcanvasbuswreck.style.top = unit * 230 + "px";firstFallingLeafBus = setInterval(FirstFallingLeafBus, 30000);secondFallingLeafBus = setInterval(SecondFallingLeafBus, 40000);}} else {fallingleafcanvasbuswreck.remove();return;}}//Deactivate the animation when change of backgroundexport async function DeactivateFallingLeafBusWreckFunction() {fallingleafcanvasbuswreck.style.display = "none";fallingleafcanvasbuswreck.remove();clearInterval(fallingLeafIntervalBus);clearInterval(secondFallingLeaf);clearInterval(firstFallingLeaf);fallingLeafIntervalBus = null;secondFallingLeafBus = null;firstFallingLeafBus = null;}
fs_store in contract mille-trille.testnetimport { ObjectImage, CreateCanvas, unit } from "../Manage/GameManager.mjs";import { backgroundVar } from "../Manage/Background.mjs";import { timeLap } from "./AnimationManager.mjs";import { darkForestImage } from "../Manage/ImageDatabase.mjs";import { ActionButton } from "../Manage/ActionButtonClass.mjs";import { treeCanvas } from "../Places/DarkForest.mjs";import { Canvas } from "../Manage/CanvasClass.mjs";const forestMonsterInCaveImage = new Image();forestMonsterInCaveImage.src = "https://ipfs.web4.near.page/ipfs/bafybeibv6ir6bygzqehwqcbdsm3t57a2jx6yxcuwzma42valniuow42p7m/MonsterInCave.png";const forestMonsterImage = new Image();forestMonsterImage.src = "https://ipfs.web4.near.page/ipfs/bafybeibv6ir6bygzqehwqcbdsm3t57a2jx6yxcuwzma42valniuow42p7m/ForestMonster.png"const forestMonsterImage1 = new Image();forestMonsterImage1.src = "https://ipfs.web4.near.page/ipfs/bafybeibv6ir6bygzqehwqcbdsm3t57a2jx6yxcuwzma42valniuow42p7m/ForestMonster1.png";const forestMonsterImage2 = new Image();forestMonsterImage2.src = "https://ipfs.web4.near.page/ipfs/bafybeibv6ir6bygzqehwqcbdsm3t57a2jx6yxcuwzma42valniuow42p7m/ForestMonster2.png";const forestMonsterImage2a = new Image();forestMonsterImage2a.src = "https://ipfs.web4.near.page/ipfs/bafybeibv6ir6bygzqehwqcbdsm3t57a2jx6yxcuwzma42valniuow42p7m/ForestMonster2a.png";const forestMonsterImage3 = new Image();forestMonsterImage3.src = "https://ipfs.web4.near.page/ipfs/bafybeibv6ir6bygzqehwqcbdsm3t57a2jx6yxcuwzma42valniuow42p7m/ForestMonster3.png";const forestMonsterImage4 = new Image();forestMonsterImage4.src = "https://ipfs.web4.near.page/ipfs/bafybeibv6ir6bygzqehwqcbdsm3t57a2jx6yxcuwzma42valniuow42p7m/ForestMonster4.png";const forestMonsterImage5 = new Image();forestMonsterImage5.src = "https://ipfs.web4.near.page/ipfs/bafybeibv6ir6bygzqehwqcbdsm3t57a2jx6yxcuwzma42valniuow42p7m/ForestMonster5.png";export const forestMonsterImage6 = new Image();forestMonsterImage6.src = "https://ipfs.web4.near.page/ipfs/bafybeibv6ir6bygzqehwqcbdsm3t57a2jx6yxcuwzma42valniuow42p7m/ForestMonster6.png";//export const noMonster = new Image();//noMonster.src = "https://ipfs.web4.near.page/ipfs/bafybeibv6ir6bygzqehwqcbdsm3t57a2jx6yxcuwzma42valniuow42p7m/NoMonster.png";export let forestMonsterKilled = false;function AnimationOnOff(background, image, canvas, i) {if (backgroundVar == background) {ObjectImage(image, canvas);} else {canvas.ctx.clearRect(0, 0, canvas.width, canvas.height);return;}if (forestMonsterKilled == true) {canvas.ctx.clearRect(0, 0, canvas.width, canvas.height);return;} else if (i >= 8) {forestMonsterBool = false;location.reload()}}//boolean to make sure the monster will not launch more than once.export let forestMonsterBool = false;async function forestMonsterAnimation(background, images, canvas) {forestMonsterBool = true;for (let i = 0; i < images.length; i++) {if (i >= 4 ) {treeCanvas.style.zIndex = "1";} else {treeCanvas.style.zIndex = "4";}AnimationOnOff(background, images[i], canvas, i);await new Promise(resolve => setTimeout(resolve, timeLap));}}const killForestMonsterButton = new ActionButton("monsteroffbutton", 200, 200, 200, 200, KillForestMonsterFunction);export function KillForestMonsterFunction() {forestMonsterKilled = true;forestMonsterBool = false;}export function ToggleForestMonsterBool() {forestMonsterBool = false;}export function KillForestMonsterButton() {killForestMonsterButton.activate();}export const forestMonsterCanvas = CreateCanvas("forestmonstercanvas");const forestMonsterImages = [forestMonsterInCaveImage, forestMonsterImage, forestMonsterImage1, forestMonsterImage2, forestMonsterImage2a, forestMonsterImage3, forestMonsterImage4, forestMonsterImage5, forestMonsterImage6];export function ForestMonsterComing() {if (forestMonsterBool === false)forestMonsterAnimation(darkForestImage, forestMonsterImages, forestMonsterCanvas);}//Player gets killed by forestmonsterexport async function ForestMonsterKill() {if (forestMonsterBool == true) {const forestDeathCanvas = new Canvas("forestmonsterkillcanvas", forestMonsterImage6, 20);await new Promise(resolve => setTimeout(resolve, timeLap * 3));if (forestMonsterBool) {forestDeathCanvas.activate();location.reload();} else {return;}}}
No Logs
MFSPLYaCgaDvqWeq56JRWDL8UGPWzVp8Ufm5HTV9GBQ
Aug 16, 2026 20:16:31.353 +00:00
system
Empty Result
No Logs