{"mappings":"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","sources":["src/sketch.js"],"sourcesContent":["const input = { keys: {}, mouse: {} }\nconst game = {};\n\nconst CP_437 = [\n ' ', '☺', '☻', '♥', '♦', '♣', '♠', '•', '◘', '○', '◙', '♂', '♀', '♪', '♫', '☼',\n '►', '◄', '↕', '‼', '¶', '§', '▬', '↨', '↑', '↓', '→', '←', '∟', '↔', '▲', '▼',\n ' ', '!', '\"', '#', '$', '%', '&', '\\'', '(', ')', '*', '+', ',', '-', '.', '/',\n '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?',\n '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',\n 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\\\', ']', '^', '_',\n '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',\n 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '⌂',\n 'Ç', 'ü', 'é', 'â', 'ä', 'à', 'å', 'ç', 'ê', 'ë', 'è', 'ï', 'î', 'ì', 'Ä', 'Å',\n 'É', 'æ', 'Æ', 'ô', 'ö', 'ò', 'û', 'ù', 'ÿ', 'Ö', 'Ü', '¢', '£', '¥', '₧', 'ƒ',\n 'á', 'í', 'ó', 'ú', 'ñ', 'Ñ', 'ª', 'º', '¿', '⌐', '¬', '½', '¼', '¡', '«', '»',\n '░', '▒', '▓', '│', '┤', '╡', '╢', '╖', '╕', '╣', '║', '╗', '╝', '╜', '╛', '┐',\n '└', '┴', '┬', '├', '─', '┼', '╞', '╟', '╚', '╔', '╩', '╦', '╠', '═', '╬', '╧',\n '╨', '╤', '╥', '╙', '╘', '╒', '╓', '╫', '╪', '┘', '┌', '█', '▄', '▌', '▐', '▀',\n 'α', 'ß', 'Γ', 'π', 'Σ', 'σ', 'µ', 'τ', 'Φ', 'Θ', 'Ω', 'δ', '∞', 'φ', 'ε', '∩',\n '≡', '±', '≥', '≤', '⌠', '⌡', '÷', '≈', '°', '∙', '·', '√', 'ⁿ', '²', '■', ' '\n];\nconst COLORS = ['#ff0040', '#131313', '#1b1b1b', '#272727', '#3d3d3d', '#5d5d5d', '#858585', '#b4b4b4', '#ffffff', '#c7cfdd', '#92a1b9', '#657392', '#424c6e', '#2a2f4e', '#1a1932', '#0e071b', '#1c121c', '#391f21', '#5d2c28', '#8a4836', '#bf6f4a', '#e69c69', '#f6ca9f', '#f9e6cf', '#edab50', '#e07438', '#c64524', '#8e251d', '#ff5000', '#ed7614', '#ffa214', '#ffc825', '#ffeb57', '#d3fc7e', '#99e65f', '#5ac54f', '#33984b', '#1e6f50', '#134c4c', '#0c2e44', '#00396d', '#0069aa', '#0098dc', '#00cdf9', '#0cf1ff', '#94fdff', '#fdd2ed', '#f389f5', '#db3ffd', '#7a09fa', '#3003d9', '#0c0293', '#03193f', '#3b1443', '#622461', '#93388f', '#ca52c9', '#c85086', '#f68187', '#f5555d', '#ea323c', '#c42430', '#891e2b', '#571c27'];\nlet Fonts = {};\nlet tick = 0;\n\nconst EDITOR = false || new URLSearchParams(window.location.search).get('editor') != null;\n\nfunction preload() {\n Fonts = {\n pixel: loadFont('/static/font/PxPlus_IBM_EGA_8x8.ttf'),\n regular: loadFont('/static/font/LibreFranklin-Regular.ttf'),\n bold: loadFont('/static/font/LibreFranklin-Bold.ttf'),\n }\n}\n\nfunction setup() {\n createCanvas();\n windowResized();\n textFont(Fonts.pixel);\n textSize(16);\n\n if (EDITOR) {\n document.getElementById('editor').style.display = 'block';\n }\n game.world = new World();\n\n const naturalItems = REGISTRY.items.filter(item => item.tags.includes('natural')).map(item => item.id);\n const totalWeight = naturalItems.reduce((acc, id) => acc + (REGISTRY.getItem(id).properties.weight ?? 1), 0);\n\n for (let i = 0; i < game.world.size * game.world.size / 16; i += 1) {\n const x = floor(random(game.world.size));\n const y = floor(random(game.world.size));\n if (x < 4 || x > game.world.size - 4 || y < 4 || y > game.world.size - 4) {\n continue;\n }\n const w = random(totalWeight);\n let acc = 0;\n let item = null;\n for (const id of naturalItems) {\n acc += REGISTRY.getItem(id).properties.weight ?? 1;\n if (acc >= w) {\n item = id;\n break;\n }\n }\n item = item || naturalItems[naturalItems.length - 1];\n game.world.set(x, y, new ItemState(item));\n }\n\n game.world.set(floor(game.world.size / 2), floor(game.world.size) / 2, new ItemState(57));\n game.camera = { x: 0, y: 0 };\n\n game.people = [];\n game.groups = [];\n for (let i = 0; i < 5; i += 1) {\n const group = generateGroup(0, game.world);\n game.groups.push(group[0].surname);\n game.people.push(...group);\n }\n assignReputations(game.people);\n game.acc = 0;\n\n game.worldMouseX = 0;\n game.worldMouseX = 0;\n game.mouseIndex = 0;\n game.tick = 0;\n\n game.selectedPerson = '';\n\n game.peopleGraph = new Array(50).fill(game.people.length);\n\n game.itemsCrafted = {};\n game.foodEaten = {};\n game.deepestItem = 0;\n game.deepestItemDepth = 0;\n game.deepestItemCredit = '';\n\n game.skip = 0;\n game.temp = 0;\n\n game.extraInfo = false;\n game.renderData = {};\n\n // game.people = [ game.people[0] ];\n // game.people[0].x = 49;\n // game.people[0].y = 49;\n}\n\nfunction windowResized() {\n resizeCanvas(windowWidth, windowHeight);\n}\n\nfunction keyPressed() {\n input.keys[keyCode] = 0;\n}\n\nfunction keyReleased() {\n input.keys[keyCode] = -1;\n}\n\nfunction mousePressed() {\n input.mouse[mouseButton] = 0;\n}\n\nfunction mouseReleased() {\n input.mouse[mouseButton] = -1;\n}\n\nfunction updateInput() {\n for (let key in input.keys) {\n if (input.keys[key] >= 0) {\n input.keys[key] += 1;\n }\n }\n for (let button in input.mouse) {\n if (input.mouse[button] >= 0) {\n input.mouse[button] += 1;\n }\n }\n}\n\nfunction isWithin(tx, ty, x, y, w, h) {\n return tx >= x && tx <= x + w && ty >= y && ty <= y + h;\n}\n\nfunction mouseIsWithin(x, y, w, h) {\n return isWithin(mouseX, mouseY, x, y, w, h);\n}\n\nfunction runTick() {\n\n game.temp = sin(game.tick / (60 * 24 * 30 * 4) * TWO_PI) * 10 - 5 - cos(game.tick / (60 * 24) * TWO_PI) * 2;\n game.world.update(game.temp);\n\n for (const { item, x, y } of game.world.active()) {\n const timed = item.item.usedIn.find(use => use.time);\n if (timed) {\n if (timed.willOccur(item, null, game.tick * 60)) {\n console.log('occured');\n const [ result ] = timed.getResults(item, null, Math.random());\n result.time = game.tick * 60;\n game.world.set(x, y, result);\n freeChunk(floor(x / CHUNK_SIZE) + floor(y / CHUNK_SIZE) * WORLD_SIZE);\n }\n }\n }\n for (const person of game.people) {\n person.update(game.world, game.temp);\n }\n for (const person of game.people) {\n if (person.health <= 0) {\n game.world.set(person.x, person.y, new ItemState(86)); // grave\n freeChunk(floor(person.x / CHUNK_SIZE) + floor(person.y / CHUNK_SIZE) * WORLD_SIZE);\n }\n }\n game.people = game.people.filter(person => person.health > 0);\n for (const person of game.people) {\n person.think(game.world, game.people, game.tick * 60);\n }\n let actions = {};\n for (const person of game.people) {\n const action = person.act();\n if (action) {\n actions[person.id] = action;\n }\n }\n for (const person of game.people) {\n const action = actions[person.id];\n if (action.type === 'move') {\n const newX = person.x + (action.data.direction === 4 ? 1 : 0) + (action.data.direction === 2 ? -1 : 0);\n const newY = person.y + (action.data.direction === 3 ? 1 : 0) + (action.data.direction === 1 ? -1 : 0);\n if (newX < 0 || newX >= game.world.size || newY < 0 || newY >= game.world.size) {\n continue;\n }\n if (game.world.get(newX, newY) && game.world.get(newX, newY).item.tags.includes('blocking')) {\n continue;\n }\n if (game.people.find(p => p.x === newX && p.y === newY)) {\n continue;\n }\n person.x = newX;\n person.y = newY;\n } else if (action.type === 'eat') {\n if (person.holding != null) {\n const item = person.holding.item;\n if (item.tags.includes('edible')) {\n game.foodEaten[item.id] = (game.foodEaten[item.id] || 0) + 1;\n person.hunger += item.properties['food'] || 0;\n person.score += item.properties['food'] || 0;\n person.holding = item.properties['leftovers'] ? new ItemState(item.properties['leftovers']) : null;\n }\n }\n } else if (action.type === 'interact') {\n const prev = game.world.get(person.x, person.y);\n let intX = person.x + (action.data.direction === 4 ? 1 : 0) + (action.data.direction === 2 ? -1 : 0);\n let intY = person.y + (action.data.direction === 3 ? 1 : 0) + (action.data.direction === 1 ? -1 : 0);\n if (person.holding === null && game.world.get(intX, intY) != null) {\n const item = game.world.get(intX, intY).item;\n if (!item.tags.includes('static')) {\n person.holding = game.world.get(intX, intY);\n game.world.set(intX, intY, null);\n freeChunk(floor(intX / CHUNK_SIZE) + floor(intY / CHUNK_SIZE) * WORLD_SIZE);\n\n } else if (item.usedIn.find(use => !use.actor)) {\n const recipe = item.usedIn.find(use => !use.actor);\n const [origin, actor] = recipe.getResults(game.world.get(intX, intY), null, Math.random());\n game.world.set(intX, intY, origin);\n freeChunk(floor(intX / CHUNK_SIZE) + floor(intY / CHUNK_SIZE) * WORLD_SIZE);\n\n person.holding = actor;\n if (game.world.get(intX, intY)) {\n game.world.get(intX, intY).time = game.tick * 60;\n if (prev && origin.id !== prev.id) {\n person.addItemToMemory(game.world, intX, intY, game.tick * 60);\n }\n }\n }\n } else if (person.holding != null && game.world.get(intX, intY) == null) {\n game.world.set(intX, intY, person.holding);\n freeChunk(floor(intX / CHUNK_SIZE) + floor(intY / CHUNK_SIZE) * WORLD_SIZE);\n\n game.world.get(intX, intY).time = game.tick * 60;\n person.holding = null;\n } else if (person.holding != null && game.world.get(intX, intY) != null) {\n const item = game.world.get(intX, intY).item;\n for (const recipe of item.usedIn) {\n if (recipe.willOccur(game.world.get(intX, intY), person.holding, game.tick * 60)) {\n const [origin, actor] = recipe.getResults(game.world.get(intX, intY), person.holding, Math.random());\n game.world.set(intX, intY, origin);\n freeChunk(floor(intX / CHUNK_SIZE) + floor(intY / CHUNK_SIZE) * WORLD_SIZE);\n\n person.holding = actor;\n if (game.world.get(intX, intY)) {\n game.world.get(intX, intY).time = game.tick * 60;\n if (prev && origin.id !== prev.id) {\n person.addItemToMemory(game.world, intX, intY, game.tick * 60);\n }\n }\n break;\n }\n }\n }\n\n const runChecks = (item) => {\n if (item.item.tags.includes('important')) {\n person.score += (item.item.depth() ** 2) * 10; \n }\n console.log(item.item.name, item.item.depth());\n if (item.item.depth() > game.deepestItemDepth) {\n game.deepestItem = item.id;\n game.deepestItemDepth = item.item.depth();\n game.deepestItemCredit = person.fullName;\n }\n game.itemsCrafted[item.item.id] = (game.itemsCrafted[item.item.id] || 0) + 1;\n }\n\n game.world.get(intX, intY) && game.world.get(intX, intY).id !== 0 && runChecks(game.world.get(intX, intY));\n person.holding && person.holding.id !== 0 && runChecks(person.holding);\n\n }\n }\n game.tick += 1;\n\n if (game.tick % 60 === 0) {\n game.peopleGraph.shift();\n game.peopleGraph.push(game.people.length);\n }\n}\n\nfunction update() {\n\n game.time = {\n minute: game.tick % 60,\n hour: floor(game.tick / 60) % 24,\n day: floor(game.tick / 60 / 24) % 30,\n month: floor(game.tick / 60 / 24 / 30) % 4,\n year: floor(game.tick / 60 / 24 / 30 / 4) + 1000,\n }\n\n if (mouseIsWithin(0, 0, 50 * 16, 50 * 16)) {\n game.worldMouseX = floor(mouseX / 16) + game.camera.x;\n game.worldMouseY = floor(mouseY / 16) + game.camera.y;\n }\n \n if (input.keys[LEFT_ARROW] > 0) {\n game.camera.x -= 1;\n }\n if (input.keys[RIGHT_ARROW] > 0) {\n game.camera.x += 1;\n }\n if (input.keys[UP_ARROW] > 0) {\n game.camera.y -= 1;\n }\n if (input.keys[DOWN_ARROW] > 0) {\n game.camera.y += 1;\n }\n\n if (input.keys['Q'.charCodeAt(0)] === 1) {\n game.extraInfo = !game.extraInfo;\n }\n\n\n if (input.keys['P'.charCodeAt(0)] > 0) {\n game.skip = 1440; // skip ahead 1 day\n }\n\n if (input.keys['O'.charCodeAt(0)] > 0) {\n game.skip = 1440 * 7; // skip ahead 1 week\n }\n\n if (input.keys['I'.charCodeAt(0)] > 0) {\n game.skip = 1440 * 30; // skip ahead 1 month\n }\n\n if (input.keys['U'.charCodeAt(0)] > 0) {\n game.skip = 1440 * 30 * 4; // skip ahead 1 year\n }\n\n if (game.skip > 0) {\n const start = millis();\n let i = 0;\n while (game.skip > 0 && millis() - start < 100) {\n runTick();\n game.skip -= 1;\n i += 1;\n }\n game.tps = i / ((millis() - start) / 1000);\n return;\n }\n\n let dt = frameRate() > 0 ? 1 / frameRate() : 0;\n game.acc += dt * 2 * (input.keys['T'.charCodeAt(0)] > 0 ? 100 : 1);\n game.acc = min(game.acc, 200);\n while (game.acc > 1) {\n game.acc -= 1;\n runTick();\n }\n\n for (const person of game.people) {\n if (mouseIsWithin(0, 0, 50 * 16, 50 * 16)) {\n if (person.x === game.worldMouseX && person.y === game.worldMouseY) {\n game.selectedPerson = person.id;\n }\n }\n }\n}\n\nfunction drawItem(display, x, y, to = window) {\n if (display.length === 0) {\n return;\n }\n const disp = display[tick % display.length];\n const { character, color } = disp;\n to.fill(COLORS[color]);\n to.textFont(Fonts.pixel);\n to.text(CP_437[character], x, y);\n}\n\nfunction drawNiceItem(display, x, y, size = 16) {\n textAlign(LEFT, TOP);\n textSize(size);\n stroke(30);\n fill(20);\n rect(x, y, size, size);\n noStroke();\n drawItem(display, x, y);\n}\n\nfunction drawNiceNoun(noun, x, y, size = 16) {\n let message = '';\n textAlign(LEFT, TOP);\n switch (noun.type) {\n case 'person':\n const person = game.people.find(person => person.id === noun.data.id);\n drawNiceItem((person || REGISTRY.getItem(86)).display, x, y, size);\n message = person ? person.fullName : 'dead';\n break;\n case 'place':\n stroke(30);\n fill(20);\n rect(x, y, size, size);\n noFill();\n stroke(255);\n const miniX = x + map(noun.data.x, 0, game.world.size, 0, size);\n const miniY = y + map(noun.data.y, 0, game.world.size, 0, size);\n line(miniX - 1, miniY - 1, miniX + 1, miniY + 1);\n line(miniX - 1, miniY + 1, miniX + 1, miniY - 1);\n message = `${noun.data.x}, ${noun.data.y}`;\n break;\n case 'thing':\n const query = REGISTRY.query(noun.data.selector);\n let display = query.map(id => REGISTRY.getItem(id).display).flat();\n if (display.length === 0) {\n display = REGISTRY.getItem(0).display;\n }\n drawNiceItem(display, x, y, size);\n message = query.map(id => REGISTRY.getItem(id).name).join(', ');\n break;\n }\n\n if (mouseIsWithin(x, y, size, size)) {\n textFont(Fonts.regular);\n const w = min(textWidth(message), 300);\n textAlign(CENTER, BOTTOM);\n textSize(16);\n \n stroke(255);\n fill(0);\n rect(x - w / 2 - 10, y - 50, w + 20, 40);\n fill(255);\n noStroke();\n text(message, x, y - 20);\n textAlign(LEFT, TOP);\n }\n}\n \n\nfunction drawMemory(memory, x, y) {\n noStroke();\n switch (memory.type) {\n case 'exists':\n drawNiceNoun(memory.data.noun, x, y);\n textFont(Fonts.regular);\n fill(255);\n text('exists', x + 20, y);\n break;\n case 'location':\n drawNiceNoun(memory.data.noun, x, y);\n textFont(Fonts.regular);\n fill(255);\n text('is at', x + 20, y);\n drawNiceNoun({ type: 'place', data: { x: memory.data.x, y: memory.data.y }}, x + 55, y);\n break;\n case 'personKnows':\n drawNiceNoun(memory.data.person, x, y);\n textFont(Fonts.regular);\n fill(255);\n text('knows', x + 20, y);\n drawMemory(memory.data.memory, x + 50, y);\n break;\n }\n}\n\nfunction drawObjective(objective, x, y) {\n noStroke();\n textAlign(LEFT, TOP);\n textSize(16);\n textFont(Fonts.regular);\n fill(255);\n switch (objective.type) {\n case 'fulfillNeed':\n text(objective.data.need, x, y);\n break;\n case 'obtain':\n text('obtain', x, y);\n drawNiceNoun(objective.data.noun, x + 60, y);\n if (objective.data.another) {\n textFont(Fonts.bold);\n text('(another)', x + 80, y);\n }\n break;\n }\n}\n\nfunction jumpToPerson(person) {\n game.camera.x = person.x - 25;\n game.camera.y = person.y - 25;\n game.selectedPerson = person.id;\n}\n\nfunction freeChunk(index) {\n if (game.renderData[index]) {\n game.renderData[index].static.remove();\n delete game.renderData[index];\n }\n}\n\nfunction drawStaticChunk(chunk) {\n const graphics = createGraphics(CHUNK_SIZE * 16, CHUNK_SIZE * 16);\n graphics.textSize(16);\n graphics.textAlign(LEFT, TOP);\n for (let x = 0; x < CHUNK_SIZE; x += 1) {\n for (let y = 0; y < CHUNK_SIZE; y += 1) {\n const item = chunk.items[x + y * CHUNK_SIZE];\n if (item && item.item.display.length === 1) {\n drawItem(item.item.display, x * 16, y * 16, graphics);\n }\n }\n }\n return graphics;\n}\n\nfunction mod(n, m) {\n return ((n % m) + m) % m;\n}\n\nfunction draw() {\n tick = floor(millis() / 500);\n if (EDITOR) {\n updateInput();\n drawEditor();\n return;\n }\n update();\n updateInput();\n background(0);\n textSize(16);\n\n\n fill(255);\n textAlign(LEFT, TOP);\n textFont(Fonts.regular);\n if (game.skip > 0) {\n text('Skipping ahead... ticks: ' + game.skip, 10, 10);\n text('tps: ' + game.tps, 10, 30);\n text('people left: ' + game.people.length, 10, 50);\n if (input.keys[ESCAPE] > 0) {\n game.skip = 0;\n }\n return;\n }\n\n noStroke();\n fill(10);\n rect(0, 0, 50 * 16, 50 * 16);\n fill(10);\n textAlign(LEFT, TOP);\n \n for (let x = 0; x < 50; x += 1) {\n for (let y = 0; y < 50; y += 1) {\n const cx = x + game.camera.x;\n const cy = y + game.camera.y;\n if (cx < 0 || cx >= game.world.size || cy < 0 || cy >= game.world.size) {\n continue;\n }\n const item = game.world.get(cx, cy);\n if (item != null && item.item.tags.includes('heatSource')) {\n stroke(255, 63, 0, 200);\n fill(255, 63, 0, 40);\n noStroke();\n ellipse((x + 0.5) * 16, (y + 0.5) * 16, 16 * item.item.properties.heat, 16 * item.item.properties.heat);\n }\n }\n }\n \n stroke(30);\n beginShape(LINES);\n for (let i = 0; i < 50; i += 1) {\n if (i + game.camera.x >= 0 && i + game.camera.x <= game.world.size) {\n vertex(i * 16, 0);\n vertex(i * 16, 50 * 16);\n }\n if (i + game.camera.y >= 0 && i + game.camera.y <= game.world.size) {\n vertex(0, i * 16);\n vertex(50 * 16, i * 16);\n }\n }\n stroke(50);\n for (let i = 0; i < 50; i += 1) {\n if ((i + game.camera.x) % 10 === 0 && (i + game.camera.x >= 0 && i + game.camera.x <= game.world.size)) {\n vertex(i * 16, 0);\n vertex(i * 16, 50 * 16);\n }\n if ((i + game.camera.y) % 10 === 0 && i + game.camera.y >= 0 && i + game.camera.y <= game.world.size) {\n vertex(0, i * 16);\n vertex(50 * 16, i * 16);\n }\n }\n endShape();\n noFill();\n rect(0, 0, 50 * 16, 50 * 16);\n for (let x = 0; x <= 50 / CHUNK_SIZE; x += 1) {\n for (let y = 0; y <= 50 / CHUNK_SIZE; y += 1) {\n const cx = x + floor(game.camera.x / CHUNK_SIZE);\n const cy = y + floor(game.camera.y / CHUNK_SIZE);\n if (cx < 0 || cx >= WORLD_SIZE || cy < 0 || cy >= WORLD_SIZE) {\n continue;\n }\n const index = cx + cy * WORLD_SIZE;\n\n if (!game.renderData[index]) {\n game.renderData[index] = { \n static: drawStaticChunk(game.world.chunks[index]), \n dynamic: Object.entries(game.world.chunks[index].items)\n .filter(([i, item]) => item && item.item.display.length > 1)\n .map(([i, item]) => ({ x: (i % CHUNK_SIZE) * 16, y: floor(i / CHUNK_SIZE) * 16, item }))\n };\n }\n\n if (game.renderData[index]) {\n image(game.renderData[index].static, x * CHUNK_SIZE * 16 - mod(game.camera.x, CHUNK_SIZE) * 16, y * CHUNK_SIZE * 16 - mod(game.camera.y, CHUNK_SIZE) * 16);\n noStroke();\n for (const { x: dx, y: dy, item } of game.renderData[index].dynamic) {\n drawItem(item.item.display, x * CHUNK_SIZE * 16 - mod(game.camera.x, CHUNK_SIZE) * 16 + dx, y * CHUNK_SIZE * 16 - mod(game.camera.y, CHUNK_SIZE) * 16 + dy);\n }\n }\n }\n }\n\n for (const index in game.renderData) {\n const x = index % WORLD_SIZE;\n const y = floor(index / WORLD_SIZE);\n\n if (x < floor(game.camera.x / CHUNK_SIZE) - 4 || x > floor((game.camera.x + 50) / CHUNK_SIZE) + 4 || y < floor(game.camera.y / CHUNK_SIZE) - 4 || y > floor((game.camera.y + 50) / CHUNK_SIZE) + 4) {\n freeChunk(index);\n }\n }\n\n for (const person of game.people) {\n if (person.x > game.camera.x && person.x < game.camera.x + 50 && person.y > game.camera.y && person.y < game.camera.y + 50) {\n noFill();\n stroke(COLORS[person.altColor]);\n rect((person.x - game.camera.x) * 16 - 2, (person.y - game.camera.y) * 16 - 2, 20, 20);\n noStroke();\n drawItem(person.display, (person.x - game.camera.x) * 16, (person.y - game.camera.y) * 16);\n }\n }\n\n stroke(255);\n fill(0);\n rect(50 * 16 + 10, 10, 200, 100);\n\n stroke(100);\n noFill();\n beginShape();\n const peopleGraphMax = max(...game.peopleGraph);\n for (let i = 0; i < game.peopleGraph.length; i += 1) {\n const x = 50 * 16 + 20 + map(i, 0, game.peopleGraph.length - 1, 0, 100);\n const y = 110 - map(game.peopleGraph[i], 0, peopleGraphMax, 0, 30);\n vertex(x, y);\n }\n endShape();\n\n noStroke();\n fill(0);\n rect(0, 50 * 16, width, height - 50 * 16);\n rect(50 * 16, 0, width - 50 * 16, height);\n\n\n textFont(Fonts.regular);\n textSize(16);\n fill(255);\n noStroke();\n textAlign(LEFT, TOP);\n text(`${nf(game.time.hour, 2, 0)}:${nf(game.time.minute, 2, 0)}`, 50 * 16 + 20, 20);\n text(`${game.time.day + 1} ${['Spring', 'Summer', 'Autumn', 'Winter'][game.time.month]}, Year ${game.time.year}`, 50 * 16 + 20, 40);\n text(`${game.people.length} people`, 50 * 16 + 20, 60);\n\n stroke(255);\n noFill();\n line(50 * 16 + 190, 20, 50 * 16 + 200, 20);\n line(50 * 16 + 190, 100, 50 * 16 + 200, 100);\n line(50 * 16 + 200, 20, 50 * 16 + 200, 100);\n const zeroY = map(0, -15, 5, 100, 20);\n line(50 * 16 + 190, zeroY, 50 * 16 + 200, zeroY);\n const tempY = map(game.temp, -15, 5, 100, 20);\n if (tempY > zeroY) {\n fill(0, 0, 255);\n } else {\n fill(255, 0, 0);\n }\n noStroke();\n rect(50 * 16 + 190, tempY, 10, zeroY - tempY);\n textAlign(RIGHT, TOP);\n text(`${nf(game.temp, 1, 1)}`, 50 * 16 + 185, 90);\n\n\n if (mouseIsWithin(0, 0, 50 * 16, 50 * 16)) {\n const x = floor(mouseX / 16);\n const y = floor(mouseY / 16);\n noFill();\n stroke(255);\n rect(x * 16, y * 16, 16, 16);\n if (game.worldMouseX >= 0 && game.worldMouseY >= 0 && game.worldMouseX < game.world.size && game.worldMouseY < game.world.size) {\n const item = game.world.get(game.worldMouseX, game.worldMouseY);\n if (item) {\n \n stroke(255);\n fill(0);\n rect(50 * 16 + 10, 120, 200, 300);\n\n drawNiceItem(item.item.display, 50 * 16 + 20, 130, 64);\n\n textFont(Fonts.bold);\n textSize(16);\n fill(255);\n textAlign(LEFT, TOP);\n text(item.item.name, 50 * 16 + 20, 200);\n textSize(32);\n text(item.item.id, 50 * 16 + 90, 130)\n\n textSize(16);\n const age = game.tick * 60 - item.time;\n textFont(Fonts.regular);\n text(`Value: ${item.value}`, 50 * 16 + 20, 220);\n text(`Age: ${age / 60} ticks`, 50 * 16 + 20, 240);\n \n const usedIn = item.item.usedIn;\n const timed = usedIn.find(use => use.time);\n if (timed) {\n fill(255);\n noStroke();\n rect(50 * 16 + 20, 260, map(age, 0, timed.time, 0, 140), 10);\n stroke(255);\n noFill();\n rect(50 * 16 + 20, 260, 140, 10);\n \n fill(255);\n noStroke();\n if (timed.results.length > 2 || timed.results.length === 0) {\n text('?', 50 * 16 + 170, 255);\n } else {\n const result = Recipe.getResult(item, timed.results[0].origin);\n if (result) {\n drawItem(result.item.display, 50 * 16 + 170, 257);\n } else { \n text('?', 50 * 16 + 170, 255);\n }\n }\n }\n\n let y = 0;\n \n for (const recipe of usedIn) {\n if (recipe.time) {\n continue;\n }\n \n drawNiceItem(REGISTRY.getItem(recipe.getAnOrigin()).display, 50 * 16 + 20, 282 + y * 20);\n\n fill(255);\n textFont(Fonts.bold);\n if (recipe.actor) {\n stroke(255);\n noFill();\n beginShape(LINES);\n vertex(50 * 16 + 37, 290 + y * 20);\n vertex(50 * 16 + 47, 290 + y * 20);\n vertex(50 * 16 + 42, 285 + y * 20);\n vertex(50 * 16 + 42, 295 + y * 20);\n endShape();\n \n drawNiceItem(REGISTRY.getItem(recipe.getAnActor()).display, 50 * 16 + 50, 282 + y * 20);\n }\n\n stroke(255);\n noFill();\n beginShape(LINES);\n vertex(50 * 16 + 70, 290 + y * 20);\n vertex(50 * 16 + 100, 290 + y * 20);\n vertex(50 * 16 + 100, 290 + y * 20);\n vertex(50 * 16 + 95, 295 + y * 20);\n vertex(50 * 16 + 100, 290 + y * 20);\n vertex(50 * 16 + 95, 285 + y * 20);\n endShape();\n\n let resIndex = 0;\n for (const result of recipe.results) {\n const originResult = Recipe.getResult(new ItemState(recipe.getAnOrigin()), result.origin);\n drawNiceItem(REGISTRY.getItem(originResult ? originResult.item.id : 0).display, 50 * 16 + 110, 282 + (y + resIndex) * 20);\n if (result.actor.type === 'SameItem' || result.actor.type === 'NewItem') {\n stroke(255);\n noFill();\n beginShape(LINES);\n vertex(50 * 16 + 127, 290 + y * 20);\n vertex(50 * 16 + 137, 290 + y * 20);\n vertex(50 * 16 + 132, 285 + y * 20);\n vertex(50 * 16 + 132, 295 + y * 20);\n endShape();\n\n const actorResult = Recipe.getResult(new ItemState(recipe.getAnActor()), result.actor);\n drawNiceItem(REGISTRY.getItem(actorResult ? actorResult.item.id : 0).display, 50 * 16 + 140, 282 + (y + resIndex) * 20);\n }\n }\n\n y += recipe.results.length;\n\n }\n \n\n } else {\n stroke(255);\n fill(0);\n rect(50 * 16 + 10, 120, 200, 50);\n textFont(Fonts.regular);\n textSize(16);\n fill(255);\n textAlign(LEFT, TOP);\n noStroke();\n text('None', 50 * 16 + 20, 135);\n }\n\n }\n\n const chunkX = floor(game.worldMouseX / CHUNK_SIZE);\n const chunkY = floor(game.worldMouseY / CHUNK_SIZE);\n if (chunkX >= 0 && chunkX < WORLD_SIZE && chunkY >= 0 && chunkY < WORLD_SIZE) {\n textAlign(RIGHT, TOP);\n fill(255);\n textSize(14);\n textFont(Fonts.bold);\n const heat = game.world.heat[chunkY * WORLD_SIZE + chunkX];\n text('Heat: ' + nf(heat, 1, 2), 50 * 16 + 200, 135);\n textSize(12);\n if (heat > game.temp) {\n fill(255, 0, 0);\n } else {\n fill(0, 0, 255);\n }\n text(nf(heat - game.temp, 1, 2), 50 * 16 + 200, 150);\n \n }\n }\n\n textSize(16);\n\n if (!game.extraInfo) {\n textFont(Fonts.regular);\n fill(255);\n noStroke();\n textAlign(LEFT, TOP);\n text('Press Q for extra info', 50 * 16 + 20, 420);\n return;\n }\n\n stroke(255);\n noFill();\n rect(50 * 16 + 220, 10, 200, 200);\n rect(50 * 16 + 220, 220, 200, 200);\n rect(50 * 16 + 220, 430, 510, 370);\n\n fill(255);\n noStroke();\n textFont(Fonts.bold);\n textAlign(LEFT, TOP);\n text('Groups', 50 * 16 + 230, 20);\n text('Top', 50 * 16 + 230, 230);\n text('Stats', 50 * 16 + 230, 440);\n \n for (let i = 0; i < game.groups.length; i += 1) {\n textAlign(LEFT, TOP);\n textFont(Fonts.regular);\n text(game.groups[i], 50 * 16 + 230, 40 + i * 20);\n\n textFont(Fonts.bold);\n textAlign(RIGHT, TOP);\n text(game.people.reduce((acc, person) => person.surname === game.groups[i] ? acc + 1 : acc, 0), 50 * 16 + 410, 40 + i * 20);\n\n if (mouseIsWithin(50 * 16 + 230, 40 + i * 20, 180, 20) && input.mouse[LEFT] === 1) {\n jumpToPerson(game.people.find(person => person.surname === game.groups[i] && person.id !== game.selectedPerson));\n }\n }\n\n const maxScore = game.people.reduce((acc, person) => max(acc, person.score), 0);\n const topScorers = game.people.sort((a, b) => b.score - a.score).slice(0, 5);\n for (let i = 0; i < topScorers.length; i += 1) {\n const person = topScorers[i];\n fill(255);\n textAlign(LEFT, TOP);\n textFont(Fonts.regular);\n textSize(12);\n text(person.fullName, 50 * 16 + 250, 250 + i * 30);\n \n textFont(Fonts.bold);\n textAlign(RIGHT, TOP);\n textSize(16);\n text(Math.round(person.score), 50 * 16 + 410, 250 + i * 30);\n\n drawNiceItem(person.display, 50 * 16 + 230, 250 + i * 30, 16);\n\n stroke(255);\n noFill();\n rect(50 * 16 + 230, 270 + i * 30, 180, 5);\n\n noStroke();\n fill(255);\n rect(50 * 16 + 230, 270 + i * 30, map(person.score, 0, maxScore, 0, 180), 5);\n\n if (mouseIsWithin(50 * 16 + 230, 250 + i * 30, 180, 20) && input.mouse[LEFT] === 1) {\n jumpToPerson(person);\n }\n }\n\n fill(255);\n noStroke();\n textAlign(LEFT, TOP);\n textSize(16);\n textFont(Fonts.bold);\n text('Deepest', 50 * 16 + 230, 460);\n textFont(Fonts.regular);\n if (game.deepestItemDepth > 0) {\n drawNiceNoun({ type: 'thing', data: { selector: { conditions: [{ type: 'Is', data: game.deepestItem }] } } }, 50 * 16 + 300, 460);\n \n const person = game.people.find(person => person.fullName === game.deepestItemCredit);\n if (person) {\n drawNiceNoun({ type: 'person', data: { id: person.id }}, 50 * 16 + 320, 460);\n } else {\n textFont(Fonts.regular);\n text('dead', 50 * 16 + 280, 460)\n }\n textFont(Fonts.bold);\n fill(255);\n text(`(${game.deepestItemDepth})`, 50 * 16 + 370, 460);\n } else {\n text('none', 50 * 16 + 300, 460);\n }\n\n const topCrafters = Object.entries(game.itemsCrafted).sort((a, b) => b[1] - a[1]).slice(0, 15);\n const mostCrafted = topCrafters.reduce((acc, [_, count]) => max(acc, count), 0);\n for (let i = 0; i < topCrafters.length; i += 1) {\n const [id, count] = topCrafters[i];\n drawNiceNoun({ type: 'thing', data: { selector: { conditions: [{ type: 'Is', data: +id }] } } }, 50 * 16 + 230, 490 + i * 20);\n\n fill(255);\n textFont(Fonts.bold);\n textAlign(RIGHT, TOP);\n textSize(16);\n text(count, 50 * 16 + 410, 490 + i * 20);\n\n stroke(255);\n noFill();\n rect(50 * 16 + 250, 495 + i * 20, 120, 5);\n\n noStroke();\n fill(255);\n rect(50 * 16 + 250, 495 + i * 20, map(count, 0, mostCrafted, 0, 120), 5);\n }\n\n textFont(Fonts.bold);\n textAlign(LEFT, TOP);\n text('Yummy Foods', 50 * 16 + 430, 460);\n \n const topFoods = Object.entries(game.foodEaten).sort((a, b) => b[1] - a[1]).slice(0, 15);\n const mostEaten = topFoods.reduce((acc, [_, count]) => max(acc, count), 0);\n for (let i = 0; i < topFoods.length; i += 1) {\n const [id, count] = topFoods[i];\n drawNiceNoun({ type: 'thing', data: { selector: { conditions: [{ type: 'Is', data: +id }] } } }, 50 * 16 + 430, 490 + i * 20);\n\n fill(255);\n textFont(Fonts.bold);\n textAlign(RIGHT, TOP);\n textSize(16);\n text(count, 50 * 16 + 610, 490 + i * 20);\n\n stroke(255);\n noFill();\n rect(50 * 16 + 450, 495 + i * 20, 120, 5);\n\n noStroke();\n fill(255);\n rect(50 * 16 + 450, 495 + i * 20, map(count, 0, mostEaten, 0, 120), 5);\n }\n \n\n const selected = game.people.find(person => person.id === game.selectedPerson);\n if (selected) {\n // draw view rectangle\n fill(255, 10);\n noStroke();\n rect(selected.x * 16 - game.camera.x * 16 - 9 * 16, selected.y * 16 - game.camera.y * 16 - 9 * 16, 19 * 16, 19 * 16);\n\n if (selected.short['goto'] != null) {\n stroke(255);\n noFill();\n ellipse((selected.short['goto'].x - game.camera.x) * 16 + 8, (selected.short['goto'].y - game.camera.y) * 16 + 8, 4, 4);\n }\n\n stroke(255);\n fill(0);\n rect(50 * 16 + 10, 430, 200, 300);\n noStroke();\n fill(255);\n drawNiceItem(selected.display, 50 * 16 + 20, 440, 64);\n textFont(Fonts.bold);\n textSize(16);\n fill(255);\n textAlign(LEFT, TOP);\n text(selected.name, 50 * 16 + 90, 440);\n fill(COLORS[selected.color]);\n text(selected.surname, 50 * 16 + 90, 460);\n\n textFont(Fonts.regular);\n fill(255);\n text(`Age: ${nf((game.tick - selected.born) / 4 / 30 / 24 / 60, 0, 4)} years`, 50 * 16 + 20, 510);\n\n fill(150, 0, 0);\n rect(50 * 16 + 20, 540, map(selected.health, 0, 100, 0, 140), 10);\n text(Math.round(selected.health), 50 * 16 + 170, 535);\n stroke(255);\n noFill();\n rect(50 * 16 + 20, 540, 140, 10);\n\n noStroke();\n fill(0, 150, 0);\n rect(50 * 16 + 20, 560, map(selected.hunger, 0, 100, 0, 140), 10);\n text(Math.round(selected.hunger), 50 * 16 + 170, 555);\n stroke(255);\n noFill();\n rect(50 * 16 + 20, 560, 140, 10);\n\n noStroke();\n fill(0, 0, 200);\n rect(50 * 16 + 20, 580, 30, 10);\n fill(0, 0, 100);\n rect(50 * 16 + 50, 580, 30, 10);\n\n fill(100, 0, 0);\n rect(50 * 16 + 100, 580, 30, 10);\n fill(200, 0, 0);\n rect(50 * 16 + 130, 580, 30, 10);\n\n stroke(255);\n noFill();\n rect(50 * 16 + 20, 580, 140, 10);\n let tempX = map(selected.temperature, -15, 15, 0, 1);\n noFill();\n stroke(tempX * 255, 0, tempX * -255 + 255);\n line(50 * 16 + 20 + tempX * 140, 580, 50 * 16 + 20 + tempX * 140, 590);\n triangle(50 * 16 + 20 + tempX * 140 - 5, 595, 50 * 16 + 20 + tempX * 140 + 5, 595, 50 * 16 + 20 + tempX * 140, 590);\n \n noStroke();\n fill(tempX * 255, 0, tempX * -255 + 255);\n text(Math.round(selected.temperature * 10) / 10, 50 * 16 + 170, 575);\n\n stroke(255);\n noFill();\n rect(50 * 16 + 20, 600, 140, 10);\n\n noStroke();\n colorMode(HSB, 255);\n fill((millis() / 10) % 255, 255, 255);\n text(Math.round(selected.score), 50 * 16 + 170, 595);\n rect(50 * 16 + 20, 600, map(selected.score, 0, maxScore, 0, 140), 10);\n colorMode(RGB);\n \n stroke(255);\n noFill();\n rect(50 * 16 + 20, 620, 140, 10);\n\n const totalNeeds = Object.values(selected.needs).reduce((acc, need) => acc + need, 0);\n let x = 0;\n for (const need in selected.needs) {\n const w = map(selected.needs[need], 0, totalNeeds, 0, 140);\n switch (need) {\n case 'hunger':\n fill(0, 150, 0);\n break;\n case 'temperature':\n fill(0, 0, 200);\n break;\n case 'health':\n fill(150, 0, 0);\n break;\n case 'boredom':\n fill(100);\n break;\n }\n rect(50 * 16 + 20 + x, 620, w, 10);\n x += w;\n }\n\n stroke(255);\n fill(0);\n rect(50 * 16 + 430, 10, 300, 410);\n\n textFont(Fonts.bold);\n textSize(16);\n fill(255);\n noStroke();\n textAlign(LEFT, TOP);\n text('Objectives', 50 * 16 + 440, 20);\n\n let y = 0;\n for(const objective of selected.objectives) {\n textAlign(LEFT, TOP);\n drawObjective(objective, 50 * 16 + 450, 40 + y * 20);\n stroke(100);\n noFill();\n const children = objective.type === 'obtain' ? objective.data.children : [];\n for (const child of children) {\n const y2 = child;\n const mid = (y + y2) / 2;\n const diff = y2 - y - 1;\n bezier(\n 50 * 16 + 445, 50 + y * 20,\n 50 * 16 + 440 - diff * 5, 50 + mid * 20,\n 50 * 16 + 440 - diff * 5, 50 + mid * 20,\n 50 * 16 + 445, 50 + y2 * 20,\n );\n }\n y += 1;\n if (y >= 20) {\n break;\n }\n }\n } else {\n stroke(255);\n fill(0);\n rect(50 * 16 + 10, 430, 200, 50);\n noStroke();\n fill(255);\n textFont(Fonts.regular);\n textSize(16);\n textAlign(LEFT, TOP);\n text('None', 50 * 16 + 20, 445);\n }\n}"],"names":[],"version":3,"file":"index.663ab4d4.js.map","sourceRoot":"/__parcel_source_root/"}