[M] is not a devil."
+
/datum/admins/proc/manage_free_slots()
if(!check_rights())
return
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 5526308de7b..618c5303b6f 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1621,7 +1621,8 @@
output_ai_laws()
else if(href_list["admincheckdevilinfo"])
- output_devil_info()
+ var/mob/M = locate(href_list["admincheckdevilinfo"])
+ output_devil_info(M)
else if(href_list["adminmoreinfo"])
var/mob/M = locate(href_list["adminmoreinfo"])
diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
index 391b474f68e..ac9f89ad9ff 100644
--- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm
@@ -372,7 +372,7 @@ var/list/gaslist_cache = null
copy.temperature = temperature
for(var/id in cached_gases)
- add_gas(id)
+ copy.add_gas(id)
copy_gases[id][MOLES] = cached_gases[id][MOLES]
return copy
diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
index d538c0bad44..c78e9de2e9c 100644
--- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
+++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm
@@ -50,7 +50,7 @@
var/hc = pipe_air.heat_capacity()
var/mob/living/heat_source = buckled_mobs[1]
//Best guess-estimate of the total bodytemperature of all the mobs, since they share the same environment it's ~ok~ to guess like this
- var/avg_temp = (pipe_air.temperature * hc + (heat_source.bodytemperature * buckled_mobs.len) * 3500) / (hc + (buckled_mobs.len * 3500))
+ var/avg_temp = (pipe_air.temperature * hc + (heat_source.bodytemperature * buckled_mobs.len) * 3500) / (hc + (buckled_mobs ? buckled_mobs.len * 3500 : 0))
for(var/m in buckled_mobs)
var/mob/living/L = m
L.bodytemperature = avg_temp
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index d4804d24084..b30c0e65eae 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -24,7 +24,7 @@
/obj/item/clothing/head/canada
name = "striped red tophat"
- desc = " It feels sticky, like maple syrup - il se sent collante, comme le sirop d'érable"
+ desc = " It feels sticky, like maple syrup - il se sent collante, comme le sirop d'érable"
icon_state = "canada"
item_state = "canada"
@@ -259,4 +259,15 @@
name = "paper sack hat"
desc = "A paper sack with crude holes cut out for eyes and a sketchy smile drawn on the front. Not creepy at all."
icon_state = "papersack_smile"
- flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
\ No newline at end of file
+ flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
+
+/obj/item/clothing/head/crown
+ name = "crown"
+ desc = "A crown fit for a king, a petty king maybe."
+ icon_state = "crown"
+ armor = list(melee = 15, bullet = 0, laser = 0,energy = 15, bomb = 0, bio = 0, rad = 0) //for a warrior king //energy cause gold is reflective //worse than sec helm overall
+
+/obj/item/clothing/head/crown/fancy
+ name = "magnificent crown"
+ desc = "A crown worn by only the highest emperors of the land."
+ icon_state = "fancycrown"
diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm
index 8b6c1e7adc0..3dcf2ea3b19 100644
--- a/code/modules/clothing/outfits/ert.dm
+++ b/code/modules/clothing/outfits/ert.dm
@@ -28,7 +28,7 @@
id = /obj/item/weapon/card/id/ert
suit = /obj/item/clothing/suit/space/hardsuit/ert
- glasses = /obj/item/clothing/glasses/thermal/eyepatch
+ glasses = /obj/item/clothing/glasses/hud/security/sunglasses
back = /obj/item/weapon/storage/backpack/captain
belt = /obj/item/weapon/storage/belt/security/full
backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\
@@ -42,7 +42,6 @@
if(visualsOnly)
return
-
var/obj/item/device/radio/R = H.ears
R.keyslot = new /obj/item/device/encryptionkey/heads/captain
R.recalculateChannels()
@@ -50,6 +49,7 @@
/datum/outfit/ert/commander/alert
name = "ERT Commander - High Alert"
+ glasses = /obj/item/clothing/glasses/thermal/eyepatch
backpack_contents = list(/obj/item/weapon/storage/box/engineer=1,\
/obj/item/weapon/melee/baton/loaded=1,\
/obj/item/clothing/mask/gas/sechailer/swat=1,\
@@ -193,4 +193,4 @@
W.access += access_weapons
W.assignment = "Centcom Official"
W.registered_name = H.real_name
- W.update_label()
\ No newline at end of file
+ W.update_label()
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 4df444fa0bc..fbcb89bcff4 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -151,7 +151,7 @@
item_state = "eng_hardsuit"
armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
//Atmospherics
/obj/item/clothing/head/helmet/space/hardsuit/engine/atmos
@@ -197,7 +197,7 @@
max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite
jetpack = /obj/item/weapon/tank/jetpack/suit
-// pockets = /obj/item/weapon/storage/internal/pocket/big
+ pockets = /obj/item/weapon/storage/internal/pocket/big
//Mining hardsuit
@@ -223,7 +223,7 @@
armor = list(melee = 30, bullet = 5, laser = 10, energy = 5, bomb = 50, bio = 100, rad = 50)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals,/obj/item/weapon/storage/bag/ore,/obj/item/weapon/pickaxe)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
//Syndicate hardsuit
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index b57ec2b4ad9..8e311d9167b 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -36,7 +36,7 @@
armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0)
cold_protection = CHEST|GROIN|LEGS|ARMS
heat_protection = CHEST|GROIN|LEGS|ARMS
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
strip_delay = 80
/obj/item/clothing/suit/armor/hos/trenchcoat
@@ -73,7 +73,7 @@
cold_protection = CHEST|GROIN|LEGS|ARMS
heat_protection = CHEST|GROIN|LEGS|ARMS
dog_fashion = null
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/armor/vest/capcarapace
name = "captain's carapace"
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 35042edb026..30eb3b3c64b 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -11,7 +11,7 @@
blood_overlay_type = "armor"
body_parts_covered = CHEST|GROIN
allowed = list(/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/device/plant_analyzer,/obj/item/seeds,/obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/cultivator,/obj/item/weapon/reagent_containers/spray/pestspray,/obj/item/weapon/hatchet,/obj/item/weapon/storage/bag/plants)
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
//Captain
/obj/item/clothing/suit/captunic
@@ -33,7 +33,7 @@
allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
hooded = 1
hoodtype = /obj/item/clothing/head/chaplain_hood
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/head/chaplain_hood
name = "chaplain hood"
@@ -52,7 +52,7 @@
body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
flags_inv = HIDESHOES|HIDEJUMPSUIT
allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
//Chef
/obj/item/clothing/suit/toggle/chef
@@ -65,7 +65,7 @@
body_parts_covered = CHEST|GROIN|ARMS
allowed = list(/obj/item/weapon/kitchen)
togglename = "sleeves"
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
//Cook
@@ -90,7 +90,7 @@
armor = list(melee = 25, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
cold_protection = CHEST|GROIN|LEGS|ARMS
heat_protection = CHEST|GROIN|LEGS|ARMS
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/det_suit/grey
name = "noir trenchcoat"
@@ -107,7 +107,7 @@
blood_overlay_type = "armor"
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner,/obj/item/device/radio)
burn_state = FIRE_PROOF
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
//Lawyer
/obj/item/clothing/suit/toggle/lawyer
diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm
index aa85e571b9e..29708eadebf 100644
--- a/code/modules/clothing/suits/labcoat.dm
+++ b/code/modules/clothing/suits/labcoat.dm
@@ -8,7 +8,7 @@
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper,/obj/item/weapon/melee/classic_baton/telescopic,/obj/item/weapon/soap,/obj/item/device/sensor_device,/obj/item/weapon/tank/internals/emergency_oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
togglename = "buttons"
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/toggle/labcoat/cmo
name = "chief medical officer's labcoat"
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 862d6d2a645..1cf32dd12bb 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -37,7 +37,7 @@
icon_state = "pirate"
item_state = "pirate"
allowed = list(/obj/item/weapon/melee/energy/sword/pirate, /obj/item/clothing/glasses/eyepatch, /obj/item/weapon/reagent_containers/food/drinks/bottle/rum)
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/pirate/captain
name = "pirate captain coat"
@@ -91,7 +91,7 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
burn_state = FIRE_PROOF
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/hastur
name = "\improper Hastur's robe"
@@ -154,7 +154,7 @@
body_parts_covered = CHEST|GROIN|LEGS|ARMS
flags_inv = HIDEJUMPSUIT
allowed = list(/obj/item/weapon/storage/book/bible, /obj/item/weapon/nullrod, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/storage/fancy/candle_box, /obj/item/candle, /obj/item/weapon/tank/internals/emergency_oxygen)
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/cardborg
@@ -334,7 +334,7 @@
body_parts_covered = CHEST|GROIN|ARMS
cold_protection = CHEST|GROIN|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/suit/jacket/leather
name = "leather jacket"
@@ -422,7 +422,7 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter)
hooded = 1
-// pockets = /obj/item/weapon/storage/internal/pocket
+ pockets = /obj/item/weapon/storage/internal/pocket
/obj/item/clothing/head/winterhood
name = "winter hood"
diff --git a/code/modules/clothing/under/trek.dm b/code/modules/clothing/under/trek.dm
new file mode 100644
index 00000000000..6a2aed8bc7a
--- /dev/null
+++ b/code/modules/clothing/under/trek.dm
@@ -0,0 +1,72 @@
+//Just some alt-uniforms themed around Star Trek - Pls don't sue, Mr Roddenberry ;_;
+
+
+/obj/item/clothing/under/trek
+ can_adjust = 0
+
+
+//TOS
+/obj/item/clothing/under/trek/command
+ name = "command uniform"
+ desc = "The uniform worn by command officers"
+ icon_state = "trek_command"
+ item_color = "trek_command"
+ item_state = "y_suit"
+
+/obj/item/clothing/under/trek/engsec
+ name = "engsec uniform"
+ desc = "The uniform worn by engineering/security officers"
+ icon_state = "trek_engsec"
+ item_color = "trek_engsec"
+ item_state = "r_suit"
+ armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) //more sec than eng, but w/e.
+ strip_delay = 50
+
+/obj/item/clothing/under/trek/medsci
+ name = "medsci uniform"
+ desc = "The uniform worn by medical/science officers"
+ icon_state = "trek_medsci"
+ item_color = "trek_medsci"
+ item_state = "b_suit"
+
+
+//TNG
+/obj/item/clothing/under/trek/command/next
+ icon_state = "trek_next_command"
+ item_color = "trek_next_command"
+ item_state = "r_suit"
+
+/obj/item/clothing/under/trek/engsec/next
+ icon_state = "trek_next_engsec"
+ item_color = "trek_next_engsec"
+ item_state = "y_suit"
+
+/obj/item/clothing/under/trek/medsci/next
+ icon_state = "trek_next_medsci"
+ item_color = "trek_next_medsci"
+
+
+//ENT
+/obj/item/clothing/under/trek/command/ent
+ icon_state = "trek_ent_command"
+ item_color = "trek_ent_command"
+ item_state = "bl_suit"
+
+/obj/item/clothing/under/trek/engsec/ent
+ icon_state = "trek_ent_engsec"
+ item_color = "trek_ent_engsec"
+ item_state = "bl_suit"
+
+/obj/item/clothing/under/trek/medsci/ent
+ icon_state = "trek_ent_medsci"
+ item_color = "trek_ent_medsci"
+ item_state = "bl_suit"
+
+
+//Q
+/obj/item/clothing/under/trek/Q
+ name = "french marshall's uniform"
+ desc = "something about it feels off..."
+ icon_state = "trek_Q"
+ item_color = "trek_Q"
+ item_state = "r_suit"
\ No newline at end of file
diff --git a/code/modules/events/devil.dm b/code/modules/events/devil.dm
index 21fad5037da..4f683a8f6f2 100644
--- a/code/modules/events/devil.dm
+++ b/code/modules/events/devil.dm
@@ -33,7 +33,9 @@
var/mob/living/carbon/human/devil = create_event_devil(spawn_loc)
Mind.transfer_to(devil)
ticker.mode.finalize_devil(Mind)
+ ticker.mode.add_devil_objectives(src, 2)
Mind.announceDevilLaws()
+ Mind.announce_objectives()
spawned_mobs += devil
diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm
index 61a792384c5..2aa71f91233 100644
--- a/code/modules/events/dust.dm
+++ b/code/modules/events/dust.dm
@@ -13,3 +13,18 @@
/datum/round_event/space_dust/start()
spawn_meteors(1, meteorsC)
+
+/datum/round_event_control/sandstorm
+ name = "Sandstorm"
+ typepath = /datum/round_event/sandstorm
+ weight = 0
+ max_occurrences = 0
+ earliest_start = 0
+
+/datum/round_event/sandstorm
+ startWhen = 1
+ endWhen = 150 // ~5 min
+ announceWhen = 0
+
+/datum/round_event/sandstorm/tick()
+ spawn_meteors(10, meteorsC)
\ No newline at end of file
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index 624feef72f2..51e7fd8ac54 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -559,7 +559,7 @@
if(!has_buckled_mobs() && prob(25))
for(var/mob/living/V in src.loc)
entangle(V)
- if(buckled_mobs && buckled_mobs.len)
+ if(has_buckled_mobs())
break //only capture one mob at a time
diff --git a/code/modules/food_and_drinks/food/snacks_burgers.dm b/code/modules/food_and_drinks/food/snacks_burgers.dm
index 061a28d6c90..4cab54e9891 100644
--- a/code/modules/food_and_drinks/food/snacks_burgers.dm
+++ b/code/modules/food_and_drinks/food/snacks_burgers.dm
@@ -196,4 +196,10 @@
name = "rat burger"
desc = "Pretty much what you'd expect..."
icon_state = "ratburger"
- bonus_reagents = list("nutriment" = 1, "vitamin" = 1)
\ No newline at end of file
+ bonus_reagents = list("nutriment" = 1, "vitamin" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/burger/baseball
+ name = "home run baseball burger"
+ desc = "It's still warm. The steam coming off of it looks like baseball."
+ icon_state = "baseball"
+ bonus_reagents = list("nutriment" = 1, "vitamin" = 1)
diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
index 2aeb76ce87d..94b40722664 100644
--- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
+++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm
@@ -253,3 +253,12 @@
)
result = /obj/item/weapon/reagent_containers/food/snacks/burger/rat
category = CAT_BURGER
+
+/datum/crafting_recipe/food/baseballburger
+ name = "Home run baseball burger"
+ reqs = list(
+ /obj/item/weapon/melee/baseball_bat = 1,
+ /obj/item/weapon/reagent_containers/food/snacks/bun = 1
+ )
+ result = /obj/item/weapon/reagent_containers/food/snacks/burger/baseball
+ category = CAT_BURGER
diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm
index 43fed6a2185..f84a4c72e82 100644
--- a/code/modules/hydroponics/biogenerator.dm
+++ b/code/modules/hydroponics/biogenerator.dm
@@ -14,9 +14,13 @@
var/efficiency = 0
var/productivity = 0
var/max_items = 40
+ var/datum/research/files
+ var/list/show_categories = list("Food", "Botany Chemicals", "Leather and Cloth")
+ var/list/timesFiveCategories = list("Food", "Botany Chemicals")
/obj/machinery/biogenerator/New()
..()
+ files = new /datum/research/biogenerator(src)
create_reagents(1000)
var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/biogenerator(null)
B.apply_default_parts(src)
@@ -59,6 +63,9 @@
return
/obj/machinery/biogenerator/attackby(obj/item/O, mob/user, params)
+ if(user.a_intent == "harm")
+ return ..()
+
if(processing)
user << "The biogenerator is currently processing."
return
@@ -126,11 +133,18 @@
O.loc = src
user << "You put [O.name] in [src.name]"
return 1 //no afterattack
-
- else if(user.a_intent != "harm")
- user << "You cannot put this in [src.name]!"
+ else if (istype(O, /obj/item/weapon/disk/design_disk))
+ user.visible_message("[user] begins to load \the [O] in \the [src]...",
+ "You begin to load a design from \the [O]...",
+ "You hear the chatter of a floppy drive.")
+ processing = 1
+ var/obj/item/weapon/disk/design_disk/D = O
+ if(do_after(user, 10, target = src))
+ files.AddDesign2Known(D.blueprint)
+ processing = 0
+ return 1
else
- return ..()
+ user << "You cannot put this in [src.name]!"
/obj/machinery/biogenerator/interact(mob/user)
if(stat & BROKEN || panel_open)
@@ -142,7 +156,7 @@
else
switch(menustat)
if("nopoints")
- dat += "You do not have biomass to create products.
Please, put growns into reactor and activate it.
"
+ dat += "You do not have enough biomass to create products.
Please, put growns into reactor and activate it.
"
menustat = "menu"
if("complete")
dat += "Operation complete.
"
@@ -154,43 +168,29 @@
dat += "Not enough space left in container. Unable to create product.
"
menustat = "menu"
if(beaker)
+ var/categories = show_categories.Copy()
+ for(var/V in categories)
+ categories[V] = list()
+ for(var/V in files.known_designs)
+ var/datum/design/D = files.known_designs[V]
+ for(var/C in categories)
+ if(C in D.category)
+ categories[C] += D
+
dat += "Biomass: [points] units.
"
dat += "ActivateDetach Container"
- dat += "Food:
"
- dat += ""
- dat += "10 milk:
Makex5 ([20/efficiency])
"
- dat += "10 cream:
Makex5 ([30/efficiency])
"
- dat += "Milk carton:
Makex5 ([100/efficiency])
"
- dat += "Cream carton:
Makex5 ([300/efficiency])
"
- dat += "10u black pepper:
Makex5 ([25/efficiency])
"
- dat += "Pepper mill:
Makex5 ([50/efficiency])
"
- dat += "Monkey cube:
Makex5 ([250/efficiency])"
- dat += "
"
- dat += "Botany Chemicals:
"
- dat += ""
- dat += "E-Z-Nutrient:
Makex5 ([10/efficiency])
"
- dat += "Left 4 Zed:
Makex5 ([20/efficiency])
"
- dat += "Robust Harvest:
Makex5 ([25/efficiency])
"
- dat += "Weed Killer:
Makex5 ([50/efficiency])
"
- dat += "Pest Killer:
Makex5 ([50/efficiency])
"
- dat += "Empty bottle:
Makex5 ([5/efficiency])
"
- dat += "
"
- dat += "Leather and Cloth:
"
- dat += ""
- dat += "Roll of cloth:
Makex10 ([50/efficiency])
"
- dat += "Wallet:
Make ([100/efficiency])
"
- dat += "Botanical gloves:
Make ([250/efficiency])
"
- dat += "Utility belt:
Make ([300/efficiency])
"
- dat += "Security belt:
Make ([300/efficiency])
"
- dat += "Medical belt:
Make ([300/efficiency])
"
- dat += "Janitorial belt:
Make ([300/efficiency])
"
- dat += "Bandolier belt:
Make ([300/efficiency])
"
- dat += "Shoulder holster:
Make ([400/efficiency])
"
- dat += "Leather satchel:
Make ([400/efficiency])
"
- dat += "Leather jacket:
Make ([500/efficiency])
"
- dat += "Leather overcoat:
Make ([1000/efficiency])
"
- dat += "Rice hat:
Make ([300/efficiency])
"
- dat += "
"
+ for(var/cat in categories)
+ dat += "[cat]:
"
+ dat += ""
+ for(var/V in categories[cat])
+ var/datum/design/D = V
+ dat += "[D.name]:
Make"
+ if(cat in timesFiveCategories)
+ dat += "
x5"
+ if(ispath(D.build_path, /obj/item/stack))
+ dat += "
x10"
+ dat += "([D.materials[MAT_BIOMASS]/efficiency])
"
+ dat += "
"
else
dat += "No container inside, please insert container.
"
@@ -207,7 +207,7 @@
return
if (src.stat != 0) //NOPOWER etc
return
- if(src.processing)
+ if(processing)
usr << "The biogenerator is in the process of working."
return
var/S = 0
@@ -230,142 +230,62 @@
menustat = "void"
return
-/obj/machinery/biogenerator/proc/check_cost(cost)
- if (cost > points)
+/obj/machinery/biogenerator/proc/check_cost(list/materials, multiplier = 1, remove_points = 1)
+ if(materials.len != 1 || materials[1] != MAT_BIOMASS)
+ return 0
+ if (materials[MAT_BIOMASS]*multiplier/efficiency > points)
menustat = "nopoints"
- return 1
+ return 0
else
- points -= cost
- processing = 1
+ if(remove_points)
+ points -= materials[MAT_BIOMASS]*multiplier/efficiency
update_icon()
updateUsrDialog()
- return 0
-
-/obj/machinery/biogenerator/proc/check_container_volume(reagent_amount)
- if(beaker.reagents.total_volume + reagent_amount > beaker.reagents.maximum_volume)
- menustat = "nobeakerspace"
return 1
-/obj/machinery/biogenerator/proc/create_product(create)
- switch(create)
- if("milk")
- if(check_container_volume(10))
- return 0
- else if (check_cost(20/efficiency))
- return 0
- else beaker.reagents.add_reagent("milk",10)
- if("bpepper")
- if(check_container_volume(10))
- return 0
- else if (check_cost(25/efficiency))
- return 0
- else beaker.reagents.add_reagent("blackpepper",10)
- if("cream")
- if(check_container_volume(10))
- return 0
- else if (check_cost(30/efficiency))
- return 0
- else beaker.reagents.add_reagent("cream",10)
- if("cmilk")
- if (check_cost(100/efficiency))
- return 0
- else new/obj/item/weapon/reagent_containers/food/condiment/milk(src.loc)
- if("mpepper")
- if (check_cost(50/efficiency))
- return 0
- else new/obj/item/weapon/reagent_containers/food/condiment/peppermill(src.loc)
- if("ccream")
- if (check_cost(300/efficiency))
- return 0
- else new/obj/item/weapon/reagent_containers/food/drinks/bottle/cream(src.loc)
- if("meat")
- if (check_cost(250/efficiency))
- return 0
- else new/obj/item/weapon/reagent_containers/food/snacks/monkeycube(src.loc)
- if("ez")
- if (check_cost(10/efficiency))
- return 0
- else new/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez(src.loc)
- if("l4z")
- if (check_cost(20/efficiency))
- return 0
- else new/obj/item/weapon/reagent_containers/glass/bottle/nutrient/l4z(src.loc)
- if("rh")
- if (check_cost(25/efficiency))
- return 0
- else new/obj/item/weapon/reagent_containers/glass/bottle/nutrient/rh(src.loc)
- if("wk")
- if (check_cost(50/efficiency))
- return 0
- else new/obj/item/weapon/reagent_containers/glass/bottle/killer/weedkiller(src.loc)
- if("pk")
- if (check_cost(50/efficiency))
- return 0
- else new/obj/item/weapon/reagent_containers/glass/bottle/killer/pestkiller(src.loc)
- if("empty")
- if (check_cost(5/efficiency))
- return 0
- else new/obj/item/weapon/reagent_containers/glass/bottle/nutrient/empty(src.loc)
- if("cloth")
- if (check_cost(50/efficiency))
- return 0
- else new/obj/item/stack/sheet/cloth(src.loc)
- if("tencloth")
- if (check_cost(500/efficiency))
- return 0
- else new/obj/item/stack/sheet/cloth/ten(src.loc)
- if("wallet")
- if (check_cost(100/efficiency))
- return 0
- else new/obj/item/weapon/storage/wallet(src.loc)
- if("gloves")
- if (check_cost(250/efficiency))
- return 0
- else new/obj/item/clothing/gloves/botanic_leather(src.loc)
- if("tbelt")
- if (check_cost(300/efficiency))
- return 0
- else new/obj/item/weapon/storage/belt/utility(src.loc)
- if("sbelt")
- if (check_cost(300/efficiency))
- return 0
- else new/obj/item/weapon/storage/belt/security(src.loc)
- if("mbelt")
- if (check_cost(300/efficiency))
- return 0
- else new/obj/item/weapon/storage/belt/medical(src.loc)
- if("jbelt")
- if (check_cost(300/efficiency))
- return 0
- else new/obj/item/weapon/storage/belt/janitor(src.loc)
- if("bbelt")
- if (check_cost(300/efficiency))
- return 0
- else new/obj/item/weapon/storage/belt/bandolier(src.loc)
- if("sholster")
- if (check_cost(400/efficiency))
- return 0
- else new/obj/item/weapon/storage/belt/holster(src.loc)
- if("satchel")
- if (check_cost(400/efficiency))
- return 0
- else new/obj/item/weapon/storage/backpack/satchel(src.loc)
- if("jacket")
- if (check_cost(500/efficiency))
- return 0
- else new/obj/item/clothing/suit/jacket/leather(src.loc)
- if("overcoat")
- if (check_cost(1000/efficiency))
- return 0
- else new/obj/item/clothing/suit/jacket/leather/overcoat(src.loc)
- if("rice_hat")
- if (check_cost(300/efficiency))
- return 0
- else new/obj/item/clothing/head/rice_hat(src.loc)
- processing = 0
+/obj/machinery/biogenerator/proc/check_container_volume(list/reagents, multiplier = 1)
+ var/sum_reagents = 0
+ for(var/R in reagents)
+ sum_reagents += reagents[R]
+ sum_reagents *= multiplier
+
+ if(beaker.reagents.total_volume + sum_reagents > beaker.reagents.maximum_volume)
+ menustat = "nobeakerspace"
+ return 0
+
+ return 1
+
+/obj/machinery/biogenerator/proc/create_product(datum/design/D, amount)
+ if(!beaker || !loc)
+ return 0
+
+ if(ispath(D.build_path, /obj/item/stack))
+ if(!check_container_volume(D.make_reagents, amount))
+ return 0
+ if(!check_cost(D.materials, amount))
+ return 0
+
+ var/obj/item/stack/product = new D.build_path(loc)
+ product.amount = amount
+ for(var/R in D.make_reagents)
+ beaker.reagents.add_reagent(R, D.make_reagents[R]*amount)
+ else
+ var/i = amount
+ while(i > 0)
+ if(!check_container_volume(D.make_reagents))
+ return .
+ if(!check_cost(D.materials))
+ return .
+ if(D.build_path)
+ new D.build_path(loc)
+ for(var/R in D.make_reagents)
+ beaker.reagents.add_reagent(R, D.make_reagents[R])
+ . = 1
+ --i
+
menustat = "complete"
update_icon()
- return 1
+ return .
/obj/machinery/biogenerator/proc/detach()
if(beaker)
@@ -389,13 +309,8 @@
else if(href_list["create"])
var/amount = (text2num(href_list["amount"]))
- var/i = amount
- var/C = href_list["create"]
- if(i <= 0)
- return
- while(i >= 1)
- create_product(C)
- i--
+ var/datum/design/D = locate(href_list["create"])
+ create_product(D, amount)
updateUsrDialog()
else if(href_list["menu"])
diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm
index 22c2e119dcb..b47e119bf2b 100644
--- a/code/modules/hydroponics/grown/mushrooms.dm
+++ b/code/modules/hydroponics/grown/mushrooms.dm
@@ -49,7 +49,7 @@
plant_type = PLANT_MUSHROOM
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
mutatelist = list(/obj/item/seeds/angel)
- reagents_add = list("mushroomhallucinogen" = 0.04, "amatoxin" = 0.35, "nutriment" = 0)
+ reagents_add = list("mushroomhallucinogen" = 0.04, "amatoxin" = 0.35, "nutriment" = 0, "growthserum" = 0.1)
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/amanita
seed = /obj/item/seeds/amanita
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index 1f63b52ed03..539b41de722 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -121,11 +121,11 @@
myseed.loc = src
if(self_sustaining)
- adjustNutri(2 / rating)
- adjustWater(rand(8, 10) / rating)
- adjustWeeds(-5 / rating)
- adjustPests(-5 / rating)
- adjustToxic(-5 / rating)
+ adjustNutri(2 * rating)
+ adjustWater(rand(8, 10) * rating)
+ adjustWeeds(-5 * rating)
+ adjustPests(-5 * rating)
+ adjustToxic(-5 * rating)
if(world.time > (lastcycle + cycledelay))
lastcycle = world.time
@@ -619,7 +619,7 @@
adjustHealth(round(salt * 0.25))
if (myseed)
myseed.adjust_production(-round(salt/100)-prob(salt%100))
- myseed.adjust_potency(round(salt*0.15))
+ myseed.adjust_potency(round(salt*0.50))
// Ash is also used IRL in gardening, as a fertilizer enhancer and weed killer
if(S.has_reagent("ash", 1))
adjustHealth(round(S.get_reagent_amount("ash") * 0.25))
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 292fee234dc..0ef623b7717 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -55,7 +55,7 @@
desc = "Used to call and send the mining shuttle."
circuit = /obj/item/weapon/circuitboard/computer/mining_shuttle
shuttleId = "mining"
- possible_destinations = "mining_home;mining_away"
+ possible_destinations = "mining_home;mining_away;mining_base"
no_destination_swap = 1
var/global/list/dumb_rev_heads = list()
@@ -500,3 +500,95 @@
anchored = 1
layer = BELOW_MOB_LAYER
density = 0
+
+///Mining Base////
+
+/area/shuttle/auxillary_base
+ name = "Auxillary Base"
+
+
+/obj/machinery/computer/shuttle/auxillary_base
+ name = "auxillary base launch control"
+ icon = 'icons/obj/terminals.dmi'
+ icon_state = "dorm_available"
+ shuttleId = "colony_drop"
+ req_access = list(access_heads)
+ possible_destinations = null
+ clockwork = TRUE
+
+/obj/machinery/computer/shuttle/auxillary_base/Topic(href, href_list)
+ if(href_list["move"])
+ if(z != ZLEVEL_STATION)
+ usr << "You can't move the base again!"
+ return 0
+ ..()
+
+/obj/item/device/assault_pod/mining
+ name = "Landing Field Designator"
+ icon_state = "gangtool-purple"
+ item_state = "electronic"
+ icon = 'icons/obj/device.dmi'
+ desc = "Deploy to designate the landing zone of the auxillary base."
+ shuttle_id = "colony_drop"
+ var/setting = FALSE
+ var/no_restrictions = FALSE //Badmin variable to let you drop the colony ANYWHERE.
+ dwidth = 11 //These dimensions are to be set by the mappers for their respective maps.
+ dheight = 0
+ width = 23
+ height = 23
+ lz_dir = 1
+
+/obj/item/device/assault_pod/mining/attack_self(mob/living/user)
+ if(setting)
+ return
+ var/turf/T = get_turf(user)
+ if(!no_restrictions)
+ if(T.z != ZLEVEL_MINING)
+ user << "Wouldn't do much good dropping a mining base away from the mining area!"
+ return
+ var/colony_radius = max(width, height)/2
+ var/list/area_counter = get_areas_in_range(colony_radius, T)
+ if(area_counter.len > 1) //Avoid smashing ruins unless you are inside a really big one
+ user << "Unable to acquire a targeting lock. Find an area clear of stuctures or entirely within one."
+ return
+
+ user << "You begin setting the landing zone parameters..."
+ setting = TRUE
+ if(!do_after(user, 50, target = src)) //You get a few seconds to cancel if you do not want to drop there.
+ setting = FALSE
+ return
+
+ var/obj/docking_port/stationary/landing_zone = new /obj/docking_port/stationary(T)
+ landing_zone.id = "colony_drop(\ref[src])"
+ landing_zone.name = "Landing Zone"
+ landing_zone.dwidth = dwidth
+ landing_zone.dheight = dheight
+ landing_zone.width = width
+ landing_zone.height = height
+ landing_zone.setDir(lz_dir)
+
+ for(var/obj/machinery/computer/shuttle/S in machines)
+ if(S.shuttleId == shuttle_id)
+ S.possible_destinations = "[landing_zone.id]"
+
+//Serves as a nice mechanic to people get ready for the launch.
+ minor_announce("Auxiliary base landing zone coordinates locked in for [get_area(user)]. Launch command now available!")
+ user << "Landing zone set."
+
+ qdel(src)
+
+/obj/item/device/assault_pod/mining/unrestricted
+ name = "omni-locational landing field designator"
+ desc = "Allows the deployment of the mining base ANYWHERE. Use with caution."
+ no_restrictions = TRUE
+
+
+/area/shuttle/auxillary_base
+ name = "Auxillary Base"
+
+/obj/docking_port/mobile/auxillary_base
+ name = "auxillary base"
+ id = "colony_drop"
+ dwidth = 11
+ width = 23
+ height = 23
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index 0ee77ea7666..6a17ffa5937 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -14,6 +14,7 @@ var/global/posibrain_notif_cooldown = 0
req_access = list(access_robotics)
mecha = null//This does not appear to be used outside of reference in mecha.dm.
braintype = "Android"
+ var/autoping = TRUE //if it pings on creation immediately
var/begin_activation_message = "You carefully locate the manual activation switch and start the positronic brain's boot process."
var/success_message = "The positronic brain pings, and its lights start flashing. Success!"
var/fail_message = "The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?"
@@ -148,7 +149,8 @@ var/global/posibrain_notif_cooldown = 0
brainmob.real_name = brainmob.name
brainmob.loc = src
brainmob.container = src
- ping_ghosts("created", TRUE)
+ if(autoping)
+ ping_ghosts("created", TRUE)
..()
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 961977cc4f2..15193870032 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -58,8 +58,6 @@
if(reagents.has_reagent("teslium"))
shock_damage *= 1.5 //If the mob has teslium in their body, shocks are 50% more damaging!
take_overall_damage(0,shock_damage)
- //src.adjustFireLoss(shock_damage)
- //src.updatehealth()
visible_message(
"[src] was shocked by \the [source]!", \
"You feel a powerful shock coursing through your body!", \
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index ab5600cfa12..eb4e7d9c45d 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1062,12 +1062,7 @@
O = new /datum/objective/sintouched/pride
ticker.mode.sintouched += src.mind
src.mind.objectives += O
- var/obj_count = 1
- src << "Your current objectives:"
- for(O in src.mind.objectives)
- var/datum/objective/objective = O
- src << "Objective #[obj_count]: [objective.explanation_text]"
- obj_count++
+ src.mind.announce_objectives()
/mob/living/carbon/human/check_weakness(obj/item/weapon, mob/living/attacker)
. = ..()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index b7159cfb159..a7036f009e5 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -437,7 +437,13 @@ Sorry Giacom. Please don't be mad :(
/mob/living/proc/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0)
- return 0 //only carbon liveforms have this proc
+ adjustFireLoss(shock_damage)
+ visible_message(
+ "[src] was shocked by \the [source]!", \
+ "You feel a powerful shock coursing through your body!", \
+ "You hear a heavy electrical crack." \
+ )
+ return shock_damage
/mob/living/emp_act(severity)
var/list/L = src.get_contents()
@@ -1030,7 +1036,10 @@ Sorry Giacom. Please don't be mad :(
return 1
/mob/living/proc/return_soul()
+ hellbound = 0
if(mind)
+ if(mind.soulOwner.devilinfo)//Not sure how this could happen, but whatever.
+ mind.soulOwner.devilinfo.remove_soul(mind)
mind.soulOwner = mind
/mob/living/proc/has_bane(banetype)
diff --git a/code/modules/mob/living/silicon/laws.dm b/code/modules/mob/living/silicon/laws.dm
index 9d646bee151..9ed86afb74f 100644
--- a/code/modules/mob/living/silicon/laws.dm
+++ b/code/modules/mob/living/silicon/laws.dm
@@ -5,10 +5,15 @@
if (!laws)
make_laws()
+/mob/living/silicon/proc/set_law_sixsixsix(law)
+ throw_alert("newlaw", /obj/screen/alert/newlaw)
+ laws_sanity_check()
+ laws.set_law_sixsixsix(law)
+
/mob/living/silicon/proc/set_zeroth_law(law, law_borg)
throw_alert("newlaw", /obj/screen/alert/newlaw)
- src.laws_sanity_check()
- src.laws.set_zeroth_law(law, law_borg)
+ laws_sanity_check()
+ laws.set_zeroth_law(law, law_borg)
/mob/living/silicon/proc/add_inherent_law(law)
throw_alert("newlaw", /obj/screen/alert/newlaw)
@@ -54,3 +59,7 @@
/mob/living/silicon/proc/clear_zeroth_law(force)
laws_sanity_check()
laws.clear_zeroth_law(force)
+
+/mob/living/silicon/proc/clear_law_sixsixsix(force)
+ laws_sanity_check()
+ laws.clear_law_sixsixsix(force)
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index f88b2582bb0..934a0d6c633 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -29,6 +29,7 @@
var/lawcheck[1]
var/ioncheck[1]
+ var/devillawcheck[5]
var/med_hud = DATA_HUD_MEDICAL_ADVANCED //Determines the med hud to use
var/sec_hud = DATA_HUD_SECURITY_ADVANCED //Determines the sec hud to use
@@ -217,19 +218,31 @@
if (href_list["lawc"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
var/L = text2num(href_list["lawc"])
switch(lawcheck[L+1])
- if ("Yes") lawcheck[L+1] = "No"
- if ("No") lawcheck[L+1] = "Yes"
-// src << text ("Switching Law [L]'s report status to []", lawcheck[L+1])
+ if ("Yes")
+ lawcheck[L+1] = "No"
+ if ("No")
+ lawcheck[L+1] = "Yes"
checklaws()
if (href_list["lawi"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
var/L = text2num(href_list["lawi"])
switch(ioncheck[L])
- if ("Yes") ioncheck[L] = "No"
- if ("No") ioncheck[L] = "Yes"
-// src << text ("Switching Law [L]'s report status to []", lawcheck[L+1])
+ if ("Yes")
+ ioncheck[L] = "No"
+ if ("No")
+ ioncheck[L] = "Yes"
checklaws()
+ if (href_list["lawdevil"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
+ var/L = text2num(href_list["lawdevil"])
+ switch(devillawcheck[L])
+ if ("Yes")
+ devillawcheck[L] = "No"
+ if ("No")
+ devillawcheck[L] = "Yes"
+ checklaws()
+
+
if (href_list["laws"]) // With how my law selection code works, I changed statelaws from a verb to a proc, and call it through my law selection panel. --NeoFite
statelaws()
@@ -245,6 +258,11 @@
var/number = 1
sleep(10)
+ if (src.laws.devillaws && src.laws.devillaws.len)
+ for(var/index = 1, index <= src.laws.devillaws.len, index++)
+ if (src.devillawcheck[index] == "Yes")
+ src.say("[radiomod] 666. [src.laws.devillaws[index]]")
+ sleep(10)
if (src.laws.zeroth)
@@ -285,6 +303,12 @@
var/list = "Which laws do you want to include when stating them for the crew?
"
+ if (src.laws.devillaws && src.laws.devillaws.len)
+ for(var/index = 1, index <= src.laws.devillaws.len, index++)
+ if (!src.devillawcheck[index])
+ src.devillawcheck[index] = "No"
+ list += {"[src.devillawcheck[index]] 666: [src.laws.devillaws[index]]
"}
+
if (src.laws.zeroth)
if (!src.lawcheck[1])
src.lawcheck[1] = "No" //Given Law 0's usual nature, it defaults to NOT getting reported. --NeoFite
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
index fac8d25c9db..3a0ff80b5db 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm
@@ -98,10 +98,14 @@
/mob/living/simple_animal/drone/med_hud_set_health()
var/image/holder = hud_list[DIAG_HUD]
+ var/icon/I = icon(icon, icon_state, dir)
+ holder.pixel_y = I.Height() - world.icon_size
holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]"
/mob/living/simple_animal/drone/med_hud_set_status()
var/image/holder = hud_list[DIAG_STAT_HUD]
+ var/icon/I = icon(icon, icon_state, dir)
+ holder.pixel_y = I.Height() - world.icon_size
if(stat == DEAD)
holder.icon_state = "huddead2"
else if(incapacitated())
@@ -259,3 +263,6 @@
/mob/living/simple_animal/drone/bee_friendly()
// Why would bees pay attention to drones?
return 1
+
+/mob/living/simple_animal/drone/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0)
+ return 0 //So they don't die trying to fix wiring
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 33982939f31..bef0d66a218 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -62,6 +62,8 @@ var/global/list/parasites = list() //all currently existing/living guardians
/mob/living/simple_animal/hostile/guardian/med_hud_set_status()
if(summoner)
var/image/holder = hud_list[STATUS_HUD]
+ var/icon/I = icon(icon, icon_state, dir)
+ holder.pixel_y = I.Height() - world.icon_size
if(summoner.stat == DEAD)
holder.icon_state = "huddead"
else
diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
index 5cbe44e7d25..63b10fa5f7f 100644
--- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
+++ b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm
@@ -37,9 +37,9 @@
if(src.loc == summoner)
src << "You must be manifested to create bombs!"
return
- if(istype(A, /obj/))
+ if(isobj(A))
if(bomb_cooldown <= world.time && !stat)
- var/obj/item/weapon/guardian_bomb/B = new /obj/item/weapon/guardian_bomb(get_turf(A))
+ var/obj/guardian_bomb/B = new /obj/guardian_bomb(get_turf(A))
src << "