317 lines
8.8 KiB
JavaScript
317 lines
8.8 KiB
JavaScript
// Classes and their color
|
|
let classes = [
|
|
['null', 0, 0, 0 ],
|
|
['water', 5, 30, 140],
|
|
['earth', 145, 90, 30 ],
|
|
['fire', 160, 20, 5 ],
|
|
['air', 60, 130, 200],
|
|
['stone', 70, 70, 70 ],
|
|
['energy', 240, 200, 20 ],
|
|
['life', 80, 165, 40 ],
|
|
['animal', 195, 65, 45 ],
|
|
['human', 240, 100, 10 ],
|
|
['death', 60, 90, 15 ],
|
|
['space', 20, 20, 30 ],
|
|
['wood', 70, 40, 0 ],
|
|
['food', 110, 50, 130],
|
|
['tools', 210, 200, 200],
|
|
['computer',160, 160, 170]
|
|
]
|
|
|
|
// Elements and their class
|
|
let elements = [
|
|
['Water', 'water'],
|
|
['Earth', 'earth'],
|
|
['Fire', 'fire'],
|
|
['Air', 'air'],
|
|
['Mud', 'earth'],
|
|
['Lava', 'fire'],
|
|
['Stone', 'stone'],
|
|
['Cloud', 'air'],
|
|
['Smoke', 'air'],
|
|
['Steam', 'air'],
|
|
['Sand', 'stone'],
|
|
['Rain', 'water'],
|
|
['Ocean', 'water'],
|
|
['Salt', 'stone'],
|
|
['Energy', 'energy'],
|
|
['Earthquake', 'earth'],
|
|
['Swamp', 'earth'],
|
|
['Life', 'life'],
|
|
['Algae', 'life'],
|
|
['Bird', 'animal'],
|
|
['Plant', 'life'],
|
|
['Mammal', 'animal'],
|
|
['Tree', 'life'],
|
|
['Glass', 'stone'],
|
|
['Brick', 'stone'],
|
|
['Monkey', 'animal'],
|
|
['Egg', 'life'],
|
|
['Phoenix', 'fire'],
|
|
['Human', 'human'],
|
|
['Love', 'human'],
|
|
['Clay', 'earth'],
|
|
['Wall', 'stone'],
|
|
['Family', 'human'],
|
|
['House', 'human'],
|
|
['Town', 'human'],
|
|
['City', 'human'],
|
|
['Metal', 'stone'],
|
|
['Electricity', 'energy'],
|
|
['Dust', 'earth'],
|
|
['Lightning', 'energy'],
|
|
['Atmosphere', 'air'],
|
|
['Planet', 'space'],
|
|
['Star', 'space'],
|
|
['Ash', 'stone'],
|
|
['Mountain', 'earth'],
|
|
['Volcano', 'fire'],
|
|
['Stick', 'wood'],
|
|
['Axe', 'tools'],
|
|
['Wood', 'wood'],
|
|
['Campfire', 'fire'],
|
|
['Wind', 'air'],
|
|
['Cold', 'air'],
|
|
['Seeds', 'life'],
|
|
['Grass', 'life'],
|
|
['Penguin', 'animal'],
|
|
['Ostrich', 'animal'],
|
|
['Chicken', 'animal'],
|
|
['Roast Chicken', 'food'],
|
|
['Pig', 'animal'],
|
|
['Bacon', 'food'],
|
|
['Ham', 'food'],
|
|
['Cow', 'animal'],
|
|
['Steak', 'food'],
|
|
['Wheat', 'life'],
|
|
['Flour', 'food'],
|
|
['Dough', 'food'],
|
|
['Bread', 'food'],
|
|
['Toast', 'food'],
|
|
['Blade', 'tools'],
|
|
['Knife', 'tools'],
|
|
['Shavings', 'wood'],
|
|
['Wood Pulp', 'wood'],
|
|
['Paper', 'tools'],
|
|
['Ice', 'water'],
|
|
['Snow', 'water'],
|
|
['Fish', 'animal'],
|
|
['Whale', 'animal'],
|
|
['Sheep', 'animal'],
|
|
['Worker', 'human'],
|
|
['Blacksmith', 'human'],
|
|
['Shepherd', 'human'],
|
|
['Farmer', 'human'],
|
|
['Wire', 'computer'],
|
|
['Robot', 'computer'],
|
|
['Computer', 'computer'],
|
|
['Network', 'computer'],
|
|
['Internet', 'computer'],
|
|
['Pet', 'animal'],
|
|
['Cat', 'animal'],
|
|
['Dog', 'animal'],
|
|
['Meme', 'computer'],
|
|
['Corpse', 'death'],
|
|
['Bone', 'death'],
|
|
['Zombie', 'death'],
|
|
['Alien', 'death'],
|
|
['Rainbow', 'air'],
|
|
['Unicorn', 'animal'],
|
|
['Bonfire', 'fire'],
|
|
['Storm', 'air'],
|
|
['Hurricane', 'air'],
|
|
['Tornado', 'air'],
|
|
['Potato', 'food'],
|
|
['Fruit', 'life'],
|
|
['Apple', 'food'],
|
|
['Watermelon', 'food'],
|
|
['Eggplant', 'food'],
|
|
['Crab', 'animal'],
|
|
['Milk', 'food'],
|
|
['Butter', 'food'],
|
|
['Forest', 'life'],
|
|
['Jungle', 'life'],
|
|
['Banana', 'food'],
|
|
['Skyscraper', 'human'],
|
|
['Goldfish', 'animal'],
|
|
['Wheel', 'wood'],
|
|
['Car', 'computer'],
|
|
['Book', 'tools'],
|
|
['Children', 'human'],
|
|
['School', 'human']
|
|
]
|
|
|
|
// Recipes: two inputs and some outputs
|
|
let recipes = [
|
|
['Water', 'Earth', ['Mud']],
|
|
['Fire', 'Earth', ['Lava']],
|
|
['Lava', 'Water', ['Stone']],
|
|
['Air', 'Water', ['Cloud']],
|
|
['Air', 'Fire', ['Smoke']],
|
|
['Stone', 'Water', ['Sand']],
|
|
['Water', 'Cloud', ['Rain']],
|
|
['Water', 'Water', ['Ocean']],
|
|
['Ocean', 'Fire', ['Salt']],
|
|
['Water', 'Fire', ['Steam', 'Energy']],
|
|
['Energy', 'Earth', ['Earthquake']],
|
|
['Mud', 'Water', ['Swamp']],
|
|
['Swamp', 'Energy', ['Life']],
|
|
['Life', 'Water', ['Algae']],
|
|
['Life', 'Air', ['Bird']],
|
|
['Algae', 'Earth', ['Plant']],
|
|
['Life', 'Earth', ['Mammal']],
|
|
['Plant', 'Air', ['Tree']],
|
|
['Sand', 'Fire', ['Glass']],
|
|
['Clay', 'Fire', ['Brick']],
|
|
['Tree', 'Mammal', ['Monkey']],
|
|
['Monkey', 'Fire', ['Human']],
|
|
['Bird', 'Stone', ['Egg']],
|
|
['Bird', 'Fire', ['Phoenix']],
|
|
['Monkey', 'Fire', ['Human']],
|
|
['Human', 'Human', ['Love']],
|
|
['Mud', 'Swamp', ['Clay']],
|
|
['Brick', 'Brick', ['Wall']],
|
|
['Human', 'Love', ['Family']],
|
|
['Wall', 'Family', ['House']],
|
|
['House', 'House', ['Town']],
|
|
['Town', 'Town', ['City']],
|
|
['Fire', 'Stone', ['Metal']],
|
|
['Metal', 'Energy', ['Electricity']],
|
|
['Air', 'Earth', ['Dust']],
|
|
['Fire', 'Air', ['Smoke']],
|
|
['Energy', 'Air', ['Lightning']],
|
|
['Air', 'Air', ['Atmosphere']],
|
|
['Atmosphere', 'Earth', ['Planet']],
|
|
['Planet', 'Fire', ['Star']],
|
|
['Tree', 'Fire', ['Ash']],
|
|
['Plant', 'Fire', ['Ash']],
|
|
['Earth', 'Earth', ['Mountain']],
|
|
['Lava', 'Mountain', ['Volcano']],
|
|
['Tree', 'Stone', ['Stick']],
|
|
['Stick', 'Stone', ['Axe']],
|
|
['Tree', 'Axe', ['Wood']],
|
|
['Wood', 'Fire', ['Campfire', 'Smoke']],
|
|
['Air', 'Atmosphere', ['Wind']],
|
|
['Wind', 'Water', ['Cold']],
|
|
['Life', 'Sand', ['Seeds']],
|
|
['Seeds', 'Earth', ['Grass']],
|
|
['Bird', 'Cold', ['Penguin']],
|
|
['Bird', 'Sand', ['Ostrich']],
|
|
['Earth', 'Bird', ['Chicken']],
|
|
['Fire', 'Chicken',['Roast Chicken']],
|
|
['Mammal', 'Mud', ['Pig']],
|
|
['Pig', 'Fire', ['Ham']],
|
|
['Pig', 'Smoke', ['Bacon']],
|
|
['Mammal', 'Grass', ['Cow']],
|
|
['Cow', 'Fire', ['Steak']],
|
|
['Grass', 'Air', ['Wheat']],
|
|
['Wheat', 'Stone', ['Flour']],
|
|
['Flour', 'Water', ['Dough']],
|
|
['Dough', 'Fire', ['Bread']],
|
|
['Bread', 'Fire', ['Toast']],
|
|
['Metal', 'Stone', ['Blade']],
|
|
['Blade', 'Stick', ['Knife']],
|
|
['Knife', 'Wood', ['Shavings']],
|
|
['Water', 'Shavings', ['Wood Pulp']],
|
|
['Fire', 'Wood Pulp', ['Paper']],
|
|
['Cold', 'Water', ['Ice']],
|
|
['Cold', 'Rain', ['Snow']],
|
|
['Ocean', 'Life', ['Fish']],
|
|
['Ocean', 'Mammal', ['Whale']],
|
|
['Mammal', 'Cloud', ['Sheep']],
|
|
['Human', 'Axe', ['Worker']],
|
|
['Worker', 'Metal', ['Blacksmith']],
|
|
['Worker', 'Sheep', ['Shepherd']],
|
|
['Worker', 'Wheat', ['Farmer']],
|
|
['Metal', 'Electricity', ['Wire']],
|
|
['Wire', 'Wire', ['Computer']],
|
|
['Human', 'Computer', ['Robot']],
|
|
['Computer', 'Computer', ['Network']],
|
|
['Network','Network',['Internet']],
|
|
['Human', 'Mammal', ['Pet']],
|
|
['Pet', 'Milk', ['Cat']],
|
|
['Pet', 'Bone', ['Dog']],
|
|
['Cat', 'Internet', ['Meme']],
|
|
['Human', 'Fire', ['Corpse']],
|
|
['Corpse', 'Fire', ['Bone', 'Ash']],
|
|
['Corpse', 'Life', ['Zombie']],
|
|
['Planet', 'Life', ['Alien']],
|
|
['Star', 'Rain', ['Rainbow']],
|
|
['Rainbow','Mammal', ['Unicorn']],
|
|
['Fire', 'Fire', ['Bonfire']],
|
|
['Rain', 'Rain', ['Storm']],
|
|
['Storm', 'Wind', ['Hurricane']],
|
|
['Hurricane','Wind', ['Tornado']],
|
|
['Plant', 'Earth', ['Potato']],
|
|
['Plant', 'Plant', ['Fruit']],
|
|
['Fruit', 'Tree', ['Apple']],
|
|
['Fruit', 'Water', ['Watermelon']],
|
|
['Fruit', 'Egg', ['Eggplant']],
|
|
['Fish', 'Earth', ['Crab']],
|
|
['Cow', 'Water', ['Milk']],
|
|
['Milk', 'Energy', ['Butter']],
|
|
['Tree', 'Tree', ['Forest']],
|
|
['Forest', 'Monkey', ['Jungle']],
|
|
['Fruit', 'Monkey', ['Banana']],
|
|
['Metal', 'City', ['Skyscraper']],
|
|
['Fish', 'Pet', ['Goldfish']],
|
|
['Energy', 'Wood', ['Wheel']]
|
|
['Wheel', 'Metal', ['Car']],
|
|
['Paper', 'Paper', ['Book']],
|
|
['Family', 'Love', ['Children']],
|
|
['House', 'Children', ['School']]
|
|
]
|
|
|
|
// Get the outputs when two elements are combined
|
|
function getOutputs(e1, e2) {
|
|
for(let r = 0; r < recipes.length; r++) {
|
|
if((recipes[r][0] == e1 && recipes[r][1] == e2) || (recipes[r][0] == e2 && recipes[r][1] == e1)) {
|
|
return recipes[r][2];
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Get the color of a class
|
|
function getColor(clazz) {
|
|
for(let c = 0; c < classes.length; c++) {
|
|
if(classes[c][0] == clazz) {
|
|
return [classes[c][1], classes[c][2], classes[c][3]];
|
|
}
|
|
}
|
|
}
|
|
|
|
// Get the class of an element
|
|
function getClass(element) {
|
|
let clazz = classes[0][0];
|
|
for(let e = 0; e < elements.length; e++) {
|
|
if(elements[e][0] == element) {
|
|
clazz = elements[e][1]
|
|
}
|
|
}
|
|
return clazz;
|
|
}
|
|
|
|
// The help text shown when 'q' is pressed
|
|
let helpText =
|
|
'Click on an element to select it and then click' +
|
|
' on another one to combine them. Try to get all ' +
|
|
elements.length + '!' +
|
|
'\n \n' +
|
|
'A hint will select an element that you can combine' +
|
|
' with another element you have to create something' +
|
|
' you do not have.' +
|
|
'\n \n' +
|
|
'Sorting modes will sort your elements either by' +
|
|
' order added, alphabetically, by class, or randomly.' +
|
|
'\n \n' +
|
|
'Some elements can be combined with themselves. Some' +
|
|
' elements cannot be used in any combinations.' +
|
|
'\n' +
|
|
'\n Q - View this help message' +
|
|
'\n M - Change sorting mode' +
|
|
'\n T - Show/hide time' +
|
|
'\n H - Use a hint' +
|
|
'\n Enter - Recalculate' +
|
|
'\n Mouse Wheel - Scrolling' +
|
|
'\n X - Clear savedata';
|