From 0a78fd245b21948aa6086000e7333f6174f279c2 Mon Sep 17 00:00:00 2001 From: Jimmys <jimmysilverstein@proton.me> Date: Wed, 1 Jan 2025 19:47:45 +0000 Subject: [PATCH 01/12] Add Npc mapper class reference to global directive for typing --- .../05-renderer/21-player-options.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/game/03-JavaScript/05-renderer/21-player-options.js b/game/03-JavaScript/05-renderer/21-player-options.js index b6ceaf802e..fb80e5e2d3 100644 --- a/game/03-JavaScript/05-renderer/21-player-options.js +++ b/game/03-JavaScript/05-renderer/21-player-options.js @@ -1,5 +1,5 @@ // @ts-check -/* global Partial, Dict, Record, CombatRenderer, Player, Bodywriting, ClothedSlots, SkinColours, ShaftTarget, isTransformationPartEnabled, isChimeraEnabled, TotalClothingStates, TransformationKeys, TransformationParts, CombatClothingTypes, AnimationSpeed, LegPositions, MachineState, CondomOptions */ +/* global Partial, Dict, Record, CombatRenderer, Player, Bodywriting, ClothedSlots, SkinColours, NpcCombatMapper, ShaftTarget, isTransformationPartEnabled, isChimeraEnabled, TotalClothingStates, TransformationKeys, TransformationParts, CombatClothingTypes, AnimationSpeed, LegPositions, MachineState, CondomOptions */ /** * @typedef CombatPlayerOptions @@ -1356,7 +1356,10 @@ class PlayerCombatMapper { if (PlayerCombatMapper.getTentacleByShaft("rightleg") !== null && V.rightleg === "grappled") { return "up"; } - if ((typeof V.vaginastate === "string" && ["othermouth", "othermouthentrance", "othermouthimminent"].includes(V.vaginastate)) || V.vaginause === "othermouth") { + if ( + (typeof V.vaginastate === "string" && ["othermouth", "othermouthentrance", "othermouthimminent"].includes(V.vaginastate)) || + V.vaginause === "othermouth" + ) { return "up"; } } @@ -1402,7 +1405,10 @@ class PlayerCombatMapper { if (PlayerCombatMapper.getTentacleByShaft("leftleg") !== null && V.leftleg === "grappled") { return "up"; } - if ((typeof V.vaginastate === "string" && ["othermouth", "othermouthentrance", "othermouthimminent"].includes(V.vaginastate)) || V.vaginause === "othermouth") { + if ( + (typeof V.vaginastate === "string" && ["othermouth", "othermouthentrance", "othermouthimminent"].includes(V.vaginastate)) || + V.vaginause === "othermouth" + ) { return "up"; } } @@ -1497,7 +1503,8 @@ class PlayerCombatMapper { const hasPenetrator = pc.penisExist || playerHasStrapon(); const isExposed = PlayerCombatMapper.isPenisExposed(options); const hasChastityBelt = ["chastitybeltfetish", "goldchastitybelt", "chastitybelt", "flatchastitycage"].includes(V.worn.genitals.variable); - const isEjaculating = V.orgasmdown > 0 && + const isEjaculating = + V.orgasmdown > 0 && V.penisstate !== "penetrated" && V.orgasmcount < 25 && V.femaleclimax !== 1 && -- GitLab From 88e9dfd8cb679ec798fc08968ff36d2855a62335 Mon Sep 17 00:00:00 2001 From: Jimmys <jimmysilverstein@proton.me> Date: Thu, 2 Jan 2025 10:14:19 +0000 Subject: [PATCH 02/12] Improve error reporting for duplicate canvas setup calls --- game/03-JavaScript/05-renderer/01-multi-canvasmodel.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/game/03-JavaScript/05-renderer/01-multi-canvasmodel.js b/game/03-JavaScript/05-renderer/01-multi-canvasmodel.js index 6d3546adc0..b47225ad05 100644 --- a/game/03-JavaScript/05-renderer/01-multi-canvasmodel.js +++ b/game/03-JavaScript/05-renderer/01-multi-canvasmodel.js @@ -130,6 +130,8 @@ class MultiCanvasModel { this.animatingCanvas.redraw(); } } +/** @type {string} */ +MultiCanvasModel.debugLastInit = "Unspecified"; // @ts-ignore window.MultiCanvasModel = MultiCanvasModel; @@ -143,8 +145,10 @@ Macro.add("setup-multi-canvas", { Errors.report("MultiCanvasModel already exists: Likely due to two animateCombat uses in the same passage", { key, stack: Utils.GetStack(), + last: MultiCanvasModel.debugLastInit, }); } + MultiCanvasModel.debugLastInit = Utils.GetStack(); const model = MultiCanvasModel.create(key, id, slot); this.output.append(model.canvas.canvas); }, -- GitLab From bc6061dbb92267f0c842e43ee6cd7ff57199cbf0 Mon Sep 17 00:00:00 2001 From: Jimmys <jimmysilverstein@proton.me> Date: Fri, 3 Jan 2025 15:54:00 +0000 Subject: [PATCH 03/12] Fix typos for hawk loot tuah --- game/overworld-town/loc-prison/work.twee | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/game/overworld-town/loc-prison/work.twee b/game/overworld-town/loc-prison/work.twee index dd2d11e912..d6fc9c6378 100644 --- a/game/overworld-town/loc-prison/work.twee +++ b/game/overworld-town/loc-prison/work.twee @@ -1344,7 +1344,7 @@ You administer a single tooth as instructed. The <<person2>><<person>> sighs, bu You return the $hawk_loot to <<anxious_guard 0>>. "That wasn't so bad," <<person1>><<he>> says.<<glove>><<lsuspicion>><<prison_rep anxious 1>><<prison_guards 1>> <br><br> <<prison_spire_options>> - <<if $hawk _loot is "mobile phone">> + <<if $hawk_loot is "mobile phone">> <<wearProp "phone" 0 "mobile">> <<else>> <<wearProp $hawk_loot>> @@ -1376,7 +1376,7 @@ You administer a single tooth as instructed. The <<person2>><<person>> sighs, bu You return the $hawk_loot to <<anxious_guard 0>>. "Dunno how you do it," <<he>> says.<<glove>><<lsuspicion>><<prison_rep anxious 1>><<prison_guards 1>> <br><br> <<prison_spire_options>> - <<if $hawk _loot is "mobile phone">> + <<if $hawk_loot is "mobile phone">> <<wearProp "phone" 0 "mobile">> <<else>> <<wearProp $hawk_loot>> @@ -1415,7 +1415,7 @@ You reach for the $hawk_loot. You return the $hawk_loot to <<anxious_guard 0>>. "Dunno how you do it," <<he>> says.<<glove>><<lsuspicion>><<prison_rep anxious 1>><<prison_guards 1>> <br><br> <<prison_spire_options>> - <<if $hawk _loot is "mobile phone">> + <<if $hawk_loot is "mobile phone">> <<wearProp "phone" 0 "mobile">> <<else>> <<wearProp $hawk_loot>> @@ -1477,7 +1477,7 @@ You reach for the $hawk_loot. <<anxious_guard 0 cap>> awaits you. "Don't worry," <<he>> grins. "I'll delete the footage."<<gstress>><<stress 6>><<gattention prison>><<prison_attention 1>><<glove>><<lsuspicion>><<prison_rep anxious 1>><<prison_guards 1>> <br><br> <<prison_spire_options>> - <<if $hawk _loot is "mobile phone">> + <<if $hawk_loot is "mobile phone">> <<wearProp "phone" 0 "mobile">> <<else>> <<wearProp $hawk_loot>> @@ -1496,7 +1496,7 @@ You reach for the $hawk_loot. You return the $hawk_loot to <<anxious_guard 0>>. "Dunno how you do it," <<he>> says.<<glove>><<lsuspicion>><<prison_rep anxious 1>><<prison_guards 1>> <br><br> <<prison_spire_options>> - <<if $hawk _loot is "mobile phone">> + <<if $hawk_loot is "mobile phone">> <<wearProp "phone" 0 "mobile">> <<else>> <<wearProp $hawk_loot>> -- GitLab From 9f3008221edbf7462132964becd9be1e0bd41660 Mon Sep 17 00:00:00 2001 From: Jimmys <jimmysilverstein@proton.me> Date: Fri, 3 Jan 2025 16:03:04 +0000 Subject: [PATCH 04/12] Put endevent call at the end of the event for sewer lizard vore --- game/overworld-underground/loc-sewers/old-sewers-events.twee | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/game/overworld-underground/loc-sewers/old-sewers-events.twee b/game/overworld-underground/loc-sewers/old-sewers-events.twee index 7971a41dcc..44abebf844 100644 --- a/game/overworld-underground/loc-sewers/old-sewers-events.twee +++ b/game/overworld-underground/loc-sewers/old-sewers-events.twee @@ -50,9 +50,10 @@ The stimulation is too much for you. You pass out. :: Sewers Lizard Vore 5 <<location "forest">><<effects>> -<<swallowedstat>><<sewersend>><<outergoo>> +<<swallowedstat>><<outergoo>> You awaken in the woods, lying inside the <<beasttype>>'s mouth. <<bHe>>'s sleeping. You wiggle out, shivering in pleasure as your <<genitals>> slides along <<bhis>> tongue once more. <br><br> +<<sewersend>> <<link [[Next|Forest]]>><<set $eventskip to 1>><<set $forest to 20>><</link>> <br> @@ -752,4 +753,4 @@ The tendrils retreat, vanishing into the dark. <<link [[Next|Sewers Wood]]>><<handheldon>><<unset $sewersBox>><<set $eventskip to 1>><</link>> <br> <</if>> -<</if>> \ No newline at end of file +<</if>> -- GitLab From 8ac64054d6389b52b9602f81343626ca0b4912c3 Mon Sep 17 00:00:00 2001 From: Jimmys <jimmysilverstein@proton.me> Date: Fri, 3 Jan 2025 16:18:50 +0000 Subject: [PATCH 05/12] Update backcomp with daily prison check --- game/04-Variables/variables-versionUpdate.twee | 3 +++ 1 file changed, 3 insertions(+) diff --git a/game/04-Variables/variables-versionUpdate.twee b/game/04-Variables/variables-versionUpdate.twee index 4fb6f31a7c..843cc67b44 100644 --- a/game/04-Variables/variables-versionUpdate.twee +++ b/game/04-Variables/variables-versionUpdate.twee @@ -5789,4 +5789,7 @@ <<if $plants.chilli_con_carne.singular is "serving ">> <<set $plants.chilli_con_carne.singular to "serving of chilli con carne">> <</if>> + + <!-- $daily.prison not set in at least one save game --> + <<set $daily.prison ||= {}>> <</widget>> -- GitLab From 24ac394ccb81d9fc796dcf7dd6f0c06c23e7dab3 Mon Sep 17 00:00:00 2001 From: Jimmys <jimmysilverstein@proton.me> Date: Fri, 3 Jan 2025 16:21:03 +0000 Subject: [PATCH 06/12] Remove unncessary console log --- .../05-renderer/21-npc-options.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/game/03-JavaScript/05-renderer/21-npc-options.js b/game/03-JavaScript/05-renderer/21-npc-options.js index fb8ee0f36c..eb8edb2a92 100644 --- a/game/03-JavaScript/05-renderer/21-npc-options.js +++ b/game/03-JavaScript/05-renderer/21-npc-options.js @@ -209,7 +209,23 @@ class NpcCombatMapper { show: false, amount: V.enemyarousal >= (V.enemyarousalmax / 5) * 3 ? 2 : 1, }; - options.tongue.show = typeof npc.mouth === "string" && ["mouth", "kiss", "kissentrance", "kissimminent", "anus", "anusentrance", "anusimminent", "vagina", "vaginaentrance", "vaginaimminent", "penis", "penisentrance", "penisimminent"].includes(npc.mouth); + options.tongue.show = + typeof npc.mouth === "string" && + [ + "mouth", + "kiss", + "kissentrance", + "kissimminent", + "anus", + "anusentrance", + "anusimminent", + "vagina", + "vaginaentrance", + "vaginaimminent", + "penis", + "penisentrance", + "penisimminent", + ].includes(npc.mouth); options.tongue.position = typeof npc.mouth === "string" ? npc.mouth : null; options.penetrators = options.penetrators = []; @@ -244,7 +260,6 @@ class NpcCombatMapper { options.show = penetrator.position != null && ["vagina", "anus", "mouth"].includes(penetrator.position); // Add exclusion for mouth-entrance. - console.log("Checking exclusion:", penetrator); if (penetrator.position === "mouth" && penetrator.state === "entrance") { options.show = false; penetrator.show = false; -- GitLab From 5345020544cedd8d885486cbb3ea21ce29377dcd Mon Sep 17 00:00:00 2001 From: Jimmys <jimmysilverstein@proton.me> Date: Fri, 3 Jan 2025 16:57:26 +0000 Subject: [PATCH 07/12] Fix sex toy speech logic --- game/base-combat/speech.twee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/game/base-combat/speech.twee b/game/base-combat/speech.twee index d46b11e461..926c14f515 100644 --- a/game/base-combat/speech.twee +++ b/game/base-combat/speech.twee @@ -329,7 +329,7 @@ `"Both? I hope there's nothing else wrong with you."`, `"Why do I never get anyone normal?"`, ][random(0,4)]>> - <<elseif $speechSextoyState is "aroused" or $speechsextoy is 1 and random(0,2) isnot 0 and ($rightarm is "heldSexToy" or $leftarm is "heldSexToy")>> + <<elseif ($speechSextoyState is "aroused" or $speechsextoy is 1) and random(0,2) isnot 0 and ($rightarm is "heldSexToy" or $leftarm is "heldSexToy")>> <<if $rightarm is "heldSexToy" and $leftarm is "heldSexToy">> <<set $_sexToy to "sex toys">> <<elseif $rightarm is "heldSexToy">> -- GitLab From 9dcbb571d5bc4ff8a4d11376e2b352c377361f65 Mon Sep 17 00:00:00 2001 From: Jimmys <jimmysilverstein@proton.me> Date: Fri, 3 Jan 2025 17:52:24 +0000 Subject: [PATCH 08/12] Convert plant setup to JS --- .../plant-setup.js} | 777 +++++++++--------- types/plants.d.ts | 51 ++ 2 files changed, 448 insertions(+), 380 deletions(-) rename game/{base-system/plant-objects.twee => 04-Variables/plant-setup.js} (86%) create mode 100644 types/plants.d.ts diff --git a/game/base-system/plant-objects.twee b/game/04-Variables/plant-setup.js similarity index 86% rename from game/base-system/plant-objects.twee rename to game/04-Variables/plant-setup.js index a6381f72cd..f7bfa6a8e4 100644 --- a/game/base-system/plant-objects.twee +++ b/game/04-Variables/plant-setup.js @@ -1,6 +1,9 @@ -:: Widgets Plant Objects [widget] -<<widget "init_plant_objects">> - <<set _plants to { +/* globals Dict, PlantSetup */ +// @ts-check + +function initPlants() { + /** @type {Dict<PlantSetup>} */ + const plants = { red_rose: { index: 0, name: "red_rose", @@ -13,10 +16,10 @@ days: 14, multiplier: 1, special: [], - season: ["spring","autumn"], + season: ["spring", "autumn"], ingredients: [], - icon: "red_rose.png" - }, + icon: "red_rose.png", + }, white_rose: { index: 1, @@ -30,10 +33,10 @@ days: 14, multiplier: 1, special: [], - season: ["spring","autumn"], + season: ["spring", "autumn"], ingredients: [], - icon: "white_rose.png" - }, + icon: "white_rose.png", + }, orchid: { index: 2, @@ -49,8 +52,8 @@ special: [], season: ["summer"], ingredients: [], - icon: "orchid.png" - }, + icon: "orchid.png", + }, daisy: { index: 3, @@ -64,10 +67,10 @@ days: 7, multiplier: 1, special: [], - season: ["spring","summer","autumn"], + season: ["spring", "summer", "autumn"], ingredients: [], - icon: "daisy.png" - }, + icon: "daisy.png", + }, tulip: { index: 4, @@ -83,8 +86,8 @@ special: [], season: ["autumn"], ingredients: [], - icon: "tulip.png" - }, + icon: "tulip.png", + }, lotus: { index: 5, @@ -98,10 +101,10 @@ days: 5, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "lotus.png" - }, + icon: "lotus.png", + }, lily: { index: 6, @@ -115,10 +118,10 @@ days: 10, multiplier: 1, special: [], - season: ["spring","autumn"], + season: ["spring", "autumn"], ingredients: [], - icon: "lily.png" - }, + icon: "lily.png", + }, poppy: { index: 7, @@ -132,10 +135,10 @@ days: 8, multiplier: 1, special: [], - season: ["spring","autumn"], + season: ["spring", "autumn"], ingredients: [], - icon: "poppy.png" - }, + icon: "poppy.png", + }, apple: { index: 8, @@ -149,10 +152,10 @@ days: 7, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "apple.png" - }, + icon: "apple.png", + }, orange: { index: 9, @@ -166,10 +169,10 @@ days: 6, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "orange.png" - }, + icon: "orange.png", + }, banana: { index: 10, @@ -183,10 +186,10 @@ days: 9, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "banana.png" - }, + icon: "banana.png", + }, lemon: { index: 11, @@ -200,10 +203,10 @@ days: 12, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "lemon.png" - }, + icon: "lemon.png", + }, blood_lemon: { index: 12, @@ -217,10 +220,10 @@ days: 20, multiplier: 1, special: ["aphrodisiac"], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "blood_lemon.gif" - }, + icon: "blood_lemon.gif", + }, pear: { index: 13, @@ -234,10 +237,10 @@ days: 10, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "pear.png" - }, + icon: "pear.png", + }, strawberry: { index: 14, @@ -251,10 +254,10 @@ days: 14, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "strawberry.png" - }, + icon: "strawberry.png", + }, peach: { index: 15, @@ -268,10 +271,10 @@ days: 8, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "peach.png" - }, + icon: "peach.png", + }, plum: { index: 16, @@ -285,10 +288,10 @@ days: 10, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "plum.png" - }, + icon: "plum.png", + }, mushroom: { index: 17, @@ -302,10 +305,10 @@ days: 14, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "mushroom.png" - }, + icon: "mushroom.png", + }, wolfshroom: { index: 18, @@ -319,10 +322,10 @@ days: 21, multiplier: 1, special: ["aphrodisiac"], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "wolfshroom.png" - }, + icon: "wolfshroom.png", + }, wild_honeycomb: { index: 19, @@ -336,10 +339,10 @@ days: 7, multiplier: 1, special: ["large"], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "wild_honeycomb.png" - }, + icon: "wild_honeycomb.png", + }, wild_carrot: { index: 20, @@ -353,10 +356,10 @@ days: 10, multiplier: 3, special: [], - season: ["spring","summer","autumn"], + season: ["spring", "summer", "autumn"], ingredients: [], - icon: "carrot.png" - }, + icon: "carrot.png", + }, onion: { index: 21, @@ -370,10 +373,10 @@ days: 12, multiplier: 3, special: [], - season: ["spring","autumn"], + season: ["spring", "autumn"], ingredients: [], - icon: "onion.png" - }, + icon: "onion.png", + }, garlic_bulb: { index: 22, @@ -389,8 +392,8 @@ special: [], season: ["autumn"], ingredients: [], - icon: "garlic.png" - }, + icon: "garlic.png", + }, potato: { index: 23, @@ -404,10 +407,10 @@ days: 7, multiplier: 4, special: [], - season: ["spring","autumn","winter"], + season: ["spring", "autumn", "winter"], ingredients: [], - icon: "potato.png" - }, + icon: "potato.png", + }, strange_flower: { index: 24, @@ -421,10 +424,10 @@ days: 28, multiplier: 1, special: ["aphrodisiac"], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "strange_flower.png" - }, + icon: "strange_flower.png", + }, truffle: { index: 25, @@ -438,10 +441,10 @@ days: 28, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "truffle.png" - }, + icon: "truffle.png", + }, bottle_of_milk: { index: 26, @@ -455,10 +458,10 @@ days: 1, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "milk.png" - }, + icon: "milk.png", + }, chicken_egg: { index: 27, @@ -472,10 +475,10 @@ days: 1, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "egg.png" - }, + icon: "egg.png", + }, bottle_of_breast_milk: { index: 28, @@ -489,10 +492,10 @@ days: 1, multiplier: 1, special: ["large"], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "breastmilk.png" - }, + icon: "breastmilk.png", + }, bottle_of_semen: { index: 29, @@ -506,10 +509,10 @@ days: 1, multiplier: 1, special: ["large"], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "semenbottle.png" - }, + icon: "semenbottle.png", + }, cabbage: { index: 30, @@ -523,10 +526,10 @@ days: 8, multiplier: 3, special: [], - season: ["spring","winter"], + season: ["spring", "winter"], ingredients: [], - icon: "cabbage.png" - }, + icon: "cabbage.png", + }, turnip: { index: 31, @@ -540,10 +543,10 @@ days: 12, multiplier: 2, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "turnip.png" - }, + icon: "turnip.png", + }, broccoli: { index: 32, @@ -557,10 +560,10 @@ days: 10, multiplier: 3, special: [], - season: ["spring","autumn"], + season: ["spring", "autumn"], ingredients: [], - icon: "broccoli.png" - }, + icon: "broccoli.png", + }, ghostshroom: { index: 33, @@ -574,10 +577,10 @@ days: 14, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "ghostshroom.png" - }, + icon: "ghostshroom.png", + }, blackberry: { index: 34, @@ -591,10 +594,10 @@ days: 10, multiplier: 10, special: ["small"], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "blackberry.png" - }, + icon: "blackberry.png", + }, carnation: { index: 35, @@ -610,8 +613,8 @@ special: [], season: ["autumn"], ingredients: [], - icon: "carnation.png" - }, + icon: "carnation.png", + }, bird_egg: { index: 36, @@ -625,10 +628,10 @@ days: 1, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "bird_egg.png" - }, + icon: "bird_egg.png", + }, baby_bottle_of_breast_milk: { index: 37, @@ -643,10 +646,10 @@ days: 1, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "babybottle.png" - }, + icon: "babybottle.png", + }, plumeria: { index: 38, @@ -662,8 +665,8 @@ special: [], season: ["spring", "summer", "autumn"], ingredients: [], - icon: "plumeria.png" - }, + icon: "plumeria.png", + }, oyster_pearl: { index: 39, @@ -681,7 +684,7 @@ season: ["spring", "summer", "autumn", "winter"], ingredients: [], icon: "oyster_pearl.png", - }, + }, bread: { index: 40, @@ -695,11 +698,11 @@ type: "food", days: 20, multiplier: 1, - special: ["vegan",], + special: ["vegan"], season: [], ingredients: ["flour", "salt", "vegetable_oil"], - icon: "bread.png" - }, + icon: "bread.png", + }, flour: { index: 41, @@ -716,8 +719,8 @@ special: [], season: [], ingredients: ["wheat"], - icon: "flour.png" - }, + icon: "flour.png", + }, salt: { index: 42, @@ -734,8 +737,8 @@ special: [], season: [], ingredients: [], - icon: "salt.png" - }, + icon: "salt.png", + }, vegetable_oil: { index: 43, @@ -752,8 +755,8 @@ special: [], season: [], ingredients: [], - icon: "vegetable_oil.png" - }, + icon: "vegetable_oil.png", + }, pizza: { index: 44, @@ -771,8 +774,8 @@ special: ["vegetarian"], season: [], ingredients: ["bread", "tomato", "garlic_bulb", "cheese"], - icon: "pizza.png" - }, + icon: "pizza.png", + }, tomato: { index: 45, @@ -787,10 +790,10 @@ days: 10, multiplier: 4, special: [], - season: ["summer","autumn"], + season: ["summer", "autumn"], ingredients: [], - icon: "tomato.png" - }, + icon: "tomato.png", + }, cheese: { index: 46, @@ -808,8 +811,8 @@ special: ["vegetarian"], season: [], ingredients: ["bottle_of_milk"], - icon: "cheese.png" - }, + icon: "cheese.png", + }, macaroni_cheese: { index: 47, @@ -827,8 +830,8 @@ special: ["vegetarian"], season: [], ingredients: ["bottle_of_milk", "cheese", "flour", "pasta", "salt"], - icon: "macaroni_cheese.png" - }, + icon: "macaroni_cheese.png", + }, pasta: { index: 48, @@ -845,8 +848,8 @@ special: ["vegetarian"], season: [], ingredients: ["flour", "chicken_egg", "vegetable_oil", "salt"], - icon: "pasta.png" - }, + icon: "pasta.png", + }, cauliflower_cheese: { index: 49, @@ -863,8 +866,8 @@ special: ["vegetarian"], season: [], ingredients: ["cauliflower", "cheese", "garlic_bulb", "bottle_of_milk"], - icon: "cauliflower_cheese.png" - }, + icon: "cauliflower_cheese.png", + }, wheat: { index: 50, @@ -880,10 +883,10 @@ days: 9, multiplier: 5, special: [], - season: ["spring","summer","autumn"], + season: ["spring", "summer", "autumn"], ingredients: [], - icon: "wheat.png" - }, + icon: "wheat.png", + }, prawn_bisque: { index: 51, @@ -900,8 +903,8 @@ special: ["seafood"], season: [], ingredients: ["prawn", "onion", "garlic_bulb", "vegetable_oil", "cream", "lemon"], - icon: "prawn_bisque.png" - }, + icon: "prawn_bisque.png", + }, cream: { index: 52, @@ -918,8 +921,8 @@ special: [], season: [], ingredients: [], - icon: "cream.png" - }, + icon: "cream.png", + }, chelsea_bun: { index: 53, @@ -938,8 +941,8 @@ special: ["vegetarian"], season: [], ingredients: ["flour", "salt", "butter", "sugar", "bottle_of_milk", "honey"], - icon: "chelsea_bun.png" - }, + icon: "chelsea_bun.png", + }, honey: { index: 54, @@ -956,8 +959,8 @@ special: [], season: [], ingredients: ["wild_honeycomb"], - icon: "honey.png" - }, + icon: "honey.png", + }, butter: { index: 55, @@ -974,8 +977,8 @@ special: [], season: [], ingredients: ["bottle_of_milk"], - icon: "butter.png" - }, + icon: "butter.png", + }, naan_bread: { index: 56, @@ -992,8 +995,8 @@ special: ["vegetarian"], season: [], ingredients: ["bottle_of_milk", "flour", "vegetable_oil", "chicken_egg", "salt"], - icon: "naan_bread.png" - }, + icon: "naan_bread.png", + }, pastry: { index: 57, @@ -1011,8 +1014,8 @@ special: [], season: [], ingredients: ["butter", "flour", "salt"], - icon: "pastry.png" - }, + icon: "pastry.png", + }, quiche: { index: 58, @@ -1029,8 +1032,8 @@ special: [], season: [], ingredients: ["pastry", "bottle_of_milk", "chicken_egg", "bacon", "cheese", "tomato"], - icon: "quiche.png" - }, + icon: "quiche.png", + }, bacon: { index: 59, @@ -1047,8 +1050,8 @@ special: [], season: [], ingredients: [], - icon: "bacon.png" - }, + icon: "bacon.png", + }, mince_pie: { index: 60, @@ -1065,8 +1068,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["pastry", "blackberry", "sugar"], - icon: "mince_pie.png" - }, + icon: "mince_pie.png", + }, sugar: { index: 61, @@ -1083,8 +1086,8 @@ special: [], season: [], ingredients: [], - icon: "sugar.png" - }, + icon: "sugar.png", + }, sausage_roll: { index: 62, @@ -1102,8 +1105,8 @@ special: [], season: [], ingredients: ["pastry", "salt", "sausage", "chicken_egg", "lemon"], - icon: "sausage_roll.png" - }, + icon: "sausage_roll.png", + }, sausage: { index: 63, @@ -1120,8 +1123,8 @@ special: [], season: [], ingredients: [], - icon: "sausage.png" - }, + icon: "sausage.png", + }, potato_pancake: { index: 64, @@ -1139,8 +1142,8 @@ special: ["vegetarian"], season: [], ingredients: ["potato", "onion", "chicken_egg", "vegetable_oil"], - icon: "potato_pancake.png" - }, + icon: "potato_pancake.png", + }, onion_bhaji: { index: 65, @@ -1158,8 +1161,8 @@ special: ["vegan", "spicy"], season: [], ingredients: ["flour", "onion", "chilli_pepper"], - icon: "onion_bhaji.png" - }, + icon: "onion_bhaji.png", + }, chilli_pepper: { index: 66, @@ -1174,10 +1177,10 @@ days: 22, multiplier: 6, special: [], - season: ["summer","autumn"], + season: ["summer", "autumn"], ingredients: [], - icon: "chilli_pepper.png" - }, + icon: "chilli_pepper.png", + }, samosa: { index: 67, @@ -1195,8 +1198,8 @@ special: ["vegetarian", "spicy"], season: [], ingredients: ["pastry", "potato", "chilli_pepper", "lemon"], - icon: "samosa.png" - }, + icon: "samosa.png", + }, sweet_and_sour_chicken: { index: 68, @@ -1213,8 +1216,8 @@ special: ["spicy"], season: [], ingredients: ["chicken", "vegetable_oil", "pepper", "sugar", "onion"], - icon: "sweet_and_sour_chicken.png" - }, + icon: "sweet_and_sour_chicken.png", + }, chicken: { index: 69, @@ -1231,8 +1234,8 @@ special: [], season: [], ingredients: [], - icon: "chicken.png" - }, + icon: "chicken.png", + }, pepper: { index: 70, @@ -1247,10 +1250,10 @@ days: 15, multiplier: 4, special: [], - season: ["spring","summer","winter"], + season: ["spring", "summer", "winter"], ingredients: [], - icon: "pepper.png" - }, + icon: "pepper.png", + }, kedgeree: { index: 71, @@ -1267,8 +1270,8 @@ special: ["seafood"], season: [], ingredients: ["haddock", "rice", "chicken_egg", "butter", "vegetable_oil", "lemon", "cream"], - icon: "kedgeree.png" - }, + icon: "kedgeree.png", + }, rice: { index: 72, @@ -1283,10 +1286,10 @@ days: 26, multiplier: 20, special: [], - season: ["spring","summer","autumn"], + season: ["spring", "summer", "autumn"], ingredients: [], - icon: "rice.png" - }, + icon: "rice.png", + }, haddock: { index: 73, @@ -1303,8 +1306,8 @@ special: [], season: ["summer", "autumn"], ingredients: [], - icon: "haddock.png" - }, + icon: "haddock.png", + }, honeyed_pork: { index: 74, @@ -1321,8 +1324,8 @@ special: ["carnivore"], season: [], ingredients: ["pork", "salt", "honey", "chicken_egg"], - icon: "honeyed_pork.png" - }, + icon: "honeyed_pork.png", + }, beef_wellington: { index: 75, @@ -1339,8 +1342,8 @@ special: [], season: [], ingredients: ["beef", "onion", "pastry", "chicken_egg", "salt", "mushroom"], - icon: "beef_wellington.png" - }, + icon: "beef_wellington.png", + }, salmon_wellington: { index: 76, @@ -1357,8 +1360,8 @@ special: [], season: [], ingredients: ["salmon", "broccoli", "pastry", "chicken_egg", "salt"], - icon: "salmon_wellington.png" - }, + icon: "salmon_wellington.png", + }, hamburger: { index: 77, @@ -1376,8 +1379,8 @@ special: [], season: [], ingredients: ["beef", "bread", "onion", "tomato"], - icon: "burger.png" - }, + icon: "burger.png", + }, cheeseburger: { index: 78, @@ -1395,8 +1398,8 @@ special: [], season: [], ingredients: ["beef", "bread", "onion", "tomato", "cheese"], - icon: "cheeseburger.png" - }, + icon: "cheeseburger.png", + }, chips: { index: 79, @@ -1413,8 +1416,8 @@ special: ["vegan"], season: [], ingredients: ["potato", "vegetable_oil", "salt"], - icon: "chips.png" - }, + icon: "chips.png", + }, cheese_topped_trout: { index: 80, @@ -1431,8 +1434,8 @@ special: ["seafood"], season: [], ingredients: ["trout", "bread", "cheese", "vegetable_oil", "butter", "lemon"], - icon: "cheese_topped_trout.png" - }, + icon: "cheese_topped_trout.png", + }, salmon: { index: 81, @@ -1447,10 +1450,10 @@ days: 1, multiplier: 1, special: [], - season: ["spring","summer","autumn"], + season: ["spring", "summer", "autumn"], ingredients: [], - icon: "salmon.png" - }, + icon: "salmon.png", + }, trout: { index: 82, @@ -1465,10 +1468,10 @@ days: 1, multiplier: 1, special: [], - season: ["autumn","winter"], + season: ["autumn", "winter"], ingredients: [], - icon: "trout.png" - }, + icon: "trout.png", + }, spaghetti_bolognese: { index: 83, @@ -1485,8 +1488,8 @@ special: [], season: [], ingredients: ["pasta", "beef", "vegetable_oil", "garlic_bulb", "tomato"], - icon: "spaghetti_bolognese.png" - }, + icon: "spaghetti_bolognese.png", + }, lasagne: { index: 84, @@ -1503,8 +1506,8 @@ special: [], season: [], ingredients: ["pasta", "beef", "cheese", "flour", "garlic_bulb", "tomato"], - icon: "lasagne.png" - }, + icon: "lasagne.png", + }, carbonara: { index: 85, @@ -1521,8 +1524,8 @@ special: [], season: [], ingredients: ["pasta", "cheese", "flour", "bottle_of_milk", "pork"], - icon: "carbonara.png" - }, + icon: "carbonara.png", + }, chicken_tikka_masala: { index: 86, @@ -1539,8 +1542,8 @@ special: ["spicy"], season: [], ingredients: ["chicken", "vegetable_oil", "onion", "garlic_bulb", "tomato", "butter", "lemon", "naan_bread", "rice"], - icon: "chicken_tikka_masala.png" - }, + icon: "chicken_tikka_masala.png", + }, chilli_con_carne: { index: 87, @@ -1557,8 +1560,8 @@ special: ["spicy"], season: [], ingredients: ["beef", "vegetable_oil", "onion", "garlic_bulb", "tomato", "chilli_pepper"], - icon: "chilli_con_carne.png" - }, + icon: "chilli_con_carne.png", + }, rich_biscuit: { index: 88, @@ -1577,8 +1580,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["chicken_egg", "flour", "sugar", "lemon"], - icon: "rich_biscuit.png" - }, + icon: "rich_biscuit.png", + }, shortbread: { index: 89, @@ -1595,9 +1598,9 @@ multiplier: 5, special: ["vegetarian", "sweet"], season: [], - ingredients: ["butter", "flour", "sugar",], - icon: "shortbread.png" - }, + ingredients: ["butter", "flour", "sugar"], + icon: "shortbread.png", + }, melting_moment: { index: 90, @@ -1616,8 +1619,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["butter", "flour", "sugar", "chicken_egg", "jam"], - icon: "melting_moment.png" - }, + icon: "melting_moment.png", + }, choc_chip_cookie: { index: 91, @@ -1636,8 +1639,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["butter", "flour", "sugar", "chicken_egg", "chocolate"], - icon: "choc_chip_cookie.png" - }, + icon: "choc_chip_cookie.png", + }, cocoa_powder: { index: 92, @@ -1654,8 +1657,8 @@ special: [], season: [], ingredients: [], - icon: "cocoa_powder.png" - }, + icon: "cocoa_powder.png", + }, chocolate: { index: 93, @@ -1672,8 +1675,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["butter", "bottle_of_milk", "cocoa_powder"], - icon: "chocolate.png" - }, + icon: "chocolate.png", + }, jammie_dodger: { index: 94, @@ -1692,8 +1695,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["flour", "sugar", "butter", "chicken_egg", "jam"], - icon: "jammie_dodger.png" - }, + icon: "jammie_dodger.png", + }, jam: { index: 95, @@ -1710,8 +1713,8 @@ special: [], season: [], ingredients: ["strawberry", "sugar"], - icon: "jam.png" - }, + icon: "jam.png", + }, apple_strudel: { index: 94, @@ -1729,8 +1732,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["pastry", "apple", "sugar", "honey", "butter"], - icon: "apple_strudel.png" - }, + icon: "apple_strudel.png", + }, soufflé: { index: 95, @@ -1748,8 +1751,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["chicken_egg", "bird_egg", "cream", "sugar", "butter", "flour", "lemon"], - icon: "soufflé.png" - }, + icon: "soufflé.png", + }, tart: { index: 96, @@ -1767,8 +1770,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["pastry", "chocolate"], - icon: "tart.png" - }, + icon: "tart.png", + }, lemon_meringue_pie: { index: 97, @@ -1785,8 +1788,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["pastry", "lemon", "sugar", "butter", "chicken_egg"], - icon: "lemon_meringue_pie.png" - }, + icon: "lemon_meringue_pie.png", + }, sponge_cake: { index: 98, @@ -1804,8 +1807,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["flour", "butter", "sugar", "cream", "chicken_egg", "jam"], - icon: "sponge_cake.png" - }, + icon: "sponge_cake.png", + }, swiss_roll: { index: 99, @@ -1823,8 +1826,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["flour", "butter", "cream", "chicken_egg", "jam", "orange", "sugar"], - icon: "swiss_roll.png" - }, + icon: "swiss_roll.png", + }, scone: { index: 100, @@ -1842,8 +1845,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["flour", "butter", "sugar", "salt", "bottle_of_milk"], - icon: "scone.png" - }, + icon: "scone.png", + }, brownie: { index: 101, @@ -1861,8 +1864,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["butter", "flour", "chocolate", "chicken_egg", "salt"], - icon: "brownie.png" - }, + icon: "brownie.png", + }, carrot_cake: { index: 102, @@ -1880,8 +1883,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["wild_carrot", "sugar", "chicken_egg", "vegetable_oil", "flour", "lemon", "cream", "butter"], - icon: "carrot_cake.png" - }, + icon: "carrot_cake.png", + }, crème_brulee: { index: 103, @@ -1898,8 +1901,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["bottle_of_milk", "cream", "sugar", "chicken_egg"], - icon: "crème_brulee.png" - }, + icon: "crème_brulee.png", + }, date: { index: 104, @@ -1914,10 +1917,10 @@ days: 10, multiplier: 6, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "date.png" - }, + icon: "date.png", + }, sticky_toffee_pudding: { index: 105, @@ -1934,8 +1937,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["date", "flour", "chicken_egg", "butter", "sugar", "bottle_of_milk", "cream"], - icon: "sticky_toffee_pudding.png" - }, + icon: "sticky_toffee_pudding.png", + }, chicken_vindaloo: { index: 106, @@ -1952,8 +1955,8 @@ special: ["spicy"], season: [], ingredients: ["chicken", "vegetable_oil", "chilli_pepper", "onion", "tomato", "lemon", "garlic_bulb", "naan_bread", "rice"], - icon: "chicken_vindaloo.png" - }, + icon: "chicken_vindaloo.png", + }, flapjack: { index: 107, @@ -1972,8 +1975,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["butter", "sugar", "oats", "lemon"], - icon: "flapjack.png" - }, + icon: "flapjack.png", + }, cherry: { index: 108, @@ -1990,8 +1993,8 @@ special: [], season: ["spring", "autumn", "winter"], ingredients: [], - icon: "cherry.png" - }, + icon: "cherry.png", + }, belgian_bun: { index: 109, @@ -2009,8 +2012,8 @@ special: ["sweet"], season: [], ingredients: ["flour", "sugar", "bottle_of_milk", "chicken_egg", "lemon", "cherry"], - icon: "belgian_bun.png" - }, + icon: "belgian_bun.png", + }, lime: { index: 110, @@ -2025,10 +2028,10 @@ days: 12, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "lime.png" - }, + icon: "lime.png", + }, linguine: { index: 111, @@ -2045,8 +2048,8 @@ special: ["vegetarian"], season: [], ingredients: ["vegetable_oil", "lemon", "pasta", "cream"], - icon: "linguine.png" - }, + icon: "linguine.png", + }, steak: { index: 112, @@ -2063,8 +2066,8 @@ special: ["carnivore"], season: [], ingredients: ["vegetable_oil", "beef"], - icon: "steak.png" - }, + icon: "steak.png", + }, full_english_breakfast: { index: 113, @@ -2082,8 +2085,8 @@ special: [], season: [], ingredients: ["vegetable_oil", "bacon", "sausage", "mushroom", "tomato", "chicken_egg"], - icon: "full_english_breakfast.png" - }, + icon: "full_english_breakfast.png", + }, apple_crumble: { index: 114, @@ -2100,8 +2103,8 @@ special: ["sweet"], season: [], ingredients: ["apple", "sugar", "flour", "butter", "oats", "cream"], - icon: "apple_crumble.png" - }, + icon: "apple_crumble.png", + }, bakewell_tart: { index: 115, @@ -2119,8 +2122,8 @@ special: ["sweet"], season: [], ingredients: ["shortbread", "cream", "cherry"], - icon: "bakewell_tart.png" - }, + icon: "bakewell_tart.png", + }, cod: { index: 116, @@ -2137,8 +2140,8 @@ special: [], season: ["winter"], ingredients: [], - icon: "cod.png" - }, + icon: "cod.png", + }, fish_and_chips: { index: 117, @@ -2155,8 +2158,8 @@ special: ["seafood"], season: [], ingredients: ["cod", "chips", "vegetable_oil", "flour"], - icon: "fish_and_chips.png" - }, + icon: "fish_and_chips.png", + }, clam: { index: 118, @@ -2173,8 +2176,8 @@ special: [], season: ["spring", "autumn", "winter"], ingredients: [], - icon: "clam.png" - }, + icon: "clam.png", + }, clam_chowder: { index: 119, @@ -2191,8 +2194,8 @@ special: ["seafood"], season: [], ingredients: ["clam", "butter", "bacon", "onion", "flour", "bottle_of_milk", "cream", "potato"], - icon: "clam_chowder.png" - }, + icon: "clam_chowder.png", + }, cheese_and_crackers: { index: 120, @@ -2209,8 +2212,8 @@ special: ["vegetarian"], season: [], ingredients: ["flour", "salt", "sugar", "vegetable_oil", "cheese"], - icon: "cheese_and_crackers.png" - }, + icon: "cheese_and_crackers.png", + }, bangers_and_mash: { index: 121, @@ -2227,8 +2230,8 @@ special: [], season: [], ingredients: ["vegetable_oil", "sausage", "butter", "bottle_of_milk", "potato"], - icon: "bangers_and_mash.png" - }, + icon: "bangers_and_mash.png", + }, yorkshire_pudding: { index: 122, @@ -2245,8 +2248,8 @@ special: ["vegetarian"], season: [], ingredients: ["flour", "chicken_egg", "bottle_of_milk", "vegetable_oil"], - icon: "yorkshire_pudding.png" - }, + icon: "yorkshire_pudding.png", + }, stuffing: { index: 123, @@ -2263,8 +2266,8 @@ special: ["vegetarian"], season: [], ingredients: ["butter", "vegetable_oil", "onion", "garlic_bulb", "bread", "chicken_egg"], - icon: "stuffing.png" - }, + icon: "stuffing.png", + }, roast_dinner: { index: 124, @@ -2280,9 +2283,22 @@ multiplier: 1, special: [], season: [], - ingredients: ["yorkshire_pudding", "stuffing", "chicken", "beef", "pork", "potato", "wild_carrot", "cabbage", "onion", "turnip", "vegetable_oil", "salt"], - icon: "roast_dinner.png" - }, + ingredients: [ + "yorkshire_pudding", + "stuffing", + "chicken", + "beef", + "pork", + "potato", + "wild_carrot", + "cabbage", + "onion", + "turnip", + "vegetable_oil", + "salt", + ], + icon: "roast_dinner.png", + }, crumpet: { index: 125, @@ -2300,8 +2316,8 @@ special: ["vegetarian"], season: [], ingredients: ["flour", "butter", "salt", "sugar"], - icon: "crumpet.png" - }, + icon: "crumpet.png", + }, orange_juice: { index: 126, @@ -2318,8 +2334,8 @@ special: ["vegan", "drink"], season: [], ingredients: ["orange", "sugar"], - icon: "orange_juice.png" - }, + icon: "orange_juice.png", + }, lemonade: { index: 127, @@ -2336,8 +2352,8 @@ special: ["vegan", "drink"], season: [], ingredients: ["lemon", "sugar"], - icon: "lemonade.png" - }, + icon: "lemonade.png", + }, banana_bread: { index: 128, @@ -2354,8 +2370,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["butter", "sugar", "chicken_egg", "flour", "banana"], - icon: "banana_bread.png" - }, + icon: "banana_bread.png", + }, red_wine: { index: 129, @@ -2372,8 +2388,8 @@ special: ["vegetarian", "drink", "alcohol"], season: [], ingredients: [], - icon: "red_wine.png" - }, + icon: "red_wine.png", + }, white_wine: { index: 130, @@ -2390,8 +2406,8 @@ special: ["vegetarian", "drink", "alcohol"], season: [], ingredients: [], - icon: "white_wine.png" - }, + icon: "white_wine.png", + }, poached_pear: { index: 131, @@ -2409,8 +2425,8 @@ special: ["vegan", "alcohol", "sweet"], season: [], ingredients: ["pear", "sugar", "red_wine"], - icon: "poached_pear.png" - }, + icon: "poached_pear.png", + }, peach_panzanella: { index: 132, @@ -2427,8 +2443,8 @@ special: ["vegetarian"], season: [], ingredients: ["peach", "bread", "cheese", "vegetable_oil", "lemon"], - icon: "peach_panzanella.png" - }, + icon: "peach_panzanella.png", + }, plum_pudding: { index: 133, @@ -2446,8 +2462,8 @@ special: ["vegetarian", "sweet"], season: [], ingredients: ["plum", "flour", "bread", "sugar", "orange", "lemon", "cherry", "wild_carrot"], - icon: "plum_pudding.png" - }, + icon: "plum_pudding.png", + }, spinach: { index: 134, @@ -2463,10 +2479,10 @@ days: 10, multiplier: 10, special: [], - season: ["spring","autumn"], + season: ["spring", "autumn"], ingredients: [], - icon: "spinach.png" - }, + icon: "spinach.png", + }, salad: { index: 135, @@ -2483,8 +2499,8 @@ special: ["vegan"], season: [], ingredients: ["spinach", "tomato", "onion", "garlic_bulb", "chilli_pepper", "pepper", "lime"], - icon: "salad.png" - }, + icon: "salad.png", + }, arancini: { index: 136, @@ -2501,8 +2517,8 @@ special: ["vegetarian"], season: [], ingredients: ["vegetable_oil", "butter", "onion", "rice", "garlic_bulb", "white_wine", "cheese", "lemon", "flour", "chicken_egg", "truffle"], - icon: "arancini.png" - }, + icon: "arancini.png", + }, wolfbrew: { index: 137, @@ -2519,8 +2535,8 @@ special: ["vegetarian", "drink", "alcohol", "tainted"], season: [], ingredients: ["wolfshroom", "red_wine", "strange_flower"], - icon: "wolfbrew.png" - }, + icon: "wolfbrew.png", + }, ghostbrew: { index: 138, @@ -2537,8 +2553,8 @@ special: ["vegetarian", "drink", "alcohol", "tainted"], season: [], ingredients: ["ghostshroom", "white_wine", "strange_flower"], - icon: "ghostbrew.png" - }, + icon: "ghostbrew.png", + }, beef: { index: 139, @@ -2555,8 +2571,8 @@ special: [], season: [], ingredients: [], - icon: "beef.png" - }, + icon: "beef.png", + }, pork: { index: 140, @@ -2573,8 +2589,8 @@ special: [], season: [], ingredients: [], - icon: "pork.png" - }, + icon: "pork.png", + }, cauliflower: { index: 141, @@ -2589,10 +2605,10 @@ days: 30, multiplier: 1, special: [], - season: ["spring","summer","autumn","winter"], + season: ["spring", "summer", "autumn", "winter"], ingredients: [], - icon: "cauliflower.png" - }, + icon: "cauliflower.png", + }, oats: { index: 142, @@ -2609,8 +2625,8 @@ special: [], season: [], ingredients: [], - icon: "oats.png" - }, + icon: "oats.png", + }, prawn: { index: 143, @@ -2627,8 +2643,8 @@ special: [], season: ["summer", "autumn", "winter"], ingredients: [], - icon: "prawn.png" - }, + icon: "prawn.png", + }, omelette: { index: 144, @@ -2646,8 +2662,8 @@ special: ["vegetarian"], season: [], ingredients: ["chicken_egg", "vegetable_oil", "butter"], - icon: "omelette.png" - }, + icon: "omelette.png", + }, porridge: { index: 145, @@ -2664,8 +2680,8 @@ special: ["vegetarian"], season: [], ingredients: ["oats", "bottle_of_milk"], - icon: "porridge.png" - }, + icon: "porridge.png", + }, turnip_soup: { index: 146, @@ -2682,42 +2698,43 @@ special: ["vegan"], season: [], ingredients: ["turnip", "potato", "onion", "vegetable_oil", "salt"], - icon: "turnip_soup.png" - } - }>> - - <!-- Jimmy: Sorts all plants alphabetically after their initialisation into _plants. - This is so Object.values/keys will read them based on their alphabetical key order. - Yet allows extras to be added easily based on .index being available and ordered above. - --> - <<run - let sorted = Object.keys(_plants).sort(); - setup.plants = {}; - sorted.forEach(s => { - setup.plants[s] = _plants[s]; - }); - delete _plants; - >> - - <<set setup.tending to {}>> - - <<set setup.tending.plot_base to { + icon: "turnip_soup.png", + }, + }; + + /* + Sorts all plants alphabetically after their initialisation into _plants. + This is so Object.values/keys will read them based on their alphabetical key order. + Yet allows extras to be added easily based on .index being available and ordered above. + */ + const sorted = Object.keys(plants).sort(); + setup.plants = {}; + sorted.forEach(s => { + setup.plants[s] = plants[s]; + }); + + setup.tending = {}; + + setup.tending.plot_base = { plant: "none", stage: 0, days: 0, water: 0, till: 0, - }>> - - <<set setup.tending.plot_sizes to [ - "small", - "medium", - "large", - ]>> - - <<set setup.tending.wateringTimes to { - "small": 5, - "medium": 15, - "large": 60, - }>> -<</widget>> + }; + + setup.tending.plot_sizes = ["small", "medium", "large"]; + + setup.tending.wateringTimes = { + small: 5, + medium: 15, + large: 60, + }; +} +window.initPlants = initPlants; + +Macro.add("init_plant_objects", { + handler() { + initPlants(); + }, +}); diff --git a/types/plants.d.ts b/types/plants.d.ts new file mode 100644 index 0000000000..39f0e48bfd --- /dev/null +++ b/types/plants.d.ts @@ -0,0 +1,51 @@ +declare module "twine-sugarcube" { + export interface SugarCubeStoryVariables {} + + export interface SugarCubeSetupObject { + plants: Dict<PlantSetup>; + tending: { + plot_base: Plot; + plot_sizes: string[]; + wateringTimes: { + [key: PlotSize]: number; + }; + }; + } +} + +declare global { + export type Season = "spring" | "summer" | "autumn" | "winter"; + + export type PlotSize = "small" | "medium" | "large"; + + export interface PlantSetup { + index: number; + name: string; + plural: string; + singular?: string; // * + handheld: string; + handheld_gift?: string; // * + recipe_name?: string; // * + seed_name?: string; // * + plant_cost: number; + difficulty: number; + bed: string; + type: string; + days: number; + multiplier: number; + special: any[]; + season: Season[]; + ingredients: any[]; + icon: string; + } + + export interface Plot { + plant: string; + stage: number; + days: number; + water: number; + till: number; + } +} + +export {}; -- GitLab From e75bd48039c9ed16dd2e42e6364a69d1b43d8e9d Mon Sep 17 00:00:00 2001 From: Jimmys <jimmysilverstein@proton.me> Date: Fri, 3 Jan 2025 18:07:43 +0000 Subject: [PATCH 09/12] Add supermarket backcomp to rice --- game/04-Variables/variables-versionUpdate.twee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/game/04-Variables/variables-versionUpdate.twee b/game/04-Variables/variables-versionUpdate.twee index 843cc67b44..aad3183964 100644 --- a/game/04-Variables/variables-versionUpdate.twee +++ b/game/04-Variables/variables-versionUpdate.twee @@ -5742,7 +5742,7 @@ <<set $makeup.blusher = 0>> <</if>> <!-- 0.5.3.0 makes sure $plants is defined on all saves, and stocks supermarket--> - <<if $plants["salt"] is undefined>> + <<if $plants.salt is undefined>> <<set _food_keys to Object.keys(setup.plants)>> <<for _i to 0; _i lt _food_keys.length; _i++>> <<set $_type to _food_keys[_i]>> @@ -5792,4 +5792,7 @@ <!-- $daily.prison not set in at least one save game --> <<set $daily.prison ||= {}>> + + <!-- Rice does not have a supermarket quantity --> + <<set $plants.rice.supermarket ||= 0>> <</widget>> -- GitLab From 56db96aa6fd5fb5dfb472343215297df6b339b3a Mon Sep 17 00:00:00 2001 From: Jimmys <jimmysilverstein@proton.me> Date: Fri, 3 Jan 2025 18:26:35 +0000 Subject: [PATCH 10/12] Adjust tentacle semen layer and images --- .../05-renderer/20-canvasmodel-combat-pc.js | 2 +- img/sex/doggy/tentacles/vagina-sperm.png | Bin 0 -> 199 bytes img/sex/missionary/tentacles/vagina-sperm.png | Bin 0 -> 199 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 img/sex/doggy/tentacles/vagina-sperm.png create mode 100644 img/sex/missionary/tentacles/vagina-sperm.png diff --git a/game/03-JavaScript/05-renderer/20-canvasmodel-combat-pc.js b/game/03-JavaScript/05-renderer/20-canvasmodel-combat-pc.js index 8351298477..7295bf8edf 100644 --- a/game/03-JavaScript/05-renderer/20-canvasmodel-combat-pc.js +++ b/game/03-JavaScript/05-renderer/20-canvasmodel-combat-pc.js @@ -618,7 +618,7 @@ const combatMainPc = { }, tentacleVaginaCum: { srcfn(options) { - return `${options.src}body/vaginal/vaginalcum.png`; + return `${options.src}tentacles/vagina-sperm.png`; }, showfn(options) { return options.tentacles.vagina.show && V.vaginastate === "tentacledeep"; diff --git a/img/sex/doggy/tentacles/vagina-sperm.png b/img/sex/doggy/tentacles/vagina-sperm.png new file mode 100644 index 0000000000000000000000000000000000000000..3adaf77894e770ddc93f37aba3e8873f9d507f7f GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0y~yU;#22fe;8-<19OY6jMo%UoZnh+2pepKwg8Vi(^Q| zt+(e6@-`T7I9ybV?fC02dthPAffEN!7VIlmJs{5v(u@Lj6y526?(;3&sQ(+|$;LPT zBThE{W4t|8d<y%8IF1$j;^iFv*e$4C(D13@TjOo!P3-si6@>Ypzvr)z`tg_H(RZ+G czy@A8$!Q+UyZWn>*F_ND)78&qol`;+0KqRp0{{R3 literal 0 HcmV?d00001 diff --git a/img/sex/missionary/tentacles/vagina-sperm.png b/img/sex/missionary/tentacles/vagina-sperm.png new file mode 100644 index 0000000000000000000000000000000000000000..3adaf77894e770ddc93f37aba3e8873f9d507f7f GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0y~yU;#22fe;8-<19OY6jMo%UoZnh+2pepKwg8Vi(^Q| zt+(e6@-`T7I9ybV?fC02dthPAffEN!7VIlmJs{5v(u@Lj6y526?(;3&sQ(+|$;LPT zBThE{W4t|8d<y%8IF1$j;^iFv*e$4C(D13@TjOo!P3-si6@>Ypzvr)z`tg_H(RZ+G czy@A8$!Q+UyZWn>*F_ND)78&qol`;+0KqRp0{{R3 literal 0 HcmV?d00001 -- GitLab From 01f6d64094abb2649b904460d04b5b291609a198 Mon Sep 17 00:00:00 2001 From: Jimmys <jimmysilverstein@proton.me> Date: Fri, 3 Jan 2025 18:44:47 +0000 Subject: [PATCH 11/12] Fix rogue 0 in pillory new NPC logic --- game/overworld-town/loc-street/cliff.twee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/game/overworld-town/loc-street/cliff.twee b/game/overworld-town/loc-street/cliff.twee index 1fea1d5ed8..17381dc6f0 100644 --- a/game/overworld-town/loc-street/cliff.twee +++ b/game/overworld-town/loc-street/cliff.twee @@ -87,7 +87,7 @@ There's a path leading down to the beach. <<else>> /* Sentence ongoing to tomorrow. */ <<npc_pillory>> <</if>> - <<elseif $rng lte 100>> /* Pillory empty gives 10% chance of new person */ + <<elseif $rng lte 10>> /* Pillory empty gives 10% chance of new person */ <<new_npc_pillory>> <</if>> <</if>> -- GitLab From 1b25683de8db598cb7926cd42d1b95638099c8ad Mon Sep 17 00:00:00 2001 From: Jimmys <jimmysilverstein@proton.me> Date: Fri, 3 Jan 2025 18:50:35 +0000 Subject: [PATCH 12/12] Add daily lockout for pillory usage if someone was freed --- game/overworld-town/loc-street/cliff.twee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/game/overworld-town/loc-street/cliff.twee b/game/overworld-town/loc-street/cliff.twee index 17381dc6f0..93521bc76d 100644 --- a/game/overworld-town/loc-street/cliff.twee +++ b/game/overworld-town/loc-street/cliff.twee @@ -87,7 +87,7 @@ There's a path leading down to the beach. <<else>> /* Sentence ongoing to tomorrow. */ <<npc_pillory>> <</if>> - <<elseif $rng lte 10>> /* Pillory empty gives 10% chance of new person */ + <<elseif $rng lte 10 and !$daily.freedPillory>> /* Pillory empty gives 10% chance of new person */ <<new_npc_pillory>> <</if>> <</if>> @@ -735,6 +735,7 @@ Once out of sight of the crowd, you disappear together into an alley. <<else>> "Thank you," <<the_pillory_person>> says, earnestly. "That was so horrible. You really helped me out." <</if>> +<<set $daily.freedPillory to true>> <<clear_pillory>> <<endevent>><<famegood 15>> <br><br> -- GitLab