diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index 1159bd44..da34e458 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -26,6 +26,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
grind_results = list(/datum/reagent/silicon = 20)
point_value = 1
tableVariant = /obj/structure/table/glass
+ shard_type = /obj/item/shard
/obj/item/stack/sheet/glass/suicide_act(mob/living/carbon/user)
user.visible_message("[user] begins to slice [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
@@ -93,6 +94,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
merge_type = /obj/item/stack/sheet/plasmaglass
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10)
tableVariant = /obj/structure/table/plasmaglass
+ shard_type = /obj/item/shard/plasma
/obj/item/stack/sheet/plasmaglass/fifty
amount = 50
@@ -120,7 +122,9 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
else
return ..()
-
+/obj/item/stack/sheet/plasmaglass/on_solar_construction(obj/machinery/power/solar/S)
+ S.obj_integrity *= 1.2
+ S.efficiency *= 1.2
/*
* Reinforced glass sheets
@@ -145,11 +149,15 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
merge_type = /obj/item/stack/sheet/rglass
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/iron = 10)
point_value = 4
+ shard_type = /obj/item/shard
/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params)
add_fingerprint(user)
..()
+/obj/item/stack/sheet/rglass/on_solar_construction(obj/machinery/power/solar/S)
+ S.obj_integrity *= 2
+
/obj/item/stack/sheet/rglass/cyborg
materials = list()
var/datum/robot_energy_storage/glasource
@@ -188,6 +196,11 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
merge_type = /obj/item/stack/sheet/plasmarglass
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10, /datum/reagent/iron = 10)
point_value = 23
+ shard_type = /obj/item/shard/plasma
+
+/obj/item/stack/sheet/plasmarglass/on_solar_construction(obj/machinery/power/solar/S)
+ S.obj_integrity *= 2.2
+ S.efficiency *= 1.2
/obj/item/stack/sheet/plasmarglass/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.prglass_recipes
@@ -207,6 +220,11 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list(
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/titaniumglass
+ shard_type = /obj/item/shard
+
+/obj/item/stack/sheet/titaniumglass/on_solar_construction(obj/machinery/power/solar/S)
+ S.obj_integrity *= 2.5
+ S.efficiency *= 1.5
/obj/item/stack/sheet/titaniumglass/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.titaniumglass_recipes
@@ -226,11 +244,16 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
resistance_flags = ACID_PROOF
merge_type = /obj/item/stack/sheet/plastitaniumglass
+ shard_type = /obj/item/shard
/obj/item/stack/sheet/plastitaniumglass/Initialize(mapload, new_amount, merge = TRUE)
recipes = GLOB.plastitaniumglass_recipes
return ..()
+/obj/item/stack/sheet/titaniumglass/on_solar_construction(obj/machinery/power/solar/S)
+ S.obj_integrity *= 2
+ S.efficiency *= 2
+
/obj/item/shard
name = "shard"
desc = "A nasty looking shard of glass."
diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm
index af0dca02..b7ab7606 100644
--- a/code/game/objects/items/stacks/sheets/sheets.dm
+++ b/code/game/objects/items/stacks/sheets/sheets.dm
@@ -15,4 +15,15 @@
var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity
var/is_fabric = FALSE //is this a valid material for the loom?
var/loom_result //result from pulling on the loom
- var/pull_effort = 0 //amount of delay when pulling on the loom
\ No newline at end of file
+ var/pull_effort = 0 //amount of delay when pulling on the loom
+ var/shard_type // the shard debris typepath left over by solar panels and windows etc.
+
+/**
+ * Called on the glass sheet upon solar construction (duh):
+ * Different glass sheets can modify different stas/vars, such as obj_integrity or efficiency
+ * and possibly extra effects if you wish to code them.
+ * Keep in mind the solars' max_integrity is set equal to the obj_integrity later,
+ * so you won't have to do so here.
+ */
+/obj/item/stack/sheet/proc/on_solar_construction(/obj/machinery/power/solar/S)
+ return
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index f6588b00..4b6b0689 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -15,7 +15,8 @@
var/decon_speed = 30
var/wtype = "glass"
var/fulltile = FALSE
- var/glass_type = /obj/item/stack/sheet/glass
+ var/obj/item/stack/sheet/glass_type = /obj/item/stack/sheet/glass
+ var/cleanable_type = /obj/effect/decal/cleanable/glass
var/glass_amount = 1
var/mutable_appearance/crack_overlay
can_be_unanchored = TRUE
@@ -279,12 +280,15 @@
/obj/structure/window/proc/spawnDebris(location)
. = list()
- . += new /obj/item/shard(location)
- . += new /obj/effect/decal/cleanable/glass(location)
+ var/shard = initial(glass_type.shard_type)
+ if(shard)
+ . += new shard(location)
+ if (fulltile)
+ . += new shard(location)
+ if(cleanable_type)
+ . += new cleanable_type(location)
if (reinf)
. += new /obj/item/stack/rods(location, (fulltile ? 2 : 1))
- if (fulltile)
- . += new /obj/item/shard(location)
/obj/structure/window/proc/can_be_rotated(mob/user,rotation_type)
if(anchored)
@@ -411,17 +415,9 @@
max_integrity = 150
explosion_block = 1
glass_type = /obj/item/stack/sheet/plasmaglass
+ cleanable_type = /obj/effect/decal/cleanable/glass/plasma
rad_insulation = RAD_NO_INSULATION
-/obj/structure/window/plasma/spawnDebris(location)
- . = list()
- . += new /obj/item/shard/plasma(location)
- . += new /obj/effect/decal/cleanable/glass/plasma(location)
- if (reinf)
- . += new /obj/item/stack/rods(location, (fulltile ? 2 : 1))
- if (fulltile)
- . += new /obj/item/shard/plasma(location)
-
/obj/structure/window/plasma/spawner/east
dir = EAST
@@ -884,11 +880,6 @@
level = 3
glass_amount = 2
-/obj/structure/window/reinforced/clockwork/spawnDebris(location)
- . = list()
- for(var/i in 1 to 4)
- . += new /obj/item/clockwork/alloy_shards/medium/gear_bit(location)
-
/obj/structure/window/reinforced/clockwork/Initialize(mapload, direct)
made_glow = TRUE
new /obj/effect/temp_visual/ratvar/window(get_turf(src))
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index b8bf2116..e6d44de1 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -19,6 +19,8 @@
var/ndir = SOUTH // target dir
var/turn_angle = 0
var/obj/machinery/power/solar_control/control = null
+ var/obj/item/solar_assembly/assembly
+ var/efficiency = 1
/obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S)
. = ..()
@@ -45,14 +47,13 @@
/obj/machinery/power/solar/proc/Make(obj/item/solar_assembly/S)
if(!S)
- S = new /obj/item/solar_assembly(src)
- S.glass_type = /obj/item/stack/sheet/glass
+ S = new /obj/item/solar_assembly
+ S.glass_type = new /obj/item/stack/sheet/glass(null, 2)
S.anchored = TRUE
else
- S.forceMove(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
- obj_integrity = max_integrity
+ S.moveToNullspace()
+ S.glass_type.on_solar_construction(src)
+ obj_integrity = max_integrity
update_icon()
/obj/machinery/power/solar/crowbar_act(mob/user, obj/item/I)
@@ -85,14 +86,14 @@
/obj/machinery/power/solar/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
if(disassembled)
- var/obj/item/solar_assembly/S = locate() in src
- if(S)
- S.forceMove(loc)
- S.give_glass(stat & BROKEN)
+ if(assembly)
+ assembly.forceMove(loc)
+ assembly.give_glass(stat & BROKEN)
else
playsound(src, "shatter", 70, 1)
- new /obj/item/shard(src.loc)
- new /obj/item/shard(src.loc)
+ var/shard = assembly?.glass_type ? assembly.glass_type.shard_type : /obj/item/shard
+ new shard(loc)
+ new shard(loc)
qdel(src)
@@ -131,7 +132,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 = SOLARGENRATE * sunfrac
+ var/sgen = SOLARGENRATE * sunfrac * efficiency
add_avail(sgen)
control.gen += sgen
else //if we're no longer on the same powernet, remove from control computer
@@ -186,19 +187,23 @@
w_class = WEIGHT_CLASS_BULKY // Pretty big!
anchored = FALSE
var/tracker = 0
- var/glass_type = null
+ var/obj/item/stack/sheet/glass_type
+ var/static/list/allowed_sheets = typecacheof(list(/obj/item/stack/sheet/glass, /obj/item/stack/sheet/rglass,
+ /obj/item/stack/sheet/plasmaglass, /obj/item/stack/sheet/plasmarglass,
+ /obj/item/stack/sheet/titaniumglass, /obj/item/stack/sheet/plastitaniumglass))
// Give back the glass type we were supplied with
/obj/item/solar_assembly/proc/give_glass(device_broken)
var/atom/Tsec = drop_location()
if(device_broken)
- new /obj/item/shard(Tsec)
- new /obj/item/shard(Tsec)
+ var/shard = glass_type ? glass_type.shard_type : /obj/item/shard
+ if(shard)
+ new shard(Tsec)
+ new shard(Tsec)
else if(glass_type)
- new glass_type(Tsec, 2)
+ forceMove(glass_type, Tsec)
glass_type = null
-
/obj/item/solar_assembly/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/wrench) && isturf(loc))
if(isinspace())
@@ -213,13 +218,14 @@
W.play_tool_sound(src, 75)
return 1
- if(istype(W, /obj/item/stack/sheet/glass) || istype(W, /obj/item/stack/sheet/rglass))
+ if(is_type_in_typecache(W, allowed_sheets))
if(!anchored)
to_chat(user, "You need to secure the assembly before you can add glass.")
return
var/obj/item/stack/sheet/S = W
- if(S.use(2))
- glass_type = W.type
+ var/obj/item/stack/sheet/G = S.change_stack(null, 2)
+ if(G)
+ glass_type = G
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
user.visible_message("[user] places the glass on the solar assembly.", "You place the glass on the solar assembly.")
if(tracker)
diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm
index 5075e765..8701dfea 100644
--- a/code/modules/power/tracker.dm
+++ b/code/modules/power/tracker.dm
@@ -16,10 +16,19 @@
var/id = 0
var/sun_angle = 0 // sun angle as set by sun datum
var/obj/machinery/power/solar_control/control = null
+ var/obj/item/solar_assembly/assembly
/obj/machinery/power/tracker/Initialize(mapload, obj/item/solar_assembly/S)
. = ..()
- Make(S)
+ if(!S)
+ assembly = new /obj/item/solar_assembly
+ assembly.glass_type = new /obj/item/stack/sheet/glass(null, 2)
+ assembly.tracker = TRUE
+ assembly.anchored = TRUE
+ else
+ S.moveToNullspace()
+ assembly = S
+ update_icon()
connect_to_network()
/obj/machinery/power/tracker/Destroy()
@@ -40,15 +49,6 @@
control.connected_tracker = null
control = null
-/obj/machinery/power/tracker/proc/Make(obj/item/solar_assembly/S)
- if(!S)
- S = new /obj/item/solar_assembly(src)
- S.glass_type = /obj/item/stack/sheet/glass
- S.tracker = 1
- S.anchored = TRUE
- S.forceMove(src)
- update_icon()
-
//updates the tracker icon and the facing angle for the control computer
/obj/machinery/power/tracker/proc/set_angle(angle)
sun_angle = angle
@@ -77,14 +77,14 @@
/obj/machinery/power/solar/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
if(disassembled)
- var/obj/item/solar_assembly/S = locate() in src
- if(S)
- S.forceMove(loc)
- S.give_glass(stat & BROKEN)
+ if(assembly)
+ assembly.forceMove(loc)
+ assembly.give_glass(stat & BROKEN)
else
playsound(src, "shatter", 70, 1)
- new /obj/item/shard(src.loc)
- new /obj/item/shard(src.loc)
+ var/shard = assembly?.glass_type ? assembly.glass_type.shard_type : /obj/item/shard
+ new shard(loc)
+ new shard(loc)
qdel(src)
// Tracker Electronic
diff --git a/modular_citadel/code/modules/arousal/organs/belly.dm b/modular_citadel/code/modules/arousal/organs/belly.dm
index eda51020..1757bf30 100644
--- a/modular_citadel/code/modules/arousal/organs/belly.dm
+++ b/modular_citadel/code/modules/arousal/organs/belly.dm
@@ -27,7 +27,7 @@
var/string
if(owner)
if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"])
- if(ishuman(owner)) .
+ if(ishuman(owner))
var/mob/living/carbon/human/H = owner
color = "#[skintone2hex(H.skin_tone)]"
else