mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-18 11:30:50 +01:00
Merge branch 'master' of https://github.com/quotefox/Hyper-Station-13
This commit is contained in:
@@ -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("<span class='suicide'>[user] begins to slice [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
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
|
||||
|
||||
@@ -324,7 +324,7 @@
|
||||
|
||||
/obj/item/storage/pill_bottle/mutarad
|
||||
name = "radiation treatment deluxe pill bottle"
|
||||
desc = "The label says 'Med-Co branded pills' and below that 'Contains Mutadone in each pill!`."
|
||||
desc = "The label says 'Med-Co branded pills' and below that 'Contains Mutadone in each pill!'."
|
||||
|
||||
/obj/item/storage/pill_bottle/mutarad/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
@@ -340,7 +340,7 @@
|
||||
|
||||
/obj/item/storage/pill_bottle/breast_enlargement
|
||||
name = "breast enlargement pills"
|
||||
desc = "Made by Fermichem - They have a woman with breasts larger than she is on them. The warming states not to take more than 10u at a time."
|
||||
desc = "Made by Fermichem - They have a woman with breasts larger than she is on them. The warning states not to take more than 10u at a time."
|
||||
|
||||
/obj/item/storage/pill_bottle/breast_enlargement/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -323,7 +323,7 @@
|
||||
|
||||
/obj/item/paper/fluff/awaymissions/snowdin/secnotice
|
||||
name = "Security Notice"
|
||||
info = {"YOu have been assigned to this Arctic Post with intention of protecting Nanotrasen assets and ensuring vital information is kept secure while the stationed crew obeys protocol. The picked
|
||||
info = {"You have been assigned to this Arctic Post with intention of protecting Nanotrasen assets and ensuring vital information is kept secure while the stationed crew obeys protocol. The picked
|
||||
staff for this post have been pre-screened with no prior incidients on record, but incase of an issue you have been given a single holding cell and instructions to contact Central to terminate the
|
||||
offending crewmember."}
|
||||
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
crate_name = "swat crate"
|
||||
|
||||
/datum/supply_pack/security/armory/swattasers //Lesser AEG tbh
|
||||
name = "SWAT tatical tasers Crate"
|
||||
name = "SWAT tactical tasers Crate"
|
||||
desc = "Contains two tactical energy gun, these guns are able to tase, disable and lethal as well as hold a seclight. Requires Armory access to open."
|
||||
cost = 7000
|
||||
contains = list(/obj/item/gun/energy/e_gun/stun,
|
||||
|
||||
@@ -21,19 +21,19 @@
|
||||
|
||||
/obj/item/clothing/under/syndicate/tacticool
|
||||
name = "tacticool turtleneck"
|
||||
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
|
||||
icon_state = "tactifool"
|
||||
desc = "A robust looking turtleneck designed to fit tightly against the body while still being comfortable."
|
||||
icon_state = "syndicate"
|
||||
item_state = "bl_suit"
|
||||
item_color = "tactifool"
|
||||
item_color = "syndicate"
|
||||
has_sensor = HAS_SENSORS
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
|
||||
|
||||
/obj/item/clothing/under/syndicate/tacticool/skirt
|
||||
name = "tacticool skirtleneck"
|
||||
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
|
||||
icon_state = "tactifool_skirt"
|
||||
desc = "A robust looking skirtleneck designed to fit tightly against the body while still being comfortable."
|
||||
icon_state = "syndicate_skirt"
|
||||
item_state = "bl_suit"
|
||||
item_color = "tactifool_skirt"
|
||||
item_color = "syndicate_skirt"
|
||||
has_sensor = HAS_SENSORS
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
|
||||
fitted = FEMALE_UNIFORM_TOP
|
||||
|
||||
@@ -116,3 +116,12 @@
|
||||
bonus_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 4)
|
||||
tastes = list("rice" = 1, "egg" = 1)
|
||||
foodtype = GRAIN | MEAT //EGG = MEAT -NinjaNomNom 2017
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/salad/hellcobb
|
||||
name = "hell cobb salad"
|
||||
desc = "If you're being honest with yourself it's just a bowl of mushrooms with chunks of meat and an egg."
|
||||
icon_state = "hellcobb"
|
||||
trash = /obj/item/reagent_containers/glass/bowl/mushroom_bowl
|
||||
bonus_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 4)
|
||||
tastes = list("fruity cactus" = 5, "ash" = 1, "tough meat" = 3, "your eternal damnation" = 1)
|
||||
foodtype = FRUIT | MEAT | VEGETABLES //MUSHROOM = VEGETABLE -VladinXXV 2021
|
||||
|
||||
@@ -254,3 +254,20 @@
|
||||
tastes = list("bungo" = 2, "hot curry" = 4, "tropical sweetness" = 1)
|
||||
filling_color = "#E6A625"
|
||||
foodtype = VEGETABLES | FRUIT | DAIRY
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/soup/creamofwastes
|
||||
name = "cream of the wastes soup"
|
||||
desc = "Locals say the bowl gives it a unique flavor each time. That might just be whatever killed the goliath getting in your bowl, though."
|
||||
icon_state = "wastessoup"
|
||||
trash = /obj/item/reagent_containers/glass/bowl/mushroom_bowl
|
||||
var/snowflake_reagent = null
|
||||
list_reagents = list(/datum/reagent/consumable/nutriment = 6)
|
||||
tastes = list("a fresh kill" = 3, "creamy mushroom" = 5, "a warm sunset over the scorched landscape of hell" = 1)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/soup/creamofwastes/Initialize()
|
||||
. = ..()
|
||||
snowflake_reagent = pick(/datum/reagent/consumable/capsaicin, /datum/reagent/consumable/frostoil,
|
||||
/datum/reagent/blood, /datum/reagent/oil, /datum/reagent/consumable/honey,
|
||||
/datum/reagent/carbon, /datum/reagent/drug/mushroomhallucinogen)
|
||||
bonus_reagents = list(snowflake_reagent = 5, /datum/reagent/consumable/nutriment = 6)
|
||||
reagents.add_reagent(snowflake_reagent, 5)
|
||||
|
||||
@@ -94,3 +94,16 @@
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/salad/citrusdelight
|
||||
subcategory = CAT_SALAD
|
||||
|
||||
/datum/crafting_recipe/food/hellcobb
|
||||
name = "Hell Cobb Salad"
|
||||
reqs = list(
|
||||
/obj/item/reagent_containers/glass/bowl/mushroom_bowl = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf = 3,
|
||||
/obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit = 2,
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/goliath = 1,
|
||||
/obj/item/reagent_containers/food/snacks/boiledegg = 1
|
||||
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/salad/hellcobb
|
||||
subcategory = CAT_SALAD
|
||||
|
||||
@@ -247,3 +247,15 @@
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/soup/macaco
|
||||
subcategory = CAT_SOUP
|
||||
|
||||
/datum/crafting_recipe/food/creamofwastes
|
||||
name = "Cream of the Wastes soup"
|
||||
reqs = list(
|
||||
/datum/reagent/consumable/milk = 10,
|
||||
/obj/item/reagent_containers/glass/bowl/mushroom_bowl = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf = 1,
|
||||
/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem =2,
|
||||
/obj/item/reagent_containers/food/snacks/meat/steak/goliath = 2 //wanted to make this three cutlets, but goliath meat doesn't get a unique cutlet
|
||||
)
|
||||
result = /obj/item/reagent_containers/food/snacks/soup/creamofwastes
|
||||
subcategory = CAT_SOUP
|
||||
|
||||
@@ -509,7 +509,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums
|
||||
name = "scanner control interface"
|
||||
icon = 'icons/obj/library.dmi'
|
||||
icon_state = "bigscanner"
|
||||
desc = "It servers the purpose of scanning stuff."
|
||||
desc = "It serves the purpose of scanning stuff."
|
||||
density = TRUE
|
||||
var/obj/item/book/cache // Last scanned book
|
||||
|
||||
|
||||
@@ -407,7 +407,7 @@
|
||||
if(O)
|
||||
O.on_life()
|
||||
else
|
||||
if(reagents.has_reagent("formaldehyde", 1)) // No organ decay if the body contains formaldehyde.
|
||||
if(reagents.has_reagent(/datum/reagent/toxin/formaldehyde, 1)) // No organ decay if the body contains formaldehyde.
|
||||
return
|
||||
for(var/V in internal_organs)
|
||||
var/obj/item/organ/O = V
|
||||
|
||||
+27
-21
@@ -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, "<span class='warning'>You need to secure the assembly before you can add glass.</span>")
|
||||
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.", "<span class='notice'>You place the glass on the solar assembly.</span>")
|
||||
if(tracker)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
item_state = "combatshotgun"
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/shot/com
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
unique_reskin = list("Tatical" = "cshotgun",
|
||||
unique_reskin = list("Tactical" = "cshotgun",
|
||||
"Slick" = "cshotgun_slick"
|
||||
)
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 22 KiB |
@@ -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
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
/datum/gear/navyblueuniformhos
|
||||
name = "Head of Security navyblue uniform"
|
||||
name = "Head of Security's navyblue uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/head_of_security/navyblue
|
||||
restricted_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/navybluehosberet
|
||||
name = "Head of security's Naviblue beret"
|
||||
name = "Head of Security's navyblue beret"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/beret/sec/navyhos
|
||||
restricted_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/navybluejackethos
|
||||
name = "head of security's navyblue jacket"
|
||||
name = "Head of Security's navyblue jacket"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/security/hos
|
||||
restricted_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/navybluejacketofficer
|
||||
name = "security officer's navyblue jacket"
|
||||
name = "Security Officer's navyblue jacket"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/security/officer
|
||||
restricted_roles = list("Security Officer")
|
||||
|
||||
/datum/gear/navyblueofficerberet
|
||||
name = "Security officer's Navyblue beret"
|
||||
name = "Security Officer's navyblue beret"
|
||||
category = SLOT_HEAD
|
||||
path = /obj/item/clothing/head/beret/sec/navyofficer
|
||||
restricted_roles = list("Security Officer")
|
||||
|
||||
/datum/gear/navyblueuniformofficer
|
||||
name = "Security officer navyblue uniform"
|
||||
name = "Security Officer's navyblue uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/security/navyblue
|
||||
restricted_roles = list("Security Officer")
|
||||
|
||||
/datum/gear/navybluejacketwarden
|
||||
name = "warden navyblue jacket"
|
||||
name = "Warden's navyblue jacket"
|
||||
category = SLOT_WEAR_SUIT
|
||||
path = /obj/item/clothing/suit/security/warden
|
||||
restricted_roles = list("Warden")
|
||||
@@ -47,7 +47,7 @@
|
||||
restricted_roles = list("Warden")
|
||||
|
||||
/datum/gear/navyblueuniformwarden
|
||||
name = "Warden navyblue uniform"
|
||||
name = "Warden's navyblue uniform"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/warden/navyblue
|
||||
restricted_roles = list("Warden")
|
||||
@@ -59,13 +59,13 @@
|
||||
restricted_roles = list("Security Officer", "Warden", "Head of Security")
|
||||
|
||||
/datum/gear/hosskirt
|
||||
name = "Head of security's skirt"
|
||||
name = "Head of Security's skirt"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/rank/head_of_security/skirt
|
||||
restricted_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/sechud
|
||||
name = "Security Hud"
|
||||
name = "Security HUD"
|
||||
category = SLOT_GLASSES
|
||||
path = /obj/item/clothing/glasses/hud/security
|
||||
restricted_roles = list("Security Officer", "Warden", "Head of Security")
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
// Pantsless Sweaters
|
||||
|
||||
/datum/gear/turtleneck
|
||||
name = "Tactitool Turtleneck"
|
||||
name = "Tactifool Turtleneck"
|
||||
category = SLOT_W_UNIFORM
|
||||
path = /obj/item/clothing/under/syndicate/cosmetic
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
new /obj/item/clothing/under/rank/chief_medical_officer/turtleneck(src)
|
||||
|
||||
/obj/item/clothing/under/syndicate/cosmetic
|
||||
name = "tactitool turtleneck"
|
||||
name = "tactifool turtleneck"
|
||||
desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
|
||||
icon_state = "tactifool"
|
||||
item_state = "bl_suit"
|
||||
@@ -32,9 +32,6 @@
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
|
||||
|
||||
/obj/item/clothing/under/syndicate/tacticool
|
||||
has_sensor = TRUE
|
||||
|
||||
// Sweaters are good enough for this category too.
|
||||
|
||||
/obj/item/clothing/under/bb_sweater
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
import { toFixed } from 'common/math';
|
||||
import { Fragment } from 'inferno';
|
||||
import { useBackend } from '../backend';
|
||||
import { act } from '../byond';
|
||||
import { Box, Button, Grid, LabeledList, NumberInput, ProgressBar, Section } from '../components';
|
||||
|
||||
export const SolarControl = props => {
|
||||
const { act, data } = useBackend(props);
|
||||
const { state } = props;
|
||||
const { config, data } = state;
|
||||
const { ref } = config;
|
||||
const {
|
||||
generated,
|
||||
generated_ratio,
|
||||
azimuth_current,
|
||||
azimuth_rate,
|
||||
max_rotation_rate,
|
||||
angle,
|
||||
tracking_state,
|
||||
tracking_rate,
|
||||
connected_panels,
|
||||
connected_tracker,
|
||||
} = data;
|
||||
@@ -23,7 +23,7 @@ export const SolarControl = props => {
|
||||
<Button
|
||||
icon="sync"
|
||||
content="Scan for new hardware"
|
||||
onClick={() => act('refresh')} />
|
||||
onClick={() => act(ref, 'refresh')} />
|
||||
)}>
|
||||
<Grid>
|
||||
<Grid.Column>
|
||||
@@ -45,13 +45,13 @@ export const SolarControl = props => {
|
||||
<LabeledList.Item label="Power output">
|
||||
<ProgressBar
|
||||
ranges={{
|
||||
good: [0.66, Infinity],
|
||||
average: [0.33, 0.66],
|
||||
bad: [-Infinity, 0.33],
|
||||
good: [60000, Infinity],
|
||||
average: [30000, 60000],
|
||||
bad: [-Infinity, 30000],
|
||||
}}
|
||||
minValue={0}
|
||||
maxValue={1}
|
||||
value={generated_ratio}
|
||||
maxValue={90000}
|
||||
value={generated}
|
||||
content={generated + ' W'} />
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
@@ -65,20 +65,20 @@ export const SolarControl = props => {
|
||||
icon="times"
|
||||
content="Off"
|
||||
selected={tracking_state === 0}
|
||||
onClick={() => act('tracking', { mode: 0 })} />
|
||||
onClick={() => act(ref, 'tracking', { mode: 0 })} />
|
||||
<Button
|
||||
icon="clock-o"
|
||||
content="Timed"
|
||||
selected={tracking_state === 1}
|
||||
onClick={() => act('tracking', { mode: 1 })} />
|
||||
onClick={() => act(ref, 'tracking', { mode: 1 })} />
|
||||
<Button
|
||||
icon="sync"
|
||||
content="Auto"
|
||||
selected={tracking_state === 2}
|
||||
disabled={!connected_tracker}
|
||||
onClick={() => act('tracking', { mode: 2 })} />
|
||||
onClick={() => act(ref, 'tracking', { mode: 2 })} />
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Azimuth">
|
||||
<LabeledList.Item label="Angle">
|
||||
{(tracking_state === 0 || tracking_state === 1) && (
|
||||
<NumberInput
|
||||
width="52px"
|
||||
@@ -87,27 +87,28 @@ export const SolarControl = props => {
|
||||
stepPixelSize={2}
|
||||
minValue={-360}
|
||||
maxValue={+720}
|
||||
value={azimuth_current}
|
||||
onDrag={(e, value) => act('azimuth', { value })} />
|
||||
value={angle}
|
||||
format={angle => Math.round(360 + angle) % 360}
|
||||
onDrag={(e, value) => act(ref, 'angle', { value })} />
|
||||
)}
|
||||
{tracking_state === 1 && (
|
||||
<NumberInput
|
||||
width="80px"
|
||||
unit="°/m"
|
||||
step={0.01}
|
||||
stepPixelSize={1}
|
||||
minValue={-max_rotation_rate-0.01}
|
||||
maxValue={max_rotation_rate+0.01}
|
||||
value={azimuth_rate}
|
||||
unit="°/h"
|
||||
step={5}
|
||||
stepPixelSize={2}
|
||||
minValue={-7200}
|
||||
maxValue={7200}
|
||||
value={tracking_rate}
|
||||
format={rate => {
|
||||
const sign = Math.sign(rate) > 0 ? '+' : '-';
|
||||
return sign + Math.abs(rate);
|
||||
return sign + toFixed(Math.abs(rate));
|
||||
}}
|
||||
onDrag={(e, value) => act('azimuth_rate', { value })} />
|
||||
onDrag={(e, value) => act(ref, 'rate', { value })} />
|
||||
)}
|
||||
{tracking_state === 2 && (
|
||||
<Box inline color="label" mt="3px">
|
||||
{azimuth_current + ' °'} (auto)
|
||||
{angle + ' °'} (auto)
|
||||
</Box>
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user