From 92dcaeae0c585683f8612e9b01f4344d67c32637 Mon Sep 17 00:00:00 2001 From: xao321 <xao321@hotmail.com> Date: Wed, 29 May 2024 17:55:09 +0200 Subject: [PATCH] - Made stars less prominent during dawn and dusk - Removed Time.nightState since it's unused, and redundant - Reorganised file structure slightly - Added weather icons for minimised mobile views - Unset $startingseason since it's no longer used after game start - Some file cleanup --- .../03-compression/dictionaries.js | 3 - game/03-JavaScript/save.js | 1 - game/03-JavaScript/time.js | 27 ++-- .../weather/01-setup/weather-generation.js | 5 + .../weather/02-main/01-weather.js | 12 +- .../weather/02-main/02-body-temperature.js | 3 - .../00-fadable.js => 00-classes/fadable.js} | 0 .../00-orbit.js => 00-classes/orbit.js} | 0 .../01-sky.js => 00-classes/sky-canvas.js} | 123 ------------------ .../weather-Animation.js} | 2 - .../weather-AnimationGroup.js} | 2 - .../weather-Effect.js} | 2 - .../weather-Layer.js} | 1 - .../03-canvas/01-src/01-main/00-main.js | 20 +++ .../01-src/01-main/00-thermometer.js} | 51 +------- .../03-canvas/01-src/01-main/01-events.js | 88 +++++++++++++ .../03-canvas/01-src/01-main/02-macros.js | 41 ++++++ .../03-canvas/01-src/01-main/03-tooltips.js | 71 ++++++++++ .../03-canvas/01-src/01-observables.js | 6 +- .../02-lib/00-effects/effects-clouds.js | 1 - .../02-lib/00-effects/effects-generic.js | 1 - .../02-lib/00-effects/effects-location.js | 5 +- .../02-lib/00-effects/effects-orbitals.js | 1 - .../00-effects/effects-precipitation.js | 1 - .../02-lib/00-effects/effects-sky.js | 1 - .../{docs-layers.txt => 00-docs-layers.txt} | 0 .../02-lib/01-layers/banner-canvas-layers.js | 3 +- .../03-canvas/02-lib/01-layers/layer-fog.js | 1 - .../03-canvas/02-lib/01-layers/layer-moon.js | 1 - .../02-lib/01-layers/layer-precipitation.js | 1 - .../03-canvas/02-lib/01-layers/layer-sky.js | 1 - .../02-lib/01-layers/layer-starfield.js | 3 +- .../03-canvas/02-lib/01-layers/layer-sun.js | 1 - game/04-Variables/variables-start2.twee | 8 +- .../04-Variables/variables-versionUpdate.twee | 9 +- game/base-system/mobileStats.twee | 5 + game/base-system/overlays/journal.twee | 2 +- game/base-system/overlays/options.twee | 2 +- modules/css/base.css | 14 ++ 39 files changed, 274 insertions(+), 245 deletions(-) rename game/03-JavaScript/weather/03-canvas/01-src/{01-main/00-fadable.js => 00-classes/fadable.js} (100%) rename game/03-JavaScript/weather/03-canvas/01-src/{01-main/00-orbit.js => 00-classes/orbit.js} (100%) rename game/03-JavaScript/weather/03-canvas/01-src/{01-main/01-sky.js => 00-classes/sky-canvas.js} (73%) rename game/03-JavaScript/weather/03-canvas/01-src/{01-main/00-weather-Animation.js => 00-classes/weather-Animation.js} (98%) rename game/03-JavaScript/weather/03-canvas/01-src/{01-main/00-weather-AnimationGroup.js => 00-classes/weather-AnimationGroup.js} (96%) rename game/03-JavaScript/weather/03-canvas/01-src/{01-main/00-weather-Effect.js => 00-classes/weather-Effect.js} (98%) rename game/03-JavaScript/weather/03-canvas/01-src/{01-main/00-weather-Layer.js => 00-classes/weather-Layer.js} (99%) create mode 100644 game/03-JavaScript/weather/03-canvas/01-src/01-main/00-main.js rename game/03-JavaScript/weather/{02-main/03-thermometer.js => 03-canvas/01-src/01-main/00-thermometer.js} (59%) create mode 100644 game/03-JavaScript/weather/03-canvas/01-src/01-main/01-events.js create mode 100644 game/03-JavaScript/weather/03-canvas/01-src/01-main/02-macros.js create mode 100644 game/03-JavaScript/weather/03-canvas/01-src/01-main/03-tooltips.js rename game/03-JavaScript/weather/03-canvas/02-lib/01-layers/{docs-layers.txt => 00-docs-layers.txt} (100%) diff --git a/game/00-framework-tools/03-compression/dictionaries.js b/game/00-framework-tools/03-compression/dictionaries.js index 8dd8b92dbe..b551b956ea 100644 --- a/game/00-framework-tools/03-compression/dictionaries.js +++ b/game/00-framework-tools/03-compression/dictionaries.js @@ -1621,9 +1621,6 @@ const DoLCompressorDictionaries = (() => { "stalk_intro", "stall_rejected", "stance", - "startday", - "starthour", - "startingseason", "stat_aphrodisiacs_sold", "stat_lurkers_captured", "stat_panties_stolen", diff --git a/game/03-JavaScript/save.js b/game/03-JavaScript/save.js index 9304b8bb5f..10d7a2b8a7 100644 --- a/game/03-JavaScript/save.js +++ b/game/03-JavaScript/save.js @@ -887,7 +887,6 @@ function settingsObjects(type) { randomize: "characterTrait", }, gamemode: { strings: ["normal", "soft", "hard"], displayName: "Game difficulty:" }, - startingseason: { strings: ["autumn", "winter", "spring", "summer", "random"], displayName: "Starting season:", randomize: "gameplay" }, ironmanmode: { bool: false, displayName: "Ironman mode:" }, player: { gender: { diff --git a/game/03-JavaScript/time.js b/game/03-JavaScript/time.js index e817b8b49e..8ffe17e43d 100644 --- a/game/03-JavaScript/time.js +++ b/game/03-JavaScript/time.js @@ -278,6 +278,10 @@ const Time = (() => { return (date.day === date.lastDayOfMonth && date.hour >= 21) || (date.day === 1 && date.hour < 6); } + function getSeason(date) { + return date.month > 11 || date.month < 3 ? "winter" : date.month > 8 ? "autumn" : date.month > 5 ? "summer" : "spring"; + } + return Object.create({ get date() { return currentDate; @@ -313,10 +317,10 @@ const Time = (() => { return currentDate.year; }, get days() { - return Math.floor((currentDate.timeStamp - this.startDate.timeStamp) / TimeConstants.secondsPerDay); + return Math.floor((currentDate.timeStamp - Time.startDate.timeStamp) / TimeConstants.secondsPerDay); }, get season() { - return this.month > 11 || this.month < 3 ? "winter" : this.month > 8 ? "autumn" : this.month > 5 ? "summer" : "spring"; + return getSeason(currentDate); }, set startDate(value) { V.startDate = value.timeStamp; @@ -342,7 +346,7 @@ const Time = (() => { return isSchoolTime(currentDate); }, get dayState() { - const hour = this.hour; + const hour = currentDate.hour; if (hour < 6 || hour >= 21) { return "night"; } @@ -351,16 +355,6 @@ const Time = (() => { } return hour >= 9 ? "day" : "dawn"; }, - get nightState() { - const hour = this.hour; - if (hour < 6) { - return "morning"; - } - if (hour >= 9) { - return "evening"; - } - return undefined; - }, get nextSchoolTermStartDate() { return getNextSchoolTermStartDate(currentDate); }, @@ -392,13 +386,12 @@ const Time = (() => { nextMoonPhase, previousMoonPhase, isBloodMoon, - + getSeason, + getNextSchoolTermStartDate, + getNextSchoolTermEndDate, moonPhases, monthNames, daysOfWeek, - - getNextSchoolTermStartDate, - getNextSchoolTermEndDate, getNextWeekdayDate: weekDay => currentDate.getNextWeekdayDate(weekDay), getPreviousWeekdayDate: weekDay => currentDate.getPreviousWeekdayDate(weekDay), isWeekEnd: () => currentDate.weekEnd, diff --git a/game/03-JavaScript/weather/01-setup/weather-generation.js b/game/03-JavaScript/weather/01-setup/weather-generation.js index a3bd5e94ed..76077c4dcb 100644 --- a/game/03-JavaScript/weather/01-setup/weather-generation.js +++ b/game/03-JavaScript/weather/01-setup/weather-generation.js @@ -141,6 +141,7 @@ setup.WeatherGeneration = { weatherTypes: [ { name: "clear", + iconType: "clear", // Determines which icon to use for the minimised sidebar value: 0, // Value determines how to interpolate between different weather types. It always interpolates to a adjacent value first. probability: { // Weighted probabilities per month - there are compared to the other weather types, and not to the other seasons. @@ -169,6 +170,7 @@ setup.WeatherGeneration = { }, { name: "lightClouds", + iconType: "clouds", value: 1, probability: { summer: 0.5, @@ -188,6 +190,7 @@ setup.WeatherGeneration = { }, { name: "heavyClouds", + iconType: "clouds", value: 2, probability: { summer: 0.1, @@ -207,6 +210,7 @@ setup.WeatherGeneration = { }, { name: "lightPrecipitation", + iconType: () => "light_" + Weather.precipitation, value: 3, probability: { summer: 0.05, @@ -226,6 +230,7 @@ setup.WeatherGeneration = { }, { name: "heavyPrecipitation", + iconType: () => "heavy_" + Weather.precipitation, value: 4, probability: { summer: 0.05, diff --git a/game/03-JavaScript/weather/02-main/01-weather.js b/game/03-JavaScript/weather/02-main/01-weather.js index a6618adddd..6cdaab408c 100644 --- a/game/03-JavaScript/weather/02-main/01-weather.js +++ b/game/03-JavaScript/weather/02-main/01-weather.js @@ -1,14 +1,4 @@ -/* eslint-disable no-undef */ -/* eslint-disable no-unused-vars */ -/* - -- Add function: - - Only use winter-images after it has snowed once - - if it melts (at least 5 hours of warm temperature) back to normal images until it snow again -*/ - const Weather = (() => { - const _activeRenderer = {}; /* Helper functions */ function generateKeyPoints({ date, minKeys, maxKeys, timeApart, rangeValue, totalSteps }) { @@ -37,7 +27,7 @@ const Weather = (() => { * sunBlockModifier (based on used sun block) * dayFactor (based on sun position in the sky) - always 0 at night * - * @param {bool} outside Forces outside check + * @param {boolean} outside Forces outside check * @param {number} customSunIntensity If this is set - the calculations replaces the sun intensity with a specified one. */ function getTanningFactor(outside, customSunIntensity = 0) { diff --git a/game/03-JavaScript/weather/02-main/02-body-temperature.js b/game/03-JavaScript/weather/02-main/02-body-temperature.js index aaf2ac3789..10625025fb 100644 --- a/game/03-JavaScript/weather/02-main/02-body-temperature.js +++ b/game/03-JavaScript/weather/02-main/02-body-temperature.js @@ -1,6 +1,3 @@ -/* eslint-disable no-undef */ -/* eslint-disable no-unused-vars */ - /** * Manages the body temperature of the player in the game. * Simulates the body's regulation of heat generation to maintain the base body temperature diff --git a/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-fadable.js b/game/03-JavaScript/weather/03-canvas/01-src/00-classes/fadable.js similarity index 100% rename from game/03-JavaScript/weather/03-canvas/01-src/01-main/00-fadable.js rename to game/03-JavaScript/weather/03-canvas/01-src/00-classes/fadable.js diff --git a/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-orbit.js b/game/03-JavaScript/weather/03-canvas/01-src/00-classes/orbit.js similarity index 100% rename from game/03-JavaScript/weather/03-canvas/01-src/01-main/00-orbit.js rename to game/03-JavaScript/weather/03-canvas/01-src/00-classes/orbit.js diff --git a/game/03-JavaScript/weather/03-canvas/01-src/01-main/01-sky.js b/game/03-JavaScript/weather/03-canvas/01-src/00-classes/sky-canvas.js similarity index 73% rename from game/03-JavaScript/weather/03-canvas/01-src/01-main/01-sky.js rename to game/03-JavaScript/weather/03-canvas/01-src/00-classes/sky-canvas.js index 4d63432342..5eaf8a6643 100644 --- a/game/03-JavaScript/weather/03-canvas/01-src/01-main/01-sky.js +++ b/game/03-JavaScript/weather/03-canvas/01-src/00-classes/sky-canvas.js @@ -242,126 +242,3 @@ Weather.Renderer.Sky = class { this.layers.get("moon").init(); } }; - -Weather.sky = new Weather.Renderer.Sky({ - id: "canvasSkybox", - setup: setup.SkySettings.canvas.sidebar, - layers: [ - "sky", - "starField", - "sun", - "moon", - "cirrusClouds", - "overcastClouds", - "clouds", - "horizonGlow", - "location", - "precipitation", - "bloodGlow", - "sunGlow", - "fog", - ], -}); - -// Initialize on loading a save -$(document).on(":onloadsave", () => { - if (!Weather.sky?.loaded.value) return; - Weather.activeRenderer = Weather.sky; - Weather.sky.initialize(); -}); - -// Clear all layers on restart -$(document).on(":enginerestart", () => { - Weather.sky?.stopAll(); -}); - -$(document).on(":passageend", () => { - // Initialise banner on passageend in order to load Time and localStorage correctly - if (State.passage === "Start" && !Weather.banner?.loaded.value) { - // Load localStorage weather object if it exists - then set the weatherObj - // Otherwise set a default time state - const weatherData = localStorage.getItem("weather"); - const timeData = localStorage.getItem("time"); - let startTime = new DateTime(2022, 8, 10, 23, 45); - if (weatherData) { - Packer.unpackWeatherData(weatherData); - startTime = new DateTime(parseInt(timeData, 36)); - } - Time.set(startTime); - Weather.banner.initialize(); - } -}); - -// Initialize on page refresh -$(document).on(":passagestart", () => { - // Setup banner for start menu - if (State.passage === "Start") { - // Set temporary weatherObj for Start menu - V.weatherObj = { - name: "lightClouds", - snow: 0, - ice: {}, - fog: 0, - overcast: 0, - targetOvercast: 0, - monthlyTemperatures: [], - keypointsArr: [], - }; - Time.set(0); - - if (!Weather.banner?.loaded.value) { - // Setup banner canvas - Weather.banner = new Weather.Renderer.Sky({ - id: "canvasBanner", - setup: setup.SkySettings.canvas.banner, - layers: [ - "bannerSky", - "sun", - "bannerSunGlow", - "moon", - "bannerCirrusClouds", - "bannerOvercastClouds", - "bannerClouds", - "bannerStarField", - "bloodGlow", - "bannerPrecipitation", - "location", - ], - resizable: true, - }); - } - - Weather.activeRenderer = Weather.banner; - return; - } - - // Remove banner canvas if no longer on start menu - if (State.passage !== "Start" && Weather.banner) { - Weather.banner.stopAll(); - delete Weather.banner; - } - - // Return if sidebar has already been initialised - if (!V.weatherObj || Weather.sky?.loaded.value) return; - - Weather.activeRenderer = Weather.sky; - Weather.sky.initialize(); -}); - -Macro.add("skybox", { - handler() { - Weather.sky.skybox.appendTo(this.output); - }, -}); - -Macro.add("banner", { - handler() { - Weather.banner.skybox.appendTo(this.output); - // Use fallback image if it exists (modded game) - otherwise just use the banner canvas - const bannerFallbackImage = new Image(); - bannerFallbackImage.src = "img/misc/banner.png"; - bannerFallbackImage.onload = () => { - Weather.banner.skybox.empty().append($(bannerFallbackImage)); - }; - }, -}); diff --git a/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-weather-Animation.js b/game/03-JavaScript/weather/03-canvas/01-src/00-classes/weather-Animation.js similarity index 98% rename from game/03-JavaScript/weather/03-canvas/01-src/01-main/00-weather-Animation.js rename to game/03-JavaScript/weather/03-canvas/01-src/00-classes/weather-Animation.js index 3498d58664..7c1510e650 100644 --- a/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-weather-Animation.js +++ b/game/03-JavaScript/weather/03-canvas/01-src/00-classes/weather-Animation.js @@ -1,5 +1,3 @@ -/* eslint-disable no-undef */ -/* eslint-disable no-unused-vars */ Weather.Renderer.Animation = class Animation { constructor(options) { this.image = options.image; diff --git a/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-weather-AnimationGroup.js b/game/03-JavaScript/weather/03-canvas/01-src/00-classes/weather-AnimationGroup.js similarity index 96% rename from game/03-JavaScript/weather/03-canvas/01-src/01-main/00-weather-AnimationGroup.js rename to game/03-JavaScript/weather/03-canvas/01-src/00-classes/weather-AnimationGroup.js index 5de86577a9..b197b23184 100644 --- a/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-weather-AnimationGroup.js +++ b/game/03-JavaScript/weather/03-canvas/01-src/00-classes/weather-AnimationGroup.js @@ -1,5 +1,3 @@ -/* eslint-disable no-undef */ -/* eslint-disable no-unused-vars */ Weather.Renderer.AnimationGroup = class AnimationGroup { constructor(options, onUpdate) { this.lastUpdateTime = 0; diff --git a/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-weather-Effect.js b/game/03-JavaScript/weather/03-canvas/01-src/00-classes/weather-Effect.js similarity index 98% rename from game/03-JavaScript/weather/03-canvas/01-src/01-main/00-weather-Effect.js rename to game/03-JavaScript/weather/03-canvas/01-src/00-classes/weather-Effect.js index 807cf045bf..39400d8d10 100644 --- a/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-weather-Effect.js +++ b/game/03-JavaScript/weather/03-canvas/01-src/00-classes/weather-Effect.js @@ -1,5 +1,3 @@ -/* eslint-disable no-undef */ -/* eslint-disable no-unused-vars */ Weather.Renderer.Effect = class Effect { constructor(effect, condition, compositeOperation, params) { this.params = params ?? {}; diff --git a/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-weather-Layer.js b/game/03-JavaScript/weather/03-canvas/01-src/00-classes/weather-Layer.js similarity index 99% rename from game/03-JavaScript/weather/03-canvas/01-src/01-main/00-weather-Layer.js rename to game/03-JavaScript/weather/03-canvas/01-src/00-classes/weather-Layer.js index 9694546ef8..a0daba0950 100644 --- a/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-weather-Layer.js +++ b/game/03-JavaScript/weather/03-canvas/01-src/00-classes/weather-Layer.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ Weather.Renderer.Layer = class Layer { constructor(name, blur, zIndex = 0, animation = undefined) { this.name = name; diff --git a/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-main.js b/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-main.js new file mode 100644 index 0000000000..adb6b622f0 --- /dev/null +++ b/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-main.js @@ -0,0 +1,20 @@ +/* Create the sky canvas instance */ +Weather.sky = new Weather.Renderer.Sky({ + id: "canvasSkybox", + setup: setup.SkySettings.canvas.sidebar, + layers: [ + "sky", + "starField", + "sun", + "moon", + "cirrusClouds", + "overcastClouds", + "clouds", + "horizonGlow", + "location", + "precipitation", + "bloodGlow", + "sunGlow", + "fog", + ], +}); diff --git a/game/03-JavaScript/weather/02-main/03-thermometer.js b/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-thermometer.js similarity index 59% rename from game/03-JavaScript/weather/02-main/03-thermometer.js rename to game/03-JavaScript/weather/03-canvas/01-src/01-main/00-thermometer.js index 3802938982..c445e2882b 100644 --- a/game/03-JavaScript/weather/02-main/03-thermometer.js +++ b/game/03-JavaScript/weather/03-canvas/01-src/01-main/00-thermometer.js @@ -1,4 +1,3 @@ -/* eslint-disable no-new */ Weather.Thermometer = (() => { const temperature = { min: 34, @@ -46,7 +45,7 @@ Weather.Thermometer = (() => { }); Promise.all(loadPromises).then(() => { - thermometerCanvas = new BaseCanvas(0, 0, 0.5); //todo move to after img size is set + thermometerCanvas = new BaseCanvas(0, 0, 0.5); const baseImg = images.baseImg.img; size.width = baseImg.width * size.scaleFactor; size.height = baseImg.height * size.scaleFactor; @@ -111,40 +110,7 @@ Weather.Thermometer = (() => { thermometerCanvas.ctx.fillRect(13, 2, img.width, img.height); } - updateTooltip(); - } - - function updateTooltip() { - const tempDescription = Weather.TooltipDescriptions.bodyTemperature(); - const waterDescription = `<br>${Weather.TooltipDescriptions.waterTemperature()}`; - const fatigueModifier = categorise(Weather.BodyTemperature.fatigueModifier, 1, Weather.tempSettings.effects.maxFatigueGainMultiplier, 4); - const arousalModifier = categorise(Weather.BodyTemperature.arousalModifier, 1, Weather.tempSettings.effects.maxArousalGainMultiplier, 4); - const painModifier = categorise(Weather.BodyTemperature.painModifier, 1, Weather.tempSettings.effects.maxPainGainMultiplier, 4); - const stressModifier = categorise(Weather.BodyTemperature.stressModifier, 0, Weather.tempSettings.effects.lowerMaxStressGain, 4); - - const arousalOutput = arousalModifier > 0 ? `<span class="teal">${"- ".repeat(Math.abs(arousalModifier))}Arousal gains</span><br>` : ""; - const fatigueOutput = fatigueModifier > 0 ? `<span class="red">${"+ ".repeat(Math.abs(fatigueModifier))}Fatigue gains</span><br>` : ""; - const painOutput = painModifier > 0 ? `<span class="red">${"+ ".repeat(Math.abs(painModifier))}Pain gains</span><br>` : ""; - const stressOutput = stressModifier > 0 ? `<span class="red">${"+ ".repeat(Math.abs(stressModifier))}Stress gains</span><br>` : ""; - const modifiers = - arousalOutput || fatigueOutput || painOutput || stressOutput ? "<br>" + arousalOutput + fatigueOutput + painOutput + stressOutput : ""; - - const direction = Weather.BodyTemperature.direction > 0 ? "(increasing)" : Weather.BodyTemperature.direction < 0 ? "(decreasing)" : ""; - // eslint-disable-next-line prettier/prettier - const debug = V.debug ? `<br><br><span class="teal">DEBUG:</span><br><span class="blue">Passage:</span> <span class="yellow">${V.passage}</span> - <br><span class="blue">Time:</span> <span class="yellow">${ampm()}</span> - <br><span class="blue">Body temperature:</span> <span class="yellow">${Weather.toSelectedString(Weather.bodyTemperature)} ${direction}</span> - <br><span class="blue">Body wetness:</span> <span class="yellow">${Math.round(Weather.wetness * 100)}%</span> - <br><span class="blue">Clothing warmth:</span> <span class="yellow">${Weather.BodyTemperature.getTotalWarmth()}</span> - <br><span class="blue">Target temperature (current clothing)</span> <span class="yellow">${Weather.toSelectedString( - Weather.BodyTemperature.getRestingPoint(6) - )}</span>` - : ""; - tooltipElement.tooltip({ - message: tempDescription + waterDescription + modifiers + debug, - delay: 200, - position: "cursor", - }); + Weather.Tooltips.thermometer(); } return Object.create({ @@ -153,18 +119,5 @@ Weather.Thermometer = (() => { enabled, load, update, - updateTooltip, }); })(); - -Macro.add("thermometer", { - handler() { - Weather.Thermometer.element.appendTo(this.output); - Weather.Thermometer.tooltipElement.appendTo(this.output); - Weather.Thermometer.update(); - }, -}); - -$(document).one(":passagerender", () => { - Weather.Thermometer.load(); -}); diff --git a/game/03-JavaScript/weather/03-canvas/01-src/01-main/01-events.js b/game/03-JavaScript/weather/03-canvas/01-src/01-main/01-events.js new file mode 100644 index 0000000000..9acb553ae9 --- /dev/null +++ b/game/03-JavaScript/weather/03-canvas/01-src/01-main/01-events.js @@ -0,0 +1,88 @@ +/* Initialize sky canvas on loading a save */ +$(document).on(":onloadsave", () => { + if (!Weather.sky?.loaded.value) return; + Weather.activeRenderer = Weather.sky; + Weather.sky.initialize(); +}); + +/* Clear all layers on restart */ +$(document).on(":enginerestart", () => { + Weather.sky?.stopAll(); +}); + +/* Initialise banner canvas on passageend in order to load Time and localStorage correctly */ +$(document).on(":passageend", () => { + if (State.passage === "Start" && !Weather.banner?.loaded.value) { + // Load localStorage weather object if it exists - then set the weatherObj + // Otherwise set a default time state + const weatherData = localStorage.getItem("weather"); + const timeData = localStorage.getItem("time"); + let startTime = new DateTime(2022, 8, 10, 23, 45); + if (weatherData) { + Packer.unpackWeatherData(weatherData); + startTime = new DateTime(parseInt(timeData, 36)); + } + Time.set(startTime); + Weather.banner.initialize(); + } +}); + +/* Initialize sky canvas on page refresh */ +$(document).on(":passagestart", () => { + // Setup banner for start menu + if (State.passage === "Start") { + // Set temporary weatherObj for Start menu + V.weatherObj = { + name: "lightClouds", + snow: 0, + ice: {}, + fog: 0, + overcast: 0, + targetOvercast: 0, + monthlyTemperatures: [], + keypointsArr: [], + }; + Time.set(0); + + // Setup banner canvas + if (!Weather.banner?.loaded.value) { + Weather.banner = new Weather.Renderer.Sky({ + id: "canvasBanner", + setup: setup.SkySettings.canvas.banner, + layers: [ + "bannerSky", + "sun", + "bannerSunGlow", + "moon", + "bannerCirrusClouds", + "bannerOvercastClouds", + "bannerClouds", + "bannerStarField", + "bloodGlow", + "bannerPrecipitation", + "location", + ], + resizable: true, + }); + } + + Weather.activeRenderer = Weather.banner; + return; + } + + // Remove banner canvas if no longer on start menu + if (State.passage !== "Start" && Weather.banner) { + Weather.banner.stopAll(); + delete Weather.banner; + } + + // Return if sidebar has already been initialised + if (!V.weatherObj || Weather.sky?.loaded.value) return; + + Weather.activeRenderer = Weather.sky; + Weather.sky.initialize(); +}); + +$(document).one(":passagerender", () => { + Weather.Thermometer.load(); +}); diff --git a/game/03-JavaScript/weather/03-canvas/01-src/01-main/02-macros.js b/game/03-JavaScript/weather/03-canvas/01-src/01-main/02-macros.js new file mode 100644 index 0000000000..cb1863d479 --- /dev/null +++ b/game/03-JavaScript/weather/03-canvas/01-src/01-main/02-macros.js @@ -0,0 +1,41 @@ +Macro.add("skybox", { + handler() { + Weather.sky.skybox.appendTo(this.output); + }, +}); + +Macro.add("banner", { + handler() { + Weather.banner.skybox.appendTo(this.output); + // Use fallback image if it exists (modded game) - otherwise just use the banner canvas + const bannerFallbackImage = new Image(); + bannerFallbackImage.src = "img/misc/banner.png"; + bannerFallbackImage.onload = () => { + Weather.banner.skybox.empty().append($(bannerFallbackImage)); + }; + }, +}); + +Macro.add("thermometer", { + handler() { + Weather.Thermometer.element.appendTo(this.output); + Weather.Thermometer.tooltipElement.appendTo(this.output); + Weather.Thermometer.update(); + }, +}); + +Macro.add("weatherIcon", { + handler() { + const iconDiv = $("<div />", { id: "weatherIcon" }); + const iconImg = $("<img />"); + + const dayState = Weather.bloodMoon ? "blood" : Weather.dayState === "night" ? "night" : "day"; + const weatherState = resolveValue(Weather.type.iconType, "clear"); + const path = `img/misc/icon/weather/${dayState}_${weatherState}.png`; + + iconImg.attr("src", path); + Weather.Tooltips.skybox(iconImg); + iconDiv.append(iconImg); + iconDiv.appendTo(this.output); + }, +}); diff --git a/game/03-JavaScript/weather/03-canvas/01-src/01-main/03-tooltips.js b/game/03-JavaScript/weather/03-canvas/01-src/01-main/03-tooltips.js new file mode 100644 index 0000000000..2b9f044857 --- /dev/null +++ b/game/03-JavaScript/weather/03-canvas/01-src/01-main/03-tooltips.js @@ -0,0 +1,71 @@ +Weather.Tooltips = (() => { + function skybox(element = Weather.sky.skybox) { + // Maybe not hardcode this here + const key = V.location === "tentworld" ? "tentaclePlains" : Weather.name; + const weatherState = Weather.TooltipDescriptions.type[key]; + + if (!weatherState) return; + const transition = weatherState.transition ? weatherState.transition() : null; + const weatherDescription = transition || (typeof weatherState === "string" ? weatherState : resolveValue(weatherState[Weather.skyState], "")); + + const tempDescription = Weather.TooltipDescriptions.temperature(); + const debug = V.debug + ? `<br><br><span class="teal">DEBUG:</span> + <br><span class="blue">Passage:</span> <span class="yellow">${V.passage}</span> + <br><span class="blue">Time:</span> <span class="yellow">${ampm()}</span> + <br><span class="blue">Weather:</span> <span class="yellow">${Weather.name}</span> + <br><span class="blue">Outside temperature:</span> <span class="yellow">${Weather.toSelectedString(Weather.temperature)}</span> + <br><span class="blue">Inside temperature:</span> <span class="yellow">${Weather.toSelectedString(Weather.insideTemperature)}</span> + <br><span class="blue">Water temperature:</span> <span class="yellow">${Weather.toSelectedString(Weather.waterTemperature)}</span> + <br><span class="blue">Body temperature:</span> <span class="yellow">${Weather.toSelectedString(Weather.bodyTemperature)}</span> + <br><span class="blue">Sun intensity:</span> <span class="yellow">${round(Weather.sunIntensity * 100, 2)}% (${V.outside ? "outside" : "inside"})</span> + <br><span class="blue">Overcast amount:</span> <span class="yellow">${round(Weather.overcast * 100, 2)}%</span> + <br><span class="blue">Fog amount:</span> <span class="yellow">${round(Weather.fog * 100, 2)}%</span> + <br><span class="blue">Snow ground accumulation:</span> <span class="yellow">${V.weatherObj.snow}mm</span> + <br><span class="blue">Lake ice thickness:</span> <span class="yellow">${V.weatherObj.ice.lake ?? 0}mm</span>` + : ""; + element.tooltip({ + message: `${weatherDescription}<br>${tempDescription}${debug}`, + delay: 200, + position: "cursor", + }); + } + + function thermometer() { + const tempDescription = Weather.TooltipDescriptions.bodyTemperature(); + const waterDescription = `<br>${Weather.TooltipDescriptions.waterTemperature()}`; + const fatigueModifier = categorise(Weather.BodyTemperature.fatigueModifier, 1, Weather.tempSettings.effects.maxFatigueGainMultiplier, 4); + const arousalModifier = categorise(Weather.BodyTemperature.arousalModifier, 1, Weather.tempSettings.effects.maxArousalGainMultiplier, 4); + const painModifier = categorise(Weather.BodyTemperature.painModifier, 1, Weather.tempSettings.effects.maxPainGainMultiplier, 4); + const stressModifier = categorise(Weather.BodyTemperature.stressModifier, 0, Weather.tempSettings.effects.lowerMaxStressGain, 4); + + const arousalOutput = arousalModifier > 0 ? `<span class="teal">${"- ".repeat(Math.abs(arousalModifier))}Arousal gains</span><br>` : ""; + const fatigueOutput = fatigueModifier > 0 ? `<span class="red">${"+ ".repeat(Math.abs(fatigueModifier))}Fatigue gains</span><br>` : ""; + const painOutput = painModifier > 0 ? `<span class="red">${"+ ".repeat(Math.abs(painModifier))}Pain gains</span><br>` : ""; + const stressOutput = stressModifier > 0 ? `<span class="red">${"+ ".repeat(Math.abs(stressModifier))}Stress gains</span><br>` : ""; + const modifiers = + arousalOutput || fatigueOutput || painOutput || stressOutput ? "<br>" + arousalOutput + fatigueOutput + painOutput + stressOutput : ""; + + const direction = Weather.BodyTemperature.direction > 0 ? "(increasing)" : Weather.BodyTemperature.direction < 0 ? "(decreasing)" : ""; + // eslint-disable-next-line prettier/prettier + const debug = V.debug ? `<br><br><span class="teal">DEBUG:</span><br><span class="blue">Passage:</span> <span class="yellow">${V.passage}</span> + <br><span class="blue">Time:</span> <span class="yellow">${ampm()}</span> + <br><span class="blue">Body temperature:</span> <span class="yellow">${Weather.toSelectedString(Weather.bodyTemperature)} ${direction}</span> + <br><span class="blue">Body wetness:</span> <span class="yellow">${Math.round(Weather.wetness * 100)}%</span> + <br><span class="blue">Clothing warmth:</span> <span class="yellow">${Weather.BodyTemperature.getTotalWarmth()}</span> + <br><span class="blue">Target temperature (current clothing)</span> <span class="yellow">${Weather.toSelectedString( + Weather.BodyTemperature.getRestingPoint(6) + )}</span>` + : ""; + Weather.Thermometer.tooltipElement.tooltip({ + message: tempDescription + waterDescription + modifiers + debug, + delay: 200, + position: "cursor", + }); + } + + return { + skybox, + thermometer, + }; +})(); diff --git a/game/03-JavaScript/weather/03-canvas/01-src/01-observables.js b/game/03-JavaScript/weather/03-canvas/01-src/01-observables.js index 73cd90aa1c..1104eef71d 100644 --- a/game/03-JavaScript/weather/03-canvas/01-src/01-observables.js +++ b/game/03-JavaScript/weather/03-canvas/01-src/01-observables.js @@ -45,7 +45,7 @@ Weather.Observables = (() => { Object.keys(setup.WeatherBindings).forEach(key => (observables[key] = new ObservableValue(null))); const setBindings = () => { - if (Weather.sky?.loaded.value) Weather.sky.updateTooltip(); + if (Weather.sky?.loaded.value) Weather.Tooltips.skybox(); Object.entries(setup.WeatherBindings).forEach(([key, config]) => { const value = config.variable(); observables[key].value = value; @@ -58,7 +58,7 @@ Weather.Observables = (() => { if (value === undefined) return; if (config.layers.includes("all")) { scheduler.scheduleUpdate("all", async () => { - Weather.sky.updateTooltip(); + Weather.Tooltips.skybox(); Weather.sky.updateOrbits(); Weather.sky.drawLayers(); }); @@ -74,7 +74,7 @@ Weather.Observables = (() => { }); }; - $(document).on(":passageend", () => { // todo one + $(document).one(":passageend", () => { setBindings(); Object.keys(observables).forEach(key => { changedKeys.set(key, observables[key].value); diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-clouds.js b/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-clouds.js index 33eb4cb737..7994ebb77a 100644 --- a/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-clouds.js +++ b/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-clouds.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ Weather.Renderer.Effects.add({ name: "clouds", defaultParameters: { diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-generic.js b/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-generic.js index 96682de521..7546bd4474 100644 --- a/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-generic.js +++ b/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-generic.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ Weather.Renderer.Effects.add({ name: "gradiantGlow", defaultParameters: { diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-location.js b/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-location.js index 7561e2ea9c..c79f5d2bc8 100644 --- a/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-location.js +++ b/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-location.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ Weather.Renderer.Effects.add({ name: "locationImage", effects: [ @@ -231,10 +230,10 @@ Weather.Renderer.Effects.add({ const exponentialFactor = Math.pow(y / this.distortionCanvas.element.height, this.verticalFactor); // More pronounced exponential factor for amplitude const adjustedFrequency = this.waveFrequency * (1 - exponentialFactor); const amplitude = this.amplitude * exponentialFactor; // Amplitude increases exponentially - + // Introduce a vertical shift for the animation effect const verticalShift = (frame * this.verticalSpeed * this.verticalDirection) % this.distortionCanvas.element.height; - + const basePhase = ((y + verticalShift) * adjustedFrequency) % (2 * Math.PI); const totalSineValue = Math.sin(basePhase) * amplitude; sines.push(totalSineValue); diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-orbitals.js b/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-orbitals.js index 0ab84052b2..90a81ec832 100644 --- a/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-orbitals.js +++ b/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-orbitals.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ /** * Renders an orbital object, such as the sun or moon, at a specified position. * Changes position on draw() based on the position binding. diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-precipitation.js b/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-precipitation.js index 6b1f3bfe59..a75700ae8e 100644 --- a/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-precipitation.js +++ b/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-precipitation.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ Weather.Renderer.Effects.add({ name: "precipitation", defaultParameters: { diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-sky.js b/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-sky.js index 1ce6c2be00..2bff23fbfe 100644 --- a/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-sky.js +++ b/game/03-JavaScript/weather/03-canvas/02-lib/00-effects/effects-sky.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ /** * Sky gradient effect, simulating transitions between different times of day */ diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/docs-layers.txt b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/00-docs-layers.txt similarity index 100% rename from game/03-JavaScript/weather/03-canvas/02-lib/01-layers/docs-layers.txt rename to game/03-JavaScript/weather/03-canvas/02-lib/01-layers/00-docs-layers.txt diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/banner-canvas-layers.js b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/banner-canvas-layers.js index 2f215fdc00..052e951b06 100644 --- a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/banner-canvas-layers.js +++ b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/banner-canvas-layers.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ Weather.Renderer.Layers.add({ name: "bannerSky", zIndex: 0, @@ -148,7 +147,7 @@ Weather.Renderer.Layers.add({ alpha() { const factor = this.renderInstance.orbitals.sun.factor; const nightAlpha = Weather.bloodMoon ? this.opacity.bloodMoon : this.opacity.night; - return interpolate(nightAlpha, this.opacity.day, Math.max(0, factor)); + return interpolate(nightAlpha, this.opacity.day, Math.clamp(factor + 0.4, 0, 1)); }, rotation() { return Time.date.fractionOfDay * 360; diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-fog.js b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-fog.js index 303d5b3113..fb8e302c3f 100644 --- a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-fog.js +++ b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-fog.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ Weather.Renderer.Layers.add({ name: "fog", zIndex: 13, diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-moon.js b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-moon.js index 18ed91a089..8afc0832c0 100644 --- a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-moon.js +++ b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-moon.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ Weather.Renderer.Layers.add({ name: "moon", zIndex: 3, // zIndex value diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-precipitation.js b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-precipitation.js index 4486e94f27..cac088076b 100644 --- a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-precipitation.js +++ b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-precipitation.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ Weather.Renderer.Layers.add({ name: "precipitation", zIndex: 10, diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-sky.js b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-sky.js index 5722d28f4e..b2a7d4fc63 100644 --- a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-sky.js +++ b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-sky.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ Weather.Renderer.Layers.add({ name: "sky", zIndex: 0, diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-starfield.js b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-starfield.js index 81e93c6038..005c084d5a 100644 --- a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-starfield.js +++ b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-starfield.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ Weather.Renderer.Layers.add({ name: "starField", zIndex: 1, @@ -67,7 +66,7 @@ Weather.Renderer.Layers.add({ alpha() { const factor = this.renderInstance.orbitals.sun.factor; const nightAlpha = Weather.bloodMoon ? this.opacity.bloodMoon : this.opacity.night; - return interpolate(nightAlpha, this.opacity.day, Math.max(0, factor)); + return interpolate(nightAlpha, this.opacity.day, Math.clamp(factor + 0.4, 0, 1)); }, rotation() { return Time.date.fractionOfDay * 360; diff --git a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-sun.js b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-sun.js index e395891aea..4a656b8b88 100644 --- a/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-sun.js +++ b/game/03-JavaScript/weather/03-canvas/02-lib/01-layers/layer-sun.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ Weather.Renderer.Layers.add({ name: "sun", zIndex: 2, diff --git a/game/04-Variables/variables-start2.twee b/game/04-Variables/variables-start2.twee index 8220ca3392..ce5aeb48de 100644 --- a/game/04-Variables/variables-start2.twee +++ b/game/04-Variables/variables-start2.twee @@ -126,10 +126,6 @@ <<set $player.perceived_breastsize = $player.breastsize>> <<set $player.perceived_bottomsize = $player.bottomsize>> - <<if $startingseason is "random">> - <<set $startingseason to ["autumn","winter","spring","summer"].random()>> - <</if>> - /* Do not use this object directly - use the Weather singleton instead */ <<set $weatherObj to { name: "clear", @@ -144,6 +140,9 @@ /* Default start date: 6 sept (sunday), 2020, 07:00 */ /* Do not change start date during gameplay as time is relative to the start date */ + <<if $startingseason is "random">> + <<set $startingseason to ["autumn","winter","spring","summer"].random()>> + <</if>> <<switch $startingseason>> <<case "winter">> <<set Time.startDate to new DateTime(2022, 12, 4, 7)>> @@ -154,6 +153,7 @@ <<default>> <<set Time.startDate to new DateTime(2022, 9, 4, 7)>> <</switch>> + <<unset $startingseason>> <<set $timeStamp to 0>> <<set Time.set()>> <<run Weather.activeRenderer = Weather.sky>> diff --git a/game/04-Variables/variables-versionUpdate.twee b/game/04-Variables/variables-versionUpdate.twee index b203da8d2c..e0ec1acd4c 100644 --- a/game/04-Variables/variables-versionUpdate.twee +++ b/game/04-Variables/variables-versionUpdate.twee @@ -2966,11 +2966,6 @@ <</if>> <</if>> - <!-- 0.3.8.2: starting season backwards compatibility check --> - <<if $startingseason is undefined>> - <<set $startingseason to "autumn">> - <</if>> - <!-- v0.3.8.6: Fixing mismatched specialtransform after losing your virginity --> <<if $demon gte 1 or $angel gte 1 or $fallenangel gte 2>> <<set $specialTransform to 1>> @@ -5231,6 +5226,10 @@ <<unset $frozenKeys>> <</if>> + <<if $startingseason isnot undefined>> + <<unset $startingseason>> + <</if>> + <<if $clothing_number isnot undefined>> <<unset $clothing_number>> <</if>> diff --git a/game/base-system/mobileStats.twee b/game/base-system/mobileStats.twee index 0cd840707b..0e689bbb27 100644 --- a/game/base-system/mobileStats.twee +++ b/game/base-system/mobileStats.twee @@ -1,5 +1,10 @@ :: mobileStats [widget] <<widget "mobileStats">> + <<if $options.sidebarStats is "all">> + <div class="weatherIcon"> + <<weatherIcon>> + </div> + <</if>> <<if Number.isFinite($pain) and ($options.sidebarStats is "all" or $pain gt 50)>> <<mobileStatsColor "pain">> <div @class="'stat ' + _mobileColor"> diff --git a/game/base-system/overlays/journal.twee b/game/base-system/overlays/journal.twee index 999a931b36..226306fd4f 100644 --- a/game/base-system/overlays/journal.twee +++ b/game/base-system/overlays/journal.twee @@ -15,7 +15,7 @@ <li>You survived <span class="gold">$hardmodedays</span> days on hard mode.</li> <br> <</if>> - <li>The game started in $startingseason.</li> + <li>The game started in <<print Time.getSeason(new DateTime($startDate))>>.</li> <li>It is <<print Time.season>>.</li> <li><<schoolterm>></li> <</if>> diff --git a/game/base-system/overlays/options.twee b/game/base-system/overlays/options.twee index 1d8c13bb34..802b9d31f1 100644 --- a/game/base-system/overlays/options.twee +++ b/game/base-system/overlays/options.twee @@ -439,7 +439,7 @@ IMPORTANT: <div style="clear:both;">/*Keep at end of toggles*/</div> </div> <br> - <span class="gold">Sidebar</span> + <span class="gold">Rendering</span> <br> <div class="description">Close the options menu for the change to apply.</div> <div> diff --git a/modules/css/base.css b/modules/css/base.css index f827f11ae8..bb26de9289 100644 --- a/modules/css/base.css +++ b/modules/css/base.css @@ -1050,6 +1050,20 @@ input.heart:hover { padding: 0 .3em; */ } +#mobileStats #weatherIcon { + font-weight: 500; + font-size: 1.2em; + line-height: 1; + padding: 0.3em 0; + margin-top: 2px; + height: 24px; + position: relative; +} + +#mobileStats #weatherIcon img { + position: absolute; +} + #mobileStats .time .ampm { font-size: 0.5em; } -- GitLab