From 17e33da381a748caaa023f26398eee2fd8a9c383 Mon Sep 17 00:00:00 2001 From: MixityMaxity <189351891+MixityMaxity@users.noreply.github.com> Date: Sat, 2 May 2026 10:45:26 +1000 Subject: [PATCH] Adds Solar Panel upgrades, Resprites solar equipment. (#31904) * Spritesss * Moves solar sprites out of goon folder * adds upgrades, integrity power scaling * Fixes glass_type comments * woe, whitespace * defines --- code/__DEFINES/machines.dm | 6 +++++ code/controllers/subsystem/SSsun.dm | 2 +- code/modules/power/generators/solar.dm | 30 +++++++++++++++++------ code/modules/power/generators/tracker.dm | 2 +- icons/goonstation/objects/power.dmi | Bin 2825 -> 0 bytes icons/obj/solars.dmi | Bin 0 -> 3164 bytes 6 files changed, 30 insertions(+), 10 deletions(-) delete mode 100644 icons/goonstation/objects/power.dmi create mode 100644 icons/obj/solars.dmi diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index c5f6ab1f7c9..51930a9c69b 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -136,3 +136,9 @@ /// Salvage machine point defines #define SALVAGE_REDEMPTION_BASE_POINT_MULT 0.6 #define SALVAGE_REDEMPTION_POINT_MULT_ADD_PER_RATING 0.1 + +/// Solar panel material multiplier defines +#define RGLASS_SOLAR_MULT 1.1 +#define PLASMAGLASS_SOLAR_MULT 1.7 +#define PLASMARGLASS_SOLAR_MULT 1.8 +#define PLASTITANIUMGLASS_SOLAR_MULT 2.4 diff --git a/code/controllers/subsystem/SSsun.dm b/code/controllers/subsystem/SSsun.dm index f3a550cf3f5..70b8dcdee9b 100644 --- a/code/controllers/subsystem/SSsun.dm +++ b/code/controllers/subsystem/SSsun.dm @@ -10,7 +10,7 @@ SUBSYSTEM_DEF(sun) var/dy var/rate var/list/solars = list() - var/solar_gen_rate = 1500 + var/solar_gen_rate = 10 // watts generated per point of integrity /datum/controller/subsystem/sun/Initialize() // Lets work out an angle for the "sun" to rotate around the station diff --git a/code/modules/power/generators/solar.dm b/code/modules/power/generators/solar.dm index de478d03814..0bd8c5c3e18 100644 --- a/code/modules/power/generators/solar.dm +++ b/code/modules/power/generators/solar.dm @@ -3,7 +3,7 @@ /obj/machinery/power/solar name = "solar panel" desc = "A solar panel. Generates electricity when in contact with sunlight." - icon = 'icons/goonstation/objects/power.dmi' + icon = 'icons/obj/solars.dmi' icon_state = "sp_base" density = TRUE max_integrity = 150 @@ -15,6 +15,7 @@ var/ndir = SOUTH // target dir var/turn_angle = 0 var/obj/machinery/power/solar_control/control = null + var/solar_type = "solar_panel" /obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S) . = ..() @@ -45,9 +46,22 @@ S.glass_type = /obj/item/stack/sheet/glass S.anchored = TRUE S.loc = src - if(S.glass_type == /obj/item/stack/sheet/rglass) //if the panel is in reinforced glass - max_integrity *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to + if(S.glass_type == /obj/item/stack/sheet/rglass) // if the panel is made of reinforced glass + max_integrity *= RGLASS_SOLAR_MULT obj_integrity = max_integrity + solar_type = "solar_panel" + if(S.glass_type == /obj/item/stack/sheet/plasmaglass) // if the panel is made of plasma glass + max_integrity *= PLASMAGLASS_SOLAR_MULT + obj_integrity = max_integrity + solar_type = "solar_panel_p" + if(S.glass_type == /obj/item/stack/sheet/plasmarglass) // if the panel is made of reinforced plasma glass + max_integrity *= PLASMARGLASS_SOLAR_MULT + obj_integrity = max_integrity + solar_type = "solar_panel_p" + if(S.glass_type == /obj/item/stack/sheet/plastitaniumglass) // if the panel is made of plastitanium glass + max_integrity *= PLASTITANIUMGLASS_SOLAR_MULT + obj_integrity = max_integrity + solar_type = "solar_panel_t" update_icon(UPDATE_OVERLAYS) @@ -94,9 +108,9 @@ /obj/machinery/power/solar/update_overlays() . = ..() if(stat & BROKEN) - . += image('icons/goonstation/objects/power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER) + . += image('icons/obj/solars.dmi', icon_state = "[solar_type]-b", layer = FLY_LAYER) else - var/image/panel = image('icons/goonstation/objects/power.dmi', icon_state = "solar_panel", layer = FLY_LAYER) + var/image/panel = image('icons/obj/solars.dmi', icon_state = solar_type, layer = FLY_LAYER) var/matrix/M = matrix() M.Turn(adir) panel.transform = M @@ -128,7 +142,7 @@ if(powernet == control.powernet)//check if the panel is still connected to the computer if(obscured) //get no light from the sun, so don't generate power return - var/sgen = SSsun.solar_gen_rate * sunfrac + var/sgen = SSsun.solar_gen_rate * sunfrac * obj_integrity produce_direct_power(sgen) control.gen += sgen else //if we're no longer on the same powernet, remove from control computer @@ -177,7 +191,7 @@ /obj/item/solar_assembly name = "solar panel assembly" desc = "A solar panel assembly kit, allows constructions of a solar panel, or with a tracking circuit board, a solar tracker." - icon = 'icons/goonstation/objects/power.dmi' + icon = 'icons/obj/solars.dmi' icon_state = "sp_base" inhand_icon_state = "electropack" w_class = WEIGHT_CLASS_BULKY // Pretty big! @@ -208,7 +222,7 @@ /obj/item/solar_assembly/attackby__legacy__attackchain(obj/item/W, mob/user, params) if(anchored || !isturf(loc)) - if(istype(W, /obj/item/stack/sheet/glass) || istype(W, /obj/item/stack/sheet/rglass)) + if(istype(W, /obj/item/stack/sheet/glass) || istype(W, /obj/item/stack/sheet/rglass) || istype(W, /obj/item/stack/sheet/plasmaglass) || istype(W, /obj/item/stack/sheet/plasmarglass) || istype(W, /obj/item/stack/sheet/plastitaniumglass)) var/obj/item/stack/sheet/S = W if(S.use(2)) glass_type = S.merge_type diff --git a/code/modules/power/generators/tracker.dm b/code/modules/power/generators/tracker.dm index 9cf4230299d..d5e83beb4ba 100644 --- a/code/modules/power/generators/tracker.dm +++ b/code/modules/power/generators/tracker.dm @@ -6,7 +6,7 @@ /obj/machinery/power/tracker name = "solar tracker" desc = "A solar directional tracker." - icon = 'icons/goonstation/objects/power.dmi' + icon = 'icons/obj/solars.dmi' icon_state = "tracker" density = TRUE max_integrity = 250 diff --git a/icons/goonstation/objects/power.dmi b/icons/goonstation/objects/power.dmi deleted file mode 100644 index 6182bf3a20e0463fe313e929c64317a91e39bb79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2825 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 b-}nCu3)1a6H5=l}00000NkvXXu0mjfQ}_Z? diff --git a/icons/obj/solars.dmi b/icons/obj/solars.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9a812875d48982b609ef988bf63f9ff4cbaa9e7d GIT binary patch literal 3164 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 Nxv7;&h4GEp{{g^BMv(vj literal 0 HcmV?d00001