diff --git a/code/datums/outfits/costumes/halloween.dm b/code/datums/outfits/costumes/halloween.dm
index d4ad8fa8f99..2b8f6d7447a 100644
--- a/code/datums/outfits/costumes/halloween.dm
+++ b/code/datums/outfits/costumes/halloween.dm
@@ -110,6 +110,14 @@
name = "Costume - Pirate"
uniform = /obj/item/clothing/under/pirate
shoes = /obj/item/clothing/shoes/brown
- head = /obj/item/clothing/head/helmet/space
+ head = /obj/item/clothing/head/pirate
suit = /obj/item/clothing/suit/pirate
- glasses = /obj/item/clothing/glasses/eyepatch
\ No newline at end of file
+ glasses = /obj/item/clothing/glasses/eyepatch
+
+/decl/hierarchy/outfit/h_whiteout
+ name = "Costume - Snow Ghost"
+ uniform = /obj/item/clothing/under/color/white{ starting_accessories=list(/obj/item/clothing/accessory/scarf/white) }
+ shoes = /obj/item/clothing/shoes/white
+ suit = /obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout
+ gloves = /obj/item/clothing/gloves/white
+ mask = /obj/item/clothing/mask/surgical
\ No newline at end of file
diff --git a/code/datums/uplink/visible_weapons.dm b/code/datums/uplink/visible_weapons.dm
index f7d79c5b6a2..ce4e205f644 100644
--- a/code/datums/uplink/visible_weapons.dm
+++ b/code/datums/uplink/visible_weapons.dm
@@ -112,6 +112,12 @@
path = /obj/item/weapon/storage/secure/briefcase/rifle
antag_roles = list("traitor", "autotraitor", "infiltrator")
+/datum/uplink_item/item/visible_weapons/fuelrodcannon
+ name = "Fuel-Rod Cannon"
+ desc = "An incredibly bulky weapon whose devastating firepower is only matched by its severe need for expensive, and rare, ammunition. This device will likely require extra preparation to use, you are warned."
+ item_cost = DEFAULT_TELECRYSTAL_AMOUNT
+ path = /obj/item/weapon/storage/secure/briefcase/fuelrod
+
/datum/uplink_item/item/visible_weapons/tommygun
name = "Tommygun (.45)" // We're keeping this because it's CLASSY. -Spades
item_cost = 60
diff --git a/code/game/jobs/job/civilian_chaplain.dm b/code/game/jobs/job/civilian_chaplain.dm
index 95809c63f44..88a448c571c 100644
--- a/code/game/jobs/job/civilian_chaplain.dm
+++ b/code/game/jobs/job/civilian_chaplain.dm
@@ -28,17 +28,21 @@
return
spawn(0)
- var/religion_name = "Christianity"
- var/new_religion = sanitize(input(H, "You are the crew services officer. Would you like to change your religion? Default is Christianity, in SPACE.", "Name change", religion_name), MAX_NAME_LEN)
+ var/religion_name = "Unitarianism"
+ var/new_religion = sanitize(input(H, "You are the crew services officer. Would you like to change your religion? Default is Unitarianism", "Name change", religion_name), MAX_NAME_LEN)
if (!new_religion)
new_religion = religion_name
switch(lowertext(new_religion))
+ if("unitarianism")
+ B.name = "The Talmudic Quran"
if("christianity")
B.name = pick("The Holy Bible","The Dead Sea Scrolls")
+ if("Judaism")
+ B.name = "The Torah"
if("satanism")
- B.name = "The Unholy Bible"
- if("cthulu")
+ B.name = "The Satanic Bible"
+ if("cthulhu")
B.name = "The Necronomicon"
if("islam")
B.name = "Quran"
@@ -52,20 +56,21 @@
B.name = "Toolbox Manifesto"
if("homosexuality")
B.name = "Guys Gone Wild"
- //if("lol", "wtf", "gay", "penis", "ass", "poo", "badmin", "shitmin", "deadmin", "cock", "cocks")
- // B.name = pick("Woodys Got Wood: The Aftermath", "War of the Cocks", "Sweet Bro and Hella Jef: Expanded Edition")
- // H.setBrainLoss(100) // starts off retarded as fuck
if("science")
B.name = pick("Principle of Relativity", "Quantum Enigma: Physics Encounters Consciousness", "Programming the Universe", "Quantum Physics and Theology", "String Theory for Dummies", "How To: Build Your Own Warp Drive", "The Mysteries of Bluespace", "Playing God: Collector's Edition")
+ if("capitalism")
+ B.name = "Wealth of Nations"
+ if("communism")
+ B.name = "The Communist Manifesto"
else
B.name = "The Holy Book of [new_religion]"
feedback_set_details("religion_name","[new_religion]")
spawn(1)
- var/deity_name = "Space Jesus"
- var/new_deity = sanitize(input(H, "Would you like to change your deity? Default is Space Jesus.", "Name change", deity_name), MAX_NAME_LEN)
+ var/deity_name = "Hashem"
+ var/new_deity = sanitize(input(H, "Would you like to change your deity? Default is Hashem", "Name change", deity_name), MAX_NAME_LEN)
- if ((length(new_deity) == 0) || (new_deity == "Space Jesus") )
+ if ((length(new_deity) == 0) || (new_deity == "Hashem") )
new_deity = deity_name
B.deity_name = new_deity
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 6455fa64301..d8ad21eb211 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -120,6 +120,17 @@ obj/machinery/recharger
update_use_power(1)
return
+ if(istype(charging, /obj/item/weapon/gun/magnetic))
+ var/obj/item/weapon/gun/magnetic/M = charging
+ if(!M.cell.fully_charged())
+ icon_state = icon_state_charging
+ M.cell.give(active_power_usage*CELLRATE)
+ update_use_power(2)
+ else
+ icon_state = icon_state_charged
+ update_use_power(1)
+ return
+
if(istype(charging, /obj/item/weapon/melee/baton))
var/obj/item/weapon/melee/baton/B = charging
if(B.bcell)
@@ -226,7 +237,7 @@ obj/machinery/recharger
icon = 'icons/obj/stationobjs.dmi'
icon_state = "wrecharger0"
active_power_usage = 25000 //25 kW , It's more specialized than the standalone recharger (guns, batons, and flashlights only) so make it more powerful
- allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/flashlight, /obj/item/weapon/cell/device)
+ allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/gun/magnetic, /obj/item/weapon/melee/baton, /obj/item/device/flashlight, /obj/item/weapon/cell/device)
icon_state_charged = "wrecharger2"
icon_state_charging = "wrecharger1"
icon_state_idle = "wrecharger0"
diff --git a/code/game/objects/effects/decals/Cleanable/fuel.dm b/code/game/objects/effects/decals/Cleanable/fuel.dm
index 85e68c31afd..d9e9baabf6f 100644
--- a/code/game/objects/effects/decals/Cleanable/fuel.dm
+++ b/code/game/objects/effects/decals/Cleanable/fuel.dm
@@ -52,11 +52,17 @@
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/New(newLoc, amt = 1, d = 0)
set_dir(d) //Setting this direction means you won't get torched by your own flamethrower.
+ if(istype(newLoc, /turf/simulated))
+ var/turf/simulated/T = newLoc
+ T.hotspot_expose((T20C*2) + 380,500) //Ignite the fuel.
. = ..()
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/Spread()
//The spread for flamethrower fuel is much more precise, to create a wide fire pattern.
- if(amount < 0.1) return
+ if(amount <= 0.1)
+ if(amount < 0.025) //Hopefully stops fuel spreading into unburnable puddles.
+ qdel(src)
+ return
var/turf/simulated/S = loc
if(!istype(S)) return
@@ -65,7 +71,12 @@
if(locate(/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel) in O)
continue
if(O.CanPass(null, S, 0, 0) && S.CanPass(null, O, 0, 0))
- new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(O,amount*0.25,d)
+ var/new_pool_amount = amount * 0.25
+ if(new_pool_amount > 0.1)
+ var/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/F = new(O, new_pool_amount, d)
+ if(F.amount < 0.025) //Safety.
+ qdel(F)
+ return
O.hotspot_expose((T20C*2) + 380,500) //Light flamethrower fuel on fire immediately.
amount *= 0.25
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index f113e5f1530..9a56cf94a7a 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -177,8 +177,9 @@
if(M.brainmob.mind)
for(var/mob/observer/dead/G in player_list)
if(G.can_reenter_corpse && G.mind == M.brainmob.mind)
- ghost_can_reenter = 1
- break
+ ghost_can_reenter = 1 //May come in use again at another point.
+ to_chat(user, "\The [W] is completely unresponsive; though it may be able to auto-resuscitate.") //Jamming a ghosted brain into a borg is likely detrimental, and may result in some problems.
+ return
if(!ghost_can_reenter)
user << "\The [W] is completely unresponsive; there's no point."
return
diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm
index 6f8e1782eb2..46543b901b6 100644
--- a/code/game/objects/items/weapons/gift_wrappaper.dm
+++ b/code/game/objects/items/weapons/gift_wrappaper.dm
@@ -103,7 +103,7 @@
/obj/item/device/paicard,
/obj/item/device/violin,
/obj/item/weapon/storage/belt/utility/full,
- /obj/item/clothing/accessory/horrible)
+ /obj/item/clothing/accessory/tie/horrible)
if(!ispath(gift_type,/obj/item)) return
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index 0c7ec201675..cd3aca0f378 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -295,3 +295,22 @@
for(var/i = 1 to 4)
new /obj/item/ammo_casing/a145(src)
+
+/obj/item/weapon/storage/secure/briefcase/fuelrod
+ name = "heavy briefcase"
+ desc = "A heavy, locked briefcase."
+ description_fluff = "The container, upon opening, looks to have a few oddly shaped indentations in its packing."
+ description_antag = "This case will likely contain a charged fuel rod gun, and a few fuel rods to go with it. It can only hold the fuel rod gun, fuel rods, batteries, a screwdriver, and stock machine parts."
+ force = 12 //Anti-rad lined i.e. Lead, probably gonna hurt a bit if you get bashed with it.
+ can_hold = list(/obj/item/weapon/gun/magnetic/fuelrod, /obj/item/weapon/fuel_assembly, /obj/item/weapon/cell, /obj/item/weapon/stock_parts, /obj/item/weapon/screwdriver)
+
+
+/obj/item/weapon/storage/secure/briefcase/fuelrod/New()
+ ..()
+ new /obj/item/weapon/gun/magnetic/fuelrod(src)
+ new /obj/item/weapon/fuel_assembly/deuterium(src)
+ new /obj/item/weapon/fuel_assembly/deuterium(src)
+ new /obj/item/weapon/fuel_assembly/tritium(src)
+ new /obj/item/weapon/fuel_assembly/tritium(src)
+ new /obj/item/weapon/fuel_assembly/phoron(src)
+ new /obj/item/weapon/screwdriver(src)
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index e08dba0a0f8..5976c357036 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -1,78 +1,6 @@
-//trees
-/obj/structure/flora/tree
- name = "tree"
- anchored = 1
- density = 1
- pixel_x = -16
- layer = MOB_LAYER // You know what, let's play it safe.
-
-/obj/structure/flora/tree/pine
- name = "pine tree"
- icon = 'icons/obj/flora/pinetrees.dmi'
- icon_state = "pine_1"
-
-/obj/structure/flora/tree/pine/New()
- ..()
- icon_state = "pine_[rand(1, 3)]"
-
-/obj/structure/flora/tree/pine/xmas
- name = "xmas tree"
- icon = 'icons/obj/flora/pinetrees.dmi'
- icon_state = "pine_c"
-
-/obj/structure/flora/tree/pine/xmas/New()
- ..()
- icon_state = "pine_c"
-
-/obj/structure/flora/tree/dead
- icon = 'icons/obj/flora/deadtrees.dmi'
- icon_state = "tree_1"
-
-/obj/structure/flora/tree/dead/New()
- ..()
- icon_state = "tree_[rand(1, 6)]"
-
-/obj/structure/flora/tree/sif
- name = "glowing tree"
- desc = "It's a tree, except this one seems quite alien. It glows a deep blue."
- icon = 'icons/obj/flora/deadtrees.dmi'
- icon_state = "tree_sif"
-
-/obj/structure/flora/tree/sif/New()
- update_icon()
-
-/obj/structure/flora/tree/sif/update_icon()
- set_light(5, 1, "#33ccff")
- overlays.Cut()
- overlays.Add(image(icon = 'icons/obj/flora/deadtrees.dmi', icon_state = "[icon_state]_glow", layer = LIGHTING_LAYER + 0.1))
-
-//grass
-/obj/structure/flora/grass
- name = "grass"
- icon = 'icons/obj/flora/snowflora.dmi'
- anchored = 1
-
-/obj/structure/flora/grass/brown
- icon_state = "snowgrass1bb"
-
-/obj/structure/flora/grass/brown/New()
- ..()
- icon_state = "snowgrass[rand(1, 3)]bb"
-/obj/structure/flora/grass/green
- icon_state = "snowgrass1gb"
-/obj/structure/flora/grass/green/New()
- ..()
- icon_state = "snowgrass[rand(1, 3)]gb"
-
-/obj/structure/flora/grass/both
- icon_state = "snowgrassall1"
-
-/obj/structure/flora/grass/both/New()
- ..()
- icon_state = "snowgrassall[rand(1, 3)]"
//bushes
diff --git a/code/game/objects/structures/flora/grass.dm b/code/game/objects/structures/flora/grass.dm
new file mode 100644
index 00000000000..d5e7e965a87
--- /dev/null
+++ b/code/game/objects/structures/flora/grass.dm
@@ -0,0 +1,27 @@
+//grass
+/obj/structure/flora/grass
+ name = "grass"
+ icon = 'icons/obj/flora/snowflora.dmi'
+ anchored = 1
+
+/obj/structure/flora/grass/brown
+ icon_state = "snowgrass1bb"
+
+/obj/structure/flora/grass/brown/New()
+ ..()
+ icon_state = "snowgrass[rand(1, 3)]bb"
+
+
+/obj/structure/flora/grass/green
+ icon_state = "snowgrass1gb"
+
+/obj/structure/flora/grass/green/New()
+ ..()
+ icon_state = "snowgrass[rand(1, 3)]gb"
+
+/obj/structure/flora/grass/both
+ icon_state = "snowgrassall1"
+
+/obj/structure/flora/grass/both/New()
+ ..()
+ icon_state = "snowgrassall[rand(1, 3)]"
\ No newline at end of file
diff --git a/code/game/objects/structures/flora/trees.dm b/code/game/objects/structures/flora/trees.dm
new file mode 100644
index 00000000000..d7960b59825
--- /dev/null
+++ b/code/game/objects/structures/flora/trees.dm
@@ -0,0 +1,202 @@
+//trees
+/obj/structure/flora/tree
+ name = "tree"
+ anchored = 1
+ density = 1
+ pixel_x = -16
+ layer = MOB_LAYER // You know what, let's play it safe.
+ var/base_state = null // Used for stumps.
+ var/health = 200 // Used for chopping down trees.
+ var/max_health = 200
+ var/shake_animation_degrees = 4 // How much to shake the tree when struck. Larger trees should have smaller numbers or it looks weird.
+ var/obj/item/stack/material/product = null // What you get when chopping this tree down. Generally it will be a type of wood.
+ var/product_amount = 10 // How much of a stack you get, if the above is defined.
+ var/is_stump = FALSE // If true, suspends damage tracking and most other effects.
+
+/obj/structure/flora/tree/attackby(var/obj/item/weapon/W, var/mob/living/user)
+ if(!istype(W))
+ return ..()
+
+ if(is_stump)
+ return
+
+ visible_message("\The [user] hits \the [src] with \the [W]!")
+
+ var/damage_to_do = W.force
+ if(!W.sharp && !W.edge)
+ damage_to_do = round(damage_to_do / 4)
+ if(damage_to_do > 0)
+ if(W.sharp && W.edge)
+ playsound(get_turf(src), 'sound/effects/woodcutting.ogg', 50, 1)
+ else
+ playsound(get_turf(src), W.hitsound, 50, 1)
+ if(damage_to_do > 5)
+ adjust_health(-damage_to_do)
+ else
+ to_chat(user, "\The [W] is ineffective at harming \the [src].")
+
+ hit_animation()
+ user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
+ user.do_attack_animation(src)
+
+// Shakes the tree slightly, more or less stolen from lockers.
+/obj/structure/flora/tree/proc/hit_animation()
+ var/init_px = pixel_x
+ var/shake_dir = pick(-1, 1)
+ animate(src, transform=turn(matrix(), shake_animation_degrees * shake_dir), pixel_x=init_px + 2*shake_dir, time=1)
+ animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING)
+
+// Used when the tree gets hurt.
+/obj/structure/flora/tree/proc/adjust_health(var/amount)
+ if(is_stump)
+ return
+
+ health = between(0, health + amount, max_health)
+ if(health <= 0)
+ die()
+
+// Called when the tree loses all health, for whatever reason.
+/obj/structure/flora/tree/proc/die()
+ if(is_stump)
+ return
+
+ if(product && product_amount) // Make wooden logs.
+ var/obj/item/stack/material/M = new product(get_turf(src))
+ M.amount = product_amount
+ M.update_icon()
+ visible_message("\The [src] is felled!")
+ stump()
+
+// Makes the tree into a mostly non-interactive stump.
+/obj/structure/flora/tree/proc/stump()
+ if(is_stump)
+ return
+
+ is_stump = TRUE
+ icon_state = "[base_state]_stump"
+ overlays.Cut() // For the Sif tree and other future glowy trees.
+ set_light(0)
+
+/obj/structure/flora/tree/ex_act(var/severity)
+ adjust_health(-(max_health / severity))
+
+
+/obj/structure/flora/tree/get_description_interaction()
+ var/list/results = list()
+
+ if(!is_stump)
+ results += "[desc_panel_image("hatchet")]to cut down this tree into logs. Any sharp and strong weapon will do."
+
+ results += ..()
+
+ return results
+
+// Subtypes.
+
+// Pine trees
+
+/obj/structure/flora/tree/pine
+ name = "pine tree"
+ icon = 'icons/obj/flora/pinetrees.dmi'
+ icon_state = "pine_1"
+ base_state = "pine"
+ product = /obj/item/stack/material/log
+ shake_animation_degrees = 3
+
+/obj/structure/flora/tree/pine/New()
+ ..()
+ icon_state = "[base_state]_[rand(1, 3)]"
+
+
+/obj/structure/flora/tree/pine/xmas
+ name = "xmas tree"
+ icon = 'icons/obj/flora/pinetrees.dmi'
+ icon_state = "pine_c"
+
+/obj/structure/flora/tree/pine/xmas/New()
+ ..()
+ icon_state = "pine_c"
+
+// Palm trees
+
+/obj/structure/flora/tree/palm
+ icon = 'icons/obj/flora/palmtrees.dmi'
+ icon_state = "palm1"
+ base_state = "palm"
+ product = /obj/item/stack/material/log
+ product_amount = 5
+ health = 200
+ max_health = 200
+ pixel_x = 0
+
+/obj/structure/flora/tree/palm/New()
+ ..()
+ icon_state = "[base_state][rand(1, 2)]"
+
+
+// Dead trees
+
+/obj/structure/flora/tree/dead
+ icon = 'icons/obj/flora/deadtrees.dmi'
+ icon_state = "tree_1"
+ base_state = "tree"
+ product = /obj/item/stack/material/log
+ product_amount = 5
+ health = 200
+ max_health = 200
+
+/obj/structure/flora/tree/dead/New()
+ ..()
+ icon_state = "[base_state]_[rand(1, 6)]"
+
+// Small jungle trees
+
+/obj/structure/flora/tree/jungle_small
+ icon = 'icons/obj/flora/jungletreesmall.dmi'
+ icon_state = "tree"
+ base_state = "tree"
+ product = /obj/item/stack/material/log
+ product_amount = 10
+ health = 400
+ max_health = 400
+ pixel_x = -32
+
+/obj/structure/flora/tree/jungle_small/New()
+ ..()
+ icon_state = "[base_state][rand(1, 6)]"
+
+// Big jungle trees
+
+/obj/structure/flora/tree/jungle
+ icon = 'icons/obj/flora/jungletree.dmi'
+ icon_state = "tree"
+ base_state = "tree"
+ product = /obj/item/stack/material/log
+ product_amount = 20
+ health = 800
+ max_health = 800
+ pixel_x = -48
+ pixel_y = -16
+ shake_animation_degrees = 2
+
+/obj/structure/flora/tree/jungle/New()
+ ..()
+ icon_state = "[base_state][rand(1, 6)]"
+
+// Sif trees
+
+/obj/structure/flora/tree/sif
+ name = "glowing tree"
+ desc = "It's a tree, except this one seems quite alien. It glows a deep blue."
+ icon = 'icons/obj/flora/deadtrees.dmi'
+ icon_state = "tree_sif"
+ base_state = "tree_sif"
+ product = /obj/item/stack/material/log/sif
+
+/obj/structure/flora/tree/sif/New()
+ update_icon()
+
+/obj/structure/flora/tree/sif/update_icon()
+ set_light(5, 1, "#33ccff")
+ overlays.Cut()
+ overlays.Add(image(icon = 'icons/obj/flora/deadtrees.dmi', icon_state = "[icon_state]_glow", layer = LIGHTING_LAYER + 0.1))
\ No newline at end of file
diff --git a/code/game/objects/structures/railing.dm b/code/game/objects/structures/railing.dm
index 4cc5394e20e..ea52ed3845b 100644
--- a/code/game/objects/structures/railing.dm
+++ b/code/game/objects/structures/railing.dm
@@ -1,7 +1,7 @@
// Based on railing.dmi from https://github.com/Endless-Horizon/CEV-Eris
/obj/structure/railing
name = "railing"
- desc = "A standard steel railing. Play stupid games win stupid prizes."
+ desc = "A standard steel railing. Play stupid games, win stupid prizes."
icon = 'icons/obj/railing.dmi'
density = 1
throwpass = 1
diff --git a/code/game/turfs/simulated/outdoors/snow.dm b/code/game/turfs/simulated/outdoors/snow.dm
index 16678d7c988..22f9085a8c1 100644
--- a/code/game/turfs/simulated/outdoors/snow.dm
+++ b/code/game/turfs/simulated/outdoors/snow.dm
@@ -25,7 +25,7 @@
/turf/simulated/floor/outdoors/snow/attackby(var/obj/item/W, var/mob/user)
if(istype(W, /obj/item/weapon/shovel))
to_chat(user, "You begin to remove \the [src] with your [W].")
- if(do_after(user, 4 SECONDS))
+ if(do_after(user, 4 SECONDS * W.toolspeed))
to_chat(user, "\The [src] has been dug up, and now lies in a pile nearby.")
new /obj/item/stack/material/snow(src)
demote()
diff --git a/code/game/turfs/simulated/wall_types.dm b/code/game/turfs/simulated/wall_types.dm
index 6b793d60612..ce4451ff121 100644
--- a/code/game/turfs/simulated/wall_types.dm
+++ b/code/game/turfs/simulated/wall_types.dm
@@ -53,6 +53,12 @@
/turf/simulated/wall/sifwood/New(var/newloc)
..(newloc,"alien wood")
+/turf/simulated/wall/log/New(var/newloc)
+ ..(newloc,"log")
+
+/turf/simulated/wall/log_sif/New(var/newloc)
+ ..(newloc,"alien log")
+
// Shuttle Walls
/turf/simulated/shuttle/wall
name = "autojoin wall"
diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm
index 44a814ac679..ecd61cae71b 100644
--- a/code/modules/client/preference_setup/loadout/loadout.dm
+++ b/code/modules/client/preference_setup/loadout/loadout.dm
@@ -14,7 +14,8 @@ var/list/gear_datums = list()
//create a list of gear datums to sort
for(var/geartype in typesof(/datum/gear)-/datum/gear)
var/datum/gear/G = geartype
-
+ if(initial(G.type_category) == geartype)
+ continue
var/use_name = initial(G.display_name)
var/use_category = initial(G.sort_category)
@@ -205,6 +206,7 @@ var/list/gear_datums = list()
var/sort_category = "General"
var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned.
var/exploitable = 0 //Does it go on the exploitable information list?
+ var/type_category = null
/datum/gear/New()
..()
diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm
index bbae19a02a7..6bc944552c6 100644
--- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm
@@ -1,42 +1,28 @@
/datum/gear/accessory
- display_name = "armband, red"
- path = /obj/item/clothing/accessory/armband
+ display_name = "accessory"
slot = slot_tie
sort_category = "Accessories"
+ type_category = /datum/gear/accessory
+ path = /obj/item/clothing/accessory
+ cost = 1
-/datum/gear/accessory/cargo
- display_name = "armband, cargo"
- path = /obj/item/clothing/accessory/armband/cargo
+/datum/gear/accessory/armband
+ display_name = "armband selection"
+ path = /obj/item/clothing/accessory/armband
-/datum/gear/accessory/emt
- display_name = "armband, EMT"
- path = /obj/item/clothing/accessory/armband/medblue
+/datum/gear/accessory/armband/New()
+ ..()
+ var/list/armbands = list()
+ for(var/armband in (typesof(/obj/item/clothing/accessory/armband) - typesof(/obj/item/clothing/accessory/armband/med/color)))
+ var/obj/item/clothing/accessory/armband_type = armband
+ armbands[initial(armband_type.name)] = armband_type
+ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(armbands))
-/datum/gear/accessory/engineering
- display_name = "armband, engineering"
- path = /obj/item/clothing/accessory/armband/engine
-
-/datum/gear/accessory/hydroponics
- display_name = "armband, hydroponics"
- path = /obj/item/clothing/accessory/armband/hydro
-
-/datum/gear/accessory/medical
- display_name = "armband, medical"
- path = /obj/item/clothing/accessory/armband/med
-
-/datum/gear/accessory/medical/cross
- display_name = "armband, medic"
- path = /obj/item/clothing/accessory/armband/med/cross
-
-/datum/gear/accessory/science
- display_name = "armband, science"
- path = /obj/item/clothing/accessory/armband/science
-
-/datum/gear/accessory/colored
+/datum/gear/accessory/armband/colored
display_name = "armband"
path = /obj/item/clothing/accessory/armband/med/color
-/datum/gear/accessory/colored/New()
+/datum/gear/accessory/armband/colored/New()
..()
gear_tweaks = list(gear_tweak_free_color_choice)
@@ -74,215 +60,109 @@
..()
gear_tweaks = list(gear_tweak_free_color_choice)
-
/datum/gear/accessory/wcoat
- display_name = "waistcoat"
+ display_name = "waistcoat selection"
path = /obj/item/clothing/accessory/wcoat
cost = 1
-/datum/gear/accessory/wcoat/red
- display_name = "waistcoat, red"
- path = /obj/item/clothing/accessory/wcoat/red
-
-/datum/gear/accessory/wcoat/grey
- display_name = "waistcoat, grey"
- path = /obj/item/clothing/accessory/wcoat/grey
-
-/datum/gear/accessory/wcoat/brown
- display_name = "waistcoat, brown"
- path = /obj/item/clothing/accessory/wcoat/brown
-
-/datum/gear/accessory/swvest
- display_name = "sweatervest, black"
- path = /obj/item/clothing/accessory/wcoat/swvest
- cost = 1
-
-/datum/gear/accessory/swvest/blue
- display_name = "sweatervest, blue"
- path = /obj/item/clothing/accessory/wcoat/swvest/blue
-
-/datum/gear/accessory/swvest/red
- display_name = "sweatervest, red"
- path = /obj/item/clothing/accessory/wcoat/swvest/red
+/datum/gear/accessory/wcoat/New()
+ ..()
+ var/list/wcoats = list()
+ for(var/wcoat in typesof(/obj/item/clothing/accessory/wcoat))
+ var/obj/item/clothing/accessory/wcoat_type = wcoat
+ wcoats[initial(wcoat_type.name)] = wcoat_type
+ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(wcoats))
/datum/gear/accessory/holster
- display_name = "holster, armpit"
- path = /obj/item/clothing/accessory/holster/armpit
+ display_name = "holster selection (Security, CD, HoP)"
+ path = /obj/item/clothing/accessory/holster
allowed_roles = list("Colony Director", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective")
-/datum/gear/accessory/holster/hip
- display_name = "holster, hip"
- path = /obj/item/clothing/accessory/holster/hip
-
-/datum/gear/accessory/holster/leg
- display_name = "holster, leg"
- path = /obj/item/clothing/accessory/holster/leg
-
-/datum/gear/accessory/holster/waist
- display_name = "holster, waist"
- path = /obj/item/clothing/accessory/holster/waist
+/datum/gear/accessory/holster/New()
+ ..()
+ var/list/holsters = list()
+ for(var/holster in typesof(/obj/item/clothing/accessory/holster))
+ var/obj/item/clothing/accessory/holster_type = holster
+ holsters[initial(holster_type.name)] = holster_type
+ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(holsters))
/datum/gear/accessory/tie
- display_name = "tie, black"
- path = /obj/item/clothing/accessory/black
+ display_name = "tie selection"
+ path = /obj/item/clothing/accessory/tie
+ cost = 1
-/datum/gear/accessory/tie/blue
- display_name = "tie, blue"
- path = /obj/item/clothing/accessory/blue
-
-/datum/gear/accessory/tie/blue_clip
- display_name = "tie, blue with clip"
- path = /obj/item/clothing/accessory/blue_clip
-
-/datum/gear/accessory/tie/blue_long
- display_name = "tie, blue long"
- path = /obj/item/clothing/accessory/blue_long
-
-/datum/gear/accessory/tie/red
- display_name = "tie, red"
- path = /obj/item/clothing/accessory/red
-
-/datum/gear/accessory/tie/red_clip
- display_name = "tie, red with clip"
- path = /obj/item/clothing/accessory/red_clip
-
-/datum/gear/accessory/tie/red_long
- display_name = "tie, red long"
- path = /obj/item/clothing/accessory/red_long
-
-/datum/gear/accessory/tie/yellow
- display_name = "tie, yellow"
- path = /obj/item/clothing/accessory/yellow
-
-/datum/gear/accessory/tie/navy
- display_name = "tie, navy blue"
- path = /obj/item/clothing/accessory/navy
-
-/datum/gear/accessory/tie/white
- display_name = "tie, white"
- path = /obj/item/clothing/accessory/white
-
-/datum/gear/accessory/tie/horrible
- display_name = "tie, socially disgraceful"
- path = /obj/item/clothing/accessory/horrible
+/datum/gear/accessory/tie/New()
+ ..()
+ var/list/ties = list()
+ for(var/tie in typesof(/obj/item/clothing/accessory/tie))
+ var/obj/item/clothing/accessory/tie_type = tie
+ ties[initial(tie_type.name)] = tie_type
+ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(ties))
/datum/gear/accessory/scarf
- display_name = "scarf"
+ display_name = "scarf selection"
path = /obj/item/clothing/accessory/scarf
+ cost = 1
-/datum/gear/accessory/scarf/red
- display_name = "scarf, red"
- path = /obj/item/clothing/accessory/scarf/red
+/datum/gear/accessory/scarf/New()
+ ..()
+ var/list/scarfs = list()
+ for(var/scarf in typesof(/obj/item/clothing/accessory/scarf))
+ var/obj/item/clothing/accessory/scarf_type = scarf
+ scarfs[initial(scarf_type.name)] = scarf_type
+ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(scarfs))
-/datum/gear/accessory/scarf/green
- display_name = "scarf, green"
- path = /obj/item/clothing/accessory/scarf/green
+/datum/gear/accessory/jacket
+ display_name = "suit jacket selection"
+ path = /obj/item/clothing/accessory/jacket
+ cost = 1
-/datum/gear/accessory/scarf/darkblue
- display_name = "scarf, dark blue"
- path = /obj/item/clothing/accessory/scarf/darkblue
-
-/datum/gear/accessory/scarf/purple
- display_name = "scarf, purple"
- path = /obj/item/clothing/accessory/scarf/purple
-
-/datum/gear/accessory/scarf/yellow
- display_name = "scarf, yellow"
- path = /obj/item/clothing/accessory/scarf/yellow
-
-/datum/gear/accessory/scarf/orange
- display_name = "scarf, orange"
- path = /obj/item/clothing/accessory/scarf/orange
-
-/datum/gear/accessory/scarf/lightblue
- display_name = "scarf, light blue"
- path = /obj/item/clothing/accessory/scarf/lightblue
-
-/datum/gear/accessory/scarf/white
- display_name = "scarf, white"
- path = /obj/item/clothing/accessory/scarf/white
-
-/datum/gear/accessory/scarf/black
- display_name = "scarf, black"
- path = /obj/item/clothing/accessory/scarf/black
-
-/datum/gear/accessory/scarf/zebra
- display_name = "scarf, zebra"
- path = /obj/item/clothing/accessory/scarf/zebra
-
-/datum/gear/accessory/scarf/christmas
- display_name = "scarf, christmas"
- path = /obj/item/clothing/accessory/scarf/christmas
-
-/datum/gear/accessory/scarf/stripedred
- display_name = "scarf, striped red"
- path = /obj/item/clothing/accessory/stripedredscarf
-
-/datum/gear/accessory/scarf/stripedgreen
- display_name = "scarf, striped green"
- path = /obj/item/clothing/accessory/stripedgreenscarf
-
-/datum/gear/accessory/scarf/stripedblue
- display_name = "scarf, striped blue"
- path = /obj/item/clothing/accessory/stripedbluescarf
-
-/datum/gear/accessory/suitjacket
- display_name = "suit jacket, tan"
- path = /obj/item/clothing/accessory/tan_jacket
-
-/datum/gear/accessory/suitjacket/charcoal
- display_name = "suit jacket, charcoal"
- path = /obj/item/clothing/accessory/charcoal_jacket
-
-/datum/gear/accessory/suitjacket/navy
- display_name = "suit jacket, navy blue"
- path = /obj/item/clothing/accessory/navy_jacket
-
-/datum/gear/accessory/suitjacket/burgundy
- display_name = "suit jacket, burgundy"
- path = /obj/item/clothing/accessory/burgundy_jacket
-
-/datum/gear/accessory/suitjacket/checkered
- display_name = "suit jacket, checkered"
- path = /obj/item/clothing/accessory/checkered_jacket
+/datum/gear/accessory/jacket/New()
+ ..()
+ var/list/jackets = list()
+ for(var/jacket in typesof(/obj/item/clothing/accessory/jacket))
+ var/obj/item/clothing/accessory/jacket_type = jacket
+ jackets[initial(jacket_type.name)] = jacket_type
+ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jackets))
/datum/gear/accessory/suitvest
display_name = "suit vest"
path = /obj/item/clothing/accessory/vest
/datum/gear/accessory/brown_vest
- display_name = "webbing, engineering"
+ display_name = "webbing, brown"
path = /obj/item/clothing/accessory/storage/brown_vest
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
/datum/gear/accessory/black_vest
- display_name = "webbing, security"
+ display_name = "webbing, black"
path = /obj/item/clothing/accessory/storage/black_vest
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
/datum/gear/accessory/white_vest
- display_name = "webbing, medical"
+ display_name = "webbing, white"
path = /obj/item/clothing/accessory/storage/white_vest
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
/datum/gear/accessory/brown_drop_pouches
- display_name = "drop pouches, engineering"
+ display_name = "drop pouches, brown"
path = /obj/item/clothing/accessory/storage/brown_drop_pouches
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
/datum/gear/accessory/black_drop_pouches
- display_name = "drop pouches, security"
+ display_name = "drop pouches, black"
path = /obj/item/clothing/accessory/storage/black_drop_pouches
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
/datum/gear/accessory/white_drop_pouches
- display_name = "drop pouches, medical"
+ display_name = "drop pouches, white"
path = /obj/item/clothing/accessory/storage/white_drop_pouches
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor")
/datum/gear/accessory/fannypack
display_name = "fannypack selection"
cost = 2
+ path = /obj/item/weapon/storage/belt/fannypack
/datum/gear/accessory/fannypack/New()
..()
diff --git a/code/modules/client/preference_setup/loadout/loadout_eyes.dm b/code/modules/client/preference_setup/loadout/loadout_eyes.dm
index 57345631873..1a894704cad 100644
--- a/code/modules/client/preference_setup/loadout/loadout_eyes.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_eyes.dm
@@ -68,9 +68,9 @@
path = /obj/item/clothing/glasses/sunglasses/medhud/aviator/prescription
/datum/gear/eyes/meson
- display_name = "Optical Meson Scanners (Engineering)"
+ display_name = "Optical Meson Scanners (Engineering, Science)"
path = /obj/item/clothing/glasses/meson
- allowed_roles = list("Station Engineer","Chief Engineer","Atmospheric Technician")
+ allowed_roles = list("Station Engineer","Chief Engineer","Atmospheric Technician", "Scientist", "Research Director")
/datum/gear/eyes/meson/prescription
display_name = "Optical Meson Scanners, prescription (Engineering)"
@@ -115,4 +115,3 @@
/datum/gear/eyes/sun/prescriptionsun
display_name = "sunglasses, presciption (Security/Command)"
path = /obj/item/clothing/glasses/sunglasses/prescription
- cost = 2
diff --git a/code/modules/client/preference_setup/loadout/loadout_gloves.dm b/code/modules/client/preference_setup/loadout/loadout_gloves.dm
index 658b2c8e12e..18eb05f8829 100644
--- a/code/modules/client/preference_setup/loadout/loadout_gloves.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_gloves.dm
@@ -68,7 +68,7 @@
cost = 3
/datum/gear/gloves/forensic
- display_name = "gloves, forensic"
+ display_name = "gloves, forensic (Detective)"
path = /obj/item/clothing/gloves/forensic
allowed_roles = list("Detective")
diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm
index 16beab3c067..f7737c9dde0 100644
--- a/code/modules/client/preference_setup/loadout/loadout_head.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_head.dm
@@ -136,7 +136,6 @@
/datum/gear/head/cowboy
display_name = "cowboy, rodeo"
path = /obj/item/clothing/head/cowboy_hat
- cost = 3
/datum/gear/head/cowboy/black
display_name = "cowboy, black"
@@ -268,6 +267,11 @@
..()
gear_tweaks = list(gear_tweak_free_color_choice)
+
+/datum/gear/head/kitty
+ display_name = "kitty ears"
+ path = /obj/item/clothing/head/kitty
+
/datum/gear/head/beanie
display_name = "beanie"
path = /obj/item/clothing/head/beanie
diff --git a/code/modules/client/preference_setup/loadout/loadout_shoes.dm b/code/modules/client/preference_setup/loadout/loadout_shoes.dm
index 82540018fbb..ba2d995b279 100644
--- a/code/modules/client/preference_setup/loadout/loadout_shoes.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_shoes.dm
@@ -195,6 +195,10 @@
..()
gear_tweaks = list(gear_tweak_free_color_choice)
+/datum/gear/shoes/slippers
+ display_name = "bunny slippers"
+ path = /obj/item/clothing/shoes/slippers
+
/datum/gear/shoes/boots/winter
display_name = "winter boots"
path = /obj/item/clothing/shoes/boots/winter
@@ -227,7 +231,7 @@
/datum/gear/shoes/boots/winter/medical
display_name = "medical winter boots"
path = /obj/item/clothing/shoes/boots/winter/medical
- allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
+ allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
/datum/gear/shoes/boots/winter/mining
display_name = "mining winter boots"
diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm
index 4216ab50c6c..82631635af3 100644
--- a/code/modules/client/preference_setup/loadout/loadout_suit.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm
@@ -149,7 +149,7 @@
/datum/gear/suit/labcoat/emt
display_name = "labcoat, EMT (Medical)"
path = /obj/item/clothing/suit/storage/toggle/labcoat/emt
- allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
+ allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
/datum/gear/suit/roles/surgical_apron
display_name = "surgical apron"
@@ -182,7 +182,7 @@
/datum/gear/suit/roles/poncho/medical
display_name = "poncho, medical"
path = /obj/item/clothing/accessory/poncho/roles/medical
- allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
+ allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
/datum/gear/suit/roles/poncho/engineering
display_name = "poncho, engineering"
@@ -292,7 +292,7 @@
/datum/gear/suit/wintercoat/medical
display_name = "winter coat, medical"
path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical
- allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
+ allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
/datum/gear/suit/wintercoat/science
display_name = "winter coat, science"
@@ -445,7 +445,7 @@
/datum/gear/suit/snowsuit/medical
display_name = "snowsuit, medical"
path = /obj/item/clothing/suit/storage/snowsuit/medical
- allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
+ allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
/datum/gear/suit/snowsuit/science
display_name = "snowsuit, science"
diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm
index 9edc5e81a1d..836146d11ff 100644
--- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm
@@ -243,7 +243,6 @@
/datum/gear/uniform/scrub
display_name = "scrubs selection"
path = /obj/item/clothing/under/rank/medical/scrubs
- allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Roboticist")
/datum/gear/uniform/scrub/New()
..()
@@ -455,3 +454,7 @@
/datum/gear/uniform/red_swept_dress
display_name = "red swept dress"
path = /obj/item/clothing/under/dress/red_swept_dress
+
+/datum/gear/uniform/bathrobe
+ display_name = "bathrobe"
+ path = /obj/item/clothing/under/bathrobe
\ No newline at end of file
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 3298541540c..602b8542879 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -594,6 +594,12 @@ obj/item/clothing/suit/storage/toggle/peacoat
icon_state = "smw_hoodie"
item_state_slots = list(slot_r_hand_str = "suit_black", slot_l_hand_str = "suit_black")
+/obj/item/clothing/suit/storage/toggle/hoodie/nrti
+ name = "New Reykjavik Technical Institute hoodie"
+ desc = "A warm, gray sweatshirt. It bears the letters NRT on the back, in reference to Sif's premiere technical institute."
+ icon_state = "nrti_hoodie"
+ item_state_slots = list(slot_r_hand_str = "suit_grey", slot_l_hand_str = "suit_grey")
+
/obj/item/clothing/suit/whitedress
name = "white dress"
desc = "A fancy dress."
diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm
index ee6eba13d67..4392a264927 100644
--- a/code/modules/clothing/under/accessories/accessory.dm
+++ b/code/modules/clothing/under/accessories/accessory.dm
@@ -80,51 +80,51 @@
return //we aren't an object on the ground so don't call parent
..()
-/obj/item/clothing/accessory/blue
+/obj/item/clothing/accessory/tie
name = "blue tie"
icon_state = "bluetie"
-/obj/item/clothing/accessory/red
+/obj/item/clothing/accessory/tie/red
name = "red tie"
icon_state = "redtie"
-/obj/item/clothing/accessory/blue_clip
+/obj/item/clothing/accessory/tie/blue_clip
name = "blue tie with a clip"
icon_state = "bluecliptie"
-/obj/item/clothing/accessory/blue_long
+/obj/item/clothing/accessory/tie/blue_long
name = "blue long tie"
icon_state = "bluelongtie"
-/obj/item/clothing/accessory/red_clip
+/obj/item/clothing/accessory/tie/red_clip
name = "red tie with a clip"
icon_state = "redcliptie"
-/obj/item/clothing/accessory/red_long
+/obj/item/clothing/accessory/tie/red_long
name = "red long tie"
icon_state = "redlongtie"
-/obj/item/clothing/accessory/black
+/obj/item/clothing/accessory/tie/black
name = "black tie"
icon_state = "blacktie"
-/obj/item/clothing/accessory/darkgreen
+/obj/item/clothing/accessory/tie/darkgreen
name = "dark green tie"
icon_state = "dgreentie"
-/obj/item/clothing/accessory/yellow
+/obj/item/clothing/accessory/tie/yellow
name = "yellow tie"
icon_state = "yellowtie"
-/obj/item/clothing/accessory/navy
+/obj/item/clothing/accessory/tie/navy
name = "navy tie"
icon_state = "navytie"
-/obj/item/clothing/accessory/white
+/obj/item/clothing/accessory/tie/white
name = "white tie"
icon_state = "whitetie"
-/obj/item/clothing/accessory/horrible
+/obj/item/clothing/accessory/tie/horrible
name = "horrible tie"
desc = "A neosilk clip-on tie. This one is disgusting."
icon_state = "horribletie"
@@ -237,17 +237,14 @@
//Scarves
/obj/item/clothing/accessory/scarf
- name = "scarf"
+ name = "green scarf"
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
+ icon_state = "greenscarf"
/obj/item/clothing/accessory/scarf/red
name = "red scarf"
icon_state = "redscarf"
-/obj/item/clothing/accessory/scarf/green
- name = "green scarf"
- icon_state = "greenscarf"
-
/obj/item/clothing/accessory/scarf/darkblue
name = "dark blue scarf"
icon_state = "darkbluescarf"
@@ -284,14 +281,14 @@
name = "christmas scarf"
icon_state = "christmasscarf"
-/obj/item/clothing/accessory/stripedredscarf
+/obj/item/clothing/accessory/scarf/stripedred
name = "striped red scarf"
icon_state = "stripedredscarf"
-/obj/item/clothing/accessory/stripedgreenscarf
+/obj/item/clothing/accessory/scarf/stripedgreen
name = "striped green scarf"
icon_state = "stripedgreenscarf"
-/obj/item/clothing/accessory/stripedbluescarf
+/obj/item/clothing/accessory/scarf/stripedblue
name = "striped blue scarf"
icon_state = "stripedbluescarf"
diff --git a/code/modules/clothing/under/accessories/clothing.dm b/code/modules/clothing/under/accessories/clothing.dm
index 363476eb2bd..3f117d6adec 100644
--- a/code/modules/clothing/under/accessories/clothing.dm
+++ b/code/modules/clothing/under/accessories/clothing.dm
@@ -3,27 +3,27 @@
desc = "Slick black suit vest."
icon_state = "det_vest"
-/obj/item/clothing/accessory/tan_jacket
+/obj/item/clothing/accessory/jacket/
name = "tan suit jacket"
desc = "Cozy suit jacket."
icon_state = "tan_jacket"
-/obj/item/clothing/accessory/charcoal_jacket
+/obj/item/clothing/accessory/jacket/charcoal
name = "charcoal suit jacket"
desc = "Strict suit jacket."
icon_state = "charcoal_jacket"
-/obj/item/clothing/accessory/navy_jacket
+/obj/item/clothing/accessory/jacket/navy
name = "navy suit jacket"
desc = "Official suit jacket."
icon_state = "navy_jacket"
-/obj/item/clothing/accessory/burgundy_jacket
+/obj/item/clothing/accessory/jacket/burgundy
name = "burgundy suit jacket"
desc = "Expensive suit jacket."
icon_state = "burgundy_jacket"
-/obj/item/clothing/accessory/checkered_jacket
+/obj/item/clothing/accessory/jacket/checkered
name = "checkered suit jacket"
desc = "Lucky suit jacket."
icon_state = "checkered_jacket"
diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm
index 87e6fa5bf97..a9757e30262 100644
--- a/code/modules/clothing/under/jobs/civilian.dm
+++ b/code/modules/clothing/under/jobs/civilian.dm
@@ -101,7 +101,7 @@
icon_state = "internalaffairs"
item_state_slots = list(slot_r_hand_str = "ba_suit", slot_l_hand_str = "ba_suit")
rolled_sleeves = 0
- starting_accessories = list(/obj/item/clothing/accessory/black)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/black)
/obj/item/clothing/under/rank/internalaffairs/skirt
desc = "The plain, professional attire of an Internal Affairs Agent. The top button is sewn shut."
@@ -156,7 +156,7 @@
desc = "A classy suit."
icon_state = "bluesuit"
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
- starting_accessories = list(/obj/item/clothing/accessory/red)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/red)
/obj/item/clothing/under/lawyer/bluesuit/skirt
name = "blue skirt suit"
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
index 02dde0f8151..9680de48841 100644
--- a/code/modules/clothing/under/jobs/security.dm
+++ b/code/modules/clothing/under/jobs/security.dm
@@ -73,7 +73,7 @@
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0.9
rolled_sleeves = 0
- starting_accessories = list(/obj/item/clothing/accessory/blue_clip)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/blue_clip)
/*
/obj/item/clothing/under/det/verb/rollup()
@@ -89,13 +89,13 @@
/obj/item/clothing/under/det/grey
icon_state = "detective2"
desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks."
- starting_accessories = list(/obj/item/clothing/accessory/red_long)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/red_long)
/obj/item/clothing/under/det/black
icon_state = "detective3"
item_state_slots = list(slot_r_hand_str = "sl_suit", slot_l_hand_str = "sl_suit")
desc = "An immaculate white dress shirt, paired with a pair of dark grey dress pants, a red tie, and a charcoal vest."
- starting_accessories = list(/obj/item/clothing/accessory/red_long, /obj/item/clothing/accessory/vest)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/vest)
/obj/item/clothing/under/det/corporate
name = "detective's jumpsuit"
@@ -106,12 +106,12 @@
/obj/item/clothing/under/det/waistcoat
icon_state = "detective"
desc = "A rumpled white dress shirt paired with well-worn grey slacks, complete with a blue striped tie, faux-gold tie clip, and waistcoat."
- starting_accessories = list(/obj/item/clothing/accessory/blue_clip, /obj/item/clothing/accessory/wcoat)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/blue_clip, /obj/item/clothing/accessory/wcoat)
/obj/item/clothing/under/det/grey/waistcoat
icon_state = "detective2"
desc = "A serious-looking tan dress shirt paired with freshly-pressed black slacks, complete with a red striped tie and waistcoat."
- starting_accessories = list(/obj/item/clothing/accessory/red_long, /obj/item/clothing/accessory/wcoat)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/red_long, /obj/item/clothing/accessory/wcoat)
/obj/item/clothing/under/det/skirt
name = "detective's skirt"
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 7f9586b6a0d..f9a0a9ab379 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -101,7 +101,7 @@
icon_state = "greensuit"
item_state_slots = list(slot_r_hand_str = "centcom", slot_l_hand_str = "centcom")
rolled_sleeves = 0
- starting_accessories = list(/obj/item/clothing/accessory/darkgreen)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/darkgreen)
/obj/item/clothing/under/gov/skirt
name = "Green formal skirt uniform"
@@ -161,7 +161,7 @@
icon_state = "gentlesuit"
item_state_slots = list(slot_r_hand_str = "grey", slot_l_hand_str = "grey")
rolled_sleeves = 0
- starting_accessories = list(/obj/item/clothing/accessory/white, /obj/item/clothing/accessory/wcoat/gentleman)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/white, /obj/item/clothing/accessory/wcoat/gentleman)
/obj/item/clothing/under/gentlesuit/skirt
name = "lady's suit"
@@ -472,7 +472,7 @@
desc = "A charcoal suit and red tie. Very professional."
icon_state = "charcoal_suit"
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
- starting_accessories = list(/obj/item/clothing/accessory/navy, /obj/item/clothing/accessory/charcoal_jacket)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/navy, /obj/item/clothing/accessory/jacket/charcoal)
/obj/item/clothing/under/suit_jacket/charcoal/skirt
name = "charcoal skirt"
@@ -483,7 +483,7 @@
desc = "A navy suit and red tie, intended for the station's finest."
icon_state = "navy_suit"
item_state_slots = list(slot_r_hand_str = "lawyer_blue", slot_l_hand_str = "lawyer_blue")
- starting_accessories = list(/obj/item/clothing/accessory/red, /obj/item/clothing/accessory/navy_jacket)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/red, /obj/item/clothing/accessory/jacket/navy)
/obj/item/clothing/under/suit_jacket/navy/skirt
name = "navy skirt"
@@ -494,7 +494,7 @@
desc = "A burgundy suit and black tie. Somewhat formal."
icon_state = "burgundy_suit"
item_state_slots = list(slot_r_hand_str = "lawyer_red", slot_l_hand_str = "lawyer_red")
- starting_accessories = list(/obj/item/clothing/accessory/black, /obj/item/clothing/accessory/burgundy_jacket)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/black, /obj/item/clothing/accessory/jacket/burgundy)
/obj/item/clothing/under/suit_jacket/burgundy/skirt
name = "burgundy skirt"
@@ -505,7 +505,7 @@
desc = "That's a very nice suit you have there. Shame if something were to happen to it, eh?"
icon_state = "checkered_suit"
item_state_slots = list(slot_r_hand_str = "lawyer_black", slot_l_hand_str = "lawyer_black")
- starting_accessories = list(/obj/item/clothing/accessory/black, /obj/item/clothing/accessory/checkered_jacket)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/black, /obj/item/clothing/accessory/jacket/checkered)
/obj/item/clothing/under/suit_jacket/checkered/skirt
name = "checkered skirt"
@@ -516,7 +516,7 @@
desc = "A tan suit. Smart, but casual."
icon_state = "tan_suit"
item_state_slots = list(slot_r_hand_str = "tan_suit", slot_l_hand_str = "tan_suit")
- starting_accessories = list(/obj/item/clothing/accessory/yellow, /obj/item/clothing/accessory/tan_jacket)
+ starting_accessories = list(/obj/item/clothing/accessory/tie/yellow, /obj/item/clothing/accessory/jacket)
/obj/item/clothing/under/suit_jacket/tan/skirt
name = "tan skirt"
diff --git a/code/modules/examine/stat_icons.dm b/code/modules/examine/stat_icons.dm
index b2ed64032a2..1ece266f0c8 100644
--- a/code/modules/examine/stat_icons.dm
+++ b/code/modules/examine/stat_icons.dm
@@ -29,4 +29,6 @@ var/global/list/description_icons = list(
"power cell" = image(icon='icons/obj/power.dmi',icon_state="hcell"),
"device cell" = image(icon='icons/obj/power.dmi',icon_state="dcell"),
"weapon cell" = image(icon='icons/obj/power.dmi',icon_state="wcell"),
+
+ "hatchet" = image(icon='icons/obj/weapons.dmi',icon_state="hatchet"),
)
diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm
index ccda4fc9f64..c0c1eecd9e7 100644
--- a/code/modules/materials/material_recipes.dm
+++ b/code/modules/materials/material_recipes.dm
@@ -139,6 +139,9 @@
recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0)
recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5)
+/material/wood/log/generate_recipes()
+ return // Feel free to add log-only recipes here later if desired.
+
/material/cardboard/generate_recipes()
..()
recipes += new/datum/stack_recipe("box", /obj/item/weapon/storage/box)
diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm
index 7ba518f6ef3..f66d2425c6a 100644
--- a/code/modules/materials/material_sheets.dm
+++ b/code/modules/materials/material_sheets.dm
@@ -203,6 +203,35 @@
icon_state = "sheet-wood"
default_type = "wood"
+/obj/item/stack/material/log
+ name = "log"
+ icon_state = "sheet-log"
+ default_type = "log"
+ no_variants = FALSE
+ color = "#824B28"
+ max_amount = 25
+ w_class = ITEMSIZE_HUGE
+
+/obj/item/stack/material/log/sif
+ name = "alien log"
+ color = "#0099cc"
+
+/obj/item/stack/material/log/attackby(var/obj/item/W, var/mob/user)
+ if(!istype(W))
+ return ..()
+ if(W.sharp && W.edge && use(1))
+ to_chat(user, "You cut up a log into planks.")
+ playsound(get_turf(src), 'sound/effects/woodcutting.ogg', 50, 1)
+ var/obj/item/stack/material/wood/existing_wood = locate() in user.loc
+ var/obj/item/stack/material/wood/new_wood = new(user.loc)
+ new_wood.amount = 2
+ if(existing_wood)
+ if(new_wood.transfer_to(existing_wood))
+ to_chat(user, "You add the newly-formed wood to the stack. It now contains [existing_wood.amount] planks.")
+ else
+ return ..()
+
+
/obj/item/stack/material/cloth
name = "cloth"
icon_state = "sheet-cloth"
diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm
index 2daa7501c08..0db3a1016ec 100644
--- a/code/modules/materials/materials.dm
+++ b/code/modules/materials/materials.dm
@@ -680,6 +680,18 @@ var/list/name_to_material
sheet_singular_name = "plank"
sheet_plural_name = "planks"
+/material/wood/log
+ name = "log"
+ icon_base = "log"
+ stack_type = /obj/item/stack/material/log
+ sheet_singular_name = "log"
+ sheet_plural_name = "logs"
+
+/material/wood/log/sif
+ name = "alien log"
+ icon_colour = "#0099cc" // Cyan-ish
+ stack_origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 2)
+
/material/wood/holographic
name = "holowood"
display_name = "wood"
diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm
index a017476af32..8fcba9aee3b 100644
--- a/code/modules/mining/abandonedcrates.dm
+++ b/code/modules/mining/abandonedcrates.dm
@@ -54,7 +54,7 @@
if(46 to 50)
new/obj/item/clothing/under/chameleon(src)
for(var/i = 0, i < 7, i++)
- new/obj/item/clothing/accessory/horrible(src)
+ new/obj/item/clothing/accessory/tie/horrible(src)
if(51 to 52) // Uncommon, 2% each
new/obj/item/weapon/melee/classic_baton(src)
if(53 to 54)
diff --git a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm
index 469f32135f2..97afe227c48 100644
--- a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm
+++ b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm
@@ -25,9 +25,9 @@
thing.reagents.remove_reagent(R.id, R.volume)
user.put_in_hands(F)
- else if(istype(thing, /obj/machinery/power/supermatter/shard))
+ else if(istype(thing, /obj/machinery/power/supermatter))
var/obj/item/weapon/fuel_assembly/F = new(get_turf(src), "supermatter")
- visible_message("\The [src] compresses the \[thing] into a new fuel assembly.")
+ visible_message("\The [src] compresses \the [thing] into a new fuel assembly.")
qdel(thing)
user.put_in_hands(F)
return 1
diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm
index 130f4410df2..ae45454a427 100644
--- a/code/modules/projectiles/guns/magnetic/magnetic.dm
+++ b/code/modules/projectiles/guns/magnetic/magnetic.dm
@@ -4,7 +4,7 @@
icon_state = "coilgun"
item_state = "coilgun"
icon = 'icons/obj/railgun.dmi'
-// one_hand_penalty = 1
+// one_handed_penalty = 1
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_ILLEGAL = 2, TECH_MAGNET = 4)
w_class = ITEMSIZE_LARGE
@@ -193,3 +193,66 @@
qdel(src)
return new projectile_type(src)
+
+/obj/item/weapon/gun/magnetic/fuelrod
+ name = "Fuel-Rod Cannon"
+ desc = "A bulky weapon designed to fire reactor core fuel rods at absurd velocities... who thought this was a good idea?!"
+ description_antag = "This device is capable of firing reactor fuel assemblies, acquired from a R-UST fuel compressor and an appropriate fueltype. Be warned, Supermatter rods may have unforseen consequences."
+ description_fluff = "Morpheus' second entry into the arms manufacturing field, the Morpheus B.F.G, or 'Big Fuel-rod Gun' made some noise when it was initially sent to the market. By noise, they mean it was rapidly declared 'incredibly dangerous to the wielder and civilians within a mile radius alike'."
+ icon_state = "fuelrodgun"
+ item_state = "coilgun"
+ icon = 'icons/obj/railgun.dmi'
+ origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_PHORON = 4, TECH_ILLEGAL = 5, TECH_MAGNET = 4)
+ w_class = ITEMSIZE_LARGE
+
+ removable_components = TRUE
+ gun_unreliable = 0
+
+ load_type = /obj/item/weapon/fuel_assembly
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod
+
+ power_cost = 500
+
+/obj/item/weapon/gun/magnetic/fuelrod/consume_next_projectile()
+ if(!check_ammo() || !capacitor || capacitor.charge < power_cost)
+ return
+
+ if(loaded) //Safety.
+ if(istype(loaded, /obj/item/weapon/fuel_assembly))
+ var/obj/item/weapon/fuel_assembly/rod = loaded
+ if(rod.fuel_type == "composite" || rod.fuel_type == "deuterium") //Safety check for rods spawned in without a fueltype.
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod
+ else if(rod.fuel_type == "tritium")
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod/tritium
+ else if(rod.fuel_type == "phoron")
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod/phoron
+ else if(rod.fuel_type == "supermatter")
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod/supermatter
+ visible_message("The barrel of \the [src] glows a blinding white!")
+ spawn(5)
+ visible_message("\The [src] begins to rattle, its acceleration chamber collapsing in on itself!")
+ removable_components = FALSE
+ spawn(15)
+ audible_message("\The [src]'s power supply begins to overload as the device crumples!") //Why are you still holding this?
+ playsound(loc, 'sound/effects/grillehit.ogg', 10, 1)
+ var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
+ var/turf/T = get_turf(src)
+ sparks.set_up(2, 1, T)
+ sparks.start()
+ spawn(15)
+ visible_message("\The [src] explodes in a blinding white light!")
+ explosion(src.loc, -1, 1, 2, 3)
+ qdel(src)
+ else
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod
+
+ use_ammo()
+ capacitor.use(power_cost)
+ update_icon()
+
+ return new projectile_type(src)
+
+/obj/item/weapon/gun/magnetic/fuelrod/New()
+ cell = new /obj/item/weapon/cell/high
+ capacitor = new /obj/item/weapon/stock_parts/capacitor
+ . = ..()
diff --git a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm
index d731512bfaf..fe9aa576ef4 100644
--- a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm
+++ b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm
@@ -67,9 +67,9 @@
w_class = ITEMSIZE_NO_CONTAINER
firemodes = list(
- list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_hand_penalty=1, burst_accuracy=null, dispersion=null),
- list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_hand_penalty=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
- list(mode_name="long bursts", burst=6, fire_delay=null, move_delay=10, one_hand_penalty=2, burst_accuracy=list(0,-1,-1,-1,-2), dispersion=list(0.6, 0.6, 1.0, 1.0, 1.2)),
+ list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_handed_penalty=1, burst_accuracy=null, dispersion=null),
+ list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_handed_penalty=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
+ list(mode_name="long bursts", burst=6, fire_delay=null, move_delay=10, one_handed_penalty=2, burst_accuracy=list(0,-1,-1,-1,-2), dispersion=list(0.6, 0.6, 1.0, 1.0, 1.2)),
)
/obj/item/weapon/gun/magnetic/railgun/automatic/examine(var/mob/user)
@@ -94,8 +94,8 @@
fire_sound = 'sound/weapons/rapidslice.ogg'
firemodes = list(
- list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_hand_penalty=1, burst_accuracy=null, dispersion=null),
- list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_hand_penalty=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
+ list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_handed_penalty=1, burst_accuracy=null, dispersion=null),
+ list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_handed_penalty=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
)
/obj/item/weapon/gun/magnetic/railgun/flechette/out_of_ammo()
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 5e599230cfe..a08db6cd9d2 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -333,8 +333,8 @@
else if(!bumped)
tracer_effect(effect_transform)
- if(incendiary >= 2)
- var/trail_volume = (flammability * 0.10)
+ if(incendiary >= 2 && !istype(src.loc, /turf/simulated/wall))
+ var/trail_volume = (flammability * 0.20)
new /obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(src.loc, trail_volume, src.dir)
if(!hitscan)
diff --git a/code/modules/projectiles/projectile/magnetic.dm b/code/modules/projectiles/projectile/magnetic.dm
index 35f98833ef4..b4a60a55d7c 100644
--- a/code/modules/projectiles/projectile/magnetic.dm
+++ b/code/modules/projectiles/projectile/magnetic.dm
@@ -18,4 +18,100 @@
name = "flechette"
icon_state = "flechette"
damage = 20
- armor_penetration = 100
\ No newline at end of file
+ armor_penetration = 100
+
+/obj/item/projectile/bullet/magnetic/fuelrod
+ name = "fuel rod"
+ icon_state = "fuel-deuterium"
+ damage = 30
+ stun = 1
+ weaken = 0
+ agony = 30
+ incendiary = 1
+ flammability = 0 //Deuterium and Tritium are both held in water, but the object moving so quickly will ignite the target.
+ penetrating = 2
+ embed_chance = 0
+ armor_penetration = 40
+ kill_count = 20
+
+ var/searing = 0 //Does this fuelrod ignore shields?
+ var/detonate_travel = 0 //Will this fuelrod explode when it reaches maximum distance?
+ var/detonate_mob = 0 //Will this fuelrod explode when it hits a mob?
+ var/energetic_impact = 0 //Does this fuelrod cause a bright flash on impact with a mob?
+
+/obj/item/projectile/bullet/magnetic/fuelrod/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null) //Future-proofing. Special effects for impact.
+ if(istype(target,/mob/living))
+ var/mob/living/V = target
+ if(detonate_mob)
+ if(V.loc)
+ explosion(V.loc, -1, -1, 2, 3)
+
+ if(energetic_impact)
+ var/eye_coverage = 0
+ for(var/mob/living/carbon/M in viewers(world.view, location))
+ eye_coverage = 0
+ if(iscarbon(M))
+ eye_coverage = M.eyecheck()
+ if(eye_coverage < 2)
+ M.flash_eyes()
+ M.Stun(2)
+ M.Weaken(10)
+
+ if(searing)
+ if(blocked)
+ blocked = 0
+
+ return ..(target, blocked, def_zone)
+
+/obj/item/projectile/bullet/magnetic/fuelrod/on_impact(var/atom/A) //Future-proofing, again. In the event new fuel rods are introduced, and have special effects for when they stop flying.
+ if(src.loc)
+ if(detonate_travel && detonate_mob)
+ visible_message("\The [src] shatters in a violent explosion!")
+ explosion(src.loc, 1, 1, 3, 4)
+ else if(detonate_travel)
+ visible_message("\The [src] explodes in a shower of embers!")
+ explosion(src.loc, -1, 1, 2, 3)
+ ..(A)
+
+/obj/item/projectile/bullet/magnetic/fuelrod/tritium
+ icon_state = "fuel-tritium"
+ damage = 40
+ flammability = -1
+ armor_penetration = 50
+ penetrating = 3
+
+/obj/item/projectile/bullet/magnetic/fuelrod/phoron
+ name = "blazing fuel rod"
+ icon_state = "fuel-phoron"
+ damage = 35
+ incendiary = 2
+ flammability = 2
+ armor_penetration = 60
+ penetrating = 5
+ irradiate = 20
+ detonate_mob = 1
+
+/obj/item/projectile/bullet/magnetic/fuelrod/supermatter
+ name = "painfully incandescent fuel rod"
+ icon_state = "fuel-supermatter"
+ damage = 15
+ incendiary = 2
+ flammability = 4
+ weaken = 2
+ armor_penetration = 100
+ penetrating = 100 //Theoretically, this shouldn't stop flying for a while, unless someone lines it up with a wall or fires it into a mountain.
+ irradiate = 120
+ kill_count = 75
+ searing = 1
+ detonate_travel = 1
+ detonate_mob = 1
+ energetic_impact = 1
+
+/obj/item/projectile/bullet/magnetic/fuelrod/supermatter/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null) //You cannot touch the supermatter without disentigrating. Assumedly, this is true for condensed rods of it flying at relativistic speeds.
+ if(istype(target,/turf/simulated/wall) || istype(target,/mob/living))
+ target.visible_message("The [src] burns a perfect hole through \the [target] with a blinding flash!")
+ playsound(target.loc, 'sound/effects/teleport.ogg', 40, 0)
+ return ..(target, blocked, def_zone)
+
+/obj/item/projectile/bullet/magnetic/fuelrod/supermatter/check_penetrate()
+ return 1
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
index 6fb44ad8145..99972f4708a 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
@@ -96,7 +96,6 @@
reagent_state = LIQUID
color = "#0064C877"
metabolism = REM * 10
- mrate_static = TRUE
glass_name = "water"
glass_desc = "The father of all refreshments."
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
index d0be0469c10..51ba5d3782d 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
@@ -16,7 +16,6 @@
reagent_state = SOLID
color = "#1C1300"
ingest_met = REM * 5
- mrate_static = TRUE
/datum/reagent/carbon/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
@@ -74,8 +73,6 @@
var/targ_temp = 310
var/halluci = 0
- mrate_static = TRUE
-
glass_name = "ethanol"
glass_desc = "A well-known alcohol with a variety of applications."
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
index 3f660ca1643..8d49b4cb4a2 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
@@ -7,7 +7,6 @@
taste_mult = 4
reagent_state = SOLID
metabolism = REM * 4
- mrate_static = TRUE
var/nutriment_factor = 30 // Per unit
var/injectable = 0
color = "#664330"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index fcb132642d7..8d09b903b6b 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -9,7 +9,6 @@
color = "#00BFFF"
overdose = REAGENTS_OVERDOSE * 2
metabolism = REM * 0.5
- mrate_static = TRUE
scannable = 1
/datum/reagent/inaprovaline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -141,7 +140,6 @@
taste_description = "bitterness"
reagent_state = LIQUID
color = "#0040FF"
- mrate_static = TRUE //Until it's not crazy strong, at least
overdose = REAGENTS_OVERDOSE * 0.5
scannable = 1
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index c34f8d94549..708cc4e0810 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -639,6 +639,13 @@ other types of metals and chemistry for reagents).
build_path = /obj/item/ammo_casing/chemdart
sort_string = "TACAF"
+/datum/design/item/weapon/fuelrod
+ id = "fuelrod_gun"
+ req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_PHORON = 4, TECH_ILLEGAL = 5, TECH_MAGNET = 5)
+ materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 2000, "gold" = 500, "silver" = 500, "uranium" = 1000, "phoron" = 3000, "diamond" = 1000)
+ build_path = /obj/item/weapon/gun/magnetic/fuelrod
+ sort_string = "TACBA"
+
/datum/design/item/weapon/flora_gun
id = "flora_gun"
req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_POWER = 3)
diff --git a/code/modules/xenoarcheaology/finds/misc.dm b/code/modules/xenoarcheaology/finds/misc.dm
index 4037de5176a..2729872876e 100644
--- a/code/modules/xenoarcheaology/finds/misc.dm
+++ b/code/modules/xenoarcheaology/finds/misc.dm
@@ -6,10 +6,15 @@
name = "Crystal"
icon = 'icons/obj/mining.dmi'
icon_state = "crystal"
+ density = TRUE
+ anchored = TRUE
/obj/machinery/crystal/New()
if(prob(50))
icon_state = "crystal2"
+ set_light(3, 3, "#CC00CC")
+ else
+ set_light(3, 3, "#33CC33")
//large finds
/*
diff --git a/code/stylesheet.dm b/code/stylesheet.dm
index b376f13aebc..5b3cb80b151 100644
--- a/code/stylesheet.dm
+++ b/code/stylesheet.dm
@@ -73,6 +73,7 @@ h1.alert, h2.alert {color: #000000;}
.disarm {color: #990000;}
.passive {color: #660000;}
+.critical {color: #ff0000; font-weight: bold; font-size: 150%;}
.danger {color: #ff0000; font-weight: bold;}
.warning {color: #ff0000; font-style: italic;}
.rose {color: #ff5050;}
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index d259faec57e..c4a79cf9248 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index f16399d6db0..382f19e8e11 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/flora/deadtrees.dmi b/icons/obj/flora/deadtrees.dmi
index 2ae1a5a6e07..7a0b164619c 100644
Binary files a/icons/obj/flora/deadtrees.dmi and b/icons/obj/flora/deadtrees.dmi differ
diff --git a/icons/obj/flora/jungleflora.dmi b/icons/obj/flora/jungleflora.dmi
new file mode 100644
index 00000000000..9a266e9226e
Binary files /dev/null and b/icons/obj/flora/jungleflora.dmi differ
diff --git a/icons/obj/flora/jungletree.dmi b/icons/obj/flora/jungletree.dmi
new file mode 100644
index 00000000000..51f31413995
Binary files /dev/null and b/icons/obj/flora/jungletree.dmi differ
diff --git a/icons/obj/flora/jungletreesmall.dmi b/icons/obj/flora/jungletreesmall.dmi
new file mode 100644
index 00000000000..3abd375cc91
Binary files /dev/null and b/icons/obj/flora/jungletreesmall.dmi differ
diff --git a/icons/obj/flora/largejungleflora.dmi b/icons/obj/flora/largejungleflora.dmi
new file mode 100644
index 00000000000..bba0fd29f62
Binary files /dev/null and b/icons/obj/flora/largejungleflora.dmi differ
diff --git a/icons/obj/flora/palmtrees.dmi b/icons/obj/flora/palmtrees.dmi
new file mode 100644
index 00000000000..b8708b36d2a
Binary files /dev/null and b/icons/obj/flora/palmtrees.dmi differ
diff --git a/icons/obj/flora/pinetrees.dmi b/icons/obj/flora/pinetrees.dmi
index 9ee04a5baf5..63073046f01 100644
Binary files a/icons/obj/flora/pinetrees.dmi and b/icons/obj/flora/pinetrees.dmi differ
diff --git a/icons/obj/flora/rocks.dmi b/icons/obj/flora/rocks.dmi
index a1f6a0df0a9..0974360e27b 100644
Binary files a/icons/obj/flora/rocks.dmi and b/icons/obj/flora/rocks.dmi differ
diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi
index 67d26ed18b7..90d6dcd1ea9 100644
Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ
diff --git a/icons/obj/railgun.dmi b/icons/obj/railgun.dmi
index 0b00e7a1560..404aa1ea608 100644
Binary files a/icons/obj/railgun.dmi and b/icons/obj/railgun.dmi differ
diff --git a/icons/obj/stacks.dmi b/icons/obj/stacks.dmi
index 1713cacb671..5cdff4a1f33 100644
Binary files a/icons/obj/stacks.dmi and b/icons/obj/stacks.dmi differ
diff --git a/icons/turf/outdoors.dmi b/icons/turf/outdoors.dmi
index bcd81c28c9a..31fab0ec95c 100644
Binary files a/icons/turf/outdoors.dmi and b/icons/turf/outdoors.dmi differ
diff --git a/icons/turf/outdoors_edge.dmi b/icons/turf/outdoors_edge.dmi
index 02a52195c2b..fb0b04168e4 100644
Binary files a/icons/turf/outdoors_edge.dmi and b/icons/turf/outdoors_edge.dmi differ
diff --git a/icons/turf/wall_masks.dmi b/icons/turf/wall_masks.dmi
index 220e1b87e5d..d67671c4d63 100644
Binary files a/icons/turf/wall_masks.dmi and b/icons/turf/wall_masks.dmi differ
diff --git a/maps/northern_star/polaris-2.dmm b/maps/northern_star/polaris-2.dmm
index ee935ce4b09..e2a422d04c8 100644
--- a/maps/northern_star/polaris-2.dmm
+++ b/maps/northern_star/polaris-2.dmm
@@ -988,7 +988,7 @@
"sZ" = (/obj/structure/table/rack,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"ta" = (/obj/structure/table/rack,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"tb" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"tc" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"tc" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"td" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"te" = (/obj/machinery/vending/boozeomat,/turf/simulated/shuttle/wall/dark,/area/shuttle/administration/centcom)
"tf" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
diff --git a/polaris.dme b/polaris.dme
index 65d29518bbd..ba8a57fde24 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -1045,6 +1045,8 @@
#include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\security.dm"
+#include "code\game\objects\structures\flora\grass.dm"
+#include "code\game\objects\structures\flora\trees.dm"
#include "code\game\objects\structures\ghost_pods\ghost_pods.dm"
#include "code\game\objects\structures\ghost_pods\silicon.dm"
#include "code\game\objects\structures\stool_bed_chair_nest\alien_nests.dm"