diff --git a/contributors.html b/contributors.html
index ca02f74c..b55909d6 100644
--- a/contributors.html
+++ b/contributors.html
@@ -128,6 +128,10 @@
SHARK GAME: NEW FRONTIERS
Adr |
Playtester, Code contributor |
+
+ | Three Eels in a Jellyfish Coat |
+ Concept Artist, Developer |
+
diff --git a/img/sprites.png b/img/sprites.png
index 3942a9d3..89564d4c 100644
Binary files a/img/sprites.png and b/img/sprites.png differ
diff --git a/js/data/aspects.js b/js/data/aspects.js
index 6c154536..5b7d655c 100644
--- a/js/data/aspects.js
+++ b/js/data/aspects.js
@@ -231,6 +231,115 @@ SharkGame.Aspects = {
tree.handleClickedAspect(this);
},
},
+ pathOfLoyalty: { // old name: pathOfResearch
+ posX: 450,
+ posY: 450,
+ width: 40,
+ height: 40,
+
+ max: 10,
+ level: 0,
+ name: "Path of Loyalty",
+ description: "Good leadership attracts lasting effects, and undying loyalty.",
+ // old desc: "Knowledge leads to curiosity, and curiosity leads to progress, and progress leads to ascension."
+ getCost(level) {
+ return 3 * level + 2;
+ },
+ getEffect(level) {
+ return (
+ "Multiply the income of " +
+ sharktext.getResourceName("sand", false, 69, sharkcolor.getElementColor("tooltipbox", "background-color")) +
+ " by " +
+ (level + 1) +
+ "×."
+ );
+ },
+ getUnlocked() {
+ if (!SharkGame.Aspects.pathOfEnlightenment.level) {
+ return "???";
+ }
+ if (gateway.completedWorlds.length < 3) {
+ return "Scout at least two worlds to unlock this aspect.";
+ }
+ },
+ prerequisites: ["apotheosis"],
+ clicked(_event) {
+ tree.handleClickedAspect(this);
+ },
+ apply(when) {
+ if (when === "init") {
+ res.applyModifier("aspectResourceIncomeBoost", "sand", this.level + 1);
+ // res.applyModifier("pathOfLoyalty", "ray", this.level + 0.5);
+ // res.applyModifier("pathOfLoyalty", "sandDigger", this.level + 1);
+ // res.applyModifier("pathOfLoyalty", "eel", this.level + 1);
+ // res.applyModifier("pathOfLoyalty", "sifter", this.level + 0.5);
+ // res.applyModifier("pathOfLoyalty", "urchin", this.level + 0.5);
+ // res.applyModifier("pathOfLoyalty", "miller", this.level + 1);
+ // res.applyModifier("pathOfLoyalty", "pulveriser", this.level + 1);
+ }
+ },
+ },
+ arcaneAssistance: {
+ posX: 500,
+ posY: 550,
+ width: 40,
+ height: 40,
+
+ max: 10,
+ level: 0,
+ name: "Arcane Assistance",
+ description: "Curiosity yields risk, but is the seed of lasting progress.",
+ getCost(level) {
+ return 3 * level + 2;
+ },
+ getEffect(level) {
+ return (
+ "Start with " +
+ 1 * 2 ** level +
+ " " +
+ sharktext.getResourceName("sacrifice", false, 69, sharkcolor.getElementColor("tooltipbox", "background-color")) +
+ ". Each world will receive different resource boosts."
+ );
+ },
+ getUnlocked() {
+ return gateway.completedWorlds.includes("shrouded") ? "" : "Complete the Shrouded worldtype to unlock this aspect.";
+ },
+ prerequisites: ["pathOfLoyalty"],
+ clicked(_event) {
+ tree.handleClickedAspect(this);
+ },
+ apply(when) {
+ if (when === "init" && res.getResource("kelpAspectSacrifice") === 0 && !SharkGame.flags.arcaneAssistanceApplied) {
+ const base = 1 * 2 ** this.level;
+ switch (world.worldType) {
+ case "shrouded":
+ res.changeResource("jellyAspectSacrifice", base);
+ break;
+ case "haven":
+ res.changeResource("coralAspectSacrifice", base);
+ break;
+ case "volcanic":
+ res.changeResource("volcanicAspectSacrifice", base);
+ break;
+ case "tempestuous":
+ res.changeResource("seagrassAspectSacrifice", base);
+ break;
+ case "marine":
+ res.changeResource("clamAspectSacrifice", base);
+ break;
+ case "abandoned":
+ res.changeResource("spongeAspectSacrifice", base);
+ break;
+ case "shore":
+ res.changeResource("seagrassAspectSacrifice", base);
+ break;
+ default:
+ res.changeResource("kelpAspectSacrifice", base);
+ }
+ SharkGame.flags.arcaneAssistanceApplied = true;
+ }
+ },
+ },
pathOfTime: {
posX: 450,
posY: 250,
@@ -841,6 +950,174 @@ SharkGame.Aspects = {
tree.handleClickedAspect(this);
},
},
+ dancingLeaves: {
+ posX: 330,
+ posY: 440,
+ width: 40,
+ height: 40,
+
+ max: 10,
+ level: 0,
+ name: "Dancing Leaves",
+ description: "Faceless. Mindless. Boundless.",
+ getCost(level) {
+ return 3 * level + 2;
+ },
+ getEffect(level) {
+ return (
+ "Multiply the income of " +
+ sharktext.getResourceName("kelp", false, 69, sharkcolor.getElementColor("tooltipbox", "background-color")) +
+ " or " +
+ sharktext.getResourceName("seagrass", false, 69, sharkcolor.getElementColor("tooltipbox", "background-color")) +
+ " by " +
+ (level + 1) +
+ "×."
+ );
+ },
+ getUnlocked() {},
+ prerequisites: ["apotheosis"],
+ clicked(_event) {
+ tree.handleClickedAspect(this);
+ },
+ apply(when) {
+ if (when === "init") {
+ res.applyModifier("aspectResourceIncomeBoost", "kelp", this.level + 1);
+ res.applyModifier("aspectResourceIncomeBoost", "seagrass", this.level + 1);
+ // res.applyModifier("dancingLeaves", "planter", this.level + 1);
+ // res.applyModifier("dancingLeaves", "stormgoer", this.level + 1);
+ // res.applyModifier("dancingLeaves", "stabilizer", this.level + 1);
+ // res.applyModifier("dancingLeaves", "seagrassFarm", this.level + 1);
+ // res.applyModifier("dancingLeaves", "urchin", this.level + 0.5);
+ // res.applyModifier("dancingLeaves", "connoisseur", this.level + 1);
+ // res.applyModifier("dancingLeaves", "seagrassPicker", this.level + 1);
+ // res.applyModifier("dancingLeaves", "shoreQueller", this.level + 0.25);
+ }
+ },
+ },
+ beastAndBloom: {
+ posX: 315,
+ posY: 500,
+ width: 40,
+ height: 40,
+
+ max: 4,
+ level: 0,
+ name: "Beast and Bloom",
+ description: "There's a lot to learn from simplicity.",
+ core: true,
+ getCost(level) {
+ return 2 * level + 3;
+ },
+ getEffect(level) {
+ return (
+ "Gain " +
+ (level + 1) +
+ "x more " +
+ sharktext.getResourceName("science", false, 69, sharkcolor.getElementColor("tooltipbox", "background-color")) +
+ " from dissections."
+ );
+ },
+ getUnlocked() {},
+ prerequisites: ["dancingLeaves"],
+ clicked(_event) {
+ tree.handleClickedAspect(this);
+ },
+ },
+ nativeKnowledge: {
+ posX: 444,
+ posY: 595,
+ width: 40,
+ height: 40,
+
+ max: 10,
+ level: 0,
+ name: "Native Knowledge",
+ description: "Those in their element are the best to learn from.",
+ getCost(level) {
+ return 2 * level + 2;
+ },
+ getEffect(level) {
+ return (
+ "Multiply the efficiency of a world's unique frenzy members by " +
+ (level + 1) +
+ "×."
+ );
+ },
+ getUnlocked() {
+ if (!SharkGame.Aspects.pathOfEnlightenment.level) {
+ return "???";
+ }
+ if (gateway.completedWorlds.length < 3) {
+ return "Scout at least two worlds to unlock this aspect.";
+ }
+ },
+ prerequisites: ["apotheosis"],
+ clicked(_event) {
+ tree.handleClickedAspect(this);
+ },
+ apply(when) {
+ if (when === "init") {
+ res.applyModifier("pathOfIndustry", "octopus", this.level + 1);
+ res.applyModifier("pathOfIndustry", "squid", this.level + 1);
+ res.applyModifier("pathOfIndustry", "urchin", this.level + 1);
+ res.applyModifier("pathOfIndustry", "dolphin", this.level + 1);
+ res.applyModifier("pathOfIndustry", "whale", this.level + 1);
+ res.applyModifier("pathOfIndustry", "billfish", this.level + 1);
+ res.applyModifier("pathOfIndustry", "chimaera", this.level + 1);
+ res.applyModifier("pathOfIndustry", "eel", this.level + 1);
+ res.applyModifier("pathOfIndustry", "lobster", this.level + 1);
+ res.applyModifier("pathOfIndustry", "shrimp", this.level + 1);
+ // res.applyModifier("pathOfIndustry", "mudskipper", this.level + 1);
+ // res.applyModifier("pathOfIndustry", "caracara", this.level + 1);
+ }
+ },
+ },
+ buriedBlueprints: {
+ posX: 555,
+ posY: 676,
+ width: 40,
+ height: 40,
+
+ max: 10,
+ level: 0,
+ name: "Buried Blueprints",
+ description: "Every world has its secrets, waiting to be uncovered.",
+ getCost(level) {
+ return 2 * level + 2;
+ },
+ getEffect(level) {
+ return (
+ "Multiply the efficiency of a world's unique machines by " +
+ (level + 1) +
+ "×."
+ );
+ },
+ getUnlocked() {},
+ prerequisites: ["nativeKnowledge"],
+ clicked(_event) {
+ tree.handleClickedAspect(this);
+ },
+ apply(when) {
+ if (when === "init") {
+ res.applyModifier("pathOfIndustry", "heater", this.level + 1);
+ res.applyModifier("pathOfIndustry", "tirelessCrafter", this.level + 1);
+ res.applyModifier("pathOfIndustry", "kelpCultivator", this.level + 1);
+ res.applyModifier("pathOfIndustry", "crimsonCombine", this.level + 1);
+ res.applyModifier("pathOfIndustry", "clamCollector", this.level + 1);
+ res.applyModifier("pathOfIndustry", "sprongeSmelter", this.level + 1);
+ res.applyModifier("pathOfIndustry", "eggBrooder", this.level + 1);
+ res.applyModifier("pathOfIndustry", "seabedStripper", this.level + 1);
+ res.applyModifier("pathOfIndustry", "calciniumConverter", this.level + 1);
+ res.applyModifier("pathOfIndustry", "clamScavenger", this.level + 1);
+ // res.applyModifier("pathOfIndustry", "shoreQueller", this.level + 1);
+ // res.applyModifier("pathOfIndustry", "driftwoodSnarer", this.level + 1);
+ // res.applyModifier("pathOfIndustry", "hardbarkSmith", this.level + 1);
+ res.applyModifier("pathOfIndustry", "shoveler", this.level + 1);
+ res.applyModifier("pathOfIndustry", "farmer", this.level + 1);
+ res.applyModifier("pathOfIndustry", "researcher", this.level + 1);
+ }
+ },
+ },
// deprecated
diff --git a/js/data/homeactions.js b/js/data/homeactions.js
index 89207c9e..000f0b68 100644
--- a/js/data/homeactions.js
+++ b/js/data/homeactions.js
@@ -300,7 +300,9 @@ SharkGame.HomeActions = {
name: "Study sea apples",
effect: {
resource: {
- science: 4,
+ get science() {
+ return 4 + 4 * SharkGame.Aspects.beastAndBloom.level;
+ },
},
},
cost: [{ resource: "seaApple", costFunction: "constant", priceIncrease: 1 }],
@@ -317,7 +319,7 @@ SharkGame.HomeActions = {
"This is perhaps maybe insightful!",
"Why are we even doing this? Who knows! Science!",
"What is even the point of these things? Why are they named for fruit? They're squirming!",
- "Results still inconclusive! Unsurpsingly...",
+ "Results still inconclusive! Unsurprisingly...",
],
helpText: "Dissect the sea apples our kelp attracts to gain additional science. Research!",
},
@@ -1877,7 +1879,7 @@ SharkGame.HomeActions = {
effect: {
resource: {
get science() {
- return 4 * (1 + 0.01 * res.getResource("historian"));
+ return (4 * SharkGame.Aspects.beastAndBloom.level) + 4 * (1 + 0.01 * res.getResource("historian"));
},
},
},
@@ -2618,7 +2620,9 @@ SharkGame.HomeActions = {
name: "Dismantle jellyfish",
effect: {
resource: {
- science: 4,
+ get science() {
+ return 4 + 4 * SharkGame.Aspects.beastAndBloom.level;
+ },
},
},
cost: [{ resource: "jellyfish", costFunction: "constant", priceIncrease: 1 }],
@@ -3250,7 +3254,9 @@ SharkGame.HomeActions = {
name: "Study sea apples",
effect: {
resource: {
- science: 4,
+ get science() {
+ return 4 + 4 * SharkGame.Aspects.beastAndBloom.level;
+ },
},
},
cost: [{ resource: "seaApple", costFunction: "constant", priceIncrease: 1 }],
@@ -4296,7 +4302,7 @@ SharkGame.HomeActions = {
effect: {
resource: {
get science() {
- return SharkGame.Upgrades.purchased.includes("supernaturalSeagrass") ? 10 : 1;
+ return SharkGame.Upgrades.purchased.includes("supernaturalSeagrass") ? 10 * SharkGame.Aspects.beastAndBloom.level + 10 : 1 * SharkGame.Aspects.beastAndBloom.level + 1;
},
},
},
@@ -4313,7 +4319,7 @@ SharkGame.HomeActions = {
"The cause of science is advanced!",
"This is perhaps maybe insightful!",
"Why are we even doing this? Who knows! Science!",
- "Results still inconclusive! Unsurpsingly...",
+ "Results still inconclusive! Unsurprisingly...",
"Quick question. What's a flower?",
"At least it's not gross.",
"We would learn a lot more from these if they weren't so absolutely tiny.",
diff --git a/js/data/modifiertypes.js b/js/data/modifiertypes.js
index 1144ddcf..aab88454 100644
--- a/js/data/modifiertypes.js
+++ b/js/data/modifiertypes.js
@@ -587,6 +587,28 @@ SharkGame.ModifierTypes = {
return input * (input > 0 && out !== "tar" ? genDegree : 1);
},
},
+ aspectResourceIncomeBoost: { // used for aspects which boost the generation of a base resource, e.g. sand or kelp
+ defaultValue: 1,
+ apply(current, degree, boostedResource) {
+ SharkGame.ResourceMap.forEach((generatingResource) => {
+ $.each(generatingResource.income, (generatedResource, amount) => {
+ if (generatedResource === boostedResource && amount > 0) {
+ generatingResource.income[generatedResource] = amount * degree;
+ }
+ });
+ });
+ return current * degree;
+ },
+ effectDescription(degree, resource, background) {
+ return "All " + sharktext.getResourceName(resource, undefined, undefined, background) + " production × " + degree;
+ },
+ getEffect(_genDegree, outDegree, gen, out) {
+ return SharkGame.ResourceMap.get(gen).income[out] > 0 && out !== "tar" ? outDegree : 1;
+ },
+ applyToInput(input, _genDegree, outDegree, _gen, _out) {
+ return input > 0 ? input * outDegree : input;
+ },
+ },
constructedConception: {
defaultValue: 1,
apply(current, degree, resource) {
diff --git a/js/data/resourcetable.js b/js/data/resourcetable.js
index 91c4e514..960c1d6b 100644
--- a/js/data/resourcetable.js
+++ b/js/data/resourcetable.js
@@ -113,6 +113,90 @@ SharkGame.ResourceTable = {
},
},
+ // SAVED FOR LATER
+
+ coralglass: { // machine-making material; archived from original game -- ThreeEels
+ name: "coralglass",
+ singleName: "coralglass",
+ desc: "null",
+ color: "#FDD5B4",
+ value: 70,
+ },
+ filtrate: { // residue for the frenzy recycler
+ name: "filtrate",
+ singleName: "filtrate",
+ desc: "Eldritch alchemy.",
+ color: "1F1E1E",
+ value: 1,
+ },
+ knowledge: { // an idea base had
+ name: "knowledge",
+ singleName: "knowledge",
+ desc: "Fragments of thought.",
+ color: "#17BFD1",
+ value: 5,
+ },
+ joy: { // only accessible with the cheats
+ name: "joy",
+ singleName: "joy",
+ desc: "Distributed dopamine.",
+ color: "#FFDF22",
+ value: 5,
+ },
+
+
+ // ASPECT SACRIFICES (for Arcane Assistance aspect)
+
+ jellyAspectSacrifice: {
+ name: "sacrifices
",
+ singleName: "sacrifice
",
+ desc: "The cost of progress.",
+ color: "#FFD6FC",
+ value: 1,
+ },
+ clamAspectSacrifice: {
+ name: "sacrifices
",
+ singleName: "sacrifice
",
+ desc: "The cost of progress.",
+ color: "#FFD6FC",
+ value: 1,
+ },
+ spongeAspectSacrifice: {
+ name: "sacrifices
",
+ singleName: "sacrifice
",
+ desc: "The cost of progress.",
+ color: "#FFD6FC",
+ value: 1,
+ },
+ volcanicAspectSacrifice: {
+ name: "sacrifices
", // text in grotto was behaving weirdly
+ singleName: "sacrifice
",
+ desc: "The cost of progress.",
+ color: "#FFD6FC",
+ value: 1,
+ },
+ seagrassAspectSacrifice: {
+ name: "sacrifices
", // looks like they all need it
+ singleName: "sacrifice
",
+ desc: "The cost of progress.",
+ color: "#FFD6FC",
+ value: 1,
+ },
+ coralAspectSacrifice: {
+ name: "sacrifices
",
+ singleName: "sacrifice
",
+ desc: "The cost of progress.",
+ color: "#FFD6FC",
+ value: 1,
+ },
+ kelpAspectSacrifice: {
+ name: "sacrifices
",
+ singleName: "sacrifice
",
+ desc: "The cost of progress.",
+ color: "#FFD6FC",
+ value: 1,
+ },
+
// MAGICAL
sacrifice: {
@@ -534,16 +618,6 @@ SharkGame.ResourceTable = {
value: 1500,
},
- // SAVED FOR LATER
-
- coralglass: {
- name: "coralglass",
- singleName: "coralglass",
- desc: "null",
- color: "#FDD5B4",
- value: 70,
- },
-
// volcanic
shrimp: {
@@ -1303,6 +1377,13 @@ SharkGame.GeneratorIncomeAffectorsOriginal = {
fishMachine: 0.01,
},
},
+ /* joy: {
+ multiply: {
+ shark: 0.01,
+ ray: 0.01,
+ crab: 0.01,
+ },
+ }, */
// cool tooltip test crab
/* crab: {
exponentiate: {
@@ -1318,6 +1399,62 @@ SharkGame.GeneratorIncomeAffected = {
};
SharkGame.ResourceIncomeAffectorsOriginal = {
+ jellyAspectSacrifice: {
+ multiply: {
+ fish: 0.001,
+ sand: 0.001,
+ crystal: 0.001,
+ jellyfish: 0.001,
+ },
+ },
+ clamAspectSacrifice: {
+ multiply: {
+ fish: 0.001,
+ sand: 0.001,
+ crystal: 0.001,
+ clam: 0.001,
+ },
+ },
+ spongeAspectSacrifice: {
+ multiply: {
+ fish: 0.001,
+ sand: 0.001,
+ crystal: 0.001,
+ sponge: 0.001,
+ },
+ },
+ volcanicAspectSacrifice: {
+ multiply: {
+ fish: 0.001,
+ sand: 0.001,
+ coral: 0.001,
+ sponge: 0.001,
+ },
+ },
+ seagrassAspectSacrifice: {
+ multiply: {
+ fish: 0.001,
+ sand: 0.001,
+ crystal: 0.001,
+ seagrass: 0.001,
+ },
+ },
+ coralAspectSacrifice: {
+ multiply: {
+ fish: 0.001,
+ sand: 0.001,
+ crystal: 0.001,
+ coral: 0.001,
+ },
+ },
+ kelpAspectSacrifice: {
+ multiply: {
+ fish: 0.001,
+ sand: 0.001,
+ crystal: 0.001,
+ kelp: 0.001,
+ },
+ },
ice: {
multiply: {
ice: -0.00125,
@@ -1328,6 +1465,11 @@ SharkGame.ResourceIncomeAffectorsOriginal = {
science: 0.01,
},
},
+ /* knowledge: {
+ multiply: {
+ science: 0.01,
+ },
+ }, */
scholar: {
multiply: {
arcana: 0.01,
@@ -1399,6 +1541,22 @@ SharkGame.ResourceCategories = {
disposeMessage: ["Oh you'd like that, wouldn't you."],
resources: ["tar", "ice"],
},
+ mental: {
+ name: "Mental",
+ disposeMessage: [
+ "Ah, so you'll just forget about it, then.",
+ "Bury it in the back of your mind, will you?",
+ "Go on then. See if you care about it anymore.",
+ "Was it not good enough?",
+ "No-one else will forget it, you know?",
+ // "They still believe it's worth remembering.",
+ // "It's still precious to them.",
+ "It'll come back sooner or later.",
+ "You can't bury it forever.",
+ // "You'll remember. Even if I have to make you remember.",
+ ],
+ resources: ["knowledge", "joy"],
+ },
scientific: {
name: "Science",
disposeMessage: [
@@ -1488,7 +1646,7 @@ SharkGame.ResourceCategories = {
"The foundation of a modern shark frenzy, perhaps, but also sort of taking up all the space.",
"Let's hope we don't regret it.",
],
- resources: ["sharkonium", "coralglass", "delphinium", "spronge", "calcinium", "porite", "ancientPart", "junk", "filter"],
+ resources: ["sharkonium", "coralglass", "delphinium", "spronge", "calcinium", "porite", "ancientPart", "junk", "filter", "filtrate"],
},
breeders: {
name: "Breeders",
@@ -1590,7 +1748,20 @@ SharkGame.ResourceCategories = {
hidden: {
name: "Hidden",
disposeMessage: ["Bad player! Stop it!"],
- resources: ["world", "sacrifice", "aspectAffect", "specialResourceOne", "specialResourceTwo"],
+ resources: [
+ "world",
+ "sacrifice",
+ "aspectAffect",
+ "specialResourceOne",
+ "specialResourceTwo",
+ "jellyAspectSacrifice",
+ "clamAspectSacrifice",
+ "spongeAspectSacrifice",
+ "volcanicAspectSacrifice",
+ "seagrassAspectSacrifice",
+ "coralAspectSacrifice",
+ "kelpAspectSacrifice",
+ ],
},
};
@@ -1672,4 +1843,7 @@ SharkGame.InternalCategories = {
basics: {
resources: ["essence", "world", "aspectAffect", "specialResourceOne", "specialResourceTwo"],
},
+ aspectSacrifices: {
+ resources: ["jellyAspectSacrifice", "clamAspectSacrifice", "spongeAspectSacrifice", "volcanicAspectSacrifice", "seagrassAspectSacrifice", "coralAspectSacrifice", "kelpAspectSacrifice"],
+ },
};
diff --git a/js/data/sprites.js b/js/data/sprites.js
index 879faf35..c2f9a268 100644
--- a/js/data/sprites.js
+++ b/js/data/sprites.js
@@ -55,6 +55,14 @@ SharkGame.Sprites = {
h: 100,
},
},
+ "planets/shore": {
+ frame: {
+ x: 0,
+ y: 800,
+ w: 100,
+ h: 100,
+ },
+ },
"planets/tempestuous": {
frame: {
x: 100,
@@ -463,6 +471,14 @@ SharkGame.Sprites = {
h: 50,
},
},
+ "actions/getMudskipper": {
+ frame: {
+ x: 100,
+ y: 800,
+ w: 50,
+ h: 50,
+ },
+ },
"actions/getNurse": {
frame: {
x: 450,
diff --git a/js/data/worldtypes.js b/js/data/worldtypes.js
index 1e26e359..27270df0 100644
--- a/js/data/worldtypes.js
+++ b/js/data/worldtypes.js
@@ -70,6 +70,7 @@ SharkGame.WorldTypes = {
"sharkmachines",
"clam",
"lobstermachines",
+ "clamAspectSacrifice",
],
absentResources: ["laser"],
modifiers: [{ type: "multiplier", modifier: "planetaryResourceBoost", resource: "fish", amount: 2 }],
@@ -95,7 +96,7 @@ SharkGame.WorldTypes = {
longDesc: "The water is clear, the sand is clean, and the fish are plenty. A paradise in every way.",
missing: ["laser", "sharkonium"],
present: ["coral", "dolphin", "whale"],
- tip: "The abudance of resources might may your stay here shorter than others.",
+ tip: "The abundance of resources might make your stay here shorter than others.",
},
entry: "Remembering nothing, you find yourself in a beautiful atoll. Life will be good here.",
style: "haven",
@@ -111,6 +112,7 @@ SharkGame.WorldTypes = {
"dolphinmachines",
"coral",
"chorus",
+ "coralAspectSacrifice",
],
absentResources: ["laser"],
modifiers: [
@@ -146,6 +148,7 @@ SharkGame.WorldTypes = {
"seagrass",
"chart",
"map",
+ "seagrassAspectSacrifice",
],
absentResources: ["planter", "crystalMiner"],
modifiers: [{ type: "multiplier", modifier: "planetaryIncomeMultiplier", resource: "sandDigger", amount: 24 }],
@@ -180,6 +183,7 @@ SharkGame.WorldTypes = {
"sponge",
"algae",
"coral",
+ "volcanicAspectSacrifice",
],
absentResources: ["crystal", "laser", "planter"],
modifiers: [{ type: "multiplier", modifier: "planetaryFishMultiplier", resource: "ray", amount: 15 }],
@@ -233,6 +237,7 @@ SharkGame.WorldTypes = {
"ancientPart",
"world",
"aspectAffect",
+ "spongeAspectSacrifice",
],
absentResources: ["kelp", "seaApple", "planter"],
modifiers: [{ type: "multiplier", modifier: "planetaryIncome", resource: "tar", amount: -0.02 }],
@@ -273,6 +278,7 @@ SharkGame.WorldTypes = {
"jellyfish",
"sacrifice",
"aspectAffect",
+ "jellyAspectSacrifice",
],
absentResources: ["laser"],
modifiers: [{ type: "multiplier", modifier: "planetaryIncomeReciprocalMultiplier", resource: "scientist", amount: 1 }],
@@ -316,6 +322,7 @@ SharkGame.WorldTypes = {
"essence",
"world",
"aspectAffect",
+ "kelpAspectSacrifice",
],
modifiers: [
{
@@ -337,23 +344,46 @@ SharkGame.WorldTypes = {
},
par: 45,
},
- template: {
- name: "",
- desc: "description in gateway",
- shortDesc: "status",
- entry: "enter world",
- style: "default",
- absentResources: ["knowledge", "tar", "ice", "heater", "chimaera"],
- modifiers: [{ type: "multiplier", modifier: "planetaryResourceBoost", resource: "fish", amount: 1.5 }],
- gateType: "slots",
- gateCosts: {
- fish: 1,
- sand: 1,
- crystal: 1,
- kelp: 1,
- seaApple: 1,
- sharkonium: 1,
+ template: { // this version updated by Three Eels
+ name: "template",
+ vagueDesc: "feels ______", // before scouting
+ desc: "description in gateway", // after you've scouted it
+ shortDesc: "status", // you are a shark in a ____ ____ sea
+ foresight: { // field for the info the foresight aspect gives
+ vagueLongDesc: "", // more detailed description, before scouting
+ longDesc: "", // more detailed description, after scouting
+ missing: [], // states the absent resources
+ present: [], // states the world-specific resources included
+ tip: "", // give a tip for gameplay
+ },
+ entry: "enter world", // message put in the log upon entry. describe the setting, and emphasise a lack of memory of previous events.
+ style: "default", // change to the ocean's name
+ includedResources: [ // for every present resource, e.g. the normal things + the world's frenzy member, special resource, clams/jellyfish/sponge, machine-making material, and machines
+ "essence",
+ "world",
+ "aspectAffect",
+ "basicmaterials", // sand, fish, crystals, etc.
+ "sharks",
+ "rays",
+ "crabs",
+ "kelpstuff", // includes kelp and sea apples
+ "sharkmachines", // remove if sharks or their machines are absent from the narrative
+ ],
+ absentResources: ["knowledge", "tar", "ice", "heater", "chimaera"], // replace with resources that are essentially incapable of existing in the ocean
+ modifiers: [{ type: "multiplier", modifier: "planetaryResourceBoost", resource: "fish", amount: 1.5 }], // for any world-applied multipliers/generation
+ // gateType: "slots",
+ // the above field doesn't seem to do anything, nor is it present in the other worldtypes, so I removed it
+ gateRequirements: { // can also be an upgrade or the presence of a resource, e.g. the whale chorus
+ slots: {
+ fish: 1,
+ sand: 1,
+ crystal: 1,
+ kelp: 1,
+ seaApple: 1,
+ sharkonium: 1,
+ },
},
+ par: 45, // how long the par time is in minutes
},
stone: {
name: "Stone",
diff --git a/js/gateway.js b/js/gateway.js
index 090f7c23..da474e4e 100644
--- a/js/gateway.js
+++ b/js/gateway.js
@@ -1337,6 +1337,7 @@ SharkGame.Gateway.Messages = {
"Tell me: Where do you see the line between friend and food? The urchins are as simple-minded as the fish.",
"Do you wonder who the squid look up to?",
"Do you wonder who built the great machine?",
+ "A common goal must be worked toward by all. You learned this. They learned this.",
],
},
loss: [
@@ -1352,6 +1353,7 @@ SharkGame.Gateway.Messages = {
"You and everything you knew has died. Perhaps not you. Perhaps not.", */
"One more try, perhaps?",
"Excellence is pure habit. We are what we repeatedly do. Try again, and do better.",
+ "We learn, and as we learn, we change. We grow. You just have to make sure the world grows with you.",
],
generic: [
"There is no warmth or cold here. Only numbness.",
diff --git a/js/main.js b/js/main.js
index 1368b710..006b059c 100644
--- a/js/main.js
+++ b/js/main.js
@@ -103,7 +103,15 @@ $.extend(SharkGame, {
"On Sharker Tides",
"Curse of the Shark",
"Have I Played These Sharks Before?",
- "Hollow Shark: Shark Song",
+ "Hollow Shark - SharkSong",
+ "Last Shark Standing",
+ "Sharkjago: Masters of Sharkjitsu",
+ "Shark: Galactic Ad-fin-tures", // this was a bad spin on 'Spore: Galactic Adventures' --ThreeEels
+ "Ray World",
+ "Ray World: Crabpour", // aggghhhh i can't find something good for The Watcher --ThreeEels
+ "I Have No Trout And I Must Bream", // my personal favourite --ThreeEels
+ "Nine Shoals",
+ "A Shark Room",
],
GAME_NAME: null,
ACTUAL_GAME_NAME: "Shark Game",
@@ -908,6 +916,19 @@ SharkGame.Button = {
};
SharkGame.Changelog = {
+ "New Frontiers patch 12345678a": [
+ "Added six new aspects, courtesy of Three Eels in a Jellyfish Coat!",
+ "Added quite a few miscellaneous messages! Two new gateway messages and two new Minute Hand messages.",
+ "Added some new random tab names.",
+ "Fixed some typos.",
+ ],
+ // below changelog entry was scrapped
+ /* "New Frontiers patch 12345678a": [
+ "Added new aspects! Two boost the income of certain resources, one boosts the efficiency of a world's unique frenzy members, and the last one does something special.",
+ "Added a new gateway message for Frigid, and a new loss gateway message.",
+ "Added some new random tab names.",
+ "All changes here have been brought to you by Three Eels in a Jellyfish Coat. Remember my name; something bigger is coming.",
+ ], */
"New Frontiers patch 20260929a": [
"Fix typos in various facts thanks to BlazingPhonex",
"Add some (as of yet unused) sprites",
diff --git a/js/resources.js b/js/resources.js
index 15ecb3ef..bbddbfb6 100644
--- a/js/resources.js
+++ b/js/resources.js
@@ -813,7 +813,7 @@ SharkGame.Resources = {
"Everything seems to get faster.",
"Your vision warps as time bends.",
"The hands of a nearby clock speed up.",
- "Frenzy members acclerate around you.",
+ "Frenzy members accelerate around you.",
"You feel strange. Everything feels wrong. It's so fast.",
"A strange feeling washes over you, and everything around you speeds up.",
"You feel your mind twisting. Churning. Everything seems so fast.",
@@ -845,6 +845,8 @@ SharkGame.Resources = {
"You simply float right where you are, still coming to your senses.",
"Your vision sharpens. Your senses are keen. You can feel everything again.",
"You come back from the brink, exhaustion replaced by energy and enthusiasm.",
+ "The raging force that drove it all in circles is gone. The frenzy chats amicably as if nothing happened.",
+ "The storm of sights and sound dissipates. Serenity washes over your mind.",
],
allowMinuteHand() {