My job is to follow my captain's orders, maintain the ship, and keep the engine running. If you are not familiar with how the supermatter engine functions: do not attempt to start it.
\
-
\
- The armory is not a candy store, and my role is not to assault the station directly, leave that work to the assault operatives."
- outfit = /datum/outfit/syndicate_empty/SBC
-
-/datum/outfit/syndicate_empty/SBC
- name = "Syndicate Battlecruiser Ship Operative"
- l_pocket = /obj/item/gun/ballistic/automatic/pistol
- r_pocket = /obj/item/kitchen/knife/combat/survival
- belt = /obj/item/storage/belt/military/assault
-
-/obj/effect/mob_spawn/human/syndicate/battlecruiser/assault
- name = "Syndicate Battlecruiser Assault Operative"
- flavour_text = "I are an assault operative aboard the syndicate flagship: the SBC Starfury. My job is to follow my captain's orders, keep intruders out of the ship, and assault Space Station 13. There is an armory, multiple assault ships, and beam cannons to attack the station with.
\
-
\
- Work as a team with my fellow operatives and work out a plan of attack. If you are overwhelmed, escape back to my ship!"
- outfit = /datum/outfit/syndicate_empty/SBC/assault
-
-/datum/outfit/syndicate_empty/SBC/assault
- name = "Syndicate Battlecruiser Assault Operative"
- uniform = /obj/item/clothing/under/syndicate/combat
- l_pocket = /obj/item/ammo_box/magazine/m10mm
- r_pocket = /obj/item/kitchen/knife/combat/survival
- belt = /obj/item/storage/belt/military
- suit = /obj/item/clothing/suit/armor/vest
- suit_store = /obj/item/gun/ballistic/automatic/pistol
- back = /obj/item/storage/backpack/security
- mask = /obj/item/clothing/mask/gas/syndicate
-
-/obj/effect/mob_spawn/human/syndicate/battlecruiser/captain
- name = "Syndicate Battlecruiser Captain"
- flavour_text = "I are the captain aboard the syndicate flagship: the SBC Starfury. My job is to oversee my crew, defend the ship, and destroy Space Station 13. The ship has an armory, multiple ships, beam cannons, and multiple crewmembers to accomplish this goal.
\
-
\
- As the captain, this whole operation falls on my shoulders. You do not need to nuke the station, causing sufficient damage and preventing my ship from being destroyed will be enough."
- outfit = /datum/outfit/syndicate_empty/SBC/assault/captain
- id_access_list = list(150,151)
-
-/datum/outfit/syndicate_empty/SBC/assault/captain
- name = "Syndicate Battlecruiser Captain"
- r_pocket = /obj/item/melee/classic_baton/telescopic
- suit = /obj/item/clothing/suit/armor/vest/capcarapace/syndicate
- suit_store = /obj/item/gun/ballistic/revolver/mateba
- back = /obj/item/storage/backpack/satchel/leather
- head = /obj/item/clothing/head/HoS/syndicate
- mask = /obj/item/clothing/mask/cigarette/cigar/havana
- glasses = /obj/item/clothing/glasses/thermal/eyepatch
-
-//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse.
-/obj/effect/mob_spawn/human/oldsec
- name = "old cryogenics pod"
- desc = ""
- mob_name = "a security officer"
- icon = 'icons/obj/machines/sleeper.dmi'
- icon_state = "sleeper"
- roundstart = FALSE
- death = FALSE
- random = TRUE
- mob_species = /datum/species/human
- flavour_text = "I are a security officer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \
- cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
- your eyes, everything seems rusted and broken, a dark feeling swells in my gut as you climb out of my pod. \
- Work as a team with my fellow survivors and do not abandon them."
- uniform = /obj/item/clothing/under/rank/security/officer
- shoes = /obj/item/clothing/shoes/jackboots
- r_pocket = /obj/item/restraints/handcuffs
- assignedrole = "Ancient Crew"
-
-/obj/effect/mob_spawn/human/oldsec/Destroy()
- new/obj/structure/showcase/machinery/oldpod/used(drop_location())
- return ..()
-
-/obj/effect/mob_spawn/human/oldeng
- name = "old cryogenics pod"
- desc = ""
- mob_name = "an engineer"
- icon = 'icons/obj/machines/sleeper.dmi'
- icon_state = "sleeper"
- roundstart = FALSE
- death = FALSE
- random = TRUE
- mob_species = /datum/species/human
- flavour_text = "I are an engineer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \
- cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
- your eyes, everything seems rusted and broken, a dark feeling swells in my gut as you climb out of my pod. \
- Work as a team with my fellow survivors and do not abandon them."
- uniform = /obj/item/clothing/under/rank/engineering/engineer
- shoes = /obj/item/clothing/shoes/workboots
- gloves = /obj/item/clothing/gloves/color/fyellow/old
- l_pocket = /obj/item/tank/internals/emergency_oxygen
- assignedrole = "Ancient Crew"
-
-/obj/effect/mob_spawn/human/oldeng/Destroy()
- new/obj/structure/showcase/machinery/oldpod/used(drop_location())
- return ..()
-
-/obj/effect/mob_spawn/human/oldsci
- name = "old cryogenics pod"
- desc = ""
- mob_name = "a scientist"
- icon = 'icons/obj/machines/sleeper.dmi'
- icon_state = "sleeper"
- roundstart = FALSE
- death = FALSE
- random = TRUE
- mob_species = /datum/species/human
- flavour_text = "I are a scientist working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \
- cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \
- your eyes, everything seems rusted and broken, a dark feeling swells in my gut as you climb out of my pod. \
- Work as a team with my fellow survivors and do not abandon them."
- uniform = /obj/item/clothing/under/rank/rnd/scientist
- shoes = /obj/item/clothing/shoes/laceup
- l_pocket = /obj/item/stack/medical/bruise_pack
- assignedrole = "Ancient Crew"
-
-/obj/effect/mob_spawn/human/oldsci/Destroy()
- new/obj/structure/showcase/machinery/oldpod/used(drop_location())
- return ..()
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
deleted file mode 100644
index 9ab9b6cc1a..0000000000
--- a/code/game/objects/structures/girders.dm
+++ /dev/null
@@ -1,386 +0,0 @@
-/obj/structure/girder
- name = "girder"
- icon_state = "girder"
- desc = ""
- anchored = TRUE
- density = TRUE
- var/state = GIRDER_NORMAL
- var/girderpasschance = 20 // percentage chance that a projectile passes through the girder.
- var/can_displace = TRUE //If the girder can be moved around by wrenching it
- max_integrity = 200
- rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
- rad_insulation = RAD_VERY_LIGHT_INSULATION
-
-/obj/structure/girder/examine(mob/user)
- . = ..()
- switch(state)
- if(GIRDER_REINF)
- . += "The support struts are screwed in place."
- if(GIRDER_REINF_STRUTS)
- . += "The support struts are unscrewed and the inner grille is intact."
- if(GIRDER_NORMAL)
- if(can_displace)
- . += "The bolts are wrenched in place."
- if(GIRDER_DISPLACED)
- . += "The bolts are loosened, but the screws are holding [src] together."
- if(GIRDER_DISASSEMBLED)
- . += "[src] is disassembled! You probably shouldn't be able to see this examine message."
-
-/obj/structure/girder/attackby(obj/item/W, mob/user, params)
- add_fingerprint(user)
-
- if(istype(W, /obj/item/stack))
- if(iswallturf(loc))
- to_chat(user, "There is already a wall present!")
- return
- if(!isfloorturf(src.loc))
- to_chat(user, "A floor must be present to build a false wall!")
- return
- if (locate(/obj/structure/falsewall) in src.loc.contents)
- to_chat(user, "There is already a false wall present!")
- return
-
- if(istype(W, /obj/item/stack/rods))
- var/obj/item/stack/rods/S = W
- if(state == GIRDER_DISPLACED)
- if(S.get_amount() < 2)
- to_chat(user, "I need at least two rods to create a false wall!")
- return
- to_chat(user, "I start building a reinforced false wall...")
- if(do_after(user, 20, target = src))
- if(S.get_amount() < 2)
- return
- S.use(2)
- to_chat(user, "I create a false wall. Push on it to open or close the passage.")
- var/obj/structure/falsewall/iron/FW = new (loc)
- transfer_fingerprints_to(FW)
- qdel(src)
- else
- if(S.get_amount() < 5)
- to_chat(user, "I need at least five rods to add plating!")
- return
- to_chat(user, "I start adding plating...")
- if(do_after(user, 40, target = src))
- if(S.get_amount() < 5)
- return
- S.use(5)
- to_chat(user, "I add the plating.")
- var/turf/T = get_turf(src)
- T.PlaceOnTop(/turf/closed/wall/mineral/iron)
- transfer_fingerprints_to(T)
- qdel(src)
- return
-
- if(!istype(W, /obj/item/stack/sheet))
- return
-
- var/obj/item/stack/sheet/S = W
- if(istype(S, /obj/item/stack/sheet/metal))
- if(state == GIRDER_DISPLACED)
- if(S.get_amount() < 2)
- to_chat(user, "I need two sheets of metal to create a false wall!")
- return
- to_chat(user, "I start building a false wall...")
- if(do_after(user, 20, target = src))
- if(S.get_amount() < 2)
- return
- S.use(2)
- to_chat(user, "I create a false wall. Push on it to open or close the passage.")
- var/obj/structure/falsewall/F = new (loc)
- transfer_fingerprints_to(F)
- qdel(src)
- else
- if(S.get_amount() < 2)
- to_chat(user, "I need two sheets of metal to finish a wall!")
- return
- to_chat(user, "I start adding plating...")
- if (do_after(user, 40, target = src))
- if(S.get_amount() < 2)
- return
- S.use(2)
- to_chat(user, "I add the plating.")
- var/turf/T = get_turf(src)
- T.PlaceOnTop(/turf/closed/wall)
- transfer_fingerprints_to(T)
- qdel(src)
- return
-
- if(istype(S, /obj/item/stack/sheet/plasteel))
- if(state == GIRDER_DISPLACED)
- if(S.get_amount() < 2)
- to_chat(user, "I need at least two sheets to create a false wall!")
- return
- to_chat(user, "I start building a reinforced false wall...")
- if(do_after(user, 20, target = src))
- if(S.get_amount() < 2)
- return
- S.use(2)
- to_chat(user, "I create a reinforced false wall. Push on it to open or close the passage.")
- var/obj/structure/falsewall/reinforced/FW = new (loc)
- transfer_fingerprints_to(FW)
- qdel(src)
- else
- if(state == GIRDER_REINF)
- if(S.get_amount() < 1)
- return
- to_chat(user, "I start finalizing the reinforced wall...")
- if(do_after(user, 50, target = src))
- if(S.get_amount() < 1)
- return
- S.use(1)
- to_chat(user, "I fully reinforce the wall.")
- var/turf/T = get_turf(src)
- T.PlaceOnTop(/turf/closed/wall/r_wall)
- transfer_fingerprints_to(T)
- qdel(src)
- return
- else
- if(S.get_amount() < 1)
- return
- to_chat(user, "I start reinforcing the girder...")
- if(do_after(user, 60, target = src))
- if(S.get_amount() < 1)
- return
- S.use(1)
- to_chat(user, "I reinforce the girder.")
- var/obj/structure/girder/reinforced/R = new (loc)
- transfer_fingerprints_to(R)
- qdel(src)
- return
-
- if(S.sheettype && S.sheettype != "runed")
- var/M = S.sheettype
- if(state == GIRDER_DISPLACED)
- if(S.get_amount() < 2)
- to_chat(user, "I need at least two sheets to create a false wall!")
- return
- if(do_after(user, 20, target = src))
- if(S.get_amount() < 2)
- return
- S.use(2)
- to_chat(user, "I create a false wall. Push on it to open or close the passage.")
- var/F = text2path("/obj/structure/falsewall/[M]")
- var/obj/structure/FW = new F (loc)
- transfer_fingerprints_to(FW)
- qdel(src)
- else
- if(S.get_amount() < 2)
- to_chat(user, "I need at least two sheets to add plating!")
- return
- to_chat(user, "I start adding plating...")
- if (do_after(user, 40, target = src))
- if(S.get_amount() < 2)
- return
- S.use(2)
- to_chat(user, "I add the plating.")
- var/turf/T = get_turf(src)
- T.PlaceOnTop(text2path("/turf/closed/wall/mineral/[M]"))
- transfer_fingerprints_to(T)
- qdel(src)
- return
-
- add_hiddenprint(user)
-
- else
- return ..()
-
-// Screwdriver behavior for girders
-/obj/structure/girder/screwdriver_act(mob/user, obj/item/tool)
- if(..())
- return TRUE
-
- . = FALSE
- if(state == GIRDER_DISPLACED)
- user.visible_message("[user] disassembles the girder.",
- "I start to disassemble the girder...",
- "I hear clanking and banging noises.")
- if(tool.use_tool(src, user, 40, volume=100))
- if(state != GIRDER_DISPLACED)
- return
- state = GIRDER_DISASSEMBLED
- to_chat(user, "I disassemble the girder.")
- var/obj/item/stack/sheet/metal/M = new (loc, 2)
- M.add_fingerprint(user)
- qdel(src)
- return TRUE
-
- else if(state == GIRDER_REINF)
- to_chat(user, "I start unsecuring support struts...")
- if(tool.use_tool(src, user, 40, volume=100))
- if(state != GIRDER_REINF)
- return
- to_chat(user, "I unsecure the support struts.")
- state = GIRDER_REINF_STRUTS
- return TRUE
-
- else if(state == GIRDER_REINF_STRUTS)
- to_chat(user, "I start securing support struts...")
- if(tool.use_tool(src, user, 40, volume=100))
- if(state != GIRDER_REINF_STRUTS)
- return
- to_chat(user, "I secure the support struts.")
- state = GIRDER_REINF
- return TRUE
-
-// Wirecutter behavior for girders
-/obj/structure/girder/wirecutter_act(mob/user, obj/item/tool)
- . = ..()
- if(state == GIRDER_REINF_STRUTS)
- to_chat(user, "I start removing the inner grille...")
- if(tool.use_tool(src, user, 40, volume=100))
- to_chat(user, "I remove the inner grille.")
- new /obj/item/stack/sheet/plasteel(get_turf(src))
- var/obj/structure/girder/G = new (loc)
- transfer_fingerprints_to(G)
- qdel(src)
- return TRUE
-
-/obj/structure/girder/wrench_act(mob/user, obj/item/tool)
- . = ..()
- if(state == GIRDER_DISPLACED)
- if(!isfloorturf(loc))
- to_chat(user, "A floor must be present to secure the girder!")
-
- to_chat(user, "I start securing the girder...")
- if(tool.use_tool(src, user, 40, volume=100))
- to_chat(user, "I secure the girder.")
- var/obj/structure/girder/G = new (loc)
- transfer_fingerprints_to(G)
- qdel(src)
- return TRUE
- else if(state == GIRDER_NORMAL && can_displace)
- to_chat(user, "I start unsecuring the girder...")
- if(tool.use_tool(src, user, 40, volume=100))
- to_chat(user, "I unsecure the girder.")
- var/obj/structure/girder/displaced/D = new (loc)
- transfer_fingerprints_to(D)
- qdel(src)
- return TRUE
-
-/obj/structure/girder/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGRILLE))
- return prob(girderpasschance)
- else
- if(istype(mover, /obj/projectile))
- return prob(girderpasschance)
- else
- return 0
-
-/obj/structure/girder/CanAStarPass(ID, dir, caller)
- . = !density
- if(ismovableatom(caller))
- var/atom/movable/mover = caller
- . = . || (mover.pass_flags & PASSGRILLE)
-
-/obj/structure/girder/deconstruct(disassembled = TRUE)
-// if(!(flags_1 & NODECONSTRUCT_1))
-// var/remains = pick(/obj/item/stack/rods, /obj/item/stack/sheet/metal)
-// new remains(loc)
- qdel(src)
-
-/obj/structure/girder/narsie_act()
- new /obj/structure/girder/cult(loc)
- qdel(src)
-
-/obj/structure/girder/displaced
- name = "displaced girder"
- icon_state = "displaced"
- anchored = FALSE
- state = GIRDER_DISPLACED
- girderpasschance = 25
- max_integrity = 120
-
-/obj/structure/girder/reinforced
- name = "reinforced girder"
- icon_state = "reinforced"
- state = GIRDER_REINF
- girderpasschance = 0
- max_integrity = 350
-
-
-
-//////////////////////////////////////////// cult girder //////////////////////////////////////////////
-
-/obj/structure/girder/cult
- name = "runed girder"
- desc = ""
- icon = 'icons/obj/cult.dmi'
- icon_state= "cultgirder"
- can_displace = FALSE
-
-/obj/structure/girder/cult/attackby(obj/item/W, mob/user, params)
- add_fingerprint(user)
-
- if(W.tool_behaviour == TOOL_WELDER)
- if(!W.tool_start_check(user, amount=0))
- return
-
- to_chat(user, "I start slicing apart the girder...")
- if(W.use_tool(src, user, 40, volume=50))
- to_chat(user, "I slice apart the girder.")
- var/obj/item/stack/sheet/runed_metal/R = new(drop_location(), 1)
- transfer_fingerprints_to(R)
- qdel(src)
-
- else if(istype(W, /obj/item/stack/sheet/runed_metal))
- var/obj/item/stack/sheet/runed_metal/R = W
- if(R.get_amount() < 1)
- to_chat(user, "I need at least one sheet of runed metal to construct a runed wall!")
- return 0
- user.visible_message("[user] begins laying runed metal on [src]...", "I begin constructing a runed wall...")
- if(do_after(user, 50, target = src))
- if(R.get_amount() < 1)
- return
- user.visible_message("[user] plates [src] with runed metal.", "I construct a runed wall.")
- R.use(1)
- var/turf/T = get_turf(src)
- T.PlaceOnTop(/turf/closed/wall/mineral/cult)
- qdel(src)
-
- else
- return ..()
-
-/obj/structure/girder/cult/narsie_act()
- return
-
-/obj/structure/girder/cult/deconstruct(disassembled = TRUE)
- if(!(flags_1 & NODECONSTRUCT_1))
- new /obj/item/stack/sheet/runed_metal(drop_location(), 1)
- qdel(src)
-
-/obj/structure/girder/bronze
- name = "wall gear"
- desc = ""
- icon = 'icons/obj/clockwork_objects.dmi'
- icon_state = "wall_gear"
- can_displace = FALSE
-
-/obj/structure/girder/bronze/attackby(obj/item/W, mob/living/user, params)
- add_fingerprint(user)
- if(W.tool_behaviour == TOOL_WELDER)
- if(!W.tool_start_check(user, amount = 0))
- return
- to_chat(user, "I start slicing apart [src]...")
- if(W.use_tool(src, user, 40, volume=50))
- to_chat(user, "I slice apart [src].")
- var/obj/item/stack/tile/bronze/B = new(drop_location(), 2)
- transfer_fingerprints_to(B)
- qdel(src)
-
- else if(istype(W, /obj/item/stack/tile/bronze))
- var/obj/item/stack/tile/bronze/B = W
- if(B.get_amount() < 2)
- to_chat(user, "I need at least two bronze sheets to build a bronze wall!")
- return 0
- user.visible_message("[user] begins plating [src] with bronze...", "I begin constructing a bronze wall...")
- if(do_after(user, 50, target = src))
- if(B.get_amount() < 2)
- return
- user.visible_message("[user] plates [src] with bronze!", "I construct a bronze wall.")
- B.use(2)
- var/turf/T = get_turf(src)
- T.PlaceOnTop(/turf/closed/wall/mineral/bronze)
- qdel(src)
-
- else
- return ..()
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
deleted file mode 100644
index a397aa4155..0000000000
--- a/code/game/objects/structures/grille.dm
+++ /dev/null
@@ -1,189 +0,0 @@
-/obj/structure/grille
- desc = ""
- name = "grille"
- icon = 'icons/obj/structures.dmi'
- icon_state = "grille"
- density = TRUE
- anchored = TRUE
- flags_1 = CONDUCT_1
- pressure_resistance = 5*ONE_ATMOSPHERE
- armor = list("melee" = 50, "bullet" = 70, "laser" = 70, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0)
- max_integrity = 50
- integrity_failure = 0.4
- var/rods_type = /obj/item/stack/rods
- var/rods_amount = 2
- var/rods_broken = TRUE
- var/grille_type = null
- var/broken_type = /obj/structure/grille/broken
- rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
-
-/obj/structure/grille/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
- . = ..()
- update_icon()
-
-/obj/structure/grille/update_icon()
- if(QDELETED(src) || broken)
- return
-
- var/ratio = obj_integrity / max_integrity
- ratio = CEILING(ratio*4, 1) * 25
-
- if(smooth)
- queue_smooth(src)
-
- if(ratio > 50)
- return
- icon_state = "grille50_[rand(0,3)]"
-
-/obj/structure/grille/examine(mob/user)
- . = ..()
-// if(anchored)
-// . += "It's secured in place with screws. The rods look like they could be cut through."
-// if(!anchored)
-// . += "The anchoring screws are unscrewed. The rods look like they could be cut through."
-
-
-/obj/structure/grille/attack_paw(mob/user)
- return attack_hand(user)
-
-/obj/structure/grille/hulk_damage()
- return 60
-
-/obj/structure/grille/attack_hand(mob/living/user)
- . = ..()
- if(.)
- return
- user.changeNext_move(CLICK_CD_MELEE)
- user.do_attack_animation(src, ATTACK_EFFECT_KICK)
- user.visible_message("[user] hits [src].", null, null, COMBAT_MESSAGE_RANGE)
- log_combat(user, src, "hit")
-
-
-/obj/structure/grille/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGRILLE))
- return TRUE
- else
- if(istype(mover, /obj/projectile) && density)
- return prob(30)
- else
- return !density
-
-/obj/structure/grille/CanAStarPass(ID, dir, caller)
- . = !density
- if(ismovableatom(caller))
- var/atom/movable/mover = caller
- . = . || (mover.pass_flags & PASSGRILLE)
-
-/obj/structure/grille/attackby(obj/item/W, mob/user, params)
- user.changeNext_move(CLICK_CD_MELEE)
- add_fingerprint(user)
- if(W.tool_behaviour == TOOL_WIRECUTTER)
- W.play_tool_sound(src, 100)
- deconstruct()
- else if((W.tool_behaviour == TOOL_SCREWDRIVER) && (isturf(loc) || anchored))
- W.play_tool_sound(src, 100)
- setAnchored(!anchored)
- user.visible_message("[user] [anchored ? "fastens" : "unfastens"] [src].", \
- "I [anchored ? "fasten [src] to" : "unfasten [src] from"] the floor.")
- return
- else if(istype(W, /obj/item/stack/rods) && broken)
- var/obj/item/stack/rods/R = W
- user.visible_message("[user] rebuilds the broken grille.", \
- "I rebuild the broken grille.")
- new grille_type(src.loc)
- R.use(1)
- qdel(src)
- return
-
-//window placing begin
- else if(is_glass_sheet(W))
- if (!broken)
- var/obj/item/stack/ST = W
- if (ST.get_amount() < 2)
- to_chat(user, "I need at least two sheets of glass for that!")
- return
- var/dir_to_set = SOUTHWEST
- if(!anchored)
- to_chat(user, "[src] needs to be fastened to the floor first!")
- return
- for(var/obj/structure/window/WINDOW in loc)
- to_chat(user, "There is already a window there!")
- return
- to_chat(user, "I start placing the window...")
- if(do_after(user,20, target = src))
- if(!src.loc || !anchored) //Grille broken or unanchored while waiting
- return
- for(var/obj/structure/window/WINDOW in loc) //Another window already installed on grille
- return
- var/obj/structure/window/WD
- if(istype(W, /obj/item/stack/sheet/plasmarglass))
- WD = new/obj/structure/window/plasma/reinforced/fulltile(drop_location()) //reinforced plasma window
- else if(istype(W, /obj/item/stack/sheet/plasmaglass))
- WD = new/obj/structure/window/plasma/fulltile(drop_location()) //plasma window
- else if(istype(W, /obj/item/stack/sheet/rglass))
- WD = new/obj/structure/window/reinforced/fulltile(drop_location()) //reinforced window
- else if(istype(W, /obj/item/stack/sheet/titaniumglass))
- WD = new/obj/structure/window/shuttle(drop_location())
- else if(istype(W, /obj/item/stack/sheet/plastitaniumglass))
- WD = new/obj/structure/window/plasma/reinforced/plastitanium(drop_location())
- else
- WD = new/obj/structure/window/fulltile(drop_location()) //normal window
- WD.setDir(dir_to_set)
- WD.ini_dir = dir_to_set
- WD.setAnchored(FALSE)
- WD.state = 0
- ST.use(2)
- to_chat(user, "I place [WD] on [src].")
- return
-//window placing end
-
- else if(istype(W, /obj/item/shard))
- return ..()
-
-/obj/structure/grille/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
- switch(damage_type)
- if(BRUTE)
- if(damage_amount)
- playsound(src, 'sound/blank.ogg', 80, TRUE)
- else
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- if(BURN)
- playsound(src, 'sound/blank.ogg', 80, TRUE)
-
-
-/obj/structure/grille/deconstruct(disassembled = TRUE)
- if(!loc) //if already qdel'd somehow, we do nothing
- return
-// if(!(flags_1&NODECONSTRUCT_1))
-// var/obj/R = new rods_type(drop_location(), rods_amount)
-// transfer_fingerprints_to(R)
-// qdel(src)
- ..()
-
-/obj/structure/grille/obj_break()
-// if(!broken && !(flags_1 & NODECONSTRUCT_1))
-// new broken_type(src.loc)
-// var/obj/R = new rods_type(drop_location(), rods_broken)
-// transfer_fingerprints_to(R)
- ..()
-
-
-
-/obj/structure/grille/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- if(!broken)
- if(exposed_temperature > T0C + 1500)
- take_damage(1, BURN, 0, 0)
- ..()
-
-/obj/structure/grille/get_dumping_location(datum/component/storage/source,mob/user)
- return null
-
-/obj/structure/grille/broken // Pre-broken grilles for map placement
- icon_state = "brokengrille"
- density = FALSE
- obj_integrity = 20
- broken = TRUE
- rods_amount = 1
- rods_broken = FALSE
- grille_type = /obj/structure/grille
- broken_type = null
diff --git a/code/game/objects/structures/guillotine.dm b/code/game/objects/structures/guillotine.dm
index f05c0ca5e6..0ff2652915 100644
--- a/code/game/objects/structures/guillotine.dm
+++ b/code/game/objects/structures/guillotine.dm
@@ -35,19 +35,6 @@
LAZYINITLIST(buckled_mobs)
. = ..()
-/obj/structure/guillotine/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/stack/sheet/plasteel))
- to_chat(user, "I start repairing the guillotine with the plasteel...")
- if(blade_sharpness<10)
- if(do_after(user,100,target=user))
- blade_sharpness = min(10,blade_sharpness+3)
- I.use(1)
- to_chat(user, "I repair the guillotine with the plasteel.")
- else
- to_chat(user, "I stop repairing the guillotine with the plasteel.")
- else
- to_chat(user, "The guillotine is already fully repaired!")
-
/obj/structure/guillotine/examine(mob/user)
. = ..()
diff --git a/code/game/objects/structures/guncase.dm b/code/game/objects/structures/guncase.dm
deleted file mode 100644
index ca284ec46e..0000000000
--- a/code/game/objects/structures/guncase.dm
+++ /dev/null
@@ -1,102 +0,0 @@
-//GUNCASES//
-/obj/structure/guncase
- name = "gun locker"
- desc = ""
- icon = 'icons/obj/closet.dmi'
- icon_state = "shotguncase"
- anchored = FALSE
- density = TRUE
- opacity = 0
- var/case_type = ""
- var/gun_category = /obj/item/gun
- var/open = TRUE
- var/capacity = 4
-
-/obj/structure/guncase/Initialize(mapload)
- . = ..()
- if(mapload)
- for(var/obj/item/I in loc.contents)
- if(istype(I, gun_category))
- I.forceMove(src)
- if(contents.len >= capacity)
- break
- update_icon()
-
-/obj/structure/guncase/update_icon()
- cut_overlays()
- if(case_type && LAZYLEN(contents))
- var/mutable_appearance/gun_overlay = mutable_appearance(icon, case_type)
- for(var/i in 1 to contents.len)
- gun_overlay.pixel_x = 3 * (i - 1)
- add_overlay(gun_overlay)
- if(open)
- add_overlay("[icon_state]_open")
- else
- add_overlay("[icon_state]_door")
-
-/obj/structure/guncase/attackby(obj/item/I, mob/user, params)
- if(istype(I, gun_category) && open)
- if(LAZYLEN(contents) < capacity)
- if(!user.transferItemToLoc(I, src))
- return
- to_chat(user, "I place [I] in [src].")
- update_icon()
- else
- to_chat(user, "[src] is full.")
- return
-
- else if(user.used_intent.type != INTENT_HARM)
- open = !open
- update_icon()
- else
- return ..()
-
-/obj/structure/guncase/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- if(contents.len && open)
- ShowWindow(user)
- else
- open = !open
- update_icon()
-
-/obj/structure/guncase/proc/ShowWindow(mob/user)
- var/dat = {"
-
Stored Guns
-
"}
- if(LAZYLEN(contents))
- for(var/i in 1 to contents.len)
- var/obj/item/I = contents[i]
- dat += "[I.name]
"
- dat += "
"
-
- var/datum/browser/popup = new(user, "gunlocker", "[name]
", 350, 300)
- popup.set_content(dat)
- popup.open(FALSE)
-
-/obj/structure/guncase/Topic(href, href_list)
- if(href_list["retrieve"])
- var/obj/item/O = locate(href_list["retrieve"]) in contents
- if(!O || !istype(O))
- return
- if(!usr.canUseTopic(src, BE_CLOSE) || !open)
- return
- if(ishuman(usr))
- if(!usr.put_in_hands(O))
- O.forceMove(get_turf(src))
- update_icon()
-
-/obj/structure/guncase/handle_atom_del(atom/A)
- update_icon()
-
-/obj/structure/guncase/contents_explosion(severity, target)
- for(var/atom/A in contents)
- A.ex_act(severity++, target)
- CHECK_TICK
-
-/obj/structure/guncase/shotgun
- name = "shotgun locker"
- desc = ""
- case_type = "shotgun"
- gun_category = /obj/item/gun/ballistic/shotgun
diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm
deleted file mode 100644
index e794a3ad77..0000000000
--- a/code/game/objects/structures/headpike.dm
+++ /dev/null
@@ -1,48 +0,0 @@
-/obj/structure/headpike
- name = "spooky head on a spear"
- desc = ""
- icon = 'icons/obj/structures.dmi'
- icon_state = "headpike"
- density = FALSE
- anchored = TRUE
- var/bonespear = FALSE
- var/obj/item/twohanded/spear/spear
- var/obj/item/bodypart/head/victim
-
-/obj/structure/headpike/bone //for bone spears
- icon_state = "headpike-bone"
- bonespear = TRUE
-
-/obj/structure/headpike/CheckParts(list/parts_list)
- ..()
- victim = locate(/obj/item/bodypart/head) in parts_list
- name = "[victim.name] on a spear"
- update_icon()
- if(bonespear)
- spear = locate(/obj/item/twohanded/spear/bonespear) in parts_list
- else
- spear = locate(/obj/item/twohanded/spear) in parts_list
-
-/obj/structure/headpike/Initialize()
- . = ..()
- pixel_x = rand(-8, 8)
-
-/obj/structure/headpike/update_icon()
- ..()
- var/obj/item/bodypart/head/H = locate() in contents
- var/mutable_appearance/MA = new()
- if(H)
- MA.copy_overlays(H)
- MA.pixel_y = 12
- add_overlay(H)
-
-/obj/structure/headpike/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- to_chat(user, "I take down [src].")
- victim.forceMove(drop_location())
- victim = null
- spear.forceMove(drop_location())
- spear = null
- qdel(src)
diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm
deleted file mode 100644
index 5c1e46cbbc..0000000000
--- a/code/game/objects/structures/janicart.dm
+++ /dev/null
@@ -1,166 +0,0 @@
-/obj/structure/janitorialcart
- name = "janitorial cart"
- desc = ""
- icon = 'icons/obj/janitor.dmi'
- icon_state = "cart"
- anchored = FALSE
- density = TRUE
- //copypaste sorry
- var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
- var/obj/item/storage/bag/trash/mybag = null
- var/obj/item/mop/mymop = null
- var/obj/item/reagent_containers/spray/cleaner/myspray = null
- var/obj/item/lightreplacer/myreplacer = null
- var/signs = 0
- var/const/max_signs = 4
-
-
-/obj/structure/janitorialcart/Initialize()
- . = ..()
- create_reagents(100, OPENCONTAINER)
-
-/obj/structure/janitorialcart/proc/wet_mop(obj/item/mop, mob/user)
- if(reagents.total_volume < 1)
- to_chat(user, "[src] is out of water!")
- return 0
- else
- var/obj/item/mop/M = mop
- reagents.trans_to(mop, M.mopcap, transfered_by = user)
- to_chat(user, "I wet [mop] in [src].")
- playsound(loc, 'sound/blank.ogg', 25, TRUE)
- return 1
-
-/obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user)
- if(!user.transferItemToLoc(I, src))
- return
- updateUsrDialog()
- to_chat(user, "I put [I] into [src].")
- return
-
-
-/obj/structure/janitorialcart/attackby(obj/item/I, mob/user, params)
- var/fail_msg = "There is already one of those in [src]!"
-
- if(istype(I, /obj/item/mop))
- var/obj/item/mop/m=I
- if(m.reagents.total_volume < m.reagents.maximum_volume)
- if (wet_mop(m, user))
- return
- if(!mymop)
- m.janicart_insert(user, src)
- else
- to_chat(user, fail_msg)
-
- else if(istype(I, /obj/item/storage/bag/trash))
- if(!mybag)
- var/obj/item/storage/bag/trash/t=I
- t.janicart_insert(user, src)
- else
- to_chat(user, fail_msg)
- else if(istype(I, /obj/item/reagent_containers/spray/cleaner))
- if(!myspray)
- put_in_cart(I, user)
- myspray=I
- update_icon()
- else
- to_chat(user, fail_msg)
- else if(istype(I, /obj/item/lightreplacer))
- if(!myreplacer)
- var/obj/item/lightreplacer/l=I
- l.janicart_insert(user,src)
- else
- to_chat(user, fail_msg)
- else if(istype(I, /obj/item/clothing/suit/caution))
- if(signs < max_signs)
- put_in_cart(I, user)
- signs++
- update_icon()
- else
- to_chat(user, "[src] can't hold any more signs!")
- else if(mybag)
- mybag.attackby(I, user)
- else if(I.tool_behaviour == TOOL_CROWBAR)
- user.visible_message("[user] begins to empty the contents of [src].", "I begin to empty the contents of [src]...")
- if(I.use_tool(src, user, 30))
- to_chat(usr, "I empty the contents of [src]'s bucket onto the floor.")
- reagents.reaction(src.loc)
- src.reagents.clear_reagents()
- else
- return ..()
-
-/obj/structure/janitorialcart/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- user.set_machine(src)
- var/dat
- if(mybag)
- dat += "[mybag.name]
"
- if(mymop)
- dat += "[mymop.name]
"
- if(myspray)
- dat += "[myspray.name]
"
- if(myreplacer)
- dat += "[myreplacer.name]
"
- if(signs)
- dat += "[signs] sign\s
"
- var/datum/browser/popup = new(user, "janicart", name, 240, 160)
- popup.set_content(dat)
- popup.open()
-
-
-/obj/structure/janitorialcart/Topic(href, href_list)
- if(!in_range(src, usr))
- return
- if(!isliving(usr))
- return
- var/mob/living/user = usr
- if(href_list["garbage"])
- if(mybag)
- user.put_in_hands(mybag)
- to_chat(user, "I take [mybag] from [src].")
- mybag = null
- if(href_list["mop"])
- if(mymop)
- user.put_in_hands(mymop)
- to_chat(user, "I take [mymop] from [src].")
- mymop = null
- if(href_list["spray"])
- if(myspray)
- user.put_in_hands(myspray)
- to_chat(user, "I take [myspray] from [src].")
- myspray = null
- if(href_list["replacer"])
- if(myreplacer)
- user.put_in_hands(myreplacer)
- to_chat(user, "I take [myreplacer] from [src].")
- myreplacer = null
- if(href_list["sign"])
- if(signs)
- var/obj/item/clothing/suit/caution/Sign = locate() in src
- if(Sign)
- user.put_in_hands(Sign)
- to_chat(user, "I take \a [Sign] from [src].")
- signs--
- else
- WARNING("Signs ([signs]) didn't match contents")
- signs = 0
-
- update_icon()
- updateUsrDialog()
-
-
-/obj/structure/janitorialcart/update_icon()
- cut_overlays()
- if(mybag)
- add_overlay("cart_garbage")
- if(mymop)
- add_overlay("cart_mop")
- if(myspray)
- add_overlay("cart_spray")
- if(myreplacer)
- add_overlay("cart_replacer")
- if(signs)
- add_overlay("cart_sign[signs]")
- if(reagents.total_volume > 0)
- add_overlay("cart_water")
diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm
index cb53099c1e..5d806bfad3 100644
--- a/code/game/objects/structures/kitchen_spike.dm
+++ b/code/game/objects/structures/kitchen_spike.dm
@@ -1,41 +1,5 @@
//////Kitchen Spike
#define VIABLE_MOB_CHECK(X) (isliving(X))
-
-/obj/structure/kitchenspike_frame
- name = "meatspike frame"
- icon = 'icons/obj/kitchen.dmi'
- icon_state = "spikeframe"
- desc = ""
- density = TRUE
- anchored = FALSE
- max_integrity = 200
-
-/obj/structure/kitchenspike_frame/attackby(obj/item/I, mob/user, params)
- add_fingerprint(user)
- if(default_unfasten_wrench(user, I))
- return
- else if(istype(I, /obj/item/stack/rods))
- var/obj/item/stack/rods/R = I
- if(R.get_amount() >= 4)
- R.use(4)
- to_chat(user, "I add spikes to the frame.")
- var/obj/F = new /obj/structure/kitchenspike(src.loc)
- transfer_fingerprints_to(F)
- qdel(src)
- else if(I.tool_behaviour == TOOL_WELDER)
- if(!I.tool_start_check(user, amount=0))
- return
- to_chat(user, "I begin cutting \the [src] apart...")
- if(I.use_tool(src, user, 50, volume=50))
- visible_message("[user] slices apart \the [src].",
- "I cut \the [src] apart with \the [I].",
- "I hear welding.")
- new /obj/item/stack/sheet/metal(src.loc, 4)
- qdel(src)
- return
- else
- return ..()
-
/obj/structure/kitchenspike
name = "meat spike"
icon = 'icons/obj/kitchen.dmi'
@@ -137,13 +101,4 @@
release_mob(L)
return ..()
-/obj/structure/kitchenspike/deconstruct(disassembled = TRUE)
- if(disassembled)
- var/obj/F = new /obj/structure/kitchenspike_frame(src.loc)
- transfer_fingerprints_to(F)
- else
- new /obj/item/stack/sheet/metal(src.loc, 4)
- new /obj/item/stack/rods(loc, 4)
- qdel(src)
-
#undef VIABLE_MOB_CHECK
diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm
deleted file mode 100644
index 90aa6b766d..0000000000
--- a/code/game/objects/structures/lattice.dm
+++ /dev/null
@@ -1,61 +0,0 @@
-/obj/structure/lattice
- name = "lattice"
- desc = ""
- icon = 'icons/obj/smooth_structures/lattice.dmi'
- icon_state = "lattice"
- density = FALSE
- anchored = TRUE
- armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
- max_integrity = 50
- layer = LATTICE_LAYER //under pipes
- plane = FLOOR_PLANE
- var/number_of_rods = 1
- canSmoothWith = list(/obj/structure/lattice,
- /turf/open/floor,
- /turf/closed/wall,
- /obj/structure/falsewall)
- smooth = SMOOTH_MORE
- // flags = CONDUCT_1
-
-/obj/structure/lattice/examine(mob/user)
- . = ..()
- . += deconstruction_hints(user)
-
-/obj/structure/lattice/proc/deconstruction_hints(mob/user)
- return "The rods look like they could be cut. There's space for more rods or a tile."
-
-/obj/structure/lattice/Initialize(mapload)
- . = ..()
- for(var/obj/structure/lattice/LAT in loc)
- if(LAT != src)
- QDEL_IN(LAT, 0)
-
-/obj/structure/lattice/attackby(obj/item/C, mob/user, params)
- if(resistance_flags & INDESTRUCTIBLE)
- return
- if(C.tool_behaviour == TOOL_WIRECUTTER)
- to_chat(user, "Slicing [name] joints ...")
- deconstruct()
- else
- var/turf/T = get_turf(src)
- return T.attackby(C, user) //hand this off to the turf instead (for building plating, catwalks, etc)
-
-/obj/structure/lattice/deconstruct(disassembled = TRUE)
- if(!(flags_1 & NODECONSTRUCT_1))
- new /obj/item/stack/rods(get_turf(src), number_of_rods)
- qdel(src)
-
-/obj/structure/lattice/singularity_pull()
-
-/obj/structure/lattice/catwalk
- name = "catwalk"
- desc = ""
- icon = 'icons/obj/smooth_structures/catwalk.dmi'
- icon_state = "catwalk"
- number_of_rods = 2
- smooth = SMOOTH_TRUE
- canSmoothWith = null
- obj_flags = CAN_BE_HIT
-
-/obj/structure/lattice/catwalk/deconstruction_hints(mob/user)
- return "The supporting rods look like they could be cut."
diff --git a/code/game/objects/structures/loom.dm b/code/game/objects/structures/loom.dm
deleted file mode 100644
index bca4c799be..0000000000
--- a/code/game/objects/structures/loom.dm
+++ /dev/null
@@ -1,41 +0,0 @@
-#define FABRIC_PER_SHEET 4
-
-
-///This is a loom. It's usually made out of wood and used to weave fabric like durathread or cotton into their respective cloth types.
-/obj/structure/loom
- name = "loom"
- desc = ""
- icon = 'icons/obj/hydroponics/equipment.dmi'
- icon_state = "loom"
- density = TRUE
- anchored = TRUE
-
-/obj/structure/loom/attackby(obj/item/I, mob/user)
- if(weave(I, user))
- return
- return ..()
-
-/obj/structure/loom/wrench_act(mob/living/user, obj/item/I)
- ..()
- default_unfasten_wrench(user, I, 5)
- return TRUE
-
-///Handles the weaving.
-/obj/structure/loom/proc/weave(obj/item/stack/sheet/cotton/W, mob/user)
- if(!istype(W))
- return FALSE
- if(!anchored)
- user.show_message("The loom needs to be wrenched down.", MSG_VISUAL)
- return FALSE
- if(W.amount < FABRIC_PER_SHEET)
- user.show_message("I need at least [FABRIC_PER_SHEET] units of fabric before using this.", MSG_VISUAL)
- return FALSE
- user.show_message("I start weaving \the [W.name] through the loom..", MSG_VISUAL)
- if(W.use_tool(src, user, W.pull_effort))
- if(W.amount >= FABRIC_PER_SHEET)
- new W.loom_result(drop_location())
- W.use(FABRIC_PER_SHEET)
- user.show_message("I weave \the [W.name] into a workable fabric.", MSG_VISUAL)
- return TRUE
-
-#undef FABRIC_PER_SHEET
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index 15d7e1e478..4439daecc6 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -26,7 +26,6 @@
var/openSound = 'sound/blank.ogg'
var/closeSound = 'sound/blank.ogg'
- var/sheetType = /obj/item/stack/sheet/metal //what we're made of
var/sheetAmount = 7 //how much we drop when deconstructed
var/windowed = FALSE
@@ -552,151 +551,6 @@
user.visible_message(span_notice("[user] pried [src] into pieces!"), span_notice("I pried apart [src]!"))
deconstruct(TRUE)
-
-/////////////////////// END TOOL OVERRIDES ///////////////////////
-/*
-
-/obj/structure/mineral_door/deconstruct(disassembled = TRUE)
-// var/turf/T = get_turf(src)
-// if(disassembled)
-// new sheetType(T, sheetAmount)
-// else
-// new sheetType(T, max(sheetAmount - 2, 1))
-// qdel(src)
-*/
-
-
-/obj/structure/mineral_door/iron
- name = "iron door"
- max_integrity = 300
-
-/obj/structure/mineral_door/silver
- name = "silver door"
- icon_state = "silver"
- sheetType = /obj/item/stack/sheet/mineral/silver
- max_integrity = 300
- rad_insulation = RAD_HEAVY_INSULATION
-
-/obj/structure/mineral_door/gold
- name = "gold door"
- icon_state = "gold"
- sheetType = /obj/item/stack/sheet/mineral/gold
- rad_insulation = RAD_HEAVY_INSULATION
-
-/obj/structure/mineral_door/uranium
- name = "uranium door"
- icon_state = "uranium"
- sheetType = /obj/item/stack/sheet/mineral/uranium
- max_integrity = 300
- light_outer_range = 2
-
-/obj/structure/mineral_door/uranium/ComponentInitialize()
- return
-
-/obj/structure/mineral_door/sandstone
- name = "sandstone door"
- icon_state = "sandstone"
- sheetType = /obj/item/stack/sheet/mineral/sandstone
- max_integrity = 100
-
-/obj/structure/mineral_door/transparent
- opacity = FALSE
- rad_insulation = RAD_VERY_LIGHT_INSULATION
-
-/obj/structure/mineral_door/transparent/Close()
- ..()
- set_opacity(FALSE)
-
-/obj/structure/mineral_door/transparent/plasma
- name = "plasma door"
- icon_state = "plasma"
- sheetType = /obj/item/stack/sheet/mineral/plasma
-
-/obj/structure/mineral_door/transparent/plasma/ComponentInitialize()
- return
-
-/obj/structure/mineral_door/transparent/plasma/welder_act(mob/living/user, obj/item/I)
- return
-
-/obj/structure/mineral_door/transparent/plasma/attackby(obj/item/W, mob/user, params)
- if(W.get_temperature())
- var/turf/T = get_turf(src)
- message_admins("Plasma mineral door ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
- log_game("Plasma mineral door ignited by [key_name(user)] in [AREACOORD(T)]")
- TemperatureAct()
- else
- return ..()
-
-/obj/structure/mineral_door/transparent/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- if(exposed_temperature > 300)
- TemperatureAct()
-
-/obj/structure/mineral_door/transparent/plasma/proc/TemperatureAct()
- atmos_spawn_air("plasma=500;TEMP=1000")
- deconstruct(FALSE)
-
-/obj/structure/mineral_door/transparent/diamond
- name = "diamond door"
- icon_state = "diamond"
- sheetType = /obj/item/stack/sheet/mineral/diamond
- max_integrity = 1000
- rad_insulation = RAD_EXTREME_INSULATION
-
-
-
-
-/obj/structure/mineral_door/paperframe
- name = "paper frame door"
- icon_state = "paperframe"
- openSound = 'sound/foley/doors/creak.ogg'
- closeSound = 'sound/foley/doors/shut.ogg'
- sheetType = /obj/item/stack/sheet/paperframes
- sheetAmount = 3
- resistance_flags = FLAMMABLE
- max_integrity = 20
-
-/obj/structure/mineral_door/paperframe/Initialize()
- . = ..()
- queue_smooth_neighbors(src)
-
-/obj/structure/mineral_door/paperframe/examine(mob/user)
- . = ..()
- if(obj_integrity < max_integrity)
- . += span_info("It looks a bit damaged, you may be able to fix it with some paper.")
-
-/obj/structure/mineral_door/paperframe/pickaxe_door(mob/living/user, obj/item/I)
- return
-
-/obj/structure/mineral_door/paperframe/welder_act(mob/living/user, obj/item/I)
- return
-
-/obj/structure/mineral_door/paperframe/crowbar_act(mob/living/user, obj/item/I)
- return crowbar_door(user, I)
-
-/obj/structure/mineral_door/paperframe/attackby(obj/item/I, mob/living/user)
- if(I.get_temperature()) //BURN IT ALL DOWN JIM
- fire_act(I.get_temperature())
- return
-
- if((user.used_intent.type != INTENT_HARM) && istype(I, /obj/item/paper) && (obj_integrity < max_integrity))
- user.visible_message(span_notice("[user] starts to patch the holes in [src]."), span_notice("I start patching some of the holes in [src]!"))
- if(do_after(user, 20, TRUE, src))
- obj_integrity = min(obj_integrity+4,max_integrity)
- qdel(I)
- user.visible_message(span_notice("[user] patches some of the holes in [src]."), span_notice("I patch some of the holes in [src]!"))
- return TRUE
-
- return ..()
-
-/obj/structure/mineral_door/paperframe/ComponentInitialize()
- return
-
-/obj/structure/mineral_door/paperframe/Destroy()
- queue_smooth_neighbors(src)
- return ..()
-
-
-
//ROGUEDOOR
/obj/structure/mineral_door/wood
@@ -705,7 +559,6 @@
icon_state = "woodhandle"
openSound = list('sound/foley/doors/creak.ogg')
closeSound = 'sound/foley/doors/shut.ogg'
- sheetType = null
resistance_flags = FLAMMABLE
max_integrity = 1000
damage_deflection = 12
@@ -766,7 +619,6 @@
icon_state = "woodhandle"
openSound = 'sound/foley/doors/creak.ogg'
closeSound = 'sound/foley/doors/shut.ogg'
- sheetType = null
resistance_flags = FLAMMABLE
max_integrity = 1000
damage_deflection = 12
@@ -923,7 +775,6 @@
opacity = FALSE
windowed = TRUE
keylock = TRUE
- sheetType = null
locksound = 'sound/foley/doors/lock.ogg'
unlocksound = 'sound/foley/doors/unlock.ogg'
rattlesound = 'sound/foley/doors/lockrattlemetal.ogg'
diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm
deleted file mode 100644
index 8f8bbd61e9..0000000000
--- a/code/game/objects/structures/mop_bucket.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-/obj/structure/mopbucket
- name = "mop bucket"
- desc = ""
- icon = 'icons/obj/janitor.dmi'
- icon_state = "mopbucket"
- density = TRUE
- var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
-
-
-/obj/structure/mopbucket/Initialize()
- . = ..()
- create_reagents(100, OPENCONTAINER)
-
-/obj/structure/mopbucket/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/mop))
- if(reagents.total_volume < 1)
- to_chat(user, "[src] is out of water!")
- else
- reagents.trans_to(I, 5, transfered_by = user)
- to_chat(user, "I wet [I] in [src].")
- playsound(loc, 'sound/blank.ogg', 25, TRUE)
- update_icon()
- else
- . = ..()
- update_icon()
-
-/obj/structure/mopbucket/update_icon()
- cut_overlays()
- if(reagents.total_volume > 0)
- add_overlay("mopbucket_water")
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
deleted file mode 100644
index 839e363105..0000000000
--- a/code/game/objects/structures/morgue.dm
+++ /dev/null
@@ -1,385 +0,0 @@
-/* Morgue stuff
- * Contains:
- * Morgue
- * Morgue tray
- * Crematorium
- * Creamatorium
- * Crematorium tray
- * Crematorium button
- */
-
-/*
- * Bodycontainer
- * Parent class for morgue and crematorium
- * For overriding only
- */
-GLOBAL_LIST_EMPTY(bodycontainers) //Let them act as spawnpoints for revenants and other ghosties.
-
-/obj/structure/bodycontainer
- icon = 'icons/obj/stationobjs.dmi'
- icon_state = "morgue1"
- density = TRUE
- anchored = TRUE
- max_integrity = 400
-
- var/obj/structure/tray/connected = null
- var/locked = FALSE
- dir = SOUTH
- var/message_cooldown
- var/breakout_time = 600
-
-/obj/structure/bodycontainer/Initialize()
- . = ..()
- GLOB.bodycontainers += src
- recursive_organ_check(src)
-
-/obj/structure/bodycontainer/Destroy()
- GLOB.bodycontainers -= src
- open()
- if(connected)
- qdel(connected)
- connected = null
- return ..()
-
-/obj/structure/bodycontainer/on_log(login)
- ..()
- update_icon()
-
-/obj/structure/bodycontainer/update_icon()
- return
-
-/obj/structure/bodycontainer/relaymove(mob/user)
- if(user.stat || !isturf(loc))
- return
- if(locked)
- if(message_cooldown <= world.time)
- message_cooldown = world.time + 50
- to_chat(user, "[src]'s door won't budge!")
- return
- open()
-
-/obj/structure/bodycontainer/attack_paw(mob/user)
- return attack_hand(user)
-
-/obj/structure/bodycontainer/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- if(locked)
- to_chat(user, "It's locked.")
- return
- if(!connected)
- to_chat(user, "That doesn't appear to have a tray.")
- return
- if(connected.loc == src)
- open()
- else
- close()
- add_fingerprint(user)
-
-
-/obj/structure/bodycontainer/attackby(obj/P, mob/user, params)
- add_fingerprint(user)
- if(istype(P, /obj/item/pen))
- if(!user.is_literate())
- to_chat(user, "I scribble illegibly on the side of [src]!")
- return
- var/t = stripped_input(user, "What would you like the label to be?", text("[]", name), null)
- if (user.get_active_held_item() != P)
- return
- if(!user.canUseTopic(src, BE_CLOSE))
- return
- if (t)
- name = text("[]- '[]'", initial(name), t)
- else
- name = initial(name)
- else
- return ..()
-
-/obj/structure/bodycontainer/deconstruct(disassembled = TRUE)
- new /obj/item/stack/sheet/metal (loc, 5)
- recursive_organ_check(src)
- qdel(src)
-
-/obj/structure/bodycontainer/container_resist(mob/living/user)
- if(!locked)
- open()
- return
- user.changeNext_move(CLICK_CD_BREAKOUT)
- user.last_special = world.time + CLICK_CD_BREAKOUT
- user.visible_message(null, \
- "I lean on the back of [src] and start pushing the tray open... (this will take about [DisplayTimeText(breakout_time)].)", \
- "I hear a metallic creaking from [src].")
- if(do_after(user,(breakout_time), target = src))
- if(!user || user.stat != CONSCIOUS || user.loc != src )
- return
- user.visible_message("[user] successfully broke out of [src]!", \
- "I successfully break out of [src]!")
- open()
-
-/obj/structure/bodycontainer/proc/open()
- recursive_organ_check(src)
- playsound(src.loc, 'sound/blank.ogg', 50, TRUE)
- playsound(src, 'sound/blank.ogg', 5, TRUE)
- var/turf/T = get_step(src, dir)
- connected.setDir(dir)
- for(var/atom/movable/AM in src)
- AM.forceMove(T)
- update_icon()
-
-/obj/structure/bodycontainer/proc/close()
- playsound(src, 'sound/blank.ogg', 5, TRUE)
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- for(var/atom/movable/AM in connected.loc)
- if(!AM.anchored || AM == connected)
- if(ismob(AM) && !isliving(AM))
- continue
- AM.forceMove(src)
- recursive_organ_check(src)
- update_icon()
-
-/obj/structure/bodycontainer/get_remote_view_fullscreens(mob/user)
- if(user.stat == DEAD || !(user.sight & (SEEOBJS|SEEMOBS)))
- user.overlay_fullscreen("remote_view", /atom/movable/screen/fullscreen/impaired, 2)
-/*
- * Morgue
- */
-/obj/structure/bodycontainer/morgue
- name = "morgue"
- desc = ""
- icon_state = "morgue1"
- dir = EAST
- var/beeper = TRUE
- var/beep_cooldown = 50
- var/next_beep = 0
-
-/obj/structure/bodycontainer/morgue/Initialize()
- . = ..()
- connected = new/obj/structure/tray/m_tray(src)
- connected.connected = src
-
-/obj/structure/bodycontainer/morgue/examine(mob/user)
- . = ..()
- . += "The speaker is [beeper ? "enabled" : "disabled"]. Alt-click to toggle it."
-
-/obj/structure/bodycontainer/morgue/AltClick(mob/user)
- ..()
- if(!user.canUseTopic(src, TRUE))
- return
- beeper = !beeper
- to_chat(user, "I turn the speaker function [beeper ? "on" : "off"].")
-
-/obj/structure/bodycontainer/morgue/update_icon()
- if (!connected || connected.loc != src) // Open or tray is gone.
- icon_state = "morgue0"
- else
- if(contents.len == 1) // Empty
- icon_state = "morgue1"
- else
- icon_state = "morgue2" // Dead, brainded mob.
- var/list/compiled = recursive_mob_check(src, 0, 0) // Search for mobs in all contents.
- if(!length(compiled)) // No mobs?
- icon_state = "morgue3"
- return
-
- for(var/mob/living/M in compiled)
- var/mob/living/mob_occupant = get_mob_or_brainmob(M)
- if(mob_occupant.client && !mob_occupant.suiciding && !(HAS_TRAIT(mob_occupant, TRAIT_BADDNA)) && !mob_occupant.hellbound)
- icon_state = "morgue4" // Cloneable
- if(mob_occupant.stat == DEAD && beeper)
- if(world.time > next_beep)
- playsound(src, 'sound/blank.ogg', 50, FALSE) //Clone them you blind fucks
- next_beep = world.time + beep_cooldown
- break
-
-
-/obj/item/paper/guides/jobs/medical/morgue
- name = "morgue memo"
- info = "Since this station's medbay never seems to fail to be staffed by the mindless monkeys meant for genetics experiments, I'm leaving a reminder here for anyone handling the pile of cadavers the quacks are sure to leave.
Red lights mean there's a plain ol' dead body inside.
Yellow lights mean there's non-body objects inside.
Probably stuff pried off a corpse someone grabbed, or if you're lucky it's stashed booze.
Green lights mean the morgue system detects the body may be able to be cloned.
I don't know how that works, but keep it away from the kitchen and go yell at the geneticists.
- CentCom medical inspector"
-
-/*
- * Crematorium
- */
-GLOBAL_LIST_EMPTY(crematoriums)
-/obj/structure/bodycontainer/crematorium
- name = "crematorium"
- desc = ""
- icon_state = "crema1"
- dir = SOUTH
- var/id = 1
-
-/obj/structure/bodycontainer/crematorium/Destroy()
- GLOB.crematoriums.Remove(src)
- return ..()
-
-/obj/structure/bodycontainer/crematorium/New()
- GLOB.crematoriums.Add(src)
- ..()
-
-/obj/structure/bodycontainer/crematorium/Initialize()
- . = ..()
- connected = new /obj/structure/tray/c_tray(src)
- connected.connected = src
-
-/obj/structure/bodycontainer/crematorium/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
- id = "[idnum][id]"
-
-/obj/structure/bodycontainer/crematorium/update_icon()
- if(!connected || connected.loc != src)
- icon_state = "crema0"
- else
-
- if(src.contents.len > 1)
- src.icon_state = "crema2"
- else
- src.icon_state = "crema1"
-
- if(locked)
- src.icon_state = "crema_active"
-
- return
-
-/obj/structure/bodycontainer/crematorium/proc/cremate(mob/user)
- if(locked)
- return //don't let you cremate something twice or w/e
- // Make sure we don't delete the actual morgue and its tray
- var/list/conts = GetAllContents() - src - connected
-
- if(!conts.len)
- audible_message("I hear a hollow crackle.")
- return
-
- else
- audible_message("I hear a roar as the crematorium activates.")
-
- locked = TRUE
- update_icon()
-
- for(var/mob/living/M in conts)
- if (M.stat != DEAD)
- M.emote("scream")
- if(user)
- log_combat(user, M, "cremated")
- else
- M.log_message("was cremated", LOG_ATTACK)
-
- M.death(1)
- if(M) //some animals get automatically deleted on death.
- M.ghostize()
- qdel(M)
-
- for(var/obj/O in conts) //conts defined above, ignores crematorium and tray
- qdel(O)
-
- if(!locate(/obj/item/ash) in get_step(src, dir))//prevent pile-up
- new/obj/item/ash(src)
-
- sleep(30)
-
- if(!QDELETED(src))
- locked = FALSE
- update_icon()
- playsound(src.loc, 'sound/blank.ogg', 50, TRUE) //you horrible people
-
-/obj/structure/bodycontainer/crematorium/creamatorium
- name = "creamatorium"
- desc = ""
-
-/obj/structure/bodycontainer/crematorium/creamatorium/cremate(mob/user)
- var/list/icecreams = new()
- for(var/i_scream in GetAllContents(/mob/living))
- var/obj/item/reagent_containers/food/snacks/icecream/IC = new()
- IC.set_cone_type("waffle")
- IC.add_mob_flavor(i_scream)
- icecreams += IC
- . = ..()
- for(var/obj/IC in icecreams)
- IC.forceMove(src)
-
-/*
- * Generic Tray
- * Parent class for morguetray and crematoriumtray
- * For overriding only
- */
-/obj/structure/tray
- icon = 'icons/obj/stationobjs.dmi'
- density = TRUE
- var/obj/structure/bodycontainer/connected = null
- anchored = TRUE
- pass_flags = LETPASSTHROW
- max_integrity = 350
-
-/obj/structure/tray/Destroy()
- if(connected)
- connected.connected = null
- connected.update_icon()
- connected = null
- return ..()
-
-/obj/structure/tray/deconstruct(disassembled = TRUE)
- new /obj/item/stack/sheet/metal (loc, 2)
- qdel(src)
-
-/obj/structure/tray/attack_paw(mob/user)
- return attack_hand(user)
-
-/obj/structure/tray/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- if (src.connected)
- connected.close()
- add_fingerprint(user)
- else
- to_chat(user, "That's not connected to anything!")
-
-/obj/structure/tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user)
- if(!ismovableatom(O) || O.anchored || !Adjacent(user) || !user.Adjacent(O) || O.loc == user)
- return
- if(!ismob(O))
- if(!istype(O, /obj/structure/closet/body_bag))
- return
- else
- var/mob/M = O
- if(M.buckled)
- return
- if(!ismob(user) || user.incapacitated())
- return
- if(isliving(user))
- var/mob/living/L = user
- if(!(L.mobility_flags & MOBILITY_STAND))
- return
- O.forceMove(src.loc)
- if (user != O)
- visible_message("[user] stuffs [O] into [src].")
- return
-
-/*
- * Crematorium tray
- */
-/obj/structure/tray/c_tray
- name = "crematorium tray"
- desc = ""
- icon_state = "cremat"
-
-/*
- * Morgue tray
- */
-/obj/structure/tray/m_tray
- name = "morgue tray"
- desc = ""
- icon_state = "morguet"
-
-/obj/structure/tray/m_tray/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSTABLE))
- return 1
- if(locate(/obj/structure/table) in get_turf(mover))
- return 1
- else
- return 0
-
-/obj/structure/tray/m_tray/CanAStarPass(ID, dir, caller)
- . = !density
- if(ismovableatom(caller))
- var/atom/movable/mover = caller
- . = . || (mover.pass_flags & PASSTABLE)
diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm
deleted file mode 100644
index ead9dc932d..0000000000
--- a/code/game/objects/structures/musician.dm
+++ /dev/null
@@ -1,386 +0,0 @@
-
-#define MUSICIAN_HEARCHECK_MINDELAY 4
-#define MUSIC_MAXLINES 300
-#define MUSIC_MAXLINECHARS 50
-
-/datum/song
- var/name = "Untitled"
- var/list/lines = new()
- var/tempo = 5 // delay between notes
-
- var/playing = 0 // if we're playing
- var/help = 0 // if help is open
- var/edit = 1 // if we're in editing mode
- var/repeat = 0 // number of times remaining to repeat
- var/max_repeats = 10 // maximum times we can repeat
-
- var/instrumentDir = "piano" // the folder with the sounds
- var/instrumentExt = "ogg" // the file extension
- var/obj/instrumentObj = null // the associated obj playing the sound
- var/last_hearcheck = 0
- var/list/hearing_mobs
-
-/datum/song/New(dir, obj, ext = "ogg")
- tempo = sanitize_tempo(tempo)
- instrumentDir = dir
- instrumentObj = obj
- instrumentExt = ext
-
-/datum/song/Destroy()
- instrumentObj = null
- return ..()
-
-// note is a number from 1-7 for A-G
-// acc is either "b", "n", or "#"
-// oct is 1-8 (or 9 for C)
-/datum/song/proc/playnote(mob/user, note, acc as text, oct)
- // handle accidental -> B<>C of E<>F
- if(acc == "b" && (note == 3 || note == 6)) // C or F
- if(note == 3)
- oct--
- note--
- acc = "n"
- else if(acc == "#" && (note == 2 || note == 5)) // B or E
- if(note == 2)
- oct++
- note++
- acc = "n"
- else if(acc == "#" && (note == 7)) //G#
- note = 1
- acc = "b"
- else if(acc == "#") // mass convert all sharps to flats, octave jump already handled
- acc = "b"
- note++
-
- // check octave, C is allowed to go to 9
- if(oct < 1 || (note == 3 ? oct > 9 : oct > 8))
- return
-
- // now generate name
- var/soundfile = "sound/instruments/[instrumentDir]/[ascii2text(note+64)][acc][oct].[instrumentExt]"
- soundfile = file(soundfile)
- // make sure the note exists
- if(!fexists(soundfile))
- return
- // and play
- var/turf/source = get_turf(instrumentObj)
- if((world.time - MUSICIAN_HEARCHECK_MINDELAY) > last_hearcheck)
- LAZYCLEARLIST(hearing_mobs)
- for(var/mob/M in get_hearers_in_view(15, source))
- LAZYADD(hearing_mobs, M)
- last_hearcheck = world.time
-
- var/sound/music_played = sound(soundfile)
- for(var/i in hearing_mobs)
- var/mob/M = i
- if(HAS_TRAIT(user, TRAIT_MUSICIAN) && isliving(M))
- var/mob/living/L = M
- L.apply_status_effect(STATUS_EFFECT_GOOD_MUSIC)
- if(!M.client || !(M.client.prefs.toggles & SOUND_INSTRUMENTS))
- continue
- M.playsound_local(source, null, 100, falloff = 5, S = music_played)
-
-/datum/song/proc/updateDialog(mob/user)
- instrumentObj.updateDialog() // assumes it's an object in world, override if otherwise
-
-/datum/song/proc/shouldStopPlaying(mob/user)
- if(instrumentObj)
- if(!user.canUseTopic(instrumentObj, BE_CLOSE, FALSE, NO_TK))
- return TRUE
- return !instrumentObj.anchored // add special cases to stop in subclasses
- else
- return TRUE
-
-/datum/song/proc/playsong(mob/user)
- while(repeat >= 0)
- var/cur_oct[7]
- var/cur_acc[7]
- for(var/i = 1 to 7)
- cur_oct[i] = 3
- cur_acc[i] = "n"
-
- for(var/line in lines)
- for(var/beat in splittext(lowertext(line), ","))
- var/list/notes = splittext(beat, "/")
- for(var/note in splittext(notes[1], "-"))
- if(!playing || shouldStopPlaying(user))//If the instrument is playing, or special case
- playing = FALSE
- hearing_mobs = null
- return
- if(!length(note))
- continue
- var/cur_note = text2ascii(note) - 96
- if(cur_note < 1 || cur_note > 7)
- continue
- for(var/i=2 to length(note))
- var/ni = copytext(note,i,i+1)
- if(!text2num(ni))
- if(ni == "#" || ni == "b" || ni == "n")
- cur_acc[cur_note] = ni
- else if(ni == "s")
- cur_acc[cur_note] = "#" // so shift is never required
- else
- cur_oct[cur_note] = text2num(ni)
- if(user.dizziness > 0 && prob(user.dizziness / 2))
- cur_note = CLAMP(cur_note + rand(round(-user.dizziness / 10), round(user.dizziness / 10)), 1, 7)
- if(user.dizziness > 0 && prob(user.dizziness / 5))
- if(prob(30))
- cur_acc[cur_note] = "#"
- else if(prob(42))
- cur_acc[cur_note] = "b"
- else if(prob(75))
- cur_acc[cur_note] = "n"
- playnote(user, cur_note, cur_acc[cur_note], cur_oct[cur_note])
- if(notes.len >= 2 && text2num(notes[2]))
- sleep(sanitize_tempo(tempo / text2num(notes[2])))
- else
- sleep(tempo)
- repeat--
- hearing_mobs = null
- playing = FALSE
- repeat = 0
- updateDialog(user)
-
-/datum/song/proc/interact(mob/user)
- var/dat = ""
-
- if(lines.len > 0)
- dat += "Playback
"
- if(!playing)
- dat += "Play Stop
"
- dat += "Repeat Song: "
- dat += repeat > 0 ? "--" : "--"
- dat += " [repeat] times "
- dat += repeat < max_repeats ? "++" : "++"
- dat += "
"
- else
- dat += "Play Stop
"
- dat += "Repeats left: [repeat]
"
- if(!edit)
- dat += "
Show Editor
"
- else
- dat += "Editing
"
- dat += "Hide Editor"
- dat += " Start a New Song"
- dat += " Import a Song
"
- var/bpm = round(600 / tempo)
- dat += "Tempo: - [bpm] BPM +
"
- var/linecount = 0
- for(var/line in lines)
- linecount += 1
- dat += "Line [linecount]: Edit X [line]
"
- dat += "Add Line
"
- if(help)
- dat += "Hide Help
"
- dat += {"
- Lines are a series of chords, separated by commas (,), each with notes separated by hyphens (-).
- Every note in a chord will play together, with chord timed by the tempo.
-
- Notes are played by the names of the note, and optionally, the accidental, and/or the octave number.
- By default, every note is natural and in octave 3. Defining otherwise is remembered for each note.
- Example: C,D,E,F,G,A,B will play a C major scale.
- After a note has an accidental placed, it will be remembered: C,C4,C,C3 is C3,C4,C4,C3
- Chords can be played simply by seperating each note with a hyphon: A-C#,Cn-E,E-G#,Gn-B
- A pause may be denoted by an empty chord: C,E,,C,G
- To make a chord be a different time, end it with /x, where the chord length will be length
- defined by tempo / x: C,G/2,E/4
- Combined, an example is: E-E4/4,F#/2,G#/8,B/8,E3-E4/4
-
- Lines may be up to [MUSIC_MAXLINECHARS] characters.
- A song may only contain up to [MUSIC_MAXLINES] lines.
- "}
- else
- dat += "Show Help
"
-
- var/datum/browser/popup = new(user, "instrument", instrumentObj.name, 700, 500)
- popup.set_content(dat)
- popup.set_title_image(user.browse_rsc_icon(instrumentObj.icon, instrumentObj.icon_state))
- popup.open()
-
-/datum/song/proc/ParseSong(text)
- set waitfor = FALSE
- //split into lines
- lines = splittext(text, "\n")
- if(lines.len)
- if(copytext(lines[1],1,6) == "BPM: ")
- tempo = sanitize_tempo(600 / text2num(copytext(lines[1],6)))
- lines.Cut(1,2)
- else
- tempo = sanitize_tempo(5) // default 120 BPM
- if(lines.len > MUSIC_MAXLINES)
- to_chat(usr, "Too many lines!")
- lines.Cut(MUSIC_MAXLINES + 1)
- var/linenum = 1
- for(var/l in lines)
- if(length(l) > MUSIC_MAXLINECHARS)
- to_chat(usr, "Line [linenum] too long!")
- lines.Remove(l)
- else
- linenum++
- updateDialog(usr) // make sure updates when complete
-
-/datum/song/Topic(href, href_list)
- if(!usr.canUseTopic(instrumentObj, BE_CLOSE, FALSE, NO_TK))
- usr << browse(null, "window=instrument")
- usr.unset_machine()
- return
-
- instrumentObj.add_fingerprint(usr)
-
- if(href_list["newsong"])
- lines = new()
- tempo = sanitize_tempo(5) // default 120 BPM
- name = ""
-
- else if(href_list["import"])
- var/t = ""
- do
- t = html_encode(input(usr, "Please paste the entire song, formatted:", text("[]", name), t) as message)
- if(!usr.canUseTopic(instrumentObj, BE_CLOSE, FALSE, NO_TK))
- return
-
- if(length(t) >= MUSIC_MAXLINES * MUSIC_MAXLINECHARS)
- var/cont = input(usr, "Your message is too long! Would you like to continue editing it?", "", "yes") in list("yes", "no")
- if(!usr.canUseTopic(instrumentObj, BE_CLOSE, FALSE, NO_TK))
- return
- if(cont == "no")
- break
- while(length(t) > MUSIC_MAXLINES * MUSIC_MAXLINECHARS)
- ParseSong(t)
-
- else if(href_list["help"])
- help = text2num(href_list["help"]) - 1
-
- else if(href_list["edit"])
- edit = text2num(href_list["edit"]) - 1
-
- if(href_list["repeat"]) //Changing this from a toggle to a number of repeats to avoid infinite loops.
- if(playing)
- return //So that people cant keep adding to repeat. If the do it intentionally, it could result in the server crashing.
- repeat += round(text2num(href_list["repeat"]))
- if(repeat < 0)
- repeat = 0
- if(repeat > max_repeats)
- repeat = max_repeats
-
- else if(href_list["tempo"])
- tempo = sanitize_tempo(tempo + text2num(href_list["tempo"]))
-
- else if(href_list["play"])
- playing = TRUE
- INVOKE_ASYNC(src, PROC_REF(playsong), usr)
-
- else if(href_list["newline"])
- var/newline = html_encode(input("Enter your line: ", instrumentObj.name) as text|null)
- if(!newline || !usr.canUseTopic(instrumentObj, BE_CLOSE, FALSE, NO_TK))
- return
- if(lines.len > MUSIC_MAXLINES)
- return
- if(length(newline) > MUSIC_MAXLINECHARS)
- newline = copytext(newline, 1, MUSIC_MAXLINECHARS)
- lines.Add(newline)
-
- else if(href_list["deleteline"])
- var/num = round(text2num(href_list["deleteline"]))
- if(num > lines.len || num < 1)
- return
- lines.Cut(num, num+1)
-
- else if(href_list["modifyline"])
- var/num = round(text2num(href_list["modifyline"]),1)
- var/content = html_encode(input("Enter your line: ", instrumentObj.name, lines[num]) as text|null)
- if(!content || !usr.canUseTopic(instrumentObj, BE_CLOSE, FALSE, NO_TK))
- return
- if(length(content) > MUSIC_MAXLINECHARS)
- content = copytext(content, 1, MUSIC_MAXLINECHARS)
- if(num > lines.len || num < 1)
- return
- lines[num] = content
-
- else if(href_list["stop"])
- playing = FALSE
- hearing_mobs = null
-
- updateDialog(usr)
- return
-
-/datum/song/proc/sanitize_tempo(new_tempo)
- new_tempo = abs(new_tempo)
- return max(round(new_tempo, world.tick_lag), world.tick_lag)
-
-// subclass for handheld instruments, like violin
-/datum/song/handheld
-
-/datum/song/handheld/updateDialog(mob/user)
- instrumentObj.interact(user)
-
-/datum/song/handheld/shouldStopPlaying()
- if(instrumentObj)
- return !isliving(instrumentObj.loc)
- else
- return TRUE
-
-
-//////////////////////////////////////////////////////////////////////////
-
-
-/obj/structure/piano
- name = "space minimoog"
- icon = 'icons/obj/musician.dmi'
- icon_state = "minimoog"
- anchored = TRUE
- density = TRUE
- var/datum/song/song
-
-/obj/structure/piano/unanchored
- anchored = FALSE
-
-/obj/structure/piano/Initialize()
- . = ..()
- song = new("piano", src)
-
- if(prob(50) && icon_state == initial(icon_state))
- name = "space minimoog"
- desc = ""
- icon_state = "minimoog"
- else
- name = "space piano"
- desc = ""
- icon_state = "piano"
-
-/obj/structure/piano/Destroy()
- qdel(song)
- song = null
- return ..()
-
-/obj/structure/piano/Initialize(mapload)
- . = ..()
- if(mapload)
- song.tempo = song.sanitize_tempo(song.tempo) // tick_lag isn't set when the map is loaded
-
-/obj/structure/piano/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- interact(user)
-
-/obj/structure/piano/attack_paw(mob/user)
- return attack_hand(user)
-
-/obj/structure/piano/interact(mob/user)
- ui_interact(user)
-
-/obj/structure/piano/ui_interact(mob/user)
- if(!user || !anchored)
- return
-
- if(!user.IsAdvancedToolUser())
- to_chat(user, "I don't have the dexterity to do this!")
- return 1
- user.set_machine(src)
- song.interact(user)
-
-/obj/structure/piano/wrench_act(mob/living/user, obj/item/I)
- ..()
- default_unfasten_wrench(user, I, 40)
- return TRUE
diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm
index 77e15b8f41..22a2e4cb89 100644
--- a/code/game/objects/structures/noticeboard.dm
+++ b/code/game/objects/structures/noticeboard.dm
@@ -72,7 +72,7 @@
return
var/obj/item/P = locate(href_list["write"]) in contents
if(istype(P) && P.loc == src)
- var/obj/item/I = usr.is_holding_item_of_type(/obj/item/pen)
+ var/obj/item/I = usr.is_holding_item_of_type(/obj/item/natural/feather)
if(I)
add_fingerprint(usr)
P.attackby(I, usr)
@@ -83,50 +83,3 @@
var/obj/item/I = locate(href_list["read"]) in contents
if(istype(I) && I.loc == src)
usr.examinate(I)
-
-/obj/structure/noticeboard/deconstruct(disassembled = TRUE)
- if(!(flags_1 & NODECONSTRUCT_1))
- new /obj/item/stack/sheet/metal (loc, 1)
- qdel(src)
-
-// Notice boards for the heads of staff (plus the qm)
-
-/obj/structure/noticeboard/captain
- name = "Captain's Notice Board"
- desc = ""
- req_access = list(ACCESS_CAPTAIN)
-
-/obj/structure/noticeboard/hop
- name = "Head of Personnel's Notice Board"
- desc = ""
- req_access = list(ACCESS_HOP)
-
-/obj/structure/noticeboard/ce
- name = "Chief Engineer's Notice Board"
- desc = ""
- req_access = list(ACCESS_CE)
-
-/obj/structure/noticeboard/hos
- name = "Head of Security's Notice Board"
- desc = ""
- req_access = list(ACCESS_HOS)
-
-/obj/structure/noticeboard/cmo
- name = "Chief Medical Officer's Notice Board"
- desc = ""
- req_access = list(ACCESS_CMO)
-
-/obj/structure/noticeboard/rd
- name = "Research Director's Notice Board"
- desc = ""
- req_access = list(ACCESS_RD)
-
-/obj/structure/noticeboard/qm
- name = "Quartermaster's Notice Board"
- desc = ""
- req_access = list(ACCESS_QM)
-
-/obj/structure/noticeboard/staff
- name = "Staff Notice Board"
- desc = ""
- req_access = list(ACCESS_HEADS)
diff --git a/code/game/objects/structures/plastic_flaps.dm b/code/game/objects/structures/plastic_flaps.dm
index dec188ea4c..eff59096ec 100644
--- a/code/game/objects/structures/plastic_flaps.dm
+++ b/code/game/objects/structures/plastic_flaps.dm
@@ -38,19 +38,6 @@
else
return TRUE
-/obj/structure/plasticflaps/wirecutter_act(mob/living/user, obj/item/W)
- . = ..()
- if(!anchored)
- user.visible_message("[user] cuts apart [src].", "I start to cut apart [src].", "I hear cutting.")
- if(W.use_tool(src, user, 50, volume=100))
- if(anchored)
- return TRUE
- to_chat(user, "I cut apart [src].")
- var/obj/item/stack/sheet/plastic/five/P = new(loc)
- P.add_fingerprint(user)
- qdel(src)
- return TRUE
-
/obj/structure/plasticflaps/proc/check_anchored_state(check_anchored)
if(anchored != check_anchored)
return FALSE
@@ -74,22 +61,12 @@
if(istype(A, /obj/structure/bed) && (B.has_buckled_mobs() || B.density))//if it's a bed/chair and is dense or someone is buckled, it will not pass
return FALSE
- if(istype(A, /obj/structure/closet/cardboard))
- var/obj/structure/closet/cardboard/C = A
- if(C.move_delay)
- return FALSE
-
else if(isliving(A)) // You Shall Not Pass!
var/mob/living/M = A
if((M.mobility_flags & MOBILITY_STAND) && !M.ventcrawler && M.mob_size != MOB_SIZE_TINY) //If your not laying down, or a ventcrawler or a small creature, no pass.
return FALSE
return ..()
-/obj/structure/plasticflaps/deconstruct(disassembled = TRUE)
- if(!(flags_1 & NODECONSTRUCT_1))
- new /obj/item/stack/sheet/plastic/five(loc)
- qdel(src)
-
/obj/structure/plasticflaps/Initialize()
. = ..()
air_update_turf(TRUE)
diff --git a/code/game/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm
deleted file mode 100644
index 8bc459f5ae..0000000000
--- a/code/game/objects/structures/showcase.dm
+++ /dev/null
@@ -1,142 +0,0 @@
-#define SHOWCASE_CONSTRUCTED 1
-#define SHOWCASE_SCREWDRIVERED 2
-
-/*Completely generic structures for use by mappers to create fake objects, i.e. display rooms*/
-/obj/structure/showcase
- name = "showcase"
- icon = 'icons/obj/stationobjs.dmi'
- icon_state = "showcase_1"
- desc = ""
- density = TRUE
- anchored = TRUE
- var/deconstruction_state = SHOWCASE_CONSTRUCTED
-
-/obj/structure/showcase/fakeid
- name = "\improper CentCom identification console"
- desc = ""
- icon = 'icons/obj/computer.dmi'
- icon_state = "computer"
-
-/obj/structure/showcase/fakeid/Initialize()
- . = ..()
- add_overlay("id")
- add_overlay("id_key")
-
-/obj/structure/showcase/fakesec
- name = "\improper CentCom security records"
- desc = ""
- icon = 'icons/obj/computer.dmi'
- icon_state = "computer"
-
-/obj/structure/showcase/fakesec/Initialize()
- . = ..()
- add_overlay("security")
- add_overlay("security_key")
-
-/obj/structure/showcase/horrific_experiment
- name = "horrific experiment"
- desc = ""
- icon = 'icons/obj/machines/cloning.dmi'
- icon_state = "pod_g"
-
-/obj/structure/showcase/machinery/oldpod
- name = "damaged cryogenic pod"
- desc = ""
- icon = 'icons/obj/machines/sleeper.dmi'
- icon_state = "sleeper-open"
-
-/obj/structure/showcase/machinery/oldpod/used
- name = "opened cryogenic pod"
- desc = ""
-
-/obj/structure/showcase/cyborg/old
- name = "Cyborg Statue"
- desc = ""
- icon = 'icons/mob/robots.dmi'
- icon_state = "robot_old"
- density = FALSE
-
-/obj/structure/showcase/mecha/marauder
- name = "combat mech exhibit"
- desc = ""
- icon = 'icons/mecha/mecha.dmi'
- icon_state = "marauder"
-
-/obj/structure/showcase/mecha/ripley
- name = "construction mech exhibit"
- desc = ""
- icon = 'icons/mecha/mecha.dmi'
- icon_state = "firefighter"
-
-/obj/structure/showcase/machinery/implanter
- name = "Nanotrasen automated mindshield implanter exhibit"
- desc = ""
- icon = 'icons/obj/machines/implantchair.dmi'
- icon_state = "implantchair"
-
-/obj/structure/showcase/machinery/microwave
- name = "Nanotrasen-brand microwave"
- desc = ""
- icon = 'icons/obj/kitchen.dmi'
- icon_state = "mw"
-
-/obj/structure/showcase/machinery/cloning_pod
- name = "cloning pod exhibit"
- desc = ""
- icon = 'icons/obj/machines/cloning.dmi'
- icon_state = "pod_0"
-
-/obj/structure/showcase/perfect_employee
- name = "'Perfect Man' employee exhibit"
- desc = ""
-
-/obj/structure/showcase/machinery/tv
- name = "Nanotrasen corporate newsfeed"
- desc = ""
- icon = 'icons/obj/computer.dmi'
- icon_state = "television"
-
-/obj/structure/showcase/machinery/signal_decrypter
- name = "subsystem signal decrypter"
- desc = ""
- icon = 'icons/obj/machines/telecomms.dmi'
- icon_state = "processor"
-
-
-
-//Deconstructing
-//Showcases can be any sprite, so it makes sense that they can't be constructed.
-//However if a player wants to move an existing showcase or remove one, this is for that.
-
-/obj/structure/showcase/attackby(obj/item/W, mob/user)
- if(W.tool_behaviour == TOOL_SCREWDRIVER && !anchored)
- if(deconstruction_state == SHOWCASE_SCREWDRIVERED)
- to_chat(user, "I screw the screws back into the showcase.")
- W.play_tool_sound(src, 100)
- deconstruction_state = SHOWCASE_CONSTRUCTED
- else if (deconstruction_state == SHOWCASE_CONSTRUCTED)
- to_chat(user, "I unscrew the screws.")
- W.play_tool_sound(src, 100)
- deconstruction_state = SHOWCASE_SCREWDRIVERED
-
- if(W.tool_behaviour == TOOL_CROWBAR && deconstruction_state == SHOWCASE_SCREWDRIVERED)
- if(W.use_tool(src, user, 20, volume=100))
- to_chat(user, "I start to crowbar the showcase apart...")
- new /obj/item/stack/sheet/metal(drop_location(), 4)
- qdel(src)
-
- if(deconstruction_state == SHOWCASE_CONSTRUCTED && default_unfasten_wrench(user, W))
- return
-
-//Feedback is given in examine because showcases can basically have any sprite assigned to them
-
-/obj/structure/showcase/examine(mob/user)
- . = ..()
-
- switch(deconstruction_state)
- if(SHOWCASE_CONSTRUCTED)
- . += "The showcase is fully constructed."
- if(SHOWCASE_SCREWDRIVERED)
- . += "The showcase has its screws loosened."
- else
- . += "If you see this, something is wrong."
diff --git a/code/game/objects/structures/shower.dm b/code/game/objects/structures/shower.dm
deleted file mode 100644
index 613c4f4746..0000000000
--- a/code/game/objects/structures/shower.dm
+++ /dev/null
@@ -1,233 +0,0 @@
-#define SHOWER_FREEZING "freezing"
-#define SHOWER_NORMAL "normal"
-#define SHOWER_BOILING "boiling"
-
-/obj/machinery/shower
- name = "shower"
- desc = ""
- icon = 'icons/obj/watercloset.dmi'
- icon_state = "shower"
- density = FALSE
- use_power = NO_POWER_USE
- var/on = FALSE
- var/current_temperature = SHOWER_NORMAL
- var/datum/looping_sound/showering/soundloop
- var/reagent_id = /datum/reagent/water
- var/reaction_volume = 200
-
-/obj/machinery/shower/Initialize()
- . = ..()
- create_reagents(reaction_volume)
- reagents.add_reagent(reagent_id, reaction_volume)
-
- soundloop = new(list(src), FALSE)
-
-/obj/machinery/shower/Destroy()
- QDEL_NULL(soundloop)
- QDEL_NULL(reagents)
- return ..()
-
-/obj/machinery/shower/interact(mob/M)
- on = !on
- update_icon()
- handle_mist()
- add_fingerprint(M)
- if(on)
- START_PROCESSING(SSmachines, src)
- process()
- soundloop.start()
- else
- soundloop.stop()
- if(isopenturf(loc))
- var/turf/open/tile = loc
- tile.MakeSlippery(TURF_WET_WATER, min_wet_time = 5 SECONDS, wet_time_to_add = 1 SECONDS)
-
-/obj/machinery/shower/attackby(obj/item/I, mob/user, params)
- if(I.tool_behaviour == TOOL_ANALYZER)
- to_chat(user, "The water temperature seems to be [current_temperature].")
- else
- return ..()
-
-/obj/machinery/shower/wrench_act(mob/living/user, obj/item/I)
- ..()
- to_chat(user, "I begin to adjust the temperature valve with \the [I]...")
- if(I.use_tool(src, user, 50))
- switch(current_temperature)
- if(SHOWER_NORMAL)
- current_temperature = SHOWER_FREEZING
- if(SHOWER_FREEZING)
- current_temperature = SHOWER_BOILING
- if(SHOWER_BOILING)
- current_temperature = SHOWER_NORMAL
- user.visible_message("[user] adjusts the shower with \the [I].", "I adjust the shower with \the [I] to [current_temperature] temperature.")
- user.log_message("has wrenched a shower at [AREACOORD(src)] to [current_temperature].", LOG_ATTACK)
- add_hiddenprint(user)
- handle_mist()
- return TRUE
-
-
-/obj/machinery/shower/update_icon()
- cut_overlays()
-
- if(on)
- add_overlay(mutable_appearance('icons/obj/watercloset.dmi', "water", ABOVE_MOB_LAYER))
-
-/obj/machinery/shower/proc/handle_mist()
- // If there is no mist, and the shower was turned on (on a non-freezing temp): make mist in 5 seconds
- // If there was already mist, and the shower was turned off (or made cold): remove the existing mist in 25 sec
- var/obj/effect/mist/mist = locate() in loc
- if(!mist && on && current_temperature != SHOWER_FREEZING)
- addtimer(CALLBACK(src, PROC_REF(make_mist)), 5 SECONDS)
-
- if(mist && (!on || current_temperature == SHOWER_FREEZING))
- addtimer(CALLBACK(src, PROC_REF(clear_mist)), 25 SECONDS)
-
-/obj/machinery/shower/proc/make_mist()
- var/obj/effect/mist/mist = locate() in loc
- if(!mist && on && current_temperature != SHOWER_FREEZING)
- new /obj/effect/mist(loc)
-
-/obj/machinery/shower/proc/clear_mist()
- var/obj/effect/mist/mist = locate() in loc
- if(mist && (!on || current_temperature == SHOWER_FREEZING))
- qdel(mist)
-
-
-/obj/machinery/shower/Crossed(atom/movable/AM)
- ..()
- if(on)
- wash_atom(AM)
-
-/proc/wash_atom(atom/A, clean = CLEAN_WEAK)
- SEND_SIGNAL(A, COMSIG_COMPONENT_CLEAN_ACT, clean)
-//eagents.reaction(A, TOUCH, reaction_volume)
-
- if(isobj(A))
- wash_obj(A,clean)
- var/obj/O = A
- O.wash_act(clean)
- else if(isturf(A))
- wash_turf(A,clean)
- else if(isliving(A))
- wash_mob(A,clean)
-// check_heat(A)
-
-// contamination_cleanse(A)
-
-/obj/proc/wash_act(clean = CLEAN_WEAK)
- return
-
-/proc/wash_obj(obj/O, clean = CLEAN_WEAK)
- . = SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, clean)
-// O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
-
-
-/proc/wash_turf(turf/tile, clean = CLEAN_WEAK)
- SEND_SIGNAL(tile, COMSIG_COMPONENT_CLEAN_ACT, clean)
-// tile.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
-
-
-/proc/wash_mob(mob/living/L, clean = CLEAN_WEAK)
- SEND_SIGNAL(L, COMSIG_COMPONENT_CLEAN_ACT, clean)
-// L.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- if(iscarbon(L))
- var/mob/living/carbon/M = L
- . = TRUE
-
- for(var/obj/item/I in M.held_items)
- wash_obj(I)
-
- if(M.back && wash_obj(M.back))
- M.update_inv_back(0)
-
- var/list/obscured = M.check_obscured_slots()
-
- if(M.head && wash_obj(M.head,clean))
- M.update_inv_head()
-
- if(M.glasses && !(SLOT_GLASSES in obscured) && wash_obj(M.glasses,clean))
- M.update_inv_glasses()
-
- if(M.wear_mask && !(SLOT_WEAR_MASK in obscured) && wash_obj(M.wear_mask,clean))
- M.update_inv_wear_mask()
-
- if(M.ears && !(HIDEEARS in obscured) && wash_obj(M.ears,clean))
- M.update_inv_ears()
-
- if(M.wear_neck && !(SLOT_NECK in obscured) && wash_obj(M.wear_neck,clean))
- M.update_inv_neck()
-
- if(M.shoes && !(HIDESHOES in obscured) && wash_obj(M.shoes,clean))
- M.update_inv_shoes()
-
- var/washgloves = FALSE
- if(M.gloves && !(HIDEGLOVES in obscured))
- washgloves = TRUE
-
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
-
- if(H.wear_armor && wash_obj(H.wear_armor,clean))
- H.update_inv_armor()
- else if(H.wear_shirt && wash_obj(H.wear_shirt,clean))
- H.update_inv_shirt()
- else if(H.wear_pants && wash_obj(H.wear_pants,clean))
- H.update_inv_pants()
-
- if(washgloves)
- SEND_SIGNAL(H, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
-
- if(!H.is_mouth_covered())
- H.lip_style = null
- H.update_body()
-
- if(H.belt && wash_obj(H.belt,clean))
- H.update_inv_belt()
- else
- SEND_SIGNAL(M, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
- else
- SEND_SIGNAL(L, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
-
-/obj/machinery/shower/proc/contamination_cleanse(atom/thing)
- var/datum/component/radioactive/healthy_green_glow = thing.GetComponent(/datum/component/radioactive)
- if(!healthy_green_glow || QDELETED(healthy_green_glow))
- return
- var/strength = healthy_green_glow.strength
- if(strength <= RAD_BACKGROUND_RADIATION)
- qdel(healthy_green_glow)
- return
- healthy_green_glow.strength -= max(0, (healthy_green_glow.strength - (RAD_BACKGROUND_RADIATION * 2)) * 0.2)
-
-/obj/machinery/shower/process()
- if(on)
- wash_atom(loc)
- for(var/AM in loc)
- wash_atom(AM)
- else
- return PROCESS_KILL
-
-/obj/machinery/shower/deconstruct(disassembled = TRUE)
- new /obj/item/stack/sheet/metal(drop_location(), 3)
- qdel(src)
-
-/obj/machinery/shower/proc/check_heat(mob/living/L)
- var/mob/living/carbon/C = L
-
- if(current_temperature == SHOWER_FREEZING)
- if(iscarbon(L))
- C.adjust_bodytemperature(-80, 80)
- to_chat(L, "[src] is freezing!")
- else if(current_temperature == SHOWER_BOILING)
- if(iscarbon(L))
- C.adjust_bodytemperature(35, 0, 500)
- L.adjustFireLoss(5)
- to_chat(L, "[src] is searing!")
-
-
-/obj/effect/mist
- name = "mist"
- icon = 'icons/obj/watercloset.dmi'
- icon_state = "mist"
- layer = FLY_LAYER
- anchored = TRUE
- mouse_opacity = MOUSE_OPACITY_TRANSPARENT
diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm
deleted file mode 100644
index 02214771de..0000000000
--- a/code/game/objects/structures/signs/_signs.dm
+++ /dev/null
@@ -1,148 +0,0 @@
-/obj/structure/sign
- icon = 'icons/obj/decals.dmi'
- anchored = TRUE
- opacity = 0
- density = FALSE
- layer = SIGN_LAYER
- max_integrity = 100
- armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
- var/buildable_sign = 1 //unwrenchable and modifiable
- rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
-
-/obj/structure/sign/basic
- name = "blank sign"
- desc = ""
- icon_state = "backing"
-
-/obj/structure/sign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
- switch(damage_type)
- if(BRUTE)
- if(damage_amount)
- playsound(src.loc, 'sound/blank.ogg', 80, TRUE)
- else
- playsound(loc, 'sound/blank.ogg', 50, TRUE)
- if(BURN)
- playsound(loc, 'sound/blank.ogg', 80, TRUE)
-
-/obj/structure/sign/attackby(obj/item/I, mob/user, params)
- if(I.tool_behaviour == TOOL_WRENCH && buildable_sign)
- user.visible_message("[user] starts removing [src]...", \
- "I start unfastening [src].")
- I.play_tool_sound(src)
- if(I.use_tool(src, user, 40))
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- user.visible_message("[user] unfastens [src].", \
- "I unfasten [src].")
- var/obj/item/sign_backing/SB = new (get_turf(user))
- SB.icon_state = icon_state
- SB.sign_path = type
- SB.setDir(dir)
- qdel(src)
- return
- else if(istype(I, /obj/item/pen) && buildable_sign)
- var/list/sign_types = list("Secure Area", "Biohazard", "High Voltage", "Radiation", "Hard Vacuum Ahead", "Disposal: Leads To Space", "Danger: Fire", "No Smoking", "Medbay", "Science", "Chemistry", \
- "Hydroponics", "Xenobiology", "Test Chamber","Firing Range", "Extreme Cold", "Extreme Heat", "Gas Mask", "Nanites Lab", "Maintenance", "Reactive Chemicals")
- var/obj/structure/sign/sign_type
- switch(input(user, "Select a sign type.", "Sign Customization") as null|anything in sortList(sign_types))
- if("Blank")
- sign_type = /obj/structure/sign/basic
- if("Secure Area")
- sign_type = /obj/structure/sign/warning/securearea
- if("Biohazard")
- sign_type = /obj/structure/sign/warning/biohazard
- if("High Voltage")
- sign_type = /obj/structure/sign/warning/electricshock
- if("Radiation")
- sign_type = /obj/structure/sign/warning/radiation
- if("Hard Vacuum Ahead")
- sign_type = /obj/structure/sign/warning/vacuum
- if("Disposal: Leads To Space")
- sign_type = /obj/structure/sign/warning/deathsposal
- if("Danger: Fire")
- sign_type = /obj/structure/sign/warning/fire
- if("No Smoking")
- sign_type = /obj/structure/sign/warning/nosmoking/circle
- if("Test Chamber")
- sign_type = /obj/structure/sign/warning/testchamber
- if("Firing Range")
- sign_type = /obj/structure/sign/warning/firingrange
- if("Extreme Cold")
- sign_type = /obj/structure/sign/warning/coldtemp
- if("Extreme Heat")
- sign_type = /obj/structure/sign/warning/hottemp
- if("Gas Mask")
- sign_type = /obj/structure/sign/warning/gasmask
- if("Reactive Chemicals")
- sign_type = /obj/structure/sign/warning/chemdiamond
- if("Medbay")
- sign_type = /obj/structure/sign/departments/medbay/alt
- if("Science")
- sign_type = /obj/structure/sign/departments/science
- if("Chemistry")
- sign_type = /obj/structure/sign/departments/chemistry
- if("Hydroponics")
- sign_type = /obj/structure/sign/departments/botany
- if("Xenobiology")
- sign_type = /obj/structure/sign/departments/xenobio
- if("Nanites Lab")
- sign_type = /obj/structure/sign/departments/nanites
- if("Maintenance")
- sign_type = /obj/structure/sign/departments/mait
-
- //Make sure user is adjacent still
- if(!Adjacent(user))
- return
-
- if(!sign_type)
- return
-
- //It's import to clone the pixel layout information
- //Otherwise signs revert to being on the turf and
- //move jarringly
- var/obj/structure/sign/newsign = new sign_type(get_turf(src))
- newsign.pixel_x = pixel_x
- newsign.pixel_y = pixel_y
- qdel(src)
- else
- return ..()
-
-/obj/item/sign_backing
- name = "sign backing"
- desc = ""
- icon = 'icons/obj/decals.dmi'
- icon_state = "backing"
- w_class = WEIGHT_CLASS_NORMAL
- custom_materials = list(/datum/material/plastic = 2000)
- resistance_flags = FLAMMABLE
- var/sign_path = /obj/structure/sign/basic //the type of sign that will be created when placed on a turf
-
-/obj/item/sign_backing/afterattack(atom/target, mob/user, proximity)
- . = ..()
- if(isturf(target) && proximity)
- var/turf/T = target
- user.visible_message("[user] fastens [src] to [T].", \
- "I attach the sign to [T].")
- playsound(T, 'sound/blank.ogg', 50, TRUE)
- var/obj/structure/sign/S = new sign_path(T)
- S.setDir(dir)
- qdel(src)
-
-/obj/item/sign_backing/Move(atom/new_loc, direct = 0)
- // pulling, throwing, or conveying a sign backing does not rotate it
- var/old_dir = dir
- . = ..()
- setDir(old_dir)
-
-/obj/item/sign_backing/attack_self(mob/user)
- . = ..()
- setDir(turn(dir, 90))
-
-/obj/structure/sign/nanotrasen
- name = "\improper Nanotrasen Logo"
- desc = ""
- icon_state = "nanotrasen"
-
-/obj/structure/sign/logo
- name = "nanotrasen logo"
- desc = ""
- icon_state = "nanotrasen_sign1"
diff --git a/code/game/objects/structures/signs/signs_departments.dm b/code/game/objects/structures/signs/signs_departments.dm
deleted file mode 100644
index 4f5d388756..0000000000
--- a/code/game/objects/structures/signs/signs_departments.dm
+++ /dev/null
@@ -1,87 +0,0 @@
-//departmental signs
-
-/obj/structure/sign/departments/examroom
- name = "\improper EXAM ROOM"
- desc = ""
- icon_state = "examroom"
-
-/obj/structure/sign/departments/science //These 3 have multiple types, just var-edit the icon_state to whatever one you want on the map
- name = "\improper SCIENCE"
- desc = ""
- icon_state = "science1"
-
-/obj/structure/sign/departments/chemistry
- name = "\improper CHEMISTRY"
- desc = ""
- icon_state = "chemistry1"
-
-/obj/structure/sign/departments/botany
- name = "\improper HYDROPONICS"
- desc = ""
- icon_state = "hydro1"
-
-/obj/structure/sign/departments/xenobio
- name = "\improper XENOBIOLOGY"
- desc = ""
- icon_state = "xenobio"
-
-/obj/structure/sign/departments/evac
- name = "\improper EVACUATION"
- desc = ""
- icon_state = "evac"
-
-/obj/structure/sign/departments/drop
- name = "\improper DROP PODS"
- desc = ""
- icon_state = "drop"
-
-/obj/structure/sign/departments/custodian
- name = "\improper CUSTODIAN"
- desc = ""
- icon_state = "custodian"
-
-/obj/structure/sign/departments/engineering
- name = "\improper ENGINEERING"
- desc = ""
- icon_state = "engine"
-
-/obj/structure/sign/departments/cargo
- name = "\improper CARGO"
- desc = ""
- icon_state = "cargo"
-
-/obj/structure/sign/departments/security
- name = "\improper SECURITY"
- desc = ""
- icon_state = "security"
-
-/obj/structure/sign/departments/holy
- name = "\improper HOLY"
- desc = ""
- icon_state = "holy"
-
-/obj/structure/sign/departments/restroom
- name = "\improper RESTROOM"
- desc = ""
- icon_state = "restroom"
-
-/obj/structure/sign/departments/medbay
- name = "\improper MEDBAY"
- desc = ""
- icon_state = "bluecross"
-
-/obj/structure/sign/departments/medbay/alt
- icon_state = "bluecross2"
-
-/obj/structure/sign/departments/mait
- name = "\improper MAINTENANCE TUNNEL"
- desc = ""
- icon_state = "mait1"
-
-/obj/structure/sign/departments/mait/alt
- icon_state = "mait2"
-
-/obj/structure/sign/departments/nanites
- name = "\improper NANITE LAB"
- desc = ""
- icon_state = "nanites"
diff --git a/code/game/objects/structures/signs/signs_maps.dm b/code/game/objects/structures/signs/signs_maps.dm
deleted file mode 100644
index 6c17f70d57..0000000000
--- a/code/game/objects/structures/signs/signs_maps.dm
+++ /dev/null
@@ -1,47 +0,0 @@
-//map and direction signs
-
-/obj/structure/sign/map
- name = "station map"
- desc = ""
- max_integrity = 500
-
-/obj/structure/sign/map/left
- icon_state = "map-left"
-
-/obj/structure/sign/map/right
- icon_state = "map-right"
-
-/obj/structure/sign/directions/science
- name = "science department"
- desc = ""
- icon_state = "direction_sci"
-
-/obj/structure/sign/directions/engineering
- name = "engineering department"
- desc = ""
- icon_state = "direction_eng"
-
-/obj/structure/sign/directions/security
- name = "security department"
- desc = ""
- icon_state = "direction_sec"
-
-/obj/structure/sign/directions/medical
- name = "medical bay"
- desc = ""
- icon_state = "direction_med"
-
-/obj/structure/sign/directions/evac
- name = "escape arm"
- desc = ""
- icon_state = "direction_evac"
-
-/obj/structure/sign/directions/supply
- name = "cargo bay"
- desc = ""
- icon_state = "direction_supply"
-
-/obj/structure/sign/directions/command
- name = "command department"
- desc = ""
- icon_state = "direction_bridge"
diff --git a/code/game/objects/structures/signs/signs_plaques.dm b/code/game/objects/structures/signs/signs_plaques.dm
deleted file mode 100644
index 620a29881e..0000000000
--- a/code/game/objects/structures/signs/signs_plaques.dm
+++ /dev/null
@@ -1,56 +0,0 @@
-//plaques and memorials
-
-/obj/structure/sign/plaques
- name = "plaque"
- desc = ""
- icon_state = "atmosplaque"
-
-/obj/structure/sign/plaques/atmos
- name = "\improper FEA Atmospherics Division plaque"
- desc = ""
-
-/obj/structure/sign/plaques/thunderdome
- name = "Thunderdome Plaque"
- desc = ""
-
-/obj/structure/sign/plaques/golden
- name = "The Most Robust Men Award for Robustness"
- desc = ""
- icon_state = "goldenplaque"
-
-/obj/structure/sign/plaques/golden/captain
- name = "The Most Robust Captain Award for Robustness"
-
-/obj/structure/sign/plaques/kiddie
- name = "\improper AI developers plaque"
- desc = ""
- icon_state = "kiddieplaque"
-
-/obj/structure/sign/plaques/kiddie/badger
- name = "\improper Remembrance Plaque"
- desc = ""
-
-/obj/structure/sign/plaques/kiddie/library
- name = "Library Rules Sign"
- desc = ""
-
-/obj/structure/sign/plaques/kiddie/perfect_man
- name = "\improper 'Perfect Man' sign"
- desc = ""
-
-/obj/structure/sign/plaques/kiddie/perfect_drone
- name = "\improper 'Perfect Drone' sign"
- desc = ""
-
-/obj/structure/sign/plaques/deempisi
- name = "Mr. Deempisi portrait"
- desc = ""
- icon_state = "monkey_painting"
-
-/obj/structure/rogue/trophy/deer
- name = "saiga trophy"
- desc = "A saiga head, mounted on a display as a trophy of a good hunt. An unsavory decoration for Dendorites."
- icon = 'icons/roguetown/misc/structure.dmi'
- icon_state = "deer_trophy"
- dir = SOUTH
- pixel_y = 32
diff --git a/code/game/objects/structures/signs/signs_warning.dm b/code/game/objects/structures/signs/signs_warning.dm
deleted file mode 100644
index dca9bc034e..0000000000
--- a/code/game/objects/structures/signs/signs_warning.dm
+++ /dev/null
@@ -1,122 +0,0 @@
-/obj/structure/sign/warning
- name = "\improper WARNING"
- desc = ""
- icon_state = "securearea"
-
-/obj/structure/sign/warning/securearea
- name = "\improper SECURE AREA"
- desc = ""
-
-/obj/structure/sign/warning/docking
- name = "\improper KEEP CLEAR: DOCKING AREA"
- desc = ""
-
-/obj/structure/sign/warning/biohazard
- name = "\improper BIOHAZARD"
- desc = ""
- icon_state = "bio"
-
-/obj/structure/sign/warning/electricshock
- name = "\improper HIGH VOLTAGE"
- desc = ""
- icon_state = "shock"
-
-/obj/structure/sign/warning/vacuum
- name = "\improper HARD VACUUM AHEAD"
- desc = ""
- icon_state = "space"
-
-/obj/structure/sign/warning/vacuum/external
- name = "\improper EXTERNAL AIRLOCK"
- desc = ""
- layer = MOB_LAYER
-
-/obj/structure/sign/warning/deathsposal
- name = "\improper DISPOSAL: LEADS TO SPACE"
- desc = ""
- icon_state = "deathsposal"
-
-/obj/structure/sign/warning/bodysposal
- name = "\improper DISPOSAL: LEADS TO MORGUE"
- desc = ""
- icon_state = "bodysposal"
-
-/obj/structure/sign/warning/pods
- name = "\improper ESCAPE PODS"
- desc = ""
- icon_state = "pods"
-
-/obj/structure/sign/warning/fire
- name = "\improper DANGER: FIRE"
- desc = ""
- icon_state = "fire"
- resistance_flags = FIRE_PROOF
-
-/obj/structure/sign/warning/nosmoking
- name = "\improper NO SMOKING"
- desc = ""
- icon_state = "nosmoking2"
- resistance_flags = FLAMMABLE
-
-/obj/structure/sign/warning/nosmoking/circle
- icon_state = "nosmoking"
-
-/obj/structure/sign/warning/radiation
- name = "\improper HAZARDOUS RADIATION"
- desc = ""
- icon_state = "radiation"
-
-/obj/structure/sign/warning/radiation/rad_area
- name = "\improper RADIOACTIVE AREA"
- desc = ""
-
-/obj/structure/sign/warning/xeno_mining
- name = "\improper DANGEROUS ALIEN LIFE"
- desc = ""
- icon = 'icons/obj/mining.dmi'
- icon_state = "xeno_warning"
-
-/obj/structure/sign/warning/enginesafety
- name = "\improper ENGINEERING SAFETY"
- desc = ""
- icon_state = "safety"
-
-/obj/structure/sign/warning/explosives
- name = "\improper HIGH EXPLOSIVES"
- desc = ""
- icon_state = "explosives"
-
-/obj/structure/sign/warning/explosives/alt
- name = "\improper HIGH EXPLOSIVES"
- desc = ""
- icon_state = "explosives2"
-
-/obj/structure/sign/warning/testchamber
- name = "\improper TESTING AREA"
- desc = ""
- icon_state = "testchamber"
-
-/obj/structure/sign/warning/firingrange
- name = "\improper FIRING RANGE"
- desc = ""
- icon_state = "firingrange"
-
-/obj/structure/sign/warning/coldtemp
- name = "\improper FREEZING AIR"
- desc = ""
- icon_state = "cold"
-
-/obj/structure/sign/warning/hottemp
- name = "\improper SUPERHEATED AIR"
- desc = ""
- icon_state = "heat"
-
-/obj/structure/sign/warning/gasmask
- name = "\improper CONTAMINATED AIR"
- desc = ""
- icon_state = "gasmask"
-
-/obj/structure/sign/warning/chemdiamond
- name = "\improper REACTIVE CHEMICALS"
- desc = ""
- icon_state = "chemdiamond"
diff --git a/code/game/objects/structures/spawner.dm b/code/game/objects/structures/spawner.dm
index b1f15b0683..0a29c43846 100644
--- a/code/game/objects/structures/spawner.dm
+++ b/code/game/objects/structures/spawner.dm
@@ -10,7 +10,7 @@
var/max_mobs = 5
var/spawn_time = 300 //30 seconds default
- var/mob_types = list(/mob/living/simple_animal/hostile/carp)
+ var/mob_types = list(/mob/living/simple_animal/hostile/rogue/werewolf)
var/spawn_text = "emerges from"
var/faction = list("hostile")
var/spawner_type = /datum/component/spawner
@@ -23,36 +23,3 @@
if(faction_check(faction, M.faction, FALSE)&&!M.client)
return
..()
-
-
-/obj/structure/spawner/syndicate
- name = "warp beacon"
- icon = 'icons/obj/device.dmi'
- icon_state = "syndbeacon"
- spawn_text = "warps in from"
- mob_types = list(/mob/living/simple_animal/hostile/syndicate/ranged)
- faction = list(ROLE_SYNDICATE)
-
-/obj/structure/spawner/skeleton
- name = "bone pit"
- desc = ""
- icon_state = "hole"
- icon = 'icons/mob/nest.dmi'
- max_integrity = 150
- max_mobs = 15
- spawn_time = 150
- mob_types = list(/mob/living/simple_animal/hostile/skeleton)
- spawn_text = "climbs out of"
- faction = list("skeleton")
-
-/obj/structure/spawner/clown
- name = "Laughing Larry"
- desc = ""
- icon_state = "clownbeacon"
- icon = 'icons/obj/device.dmi'
- max_integrity = 200
- max_mobs = 15
- spawn_time = 150
- mob_types = list(/mob/living/simple_animal/hostile/retaliate/clown, /mob/living/simple_animal/hostile/retaliate/clown/fleshclown, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk, /mob/living/simple_animal/hostile/retaliate/clown/longface, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/chlown, /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/honcmunculus, /mob/living/simple_animal/hostile/retaliate/clown/mutant/blob, /mob/living/simple_animal/hostile/retaliate/clown/banana, /mob/living/simple_animal/hostile/retaliate/clown/honkling, /mob/living/simple_animal/hostile/retaliate/clown/lube)
- spawn_text = "climbs out of"
- faction = list("clown")
diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm
index 2ef5b6859d..45b3c3cbdb 100644
--- a/code/game/objects/structures/statues.dm
+++ b/code/game/objects/structures/statues.dm
@@ -7,7 +7,7 @@
anchored = FALSE
max_integrity = 100
var/oreAmount = 5
- var/material_drop_type = /obj/item/stack/sheet/metal
+ var/material_drop_type
var/impressiveness = 15
CanAtmosPass = ATMOS_PASS_DENSITY
var/art_type = /datum/component/art
@@ -17,24 +17,6 @@
AddComponent(art_type, impressiveness)
addtimer(CALLBACK(src, TYPE_PROC_REF(/datum, AddComponent), /datum/component/beauty, impressiveness * 75), 0)
-/obj/structure/statue/attackby(obj/item/W, mob/living/user, params)
- add_fingerprint(user)
- if(!(flags_1 & NODECONSTRUCT_1))
- if(default_unfasten_wrench(user, W))
- return
- if(W.tool_behaviour == TOOL_WELDER)
- if(!W.tool_start_check(user, amount=0))
- return FALSE
-
- user.visible_message("[user] is slicing apart the [name].", \
- "I are slicing apart the [name]...")
- if(W.use_tool(src, user, 40, volume=50))
- user.visible_message("[user] slices apart the [name].", \
- "I slice apart the [name]!")
- deconstruct(TRUE)
- return
- return ..()
-
/obj/structure/statue/deconstruct(disassembled = TRUE)
if(!(flags_1 & NODECONSTRUCT_1))
if(material_drop_type)
@@ -44,260 +26,3 @@
if(drop_amt > 0)
new material_drop_type(get_turf(src), drop_amt)
qdel(src)
-
-//////////////////////////////////////STATUES/////////////////////////////////////////////////////////////
-////////////////////////uranium///////////////////////////////////
-
-/obj/structure/statue/uranium
- max_integrity = 300
- light_outer_range = 2
- material_drop_type = /obj/item/stack/sheet/mineral/uranium
- var/last_event = 0
- var/active = null
- impressiveness = 25 // radiation makes an impression
-
-
-/obj/structure/statue/uranium/nuke
- name = "statue of a nuclear fission explosive"
- desc = ""
- icon_state = "nuke"
-
-/obj/structure/statue/uranium/eng
- name = "Statue of an engineer"
- desc = ""
- icon_state = "eng"
-
-/obj/structure/statue/uranium/attackby(obj/item/W, mob/user, params)
- radiate()
- return ..()
-
-/obj/structure/statue/uranium/Bumped(atom/movable/AM)
- radiate()
- ..()
-
-/obj/structure/statue/uranium/attack_hand(mob/user)
- radiate()
- . = ..()
-
-/obj/structure/statue/uranium/attack_paw(mob/user)
- radiate()
- . = ..()
-
-/obj/structure/statue/uranium/proc/radiate()
- if(!active)
- if(world.time > last_event+15)
- active = 1
- radiation_pulse(src, 30)
- last_event = world.time
- active = null
- return
- return
-
-////////////////////////////plasma///////////////////////////////////////////////////////////////////////
-
-/obj/structure/statue/plasma
- max_integrity = 200
- material_drop_type = /obj/item/stack/sheet/mineral/plasma
- impressiveness = 20
- desc = ""
-
-/obj/structure/statue/plasma/scientist
- name = "statue of a scientist"
- icon_state = "sci"
-
-/obj/structure/statue/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- if(exposed_temperature > 300)
- PlasmaBurn(exposed_temperature)
-
-
-/obj/structure/statue/plasma/bullet_act(obj/projectile/Proj)
- var/burn = FALSE
- if(!(Proj.nodamage) && Proj.damage_type == BURN && !QDELETED(src))
- burn = TRUE
- if(burn)
- var/turf/T = get_turf(src)
- if(Proj.firer)
- message_admins("Plasma statue ignited by [ADMIN_LOOKUPFLW(Proj.firer)] in [ADMIN_VERBOSEJMP(T)]")
- log_game("Plasma statue ignited by [key_name(Proj.firer)] in [AREACOORD(T)]")
- else
- message_admins("Plasma statue ignited by [Proj]. No known firer, in [ADMIN_VERBOSEJMP(T)]")
- log_game("Plasma statue ignited by [Proj] in [AREACOORD(T)]. No known firer.")
- PlasmaBurn(2500)
- . = ..()
-
-/obj/structure/statue/plasma/attackby(obj/item/W, mob/user, params)
- if(W.get_temperature() > 300 && !QDELETED(src))//If the temperature of the object is over 300, then ignite
- var/turf/T = get_turf(src)
- message_admins("Plasma statue ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(T)]")
- log_game("Plasma statue ignited by [key_name(user)] in [AREACOORD(T)]")
- ignite(W.get_temperature())
- else
- return ..()
-
-/obj/structure/statue/plasma/proc/PlasmaBurn(added)
- if(QDELETED(src))
- return
- atmos_spawn_air("plasma=[oreAmount*10];TEMP=[added]")
- deconstruct(FALSE)
-
-/obj/structure/statue/plasma/proc/ignite(exposed_temperature)
- if(exposed_temperature > 300)
- PlasmaBurn(exposed_temperature)
-
-//////////////////////gold///////////////////////////////////////
-
-/obj/structure/statue/gold
- max_integrity = 300
- material_drop_type = /obj/item/stack/sheet/mineral/gold
- impressiveness = 25
- desc = ""
-
-/obj/structure/statue/gold/hos
- name = "statue of the head of security"
- icon_state = "hos"
-
-/obj/structure/statue/gold/hop
- name = "statue of the head of personnel"
- icon_state = "hop"
-
-/obj/structure/statue/gold/cmo
- name = "statue of the chief medical officer"
- icon_state = "cmo"
-
-/obj/structure/statue/gold/ce
- name = "statue of the chief engineer"
- icon_state = "ce"
-
-/obj/structure/statue/gold/rd
- name = "statue of the research director"
- icon_state = "rd"
-
-//////////////////////////silver///////////////////////////////////////
-
-/obj/structure/statue/silver
- max_integrity = 300
- material_drop_type = /obj/item/stack/sheet/mineral/silver
- impressiveness = 25
- desc = ""
-
-/obj/structure/statue/silver/md
- name = "statue of a medical officer"
- icon_state = "md"
-
-/obj/structure/statue/silver/janitor
- name = "statue of a janitor"
- icon_state = "jani"
-
-/obj/structure/statue/silver/sec
- name = "statue of a security officer"
- icon_state = "sec"
-
-/obj/structure/statue/silver/secborg
- name = "statue of a security cyborg"
- icon_state = "secborg"
-
-/obj/structure/statue/silver/medborg
- name = "statue of a medical cyborg"
- icon_state = "medborg"
-
-/////////////////////////diamond/////////////////////////////////////////
-
-/obj/structure/statue/diamond
- max_integrity = 1000
- material_drop_type = /obj/item/stack/sheet/mineral/diamond
- impressiveness = 50
- desc = ""
-
-/obj/structure/statue/diamond/captain
- name = "statue of THE captain."
- icon_state = "cap"
-
-/obj/structure/statue/diamond/ai1
- name = "statue of the AI hologram."
- icon_state = "ai1"
-
-/obj/structure/statue/diamond/ai2
- name = "statue of the AI core."
- icon_state = "ai2"
-
-////////////////////////bananium///////////////////////////////////////
-
-/obj/structure/statue/bananium
- max_integrity = 300
- material_drop_type = /obj/item/stack/sheet/mineral/bananium
- impressiveness = 50
- desc = ""
- var/spam_flag = 0
-
-/obj/structure/statue/bananium/clown
- name = "statue of a clown"
- icon_state = "clown"
-
-/obj/structure/statue/bananium/Bumped(atom/movable/AM)
- honk()
- ..()
-
-/obj/structure/statue/bananium/attackby(obj/item/W, mob/user, params)
- honk()
- return ..()
-
-/obj/structure/statue/bananium/attack_hand(mob/user)
- honk()
- . = ..()
-
-/obj/structure/statue/bananium/attack_paw(mob/user)
- honk()
- ..()
-
-/obj/structure/statue/bananium/proc/honk()
- if(!spam_flag)
- spam_flag = TRUE
- playsound(src.loc, 'sound/blank.ogg', 50, TRUE)
- addtimer(VARSET_CALLBACK(src, spam_flag, FALSE), 2 SECONDS)
-
-/////////////////////sandstone/////////////////////////////////////////
-
-/obj/structure/statue/sandstone
- max_integrity = 50
- material_drop_type = /obj/item/stack/sheet/mineral/sandstone
- impressiveness = 15
-
-/obj/structure/statue/sandstone/assistant
- name = "statue of an assistant"
- desc = ""
- icon_state = "assist"
-
-
-/obj/structure/statue/sandstone/venus //call me when we add marble i guess
- name = "statue of a pure maiden"
- desc = ""
- icon = 'icons/obj/statuelarge.dmi'
- icon_state = "venus"
-
-/////////////////////snow/////////////////////////////////////////
-
-/obj/structure/statue/snow
- max_integrity = 50
- material_drop_type = /obj/item/stack/sheet/mineral/snow
-
-/obj/structure/statue/snow/snowman
- name = "snowman"
- desc = ""
- icon_state = "snowman"
-
-/obj/structure/statue/snow/snowlegion
- name = "snowlegion"
- desc = ""
- icon_state = "snowlegion"
-
-///////////////////////////////bronze///////////////////////////////////
-
-/obj/structure/statue/bronze
- material_drop_type = /obj/item/stack/tile/bronze
-
-/obj/structure/statue/bronze/marx
- name = "\improper Karl Marx bust"
- desc = ""
- icon_state = "marx"
- art_type = /datum/component/art/rev
-
diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm
deleted file mode 100644
index 784bce59e9..0000000000
--- a/code/game/objects/structures/table_frames.dm
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Table Frames
- * Contains:
- * Frames
- * Wooden Frames
- */
-
-
-/*
- * Normal Frames
- */
-
-/obj/structure/table_frame
- name = "table frame"
- desc = ""
- icon = 'icons/obj/structures.dmi'
- icon_state = "table_frame"
- density = FALSE
- anchored = FALSE
- layer = PROJECTILE_HIT_THRESHHOLD_LAYER
- max_integrity = 100
- var/framestack = /obj/item/stack/rods
- var/framestackamount = 2
-
-/obj/structure/table_frame/attackby(obj/item/I, mob/user, params)
- if(I.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "I start disassembling [src]...")
- I.play_tool_sound(src)
- if(I.use_tool(src, user, 30))
- playsound(src.loc, 'sound/blank.ogg', 50, TRUE)
- deconstruct(TRUE)
- return
-
- var/obj/item/stack/material = I
- if (istype(I, /obj/item/stack))
- if(material?.tableVariant)
- if(material.get_amount() < 1)
- to_chat(user, "I need one [material.name] sheet to do this!")
- return
- to_chat(user, "I start adding [material] to [src]...")
- if(do_after(user, 20, target = src) && material.use(1))
- make_new_table(material.tableVariant)
- else
- if(material.get_amount() < 1)
- to_chat(user, "I need one metal sheet to do this!")
- return
- to_chat(user, "I start adding [material] to [src]...")
- if(do_after(user, 20, target = src) && material.use(1))
- var/list/material_list = list()
- if(material.material_type)
- material_list[material.material_type] = MINERAL_MATERIAL_AMOUNT
- make_new_table(/obj/structure/table/greyscale, material_list)
- else
- return ..()
-
-/obj/structure/table_frame/proc/make_new_table(table_type, custom_materials) //makes sure the new table made retains what we had as a frame
- var/obj/structure/table/T = new table_type(loc)
- T.frame = type
- T.framestack = framestack
- T.framestackamount = framestackamount
- if(custom_materials)
- T.set_custom_materials(custom_materials)
- qdel(src)
-
-/obj/structure/table_frame/deconstruct(disassembled = TRUE)
- new framestack(get_turf(src), framestackamount)
- qdel(src)
-
-/obj/structure/table_frame/narsie_act()
- new /obj/structure/table_frame/wood(src.loc)
- qdel(src)
-
-/*
- * Wooden Frames
- */
-
-/obj/structure/table_frame/wood
- name = "wooden table frame"
- desc = ""
- icon_state = "wood_frame"
- framestack = /obj/item/stack/sheet/mineral/wood
- framestackamount = 2
- resistance_flags = FLAMMABLE
-
-/obj/structure/table_frame/wood/attackby(obj/item/I, mob/user, params)
- if (istype(I, /obj/item/stack))
- var/obj/item/stack/material = I
- var/toConstruct // stores the table variant
- if(istype(I, /obj/item/stack/sheet/mineral/wood))
- toConstruct = /obj/structure/table/wood
- else if(istype(I, /obj/item/stack/tile/carpet))
- toConstruct = /obj/structure/table/wood/poker
-
- if (toConstruct)
- if(material.get_amount() < 1)
- to_chat(user, "I need one [material.name] sheet to do this!")
- return
- to_chat(user, "I start adding [material] to [src]...")
- if(do_after(user, 20, target = src) && material.use(1))
- make_new_table(toConstruct)
- else
- return ..()
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 5b62a83add..0c376f1f72 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -22,29 +22,21 @@
layer = TABLE_LAYER
climbable = TRUE
pass_flags = LETPASSTHROW //You can throw objects over this, despite it's density.")
- var/frame = /obj/structure/table_frame
+ var/frame
var/framestack
var/buildstack
var/busy = FALSE
var/buildstackamount = 1
var/framestackamount = 2
var/deconstruction_ready = 1
- custom_materials = list(/datum/material/iron = 2000)
max_integrity = 100
integrity_failure = 0.33
smooth = SMOOTH_TRUE
- canSmoothWith = list(/obj/structure/table, /obj/structure/table/reinforced, /obj/structure/table/greyscale)
+ canSmoothWith = list(/obj/structure/table, /obj/structure/table/greyscale)
destroy_sound = 'sound/combat/hits/onwood/destroyfurniture.ogg'
attacked_sound = list('sound/combat/hits/onwood/woodimpact (1).ogg','sound/combat/hits/onwood/woodimpact (2).ogg')
blade_dulling = DULLING_BASHCHOP
-/obj/structure/table/examine(mob/user)
- . = ..()
-// . += deconstruction_hints(user)
-
-/obj/structure/table/proc/deconstruction_hints(mob/user)
- return "The top is screwed on, but the main bolts are also visible."
-
/obj/structure/table/update_icon()
if(smooth)
queue_smooth(src)
@@ -449,7 +441,6 @@
desc = ""
icon = 'icons/obj/smooth_structures/poker_table.dmi'
icon_state = "poker_table"
- buildstack = /obj/item/stack/tile/carpet
/obj/structure/table/wood/poker/narsie_act()
..(FALSE)
@@ -459,7 +450,6 @@
desc = ""
icon = 'icons/obj/structures.dmi'
icon_state = "fancy_table"
- frame = /obj/structure/table_frame
canSmoothWith = list(/obj/structure/table/wood/fancy,
/obj/structure/table/wood/fancy/black,
/obj/structure/table/wood/fancy/blue,
@@ -482,47 +472,38 @@
/obj/structure/table/wood/fancy/black
icon_state = "fancy_table_black"
- buildstack = /obj/item/stack/tile/carpet/black
smooth_icon = 'icons/obj/smooth_structures/fancy_table_black.dmi'
/obj/structure/table/wood/fancy/blue
icon_state = "fancy_table_blue"
- buildstack = /obj/item/stack/tile/carpet/blue
smooth_icon = 'icons/obj/smooth_structures/fancy_table_blue.dmi'
/obj/structure/table/wood/fancy/cyan
icon_state = "fancy_table_cyan"
- buildstack = /obj/item/stack/tile/carpet/cyan
smooth_icon = 'icons/obj/smooth_structures/fancy_table_cyan.dmi'
/obj/structure/table/wood/fancy/green
icon_state = "fancy_table_green"
- buildstack = /obj/item/stack/tile/carpet/green
smooth_icon = 'icons/obj/smooth_structures/fancy_table_green.dmi'
/obj/structure/table/wood/fancy/orange
icon_state = "fancy_table_orange"
- buildstack = /obj/item/stack/tile/carpet/orange
smooth_icon = 'icons/obj/smooth_structures/fancy_table_orange.dmi'
/obj/structure/table/wood/fancy/purple
icon_state = "fancy_table_purple"
- buildstack = /obj/item/stack/tile/carpet/purple
smooth_icon = 'icons/obj/smooth_structures/fancy_table_purple.dmi'
/obj/structure/table/wood/fancy/red
icon_state = "fancy_table_red"
- buildstack = /obj/item/stack/tile/carpet/red
smooth_icon = 'icons/obj/smooth_structures/fancy_table_red.dmi'
/obj/structure/table/wood/fancy/royalblack
icon_state = "fancy_table_royalblack"
- buildstack = /obj/item/stack/tile/carpet/royalblack
smooth_icon = 'icons/obj/smooth_structures/fancy_table_royalblack.dmi'
/obj/structure/table/wood/fancy/royalblue
icon_state = "fancy_table_royalblue"
- buildstack = /obj/item/stack/tile/carpet/royalblue
smooth_icon = 'icons/obj/smooth_structures/fancy_table_royalblue.dmi'
/* .................. More tables ................... */
@@ -546,91 +527,6 @@
/obj/structure/table/wood/nice/decorated_alt
icon_state = "tablefine_alt2"
-/*
- * Reinforced tables
- */
-
-/obj/structure/table/reinforced
- name = "reinforced table"
- desc = ""
- icon = 'icons/obj/smooth_structures/reinforced_table.dmi'
- icon_state = "r_table"
- deconstruction_ready = 0
- buildstack = /obj/item/stack/sheet/plasteel
- canSmoothWith = list(/obj/structure/table/reinforced, /obj/structure/table)
- max_integrity = 200
- integrity_failure = 0.25
- armor = list("melee" = 10, "bullet" = 30, "laser" = 30, "energy" = 100, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
-
-/obj/structure/table/reinforced/deconstruction_hints(mob/user)
- if(deconstruction_ready)
- return "The top cover has been welded loose and the main frame's bolts are exposed."
- else
- return "The top cover is firmly welded on."
-
-/obj/structure/table/reinforced/attackby(obj/item/W, mob/user, params)
- if(W.tool_behaviour == TOOL_WELDER && user.used_intent.type != INTENT_HELP)
- if(!W.tool_start_check(user, amount=0))
- return
-
- if(deconstruction_ready)
- to_chat(user, "I start strengthening the reinforced table...")
- if (W.use_tool(src, user, 50, volume=50))
- to_chat(user, "I strengthen the table.")
- deconstruction_ready = 0
- else
- to_chat(user, "I start weakening the reinforced table...")
- if (W.use_tool(src, user, 50, volume=50))
- to_chat(user, "I weaken the table.")
- deconstruction_ready = 1
- else
- . = ..()
-
-/obj/structure/table/bronze
- name = "bronze table"
- desc = ""
- icon = 'icons/obj/smooth_structures/brass_table.dmi'
- icon_state = "brass_table"
- resistance_flags = FIRE_PROOF | ACID_PROOF
- buildstack = /obj/item/stack/tile/bronze
- canSmoothWith = list(/obj/structure/table/bronze)
-
-/obj/structure/table/bronze/tablepush(mob/living/user, mob/living/pushed_mob)
- ..()
- playsound(src, 'sound/blank.ogg', 50, TRUE)
-
-/*
- * Surgery Tables
- */
-
-/obj/structure/table/optable
- name = "operating table"
- desc = ""
- icon = 'icons/obj/surgery.dmi'
- icon_state = "optable"
- buildstack = /obj/item/stack/sheet/mineral/silver
- smooth = SMOOTH_FALSE
- can_buckle = 1
- buckle_lying = -1
- buckle_requires_restraints = 1
- var/mob/living/carbon/human/patient = null
-
-/obj/structure/table/optable/tablepush(mob/living/user, mob/living/pushed_mob)
- pushed_mob.forceMove(loc)
- pushed_mob.set_resting(TRUE, TRUE)
- visible_message("[user] has laid [pushed_mob] on [src].")
- check_patient()
-
-/obj/structure/table/optable/proc/check_patient()
- var/mob/living/carbon/human/M = locate(/mob/living/carbon/human, loc)
- if(M)
- if(M.resting)
- patient = M
- return TRUE
- else
- patient = null
- return FALSE
-
/*
* Racks
*/
@@ -697,28 +593,7 @@
/obj/structure/rack/attack_paw(mob/living/user)
attack_hand(user)
-/*
-/obj/structure/rack/attack_hand(mob/living/user)
- . = ..()
- if(.)
- return
- if(!(user.mobility_flags & MOBILITY_STAND) || user.get_num_legs() < 2)
- return
- user.changeNext_move(CLICK_CD_MELEE)
- user.do_attack_animation(src, ATTACK_EFFECT_KICK)
- user.visible_message("[user] kicks [src].", null, null, COMBAT_MESSAGE_RANGE)
- take_damage(rand(4,8), BRUTE, "melee", 1)*/
-/*
- * Rack Destruction
- */
-
-/obj/structure/rack/deconstruct(disassembled = TRUE)
- if(!(flags_1&NODECONSTRUCT_1))
- density = FALSE
- var/obj/item/rack_parts/newparts = new(loc)
- transfer_fingerprints_to(newparts)
- qdel(src)
/obj/structure/rack/rogue
@@ -765,40 +640,33 @@
else
. = ..()
-// temporary
-/obj/item/cooking/platter
-/*
- * Rack Parts
- */
-
-/obj/item/rack_parts
- name = "rack parts"
+/obj/structure/table/optable
+ name = "operating table"
desc = ""
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "rack_parts"
- flags_1 = CONDUCT_1
- custom_materials = list(/datum/material/iron=2000)
- var/building = FALSE
-
-/obj/item/rack_parts/attackby(obj/item/W, mob/user, params)
- if (W.tool_behaviour == TOOL_WRENCH)
- new /obj/item/stack/sheet/metal(user.loc)
- qdel(src)
- else
- . = ..()
+ icon = 'icons/obj/surgery.dmi'
+ icon_state = "optable"
+ smooth = SMOOTH_FALSE
+ can_buckle = 1
+ buckle_lying = -1
+ buckle_requires_restraints = 1
+ var/mob/living/carbon/human/patient = null
-/obj/item/rack_parts/attack_self(mob/user)
- if(building)
- return
- building = TRUE
- to_chat(user, "I start constructing a rack...")
- if(do_after(user, 50, target = user, progress=TRUE))
- if(!user.temporarilyRemoveItemFromInventory(src))
- return
- var/obj/structure/rack/R = new /obj/structure/rack(user.loc)
- user.visible_message("[user] assembles \a [R].\
- ", "I assemble \a [R].")
- R.add_fingerprint(user)
- qdel(src)
- building = FALSE
+/obj/structure/table/optable/Initialize()
+ . = ..()
+
+/obj/structure/table/optable/tablepush(mob/living/user, mob/living/pushed_mob)
+ pushed_mob.forceMove(loc)
+ pushed_mob.set_resting(TRUE, TRUE)
+ visible_message("[user] has laid [pushed_mob] on [src].")
+ check_patient()
+
+/obj/structure/table/optable/proc/check_patient()
+ var/mob/living/carbon/human/M = locate(/mob/living/carbon/human, loc)
+ if(M)
+ if(M.resting)
+ patient = M
+ return TRUE
+ else
+ patient = null
+ return FALSE
diff --git a/code/game/objects/structures/toilet.dm b/code/game/objects/structures/toilet.dm
new file mode 100644
index 0000000000..ac86906ac5
--- /dev/null
+++ b/code/game/objects/structures/toilet.dm
@@ -0,0 +1,85 @@
+/obj/structure/toilet
+ name = "toilet"
+ desc = ""
+ icon = 'icons/roguetown/misc/structure.dmi'
+ icon_state = "toilet"
+ density = FALSE
+ anchored = TRUE
+ var/open = FALSE //if the lid is up
+ var/cistern = 1 //if the cistern bit is open
+ var/w_items = 0 //the combined w_class of all the items in the cistern
+ var/mob/living/swirlie = null //the mob being given a swirlie
+ var/buildstacktype
+ var/buildstackamount = 1
+
+/obj/structure/toilet/Initialize()
+ . = ..()
+
+/obj/structure/toilet/attack_hand(mob/living/user)
+ . = ..()
+ if(.)
+ return
+
+ if(cistern && user.CanReach(src))
+ if(!contents.len)
+ to_chat(user, "The toilet is empty.")
+ else
+ var/obj/item/I = pick(contents)
+ if(ishuman(user))
+ user.put_in_hands(I)
+ else
+ I.forceMove(drop_location())
+ to_chat(user, "I find [I] in the toilet.")
+ w_items -= I.w_class
+
+/obj/structure/toilet/update_icon_state()
+ icon_state = "toilet"
+
+/obj/structure/toilet/deconstruct()
+ if(!(flags_1 & NODECONSTRUCT_1))
+ if(buildstacktype)
+ new buildstacktype(loc,buildstackamount)
+ else
+ for(var/i in custom_materials)
+ var/datum/material/M = i
+ new M.sheet_type(loc, FLOOR(custom_materials[M] / MINERAL_MATERIAL_AMOUNT, 1))
+ ..()
+
+/obj/structure/toilet/attackby(obj/item/I, mob/living/user, params)
+ add_fingerprint(user)
+ if(I.tool_behaviour == TOOL_CROWBAR)
+ to_chat(user, "I start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]...")
+ playsound(loc, 'sound/blank.ogg', 50, TRUE)
+ if(I.use_tool(src, user, 30))
+ user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "I [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!", "I hear grinding porcelain.")
+ cistern = !cistern
+ update_icon()
+ else if(I.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1))
+ I.play_tool_sound(src)
+ deconstruct()
+ else if(cistern)
+ if(user.used_intent.type != INTENT_HARM)
+ if(I.w_class > WEIGHT_CLASS_NORMAL)
+ to_chat(user, "[I] does not fit!")
+ return
+ if(w_items + I.w_class > WEIGHT_CLASS_HUGE)
+ to_chat(user, "The toilet is full!")
+ return
+ if(!user.transferItemToLoc(I, src))
+ to_chat(user, "\The [I] is stuck to your hand, you cannot put it in the cistern!")
+ return
+ w_items += I.w_class
+ to_chat(user, "I carefully place [I] into the toilet.")
+
+ else if(istype(I, /obj/item/reagent_containers))
+ if (!open)
+ return
+ if(istype(I, /obj/item/reagent_containers/food/snacks/monkeycube))
+ var/obj/item/reagent_containers/food/snacks/monkeycube/cube = I
+ cube.Expand()
+ return
+ var/obj/item/reagent_containers/RG = I
+ RG.reagents.add_reagent(/datum/reagent/water/gross, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this))
+ to_chat(user, "I fill [RG] from [src].")
+ else
+ return ..()
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
deleted file mode 100644
index bbbcb3e42d..0000000000
--- a/code/game/objects/structures/watercloset.dm
+++ /dev/null
@@ -1,473 +0,0 @@
-/obj/structure/toilet
- name = "toilet"
- desc = ""
- icon = 'icons/roguetown/misc/structure.dmi'
- icon_state = "toilet"
- density = FALSE
- anchored = TRUE
- var/open = FALSE //if the lid is up
- var/cistern = 1 //if the cistern bit is open
- var/w_items = 0 //the combined w_class of all the items in the cistern
- var/mob/living/swirlie = null //the mob being given a swirlie
- var/buildstacktype = /obj/item/stack/sheet/metal //they're metal now, shut up
- var/buildstackamount = 1
-
-/obj/structure/toilet/Initialize()
- . = ..()
-// open = round(rand(0, 1))
-// update_icon()
-
-
-/obj/structure/toilet/attack_hand(mob/living/user)
- . = ..()
- if(.)
- return
-/* if(swirlie)
- user.changeNext_move(CLICK_CD_MELEE)
- playsound(src.loc, "swing_hit", 25, TRUE)
- swirlie.visible_message("[user] slams the toilet seat onto [swirlie]'s head!", "[user] slams the toilet seat onto your head!", "I hear reverberating porcelain.")
- swirlie.adjustBruteLoss(5)
-
- else if(user.pulling && user.used_intent.type == INTENT_GRAB && isliving(user.pulling))
- user.changeNext_move(CLICK_CD_MELEE)
- var/mob/living/GM = user.pulling
- if(user.grab_state >= GRAB_AGGRESSIVE)
- if(GM.loc != get_turf(src))
- to_chat(user, "[GM] needs to be on [src]!")
- return
- if(!swirlie)
- if(open)
- GM.visible_message("[user] starts to give [GM] a swirlie!", "[user] starts to give you a swirlie...")
- swirlie = GM
- if(do_after(user, 30, 0, target = src))
- GM.visible_message("[user] gives [GM] a swirlie!", "[user] gives you a swirlie!", "I hear a toilet flushing.")
- if(iscarbon(GM))
- var/mob/living/carbon/C = GM
- if(!C.internal)
- C.adjustOxyLoss(5)
- else
- GM.adjustOxyLoss(5)
- swirlie = null
- else
- playsound(src.loc, 'sound/blank.ogg', 25, TRUE)
- GM.visible_message("[user] slams [GM.name] into [src]!", "[user] slams you into [src]!")
- GM.adjustBruteLoss(5)
- else
- to_chat(user, "I need a tighter grip!")*/
-
- if(cistern && user.CanReach(src))
- if(!contents.len)
- to_chat(user, "The toilet is empty.")
- else
- var/obj/item/I = pick(contents)
- if(ishuman(user))
- user.put_in_hands(I)
- else
- I.forceMove(drop_location())
- to_chat(user, "I find [I] in the toilet.")
- w_items -= I.w_class
-// else
-// open = !open
-// update_icon()
-
-
-/obj/structure/toilet/update_icon_state()
- icon_state = "toilet"
-
-/obj/structure/toilet/deconstruct()
- if(!(flags_1 & NODECONSTRUCT_1))
- if(buildstacktype)
- new buildstacktype(loc,buildstackamount)
- else
- for(var/i in custom_materials)
- var/datum/material/M = i
- new M.sheet_type(loc, FLOOR(custom_materials[M] / MINERAL_MATERIAL_AMOUNT, 1))
- ..()
-
-/obj/structure/toilet/attackby(obj/item/I, mob/living/user, params)
- add_fingerprint(user)
- if(I.tool_behaviour == TOOL_CROWBAR)
- to_chat(user, "I start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]...")
- playsound(loc, 'sound/blank.ogg', 50, TRUE)
- if(I.use_tool(src, user, 30))
- user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "I [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!", "I hear grinding porcelain.")
- cistern = !cistern
- update_icon()
- else if(I.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1))
- I.play_tool_sound(src)
- deconstruct()
- else if(cistern)
- if(user.used_intent.type != INTENT_HARM)
- if(I.w_class > WEIGHT_CLASS_NORMAL)
- to_chat(user, "[I] does not fit!")
- return
- if(w_items + I.w_class > WEIGHT_CLASS_HUGE)
- to_chat(user, "The toilet is full!")
- return
- if(!user.transferItemToLoc(I, src))
- to_chat(user, "\The [I] is stuck to your hand, you cannot put it in the cistern!")
- return
- w_items += I.w_class
- to_chat(user, "I carefully place [I] into the toilet.")
-
- else if(istype(I, /obj/item/reagent_containers))
- if (!open)
- return
- if(istype(I, /obj/item/reagent_containers/food/snacks/monkeycube))
- var/obj/item/reagent_containers/food/snacks/monkeycube/cube = I
- cube.Expand()
- return
- var/obj/item/reagent_containers/RG = I
- RG.reagents.add_reagent(/datum/reagent/water/gross, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this))
- to_chat(user, "I fill [RG] from [src].")
- else
- return ..()
-
-/obj/structure/toilet/secret
- var/obj/item/secret
- var/secret_type = null
-
-/obj/structure/toilet/secret/Initialize(mapload)
- . = ..()
- if (secret_type)
- secret = new secret_type(src)
- secret.desc += " It's a secret!"
- w_items += secret.w_class
- contents += secret
-
-/obj/structure/toilet/greyscale
- material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR
- buildstacktype = null
-
-/obj/structure/urinal
- name = "urinal"
- desc = ""
- icon = 'icons/obj/watercloset.dmi'
- icon_state = "urinal"
- density = FALSE
- anchored = TRUE
- var/exposed = 0 // can you currently put an item inside
- var/obj/item/hiddenitem = null // what's in the urinal
-
-/obj/structure/urinal/Initialize()
- . = ..()
- hiddenitem = new /obj/item/reagent_containers/food/snacks/urinalcake
-
-/obj/structure/urinal/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- if(user.pulling && user.used_intent.type == INTENT_GRAB && isliving(user.pulling))
- var/mob/living/GM = user.pulling
- if(user.grab_state >= GRAB_AGGRESSIVE)
- if(GM.loc != get_turf(src))
- to_chat(user, "[GM.name] needs to be on [src].")
- return
- user.changeNext_move(CLICK_CD_MELEE)
- user.visible_message("[user] slams [GM] into [src]!", "I slam [GM] into [src]!")
- GM.adjustBruteLoss(8)
- else
- to_chat(user, "I need a tighter grip!")
-
- else if(exposed)
- if(!hiddenitem)
- to_chat(user, "There is nothing in the drain holder!")
- else
- if(ishuman(user))
- user.put_in_hands(hiddenitem)
- else
- hiddenitem.forceMove(get_turf(src))
- to_chat(user, "I fish [hiddenitem] out of the drain enclosure.")
- hiddenitem = null
- else
- ..()
-
-/obj/structure/urinal/attackby(obj/item/I, mob/living/user, params)
- if(exposed)
- if (hiddenitem)
- to_chat(user, "There is already something in the drain enclosure!")
- return
- if(I.w_class > 1)
- to_chat(user, "[I] is too large for the drain enclosure.")
- return
- if(!user.transferItemToLoc(I, src))
- to_chat(user, "\[I] is stuck to your hand, you cannot put it in the drain enclosure!")
- return
- hiddenitem = I
- to_chat(user, "I place [I] into the drain enclosure.")
- else
- return ..()
-
-/obj/structure/urinal/screwdriver_act(mob/living/user, obj/item/I)
- if(..())
- return TRUE
- to_chat(user, "I start to [exposed ? "screw the cap back into place" : "unscrew the cap to the drain protector"]...")
- playsound(loc, 'sound/blank.ogg', 50, TRUE)
- if(I.use_tool(src, user, 20))
- user.visible_message("[user] [exposed ? "screws the cap back into place" : "unscrew the cap to the drain protector"]!",
- "I [exposed ? "screw the cap back into place" : "unscrew the cap on the drain"]!",
- "I hear metal and squishing noises.")
- exposed = !exposed
- return TRUE
-
-
-/obj/item/reagent_containers/food/snacks/urinalcake
- name = "urinal cake"
- desc = ""
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "urinalcake"
- w_class = WEIGHT_CLASS_TINY
- list_reagents = list(/datum/reagent/chlorine = 3, /datum/reagent/ammonia = 1)
- foodtype = TOXIC | GROSS
-
-/obj/item/reagent_containers/food/snacks/urinalcake/attack_self(mob/living/user)
- user.visible_message("[user] squishes [src]!", "I squish [src].", "I hear a squish.")
- icon_state = "urinalcake_squish"
- addtimer(VARSET_CALLBACK(src, icon_state, "urinalcake"), 8)
-
-/obj/item/bikehorn/rubberducky
- name = "rubber ducky"
- desc = "" //thanks doohl
- icon = 'icons/obj/watercloset.dmi'
- icon_state = "rubberducky"
- item_state = "rubberducky"
-
-
-/obj/structure/sink
- name = "sink"
- icon = 'icons/obj/watercloset.dmi'
- icon_state = "sink"
- desc = ""
- anchored = TRUE
- var/busy = FALSE //Something's being washed at the moment
- var/dispensedreagent = /datum/reagent/water // for whenever plumbing happens
- var/buildstacktype = /obj/item/stack/sheet/metal
- var/buildstackamount = 1
-
-/obj/structure/sink/attack_hand(mob/living/user)
- . = ..()
- if(.)
- return
- if(!user || !istype(user))
- return
- if(!iscarbon(user))
- return
- if(!Adjacent(user))
- return
-
- if(busy)
- to_chat(user, "Someone's already washing here!")
- return
- var/selected_area = parse_zone(user.zone_selected)
- var/washing_face = 0
- if(selected_area in list(BODY_ZONE_HEAD, BODY_ZONE_PRECISE_MOUTH, BODY_ZONE_PRECISE_R_EYE))
- washing_face = 1
- user.visible_message("[user] starts washing [user.p_their()] [washing_face ? "face" : "hands"]...", \
- "I start washing your [washing_face ? "face" : "hands"]...")
- busy = TRUE
-
- if(!do_after(user, 40, target = src))
- busy = FALSE
- return
-
- busy = FALSE
-
- user.visible_message("[user] washes [user.p_their()] [washing_face ? "face" : "hands"] using [src].", \
- "I wash your [washing_face ? "face" : "hands"] using [src].")
- if(washing_face)
- SEND_SIGNAL(user, COMSIG_COMPONENT_CLEAN_FACE_ACT, CLEAN_STRENGTH_BLOOD)
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- H.lip_style = null //Washes off lipstick
- H.lip_color = initial(H.lip_color)
- H.regenerate_icons()
- user.drowsyness = max(user.drowsyness - rand(2,3), 0) //Washing your face wakes you up if you're falling asleep
- else
- SEND_SIGNAL(user, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
-
-/obj/structure/sink/attackby(obj/item/O, mob/living/user, params)
- if(busy)
- to_chat(user, "Someone's already washing here!")
- return
-
- if(istype(O, /obj/item/reagent_containers))
- var/obj/item/reagent_containers/RG = O
- if(RG.is_refillable())
- if(!RG.reagents.holder_full())
- RG.reagents.add_reagent(dispensedreagent, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this))
- to_chat(user, "I fill [RG] from [src].")
- return TRUE
- to_chat(user, "\The [RG] is full.")
- return FALSE
-
- if(istype(O, /obj/item/mop))
- O.reagents.add_reagent(dispensedreagent, 5)
- to_chat(user, "I wet [O] in [src].")
- playsound(loc, 'sound/blank.ogg', 25, TRUE)
- return
-
- if(O.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1))
- O.play_tool_sound(src)
- deconstruct()
- return
-
- if(istype(O, /obj/item/stack/medical/gauze))
- var/obj/item/stack/medical/gauze/G = O
- new /obj/item/reagent_containers/glass/rag(src.loc)
- to_chat(user, "I tear off a strip of gauze and make a rag.")
- G.use(1)
- return
-
- if(!istype(O))
- return
- if(O.item_flags & ABSTRACT) //Abstract items like grabs won't wash. No-drop items will though because it's still technically an item in your hand.
- return
-
- if(user.used_intent.type != INTENT_HARM)
- to_chat(user, "I start washing [O]...")
- busy = TRUE
- if(!do_after(user, 40, target = src))
- busy = FALSE
- return 1
- busy = FALSE
- SEND_SIGNAL(O, COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
- O.acid_level = 0
- create_reagents(5)
- reagents.add_reagent(dispensedreagent, 5)
- reagents.reaction(O, TOUCH)
- user.visible_message("[user] washes [O] using [src].", \
- "I wash [O] using [src].")
- return 1
- else
- return ..()
-
-/obj/structure/sink/deconstruct()
- if(!(flags_1 & NODECONSTRUCT_1))
- drop_materials()
- ..()
-
-/obj/structure/sink/proc/drop_materials()
- if(buildstacktype)
- new buildstacktype(loc,buildstackamount)
- else
- for(var/i in custom_materials)
- var/datum/material/M = i
- new M.sheet_type(loc, FLOOR(custom_materials[M] / MINERAL_MATERIAL_AMOUNT, 1))
-
-/obj/structure/sink/kitchen
- name = "kitchen sink"
- icon_state = "sink_alt"
-
-
-/obj/structure/sink/puddle //splishy splashy ^_^
- name = "puddle"
- desc = ""
- icon_state = "puddle"
- resistance_flags = UNACIDABLE
-
-//ATTACK HAND IGNORING PARENT RETURN VALUE
-/obj/structure/sink/puddle/attack_hand(mob/M)
- icon_state = "puddle-splash"
- . = ..()
- icon_state = "puddle"
-
-/obj/structure/sink/puddle/attackby(obj/item/O, mob/user, params)
- icon_state = "puddle-splash"
- . = ..()
- icon_state = "puddle"
-
-/obj/structure/sink/puddle/deconstruct(disassembled = TRUE)
- qdel(src)
-
-/obj/structure/sink/greyscale
- icon_state = "sink_greyscale"
- material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR
- buildstacktype = null
-
-//Shower Curtains//
-//Defines used are pre-existing in layers.dm//
-
-/obj/structure/curtain
- name = "curtain"
- desc = ""
- icon = 'icons/obj/watercloset.dmi'
- icon_state = "bathroom-open"
- var/icon_type = "bathroom"//used in making the icon state
- color = "#ACD1E9" //Default color, didn't bother hardcoding other colors, mappers can and should easily change it.
- alpha = 200 //Mappers can also just set this to 255 if they want curtains that can't be seen through
- layer = SIGN_LAYER
- anchored = TRUE
- opacity = 0
- density = FALSE
- var/open = TRUE
-
-/obj/structure/curtain/proc/toggle()
- open = !open
- update_icon()
-
-/obj/structure/curtain/update_icon()
- if(!open)
- icon_state = "[icon_type]-closed"
- layer = WALL_OBJ_LAYER
- density = TRUE
- open = FALSE
-
- else
- icon_state = "[icon_type]-open"
- layer = SIGN_LAYER
- density = FALSE
- open = TRUE
-
-/obj/structure/curtain/attackby(obj/item/W, mob/user)
- if (istype(W, /obj/item/toy/crayon))
- color = input(user,"","Choose Color",color) as color
- else
- return ..()
-
-/obj/structure/curtain/wrench_act(mob/living/user, obj/item/I)
- ..()
- default_unfasten_wrench(user, I, 50)
- return TRUE
-
-/obj/structure/curtain/wirecutter_act(mob/living/user, obj/item/I)
- ..()
- if(anchored)
- return TRUE
-
- user.visible_message("[user] cuts apart [src].",
- "I start to cut apart [src].", "I hear cutting.")
- if(I.use_tool(src, user, 50, volume=100) && !anchored)
- to_chat(user, "I cut apart [src].")
- deconstruct()
-
- return TRUE
-
-
-/obj/structure/curtain/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- playsound(loc, 'sound/blank.ogg', 50, TRUE)
- toggle()
-
-/obj/structure/curtain/deconstruct(disassembled = TRUE)
- new /obj/item/stack/sheet/cloth (loc, 2)
- new /obj/item/stack/sheet/plastic (loc, 2)
- new /obj/item/stack/rods (loc, 1)
- qdel(src)
-
-/obj/structure/curtain/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
- switch(damage_type)
- if(BRUTE)
- if(damage_amount)
- playsound(src.loc, 'sound/blank.ogg', 80, TRUE)
- else
- playsound(loc, 'sound/blank.ogg', 50, TRUE)
- if(BURN)
- playsound(loc, 'sound/blank.ogg', 80, TRUE)
-
-/obj/structure/curtain/bounty
- icon_type = "bounty"
- icon_state = "bounty-open"
- color = null
- alpha = 255
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
deleted file mode 100644
index 32acf655a8..0000000000
--- a/code/game/objects/structures/window.dm
+++ /dev/null
@@ -1,790 +0,0 @@
-/obj/structure/window
- name = "window"
- desc = ""
- icon_state = "window"
- density = TRUE
- layer = ABOVE_OBJ_LAYER //Just above doors
- pressure_resistance = 4*ONE_ATMOSPHERE
- anchored = TRUE //initially is 0 for tile smoothing
- flags_1 = ON_BORDER_1
- max_integrity = 25
- can_be_unanchored = TRUE
- resistance_flags = ACID_PROOF
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
- CanAtmosPass = ATMOS_PASS_PROC
- rad_insulation = RAD_VERY_LIGHT_INSULATION
- rad_flags = RAD_PROTECT_CONTENTS
- var/ini_dir = null
- var/state = WINDOW_OUT_OF_FRAME
- var/reinf = FALSE
- var/heat_resistance = 800
- var/decon_speed = 30
- var/wtype = "glass"
- var/fulltile = FALSE
- var/glass_type = /obj/item/stack/sheet/glass
- var/glass_amount = 1
- var/mutable_appearance/crack_overlay
- var/real_explosion_block //ignore this, just use explosion_block
- var/breaksound = "shatter"
- var/hitsound = 'sound/blank.ogg'
-
-
-/obj/structure/window/examine(mob/user)
- . = ..()
- if(reinf)
- if(anchored && state == WINDOW_SCREWED_TO_FRAME)
- . += "The window is screwed to the frame."
- else if(anchored && state == WINDOW_IN_FRAME)
- . += "The window is unscrewed but pried into the frame."
- else if(anchored && state == WINDOW_OUT_OF_FRAME)
- . += "The window is out of the frame, but could be pried in. It is screwed to the floor."
- else if(!anchored)
- . += "The window is unscrewed from the floor, and could be deconstructed by wrenching."
- else
- if(anchored)
- . += "The window is screwed to the floor."
- else
- . += "The window is unscrewed from the floor, and could be deconstructed by wrenching."
-
-/obj/structure/window/Initialize(mapload, direct)
- . = ..()
- if(direct)
- setDir(direct)
- if(reinf && anchored)
- state = RWINDOW_SECURE
-
- ini_dir = dir
- air_update_turf(1)
-
- if(fulltile)
- setDir()
-
- //windows only block while reinforced and fulltile, so we'll use the proc
- real_explosion_block = explosion_block
- explosion_block = EXPLOSION_BLOCK_PROC
-
-/obj/structure/window/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ,null,CALLBACK(src, PROC_REF(can_be_rotated)),CALLBACK(src,PROC_REF(after_rotation)))
-
-/obj/structure/window/narsie_act()
- add_atom_colour(NARSIE_WINDOW_COLOUR, FIXED_COLOUR_PRIORITY)
-
-/obj/structure/window/singularity_pull()
-
-/obj/structure/window/setDir(direct)
- if(!fulltile)
- ..()
- else
- ..(FULLTILE_WINDOW_DIR)
-
-/obj/structure/window/CanPass(atom/movable/mover, turf/target)
- if(istype(mover) && (mover.pass_flags & PASSGLASS))
- return 1
- if(dir == FULLTILE_WINDOW_DIR)
- return 0 //full tile window, you can't move into it!
- if(get_dir(loc, target) == dir)
- return !density
- if(istype(mover, /obj/structure/window))
- var/obj/structure/window/W = mover
- if(!valid_window_location(loc, W.ini_dir))
- return FALSE
- return 1
-
-/obj/structure/window/CheckExit(atom/movable/O, turf/target)
- if(istype(O) && (O.pass_flags & PASSGLASS))
- return 1
- if(get_dir(O.loc, target) == dir)
- return 0
- return 1
-
-/obj/structure/window/attack_tk(mob/user)
- user.changeNext_move(CLICK_CD_MELEE)
- user.visible_message("Something knocks on [src].")
- add_fingerprint(user)
- playsound(src, 'sound/blank.ogg', 50, TRUE)
-
-/obj/structure/window/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0)
- if(!can_be_reached(user))
- return
- . = ..()
-
-/obj/structure/window/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- if(!can_be_reached(user))
- return
- user.changeNext_move(CLICK_CD_MELEE)
- user.visible_message("[user] knocks on [src].", \
- "I knock on [src].")
- add_fingerprint(user)
- playsound(src, 'sound/blank.ogg', 50, TRUE)
-
-/obj/structure/window/attack_paw(mob/user)
- return attack_hand(user)
-
-/obj/structure/window/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) //used by attack_alien, attack_animal, and attack_slime
- if(!can_be_reached(user))
- return
- ..()
-
-/obj/structure/window/attackby(obj/item/I, mob/living/user, params)
- if(!can_be_reached(user))
- return 1 //skip the afterattack
-
- add_fingerprint(user)
-
- if(I.tool_behaviour == TOOL_WELDER && user.used_intent.type == INTENT_HELP)
- if(obj_integrity < max_integrity)
- if(!I.tool_start_check(user, amount=0))
- return
-
- to_chat(user, "I begin repairing [src]...")
- if(I.use_tool(src, user, 40, volume=50))
- obj_integrity = max_integrity
- update_nearby_icons()
- to_chat(user, "I repair [src].")
- else
- to_chat(user, "[src] is already in good condition!")
- return
-
- if(!(flags_1&NODECONSTRUCT_1) && !(reinf && state >= RWINDOW_FRAME_BOLTED))
- if(I.tool_behaviour == TOOL_SCREWDRIVER)
- to_chat(user, "I begin to [anchored ? "unscrew the window from":"screw the window to"] the floor...")
- if(I.use_tool(src, user, decon_speed, volume = 75, extra_checks = CALLBACK(src, PROC_REF(check_anchored), anchored)))
- setAnchored(!anchored)
- to_chat(user, "I [anchored ? "fasten the window to":"unfasten the window from"] the floor.")
- return
- else if(I.tool_behaviour == TOOL_WRENCH && !anchored)
- to_chat(user, "I begin to disassemble [src]...")
- if(I.use_tool(src, user, decon_speed, volume = 75, extra_checks = CALLBACK(src, PROC_REF(check_state_and_anchored), state, anchored)))
- var/obj/item/stack/sheet/G = new glass_type(user.loc, glass_amount)
- G.add_fingerprint(user)
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- to_chat(user, "I successfully disassemble [src].")
- qdel(src)
- return
- else if(I.tool_behaviour == TOOL_CROWBAR && reinf && (state == WINDOW_OUT_OF_FRAME) && anchored)
- to_chat(user, "I begin to lever the window into the frame...")
- if(I.use_tool(src, user, 100, volume = 75, extra_checks = CALLBACK(src, PROC_REF(check_state_and_anchored), state, anchored)))
- state = RWINDOW_SECURE
- to_chat(user, "I pry the window into the frame.")
- return
-
- return ..()
-
-/obj/structure/window/setAnchored(anchorvalue)
- ..()
- air_update_turf(TRUE)
- update_nearby_icons()
-
-/obj/structure/window/proc/check_state(checked_state)
- if(state == checked_state)
- return TRUE
-
-/obj/structure/window/proc/check_anchored(checked_anchored)
- if(anchored == checked_anchored)
- return TRUE
-
-/obj/structure/window/proc/check_state_and_anchored(checked_state, checked_anchored)
- return check_state(checked_state) && check_anchored(checked_anchored)
-
-/obj/structure/window/proc/can_be_reached(mob/user)
- if(!fulltile)
- if(get_dir(user,src) & dir)
- for(var/obj/O in loc)
- if(!O.CanPass(user, user.loc, 1))
- return 0
- return 1
-
-/obj/structure/window/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1)
- . = ..()
- if(.) //received damage
- update_nearby_icons()
-
-/obj/structure/window/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
- switch(damage_type)
- if(BRUTE)
- if(damage_amount)
- playsound(src, hitsound, 75, TRUE)
- else
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- if(BURN)
- playsound(src, 'sound/blank.ogg', 100, TRUE)
-
-
-/obj/structure/window/deconstruct(disassembled = TRUE)
- if(QDELETED(src))
- return
- if(!disassembled)
- playsound(src, breaksound, 70, TRUE)
- if(!(flags_1 & NODECONSTRUCT_1))
- for(var/obj/item/shard/debris in spawnDebris(drop_location()))
- transfer_fingerprints_to(debris) // transfer fingerprints to shards only
- qdel(src)
- update_nearby_icons()
-
-/obj/structure/window/proc/spawnDebris(location)
- . = list()
- . += new /obj/item/shard(location)
- . += new /obj/effect/decal/cleanable/glass(location)
- if (reinf)
- . += new /obj/item/stack/rods(location, (fulltile ? 2 : 1))
- if (fulltile)
- . += new /obj/item/shard(location)
-
-/obj/structure/window/proc/can_be_rotated(mob/user,rotation_type)
- if(anchored)
- to_chat(user, "[src] cannot be rotated while it is fastened to the floor!")
- return FALSE
-
- var/target_dir = turn(dir, rotation_type == ROTATION_CLOCKWISE ? -90 : 90)
-
- if(!valid_window_location(loc, target_dir))
- to_chat(user, "[src] cannot be rotated in that direction!")
- return FALSE
- return TRUE
-
-/obj/structure/window/proc/after_rotation(mob/user,rotation_type)
- air_update_turf(1)
- ini_dir = dir
- add_fingerprint(user)
-
-/obj/structure/window/Destroy()
- density = FALSE
- air_update_turf(1)
- update_nearby_icons()
- return ..()
-
-
-/obj/structure/window/Move()
- var/turf/T = loc
- . = ..()
- setDir(ini_dir)
- move_update_air(T)
-
-/obj/structure/window/CanAtmosPass(turf/T)
- if(!anchored || !density)
- return TRUE
- return !(FULLTILE_WINDOW_DIR == dir || dir == get_dir(loc, T))
-
-//This proc is used to update the icons of nearby windows.
-/obj/structure/window/proc/update_nearby_icons()
- update_icon()
- if(smooth)
- queue_smooth_neighbors(src)
-
-//merges adjacent full-tile windows into one
-/obj/structure/window/update_icon()
- if(!QDELETED(src))
- if(!fulltile)
- return
-
- var/ratio = obj_integrity / max_integrity
- ratio = CEILING(ratio*4, 1) * 25
-
- if(smooth)
- queue_smooth(src)
-
- cut_overlay(crack_overlay)
- if(ratio > 75)
- return
- crack_overlay = mutable_appearance('icons/obj/structures.dmi', "damage[ratio]", -(layer+0.1))
- add_overlay(crack_overlay)
-
-/obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
-
- if(exposed_temperature > (T0C + heat_resistance))
- take_damage(round(exposed_volume / 100), BURN, 0, 0)
- ..()
-
-/obj/structure/window/get_dumping_location(obj/item/storage/source,mob/user)
- return null
-
-/obj/structure/window/CanAStarPass(ID, to_dir)
- if(!density)
- return 1
- if((dir == FULLTILE_WINDOW_DIR) || (dir == to_dir))
- return 0
-
- return 1
-
-/obj/structure/window/GetExplosionBlock()
- return reinf && fulltile ? real_explosion_block : 0
-
-/obj/structure/window/spawner/east
- dir = EAST
-
-/obj/structure/window/spawner/west
- dir = WEST
-
-/obj/structure/window/spawner/north
- dir = NORTH
-
-/obj/structure/window/unanchored
- anchored = FALSE
-
-/obj/structure/window/reinforced
- name = "reinforced window"
- desc = ""
- icon_state = "rwindow"
- reinf = TRUE
- heat_resistance = 1600
- armor = list("melee" = 80, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
- max_integrity = 75
- explosion_block = 1
- damage_deflection = 11
- state = RWINDOW_SECURE
- glass_type = /obj/item/stack/sheet/rglass
- rad_insulation = RAD_HEAVY_INSULATION
-
-//this is shitcode but all of construction is shitcode and needs a refactor, it works for now
-//If you find this like 4 years later and construction still hasn't been refactored, I'm so sorry for this
-/obj/structure/window/reinforced/attackby(obj/item/I, mob/living/user, params)
- switch(state)
- if(RWINDOW_SECURE)
- if(I.tool_behaviour == TOOL_WELDER && user.used_intent.type == INTENT_HARM)
- user.visible_message("[user] holds \the [I] to the security screws on \the [src]...",
- "I begin heating the security screws on \the [src]...")
- if(I.use_tool(src, user, 150, volume = 100))
- to_chat(user, "The security bolts are glowing white hot and look ready to be removed.")
- state = RWINDOW_BOLTS_HEATED
- addtimer(CALLBACK(src, PROC_REF(cool_bolts)), 300)
- return
- if(RWINDOW_BOLTS_HEATED)
- if(I.tool_behaviour == TOOL_SCREWDRIVER)
- user.visible_message("[user] digs into the heated security screws and starts removing them...",
- "I dig into the heated screws hard and they start turning...")
- if(I.use_tool(src, user, 50, volume = 50))
- state = RWINDOW_BOLTS_OUT
- to_chat(user, "The screws come out, and a gap forms around the edge of the pane.")
- return
- if(RWINDOW_BOLTS_OUT)
- if(I.tool_behaviour == TOOL_CROWBAR)
- user.visible_message("[user] wedges \the [I] into the gap in the frame and starts prying...",
- "I wedge \the [I] into the gap in the frame and start prying...")
- if(I.use_tool(src, user, 40, volume = 50))
- state = RWINDOW_POPPED
- to_chat(user, "The panel pops out of the frame, exposing some thin metal bars that looks like they can be cut.")
- return
- if(RWINDOW_POPPED)
- if(I.tool_behaviour == TOOL_WIRECUTTER)
- user.visible_message("[user] starts cutting the exposed bars on \the [src]...",
- "I start cutting the exposed bars on \the [src]")
- if(I.use_tool(src, user, 20, volume = 50))
- state = RWINDOW_BARS_CUT
- to_chat(user, "The panels falls out of the way exposing the frame bolts.")
- return
- if(RWINDOW_BARS_CUT)
- if(I.tool_behaviour == TOOL_WRENCH)
- user.visible_message("[user] starts unfastening \the [src] from the frame...",
- "I start unfastening the bolts from the frame...")
- if(I.use_tool(src, user, 40, volume = 50))
- to_chat(user, "I unscrew the bolts from the frame and the window pops loose.")
- state = WINDOW_OUT_OF_FRAME
- setAnchored(FALSE)
- return
- return ..()
-
-/obj/structure/window/proc/cool_bolts()
- if(state == RWINDOW_BOLTS_HEATED)
- state = RWINDOW_SECURE
- visible_message("The bolts on \the [src] look like they've cooled off...")
-
-/obj/structure/window/reinforced/examine(mob/user)
- . = ..()
- switch(state)
- if(RWINDOW_SECURE)
- . += "It's been screwed in with one way screws, you'd need to heat them to have any chance of backing them out."
- if(RWINDOW_BOLTS_HEATED)
- . += "The screws are glowing white hot, and you'll likely be able to unscrew them now."
- if(RWINDOW_BOLTS_OUT)
- . += "The screws have been removed, revealing a small gap you could fit a prying tool in."
- if(RWINDOW_POPPED)
- . += "The main plate of the window has popped out of the frame, exposing some bars that look like they can be cut."
- if(RWINDOW_BARS_CUT)
- . += "The main pane can be easily moved out of the way to reveal some bolts holding the frame in."
-
-/obj/structure/window/reinforced/spawner/east
- dir = EAST
-
-/obj/structure/window/reinforced/spawner/west
- dir = WEST
-
-/obj/structure/window/reinforced/spawner/north
- dir = NORTH
-
-/obj/structure/window/reinforced/unanchored
- anchored = FALSE
- state = WINDOW_OUT_OF_FRAME
-
-/obj/structure/window/plasma
- name = "plasma window"
- desc = ""
- icon_state = "plasmawindow"
- reinf = FALSE
- heat_resistance = 25000
- armor = list("melee" = 80, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 45, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
- max_integrity = 200
- explosion_block = 1
- glass_type = /obj/item/stack/sheet/plasmaglass
- rad_insulation = RAD_NO_INSULATION
-
-/obj/structure/window/plasma/spawnDebris(location)
- . = list()
- . += new /obj/item/shard/plasma(location)
- . += new /obj/effect/decal/cleanable/glass/plasma(location)
- if (reinf)
- . += new /obj/item/stack/rods(location, (fulltile ? 2 : 1))
- if (fulltile)
- . += new /obj/item/shard/plasma(location)
-
-/obj/structure/window/plasma/spawner/east
- dir = EAST
-
-/obj/structure/window/plasma/spawner/west
- dir = WEST
-
-/obj/structure/window/plasma/spawner/north
- dir = NORTH
-
-/obj/structure/window/plasma/unanchored
- anchored = FALSE
-
-/obj/structure/window/plasma/reinforced
- name = "reinforced plasma window"
- desc = ""
- icon_state = "plasmarwindow"
- reinf = TRUE
- heat_resistance = 50000
- armor = list("melee" = 80, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
- max_integrity = 500
- damage_deflection = 21
- explosion_block = 2
- glass_type = /obj/item/stack/sheet/plasmarglass
-
-//entirely copypasted code
-//take this out when construction is made a component or otherwise modularized in some way
-/obj/structure/window/plasma/reinforced/attackby(obj/item/I, mob/living/user, params)
- switch(state)
- if(RWINDOW_SECURE)
- if(I.tool_behaviour == TOOL_WELDER && user.used_intent.type == INTENT_HARM)
- user.visible_message("[user] holds \the [I] to the security screws on \the [src]...",
- "I begin heating the security screws on \the [src]...")
- if(I.use_tool(src, user, 180, volume = 100))
- to_chat(user, "The security screws are glowing white hot and look ready to be removed.")
- state = RWINDOW_BOLTS_HEATED
- addtimer(CALLBACK(src, PROC_REF(cool_bolts)), 300)
- return
- if(RWINDOW_BOLTS_HEATED)
- if(I.tool_behaviour == TOOL_SCREWDRIVER)
- user.visible_message("[user] digs into the heated security screws and starts removing them...",
- "I dig into the heated screws hard and they start turning...")
- if(I.use_tool(src, user, 80, volume = 50))
- state = RWINDOW_BOLTS_OUT
- to_chat(user, "The screws come out, and a gap forms around the edge of the pane.")
- return
- if(RWINDOW_BOLTS_OUT)
- if(I.tool_behaviour == TOOL_CROWBAR)
- user.visible_message("[user] wedges \the [I] into the gap in the frame and starts prying...",
- "I wedge \the [I] into the gap in the frame and start prying...")
- if(I.use_tool(src, user, 50, volume = 50))
- state = RWINDOW_POPPED
- to_chat(user, "The panel pops out of the frame, exposing some thin metal bars that looks like they can be cut.")
- return
- if(RWINDOW_POPPED)
- if(I.tool_behaviour == TOOL_WIRECUTTER)
- user.visible_message("[user] starts cutting the exposed bars on \the [src]...",
- "I start cutting the exposed bars on \the [src]")
- if(I.use_tool(src, user, 30, volume = 50))
- state = RWINDOW_BARS_CUT
- to_chat(user, "The panels falls out of the way exposing the frame bolts.")
- return
- if(RWINDOW_BARS_CUT)
- if(I.tool_behaviour == TOOL_WRENCH)
- user.visible_message("[user] starts unfastening \the [src] from the frame...",
- "I start unfastening the bolts from the frame...")
- if(I.use_tool(src, user, 50, volume = 50))
- to_chat(user, "I unfasten the bolts from the frame and the window pops loose.")
- state = WINDOW_OUT_OF_FRAME
- setAnchored(FALSE)
- return
- return ..()
-
-/obj/structure/window/plasma/reinforced/examine(mob/user)
- . = ..()
- switch(state)
- if(RWINDOW_SECURE)
- . += "It's been screwed in with one way screws, you'd need to heat them to have any chance of backing them out."
- if(RWINDOW_BOLTS_HEATED)
- . += "The screws are glowing white hot, and you'll likely be able to unscrew them now."
- if(RWINDOW_BOLTS_OUT)
- . += "The screws have been removed, revealing a small gap you could fit a prying tool in."
- if(RWINDOW_POPPED)
- . += "The main plate of the window has popped out of the frame, exposing some bars that look like they can be cut."
- if(RWINDOW_BARS_CUT)
- . += "The main pane can be easily moved out of the way to reveal some bolts holding the frame in."
-
-/obj/structure/window/plasma/reinforced/spawner/east
- dir = EAST
-
-/obj/structure/window/plasma/reinforced/spawner/west
- dir = WEST
-
-/obj/structure/window/plasma/reinforced/spawner/north
- dir = NORTH
-
-/obj/structure/window/plasma/reinforced/unanchored
- anchored = FALSE
- state = WINDOW_OUT_OF_FRAME
-
-/obj/structure/window/reinforced/tinted
- name = "tinted window"
- icon_state = "twindow"
- opacity = 1
-/obj/structure/window/reinforced/tinted/frosted
- name = "frosted window"
- icon_state = "fwindow"
-
-/* Full Tile Windows (more obj_integrity) */
-
-/obj/structure/window/fulltile
- icon = 'icons/obj/smooth_structures/window.dmi'
- icon_state = "window"
- dir = FULLTILE_WINDOW_DIR
- max_integrity = 50
- fulltile = TRUE
- flags_1 = PREVENT_CLICK_UNDER_1
- smooth = SMOOTH_TRUE
- canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile)
- glass_amount = 2
-
-/obj/structure/window/fulltile/unanchored
- anchored = FALSE
-
-/obj/structure/window/plasma/fulltile
- icon = 'icons/obj/smooth_structures/plasma_window.dmi'
- icon_state = "plasmawindow"
- dir = FULLTILE_WINDOW_DIR
- max_integrity = 300
- fulltile = TRUE
- flags_1 = PREVENT_CLICK_UNDER_1
- smooth = SMOOTH_TRUE
- canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile)
- glass_amount = 2
-
-/obj/structure/window/plasma/fulltile/unanchored
- anchored = FALSE
-
-/obj/structure/window/plasma/reinforced/fulltile
- icon = 'icons/obj/smooth_structures/rplasma_window.dmi'
- icon_state = "rplasmawindow"
- dir = FULLTILE_WINDOW_DIR
- state = RWINDOW_SECURE
- max_integrity = 1000
- fulltile = TRUE
- flags_1 = PREVENT_CLICK_UNDER_1
- smooth = SMOOTH_TRUE
- glass_amount = 2
-
-/obj/structure/window/plasma/reinforced/fulltile/unanchored
- anchored = FALSE
- state = WINDOW_OUT_OF_FRAME
-
-/obj/structure/window/reinforced/fulltile
- icon = 'icons/obj/smooth_structures/reinforced_window.dmi'
- icon_state = "r_window"
- dir = FULLTILE_WINDOW_DIR
- max_integrity = 150
- fulltile = TRUE
- flags_1 = PREVENT_CLICK_UNDER_1
- smooth = SMOOTH_TRUE
- state = RWINDOW_SECURE
- canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile)
- level = 3
- glass_amount = 2
-
-/obj/structure/window/reinforced/fulltile/unanchored
- anchored = FALSE
- state = WINDOW_OUT_OF_FRAME
-
-/obj/structure/window/reinforced/tinted/fulltile
- icon = 'icons/obj/smooth_structures/tinted_window.dmi'
- icon_state = "tinted_window"
- dir = FULLTILE_WINDOW_DIR
- fulltile = TRUE
- flags_1 = PREVENT_CLICK_UNDER_1
- smooth = SMOOTH_TRUE
- canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile)
- level = 3
- glass_amount = 2
-
-/obj/structure/window/reinforced/fulltile/ice
- icon = 'icons/obj/smooth_structures/rice_window.dmi'
- icon_state = "ice_window"
- max_integrity = 150
- canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile)
- level = 3
- glass_amount = 2
-
-/obj/structure/window/shuttle
- name = "shuttle window"
- desc = ""
- icon = 'icons/obj/smooth_structures/shuttle_window.dmi'
- icon_state = "shuttle_window"
- dir = FULLTILE_WINDOW_DIR
- max_integrity = 150
- wtype = "shuttle"
- fulltile = TRUE
- flags_1 = PREVENT_CLICK_UNDER_1
- reinf = TRUE
- heat_resistance = 1600
- armor = list("melee" = 90, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
- smooth = SMOOTH_TRUE
- canSmoothWith = null
- explosion_block = 3
- level = 3
- glass_type = /obj/item/stack/sheet/titaniumglass
- glass_amount = 2
-
-/obj/structure/window/shuttle/narsie_act()
- add_atom_colour("#3C3434", FIXED_COLOUR_PRIORITY)
-
-/obj/structure/window/shuttle/tinted
- opacity = TRUE
-
-/obj/structure/window/shuttle/unanchored
- anchored = FALSE
-
-/obj/structure/window/plasma/reinforced/plastitanium
- name = "plastitanium window"
- desc = ""
- icon = 'icons/obj/smooth_structures/plastitanium_window.dmi'
- icon_state = "plastitanium_window"
- dir = FULLTILE_WINDOW_DIR
- max_integrity = 200
- wtype = "shuttle"
- fulltile = TRUE
- flags_1 = PREVENT_CLICK_UNDER_1
- heat_resistance = 1600
- armor = list("melee" = 95, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
- smooth = SMOOTH_TRUE
- canSmoothWith = null
- explosion_block = 3
- damage_deflection = 11 //The same as normal reinforced windows.
- level = 3
- glass_type = /obj/item/stack/sheet/plastitaniumglass
- glass_amount = 2
- rad_insulation = RAD_HEAVY_INSULATION
-
-/obj/structure/window/plasma/reinforced/plastitanium/unanchored
- anchored = FALSE
- state = WINDOW_OUT_OF_FRAME
-
-/obj/structure/window/paperframe
- name = "paper frame"
- desc = ""
- icon = 'icons/obj/smooth_structures/paperframes.dmi'
- icon_state = "frame"
- dir = FULLTILE_WINDOW_DIR
- opacity = TRUE
- max_integrity = 15
- fulltile = TRUE
- flags_1 = PREVENT_CLICK_UNDER_1
- smooth = SMOOTH_TRUE
- canSmoothWith = list(/obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe)
- glass_amount = 2
- glass_type = /obj/item/stack/sheet/paperframes
- heat_resistance = 233
- decon_speed = 10
- CanAtmosPass = ATMOS_PASS_YES
- resistance_flags = FLAMMABLE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- breaksound = 'sound/blank.ogg'
- hitsound = 'sound/blank.ogg'
- var/static/mutable_appearance/torn = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "torn", layer = ABOVE_OBJ_LAYER - 0.1)
- var/static/mutable_appearance/paper = mutable_appearance('icons/obj/smooth_structures/paperframes.dmi',icon_state = "paper", layer = ABOVE_OBJ_LAYER - 0.1)
-
-/obj/structure/window/paperframe/Initialize()
- . = ..()
- update_icon()
-
-/obj/structure/window/paperframe/examine(mob/user)
- . = ..()
- if(obj_integrity < max_integrity)
- . += "It looks a bit damaged, you may be able to fix it with some paper."
-
-/obj/structure/window/paperframe/spawnDebris(location)
- . = list(new /obj/item/stack/sheet/mineral/wood(location))
- for (var/i in 1 to rand(1,4))
- . += new /obj/item/paper/natural(location)
-
-/obj/structure/window/paperframe/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- add_fingerprint(user)
- if(user.used_intent.type != INTENT_HARM)
- user.changeNext_move(CLICK_CD_MELEE)
- user.visible_message("[user] knocks on [src].")
- playsound(src, "pageturn", 50, TRUE)
- else
- take_damage(4,BRUTE,"melee", 0)
- playsound(src, hitsound, 50, TRUE)
- if(!QDELETED(src))
- user.visible_message("[user] tears a hole in [src].")
- update_icon()
-
-/obj/structure/window/paperframe/update_icon()
- if(obj_integrity < max_integrity)
- cut_overlay(paper)
- add_overlay(torn)
- set_opacity(FALSE)
- else
- cut_overlay(torn)
- add_overlay(paper)
- set_opacity(TRUE)
- queue_smooth(src)
-
-
-/obj/structure/window/paperframe/attackby(obj/item/W, mob/user)
- if(W.get_temperature())
- fire_act(W.get_temperature())
- return
- if(user.used_intent.type == INTENT_HARM)
- return ..()
- if(istype(W, /obj/item/paper) && obj_integrity < max_integrity)
- user.visible_message("[user] starts to patch the holes in \the [src].")
- if(do_after(user, 20, target = src))
- obj_integrity = min(obj_integrity+4,max_integrity)
- qdel(W)
- user.visible_message("[user] patches some of the holes in \the [src].")
- if(obj_integrity == max_integrity)
- update_icon()
- return
- ..()
- update_icon()
-
-/obj/structure/window/bronze
- name = "brass window"
- desc = ""
- icon = 'icons/obj/smooth_structures/clockwork_window.dmi'
- icon_state = "clockwork_window_single"
- glass_type = /obj/item/stack/tile/bronze
-
-/obj/structure/window/bronze/unanchored
- anchored = FALSE
-
-/obj/structure/window/bronze/fulltile
- icon_state = "clockwork_window"
- smooth = SMOOTH_TRUE
- canSmoothWith = null
- fulltile = TRUE
- flags_1 = PREVENT_CLICK_UNDER_1
- dir = FULLTILE_WINDOW_DIR
- max_integrity = 50
- glass_amount = 2
-
-/obj/structure/window/bronze/fulltile/unanchored
- anchored = FALSE
diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm
deleted file mode 100644
index 6368fa3c54..0000000000
--- a/code/game/shuttle_engines.dm
+++ /dev/null
@@ -1,158 +0,0 @@
-#define ENGINE_UNWRENCHED 0
-#define ENGINE_WRENCHED 1
-#define ENGINE_WELDED 2
-#define ENGINE_WELDTIME 200
-
-/obj/structure/shuttle
- name = "shuttle"
- icon = 'icons/turf/shuttle.dmi'
- resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
- max_integrity = 500
- armor = list("melee" = 100, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) //default + ignores melee
-
-/obj/structure/shuttle/engine
- name = "engine"
- desc = ""
- density = TRUE
- anchored = TRUE
- var/engine_power = 1
- var/state = ENGINE_WELDED //welding shmelding
-
-//Ugh this is a lot of copypasta from emitters, welding need some boilerplate reduction
-/obj/structure/shuttle/engine/can_be_unfasten_wrench(mob/user, silent)
- if(state == ENGINE_WELDED)
- if(!silent)
- to_chat(user, "[src] is welded to the floor!")
- return FAILED_UNFASTEN
- return ..()
-
-/obj/structure/shuttle/engine/default_unfasten_wrench(mob/user, obj/item/I, time = 20)
- . = ..()
- if(. == SUCCESSFUL_UNFASTEN)
- if(anchored)
- state = ENGINE_WRENCHED
- else
- state = ENGINE_UNWRENCHED
-
-/obj/structure/shuttle/engine/wrench_act(mob/living/user, obj/item/I)
- ..()
- default_unfasten_wrench(user, I)
- return TRUE
-
-/obj/structure/shuttle/engine/welder_act(mob/living/user, obj/item/I)
- . = ..()
- switch(state)
- if(ENGINE_UNWRENCHED)
- to_chat(user, "The [src.name] needs to be wrenched to the floor!")
- if(ENGINE_WRENCHED)
- if(!I.tool_start_check(user, amount=0))
- return TRUE
-
- user.visible_message("[user.name] starts to weld the [name] to the floor.", \
- "I start to weld \the [src] to the floor...", \
- "I hear welding.")
-
- if(I.use_tool(src, user, ENGINE_WELDTIME, volume=50))
- state = ENGINE_WELDED
- to_chat(user, "I weld \the [src] to the floor.")
- alter_engine_power(engine_power)
-
- if(ENGINE_WELDED)
- if(!I.tool_start_check(user, amount=0))
- return TRUE
-
- user.visible_message("[user.name] starts to cut the [name] free from the floor.", \
- "I start to cut \the [src] free from the floor...", \
- "I hear welding.")
-
- if(I.use_tool(src, user, ENGINE_WELDTIME, volume=50))
- state = ENGINE_WRENCHED
- to_chat(user, "I cut \the [src] free from the floor.")
- alter_engine_power(-engine_power)
- return TRUE
-
-/obj/structure/shuttle/engine/Destroy()
- if(state == ENGINE_WELDED)
- alter_engine_power(-engine_power)
- . = ..()
-
-//Propagates the change to the shuttle.
-/obj/structure/shuttle/engine/proc/alter_engine_power(mod)
- if(mod == 0)
- return
- if(SSshuttle.is_in_shuttle_bounds(src))
- var/obj/docking_port/mobile/M = SSshuttle.get_containing_shuttle(src)
- if(M)
- M.alter_engines(mod)
-
-/obj/structure/shuttle/engine/heater
- name = "engine heater"
- icon_state = "heater"
- desc = ""
- engine_power = 0 // todo make these into 2x1 parts
-
-/obj/structure/shuttle/engine/platform
- name = "engine platform"
- icon_state = "platform"
- desc = ""
- engine_power = 0
-
-/obj/structure/shuttle/engine/propulsion
- name = "propulsion engine"
- icon_state = "propulsion"
- desc = ""
- opacity = 1
-
-/obj/structure/shuttle/engine/propulsion/left
- name = "left propulsion engine"
- icon_state = "propulsion_l"
-
-/obj/structure/shuttle/engine/propulsion/right
- name = "right propulsion engine"
- icon_state = "propulsion_r"
-
-/obj/structure/shuttle/engine/propulsion/burst
- name = "burst engine"
- desc = ""
-
-/obj/structure/shuttle/engine/propulsion/burst/cargo
- state = ENGINE_UNWRENCHED
- anchored = FALSE
-
-/obj/structure/shuttle/engine/propulsion/burst/left
- name = "left burst engine"
- icon_state = "burst_l"
-
-/obj/structure/shuttle/engine/propulsion/burst/right
- name = "right burst engine"
- icon_state = "burst_r"
-
-/obj/structure/shuttle/engine/router
- name = "engine router"
- icon_state = "router"
- desc = ""
-
-/obj/structure/shuttle/engine/large
- name = "engine"
- opacity = 1
- icon = 'icons/obj/2x2.dmi'
- icon_state = "large_engine"
- desc = ""
- bound_width = 64
- bound_height = 64
- appearance_flags = 0
-
-/obj/structure/shuttle/engine/huge
- name = "engine"
- opacity = 1
- icon = 'icons/obj/3x3.dmi'
- icon_state = "huge_engine"
- desc = ""
- bound_width = 96
- bound_height = 96
- appearance_flags = 0
-
-#undef ENGINE_UNWRENCHED
-#undef ENGINE_WRENCHED
-#undef ENGINE_WELDED
-#undef ENGINE_WELDTIME
diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm
index 13773d0122..2c84dd1cda 100644
--- a/code/game/turfs/change_turf.dm
+++ b/code/game/turfs/change_turf.dm
@@ -1,6 +1,5 @@
// This is a list of turf types we dont want to assign to baseturfs unless through initialization or explicitly
GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
- /turf/open/space,
/turf/baseturf_bottom,
)))
@@ -67,10 +66,6 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
if (!ispath(path))
warning("Z-level [z] has invalid baseturf '[SSmapping.level_trait(z, ZTRAIT_BASETURF)]'")
path = /turf/open/floor/rogue/naturalstone
- if(/turf/open/space/basic)
- // basic doesn't initialize and this will cause issues
- // no warning though because this can happen naturaly as a result of it being built on top of
- path = /turf/open/space
if(!GLOB.use_preloader && path == type && !(flags & CHANGETURF_FORCEOP)) // Don't no-op if the map loader requires it to be reconstructed
return src
@@ -161,9 +156,6 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list(
else
lighting_clear_overlay()
- for(var/turf/open/space/S in RANGE_TURFS(1, src)) //RANGE_TURFS is in code\__HELPERS\game.dm
- S.update_starlight()
-
return W
/turf/open/ChangeTurf(path, list/new_baseturfs, flags) //Resist the temptation to make this default to keeping air.
diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm
index a903b3a4df..7be5ebb5c1 100644
--- a/code/game/turfs/closed/_closed.dm
+++ b/code/game/turfs/closed/_closed.dm
@@ -228,158 +228,6 @@
to_be_destroyed = FALSE
return src
-/turf/closed/indestructible/singularity_act()
- return
-
-/turf/closed/indestructible/oldshuttle
- name = "strange shuttle wall"
- icon = 'icons/turf/shuttleold.dmi'
- icon_state = "block"
-
-/turf/closed/indestructible/sandstone
- name = "sandstone wall"
- desc = ""
- icon = 'icons/turf/walls/sandstone_wall.dmi'
- icon_state = "sandstone"
- baseturfs = /turf/closed/indestructible/sandstone
- smooth = SMOOTH_TRUE
-
-/turf/closed/indestructible/oldshuttle/corner
- icon_state = "corner"
-
-/turf/closed/indestructible/splashscreen
- name = ""
- icon = 'icons/default_title.dmi'
- icon_state = ""
- layer = FLY_LAYER
- bullet_bounce_sound = null
-
-/turf/closed/indestructible/splashscreen/New()
- SStitle.splash_turf = src
- if(SStitle.icon)
- icon = SStitle.icon
- ..()
-
-/turf/closed/indestructible/splashscreen/vv_edit_var(var_name, var_value)
- . = ..()
- if(.)
- switch(var_name)
- if("icon")
- SStitle.icon = icon
-
-/turf/closed/indestructible/riveted
- icon = 'icons/turf/walls/riveted.dmi'
- icon_state = "riveted"
- smooth = SMOOTH_TRUE
-
-/turf/closed/indestructible/syndicate
- icon = 'icons/turf/walls/plastitanium_wall.dmi'
- icon_state = "map-shuttle"
- smooth = SMOOTH_MORE
-
-/turf/closed/indestructible/riveted/uranium
- icon = 'icons/turf/walls/uranium_wall.dmi'
- icon_state = "uranium"
-
-/turf/closed/indestructible/abductor
- icon_state = "alien1"
-
-/turf/closed/indestructible/opshuttle
- icon_state = "wall3"
-
-/turf/closed/indestructible/fakeglass
- name = "window"
- icon_state = "fake_window"
- opacity = 0
- smooth = SMOOTH_TRUE
- icon = 'icons/obj/smooth_structures/reinforced_window.dmi'
-
-/turf/closed/indestructible/fakeglass/Initialize()
- . = ..()
- icon_state = null //set the icon state to null, so our base state isn't visible
- underlays += mutable_appearance('icons/obj/structures.dmi', "grille") //add a grille underlay
- underlays += mutable_appearance('icons/turf/floors.dmi', "plating") //add the plating underlay, below the grille
-
-/turf/closed/indestructible/opsglass
- name = "window"
- icon_state = "plastitanium_window"
- opacity = 0
- smooth = SMOOTH_TRUE
- icon = 'icons/obj/smooth_structures/plastitanium_window.dmi'
-
-/turf/closed/indestructible/opsglass/Initialize()
- . = ..()
- icon_state = null
- underlays += mutable_appearance('icons/obj/structures.dmi', "grille")
- underlays += mutable_appearance('icons/turf/floors.dmi', "plating")
-
-/turf/closed/indestructible/fakedoor
- name = "CentCom Access"
- icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi'
- icon_state = "fake_door"
-
-/turf/closed/indestructible/rock
- name = "granite"
- desc = ""
- icon = 'icons/turf/mining.dmi'
- icon_state = "rock2"
-
-/turf/closed/indestructible/rock/snow
- name = "mountainside"
- desc = ""
- icon = 'icons/turf/walls.dmi'
- icon_state = "snowrock"
- bullet_sizzle = TRUE
- bullet_bounce_sound = null
-
-/turf/closed/indestructible/rock/snow/ice
- name = "iced rock"
- desc = ""
- icon = 'icons/turf/walls.dmi'
- icon_state = "icerock"
-
-/turf/closed/indestructible/paper
- name = "thick paper wall"
- desc = ""
- icon = 'icons/turf/walls.dmi'
- icon_state = "paperwall"
-
-/turf/closed/indestructible/necropolis
- name = "necropolis wall"
- desc = ""
- icon = 'icons/turf/walls.dmi'
- icon_state = "necro"
- explosion_block = 50
- baseturfs = /turf/closed/indestructible/necropolis
-
-/turf/closed/indestructible/necropolis/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
- underlay_appearance.icon = 'icons/turf/floors.dmi'
- underlay_appearance.icon_state = "necro1"
- return TRUE
-
-/turf/closed/indestructible/riveted/boss
- name = "necropolis wall"
- desc = ""
- icon = 'icons/turf/walls/boss_wall.dmi'
- icon_state = "wall"
- canSmoothWith = list(/turf/closed/indestructible/riveted/boss, /turf/closed/indestructible/riveted/boss/see_through)
- explosion_block = 50
- baseturfs = /turf/closed/indestructible/riveted/boss
-
-/turf/closed/indestructible/riveted/boss/see_through
- opacity = FALSE
-
-/turf/closed/indestructible/riveted/boss/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
- underlay_appearance.icon = 'icons/turf/floors.dmi'
- underlay_appearance.icon_state = "basalt"
- return TRUE
-
-/turf/closed/indestructible/riveted/hierophant
- name = "wall"
- desc = ""
- icon = 'icons/turf/walls/hierophant_wall.dmi'
- icon_state = "wall"
-
// Dakkatown Turfs
/turf/closed/indestructible/wooddark
name = "wall"
diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm
index d31e36c183..4b8a993811 100644
--- a/code/game/turfs/closed/minerals.dm
+++ b/code/game/turfs/closed/minerals.dm
@@ -13,7 +13,7 @@
// layer = EDGED_TURF_LAYER
temperature = TCMB
var/environment_type = "asteroid"
- var/turf/open/floor/plating/turf_type = /turf/open/floor/plating/asteroid/airless
+ var/turf/open/floor/turf_type = /turf/open/floor
var/obj/item/mineralType = null
var/obj/item/natural/rock/rockType = null
var/mineralAmt = 3
@@ -87,43 +87,16 @@
if(prob(23))
new rockType(src)
SSblackbox.record_feedback("tally", "ore_mined", mineralAmt, mineralType)
-// if(ishuman(user))
-// var/mob/living/carbon/human/H = user
-// if(give_exp)
-// if (mineralType && (mineralAmt > 0))
-// H.mind.adjust_experience(/datum/skill/mining, initial(mineralType.mine_experience) * mineralAmt)
-// else
-// H.mind.adjust_experience(/datum/skill/mining, 4)
-
var/flags = NONE
if(defer_change) // TODO: make the defer change var a var for any changeturf flag
flags = CHANGETURF_DEFER_CHANGE
ScrapeAway(null, flags)
addtimer(CALLBACK(src, PROC_REF(AfterChange)), 1, TIMER_UNIQUE)
-// playsound(src, 'sound/blank.ogg', 100, TRUE) //beautiful destruction
/turf/closed/mineral/attack_animal(mob/living/simple_animal/user)
if((user.environment_smash & ENVIRONMENT_SMASH_WALLS) || (user.environment_smash & ENVIRONMENT_SMASH_RWALLS))
gets_drilled(user)
..()
-
-/*
-/turf/closed/mineral/Bumped(atom/movable/AM)
- ..()
- if(ishuman(AM))
- var/mob/living/carbon/human/H = AM
- var/obj/item/I = H.get_active_held_item()
- if(I && H.a_intent.blade_class == BCLASS_PICK)
- attackby(I, H)
- return
- else if(iscyborg(AM))
- var/mob/living/silicon/robot/R = AM
- if(R.module_active && R.module_active.tool_behaviour == TOOL_MINING)
- attackby(R.module_active, R)
- return
- else
- return
-*/
/turf/closed/mineral/acid_melt()
ScrapeAway()
@@ -144,9 +117,7 @@
T.ChangeTurf(type)
/turf/closed/mineral/random
- var/list/mineralSpawnChanceList = list(/turf/closed/mineral/uranium = 5, /turf/closed/mineral/diamond = 1, /turf/closed/mineral/gold = 10,
- /turf/closed/mineral/silver = 12, /turf/closed/mineral/plasma = 20, /turf/closed/mineral/iron = 40, /turf/closed/mineral/titanium = 11,
- /turf/closed/mineral/bscrystal = 1)
+ var/list/mineralSpawnChanceList = list()
//Currently, Adamantine won't spawn as it has no uses. -Durandan
var/mineralChance = 13
var/display_icon_state = "rock"
@@ -171,314 +142,6 @@
src = M
M.levelupdate()
-/turf/closed/mineral/random/no_caves
- mineralSpawnChanceList = list(/turf/closed/mineral/uranium = 5, /turf/closed/mineral/diamond = 1, /turf/closed/mineral/gold = 10,
- /turf/closed/mineral/silver = 12, /turf/closed/mineral/plasma = 20, /turf/closed/mineral/iron = 40, /turf/closed/mineral/titanium = 11,
- /turf/closed/mineral/bscrystal = 1)
-
-/turf/closed/mineral/random/high_chance
- icon_state = "rock_highchance"
- mineralChance = 25
- mineralSpawnChanceList = list(
- /turf/closed/mineral/uranium = 35, /turf/closed/mineral/diamond = 30, /turf/closed/mineral/gold = 45, /turf/closed/mineral/titanium = 45,
- /turf/closed/mineral/silver = 50, /turf/closed/mineral/plasma = 50, /turf/closed/mineral/bscrystal = 20)
-
-/turf/closed/mineral/random/high_chance/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- defer_change = 1
- mineralSpawnChanceList = list(
- /turf/closed/mineral/uranium/volcanic = 35, /turf/closed/mineral/diamond/volcanic = 30, /turf/closed/mineral/gold/volcanic = 45, /turf/closed/mineral/titanium/volcanic = 45,
- /turf/closed/mineral/silver/volcanic = 50, /turf/closed/mineral/plasma/volcanic = 50, /turf/closed/mineral/bscrystal/volcanic = 20)
-
-
-
-/turf/closed/mineral/random/low_chance
- icon_state = "rock_lowchance"
- mineralChance = 6
- mineralSpawnChanceList = list(
- /turf/closed/mineral/uranium = 2, /turf/closed/mineral/diamond = 1, /turf/closed/mineral/gold = 4, /turf/closed/mineral/titanium = 4,
- /turf/closed/mineral/silver = 6, /turf/closed/mineral/plasma = 15, /turf/closed/mineral/iron = 40,
- /turf/closed/mineral/bscrystal = 1)
-
-
-/turf/closed/mineral/random/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- defer_change = 1
-
- mineralChance = 10
- mineralSpawnChanceList = list(
- /turf/closed/mineral/uranium/volcanic = 5, /turf/closed/mineral/diamond/volcanic = 1, /turf/closed/mineral/gold/volcanic = 10, /turf/closed/mineral/titanium/volcanic = 11,
- /turf/closed/mineral/silver/volcanic = 12, /turf/closed/mineral/plasma/volcanic = 20, /turf/closed/mineral/iron/volcanic = 40,
- /turf/closed/mineral/bscrystal/volcanic = 1)
-
-
-/turf/closed/mineral/random/labormineral
- mineralSpawnChanceList = list(
- /turf/closed/mineral/uranium = 3, /turf/closed/mineral/diamond = 1, /turf/closed/mineral/gold = 8, /turf/closed/mineral/titanium = 8,
- /turf/closed/mineral/silver = 20, /turf/closed/mineral/plasma = 30, /turf/closed/mineral/iron = 95)
- icon_state = "rock_labor"
-
-
-/turf/closed/mineral/random/labormineral/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- defer_change = 1
- mineralSpawnChanceList = list(
- /turf/closed/mineral/uranium/volcanic = 3, /turf/closed/mineral/diamond/volcanic = 1, /turf/closed/mineral/gold/volcanic = 8, /turf/closed/mineral/titanium/volcanic = 8,
- /turf/closed/mineral/silver/volcanic = 20, /turf/closed/mineral/plasma/volcanic = 30, /turf/closed/mineral/bscrystal/volcanic = 1,
- /turf/closed/mineral/iron/volcanic = 95)
-
-
-
-/turf/closed/mineral/iron
- mineralType = /obj/item/stack/ore/iron
- spreadChance = 20
- spread = 1
- scan_state = "rock_Iron"
-
-/turf/closed/mineral/iron/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- defer_change = 1
-
-/turf/closed/mineral/iron/ice
- environment_type = "snow_cavern"
- icon_state = "icerock_iron"
- smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
- turf_type = /turf/open/floor/plating/asteroid/snow/ice
- baseturfs = /turf/open/floor/plating/asteroid/snow/ice
- initial_gas_mix = FROZEN_ATMOS
- defer_change = TRUE
-
-
-/turf/closed/mineral/uranium
- mineralType = /obj/item/stack/ore/uranium
- spreadChance = 5
- spread = 1
- scan_state = "rock_Uranium"
-
-/turf/closed/mineral/uranium/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- defer_change = 1
-
-
-/turf/closed/mineral/diamond
- mineralType = /obj/item/stack/ore/diamond
- spreadChance = 0
- spread = 1
- scan_state = "rock_Diamond"
-
-/turf/closed/mineral/diamond/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- defer_change = 1
-
-/turf/closed/mineral/diamond/ice
- environment_type = "snow_cavern"
- icon_state = "icerock_diamond"
- smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
- turf_type = /turf/open/floor/plating/asteroid/snow/ice
- baseturfs = /turf/open/floor/plating/asteroid/snow/ice
- initial_gas_mix = FROZEN_ATMOS
- defer_change = TRUE
-
-
-/turf/closed/mineral/gold
- mineralType = /obj/item/stack/ore/gold
- spreadChance = 5
- spread = 1
- scan_state = "rock_Gold"
-
-/turf/closed/mineral/gold/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- defer_change = 1
-
-
-/turf/closed/mineral/silver
- mineralType = /obj/item/stack/ore/silver
- spreadChance = 5
- spread = 1
- scan_state = "rock_Silver"
-
-/turf/closed/mineral/silver/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- defer_change = 1
-
-
-/turf/closed/mineral/titanium
- mineralType = /obj/item/stack/ore/titanium
- spreadChance = 5
- spread = 1
- scan_state = "rock_Titanium"
-
-/turf/closed/mineral/titanium/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- defer_change = 1
-
-
-/turf/closed/mineral/plasma
- mineralType = /obj/item/stack/ore/plasma
- spreadChance = 8
- spread = 1
- scan_state = "rock_Plasma"
-
-/turf/closed/mineral/plasma/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- defer_change = 1
-
-/turf/closed/mineral/plasma/ice
- environment_type = "snow_cavern"
- icon_state = "icerock_plasma"
- smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
- turf_type = /turf/open/floor/plating/asteroid/snow/ice
- baseturfs = /turf/open/floor/plating/asteroid/snow/ice
- initial_gas_mix = FROZEN_ATMOS
- defer_change = TRUE
-
-
-
-/turf/closed/mineral/bananium
- mineralType = /obj/item/stack/ore/bananium
- mineralAmt = 3
- spreadChance = 0
- spread = 0
- scan_state = "rock_Bananium"
-
-
-/turf/closed/mineral/bscrystal
- mineralType = /obj/item/stack/ore/bluespace_crystal
- mineralAmt = 1
- spreadChance = 0
- spread = 0
- scan_state = "rock_BScrystal"
-
-/turf/closed/mineral/bscrystal/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- defer_change = 1
-
-
-/turf/closed/mineral/volcanic
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt
- baseturfs = /turf/open/floor/plating/asteroid/basalt
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
-
-/turf/closed/mineral/volcanic/lava_land_surface
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- defer_change = 1
-
-/turf/closed/mineral/ash_rock //wall piece
- name = "rock"
- icon = 'icons/turf/mining.dmi'
- smooth_icon = 'icons/turf/walls/rock_wall.dmi'
- icon_state = "rock2"
- smooth = SMOOTH_MORE|SMOOTH_BORDER
- canSmoothWith = list (/turf/closed)
- baseturfs = /turf/open/floor/plating/ashplanet/wateryrock
- initial_gas_mix = OPENTURF_LOW_PRESSURE
- environment_type = "waste"
- turf_type = /turf/open/floor/plating/ashplanet/rocky
- defer_change = 1
-
-/turf/closed/mineral/snowmountain
- name = "snowy mountainside"
- icon = 'icons/turf/mining.dmi'
- smooth_icon = 'icons/turf/walls/mountain_wall.dmi'
- icon_state = "mountainrock"
- smooth = SMOOTH_MORE|SMOOTH_BORDER
- canSmoothWith = list (/turf/closed)
- baseturfs = /turf/open/floor/plating/asteroid/snow
- initial_gas_mix = FROZEN_ATMOS
- environment_type = "snow"
- turf_type = /turf/open/floor/plating/asteroid/snow
- defer_change = TRUE
-
-/turf/closed/mineral/snowmountain/cavern
- name = "ice cavern rock"
- icon = 'icons/turf/mining.dmi'
- smooth_icon = 'icons/turf/walls/icerock_wall.dmi'
- icon_state = "icerock"
- smooth = SMOOTH_MORE|SMOOTH_BORDER
- canSmoothWith = list (/turf/closed)
- baseturfs = /turf/open/floor/plating/asteroid/snow/ice
- environment_type = "snow_cavern"
- turf_type = /turf/open/floor/plating/asteroid/snow/ice
-
-
-/turf/closed/mineral/strong
- name = "Very strong rock"
- desc = ""
- environment_type = "basalt"
- turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- defer_change = 1
- smooth_icon = 'icons/turf/walls/rock_wall.dmi'
-
-/turf/closed/mineral/strong/attackby(obj/item/I, mob/user, params)
- if(!ishuman(user))
- to_chat(usr, "Only a more advanced species could break a rock such as this one!")
- return FALSE
- var/mob/living/carbon/human/H = user
- if(H.mind.get_skill_level(/datum/skill/mining) >= SKILL_LEVEL_LEGENDARY)
- . = ..()
- else
- to_chat(usr, "The rock seems to be too strong to destroy. Maybe I can break it once I become a master miner.")
-
-
-/turf/closed/mineral/strong/gets_drilled(user, triggered_by_explosion = FALSE, give_exp = TRUE)
- drop_ores()
- var/flags = NONE
- if(defer_change) // TODO: make the defer change var a var for any changeturf flag
- flags = CHANGETURF_DEFER_CHANGE
- ScrapeAway(flags=flags)
- addtimer(CALLBACK(src, PROC_REF(AfterChange)), 1, TIMER_UNIQUE)
- playsound(src, 'sound/blank.ogg', 50, TRUE) //beautiful destruction
-
-/turf/closed/mineral/strong/proc/drop_ores()
- if(prob(10))
- new /obj/item/stack/sheet/mineral/mythril(src, 5)
-
-
-/turf/closed/mineral/strong/acid_melt()
- return
-
-/turf/closed/mineral/strong/ex_act(severity, target)
- return
-
-
/turf/closed/mineral/random/rogue
// layer = ABOVE_MOB_LAYER
diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm
index 2edd46e4c1..5c0a58282a 100644
--- a/code/game/turfs/closed/wall/mineral_walls.dm
+++ b/code/game/turfs/closed/wall/mineral_walls.dm
@@ -6,276 +6,3 @@
var/active = null
canSmoothWith = null
smooth = SMOOTH_TRUE
-
-/turf/closed/wall/mineral/gold
- name = "gold wall"
- desc = ""
- icon = 'icons/turf/walls/gold_wall.dmi'
- icon_state = "gold"
- sheet_type = /obj/item/stack/sheet/mineral/gold
- explosion_block = 0 //gold is a soft metal you dingus.
- canSmoothWith = list(/turf/closed/wall/mineral/gold, /obj/structure/falsewall/gold)
-
-/turf/closed/wall/mineral/silver
- name = "silver wall"
- desc = ""
- icon = 'icons/turf/walls/silver_wall.dmi'
- icon_state = "silver"
- sheet_type = /obj/item/stack/sheet/mineral/silver
- canSmoothWith = list(/turf/closed/wall/mineral/silver, /obj/structure/falsewall/silver)
-
-/turf/closed/wall/mineral/diamond
- name = "diamond wall"
- desc = ""
- icon = 'icons/turf/walls/diamond_wall.dmi'
- icon_state = "diamond"
- sheet_type = /obj/item/stack/sheet/mineral/diamond
- slicing_duration = 200 //diamond wall takes twice as much time to slice
- explosion_block = 3
- canSmoothWith = list(/turf/closed/wall/mineral/diamond, /obj/structure/falsewall/diamond)
-
-/turf/closed/wall/mineral/bananium
- name = "bananium wall"
- desc = ""
- icon = 'icons/turf/walls/bananium_wall.dmi'
- icon_state = "bananium"
- sheet_type = /obj/item/stack/sheet/mineral/bananium
- canSmoothWith = list(/turf/closed/wall/mineral/bananium, /obj/structure/falsewall/bananium)
-
-/turf/closed/wall/mineral/sandstone
- name = "sandstone wall"
- desc = ""
- icon = 'icons/turf/walls/sandstone_wall.dmi'
- icon_state = "sandstone"
- sheet_type = /obj/item/stack/sheet/mineral/sandstone
- explosion_block = 0
- canSmoothWith = list(/turf/closed/wall/mineral/sandstone, /obj/structure/falsewall/sandstone)
-
-/turf/closed/wall/mineral/uranium
- article = "a"
- name = "uranium wall"
- desc = ""
- icon = 'icons/turf/walls/uranium_wall.dmi'
- icon_state = "uranium"
- sheet_type = /obj/item/stack/sheet/mineral/uranium
- canSmoothWith = list(/turf/closed/wall/mineral/uranium, /obj/structure/falsewall/uranium)
-
-/turf/closed/wall/mineral/uranium/proc/radiate()
- if(!active)
- if(world.time > last_event+15)
- active = 1
- radiation_pulse(src, 40)
- for(var/turf/closed/wall/mineral/uranium/T in orange(1,src))
- T.radiate()
- last_event = world.time
- active = null
- return
- return
-
-/turf/closed/wall/mineral/uranium/attack_hand(mob/user)
- radiate()
- . = ..()
-
-/turf/closed/wall/mineral/uranium/attackby(obj/item/W, mob/user, params)
- radiate()
- ..()
-
-/turf/closed/wall/mineral/uranium/Bumped(atom/movable/AM)
- radiate()
- ..()
-
-/turf/closed/wall/mineral/plasma
- name = "plasma wall"
- desc = ""
- icon = 'icons/turf/walls/plasma_wall.dmi'
- icon_state = "plasma"
- sheet_type = /obj/item/stack/sheet/mineral/plasma
- thermal_conductivity = 0.04
- canSmoothWith = list(/turf/closed/wall/mineral/plasma, /obj/structure/falsewall/plasma)
-
-/turf/closed/wall/mineral/plasma/attackby(obj/item/W, mob/user, params)
- if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
- message_admins("Plasma wall ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(src)]")
- log_game("Plasma wall ignited by [key_name(user)] in [AREACOORD(src)]")
- ignite(W.get_temperature())
- return
- ..()
-
-/turf/closed/wall/mineral/plasma/proc/PlasmaBurn(temperature)
- new girder_type(src)
- ScrapeAway()
- var/turf/open/T = src
- T.atmos_spawn_air("plasma=400;TEMP=[temperature]")
-
-/turf/closed/wall/mineral/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :(
- if(exposed_temperature > 300)
- PlasmaBurn(exposed_temperature)
-
-/turf/closed/wall/mineral/plasma/proc/ignite(exposed_temperature)
- if(exposed_temperature > 300)
- PlasmaBurn(exposed_temperature)
-
-/turf/closed/wall/mineral/plasma/bullet_act(obj/projectile/Proj)
- if(istype(Proj, /obj/projectile/beam))
- PlasmaBurn(2500)
- else if(istype(Proj, /obj/projectile/ion))
- PlasmaBurn(500)
- . = ..()
-
-/turf/closed/wall/mineral/wood
- name = "wooden wall"
- desc = ""
- icon = 'icons/turf/walls/wood_wall.dmi'
- icon_state = "wood"
- sheet_type = /obj/item/stack/sheet/mineral/wood
- hardness = 70
- explosion_block = 0
- canSmoothWith = list(/turf/closed/wall/mineral/wood, /obj/structure/falsewall/wood, /turf/closed/wall/mineral/wood/nonmetal)
-
-/turf/closed/wall/mineral/wood/attackby(obj/item/W, mob/user)
- if(W.get_sharpness() && W.force)
- var/duration = (48/W.force) * 2 //In seconds, for now.
- if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/twohanded/fireaxe))
- duration /= 4 //Much better with hatchets and axes.
- if(do_after(user, duration*10, target=src)) //Into deciseconds.
- dismantle_wall(FALSE,FALSE)
- return
- return ..()
-
-/turf/closed/wall/mineral/wood/nonmetal
- desc = ""
- girder_type = /obj/structure/barricade/wooden
- hardness = 50
- canSmoothWith = list(/turf/closed/wall/mineral/wood, /obj/structure/falsewall/wood, /turf/closed/wall/mineral/wood/nonmetal)
-
-/turf/closed/wall/mineral/iron
- name = "rough metal wall"
- desc = ""
- icon = 'icons/turf/walls/shuttle_wall.dmi'
- icon_state = "iron"
- sheet_type = /obj/item/stack/rods
- canSmoothWith = list(/turf/closed/wall/mineral/iron, /obj/structure/falsewall/iron)
-
-/turf/closed/wall/mineral/snow
- name = "packed snow wall"
- desc = ""
- icon = 'icons/turf/walls/shuttle_wall.dmi'
- icon_state = "snow"
- hardness = 80
- explosion_block = 0
- slicing_duration = 30
- sheet_type = /obj/item/stack/sheet/mineral/snow
- canSmoothWith = null
- girder_type = null
- bullet_sizzle = TRUE
- bullet_bounce_sound = null
-
-/////////////////////Titanium walls/////////////////////
-
-/turf/closed/wall/mineral/titanium //has to use this path due to how building walls works
- name = "wall"
- desc = ""
- icon = 'icons/turf/walls/shuttle_wall.dmi'
- icon_state = "map-shuttle"
- explosion_block = 3
- flags_1 = CAN_BE_DIRTY_1 | CHECK_RICOCHET_1
- sheet_type = /obj/item/stack/sheet/mineral/titanium
- smooth = SMOOTH_MORE|SMOOTH_DIAGONAL
- canSmoothWith = list(/turf/closed/wall/mineral/titanium, /obj/structure/window/shuttle, /obj/structure/shuttle/engine/heater, /obj/structure/falsewall/titanium)
-
-/turf/closed/wall/mineral/titanium/nodiagonal
- smooth = SMOOTH_MORE
- icon_state = "map-shuttle_nd"
-
-/turf/closed/wall/mineral/titanium/nosmooth
- icon = 'icons/turf/shuttle.dmi'
- icon_state = "wall"
- smooth = SMOOTH_FALSE
-
-/turf/closed/wall/mineral/titanium/overspace
- icon_state = "map-overspace"
- fixed_underlay = list("space"=1)
-
-//sub-type to be used for interior shuttle walls
-//won't get an underlay of the destination turf on shuttle move
-/turf/closed/wall/mineral/titanium/interior/copyTurf(turf/T)
- if(T.type != type)
- T.ChangeTurf(type)
- if(underlays.len)
- T.underlays = underlays
- if(T.icon_state != icon_state)
- T.icon_state = icon_state
- if(T.icon != icon)
- T.icon = icon
- if(color)
- T.atom_colours = atom_colours.Copy()
- T.update_atom_colour()
- if(T.dir != dir)
- T.setDir(dir)
- T.transform = transform
- return T
-
-/turf/closed/wall/mineral/titanium/copyTurf(turf/T)
- . = ..()
- T.transform = transform
-
-/turf/closed/wall/mineral/titanium/survival
- name = "pod wall"
- desc = ""
- icon = 'icons/turf/walls/survival_pod_walls.dmi'
- icon_state = "smooth"
- smooth = SMOOTH_MORE|SMOOTH_DIAGONAL
- canSmoothWith = list(/turf/closed/wall/mineral/titanium/survival, /obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/shuttle, /obj/structure/shuttle/engine)
-
-/turf/closed/wall/mineral/titanium/survival/nodiagonal
- smooth = SMOOTH_MORE
-
-/turf/closed/wall/mineral/titanium/survival/pod
- canSmoothWith = list(/turf/closed/wall/mineral/titanium/survival)
-
-/////////////////////Plastitanium walls/////////////////////
-
-/turf/closed/wall/mineral/plastitanium
- name = "wall"
- desc = ""
- icon = 'icons/turf/walls/plastitanium_wall.dmi'
- icon_state = "map-shuttle"
- explosion_block = 4
- sheet_type = /obj/item/stack/sheet/mineral/plastitanium
- smooth = SMOOTH_MORE|SMOOTH_DIAGONAL
- canSmoothWith = list(/turf/closed/wall/mineral/plastitanium, /obj/structure/window/plasma/reinforced/plastitanium, /obj/structure/shuttle/engine, /obj/structure/falsewall/plastitanium)
-
-/turf/closed/wall/mineral/plastitanium/nodiagonal
- smooth = SMOOTH_MORE
- icon_state = "map-shuttle_nd"
-
-/turf/closed/wall/mineral/plastitanium/nosmooth
- icon = 'icons/turf/shuttle.dmi'
- icon_state = "wall"
- smooth = SMOOTH_FALSE
-
-/turf/closed/wall/mineral/plastitanium/overspace
- icon_state = "map-overspace"
- fixed_underlay = list("space"=1)
-
-//have to copypaste this code
-/turf/closed/wall/mineral/plastitanium/interior/copyTurf(turf/T)
- if(T.type != type)
- T.ChangeTurf(type)
- if(underlays.len)
- T.underlays = underlays
- if(T.icon_state != icon_state)
- T.icon_state = icon_state
- if(T.icon != icon)
- T.icon = icon
- if(color)
- T.atom_colours = atom_colours.Copy()
- T.update_atom_colour()
- if(T.dir != dir)
- T.setDir(dir)
- T.transform = transform
- return T
-
-/turf/closed/wall/mineral/plastitanium/copyTurf(turf/T)
- . = ..()
- T.transform = transform
diff --git a/code/game/turfs/closed/wall/misc_walls.dm b/code/game/turfs/closed/wall/misc_walls.dm
deleted file mode 100644
index 2bef41ea4d..0000000000
--- a/code/game/turfs/closed/wall/misc_walls.dm
+++ /dev/null
@@ -1,72 +0,0 @@
-/turf/closed/wall/mineral/cult
- name = "runed metal wall"
- desc = ""
- icon = 'icons/turf/walls/cult_wall.dmi'
- icon_state = "cult"
- canSmoothWith = null
- smooth = SMOOTH_MORE
- sheet_type = /obj/item/stack/sheet/runed_metal
- sheet_amount = 1
- girder_type = /obj/structure/girder/cult
-
-/turf/closed/wall/mineral/cult/Initialize()
- new /obj/effect/temp_visual/cult/turf(src)
- . = ..()
-
-/turf/closed/wall/mineral/cult/devastate_wall()
- new sheet_type(get_turf(src), sheet_amount)
-
-/turf/closed/wall/mineral/cult/Exited(atom/movable/AM, atom/newloc)
- . = ..()
- if(istype(AM, /mob/living/simple_animal/hostile/construct/harvester)) //harvesters can go through cult walls, dragging something with
- var/mob/living/simple_animal/hostile/construct/harvester/H = AM
- var/atom/movable/stored_pulling = H.pulling
- if(stored_pulling)
- stored_pulling.setDir(get_dir(stored_pulling.loc, newloc))
- stored_pulling.forceMove(src)
- H.start_pulling(stored_pulling, supress_message = TRUE)
-
-/turf/closed/wall/mineral/cult/artificer
- name = "runed stone wall"
- desc = ""
-
-/turf/closed/wall/mineral/cult/artificer/break_wall()
- new /obj/effect/temp_visual/cult/turf(get_turf(src))
- return null //excuse me we want no runed metal here
-
-/turf/closed/wall/mineral/cult/artificer/devastate_wall()
- new /obj/effect/temp_visual/cult/turf(get_turf(src))
-
-/turf/closed/wall/vault
- icon = 'icons/turf/walls.dmi'
- icon_state = "rockvault"
-
-/turf/closed/wall/ice
- icon = 'icons/turf/walls/icedmetal_wall.dmi'
- icon_state = "iced"
- desc = ""
- canSmoothWith = null
- hardness = 35
- slicing_duration = 150 //welding through the ice+metal
- bullet_sizzle = TRUE
-
-/turf/closed/wall/rust
- name = "rusted wall"
- desc = ""
- icon = 'icons/turf/walls/rusty_wall.dmi'
- hardness = 45
-
-/turf/closed/wall/r_wall/rust
- name = "rusted reinforced wall"
- desc = ""
- icon = 'icons/turf/walls/rusty_reinforced_wall.dmi'
- hardness = 15
-
-/turf/closed/wall/mineral/bronze
- name = "clockwork wall"
- desc = ""
- icon = 'icons/turf/walls/clockwork_wall.dmi'
- icon_state = "clockwork_wall"
- sheet_type = /obj/item/stack/tile/bronze
- sheet_amount = 2
- girder_type = /obj/structure/girder/bronze
diff --git a/code/game/turfs/closed/wall/reinf_walls.dm b/code/game/turfs/closed/wall/reinf_walls.dm
deleted file mode 100644
index 9ff152679b..0000000000
--- a/code/game/turfs/closed/wall/reinf_walls.dm
+++ /dev/null
@@ -1,207 +0,0 @@
-/turf/closed/wall/r_wall
- name = "reinforced wall"
- desc = ""
- icon = 'icons/turf/walls/reinforced_wall.dmi'
- icon_state = "r_wall"
- opacity = 1
- density = TRUE
-
- var/d_state = INTACT
- hardness = 10
- sheet_type = /obj/item/stack/sheet/plasteel
- sheet_amount = 1
- girder_type = /obj/structure/girder/reinforced
- explosion_block = 2
- rad_insulation = RAD_HEAVY_INSULATION
-
-/turf/closed/wall/r_wall/deconstruction_hints(mob/user)
- switch(d_state)
- if(INTACT)
- return "The outer grille is fully intact."
- if(SUPPORT_LINES)
- return "The outer grille has been cut, and the support lines are screwed securely to the outer cover."
- if(COVER)
- return "The support lines have been unscrewed, and the metal cover is welded firmly in place."
- if(CUT_COVER)
- return "The metal cover has been sliced through, and is connected loosely to the girder."
- if(ANCHOR_BOLTS)
- return "The outer cover has been pried away, and the bolts anchoring the support rods are wrenched in place."
- if(SUPPORT_RODS)
- return "The bolts anchoring the support rods have been loosened, but are still welded firmly to the girder."
- if(SHEATH)
- return "The support rods have been sliced through, and the outer sheath is connected loosely to the girder."
-
-/turf/closed/wall/r_wall/devastate_wall()
- new sheet_type(src, sheet_amount)
- new /obj/item/stack/sheet/metal(src, 2)
-
-/turf/closed/wall/r_wall/attack_animal(mob/living/simple_animal/M)
- M.changeNext_move(CLICK_CD_MELEE)
- M.do_attack_animation(src)
- if(!M.environment_smash)
- return
- if(M.environment_smash & ENVIRONMENT_SMASH_RWALLS)
- dismantle_wall(1)
- playsound(src, 'sound/blank.ogg', 100, TRUE)
- else
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- to_chat(M, "This wall is far too strong for you to destroy.")
-
-/turf/closed/wall/r_wall/try_decon(obj/item/W, mob/user, turf/T)
- //DECONSTRUCTION
- switch(d_state)
- if(INTACT)
- if(W.tool_behaviour == TOOL_WIRECUTTER)
- W.play_tool_sound(src, 100)
- d_state = SUPPORT_LINES
- update_icon()
- to_chat(user, "I cut the outer grille.")
- return 1
-
- if(SUPPORT_LINES)
- if(W.tool_behaviour == TOOL_SCREWDRIVER)
- to_chat(user, "I begin unsecuring the support lines...")
- if(W.use_tool(src, user, 40, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_LINES)
- return 1
- d_state = COVER
- update_icon()
- to_chat(user, "I unsecure the support lines.")
- return 1
-
- else if(W.tool_behaviour == TOOL_WIRECUTTER)
- W.play_tool_sound(src, 100)
- d_state = INTACT
- update_icon()
- to_chat(user, "I repair the outer grille.")
- return 1
-
- if(COVER)
- if(W.tool_behaviour == TOOL_WELDER)
- if(!W.tool_start_check(user, amount=0))
- return
- to_chat(user, "I begin slicing through the metal cover...")
- if(W.use_tool(src, user, 60, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != COVER)
- return 1
- d_state = CUT_COVER
- update_icon()
- to_chat(user, "I press firmly on the cover, dislodging it.")
- return 1
-
- if(W.tool_behaviour == TOOL_SCREWDRIVER)
- to_chat(user, "I begin securing the support lines...")
- if(W.use_tool(src, user, 40, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != COVER)
- return 1
- d_state = SUPPORT_LINES
- update_icon()
- to_chat(user, "The support lines have been secured.")
- return 1
-
- if(CUT_COVER)
- if(W.tool_behaviour == TOOL_CROWBAR)
- to_chat(user, "I struggle to pry off the cover...")
- if(W.use_tool(src, user, 100, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != CUT_COVER)
- return 1
- d_state = ANCHOR_BOLTS
- update_icon()
- to_chat(user, "I pry off the cover.")
- return 1
-
- if(W.tool_behaviour == TOOL_WELDER)
- if(!W.tool_start_check(user, amount=0))
- return
- to_chat(user, "I begin welding the metal cover back to the frame...")
- if(W.use_tool(src, user, 60, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != CUT_COVER)
- return TRUE
- d_state = COVER
- update_icon()
- to_chat(user, "The metal cover has been welded securely to the frame.")
- return 1
-
- if(ANCHOR_BOLTS)
- if(W.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "I start loosening the anchoring bolts which secure the support rods to their frame...")
- if(W.use_tool(src, user, 40, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != ANCHOR_BOLTS)
- return 1
- d_state = SUPPORT_RODS
- update_icon()
- to_chat(user, "I remove the bolts anchoring the support rods.")
- return 1
-
- if(W.tool_behaviour == TOOL_CROWBAR)
- to_chat(user, "I start to pry the cover back into place...")
- if(W.use_tool(src, user, 20, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != ANCHOR_BOLTS)
- return 1
- d_state = CUT_COVER
- update_icon()
- to_chat(user, "The metal cover has been pried back into place.")
- return 1
-
- if(SUPPORT_RODS)
- if(W.tool_behaviour == TOOL_WELDER)
- if(!W.tool_start_check(user, amount=0))
- return
- to_chat(user, "I begin slicing through the support rods...")
- if(W.use_tool(src, user, 100, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_RODS)
- return 1
- d_state = SHEATH
- update_icon()
- to_chat(user, "I slice through the support rods.")
- return 1
-
- if(W.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "I start tightening the bolts which secure the support rods to their frame...")
- W.play_tool_sound(src, 100)
- if(W.use_tool(src, user, 40))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != SUPPORT_RODS)
- return 1
- d_state = ANCHOR_BOLTS
- update_icon()
- to_chat(user, "I tighten the bolts anchoring the support rods.")
- return 1
-
- if(SHEATH)
- if(W.tool_behaviour == TOOL_CROWBAR)
- to_chat(user, "I struggle to pry off the outer sheath...")
- if(W.use_tool(src, user, 100, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != SHEATH)
- return 1
- to_chat(user, "I pry off the outer sheath.")
- dismantle_wall()
- return 1
-
- if(W.tool_behaviour == TOOL_WELDER)
- if(!W.tool_start_check(user, amount=0))
- return
- to_chat(user, "I begin welding the support rods back together...")
- if(W.use_tool(src, user, 100, volume=100))
- if(!istype(src, /turf/closed/wall/r_wall) || d_state != SHEATH)
- return TRUE
- d_state = SUPPORT_RODS
- update_icon()
- to_chat(user, "I weld the support rods back together.")
- return 1
- return 0
-
-/turf/closed/wall/r_wall/update_icon()
- . = ..()
- if(d_state != INTACT)
- smooth = SMOOTH_FALSE
- clear_smooth_overlays()
- else
- smooth = SMOOTH_TRUE
- queue_smooth_neighbors(src)
- queue_smooth(src)
-
-/turf/closed/wall/r_wall/update_icon_state()
- if(d_state != INTACT)
- icon_state = "r_wall-[d_state]"
- else
- icon_state = "r_wall"
diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm
index a51768055b..0981947183 100644
--- a/code/game/turfs/closed/walls.dm
+++ b/code/game/turfs/closed/walls.dm
@@ -16,26 +16,13 @@
var/slicing_duration = 100 //default time taken to slice the wall
var/sheet_type = null
var/sheet_amount = 2
- var/girder_type = /obj/structure/girder
canSmoothWith = list(
- /turf/closed/wall,
- /turf/closed/wall/r_wall,
- /obj/structure/falsewall,
- /obj/structure/falsewall/reinforced,
- /turf/closed/wall/rust,
- /turf/closed/wall/r_wall/rust)
+ /turf/closed/wall)
smooth = SMOOTH_TRUE
var/list/dent_decals
-/turf/closed/wall/examine(mob/user)
- . += ..()
-// . += deconstruction_hints(user)
-
-/turf/closed/wall/proc/deconstruction_hints(mob/user)
- return "The outer plating is welded firmly in place."
-
/turf/closed/wall/attack_tk()
return
@@ -55,13 +42,7 @@
dismantle_wall(1,0)
/turf/closed/wall/proc/dismantle_wall(devastated=0, explode=0)
- if(devastated)
- devastate_wall()
- else
- playsound(src, 'sound/blank.ogg', 100, TRUE)
- var/newgirder = break_wall()
- if(newgirder) //maybe we don't /want/ a girder!
- transfer_fingerprints_to(newgirder)
+ playsound(src, 'sound/blank.ogg', 100, TRUE)
for(var/obj/O in src.contents) //Eject contents!
if(istype(O, /obj/structure/sign/poster))
@@ -70,15 +51,6 @@
ScrapeAway()
-/turf/closed/wall/proc/break_wall()
-// new sheet_type(src, sheet_amount)
-// return new girder_type(src)
-
-/turf/closed/wall/proc/devastate_wall()
-// new sheet_type(src, sheet_amount)
-// if(girder_type)
-// new /obj/item/stack/sheet/metal(src)
-
/turf/closed/wall/ex_act(severity, target)
if(target == src)
dismantle_wall(1,1)
@@ -211,11 +183,6 @@
return FALSE
-/turf/closed/wall/narsie_act(force, ignore_mobs, probability = 20)
- . = ..()
- if(.)
- ChangeTurf(/turf/closed/wall/mineral/cult)
-
/turf/closed/wall/get_dumping_location(obj/item/storage/source, mob/user)
return null
@@ -250,3 +217,23 @@
add_overlay(dent_decals)
#undef MAX_DENT_DECALS
+
+/turf/closed/splashscreen
+ name = ""
+ icon = 'icons/default_title.dmi'
+ icon_state = ""
+ layer = FLY_LAYER
+ bullet_bounce_sound = null
+
+/turf/closed/splashscreen/New()
+ SStitle.splash_turf = src
+ if(SStitle.icon)
+ icon = SStitle.icon
+ ..()
+
+/turf/closed/splashscreen/vv_edit_var(var_name, var_value)
+ . = ..()
+ if(.)
+ switch(var_name)
+ if("icon")
+ SStitle.icon = icon
diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm
index 9c6eb90a6b..3fafacf8e8 100644
--- a/code/game/turfs/open/_open.dm
+++ b/code/game/turfs/open/_open.dm
@@ -53,107 +53,6 @@
/turf/open/zAirOut(direction, turf/source)
return (direction == UP)
-/turf/open/indestructible
- name = "floor"
- icon = 'icons/turf/floors.dmi'
- icon_state = "floor"
- footstep = FOOTSTEP_FLOOR
- barefootstep = FOOTSTEP_HARD_BAREFOOT
- clawfootstep = FOOTSTEP_HARD_CLAW
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- tiled_dirt = TRUE
-
-/turf/open/indestructible/Melt()
- to_be_destroyed = FALSE
- return src
-
-/turf/open/indestructible/singularity_act()
- return
-
-/turf/open/indestructible/TerraformTurf(path, new_baseturf, flags, defer_change = FALSE, ignore_air = FALSE)
- return
-
-/turf/open/indestructible/sound
- name = "squeaky floor"
- footstep = null
- barefootstep = null
- clawfootstep = null
- heavyfootstep = null
- var/sound
-
-/turf/open/indestructible/sound/Entered(mob/AM)
- ..()
- if(istype(AM))
- playsound(src,sound,50,TRUE)
-
-/turf/open/indestructible/necropolis
- name = "necropolis floor"
- desc = ""
- icon = 'icons/turf/floors.dmi'
- icon_state = "necro1"
- baseturfs = /turf/open/indestructible/necropolis
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- footstep = FOOTSTEP_LAVA
- barefootstep = FOOTSTEP_LAVA
- clawfootstep = FOOTSTEP_LAVA
- heavyfootstep = FOOTSTEP_LAVA
- tiled_dirt = FALSE
-
-/turf/open/indestructible/necropolis/Initialize()
- . = ..()
- if(prob(12))
- icon_state = "necro[rand(2,3)]"
-
-/turf/open/indestructible/necropolis/air
- initial_gas_mix = OPENTURF_DEFAULT_ATMOS
-
-/turf/open/indestructible/boss //you put stone tiles on this and use it as a base
- name = "necropolis floor"
- icon = 'icons/turf/boss_floors.dmi'
- icon_state = "boss"
- baseturfs = /turf/open/indestructible/boss
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
-
-/turf/open/indestructible/boss/air
- initial_gas_mix = OPENTURF_DEFAULT_ATMOS
-
-/turf/open/indestructible/hierophant
- icon = 'icons/turf/floors/hierophant_floor.dmi'
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- baseturfs = /turf/open/indestructible/hierophant
- smooth = SMOOTH_TRUE
- tiled_dirt = FALSE
-
-/turf/open/indestructible/hierophant/two
-
-/turf/open/indestructible/hierophant/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
- return FALSE
-
-/turf/open/indestructible/paper
- name = "notebook floor"
- desc = ""
- icon_state = "paperfloor"
- footstep = null
- barefootstep = null
- clawfootstep = null
- heavyfootstep = null
- tiled_dirt = FALSE
-
-/turf/open/indestructible/binary
- name = "tear in the fabric of reality"
- CanAtmosPass = ATMOS_PASS_NO
- baseturfs = /turf/open/indestructible/binary
- icon_state = "binary"
- footstep = null
- barefootstep = null
- clawfootstep = null
- heavyfootstep = null
-
-/turf/open/indestructible/airblock
- icon_state = "bluespace"
- blocks_air = TRUE
- baseturfs = /turf/open/indestructible/airblock
-
/turf/open/Initalize_Atmos(times_fired)
excited = 0
update_visuals()
diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm
index 40ac757533..80158328ad 100644
--- a/code/game/turfs/open/floor.dm
+++ b/code/game/turfs/open/floor.dm
@@ -104,12 +104,6 @@
/turf/open/floor/proc/gets_drilled()
return
-/turf/open/floor/proc/break_tile_to_plating()
- var/turf/open/floor/plating/T = make_plating()
- if(!istype(T))
- return
- T.break_tile()
-
/turf/open/floor/proc/break_tile()
if(broken)
return
@@ -146,29 +140,8 @@
return 1
if(..())
return 1
- if(intact && istype(C, /obj/item/stack/tile))
- try_replace_tile(C, user, params)
return 0
-/turf/open/floor/crowbar_act(mob/living/user, obj/item/I)
- if(intact && pry_tile(I, user))
- return TRUE
-
-/turf/open/floor/proc/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- if(T.turf_type == type)
- return
- var/obj/item/crowbar/CB = user.is_holding_item_of_type(/obj/item/crowbar)
- if(!CB)
- return
- var/turf/open/floor/plating/P = pry_tile(CB, user, TRUE)
- if(!istype(P))
- return
- P.attackby(T, user, params)
-
-/turf/open/floor/proc/pry_tile(obj/item/I, mob/user, silent = FALSE)
- I.play_tool_sound(src, 80)
- return remove_tile(user, silent)
-
/turf/open/floor/proc/remove_tile(mob/user, silent = FALSE, make_tile = TRUE)
if(broken || burnt)
broken = 0
diff --git a/code/game/turfs/open/floor/carpet.dm b/code/game/turfs/open/floor/carpet.dm
new file mode 100644
index 0000000000..cf958ad8c8
--- /dev/null
+++ b/code/game/turfs/open/floor/carpet.dm
@@ -0,0 +1,65 @@
+/turf/open/floor/carpet
+ name = "carpet"
+ desc = ""
+ icon = 'icons/turf/floors/carpet.dmi'
+ icon_state = "carpet"
+ broken_states = list("damaged")
+ smooth = SMOOTH_TRUE
+ canSmoothWith = list(/turf/open/floor/carpet)
+ flags_1 = NONE
+ bullet_bounce_sound = null
+ footstep = FOOTSTEP_CARPET
+ barefootstep = FOOTSTEP_SOFT_BAREFOOT
+ clawfootstep = FOOTSTEP_SOFT_BAREFOOT
+ heavyfootstep = FOOTSTEP_GENERIC_HEAVY
+ tiled_dirt = FALSE
+
+/turf/open/floor/carpet/examine(mob/user)
+ . = ..()
+// . += "There's a small crack on the edge of it."
+
+/turf/open/floor/carpet/Initialize()
+ . = ..()
+ update_icon()
+
+/turf/open/floor/carpet/update_icon()
+ if(!..())
+ return 0
+ if(!broken && !burnt)
+ if(smooth)
+ queue_smooth(src)
+ else
+ make_plating()
+ if(smooth)
+ queue_smooth_neighbors(src)
+
+/turf/open/floor/carpet/purple
+ icon = 'icons/turf/floors/carpet_purple.dmi'
+ canSmoothWith = list(/turf/open/floor/carpet/purple)
+
+/turf/open/floor/carpet/inn
+ icon = 'icons/turf/floors/inn.dmi'
+
+/turf/open/floor/carpet/stellar
+ icon = 'icons/turf/floors/carpet_stellar.dmi'
+ canSmoothWith = list(/turf/open/floor/carpet/stellar)
+
+/turf/open/floor/carpet/red
+ icon = 'icons/turf/floors/carpet_red.dmi'
+ canSmoothWith = list(/turf/open/floor/carpet/red)
+
+/turf/open/floor/carpet/royalblack
+ icon = 'icons/turf/floors/carpet_royalblack.dmi'
+ canSmoothWith = list(/turf/open/floor/carpet/royalblack)
+
+
+/turf/open/floor/carpet/break_tile()
+ broken = TRUE
+ update_icon()
+
+/turf/open/floor/carpet/burn_tile()
+ burnt = TRUE
+ update_icon()
+
+/turf/open/floor/carpet/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
+ return FALSE
diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm
deleted file mode 100644
index 27f65473f8..0000000000
--- a/code/game/turfs/open/floor/fancy_floor.dm
+++ /dev/null
@@ -1,343 +0,0 @@
-/* In this file:
- * Wood floor
- * Grass floor
- * Fake Basalt
- * Carpet floor
- * Fake pits
- * Fake space
- */
-
-/turf/open/floor/wood
- desc = ""
- icon_state = "wood"
- floor_tile = /obj/item/stack/tile/wood
- broken_states = list("wood-broken", "wood-broken2", "wood-broken3", "wood-broken4", "wood-broken5", "wood-broken6", "wood-broken7")
- footstep = FOOTSTEP_WOOD
- barefootstep = FOOTSTEP_WOOD_BAREFOOT
- clawfootstep = FOOTSTEP_WOOD_CLAW
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- tiled_dirt = FALSE
-
-/turf/open/floor/wood/examine(mob/user)
- . = ..()
- . += "There's a few screws and a small crack visible."
-
-/turf/open/floor/wood/screwdriver_act(mob/living/user, obj/item/I)
- if(..())
- return TRUE
- return pry_tile(I, user) ? TRUE : FALSE
-
-/turf/open/floor/wood/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- if(T.turf_type == type)
- return
- var/obj/item/tool = user.is_holding_item_of_type(/obj/item/screwdriver)
- if(!tool)
- tool = user.is_holding_item_of_type(/obj/item/crowbar)
- if(!tool)
- return
- var/turf/open/floor/plating/P = pry_tile(tool, user, TRUE)
- if(!istype(P))
- return
- P.attackby(T, user, params)
-
-/turf/open/floor/wood/pry_tile(obj/item/C, mob/user, silent = FALSE)
- C.play_tool_sound(src, 80)
- return remove_tile(user, silent, (C.tool_behaviour == TOOL_SCREWDRIVER))
-
-/turf/open/floor/wood/remove_tile(mob/user, silent = FALSE, make_tile = TRUE)
- if(broken || burnt)
- broken = 0
- burnt = 0
- if(user && !silent)
- to_chat(user, "I remove the broken planks.")
- else
- if(make_tile)
- if(user && !silent)
- to_chat(user, "I unscrew the planks.")
- if(floor_tile)
- new floor_tile(src)
- else
- if(user && !silent)
- to_chat(user, "I forcefully pry off the planks, destroying them in the process.")
- return make_plating()
-
-/turf/open/floor/wood/cold
- temperature = 255.37
-
-/turf/open/floor/wood/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/grass
- name = "grass patch"
- desc = ""
- icon = 'icons/turf/grass.dmi'
- icon_state = "grass"
- floor_tile = /obj/item/stack/tile/grass
- broken_states = list("sand")
- flags_1 = NONE
- bullet_bounce_sound = null
- footstep = FOOTSTEP_GRASS
- barefootstep = FOOTSTEP_GRASS
- clawfootstep = FOOTSTEP_GRASS
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- var/ore_type = /obj/item/stack/ore/glass
- var/turfverb = "uproot"
- tiled_dirt = FALSE
-
-/turf/open/floor/grass/Initialize()
- . = ..()
- update_icon()
-
-/turf/open/floor/grass/attackby(obj/item/C, mob/user, params)
- if((C.tool_behaviour == TOOL_SHOVEL) && params)
- new ore_type(src, 2)
- user.visible_message("[user] digs up [src].", "I [turfverb] [src].")
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- make_plating()
- if(..())
- return
-
-/turf/open/floor/grass/fairy //like grass but fae-er
- name = "fairygrass patch"
- desc = ""
- icon_state = "fairygrass"
- floor_tile = /obj/item/stack/tile/fairygrass
- light_outer_range = 2
- light_power = 0.80
- light_color = "#33CCFF"
-
-/turf/open/floor/grass/snow
- gender = PLURAL
- name = "snow"
- icon = 'icons/turf/snow.dmi'
- desc = ""
- icon_state = "snow"
- ore_type = /obj/item/stack/sheet/mineral/snow
- planetary_atmos = TRUE
- floor_tile = null
- initial_gas_mix = FROZEN_ATMOS
- slowdown = 2
- bullet_sizzle = TRUE
- footstep = FOOTSTEP_SAND
- barefootstep = FOOTSTEP_SAND
- clawfootstep = FOOTSTEP_SAND
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-
-/turf/open/floor/grass/snow/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return
-
-/turf/open/floor/grass/snow/crowbar_act(mob/living/user, obj/item/I)
- return
-
-/turf/open/floor/grass/snow/basalt //By your powers combined, I am captain planet
- gender = NEUTER
- name = "volcanic floor"
- icon = 'icons/turf/floors.dmi'
- icon_state = "basalt"
- ore_type = /obj/item/stack/ore/glass/basalt
- initial_gas_mix = OPENTURF_LOW_PRESSURE
- slowdown = 0
-
-/turf/open/floor/grass/snow/basalt/Initialize()
- . = ..()
- if(prob(15))
- icon_state = "basalt[rand(0, 12)]"
- set_basalt_light(src)
-
-/turf/open/floor/grass/snow/safe
- slowdown = 1.5
- planetary_atmos = FALSE
-
-
-/turf/open/floor/grass/fakebasalt //Heart is not a real planeteer power
- name = "aesthetic volcanic flooring"
- desc = ""
- icon = 'icons/turf/floors.dmi'
- icon_state = "basalt"
- floor_tile = /obj/item/stack/tile/basalt
- ore_type = /obj/item/stack/ore/glass/basalt
- turfverb = "dig up"
- slowdown = 0
- footstep = FOOTSTEP_SAND
- barefootstep = FOOTSTEP_SAND
- clawfootstep = FOOTSTEP_SAND
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-
-/turf/open/floor/grass/fakebasalt/Initialize()
- . = ..()
- if(prob(15))
- icon_state = "basalt[rand(0, 12)]"
- set_basalt_light(src)
-
-
-/turf/open/floor/carpet
- name = "carpet"
- desc = ""
- icon = 'icons/turf/floors/carpet.dmi'
- icon_state = "carpet"
- floor_tile = /obj/item/stack/tile/carpet
- broken_states = list("damaged")
- smooth = SMOOTH_TRUE
- canSmoothWith = list(/turf/open/floor/carpet, /turf/open/floor/carpet/airless)
- flags_1 = NONE
- bullet_bounce_sound = null
- footstep = FOOTSTEP_CARPET
- barefootstep = FOOTSTEP_SOFT_BAREFOOT
- clawfootstep = FOOTSTEP_SOFT_BAREFOOT
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- tiled_dirt = FALSE
-
-/turf/open/floor/carpet/examine(mob/user)
- . = ..()
-// . += "There's a small crack on the edge of it."
-
-/turf/open/floor/carpet/Initialize()
- . = ..()
- update_icon()
-
-/turf/open/floor/carpet/update_icon()
- if(!..())
- return 0
- if(!broken && !burnt)
- if(smooth)
- queue_smooth(src)
- else
- make_plating()
- if(smooth)
- queue_smooth_neighbors(src)
-
-/turf/open/floor/carpet/black
- icon = 'icons/turf/floors/carpet_black.dmi'
- floor_tile = /obj/item/stack/tile/carpet/black
- canSmoothWith = list(/turf/open/floor/carpet/black, /turf/open/floor/carpet/airless)
-
-/turf/open/floor/carpet/blue
- icon = 'icons/turf/floors/carpet_blue.dmi'
- floor_tile = /obj/item/stack/tile/carpet/blue
- canSmoothWith = list(/turf/open/floor/carpet/blue, /turf/open/floor/carpet/blue/airless)
-
-/turf/open/floor/carpet/cyan
- icon = 'icons/turf/floors/carpet_cyan.dmi'
- floor_tile = /obj/item/stack/tile/carpet/cyan
- canSmoothWith = list(/turf/open/floor/carpet/cyan, /turf/open/floor/carpet/cyan/airless)
-
-/turf/open/floor/carpet/green
- icon = 'icons/turf/floors/carpet_green.dmi'
- floor_tile = /obj/item/stack/tile/carpet/green
- canSmoothWith = list(/turf/open/floor/carpet/green, /turf/open/floor/carpet/green/airless)
-
-/turf/open/floor/carpet/orange
- icon = 'icons/turf/floors/carpet_orange.dmi'
- floor_tile = /obj/item/stack/tile/carpet/orange
- canSmoothWith = list(/turf/open/floor/carpet/orange, /turf/open/floor/carpet/orange/airless)
-
-/turf/open/floor/carpet/purple
- icon = 'icons/turf/floors/carpet_purple.dmi'
- floor_tile = /obj/item/stack/tile/carpet/purple
- canSmoothWith = list(/turf/open/floor/carpet/purple, /turf/open/floor/carpet/purple/airless)
-
-/turf/open/floor/carpet/inn
- icon = 'icons/turf/floors/inn.dmi'
-
-/turf/open/floor/carpet/stellar
- icon = 'icons/turf/floors/carpet_stellar.dmi'
- floor_tile = /obj/item/stack/tile/carpet/purple
- canSmoothWith = list(/turf/open/floor/carpet/stellar, /turf/open/floor/carpet/purple/airless)
-
-/turf/open/floor/carpet/red
- icon = 'icons/turf/floors/carpet_red.dmi'
- floor_tile = /obj/item/stack/tile/carpet/red
- canSmoothWith = list(/turf/open/floor/carpet/red, /turf/open/floor/carpet/red/airless)
-
-/turf/open/floor/carpet/royalblack
- icon = 'icons/turf/floors/carpet_royalblack.dmi'
- floor_tile = /obj/item/stack/tile/carpet/royalblack
- canSmoothWith = list(/turf/open/floor/carpet/royalblack, /turf/open/floor/carpet/royalblack/airless)
-
-/turf/open/floor/carpet/royalblue
- icon = 'icons/turf/floors/carpet_royalblue.dmi'
- floor_tile = /obj/item/stack/tile/carpet/royalblue
- canSmoothWith = list(/turf/open/floor/carpet/royalblue, /turf/open/floor/carpet/royalblue/airless)
-
-//*****Airless versions of all of the above.*****
-/turf/open/floor/carpet/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/black/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/blue/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/cyan/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/green/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/orange/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/purple/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/red/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/royalblack/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/royalblue/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/carpet/narsie_act(force, ignore_mobs, probability = 20)
- . = (prob(probability) || force)
- for(var/I in src)
- var/atom/A = I
- if(ignore_mobs && ismob(A))
- continue
- if(ismob(A) || .)
- A.narsie_act()
-
-/turf/open/floor/carpet/break_tile()
- broken = TRUE
- update_icon()
-
-/turf/open/floor/carpet/burn_tile()
- burnt = TRUE
- update_icon()
-
-/turf/open/floor/carpet/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
- return FALSE
-
-
-/turf/open/floor/fakepit
- desc = ""
- smooth = SMOOTH_TRUE | SMOOTH_BORDER | SMOOTH_MORE
- canSmoothWith = list(/turf/open/floor/fakepit)
- icon = 'icons/turf/floors/Chasms.dmi'
- icon_state = "smooth"
- tiled_dirt = FALSE
-
-/turf/open/floor/fakepit/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
- underlay_appearance.icon = 'icons/turf/floors.dmi'
- underlay_appearance.icon_state = "basalt"
- return TRUE
-
-/turf/open/floor/fakespace
- icon = 'icons/turf/space.dmi'
- icon_state = "0"
- floor_tile = /obj/item/stack/tile/fakespace
- broken_states = list("damaged")
- plane = PLANE_SPACE
- tiled_dirt = FALSE
-
-/turf/open/floor/fakespace/Initialize()
- . = ..()
- icon_state = SPACE_ICON_STATE
-
-/turf/open/floor/fakespace/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
- underlay_appearance.icon = 'icons/turf/space.dmi'
- underlay_appearance.icon_state = SPACE_ICON_STATE
- underlay_appearance.plane = PLANE_SPACE
- return TRUE
diff --git a/code/game/turfs/open/floor/light_floor.dm b/code/game/turfs/open/floor/light_floor.dm
deleted file mode 100644
index d755a8140b..0000000000
--- a/code/game/turfs/open/floor/light_floor.dm
+++ /dev/null
@@ -1,101 +0,0 @@
-/turf/open/floor/light
- name = "light floor"
- desc = ""
- light_outer_range = 5
- icon_state = "light_on"
- floor_tile = /obj/item/stack/tile/light
- broken_states = list("light_broken")
- var/on = TRUE
- var/state = 0//0 = fine, 1 = flickering, 2 = breaking, 3 = broken
- var/list/coloredlights = list("g", "r", "y", "b", "p", "w", "s","o","g")
- var/currentcolor = 1
- var/can_modify_colour = TRUE
- tiled_dirt = FALSE
-
-
-/turf/open/floor/light/examine(mob/user)
- . = ..()
- . += "There's a small crack on the edge of it."
-
-/turf/open/floor/light/Initialize()
- . = ..()
- update_icon()
-
-/turf/open/floor/light/break_tile()
- ..()
- light_outer_range = 0
- update_light()
-
-/turf/open/floor/light/update_icon()
- ..()
- if(on)
- switch(state)
- if(0)
- icon_state = "light_on-[coloredlights[currentcolor]]"
- set_light(1)
- if(1)
- var/num = pick("1","2","3","4")
- icon_state = "light_on_flicker[num]"
- set_light(1)
- if(2)
- icon_state = "light_on_broken"
- set_light(1)
- if(3)
- icon_state = "light_off"
- set_light(0)
- else
- set_light(0)
- icon_state = "light_off"
-
-
-/turf/open/floor/light/ChangeTurf(path, new_baseturf, flags)
- set_light(0)
- return ..()
-
-/turf/open/floor/light/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- if(!can_modify_colour)
- return
- if(!on)
- on = TRUE
- currentcolor = 1
- return
- else
- currentcolor++
- if(currentcolor > coloredlights.len)
- on = FALSE
- update_icon()
-
-/turf/open/floor/light/attackby(obj/item/C, mob/user, params)
- if(..())
- return
- if(istype(C, /obj/item/light/bulb)) //only for light tiles
- if(state && user.temporarilyRemoveItemFromInventory(C))
- qdel(C)
- state = 0 //fixing it by bashing it with a light bulb, fun eh?
- update_icon()
- to_chat(user, "I replace the light bulb.")
- else
- to_chat(user, "The light bulb seems fine, no need to replace it.")
-
-
-//Cycles through all of the colours
-/turf/open/floor/light/colour_cycle
- coloredlights = list("cycle_all")
- can_modify_colour = FALSE
-
-
-
-//Two different "dancefloor" types so that you can have a checkered pattern
-// (also has a longer delay than colour_cycle between cycling colours)
-/turf/open/floor/light/colour_cycle/dancefloor_a
- name = "dancefloor"
- desc = ""
- coloredlights = list("dancefloor_A")
-
-/turf/open/floor/light/colour_cycle/dancefloor_b
- name = "dancefloor"
- desc = ""
- coloredlights = list("dancefloor_B")
diff --git a/code/game/turfs/open/floor/mineral_floor.dm b/code/game/turfs/open/floor/mineral_floor.dm
deleted file mode 100644
index 37223c045f..0000000000
--- a/code/game/turfs/open/floor/mineral_floor.dm
+++ /dev/null
@@ -1,242 +0,0 @@
-/* In this file:
- *
- * Plasma floor
- * Gold floor
- * Silver floor
- * Bananium floor
- * Diamond floor
- * Uranium floor
- * Shuttle floor (Titanium)
- */
-
-/turf/open/floor/mineral
- name = "mineral floor"
- icon_state = ""
- var/list/icons
- tiled_dirt = FALSE
-
-
-/turf/open/floor/mineral/Initialize()
- if(!broken_states)
- broken_states = list("[initial(icon_state)]_dam")
- . = ..()
- icons = typelist("icons", icons)
-
-
-/turf/open/floor/mineral/update_icon()
- if(!..())
- return 0
- if(!broken && !burnt)
- if( !(icon_state in icons) )
- icon_state = initial(icon_state)
-
-//PLASMA
-
-/turf/open/floor/mineral/plasma
- name = "plasma floor"
- icon_state = "plasma"
- floor_tile = /obj/item/stack/tile/mineral/plasma
- icons = list("plasma","plasma_dam")
-
-/turf/open/floor/mineral/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- if(exposed_temperature > 300)
- PlasmaBurn(exposed_temperature)
-
-/turf/open/floor/mineral/plasma/attackby(obj/item/W, mob/user, params)
- if(W.get_temperature() > 300)//If the temperature of the object is over 300, then ignite
- message_admins("Plasma flooring was ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(src)]")
- log_game("Plasma flooring was ignited by [key_name(user)] in [AREACOORD(src)]")
- ignite(W.get_temperature())
- return
- ..()
-
-/turf/open/floor/mineral/plasma/proc/PlasmaBurn(temperature)
- make_plating()
- atmos_spawn_air("plasma=20;TEMP=[temperature]")
-
-/turf/open/floor/mineral/plasma/proc/ignite(exposed_temperature)
- if(exposed_temperature > 300)
- PlasmaBurn(exposed_temperature)
-
-
-//GOLD
-
-/turf/open/floor/mineral/gold
- name = "gold floor"
- icon_state = "gold"
- floor_tile = /obj/item/stack/tile/mineral/gold
- icons = list("gold","gold_dam")
-
-//SILVER
-
-/turf/open/floor/mineral/silver
- name = "silver floor"
- icon_state = "silver"
- floor_tile = /obj/item/stack/tile/mineral/silver
- icons = list("silver","silver_dam")
-
-//TITANIUM (shuttle)
-
-/turf/open/floor/mineral/titanium
- name = "shuttle floor"
- icon_state = "titanium"
- floor_tile = /obj/item/stack/tile/mineral/titanium
- broken_states = list("titanium_dam1","titanium_dam2","titanium_dam3","titanium_dam4","titanium_dam5")
-
-/turf/open/floor/mineral/titanium/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/mineral/titanium/yellow
- icon_state = "titanium_yellow"
-
-/turf/open/floor/mineral/titanium/yellow/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/mineral/titanium/blue
- icon_state = "titanium_blue"
-
-/turf/open/floor/mineral/titanium/blue/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/mineral/titanium/white
- icon_state = "titanium_white"
-
-/turf/open/floor/mineral/titanium/white/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/mineral/titanium/purple
- icon_state = "titanium_purple"
-
-/turf/open/floor/mineral/titanium/purple/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-//PLASTITANIUM (syndieshuttle)
-/turf/open/floor/mineral/plastitanium
- name = "shuttle floor"
- icon_state = "plastitanium"
- floor_tile = /obj/item/stack/tile/mineral/plastitanium
- broken_states = list("plastitanium_dam1","plastitanium_dam2","plastitanium_dam3","plastitanium_dam4","plastitanium_dam5")
-
-/turf/open/floor/mineral/plastitanium/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/mineral/plastitanium/red
- icon_state = "plastitanium_red"
-
-/turf/open/floor/mineral/plastitanium/red/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/mineral/plastitanium/red/brig
- name = "brig floor"
-
-//BANANIUM
-
-/turf/open/floor/mineral/bananium
- name = "bananium floor"
- icon_state = "bananium"
- floor_tile = /obj/item/stack/tile/mineral/bananium
- icons = list("bananium","bananium_dam")
- var/spam_flag = 0
-
-/turf/open/floor/mineral/bananium/Entered(mob/living/L)
- .=..()
- if(!.)
- if(istype(L))
- squeak()
-
-/turf/open/floor/mineral/bananium/attackby(obj/item/W, mob/user, params)
- .=..()
- if(!.)
- honk()
-
-/turf/open/floor/mineral/bananium/attack_hand(mob/user)
- .=..()
- if(!.)
- honk()
-
-/turf/open/floor/mineral/bananium/attack_paw(mob/user)
- .=..()
- if(!.)
- honk()
-
-/turf/open/floor/mineral/bananium/proc/honk()
- if(spam_flag < world.time)
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- spam_flag = world.time + 20
-
-/turf/open/floor/mineral/bananium/proc/squeak()
- if(spam_flag < world.time)
- playsound(src, "clownstep", 50, TRUE)
- spam_flag = world.time + 10
-
-/turf/open/floor/mineral/bananium/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-//DIAMOND
-
-/turf/open/floor/mineral/diamond
- name = "diamond floor"
- icon_state = "diamond"
- floor_tile = /obj/item/stack/tile/mineral/diamond
- icons = list("diamond","diamond_dam")
-
-//URANIUM
-
-/turf/open/floor/mineral/uranium
- article = "a"
- name = "uranium floor"
- icon_state = "uranium"
- floor_tile = /obj/item/stack/tile/mineral/uranium
- icons = list("uranium","uranium_dam")
- var/last_event = 0
- var/active = null
-
-/turf/open/floor/mineral/uranium/Entered(mob/AM)
- .=..()
- if(!.)
- if(istype(AM))
- radiate()
-
-/turf/open/floor/mineral/uranium/attackby(obj/item/W, mob/user, params)
- .=..()
- if(!.)
- radiate()
-
-/turf/open/floor/mineral/uranium/attack_hand(mob/user)
- .=..()
- if(!.)
- radiate()
-
-/turf/open/floor/mineral/uranium/attack_paw(mob/user)
- .=..()
- if(!.)
- radiate()
-
-/turf/open/floor/mineral/uranium/proc/radiate()
- if(!active)
- if(world.time > last_event+15)
- active = 1
- radiation_pulse(src, 10)
- for(var/turf/open/floor/mineral/uranium/T in orange(1,src))
- T.radiate()
- last_event = world.time
- active = 0
- return
-
-// ALIEN ALLOY
-/turf/open/floor/mineral/abductor
- name = "alien floor"
- icon_state = "alienpod1"
- floor_tile = /obj/item/stack/tile/mineral/abductor
- icons = list("alienpod1", "alienpod2", "alienpod3", "alienpod4", "alienpod5", "alienpod6", "alienpod7", "alienpod8", "alienpod9")
- baseturfs = /turf/open/floor/plating/abductor2
-
-/turf/open/floor/mineral/abductor/Initialize()
- . = ..()
- icon_state = "alienpod[rand(1,9)]"
-
-/turf/open/floor/mineral/abductor/break_tile()
- return //unbreakable
-
-/turf/open/floor/mineral/abductor/burn_tile()
- return //unburnable
diff --git a/code/game/turfs/open/floor/misc_floor.dm b/code/game/turfs/open/floor/misc_floor.dm
deleted file mode 100644
index deb10bf9e5..0000000000
--- a/code/game/turfs/open/floor/misc_floor.dm
+++ /dev/null
@@ -1,161 +0,0 @@
-/turf/open/floor/goonplaque
- name = "commemorative plaque"
- icon_state = "plaque"
- desc = ""
- floor_tile = /obj/item/stack/tile/plasteel
- tiled_dirt = FALSE
-
-/turf/open/floor/vault
- icon_state = "rockvault"
- floor_tile = /obj/item/stack/tile/plasteel
-
-//Circuit flooring, glows a little
-/turf/open/floor/circuit
- icon = 'icons/turf/floors.dmi'
- icon_state = "bcircuit"
- var/icon_normal = "bcircuit"
- light_color = LIGHT_COLOR_CYAN
- floor_tile = /obj/item/stack/tile/circuit
- var/on = TRUE
-
-/turf/open/floor/circuit/Initialize()
- SSmapping.nuke_tiles += src
- update_icon()
- . = ..()
-
-/turf/open/floor/circuit/Destroy()
- SSmapping.nuke_tiles -= src
- return ..()
-
-/turf/open/floor/circuit/update_icon()
- if(on)
- if(LAZYLEN(SSmapping.nuke_threats))
- icon_state = "rcircuitanim"
- light_color = LIGHT_COLOR_FLARE
- else
- icon_state = icon_normal
- light_color = initial(light_color)
- set_light(1.4, 0.5)
- else
- icon_state = "[icon_normal]off"
- set_light(0)
-
-/turf/open/floor/circuit/off
- icon_state = "bcircuitoff"
- on = FALSE
-
-/turf/open/floor/circuit/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/circuit/telecomms
- initial_gas_mix = TCOMMS_ATMOS
-
-/turf/open/floor/circuit/telecomms/mainframe
- name = "mainframe base"
-
-/turf/open/floor/circuit/telecomms/server
- name = "server base"
-
-/turf/open/floor/circuit/green
- icon_state = "gcircuit"
- icon_normal = "gcircuit"
- light_color = LIGHT_COLOR_GREEN
- floor_tile = /obj/item/stack/tile/circuit/green
-
-/turf/open/floor/circuit/green/off
- icon_state = "gcircuitoff"
- on = FALSE
-
-/turf/open/floor/circuit/green/anim
- icon_state = "gcircuitanim"
- icon_normal = "gcircuitanim"
- floor_tile = /obj/item/stack/tile/circuit/green/anim
-
-/turf/open/floor/circuit/green/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/circuit/green/telecomms
- initial_gas_mix = TCOMMS_ATMOS
-
-/turf/open/floor/circuit/green/telecomms/mainframe
- name = "mainframe base"
-
-/turf/open/floor/circuit/red
- icon_state = "rcircuit"
- icon_normal = "rcircuit"
- light_color = LIGHT_COLOR_FLARE
- floor_tile = /obj/item/stack/tile/circuit/red
-
-/turf/open/floor/circuit/red/off
- icon_state = "rcircuitoff"
- on = FALSE
-
-/turf/open/floor/circuit/red/anim
- icon_state = "rcircuitanim"
- icon_normal = "rcircuitanim"
- floor_tile = /obj/item/stack/tile/circuit/red/anim
-
-/turf/open/floor/circuit/red/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/circuit/red/telecomms
- initial_gas_mix = TCOMMS_ATMOS
-
-/turf/open/floor/pod
- name = "pod floor"
- icon_state = "podfloor"
- icon_regular_floor = "podfloor"
- floor_tile = /obj/item/stack/tile/pod
-
-/turf/open/floor/pod/light
- icon_state = "podfloor_light"
- icon_regular_floor = "podfloor_light"
- floor_tile = /obj/item/stack/tile/pod/light
-
-/turf/open/floor/pod/dark
- icon_state = "podfloor_dark"
- icon_regular_floor = "podfloor_dark"
- floor_tile = /obj/item/stack/tile/pod/dark
-
-
-/turf/open/floor/noslip
- name = "high-traction floor"
- icon_state = "noslip"
- floor_tile = /obj/item/stack/tile/noslip
- broken_states = list("noslip-damaged1","noslip-damaged2","noslip-damaged3")
- burnt_states = list("noslip-scorched1","noslip-scorched2")
- slowdown = -0.3
-
-/turf/open/floor/noslip/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
- return
-
-/turf/open/floor/oldshuttle
- icon = 'icons/turf/shuttleold.dmi'
- icon_state = "floor"
- floor_tile = /obj/item/stack/tile/plasteel
-
-/turf/open/floor/bronze
- name = "bronze floor"
- desc = ""
- icon = 'icons/obj/clockwork_objects.dmi'
- icon_state = "clockwork_floor"
- floor_tile = /obj/item/stack/tile/bronze
-
-/turf/open/floor/white
- name = "white floor"
- desc = ""
- icon_state = "pure_white"
-
-/turf/open/floor/black
- name = "black floor"
- icon_state = "black"
-
-/turf/open/floor/plastic
- name = "plastic floor"
- desc = ""
- icon_state = "plastic"
- thermal_conductivity = 0.1
- heat_capacity = 900
- custom_materials = list(/datum/material/plastic=500)
- floor_tile = /obj/item/stack/tile/plastic
- broken_states = list("plastic-damaged1","plastic-damaged2")
diff --git a/code/game/turfs/open/floor/plasteel_floor.dm b/code/game/turfs/open/floor/plasteel_floor.dm
deleted file mode 100644
index b0164a3edb..0000000000
--- a/code/game/turfs/open/floor/plasteel_floor.dm
+++ /dev/null
@@ -1,157 +0,0 @@
-/turf/open/floor/plasteel
- icon_state = "floor"
- floor_tile = /obj/item/stack/tile/plasteel
- broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5")
- burnt_states = list("floorscorched1", "floorscorched2")
-
-/turf/open/floor/plasteel/examine(mob/user)
- . = ..()
- . += "There's a small crack on the edge of it."
-
-/turf/open/floor/plasteel/update_icon()
- if(!..())
- return 0
- if(!broken && !burnt)
- icon_state = icon_regular_floor
-
-
-/turf/open/floor/plasteel/airless
- initial_gas_mix = AIRLESS_ATMOS
-/turf/open/floor/plasteel/telecomms
- initial_gas_mix = TCOMMS_ATMOS
-
-
-/turf/open/floor/plasteel/dark
- icon_state = "darkfull"
-/turf/open/floor/plasteel/dark/airless
- initial_gas_mix = AIRLESS_ATMOS
-/turf/open/floor/plasteel/dark/telecomms
- initial_gas_mix = TCOMMS_ATMOS
-/turf/open/floor/plasteel/airless/dark
- icon_state = "darkfull"
-/turf/open/floor/plasteel/dark/side
- icon_state = "dark"
-/turf/open/floor/plasteel/dark/corner
- icon_state = "darkcorner"
-/turf/open/floor/plasteel/checker
- icon_state = "checker"
-
-
-/turf/open/floor/plasteel/white
- icon_state = "white"
-/turf/open/floor/plasteel/white/side
- icon_state = "whitehall"
-/turf/open/floor/plasteel/white/corner
- icon_state = "whitecorner"
-/turf/open/floor/plasteel/airless/white
- icon_state = "white"
-/turf/open/floor/plasteel/airless/white/side
- icon_state = "whitehall"
-/turf/open/floor/plasteel/airless/white/corner
- icon_state = "whitecorner"
-/turf/open/floor/plasteel/white/telecomms
- initial_gas_mix = TCOMMS_ATMOS
-
-/turf/open/floor/plasteel/airless/showroomfloor
- icon_state = "showroomfloor"
-
-
-/turf/open/floor/plasteel/yellowsiding
- icon_state = "yellowsiding"
-/turf/open/floor/plasteel/yellowsiding/corner
- icon_state = "yellowcornersiding"
-
-
-/turf/open/floor/plasteel/recharge_floor
- icon_state = "recharge_floor"
-/turf/open/floor/plasteel/recharge_floor/asteroid
- icon_state = "recharge_floor_asteroid"
-
-
-/turf/open/floor/plasteel/chapel
- icon_state = "chapel"
-
-/turf/open/floor/plasteel/showroomfloor
- icon_state = "showroomfloor"
-
-
-/turf/open/floor/plasteel/solarpanel
- icon_state = "solarpanel"
-/turf/open/floor/plasteel/airless/solarpanel
- icon_state = "solarpanel"
-
-
-/turf/open/floor/plasteel/freezer
- icon_state = "freezerfloor"
-
-/turf/open/floor/plasteel/freezer/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-
-/turf/open/floor/plasteel/kitchen_coldroom
- name = "cold room floor"
- initial_gas_mix = KITCHEN_COLDROOM_ATMOS
-
-/turf/open/floor/plasteel/kitchen_coldroom/freezerfloor
- icon_state = "freezerfloor"
-
-
-/turf/open/floor/plasteel/grimy
- icon_state = "grimy"
- tiled_dirt = FALSE
-
-/turf/open/floor/plasteel/cafeteria
- icon_state = "cafeteria"
-
-/turf/open/floor/plasteel/airless/cafeteria
- icon_state = "cafeteria"
-
-
-/turf/open/floor/plasteel/cult
- icon_state = "cult"
- name = "engraved floor"
-
-/turf/open/floor/plasteel/vaporwave
- icon_state = "pinkblack"
-
-/turf/open/floor/plasteel/goonplaque
- icon_state = "plaque"
- name = "commemorative plaque"
- desc = ""
- tiled_dirt = FALSE
-
-/turf/open/floor/plasteel/cult/narsie_act()
- return
-/turf/open/floor/plasteel/cult/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-
-/turf/open/floor/plasteel/stairs
- icon_state = "stairs"
- tiled_dirt = FALSE
-/turf/open/floor/plasteel/stairs/left
- icon_state = "stairs-l"
-/turf/open/floor/plasteel/stairs/medium
- icon_state = "stairs-m"
-/turf/open/floor/plasteel/stairs/right
- icon_state = "stairs-r"
-/turf/open/floor/plasteel/stairs/old
- icon_state = "stairs-old"
-
-
-/turf/open/floor/plasteel/rockvault
- icon_state = "rockvault"
-/turf/open/floor/plasteel/rockvault/alien
- icon_state = "alienvault"
-/turf/open/floor/plasteel/rockvault/sandstone
- icon_state = "sandstonevault"
-
-
-/turf/open/floor/plasteel/elevatorshaft
- icon_state = "elevatorshaft"
-
-/turf/open/floor/plasteel/bluespace
- icon_state = "bluespace"
-
-/turf/open/floor/plasteel/sepia
- icon_state = "sepia"
diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm
deleted file mode 100644
index edd0a97059..0000000000
--- a/code/game/turfs/open/floor/plating.dm
+++ /dev/null
@@ -1,138 +0,0 @@
-/* In this file:
- *
- * Plating
- * Airless
- * Airless plating
- * Engine floor
- * Foam plating
- */
-
-/turf/open/floor/plating
- name = "plating"
- icon_state = "plating"
- intact = FALSE
- baseturfs = /turf/open/transparent/openspace
- footstep = FOOTSTEP_PLATING
- barefootstep = FOOTSTEP_HARD_BAREFOOT
- clawfootstep = FOOTSTEP_HARD_CLAW
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-
- var/attachment_holes = TRUE
-
-/turf/open/floor/plating/examine(mob/user)
- . = ..()
- if(broken || burnt)
- . += "It looks like the dents could be welded smooth."
- return
- if(attachment_holes)
- . += "There are a few attachment holes for a new tile or reinforcement rods."
- else
- . += "I might be able to build ontop of it with some tiles..."
-
-/turf/open/floor/plating/Initialize()
- if (!broken_states)
- broken_states = list("platingdmg1", "platingdmg2", "platingdmg3")
- if (!burnt_states)
- burnt_states = list("panelscorched")
- . = ..()
- if(!attachment_holes || (!broken && !burnt))
- icon_plating = icon_state
- else
- icon_plating = initial(icon_state)
-
-/turf/open/floor/plating/update_icon()
- if(!..())
- return
- if(!broken && !burnt)
- icon_state = icon_plating //Because asteroids are 'platings' too.
-
-/turf/open/floor/plating/attackby(obj/item/C, mob/user, params)
- if(..())
- return
- if(istype(C, /obj/item/stack/rods) && attachment_holes)
- if(broken || burnt)
- to_chat(user, "Repair the plating first!")
- return
- var/obj/item/stack/rods/R = C
- if (R.get_amount() < 2)
- to_chat(user, "I need two rods to make a reinforced floor!")
- return
- else
- to_chat(user, "I begin reinforcing the floor...")
- if(do_after(user, 30, target = src))
- if (R.get_amount() >= 2 && !istype(src, /turf/open/floor/engine))
- PlaceOnTop(/turf/open/floor/engine, flags = CHANGETURF_INHERIT_AIR)
- playsound(src, 'sound/blank.ogg', 80, TRUE)
- R.use(2)
- to_chat(user, "I reinforce the floor.")
- return
- else if(istype(C, /obj/item/stack/tile))
- if(!broken && !burnt)
- for(var/obj/O in src)
- if(O.level == 1) //ex. pipes laid underneath a tile
- for(var/M in O.buckled_mobs)
- to_chat(user, "Someone is buckled to \the [O]! Unbuckle [M] to move \him out of the way.")
- return
- var/obj/item/stack/tile/W = C
- if(!W.use(1))
- return
- var/turf/open/floor/T = PlaceOnTop(W.turf_type, flags = CHANGETURF_INHERIT_AIR)
- if(istype(W, /obj/item/stack/tile/light)) //TODO: get rid of this ugly check somehow
- var/obj/item/stack/tile/light/L = W
- var/turf/open/floor/light/F = T
- F.state = L.state
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- else
- to_chat(user, "This section is too damaged to support a tile! Use a welder to fix the damage.")
-
-/turf/open/floor/plating/welder_act(mob/living/user, obj/item/I)
- ..()
- if((broken || burnt) && I.use_tool(src, user, 0, volume=80))
- to_chat(user, "I fix some dents on the broken plating.")
- icon_state = icon_plating
- burnt = FALSE
- broken = FALSE
-
- return TRUE
-
-/turf/open/floor/plating/make_plating()
- return
-
-/turf/open/floor/plating/foam
- name = "metal foam plating"
- desc = ""
- icon_state = "foam_plating"
-
-/turf/open/floor/plating/foam/burn_tile()
- return //jetfuel can't melt steel foam
-
-/turf/open/floor/plating/foam/break_tile()
- return //jetfuel can't break steel foam...
-
-/turf/open/floor/plating/foam/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/stack/tile/plasteel))
- var/obj/item/stack/tile/plasteel/P = I
- if(P.use(1))
- var/obj/L = locate(/obj/structure/lattice) in src
- if(L)
- qdel(L)
- to_chat(user, "I reinforce the foamed plating with tiling.")
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- ChangeTurf(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
- else
- playsound(src, 'sound/blank.ogg', 100, TRUE) //The attack sound is muffled by the foam itself
- user.changeNext_move(CLICK_CD_MELEE)
- user.do_attack_animation(src)
- if(prob(I.force * 20 - 25))
- user.visible_message("[user] smashes through [src]!", \
- "I smash through [src] with [I]!")
- ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
- else
- to_chat(user, "I hit [src], to no effect!")
-
-/turf/open/floor/plating/foam/ex_act()
- ..()
- ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
-
-/turf/open/floor/plating/foam/tool_act(mob/living/user, obj/item/I, tool_type)
- return
diff --git a/code/game/turfs/open/floor/plating/asteroid.dm b/code/game/turfs/open/floor/plating/asteroid.dm
deleted file mode 100644
index cf3ca6c5d4..0000000000
--- a/code/game/turfs/open/floor/plating/asteroid.dm
+++ /dev/null
@@ -1,184 +0,0 @@
-
-/**********************Asteroid**************************/
-
-/turf/open/floor/plating/asteroid //floor piece
- gender = PLURAL
- name = "asteroid sand"
- baseturfs = /turf/open/floor/plating/asteroid
- icon = 'icons/turf/floors.dmi'
- icon_state = "asteroid"
- icon_plating = "asteroid"
- postdig_icon_change = TRUE
- footstep = FOOTSTEP_SAND
- barefootstep = FOOTSTEP_SAND
- clawfootstep = FOOTSTEP_SAND
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- var/environment_type = "asteroid"
- var/turf_type = /turf/open/floor/plating/asteroid //Because caves do whacky shit to revert to normal
- var/floor_variance = 20 //probability floor has a different icon state
- attachment_holes = FALSE
- var/obj/item/stack/digResult = /obj/item/stack/ore/glass/basalt
- var/dug
-
-/turf/open/floor/plating/asteroid/Initialize()
- var/proper_name = name
- . = ..()
- name = proper_name
- if(prob(floor_variance))
- icon_state = "[environment_type][rand(0,12)]"
-
-/turf/open/floor/plating/asteroid/proc/getDug()
- new digResult(src, 5)
- if(postdig_icon_change)
- if(!postdig_icon)
- icon_plating = "[environment_type]_dug"
- icon_state = "[environment_type]_dug"
- dug = TRUE
-
-/turf/open/floor/plating/asteroid/proc/can_dig(mob/user)
- if(!dug)
- return TRUE
- if(user)
- to_chat(user, "Looks like someone has dug here already!")
-
-/turf/open/floor/plating/asteroid/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return
-
-/turf/open/floor/plating/asteroid/burn_tile()
- return
-
-/turf/open/floor/plating/asteroid/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
- return
-
-/turf/open/floor/plating/asteroid/MakeDry()
- return
-
-/turf/open/floor/plating/asteroid/attackby(obj/item/W, mob/user, params)
- . = ..()
- if(!.)
- if(W.tool_behaviour == TOOL_SHOVEL || W.tool_behaviour == TOOL_MINING)
- if(!can_dig(user))
- return TRUE
-
- if(!isturf(user.loc))
- return
-
- to_chat(user, "I start digging...")
-
- if(W.use_tool(src, user, 40, volume=50))
- if(!can_dig(user))
- return TRUE
- to_chat(user, "I dig a hole.")
- getDug()
- SSblackbox.record_feedback("tally", "pick_used_mining", 1, W.type)
- return TRUE
- else if(istype(W, /obj/item/storage/bag/ore))
- for(var/obj/item/stack/ore/O in src)
- SEND_SIGNAL(W, COMSIG_PARENT_ATTACKBY, O)
-
-/turf/open/floor/plating/asteroid/ex_act(severity, target)
- . = SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, severity, target)
- contents_explosion(severity, target)
-
-/turf/open/floor/plating/lavaland_baseturf
- baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface
-
-/turf/open/floor/plating/asteroid/basalt
- name = "volcanic floor"
- baseturfs = /turf/open/floor/plating/asteroid/basalt
- icon = 'icons/turf/floors.dmi'
- icon_state = "basalt"
- icon_plating = "basalt"
- environment_type = "basalt"
- floor_variance = 15
- digResult = /obj/item/stack/ore/glass/basalt
-
-/turf/open/floor/plating/asteroid/basalt/lava //lava underneath
- baseturfs = /turf/open/lava/smooth
-
-/turf/open/floor/plating/asteroid/basalt/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/plating/asteroid/basalt/Initialize()
- . = ..()
- set_basalt_light(src)
-
-/turf/open/floor/plating/asteroid/getDug()
- set_light(0)
- return ..()
-
-/proc/set_basalt_light(turf/open/floor/B)
- switch(B.icon_state)
- if("basalt1", "basalt2", "basalt3")
- B.set_light(2, 0.6, LIGHT_COLOR_LAVA) //more light
- if("basalt5", "basalt9")
- B.set_light(1.4, 0.6, LIGHT_COLOR_LAVA) //barely anything!
-
-///////Surface. The surface is warm, but survivable without a suit. Internals are required. The floors break to chasms, which drop you into the underground.
-
-/turf/open/floor/plating/asteroid/basalt/lava_land_surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- planetary_atmos = TRUE
- baseturfs = /turf/open/lava/smooth/lava_land_surface
-
-
-
-
-/turf/open/floor/plating/asteroid/airless
- initial_gas_mix = AIRLESS_ATMOS
- baseturfs = /turf/open/floor/plating/asteroid/airless
- turf_type = /turf/open/floor/plating/asteroid/airless
-
-/turf/open/floor/plating/asteroid/snow
- gender = PLURAL
- name = "snow"
- desc = ""
- icon = 'icons/turf/snow.dmi'
- baseturfs = /turf/open/floor/plating/asteroid/snow
- icon_state = "snow"
- icon_plating = "snow"
- initial_gas_mix = FROZEN_ATMOS
- slowdown = 2
- environment_type = "snow"
- flags_1 = NONE
- planetary_atmos = TRUE
- burnt_states = list("snow_dug")
- bullet_sizzle = TRUE
- bullet_bounce_sound = null
- digResult = /obj/item/stack/sheet/mineral/snow
-
-/turf/open/floor/plating/asteroid/snow/burn_tile()
- if(!burnt)
- visible_message("[src] melts away!.")
- slowdown = 0
- burnt = TRUE
- icon_state = "snow_dug"
- return TRUE
- return FALSE
-
-/turf/open/floor/plating/asteroid/snow/ice
- name = "icy snow"
- desc = ""
- baseturfs = /turf/open/floor/plating/asteroid/snow/ice
- initial_gas_mix = "o2=0;n2=82;plasma=24;TEMP=120"
- floor_variance = 0
- icon_state = "snow-ice"
- icon_plating = "snow-ice"
- environment_type = "snow_cavern"
- footstep = FOOTSTEP_FLOOR
- barefootstep = FOOTSTEP_HARD_BAREFOOT
- clawfootstep = FOOTSTEP_HARD_CLAW
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-
-/turf/open/floor/plating/asteroid/snow/ice/burn_tile()
- return FALSE
-
-/turf/open/floor/plating/asteroid/snow/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/plating/asteroid/snow/temperatre
- initial_gas_mix = "o2=22;n2=82;TEMP=255.37"
-
-/turf/open/floor/plating/asteroid/snow/atmosphere
- initial_gas_mix = FROZEN_ATMOS
- planetary_atmos = FALSE
diff --git a/code/game/turfs/open/floor/plating/dirt.dm b/code/game/turfs/open/floor/plating/dirt.dm
deleted file mode 100644
index 8b145dfc33..0000000000
--- a/code/game/turfs/open/floor/plating/dirt.dm
+++ /dev/null
@@ -1,32 +0,0 @@
-/turf/open/floor/plating/dirt
- gender = PLURAL
- name = "dirt"
- desc = "The dirt is pocked with the scars of countless battles."
- icon = 'icons/turf/floors.dmi'
- icon_state = "dirt"
- initial_gas_mix = OPENTURF_LOW_PRESSURE
- planetary_atmos = TRUE
- attachment_holes = FALSE
- footstep = FOOTSTEP_SAND
- barefootstep = FOOTSTEP_SAND
- clawfootstep = FOOTSTEP_SAND
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- tiled_dirt = FALSE
-
-/turf/open/floor/plating/dirt/dark
- icon_state = "greenerdirt"
-
-/turf/open/floor/plating/dirt/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return
-//underworld
-/turf/open/floor/plating/dirt/underworld
- gender = PLURAL
- name = "ash"
- desc = "The floor is strange.."
- icon = 'icons/turf/floors.dmi'
- icon_state = "underworld"
- footstep = FOOTSTEP_SAND
- barefootstep = FOOTSTEP_SAND
- clawfootstep = FOOTSTEP_SAND
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- tiled_dirt = FALSE
diff --git a/code/game/turfs/open/floor/plating/misc_plating.dm b/code/game/turfs/open/floor/plating/misc_plating.dm
deleted file mode 100644
index 8190537255..0000000000
--- a/code/game/turfs/open/floor/plating/misc_plating.dm
+++ /dev/null
@@ -1,263 +0,0 @@
-
-/turf/open/floor/plating/airless
- icon_state = "plating"
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/plating/abductor
- name = "alien floor"
- icon_state = "alienpod1"
- tiled_dirt = FALSE
-
-/turf/open/floor/plating/abductor/Initialize()
- . = ..()
- icon_state = "alienpod[rand(1,9)]"
-
-
-/turf/open/floor/plating/abductor2
- name = "alien plating"
- icon_state = "alienplating"
- tiled_dirt = FALSE
-
-/turf/open/floor/plating/abductor2/break_tile()
- return //unbreakable
-
-/turf/open/floor/plating/abductor2/burn_tile()
- return //unburnable
-
-/turf/open/floor/plating/abductor2/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return
-
-/turf/open/floor/plating/astplate
- icon_state = "asteroidplating"
-
-/turf/open/floor/plating/airless/astplate
- icon_state = "asteroidplating"
-
-
-/turf/open/floor/plating/ashplanet
- icon = 'icons/turf/mining.dmi'
- gender = PLURAL
- name = "ash"
- icon_state = "ash"
- smooth = SMOOTH_MORE|SMOOTH_BORDER
- var/smooth_icon = 'icons/turf/floors/ash.dmi'
- desc = ""
- baseturfs = /turf/open/floor/plating/ashplanet/wateryrock //I assume this will be a chasm eventually, once this becomes an actual surface
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
- planetary_atmos = TRUE
- attachment_holes = FALSE
- footstep = FOOTSTEP_SAND
- barefootstep = FOOTSTEP_SAND
- clawfootstep = FOOTSTEP_SAND
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- tiled_dirt = FALSE
-
-/turf/open/floor/plating/ashplanet/Initialize()
- if(smooth)
- var/matrix/M = new
- M.Translate(-4, -4)
- transform = M
- icon = smooth_icon
- . = ..()
-
-/turf/open/floor/plating/ashplanet/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return
-
-/turf/open/floor/plating/ashplanet/break_tile()
- return
-
-/turf/open/floor/plating/ashplanet/burn_tile()
- return
-
-/turf/open/floor/plating/ashplanet/ash
- canSmoothWith = list(/turf/open/floor/plating/ashplanet/ash, /turf/closed)
- layer = HIGH_TURF_LAYER
- slowdown = 1
-
-/turf/open/floor/plating/ashplanet/rocky
- gender = PLURAL
- name = "rocky ground"
- icon_state = "rockyash"
- smooth_icon = 'icons/turf/floors/rocky_ash.dmi'
- layer = MID_TURF_LAYER
- canSmoothWith = list(/turf/open/floor/plating/ashplanet/rocky, /turf/closed)
- footstep = FOOTSTEP_FLOOR
- barefootstep = FOOTSTEP_HARD_BAREFOOT
- clawfootstep = FOOTSTEP_HARD_CLAW
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-
-/turf/open/floor/plating/ashplanet/wateryrock
- gender = PLURAL
- name = "wet rocky ground"
- smooth = null
- icon_state = "wateryrock"
- slowdown = 2
- footstep = FOOTSTEP_FLOOR
- barefootstep = FOOTSTEP_HARD_BAREFOOT
- clawfootstep = FOOTSTEP_HARD_CLAW
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-
-/turf/open/floor/plating/ashplanet/wateryrock/Initialize()
- icon_state = "[icon_state][rand(1, 9)]"
- . = ..()
-
-
-/turf/open/floor/plating/beach
- name = "beach"
- icon = 'icons/misc/beach.dmi'
- flags_1 = NONE
- attachment_holes = FALSE
- bullet_bounce_sound = null
- footstep = FOOTSTEP_SAND
- barefootstep = FOOTSTEP_SAND
- clawfootstep = FOOTSTEP_SAND
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-
-/turf/open/floor/plating/beach/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return
-
-/turf/open/floor/plating/beach/ex_act(severity, target)
- contents_explosion(severity, target)
-
-/turf/open/floor/plating/beach/sand
- gender = PLURAL
- name = "sand"
- desc = ""
- icon_state = "sand"
- baseturfs = /turf/open/floor/plating/beach/sand
-
-/turf/open/floor/plating/beach/coastline_t
- name = "coastline"
- desc = ""
- icon_state = "sandwater_t"
- baseturfs = /turf/open/floor/plating/beach/coastline_t
-
-/turf/open/floor/plating/beach/coastline_b //need to make this water subtype.
- name = "coastline"
- icon_state = "sandwater_b"
- baseturfs = /turf/open/floor/plating/beach/coastline_b
- footstep = FOOTSTEP_LAVA
- barefootstep = FOOTSTEP_LAVA
- clawfootstep = FOOTSTEP_LAVA
- heavyfootstep = FOOTSTEP_LAVA
-
-/turf/open/floor/plating/beach/water
- gender = PLURAL
- name = "water"
- desc = ""
- icon_state = "water"
- baseturfs = /turf/open/floor/plating/beach/water
- footstep = FOOTSTEP_LAVA //placeholder, kinda.
- barefootstep = FOOTSTEP_LAVA
- clawfootstep = FOOTSTEP_LAVA
- heavyfootstep = FOOTSTEP_LAVA
-
-/turf/open/floor/plating/beach/coastline_t/sandwater_inner
- icon_state = "sandwater_inner"
- baseturfs = /turf/open/floor/plating/beach/coastline_t/sandwater_inner
-
-/turf/open/floor/plating/ironsand
- gender = PLURAL
- name = "iron sand"
- desc = ""
- footstep = FOOTSTEP_SAND
- barefootstep = FOOTSTEP_SAND
- clawfootstep = FOOTSTEP_SAND
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-
-/turf/open/floor/plating/ironsand/Initialize()
- . = ..()
- icon_state = "ironsand[rand(1,15)]"
-
-/turf/open/floor/plating/ironsand/burn_tile()
- return
-
-/turf/open/floor/plating/ironsand/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return
-
-/turf/open/floor/plating/ice
- name = "ice sheet"
- desc = ""
- icon = 'icons/turf/floors/ice_turf.dmi'
- icon_state = "unsmooth"
- initial_gas_mix = FROZEN_ATMOS
- temperature = 180
- planetary_atmos = TRUE
- baseturfs = /turf/open/floor/plating/ice
- slowdown = 1
- attachment_holes = FALSE
- bullet_sizzle = TRUE
- footstep = FOOTSTEP_FLOOR
- barefootstep = FOOTSTEP_HARD_BAREFOOT
- clawfootstep = FOOTSTEP_HARD_CLAW
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-
-/turf/open/floor/plating/ice/Initialize()
- . = ..()
- MakeSlippery(TURF_WET_PERMAFROST, INFINITY, 0, INFINITY, TRUE)
-
-/turf/open/floor/plating/ice/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return
-
-/turf/open/floor/plating/ice/smooth
- icon_state = "smooth"
- smooth = SMOOTH_MORE | SMOOTH_BORDER
- canSmoothWith = list(/turf/open/floor/plating/ice/smooth, /turf/open/floor/plating/ice)
-
-
-/turf/open/floor/plating/ice/colder
- temperature = 140
-
-/turf/open/floor/plating/ice/temperate
- temperature = 255.37
-
-/turf/open/floor/plating/ice/break_tile()
- return
-
-/turf/open/floor/plating/ice/burn_tile()
- return
-
-
-/turf/open/floor/plating/snowed
- name = "snowed-over plating"
- desc = ""
- icon = 'icons/turf/snow.dmi'
- icon_state = "snowplating"
- initial_gas_mix = FROZEN_ATMOS
- temperature = 180
- attachment_holes = FALSE
- planetary_atmos = TRUE
- footstep = FOOTSTEP_SAND
- barefootstep = FOOTSTEP_SAND
- clawfootstep = FOOTSTEP_SAND
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-
-/turf/open/floor/plating/snowed/cavern
- initial_gas_mix = "o2=0;n2=82;plasma=24;TEMP=120"
-
-/turf/open/floor/plating/snowed/smoothed
- smooth = SMOOTH_MORE | SMOOTH_BORDER
- canSmoothWith = list(/turf/open/floor/plating/snowed/smoothed, /turf/open/floor/plating/snowed)
- planetary_atmos = TRUE
- icon = 'icons/turf/floors/snow_turf.dmi'
- icon_state = "smooth"
-
-/turf/open/floor/plating/snowed/colder
- temperature = 140
-
-/turf/open/floor/plating/snowed/temperatre
- temperature = 255.37
-
-/turf/open/floor/plating/grass
- name = "grass"
- desc = ""
- icon_state = "grass"
- broken_states = list("sand")
- bullet_bounce_sound = null
- footstep = FOOTSTEP_GRASS
- barefootstep = FOOTSTEP_GRASS
- clawfootstep = FOOTSTEP_GRASS
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-
-/turf/open/floor/plating/grass/lavaland
- initial_gas_mix = LAVALAND_DEFAULT_ATMOS
diff --git a/code/game/turfs/open/floor/reinf_floor.dm b/code/game/turfs/open/floor/reinf_floor.dm
deleted file mode 100644
index 3023ca3674..0000000000
--- a/code/game/turfs/open/floor/reinf_floor.dm
+++ /dev/null
@@ -1,120 +0,0 @@
-
-/turf/open/floor/engine
- name = "reinforced floor"
- desc = ""
- icon_state = "engine"
- thermal_conductivity = 0.025
- heat_capacity = INFINITY
- floor_tile = /obj/item/stack/rods
- footstep = FOOTSTEP_PLATING
- barefootstep = FOOTSTEP_HARD_BAREFOOT
- clawfootstep = FOOTSTEP_HARD_CLAW
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
- tiled_dirt = FALSE
-
-/turf/open/floor/engine/examine(mob/user)
- . += ..()
- . += "The reinforcement rods are wrenched firmly in place."
-
-/turf/open/floor/engine/airless
- initial_gas_mix = AIRLESS_ATMOS
-
-/turf/open/floor/engine/break_tile()
- return //unbreakable
-
-/turf/open/floor/engine/burn_tile()
- return //unburnable
-
-/turf/open/floor/engine/make_plating(force = 0)
- if(force)
- ..()
- return //unplateable
-
-/turf/open/floor/engine/try_replace_tile(obj/item/stack/tile/T, mob/user, params)
- return
-
-/turf/open/floor/engine/crowbar_act(mob/living/user, obj/item/I)
- return
-
-/turf/open/floor/engine/wrench_act(mob/living/user, obj/item/I)
- ..()
- to_chat(user, "I begin removing rods...")
- if(I.use_tool(src, user, 30, volume=80))
- if(!istype(src, /turf/open/floor/engine))
- return TRUE
- if(floor_tile)
- new floor_tile(src, 2)
- ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
- return TRUE
-
-/turf/open/floor/engine/acid_act(acidpwr, acid_volume)
- acidpwr = min(acidpwr, 50) //we reduce the power so reinf floor never get melted.
- . = ..()
-
-/turf/open/floor/engine/ex_act(severity,target)
- var/shielded = is_shielded()
- contents_explosion(severity, target)
- if(severity != 1 && shielded && target != src)
- return
- if(target == src)
- ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
- return
- switch(severity)
- if(1)
- if(prob(80))
- if(!length(baseturfs) || !ispath(baseturfs[baseturfs.len-1], /turf/open/floor))
- ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
- ReplaceWithLattice()
- else
- ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR)
- else if(prob(50))
- ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR)
- else
- ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
- if(2)
- if(prob(50))
- ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
-
-/turf/open/floor/engine/singularity_pull()
-
-/turf/open/floor/engine/attack_paw(mob/user)
- return attack_hand(user)
-
-/turf/open/floor/engine/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- user.Move_Pulled(src)
-
-//air filled floors; used in atmos pressure chambers
-
-/turf/open/floor/engine/n2o
- article = "an"
- name = "\improper N2O floor"
- initial_gas_mix = ATMOS_TANK_N2O
-
-/turf/open/floor/engine/co2
- name = "\improper CO2 floor"
- initial_gas_mix = ATMOS_TANK_CO2
-
-/turf/open/floor/engine/plasma
- name = "plasma floor"
- initial_gas_mix = ATMOS_TANK_PLASMA
-
-/turf/open/floor/engine/o2
- name = "\improper O2 floor"
- initial_gas_mix = ATMOS_TANK_O2
-
-/turf/open/floor/engine/n2
- article = "an"
- name = "\improper N2 floor"
- initial_gas_mix = ATMOS_TANK_N2
-
-/turf/open/floor/engine/air
- name = "air floor"
- initial_gas_mix = ATMOS_TANK_AIRMIX
-
-
-/turf/open/floor/engine/vacuum
- name = "vacuum floor"
- initial_gas_mix = AIRLESS_ATMOS
diff --git a/code/game/turfs/open/floor/roguefloor.dm b/code/game/turfs/open/floor/roguefloor.dm
index 74e789d642..ff74d3d96c 100644
--- a/code/game/turfs/open/floor/roguefloor.dm
+++ b/code/game/turfs/open/floor/roguefloor.dm
@@ -19,6 +19,10 @@
icon = smooth_icon
. = ..()
+/turf/open/floor/rogue/dirt
+ icon = 'icons/turf/floors.dmi'
+ icon_state = "greenerdirt"
+
/* .................. Wooden Floors ................... */
/turf/open/floor/rogue/ruinedwood
icon_state = "wooden_floor"
diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm
index 3b7949b4e1..89499b930d 100644
--- a/code/game/turfs/open/lava.dm
+++ b/code/game/turfs/open/lava.dm
@@ -95,7 +95,7 @@
/turf/open/lava/proc/is_safe()
//if anything matching this typecache is found in the lava, we don't burn things
- var/static/list/lava_safeties_typecache = typecacheof(list(/obj/structure/lattice/catwalk, /obj/structure/stone_tile))
+ var/static/list/lava_safeties_typecache = typecacheof(list(/obj/structure/stone_tile))
var/list/found_safeties = typecache_filter_list(contents, lava_safeties_typecache)
for(var/obj/structure/stone_tile/S in found_safeties)
if(S.fallen)
diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm
index 709fb87d3f..6432729c0f 100644
--- a/code/game/turfs/open/openspace.dm
+++ b/code/game/turfs/open/openspace.dm
@@ -59,11 +59,6 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
dynamic_lighting = 1
vis_contents += GLOB.openspace_backdrop_one_for_all //Special grey square for projecting backdrop darkness filter on it.
-/turf/open/transparent/openspace/can_have_cabling()
- if(locate(/obj/structure/lattice/catwalk, src))
- return TRUE
- return FALSE
-
/turf/open/transparent/openspace/zAirIn()
return TRUE
@@ -149,43 +144,6 @@ GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdr
..()
if(!CanBuildHere())
return
- if(istype(C, /obj/item/stack/rods))
- var/obj/item/stack/rods/R = C
- var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
- var/obj/structure/lattice/catwalk/W = locate(/obj/structure/lattice/catwalk, src)
- if(W)
- to_chat(user, "There is already a catwalk here!")
- return
- if(L)
- if(R.use(1))
- to_chat(user, "I construct a catwalk.")
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- new/obj/structure/lattice/catwalk(src)
- else
- to_chat(user, "I need two rods to build a catwalk!")
- return
- if(R.use(1))
- to_chat(user, "I construct a lattice.")
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- ReplaceWithLattice()
- else
- to_chat(user, "I need one rod to build a lattice.")
- return
- if(istype(C, /obj/item/stack/tile/plasteel))
- if(!CanCoverUp())
- return
- var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
- if(L)
- var/obj/item/stack/tile/plasteel/S = C
- if(S.use(1))
- qdel(L)
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- to_chat(user, "I build a floor.")
- PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
- else
- to_chat(user, "I need one floor tile to build a floor!")
- else
- to_chat(user, "The plating is going to need some support! Place metal rods first.")
/turf/open/transparent/openspace/bullet_act(obj/projectile/P)
if(!P.arcshot)
diff --git a/code/game/turfs/open/river.dm b/code/game/turfs/open/river.dm
index 2b1db7c683..5187b07ec0 100644
--- a/code/game/turfs/open/river.dm
+++ b/code/game/turfs/open/river.dm
@@ -75,7 +75,7 @@
for(var/F in RANGE_TURFS(1, src) - src)
var/turf/T = F
var/area/new_area = get_area(T)
- if(!T || (T.density && !ismineralturf(T)) || istype(T, /turf/open/indestructible) || (whitelisted_area && !istype(new_area, whitelisted_area)) || (T.flags_1 & NO_LAVA_GEN_1) )
+ if(!T || (T.density && !ismineralturf(T)) || (whitelisted_area && !istype(new_area, whitelisted_area)) || (T.flags_1 & NO_LAVA_GEN_1) )
continue
if(!logged_turf_type && ismineralturf(T))
diff --git a/code/game/turfs/open/space/space.dm b/code/game/turfs/open/space/space.dm
deleted file mode 100644
index d38ed5faf2..0000000000
--- a/code/game/turfs/open/space/space.dm
+++ /dev/null
@@ -1,203 +0,0 @@
-/turf/open/space
- icon = 'icons/turf/space.dmi'
- icon_state = "0"
- name = "\proper phlogiston"
- intact = 0
-
- temperature = TCMB
- thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT
- heat_capacity = 700000
-
- var/destination_z
- var/destination_x
- var/destination_y
-
- var/static/datum/gas_mixture/immutable/space/space_gas = new
- plane = PLANE_SPACE
- layer = SPACE_LAYER
- light_power = 0.25
- dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
- bullet_bounce_sound = null
-
-/turf/open/space/basic/New() //Do not convert to Initialize
- //This is used to optimize the map loader
- return
-
-/turf/open/space/Initialize()
- ..()
- icon_state = SPACE_ICON_STATE
-// air = space_gas
- vis_contents.Cut() //removes inherited overlays
-
-// if(flags_1 & INITIALIZED_1)
-// stack_trace("Warning: [src]([type]) initialized multiple times!")
-// flags_1 |= INITIALIZED_1
-
- var/area/A = loc
- if(!IS_DYNAMIC_LIGHTING(src) && IS_DYNAMIC_LIGHTING(A))
- add_overlay(/obj/effect/fullbright)
-
-// if(requires_activation)
-// SSair.add_to_active(src)
-
- if (light_system == STATIC_LIGHT && light_power && (light_outer_range || light_inner_range))
- update_light()
-
- if (opacity)
- has_opaque_atom = TRUE
-
- ComponentInitialize()
-
- return INITIALIZE_HINT_NORMAL
-
-//ATTACK GHOST IGNORING PARENT RETURN VALUE
-/turf/open/space/attack_ghost(mob/dead/observer/user)
- if(destination_z)
- var/turf/T = locate(destination_x, destination_y, destination_z)
- user.forceMove(T)
-
-/turf/open/space/Initalize_Atmos(times_fired)
- return
-
-/turf/open/space/TakeTemperature(temp)
-
-/turf/open/space/RemoveLattice()
- return
-
-/turf/open/space/AfterChange()
- ..()
- atmos_overlay_types = null
-
-/turf/open/space/Assimilate_Air()
- return
-
-/turf/open/space/proc/update_starlight()
- if(CONFIG_GET(flag/starlight))
- for(var/t in RANGE_TURFS(1,src)) //RANGE_TURFS is in code\__HELPERS\game.dm
- if(isspaceturf(t))
- //let's NOT update this that much pls
- continue
- set_light(2)
- return
- set_light(0)
-
-/turf/open/space/attack_paw(mob/user)
- return attack_hand(user)
-
-/turf/open/space/proc/CanBuildHere()
- return TRUE
-
-/turf/open/space/handle_slip()
- return
-
-/turf/open/space/attackby(obj/item/C, mob/user, params)
- ..()
- if(!CanBuildHere())
- return
- if(istype(C, /obj/item/stack/rods))
- var/obj/item/stack/rods/R = C
- var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
- var/obj/structure/lattice/catwalk/W = locate(/obj/structure/lattice/catwalk, src)
- if(W)
- to_chat(user, "There is already a catwalk here!")
- return
- if(L)
- if(R.use(1))
- to_chat(user, "I construct a catwalk.")
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- new/obj/structure/lattice/catwalk(src)
- else
- to_chat(user, "I need two rods to build a catwalk!")
- return
- if(R.use(1))
- to_chat(user, "I construct a lattice.")
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- ReplaceWithLattice()
- else
- to_chat(user, "I need one rod to build a lattice.")
- return
- if(istype(C, /obj/item/stack/tile/plasteel))
- var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
- if(L)
- var/obj/item/stack/tile/plasteel/S = C
- if(S.use(1))
- qdel(L)
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- to_chat(user, "I build a floor.")
- PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
- else
- to_chat(user, "I need one floor tile to build a floor!")
- else
- to_chat(user, "The plating is going to need some support! Place metal rods first.")
-
-/turf/open/space/Entered(atom/movable/A)
- ..()
- if ((!(A) || src != A.loc))
- return
-
- if(destination_z && destination_x && destination_y && !(A.pulledby || !A.can_be_z_moved))
- var/tx = destination_x
- var/ty = destination_y
- var/turf/DT = locate(tx, ty, destination_z)
- var/itercount = 0
- while(DT.density || istype(DT.loc,/area/shuttle)) // Extend towards the center of the map, trying to look for a better place to arrive
- if (itercount++ >= 100)
- log_game("SPACE Z-TRANSIT ERROR: Could not find a safe place to land [A] within 100 iterations.")
- break
- if (tx < 128)
- tx++
- else
- tx--
- if (ty < 128)
- ty++
- else
- ty--
- DT = locate(tx, ty, destination_z)
-
- var/atom/movable/AM = A.pulling
- A.forceMove(DT)
- if(AM)
- var/turf/T = get_step(A.loc,turn(A.dir, 180))
- AM.can_be_z_moved = FALSE
- AM.forceMove(T)
- A.start_pulling(AM)
- AM.can_be_z_moved = TRUE
-
- //now we're on the new z_level, proceed the space drifting
- stoplag()//Let a diagonal move finish, if necessary
- A.newtonian_move(A.inertia_dir)
-
-
-/turf/open/space/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
- return
-
-/turf/open/space/singularity_act()
- return
-
-/turf/open/space/can_have_cabling()
- if(locate(/obj/structure/lattice/catwalk, src))
- return 1
- return 0
-
-/turf/open/space/is_transition_turf()
- if(destination_x || destination_y || destination_z)
- return 1
-
-
-/turf/open/space/acid_act(acidpwr, acid_volume)
- return 0
-
-/turf/open/space/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
- underlay_appearance.icon = 'icons/turf/space.dmi'
- underlay_appearance.icon_state = SPACE_ICON_STATE
- underlay_appearance.plane = PLANE_SPACE
- return TRUE
-
-/turf/open/space/ReplaceWithLattice()
- var/dest_x = destination_x
- var/dest_y = destination_y
- var/dest_z = destination_z
- ..()
- destination_x = dest_x
- destination_y = dest_y
- destination_z = dest_z
diff --git a/code/game/turfs/open/space/transit.dm b/code/game/turfs/open/space/transit.dm
deleted file mode 100644
index 7db5ab0845..0000000000
--- a/code/game/turfs/open/space/transit.dm
+++ /dev/null
@@ -1,118 +0,0 @@
-/turf/open/space/transit
- name = "\proper phlogiston"
- icon_state = "black"
- dir = SOUTH
- baseturfs = /turf/open/space/transit
- flags_1 = NOJAUNT_1 //This line goes out to every wizard that ever managed to escape the den. I'm sorry.
- explosion_block = INFINITY
-
-/turf/open/space/transit/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
- . = ..()
-// underlay_appearance.icon_state = "speedspace_ns_[get_transit_state(asking_turf)]"
-// underlay_appearance.transform = turn(matrix(), get_transit_angle(asking_turf))
-
-/turf/open/space/transit/south
- dir = SOUTH
-
-/turf/open/space/transit/north
- dir = NORTH
-
-/turf/open/space/transit/horizontal
- dir = WEST
-
-/turf/open/space/transit/west
- dir = WEST
-
-/turf/open/space/transit/east
- dir = EAST
-
-/turf/open/space/transit/Entered(atom/movable/AM, atom/OldLoc)
- ..()
- if(isliving(AM))
- var/mob/living/L = AM
- L.gib()
-// if(!locate(/obj/structure/lattice) in src)
-// throw_atom(AM)
-
-/turf/open/space/transit/proc/throw_atom(atom/movable/AM)
- set waitfor = FALSE
- if(!AM || istype(AM, /obj/docking_port))
- return
- if(AM.loc != src) // Multi-tile objects are "in" multiple locs but its loc is it's true placement.
- return // Don't move multi tile objects if their origin isnt in transit
- var/max = world.maxx-TRANSITIONEDGE
- var/min = 1+TRANSITIONEDGE
-
- var/list/possible_transtitons = list()
- for(var/A in SSmapping.z_list)
- var/datum/space_level/D = A
- if (D.linkage == CROSSLINKED)
- possible_transtitons += D.z_value
- var/_z
- if(possible_transtitons.len)
- _z = pick(possible_transtitons)
-
- //now select coordinates for a border turf
- var/_x
- var/_y
- switch(dir)
- if(SOUTH)
- _x = rand(min,max)
- _y = max
- if(WEST)
- _x = max
- _y = rand(min,max)
- if(EAST)
- _x = min
- _y = rand(min,max)
- else
- _x = rand(min,max)
- _y = min
-
- var/turf/T = locate(_x, _y, _z)
- AM.forceMove(T)
-
-
-/turf/open/space/transit/CanBuildHere()
- return SSshuttle.is_in_shuttle_bounds(src)
-
-
-/turf/open/space/transit/Initialize()
- . = ..()
-// update_icon()
-// for(var/atom/movable/AM in src)
-// throw_atom(AM)
-
-/turf/open/space/transit/update_icon()
- . = ..()
-// transform = turn(matrix(), get_transit_angle(src))
-
-//turf/open/space/transit/update_icon_state()
-// icon_state = "speedspace_ns_[get_transit_state(src)]"
-
-/proc/get_transit_state(turf/T)
- var/p = 9
- . = 1
- switch(T.dir)
- if(NORTH)
- . = ((-p*T.x+T.y) % 15) + 1
- if(. < 1)
- . += 15
- if(EAST)
- . = ((T.x+p*T.y) % 15) + 1
- if(WEST)
- . = ((T.x-p*T.y) % 15) + 1
- if(. < 1)
- . += 15
- else
- . = ((p*T.x+T.y) % 15) + 1
-
-/proc/get_transit_angle(turf/T)
- . = 0
- switch(T.dir)
- if(NORTH)
- . = 180
- if(EAST)
- . = 90
- if(WEST)
- . = -90
diff --git a/code/game/turfs/open/transparent.dm b/code/game/turfs/open/transparent.dm
index d0a219ac2b..0524ce890f 100644
--- a/code/game/turfs/open/transparent.dm
+++ b/code/game/turfs/open/transparent.dm
@@ -50,25 +50,3 @@
var/mutable_appearance/underlay_appearance = mutable_appearance(initial(path.icon), initial(path.icon_state), layer = TURF_LAYER, plane = PLANE_SPACE)
underlays += underlay_appearance
return TRUE
-
-
-/turf/open/transparent/glass
- name = "Glass floor"
- desc = ""
- icon = 'icons/turf/floors/glass.dmi'
- icon_state = "floor_glass"
- smooth = SMOOTH_MORE
- canSmoothWith = list(/turf/open/transparent/glass, /turf/open/transparent/glass/reinforced)
- footstep = FOOTSTEP_PLATING
- barefootstep = FOOTSTEP_HARD_BAREFOOT
- clawfootstep = FOOTSTEP_HARD_CLAW
- heavyfootstep = FOOTSTEP_GENERIC_HEAVY
-
-/turf/open/transparent/glass/Initialize()
- icon_state = "" //Prevent the normal icon from appearing behind the smooth overlays
- return ..()
-
-/turf/open/transparent/glass/reinforced
- name = "Reinforced glass floor"
- desc = ""
- icon = 'icons/turf/floors/reinf_glass.dmi'
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 13bfec62b0..4957a61a06 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -462,12 +462,6 @@
if(O.level == 1 && (O.flags_1 & INITIALIZED_1))
O.hide(src.intact)
-// override for space turfs, since they should never hide anything
-/turf/open/space/levelupdate()
- for(var/obj/O in src)
- if(O.level == 1 && (O.flags_1 & INITIALIZED_1))
- O.hide(0)
-
// Removes all signs of lattice on the pos of the turf -Donkieyo
/turf/proc/RemoveLattice()
var/obj/structure/lattice/L = locate(/obj/structure/lattice, src)
@@ -529,12 +523,6 @@
ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
return(2)
-/turf/proc/can_have_cabling()
- return TRUE
-
-/turf/proc/can_lay_cable()
- return can_have_cabling() & !intact
-
/turf/proc/burn_tile()
/turf/proc/is_shielded()
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 582c6d784d..9af01c311e 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -128,7 +128,6 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/run_particle_weather,
/client/proc/mass_zombie_infection,
/client/proc/mass_zombie_cure,
- /client/proc/polymorph_all,
/client/proc/show_tip,
/client/proc/smite,
))
@@ -172,7 +171,6 @@ GLOBAL_PROTECT(admin_verbs_debug)
/client/proc/SDQL2_query,
/client/proc/test_movable_UI,
/client/proc/test_snap_UI,
- /client/proc/debugNatureMapGenerator,
/client/proc/check_bomb_impacts,
/client/proc/get_dynex_power, //*debug verbs for dynex explosions.
/client/proc/get_dynex_range, //*debug verbs for dynex explosions.
diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm
index f7593c7d60..16bfdeb675 100644
--- a/code/modules/admin/fun_balloon.dm
+++ b/code/modules/admin/fun_balloon.dm
@@ -92,65 +92,3 @@
SM.forceMove(get_ranged_target_turf(SM, new_dir, rand(3,15)))
break
return INITIALIZE_HINT_QDEL
-
-
-//Arena
-
-/obj/effect/forcefield/arena_shuttle
- name = "portal"
- timeleft = 0
- var/list/warp_points
-
-/obj/effect/forcefield/arena_shuttle/Initialize()
- . = ..()
- for(var/obj/effect/landmark/shuttle_arena_safe/exit in GLOB.landmarks_list)
- warp_points += exit
-
-/obj/effect/forcefield/arena_shuttle/Bumped(atom/movable/AM)
- if(!isliving(AM))
- return
-
- var/mob/living/L = AM
- if(L.pulling && istype(L.pulling, /obj/item/bodypart/head))
- to_chat(L, "My offering is accepted. You may pass.")
- qdel(L.pulling)
- var/turf/LA = get_turf(pick(warp_points))
- L.forceMove(LA)
- L.hallucination = 0
- to_chat(L, "The battle is won. Your bloodlust subsides.")
- for(var/obj/item/twohanded/required/chainsaw/doomslayer/chainsaw in L)
- qdel(chainsaw)
- else
- to_chat(L, "I are not yet worthy of passing. Drag a severed head to the barrier to be allowed entry to the hall of champions.")
-
-/obj/effect/landmark/shuttle_arena_safe
- name = "hall of champions"
- desc = ""
-
-/obj/effect/landmark/shuttle_arena_entrance
- name = "the arena"
- desc = ""
-
-
-/obj/effect/forcefield/arena_shuttle_entrance
- name = "portal"
- timeleft = 0
- var/list/warp_points = list()
-
-/obj/effect/forcefield/arena_shuttle_entrance/Bumped(atom/movable/AM)
- if(!isliving(AM))
- return
-
- if(!warp_points.len)
- for(var/obj/effect/landmark/shuttle_arena_entrance/S in GLOB.landmarks_list)
- warp_points |= S
-
- var/obj/effect/landmark/LA = pick(warp_points)
- var/mob/living/M = AM
- M.forceMove(get_turf(LA))
- to_chat(M, "You're trapped in a deadly arena! To escape, you'll need to drag a severed head to the escape portals.")
- INVOKE_ASYNC(src, PROC_REF(do_bloodbath), M)
-
-/obj/effect/forcefield/arena_shuttle_entrance/proc/do_bloodbath(mob/living/L)
- var/obj/effect/mine/pickup/bloodbath/B = new (L)
- B.mineEffect(L)
diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm
index 90b5543a4b..2e8dde1fce 100644
--- a/code/modules/admin/secrets.dm
+++ b/code/modules/admin/secrets.dm
@@ -315,14 +315,6 @@
if("anime")
if(!check_rights(R_FUN))
return
- var/animetype = alert("Would you like to have the clothes be changed?",,"Yes","No","Cancel")
-
- var/droptype
- if(animetype =="Yes")
- droptype = alert("Make the uniforms Nodrop?",,"Yes","No","Cancel")
-
- if(animetype == "Cancel" || droptype == "Cancel")
- return
SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Chinese Cartoons"))
message_admins("[key_name_admin(usr)] made everything kawaii.")
for(var/i in GLOB.human_list)
@@ -341,15 +333,6 @@
var/newname = "[forename]-[pick(honorifics["[H.gender]"])]"
H.fully_replace_character_name(H.real_name,newname)
H.update_mutant_bodyparts()
- if(animetype == "Yes")
- var/seifuku = pick(typesof(/obj/item/clothing/under/costume/schoolgirl))
- var/obj/item/clothing/under/costume/schoolgirl/I = new seifuku
- var/olduniform = H.wear_pants
- H.temporarilyRemoveItemFromInventory(H.wear_pants, TRUE, FALSE)
- H.equip_to_slot_or_del(I, SLOT_PANTS)
- qdel(olduniform)
- if(droptype == "Yes")
- ADD_TRAIT(I, TRAIT_NODROP, ADMIN_TRAIT)
else
to_chat(H, "You're not kawaii enough for this!")
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index f27fd1f865..5037e37470 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -283,22 +283,10 @@
M.change_mob_type( /mob/living/simple_animal/pet/dog/corgi/Ian , null, null, delmob )
if("pug")
M.change_mob_type( /mob/living/simple_animal/pet/dog/pug , null, null, delmob )
- if("crab")
- M.change_mob_type( /mob/living/simple_animal/crab , null, null, delmob )
- if("coffee")
- M.change_mob_type( /mob/living/simple_animal/crab/Coffee , null, null, delmob )
if("parrot")
M.change_mob_type( /mob/living/simple_animal/parrot , null, null, delmob )
if("polyparrot")
M.change_mob_type( /mob/living/simple_animal/parrot/Poly , null, null, delmob )
- if("constructarmored")
- M.change_mob_type( /mob/living/simple_animal/hostile/construct/armored , null, null, delmob )
- if("constructbuilder")
- M.change_mob_type( /mob/living/simple_animal/hostile/construct/builder , null, null, delmob )
- if("constructwraith")
- M.change_mob_type( /mob/living/simple_animal/hostile/construct/wraith , null, null, delmob )
- if("shade")
- M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob )
else if(href_list["boot2"])
if(!check_rights(R_ADMIN))
@@ -986,10 +974,6 @@
for(var/obj/item/I in L)
L.dropItemToGround(I, TRUE)
- if(ishuman(L))
- var/mob/living/carbon/human/observer = L
- observer.equip_to_slot_or_del(new /obj/item/clothing/under/suit/black(observer), SLOT_PANTS)
- observer.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(observer), SLOT_SHOES)
L.Unconscious(100)
sleep(5)
L.forceMove(pick(GLOB.tdomeobserve))
@@ -1206,8 +1190,6 @@
var/cookiealt = /obj/item/reagent_containers/food/snacks/cookie
if(isskeleton(H))
cookiealt = /obj/item/reagent_containers/food/condiment/milk
- else if(isplasmaman(H))
- cookiealt = /obj/item/reagent_containers/food/condiment/milk
else if(isethereal(H))
cookiealt = /obj/item/reagent_containers/food/snacks/energybar
else if(islizard(H))
@@ -1259,12 +1241,6 @@
var/mob/M = locate(href_list["HeadsetMessage"])
usr.client.admin_headset_message(M)
- else if(href_list["reject_custom_name"])
- if(!check_rights(R_ADMIN))
- return
- var/obj/item/station_charter/charter = locate(href_list["reject_custom_name"])
- if(istype(charter))
- charter.reject_proposed(usr)
else if(href_list["jumpto"])
if(!isobserver(usr) && !check_rights(R_ADMIN))
return
diff --git a/code/modules/admin/verbs/bluespacearty.dm b/code/modules/admin/verbs/bluespacearty.dm
index 5b4b7db663..56de449bc4 100644
--- a/code/modules/admin/verbs/bluespacearty.dm
+++ b/code/modules/admin/verbs/bluespacearty.dm
@@ -12,10 +12,7 @@
var/turf/open/floor/T = get_turf(target)
if(istype(T))
- if(prob(80))
- T.break_tile_to_plating()
- else
- T.break_tile()
+ T.break_tile()
if(target.health <= 1)
target.gib(1, 1)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index c5c477d4d7..b31719d55b 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -247,9 +247,9 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
/client/proc/robust_dress_shop()
- var/list/baseoutfits = list("Naked","Custom","As Job...", "As Plasmaman...", "As Roguetown Job...")
+ var/list/baseoutfits = list("Naked","Custom", "As Roguetown Job...")
var/list/outfits = list()
- var/list/paths = subtypesof(/datum/outfit) - typesof(/datum/outfit/job) - typesof(/datum/outfit/plasmaman) - typesof(/datum/outfit/job/roguetown)
+ var/list/paths = subtypesof(/datum/outfit) - typesof(/datum/outfit/job) - typesof(/datum/outfit/job/roguetown)
for(var/path in paths)
var/datum/outfit/O = path //not much to initalize here but whatever
@@ -263,32 +263,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
if (outfits[dresscode])
dresscode = outfits[dresscode]
- if (dresscode == "As Job...")
- var/list/job_paths = subtypesof(/datum/outfit/job)
- var/list/job_outfits = list()
- for(var/path in job_paths)
- var/datum/outfit/O = path
- if(initial(O.can_be_admin_equipped))
- job_outfits[initial(O.name)] = path
-
- dresscode = input("Select job equipment", "Robust quick dress shop") as null|anything in sortList(job_outfits)
- dresscode = job_outfits[dresscode]
- if(isnull(dresscode))
- return
-
- if (dresscode == "As Plasmaman...")
- var/list/plasmaman_paths = subtypesof(/datum/outfit/plasmaman)
- var/list/plasmaman_outfits = list()
- for(var/path in plasmaman_paths)
- var/datum/outfit/O = path
- if(initial(O.can_be_admin_equipped))
- plasmaman_outfits[initial(O.name)] = path
-
- dresscode = input("Select plasmeme equipment", "Robust quick dress shop") as null|anything in sortList(plasmaman_outfits)
- dresscode = plasmaman_outfits[dresscode]
- if(isnull(dresscode))
- return
-
if (dresscode == "Custom")
var/list/custom_names = list()
for(var/datum/outfit/D in GLOB.custom_outfits)
diff --git a/code/modules/admin/verbs/manipulate_organs.dm b/code/modules/admin/verbs/manipulate_organs.dm
index a3b7e4247c..baf7074ce0 100644
--- a/code/modules/admin/verbs/manipulate_organs.dm
+++ b/code/modules/admin/verbs/manipulate_organs.dm
@@ -1,7 +1,7 @@
/client/proc/manipulate_organs(mob/living/carbon/C in world)
set name = "Manipulate Organs"
set category = "Debug"
- var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") as null|anything in list("add organ", "add implant", "drop organ/implant", "remove organ/implant", "cancel")
+ var/operation = input("Select organ operation.", "Organ Manipulation", "cancel") as null|anything in list("add organ", "drop organ", "remove organ", "cancel")
if (!operation)
return
@@ -21,29 +21,11 @@
log_admin("[key_name(usr)] has added organ [organ.type] to [key_name(C)]")
message_admins("[key_name_admin(usr)] has added organ [organ.type] to [ADMIN_LOOKUPFLW(C)]")
- if("add implant")
- for(var/path in subtypesof(/obj/item/implant))
- var/dat = replacetext("[path]", "/obj/item/implant/", ":")
- organs[dat] = path
-
- var/obj/item/implant/organ = input("Select implant type:", "Organ Manipulation", null) as null|anything in organs
- if(!organ)
- return
- organ = organs[organ]
- organ = new organ
- organ.implant(C)
- log_admin("[key_name(usr)] has added implant [organ.type] to [key_name(C)]")
- message_admins("[key_name_admin(usr)] has added implant [organ.type] to [ADMIN_LOOKUPFLW(C)]")
-
- if("drop organ/implant", "remove organ/implant")
+ if("drop organ", "remove organ")
for(var/X in C.internal_organs)
var/obj/item/organ/I = X
organs["[I.name] ([I.type])"] = I
- for(var/X in C.implants)
- var/obj/item/implant/I = X
- organs["[I.name] ([I.type])"] = I
-
var/obj/item/organ = input("Select organ/implant:", "Organ Manipulation", null) as null|anything in organs
if(!organ)
return
@@ -51,7 +33,6 @@
if(!organ)
return
var/obj/item/organ/O
- var/obj/item/implant/I
log_admin("[key_name(usr)] has removed [organ.type] from [key_name(C)]")
message_admins("[key_name_admin(usr)] has removed [organ.type] from [ADMIN_LOOKUPFLW(C)]")
@@ -59,16 +40,8 @@
if(isorgan(organ))
O = organ
O.Remove(C)
- else
- I = organ
- I.removed(C)
organ.forceMove(get_turf(C))
if(operation == "remove organ/implant")
qdel(organ)
- else if(I) // Put the implant in case.
- var/obj/item/implantcase/case = new(get_turf(C))
- case.imp = I
- I.forceMove(case)
- case.update_icon()
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 4c453c7d0b..102795d34b 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -797,41 +797,6 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("[key_name_admin(usr)] cured all zombies.")
log_admin("[key_name(usr)] cured all zombies.")
- SSblackbox.record_feedback("tally", "admin_verb", 1, "Mass Zombie Cure")
-
-/client/proc/polymorph_all()
- set category = "Fun"
- set name = "Polymorph All"
- set desc = ""
- set hidden = 1
-
- if(!check_rights(R_ADMIN))
- return
-
- var/confirm = alert(src, "Please confirm you want polymorph all mobs?", "Confirm Polymorph", "Yes", "No")
- if(confirm != "Yes")
- return
-
- var/list/mobs = shuffle(GLOB.alive_mob_list.Copy()) // might change while iterating
- var/who_did_it = key_name_admin(usr)
-
- message_admins("[key_name_admin(usr)] started polymorphed all living mobs.")
- log_admin("[key_name(usr)] polymorphed all living mobs.")
- SSblackbox.record_feedback("tally", "admin_verb", 1, "Polymorph All")
-
- for(var/mob/living/M in mobs)
- CHECK_TICK
-
- if(!M)
- continue
-
- M.audible_message("...wabbajack...wabbajack...")
- playsound(M.loc, 'sound/blank.ogg', 50, TRUE, -1)
-
- wabbajack(M)
-
- message_admins("Mass polymorph started by [who_did_it] is complete.")
-
/client/proc/show_tip()
set category = "Admin"
diff --git a/code/modules/antagonists/roguetown/villain/zizocult.dm b/code/modules/antagonists/roguetown/villain/zizocult.dm
index 834a334caf..5feeda06c9 100644
--- a/code/modules/antagonists/roguetown/villain/zizocult.dm
+++ b/code/modules/antagonists/roguetown/villain/zizocult.dm
@@ -722,6 +722,12 @@ GLOBAL_LIST_EMPTY(ritualslist)
function = /proc/criminalstool
+/obj/item/soap/cult
+ name = "accursed soap"
+ desc = "It is pulsating."
+ uses = 9
+ cleanspeed = 1
+
/proc/criminalstool(mob/user, turf/C)
new /obj/item/soap/cult(C)
to_chat(user.mind, "The Criminal's Tool. Could be useful for hiding tracks or getting rid of sigils.")
diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm
index 8481464673..e230ab353c 100644
--- a/code/modules/antagonists/traitor/datum_traitor.dm
+++ b/code/modules/antagonists/traitor/datum_traitor.dm
@@ -61,14 +61,6 @@
is_hijacker = prob(10)
var/martyr_chance = prob(20)
var/objective_count = is_hijacker //Hijacking counts towards number of objectives
- if(!SSticker.mode.exchange_blue && SSticker.mode.traitors.len >= 8) //Set up an exchange if there are enough traitors
- if(!SSticker.mode.exchange_red)
- SSticker.mode.exchange_red = owner
- else
- SSticker.mode.exchange_blue = owner
- assign_exchange_role(SSticker.mode.exchange_red)
- assign_exchange_role(SSticker.mode.exchange_blue)
- objective_count += 1 //Exchange counts towards number of objectives
var/toa = CONFIG_GET(number/traitor_objectives_amount)
for(var/i = objective_count, i < toa, i++)
forge_single_objective()
@@ -196,45 +188,6 @@
if(traitor_kind == TRAITOR_HUMAN)
owner.equip_traitor(employer, silent, src)
-/datum/antagonist/traitor/proc/assign_exchange_role()
- //set faction
- var/faction = "red"
- if(owner == SSticker.mode.exchange_blue)
- faction = "blue"
-
- //Assign objectives
- var/datum/objective/steal/exchange/exchange_objective = new
- exchange_objective.set_faction(faction,((faction == "red") ? SSticker.mode.exchange_blue : SSticker.mode.exchange_red))
- exchange_objective.owner = owner
- add_objective(exchange_objective)
-
- if(prob(20))
- var/datum/objective/steal/exchange/backstab/backstab_objective = new
- backstab_objective.set_faction(faction)
- backstab_objective.owner = owner
- add_objective(backstab_objective)
-
- //Spawn and equip documents
- var/mob/living/carbon/human/mob = owner.current
-
- var/obj/item/folder/syndicate/folder
- if(owner == SSticker.mode.exchange_red)
- folder = new/obj/item/folder/syndicate/red(mob.loc)
- else
- folder = new/obj/item/folder/syndicate/blue(mob.loc)
-
- var/list/slots = list (
- "backpack" = SLOT_IN_BACKPACK,
- "left pocket" = SLOT_L_STORE,
- "right pocket" = SLOT_R_STORE
- )
-
- var/where = "At your feet"
- var/equipped_slot = mob.equip_in_one_of_slots(folder, slots)
- if (equipped_slot)
- where = "In your [equipped_slot]"
- to_chat(mob, "
[where] is a folder containing secret documents that another Syndicate group wants. We have set up a meeting with one of their agents on station to make an exchange. Exercise extreme caution as they cannot be trusted and may be hostile.
")
-
//TODO Collate
/datum/antagonist/traitor/roundend_report()
var/list/result = list()
diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm
deleted file mode 100644
index dab49ddca6..0000000000
--- a/code/modules/antagonists/wizard/equipment/artefact.dm
+++ /dev/null
@@ -1,280 +0,0 @@
-
-//Apprenticeship contract - moved to antag_spawner.dm
-/////////////////////////////////////////Necromantic Stone///////////////////
-
-/obj/item/necromantic_stone
- name = "necromantic stone"
- desc = ""
- icon = 'icons/obj/wizard.dmi'
- icon_state = "necrostone"
- item_state = "electronic"
- lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
- w_class = WEIGHT_CLASS_TINY
- var/list/spooky_scaries = list()
- var/unlimited = 0
-
-/obj/item/necromantic_stone/unlimited
- unlimited = 1
-
-/obj/item/necromantic_stone/attack(mob/living/carbon/human/M, mob/living/carbon/human/user)
- if(!istype(M))
- return ..()
-
- if(!istype(user) || !user.canUseTopic(M, BE_CLOSE))
- return
-
- if(M.stat != DEAD)
- to_chat(user, "This artifact can only affect the dead!")
- return
-
- for(var/mob/dead/observer/ghost in GLOB.dead_mob_list) //excludes new players
- if(ghost.mind && ghost.mind.current == M && ghost.client) //the dead mobs list can contain clientless mobs
- ghost.reenter_corpse()
- break
-
- if(!M.mind || !M.client)
- to_chat(user, "There is no soul connected to this body...")
- return
-
- check_spooky()//clean out/refresh the list
- if(spooky_scaries.len >= 3 && !unlimited)
- to_chat(user, "This artifact can only affect three undead at a time!")
- return
-
- M.set_species(/datum/species/skeleton, icon_update=0)
- M.revive(full_heal = TRUE, admin_revive = TRUE)
- spooky_scaries |= M
- to_chat(M, "I have been revived by [user.real_name]!")
- to_chat(M, "[user.p_theyre(TRUE)] my master now, assist [user.p_them()] even if it costs you my new life!")
-
- equip_roman_skeleton(M)
-
- desc = ""
-
-/obj/item/necromantic_stone/proc/check_spooky()
- if(unlimited) //no point, the list isn't used.
- return
-
- for(var/X in spooky_scaries)
- if(!ishuman(X))
- spooky_scaries.Remove(X)
- continue
- var/mob/living/carbon/human/H = X
- if(H.stat == DEAD)
- H.dust(TRUE)
- spooky_scaries.Remove(X)
- continue
- listclearnulls(spooky_scaries)
-
-//Funny gimmick, skeletons always seem to wear roman/ancient armour
-/obj/item/necromantic_stone/proc/equip_roman_skeleton(mob/living/carbon/human/H)
- for(var/obj/item/I in H)
- H.dropItemToGround(I)
-
- var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionnaire)
- H.equip_to_slot_or_del(new hat(H), SLOT_HEAD)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/roman(H), SLOT_PANTS)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), SLOT_SHOES)
- H.put_in_hands(new /obj/item/claymore(H), TRUE)
- H.equip_to_slot_or_del(new /obj/item/twohanded/spear(H), SLOT_BACK)
-
-
-/obj/item/voodoo
- name = "wicker doll"
- desc = ""
- icon = 'icons/obj/wizard.dmi'
- icon_state = "voodoo"
- item_state = "electronic"
- lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
- var/mob/living/carbon/human/target = null
- var/list/mob/living/carbon/human/possible = list()
- var/obj/item/voodoo_link = null
- var/cooldown_time = 30 //3s
- var/cooldown = 0
- max_integrity = 10
- resistance_flags = FLAMMABLE
-
-/obj/item/voodoo/attackby(obj/item/I, mob/user, params)
- if(target && cooldown < world.time)
- if(I.get_temperature())
- to_chat(target, "I suddenly feel very hot!")
- target.adjust_bodytemperature(50)
- GiveHint(target)
- else if(is_pointed(I))
- to_chat(target, "I feel a stabbing pain in [parse_zone(user.zone_selected)]!")
- target.Paralyze(40)
- GiveHint(target)
- else if(istype(I, /obj/item/bikehorn))
- to_chat(target, "HONK")
- SEND_SOUND(target, 'sound/blank.ogg')
- target.adjustEarDamage(0,3)
- GiveHint(target)
- cooldown = world.time +cooldown_time
- return
-
- if(!voodoo_link)
- if(I.loc == user && istype(I) && I.w_class <= WEIGHT_CLASS_SMALL)
- if (user.transferItemToLoc(I,src))
- voodoo_link = I
- to_chat(user, "You attach [I] to the doll.")
- update_targets()
-
-/obj/item/voodoo/check_eye(mob/user)
- if(loc != user)
- user.reset_perspective(null)
- user.unset_machine()
-
-/obj/item/voodoo/attack_self(mob/user)
- if(!target && possible.len)
- target = input(user, "Select my victim!", "Voodoo") as null|anything in sortNames(possible)
- return
-
- if(user.zone_selected == BODY_ZONE_CHEST)
- if(voodoo_link)
- target = null
- voodoo_link.forceMove(drop_location())
- to_chat(user, "I remove the [voodoo_link] from the doll.")
- voodoo_link = null
- update_targets()
- return
-
- if(target && cooldown < world.time)
- switch(user.zone_selected)
- if(BODY_ZONE_PRECISE_MOUTH)
- var/wgw = sanitize(input(user, "What would you like the victim to say", "Voodoo", null) as text)
- target.say(wgw, forced = "voodoo doll")
- log_game("[key_name(user)] made [key_name(target)] say [wgw] with a voodoo doll.")
- if(BODY_ZONE_PRECISE_R_EYE)
- user.set_machine(src)
- user.reset_perspective(target)
- spawn(100)
- user.reset_perspective(null)
- user.unset_machine()
- if(BODY_ZONE_R_LEG,BODY_ZONE_L_LEG)
- to_chat(user, "I move the doll's legs around.")
- var/turf/T = get_step(target,pick(GLOB.cardinals))
- target.Move(T)
- if(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM)
- target.click_random_mob()
- GiveHint(target)
- if(BODY_ZONE_HEAD)
- to_chat(user, "I smack the doll's head with my hand.")
- target.Dizzy(10)
- to_chat(target, "I suddenly feel as if my head was hit with a hammer!")
- GiveHint(target,user)
- cooldown = world.time + cooldown_time
-
-/obj/item/voodoo/proc/update_targets()
- possible = list()
- if(!voodoo_link)
- return
- var/list/prints = voodoo_link.return_fingerprints()
- if(!length(prints))
- return FALSE
- for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
- if(prints[md5(H.dna.uni_identity)])
- possible |= H
-
-/obj/item/voodoo/proc/GiveHint(mob/victim,force=0)
- if(prob(50) || force)
- var/way = dir2text(get_dir(victim,get_turf(src)))
- to_chat(victim, "I feel a dark presence from [way].")
- if(prob(20) || force)
- var/area/A = get_area(src)
- to_chat(victim, "I feel a dark presence from [A.name].")
-
-/obj/item/voodoo/suicide_act(mob/living/carbon/user)
- user.visible_message("[user] links the voodoo doll to [user.p_them()]self and sits on it, infinitely crushing [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!")
- user.gib()
- return(BRUTELOSS)
-
-/obj/item/voodoo/fire_act(added, maxstacks)
- if(target)
- target.adjust_fire_stacks(20)
- target.IgniteMob()
- GiveHint(target,1)
- return ..()
-
-//Provides a decent heal, need to pump every 6 seconds
-/obj/item/organ/heart/cursed/wizard
- pump_delay = 60
- heal_brute = 25
- heal_burn = 25
- heal_oxy = 25
-
-//Warp Whistle: Provides uncontrolled long distance teleportation.
-
-/obj/item/warpwhistle
- name = "warp whistle"
- desc = ""
- icon = 'icons/obj/wizard.dmi'
- icon_state = "whistle"
- var/on_cooldown = 0 //0: usable, 1: in use, 2: on cooldown
- var/mob/living/carbon/last_user
-
-/obj/item/warpwhistle/proc/interrupted(mob/living/carbon/user)
- if(!user || QDELETED(src) || user.notransform)
- on_cooldown = FALSE
- return TRUE
- return FALSE
-
-/obj/item/warpwhistle/proc/end_effect(mob/living/carbon/user)
- user.invisibility = initial(user.invisibility)
- user.status_flags &= ~GODMODE
- user.update_mobility()
-
-/obj/item/warpwhistle/attack_self(mob/living/carbon/user)
- if(!istype(user) || on_cooldown)
- return
- on_cooldown = TRUE
- last_user = user
- var/turf/T = get_turf(user)
- playsound(T,'sound/blank.ogg', 200, TRUE)
- user.mobility_flags &= ~MOBILITY_MOVE
- new /obj/effect/temp_visual/tornado(T)
- sleep(20)
- if(interrupted(user))
- return
- user.invisibility = INVISIBILITY_MAXIMUM
- user.status_flags |= GODMODE
- sleep(20)
- if(interrupted(user))
- end_effect(user)
- return
- var/breakout = 0
- while(breakout < 50)
- var/turf/potential_T = find_safe_turf()
- if(T.z != potential_T.z || abs(get_dist_euclidian(potential_T,T)) > 50 - breakout)
- do_teleport(user, potential_T, channel = TELEPORT_CHANNEL_MAGIC)
- user.mobility_flags &= ~MOBILITY_MOVE
- T = potential_T
- break
- breakout += 1
- new /obj/effect/temp_visual/tornado(T)
- sleep(20)
- end_effect(user)
- if(interrupted(user))
- return
- on_cooldown = 2
- addtimer(VARSET_CALLBACK(src, on_cooldown, 0), 4 SECONDS)
-
-/obj/item/warpwhistle/Destroy()
- if(on_cooldown == 1 && last_user) //Flute got dunked somewhere in the teleport
- end_effect(last_user)
- return ..()
-
-/obj/effect/temp_visual/tornado
- icon = 'icons/obj/wizard.dmi'
- icon_state = "tornado"
- name = "tornado"
- desc = ""
- layer = FLY_LAYER
- randomdir = 0
- duration = 40
- pixel_x = 500
-
-/obj/effect/temp_visual/tornado/Initialize()
- . = ..()
- animate(src, pixel_x = -500, time = 40)
diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm
deleted file mode 100644
index ac48d9bb17..0000000000
--- a/code/modules/antagonists/wizard/equipment/soulstone.dm
+++ /dev/null
@@ -1,288 +0,0 @@
-/obj/item/soulstone
- name = "soulstone shard"
- icon = 'icons/obj/wizard.dmi'
- icon_state = "soulstone"
- item_state = "electronic"
- lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
- layer = HIGH_OBJ_LAYER
- desc = ""
- w_class = WEIGHT_CLASS_TINY
- slot_flags = ITEM_SLOT_BELT
- var/usability = FALSE
-
- var/old_shard = FALSE
- var/spent = FALSE
- var/purified = FALSE
-
-/obj/item/soulstone/proc/was_used()
- if(old_shard)
- spent = TRUE
- name = "dull [name]"
- desc = "A fragment of the legendary treasure known simply as \
- the 'Soul Stone'. The shard lies still, dull and lifeless; \
- whatever spark it once held long extinguished."
-
-/obj/item/soulstone/anybody
- usability = TRUE
-
-/obj/item/soulstone/anybody/revolver
- old_shard = TRUE
-
-/obj/item/soulstone/anybody/purified
- icon = 'icons/obj/wizard.dmi'
- icon_state = "purified_soulstone"
- purified = TRUE
-
-/obj/item/soulstone/anybody/chaplain
- name = "mysterious old shard"
- old_shard = TRUE
-
-/obj/item/soulstone/pickup(mob/living/user)
- ..()
- if(!usability)
- to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the soulstone. It would be wise to be rid of this quickly.")
-
-/obj/item/soulstone/examine(mob/user)
- . = ..()
- if(usability || isobserver(user))
- if (old_shard)
- . += "A soulstone, used to capture a soul, either from dead humans or from freed shades."
- else
- . += "A soulstone, used to capture souls, either from unconscious or sleeping humans or from freed shades."
- . += "The captured soul can be placed into a construct shell to produce a construct, or released from the stone as a shade."
- if(spent)
- . += "This shard is spent; it is now just a creepy rock."
-
-/obj/item/soulstone/Destroy() //Stops the shade from being qdel'd immediately and their ghost being sent back to the arrival shuttle.
- for(var/mob/living/simple_animal/shade/A in src)
- A.death()
- return ..()
-
-/obj/item/soulstone/proc/hot_potato(mob/living/user)
- to_chat(user, "Holy magics residing in \the [src] burn my hand!")
- var/obj/item/bodypart/affecting = user.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm")
- affecting.receive_damage( 0, 10 ) // 10 burn damage
- user.emote("scream")
- user.update_damage_overlays()
- user.dropItemToGround(src)
-
-//////////////////////////////Capturing////////////////////////////////////////////////////////
-
-/obj/item/soulstone/attack(mob/living/carbon/human/M, mob/living/user)
- if(!usability)
- user.Unconscious(100)
- to_chat(user, "My body is wracked with debilitating pain!")
- return
- if(spent)
- to_chat(user, "There is no power left in the shard.")
- return
- if(!ishuman(M))//If target is not a human.
- return ..()
- if(!M.mind.hasSoul)
- to_chat(user, "This... thing has no soul! It's filled with evil!")
- return
- log_combat(user, M, "captured [M.name]'s soul", src)
- transfer_soul("VICTIM", M, user)
-
-///////////////////Options for using captured souls///////////////////////////////////////
-
-/obj/item/soulstone/attack_self(mob/living/user)
- if(!in_range(src, user))
- return
- if(!usability)
- user.Unconscious(100)
- to_chat(user, "My body is wracked with debilitating pain!")
- return
- release_shades(user)
-
-/obj/item/soulstone/proc/release_shades(mob/user)
- for(var/mob/living/simple_animal/shade/A in src)
- A.forceMove(get_turf(user))
- A.cancel_camera()
- if(purified)
- icon_state = "purified_soulstone"
- A.icon_state = "ghost1"
- A.name = "Purified [initial(A.name)]"
- else
- icon_state = "soulstone"
- name = initial(name)
- if(usability)
- to_chat(A, "I have been released from my prison, but you are still bound to [user.real_name]'s will. Help [user.p_them()] succeed in [user.p_their()] goals at all costs.")
- was_used()
-
-///////////////////////////Transferring to constructs/////////////////////////////////////////////////////
-/obj/structure/constructshell
- name = "empty shell"
- icon = 'icons/obj/wizard.dmi'
- icon_state = "construct-cult"
- desc = ""
-
-/obj/structure/constructshell/examine(mob/user)
- . = ..()
- if(user.stat == DEAD)
- . += {"A construct shell, used to house bound souls from a soulstone.\n
- Placing a soulstone with a soul into this shell allows you to produce my choice of the following:\n
- An Artificer, which can produce more shells and soulstones, as well as fortifications.\n
- A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.\n
- A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow."}
-
-/obj/structure/constructshell/attackby(obj/item/O, mob/user, params)
- if(istype(O, /obj/item/soulstone))
- var/obj/item/soulstone/SS = O
- if(!SS.purified)
- to_chat(user, "An overwhelming feeling of dread comes over you as you attempt to place the soulstone into the shell. It would be wise to be rid of this quickly.")
- user.Dizzy(30)
- return
- SS.transfer_soul("CONSTRUCT",src,user)
- SS.was_used()
- else
- return ..()
-
-////////////////////////////Proc for moving soul in and out off stone//////////////////////////////////////
-
-
-/obj/item/soulstone/proc/transfer_soul(choice as text, target, mob/user)
- switch(choice)
- if("FORCE")
- if(!iscarbon(target)) //TODO: Add sacrifice stoning for non-organics, just because you have no body doesnt mean you dont have a soul
- return FALSE
- if(contents.len)
- return FALSE
- var/mob/living/carbon/T = target
- if(T.client != null)
- for(var/obj/item/W in T)
- T.dropItemToGround(W)
- init_shade(T, user)
- return TRUE
- else
- to_chat(user, "Capture failed!: The soul has already fled its mortal frame. You attempt to bring it back...")
- return getCultGhost(T,user)
-
- if("VICTIM")
- var/mob/living/carbon/human/T = target
- if(contents.len)
- to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.")
- else
- if((!old_shard && T.stat != CONSCIOUS) || (old_shard && T.stat == DEAD))
- if(T.client == null)
- to_chat(user, "Capture failed!: The soul has already fled its mortal frame. You attempt to bring it back...")
- getCultGhost(T,user)
- else
- for(var/obj/item/W in T)
- T.dropItemToGround(W)
- init_shade(T, user, message_user = 1)
- qdel(T)
- else
- to_chat(user, "Capture failed!: Kill or maim the victim first!")
-
- if("SHADE")
- var/mob/living/simple_animal/shade/T = target
- if(contents.len)
- to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.")
- else
- T.AddComponent(/datum/component/soulstoned, src)
- if(purified)
- icon_state = "purified_soulstone2"
- else
- icon_state = "soulstone2"
- name = "soulstone: Shade of [T.real_name]"
- to_chat(T, "My soul has been captured by the soulstone. Its arcane energies are reknitting my ethereal form.")
- if(user != T)
- to_chat(user, "Capture successful!: [T.real_name]'s soul has been captured and stored within the soulstone.")
-
- if("CONSTRUCT")
- var/obj/structure/constructshell/T = target
- var/mob/living/simple_animal/shade/A = locate() in src
- if(A)
- var/construct_class = alert(user, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer")
- if(!T || !T.loc)
- return
- switch(construct_class)
- if("Juggernaut")
-
- if(purified)
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/armored/angelic, A, user, 0, T.loc)
- else
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/armored/noncult, A, user, 0, T.loc)
- if("Wraith")
- if(purified)
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith/angelic, A, user, 0, T.loc)
- else
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith/noncult, A, user, 0, T.loc)
- if("Artificer")
- if(purified)
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder/angelic, A, user, 0, T.loc)
- else
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder/noncult, A, user, 0, T.loc)
- qdel(T)
- qdel(src)
- else
- to_chat(user, "Creation failed!: The soul stone is empty! Go kill someone!")
-
-
-/proc/makeNewConstruct(mob/living/simple_animal/hostile/construct/ctype, mob/target, mob/stoner = null, cultoverride = 0, loc_override = null)
- if(QDELETED(target))
- return
- var/mob/living/simple_animal/hostile/construct/newstruct = new ctype((loc_override) ? (loc_override) : (get_turf(target)))
- if(stoner)
- newstruct.faction |= "[REF(stoner)]"
- newstruct.master = stoner
- var/datum/action/innate/seek_master/SM = new()
- SM.Grant(newstruct)
- newstruct.key = target.key
- if(stoner)
- to_chat(newstruct, "I are still bound to serve my creator, [stoner], follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.")
- newstruct.cancel_camera()
-
-
-/obj/item/soulstone/proc/init_shade(mob/living/carbon/human/T, mob/user, message_user = 0 , mob/shade_controller)
- if(!shade_controller)
- shade_controller = T
- new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton
- T.stop_sound_channel(CHANNEL_HEARTBEAT)
- T.invisibility = INVISIBILITY_ABSTRACT
- T.dust_animation()
- var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade(src)
- S.AddComponent(/datum/component/soulstoned, src)
- S.name = "Shade of [T.real_name]"
- S.real_name = "Shade of [T.real_name]"
- S.key = shade_controller.key
- S.language_holder = user.language_holder.copy(S)
- if(user)
- S.faction |= "[REF(user)]" //Add the master as a faction, allowing inter-mob cooperation
- S.cancel_camera()
- name = "soulstone: Shade of [T.real_name]"
- if(purified)
- icon_state = "purified_soulstone2"
- else
- icon_state = "soulstone2"
- if(user && usability)
- to_chat(S, "Your soul has been captured! You are now bound to [user.real_name]'s will. Help [user.p_them()] succeed in [user.p_their()] goals at all costs.")
- else if(user)
- to_chat(S, "Your soul has been captured! You are now bound to the cult's will. Help them succeed in their goals at all costs.")
- if(message_user && user)
- to_chat(user, "Capture successful!: [T.real_name]'s soul has been ripped from [T.p_their()] body and stored within the soul stone.")
-
-
-/obj/item/soulstone/proc/getCultGhost(mob/living/carbon/human/T, mob/user)
- var/mob/dead/observer/chosen_ghost
-
- chosen_ghost = T.get_ghost(TRUE,TRUE) //Try to grab original owner's ghost first
-
- if(!chosen_ghost || !chosen_ghost.client) //Failing that, we grab a ghosts
- var/list/consenting_candidates = pollGhostCandidates("Would you like to play as a Shade?", "Cultist", null, ROLE_CULTIST, 50, POLL_IGNORE_SHADE)
- if(consenting_candidates.len)
- chosen_ghost = pick(consenting_candidates)
- if(!T)
- return FALSE
- if(!chosen_ghost || !chosen_ghost.client)
- to_chat(user, "There were no spirits willing to become a shade.")
- return FALSE
- if(contents.len) //If they used the soulstone on someone else in the meantime
- return FALSE
- for(var/obj/item/W in T)
- T.dropItemToGround(W)
- init_shade(T, user , shade_controller = chosen_ghost)
- qdel(T)
- return TRUE
diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm
index 93c203f1bd..dcc42eeaaf 100644
--- a/code/modules/atmospherics/gasmixtures/reactions.dm
+++ b/code/modules/atmospherics/gasmixtures/reactions.dm
@@ -319,9 +319,6 @@
if(reaction_energy)
if(location)
- var/particle_chance = ((PARTICLE_CHANCE_CONSTANT)/(reaction_energy-PARTICLE_CHANCE_CONSTANT)) + 1//Asymptopically approaches 100% as the energy of the reaction goes up.
- if(prob(PERCENT(particle_chance)))
- location.fire_nuclear_particle()
var/rad_power = max((FUSION_RAD_COEFFICIENT/instability) + FUSION_RAD_MAX,0)
radiation_pulse(location,rad_power)
@@ -486,38 +483,3 @@
//Possibly burning a bit of organic matter through maillard reaction, so a *tiny* bit more heat would be understandable
air.temperature += cleaned_air * 0.002
-
-/datum/gas_reaction/stim_ball
- priority = 7
- name ="Stimulum Energy Ball"
- id = "stimball"
-
-/datum/gas_reaction/stim_ball/init_reqs()
- min_requirements = list(
- /datum/gas/pluoxium = STIM_BALL_GAS_AMOUNT,
- /datum/gas/stimulum = STIM_BALL_GAS_AMOUNT,
- /datum/gas/nitryl = MINIMUM_MOLE_COUNT,
- /datum/gas/plasma = MINIMUM_MOLE_COUNT,
- "TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST
- )
-/datum/gas_reaction/stim_ball/react(datum/gas_mixture/air, datum/holder)
- var/list/cached_gases = air.gases
- var/turf/open/location
- var/old_heat_capacity = air.heat_capacity()
- location = get_turf(holder)
- air.assert_gases(/datum/gas/water_vapor,/datum/gas/nitryl,/datum/gas/carbon_dioxide,/datum/gas/nitrogen)
- var/ball_shot_angle = 180*cos(cached_gases[/datum/gas/water_vapor][MOLES]/cached_gases[/datum/gas/nitryl][MOLES])+180
- var/stim_used = min(STIM_BALL_GAS_AMOUNT/cached_gases[/datum/gas/plasma][MOLES],cached_gases[/datum/gas/stimulum][MOLES])
- var/pluox_used = min(STIM_BALL_GAS_AMOUNT/cached_gases[/datum/gas/plasma][MOLES],cached_gases[/datum/gas/pluoxium][MOLES])
- var/energy_released = stim_used*STIMULUM_HEAT_SCALE//Stimulum has a lot of stored energy, and breaking it up releases some of it
- location.fire_nuclear_particle(ball_shot_angle)
- cached_gases[/datum/gas/carbon_dioxide][MOLES] += 4*pluox_used
- cached_gases[/datum/gas/nitrogen][MOLES] += 8*stim_used
- cached_gases[/datum/gas/pluoxium][MOLES] -= pluox_used
- cached_gases[/datum/gas/stimulum][MOLES] -= stim_used
- cached_gases[/datum/gas/plasma][MOLES] *= 0.5 //Consumes half the plasma each time.
- if(energy_released)
- var/new_heat_capacity = air.heat_capacity()
- if(new_heat_capacity > MINIMUM_HEAT_CAPACITY)
- air.temperature = CLAMP((air.temperature*old_heat_capacity + energy_released)/new_heat_capacity,TCMB,INFINITY)
- return REACTING
diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm
index 84aaeaebc0..bd75559162 100644
--- a/code/modules/awaymissions/corpse.dm
+++ b/code/modules/awaymissions/corpse.dm
@@ -215,203 +215,3 @@
/obj/effect/mob_spawn/human/corpse/delayed
ghost_usable = FALSE //These are just not-yet-set corpses.
instant = FALSE
-
-//Non-human spawners
-
-/obj/effect/mob_spawn/mouse
- name = "sleeper"
- mob_type = /mob/living/simple_animal/mouse
- death = FALSE
- roundstart = FALSE
- icon = 'icons/obj/machines/sleeper.dmi'
- icon_state = "sleeper"
-
-/obj/effect/mob_spawn/cow
- name = "sleeper"
- mob_type = /mob/living/simple_animal/cow
- death = FALSE
- roundstart = FALSE
- mob_gender = FEMALE
- icon = 'icons/obj/machines/sleeper.dmi'
- icon_state = "sleeper"
-
-// I'll work on making a list of corpses people request for maps, or that I think will be commonly used. Syndicate operatives for example.
-
-/datum/outfit/spacebartender
- name = "Space Bartender"
- uniform = /obj/item/clothing/under/rank/civilian/bartender
- back = /obj/item/storage/backpack
- shoes = /obj/item/clothing/shoes/sneakers/black
- suit = /obj/item/clothing/suit/armor/vest
- glasses = /obj/item/clothing/glasses/sunglasses/reagent
-/obj/effect/mob_spawn/human/beach
- outfit = /datum/outfit/beachbum
-
-/obj/effect/mob_spawn/human/beach/alive
- death = FALSE
- roundstart = FALSE
- random = TRUE
- mob_name = "Beach Bum"
- name = "beach bum sleeper"
- icon = 'icons/obj/machines/sleeper.dmi'
- icon_state = "sleeper"
- flavour_text = "You're, like, totally a dudebro, bruh. Ch'yea. You came here, like, on spring break, hopin' to pick up some bangin' hot chicks, y'knaw?"
- assignedrole = "Beach Bum"
-
-/obj/effect/mob_spawn/human/beach/alive/lifeguard
- flavour_text = "You're a spunky lifeguard! It's up to you to make sure nobody drowns or gets eaten by sharks and stuff."
- mob_gender = "female"
- name = "lifeguard sleeper"
- id_job = "Lifeguard"
- uniform = /obj/item/clothing/under/shorts/red
-
-/datum/outfit/beachbum
- name = "Beach Bum"
- glasses = /obj/item/clothing/glasses/sunglasses
- l_pocket = /obj/item/reagent_containers/food/snacks/pizzaslice/dank;
- uniform = /obj/item/clothing/under/pants/youngfolksjeans
-
-/datum/outfit/beachbum/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
- if(visualsOnly)
- return
- H.dna.add_mutation(STONER)
-
-/////////////////Officers+Nanotrasen Security//////////////////////
-
-/obj/effect/mob_spawn/human/bridgeofficer
- name = "Bridge Officer"
- id_job = "Bridge Officer"
- id_access_list = list(ACCESS_CENT_CAPTAIN)
- outfit = /datum/outfit/nanotrasenbridgeofficercorpse
-
-/datum/outfit/nanotrasenbridgeofficercorpse
- name = "Bridge Officer Corpse"
- uniform = /obj/item/clothing/under/rank/centcom/officer
- suit = /obj/item/clothing/suit/armor/bulletproof
- shoes = /obj/item/clothing/shoes/sneakers/black
- glasses = /obj/item/clothing/glasses/sunglasses
-
-
-/obj/effect/mob_spawn/human/commander
- name = "Commander"
- id_job = "Commander"
- id_access_list = list(ACCESS_CENT_CAPTAIN, ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_STORAGE)
- outfit = /datum/outfit/nanotrasencommandercorpse
-
-/datum/outfit/nanotrasencommandercorpse
- name = "Nanotrasen Private Security Commander"
- uniform = /obj/item/clothing/under/rank/centcom/commander
- suit = /obj/item/clothing/suit/armor/bulletproof
- glasses = /obj/item/clothing/glasses/eyepatch
- mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
- head = /obj/item/clothing/head/centhat
- gloves = /obj/item/clothing/gloves/combat
- shoes = /obj/item/clothing/shoes/combat/swat
- r_pocket = /obj/item/lighter
-
-
-/obj/effect/mob_spawn/human/nanotrasensoldier
- name = "Nanotrasen Private Security Officer"
- id_job = "Private Security Force"
- id_access_list = list(ACCESS_CENT_CAPTAIN, ACCESS_CENT_GENERAL, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_STORAGE, ACCESS_SECURITY, ACCESS_MECH_SECURITY)
- outfit = /datum/outfit/nanotrasensoldiercorpse
-
-/datum/outfit/nanotrasensoldiercorpse
- name = "NT Private Security Officer Corpse"
- uniform = /obj/item/clothing/under/rank/security/officer
- suit = /obj/item/clothing/suit/armor/vest
- shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/combat
- mask = /obj/item/clothing/mask/gas/sechailer/swat
- head = /obj/item/clothing/head/helmet/swat/nanotrasen
- back = /obj/item/storage/backpack/security
-
-
-/obj/effect/mob_spawn/human/commander/alive
- death = FALSE
- roundstart = FALSE
- mob_name = "Nanotrasen Commander"
- name = "sleeper"
- icon = 'icons/obj/machines/sleeper.dmi'
- icon_state = "sleeper"
- flavour_text = "I are a Nanotrasen Commander!"
-
-/obj/effect/mob_spawn/human/nanotrasensoldier/alive
- death = FALSE
- roundstart = FALSE
- mob_name = "Private Security Officer"
- name = "sleeper"
- icon = 'icons/obj/machines/sleeper.dmi'
- icon_state = "sleeper"
- faction = "nanotrasenprivate"
- flavour_text = "I are a Nanotrasen Private Security Officer!"
-
-
-/////////////////Spooky Undead//////////////////////
-
-/obj/effect/mob_spawn/human/skeleton
- name = "skeletal remains"
- mob_name = "skeleton"
- mob_species = /datum/species/skeleton
- mob_gender = NEUTER
-
-/obj/effect/mob_spawn/human/skeleton/alive
- death = FALSE
- roundstart = FALSE
- icon = 'icons/effects/blood.dmi'
- icon_state = "remains"
- flavour_text = "By unknown powers, your skeletal remains have been reanimated! Walk this mortal plain and terrorize all living adventurers who dare cross your path."
- assignedrole = "Skeleton"
-
-/obj/effect/mob_spawn/human/zombie
- name = "rotting corpse"
- mob_name = "zombie"
- mob_species = /datum/species/zombie
- assignedrole = "Zombie"
-
-/obj/effect/mob_spawn/human/zombie/alive
- death = FALSE
- roundstart = FALSE
- icon = 'icons/effects/blood.dmi'
- icon_state = "remains"
- flavour_text = "By unknown powers, your rotting remains have been resurrected! Walk this mortal plain and terrorize all living adventurers who dare cross your path."
-
-
-/obj/effect/mob_spawn/human/abductor
- name = "abductor"
- mob_name = "alien"
- mob_species = /datum/species/abductor
- outfit = /datum/outfit/abductorcorpse
-
-/datum/outfit/abductorcorpse
- name = "Abductor Corpse"
- uniform = /obj/item/clothing/under/color/grey
- shoes = /obj/item/clothing/shoes/combat
-
-
-//For ghost bar.
-/obj/effect/mob_spawn/human/alive/space_bar_patron
- name = "Bar cryogenics"
- mob_name = "Bar patron"
- random = TRUE
- permanent = TRUE
- uses = -1
- outfit = /datum/outfit/spacebartender
- assignedrole = "Space Bar Patron"
-
-//ATTACK HAND IGNORING PARENT RETURN VALUE
-/obj/effect/mob_spawn/human/alive/space_bar_patron/attack_hand(mob/user)
- var/despawn = alert("Return to cryosleep? (Warning, Your mob will be deleted!)",,"Yes","No")
- if(despawn == "No" || !loc || !Adjacent(user))
- return
- user.visible_message("[user.name] climbs back into cryosleep...")
- qdel(user)
-
-/datum/outfit/cryobartender
- name = "Cryogenic Bartender"
- uniform = /obj/item/clothing/under/rank/civilian/bartender
- back = /obj/item/storage/backpack
- shoes = /obj/item/clothing/shoes/sneakers/black
- suit = /obj/item/clothing/suit/armor/vest
- glasses = /obj/item/clothing/glasses/sunglasses/reagent
diff --git a/code/modules/awaymissions/exile.dm b/code/modules/awaymissions/exile.dm
deleted file mode 100644
index 976ab18443..0000000000
--- a/code/modules/awaymissions/exile.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-
-/obj/structure/closet/secure_closet/exile
- name = "exile implants"
- req_access = list(ACCESS_HOS)
-
-/obj/structure/closet/secure_closet/exile/PopulateContents()
- new /obj/item/implanter/exile(src)
- for(var/i in 1 to 5)
- new /obj/item/implantcase/exile(src)
diff --git a/code/modules/awaymissions/pamphlet.dm b/code/modules/awaymissions/pamphlet.dm
deleted file mode 100644
index 7cbbde096d..0000000000
--- a/code/modules/awaymissions/pamphlet.dm
+++ /dev/null
@@ -1,39 +0,0 @@
-/obj/item/paper/pamphlet
- name = "pamphlet"
- icon_state = "pamphlet"
-
-/obj/item/paper/pamphlet/gateway
- info = "Welcome to the Nanotrasen Gateway project...
\
- Congratulations! If you're reading this, you and your superiors have decided that you're \
- ready to commit to a life spent colonising the rolling hills of far away worlds. You \
- must be ready for a lifetime of adventure, a little bit of hard work, and an award \
- winning dental plan- but that's not all the Nanotrasen Gateway project has to offer.
\
-
Because we care about you, we feel it is only fair to make sure you know the risks \
- before you commit to joining the Nanotrasen Gateway project. All away destinations have \
- been fully scanned by a Nanotrasen expeditionary team, and are certified to be 100% safe. \
- We've even left a case of space beer along with the basic materials you'll need to expand \
- Nanotrasen's operational area and start your new life.
\
- Gateway Operation Basics
\
- All Nanotrasen approved Gateways operate on the same basic principals. They operate off \
- area equipment power as you would expect, and without this supply, it cannot safely function, \
- causinng it to reject all attempts at operation.
\
- Once it is correctly setup, and once it has enough power to operate, the Gateway will begin \
- searching for an output location. The amount of time this takes is variable, but the Gateway \
- interface will give you an estimate accurate to the minute. Power loss will not interrupt the \
- searching process. Influenza will not interrupt the searching process. Temporal anomalies \
- may cause the estimate to be inaccurate, but will not interrupt the searching process.
\
- Life On The Other Side
\
- Once you have traversed the Gateway, you may experience some disorientation. Do not panic. \
- This is a normal side effect of travelling vast distances in a short period of time. You should \
- survey the immediate area, and attempt to locate your complimentary case of space beer. Our \
- expeditionary teams have ensured the complete safety of all away locations, but in a small \
- number of cases, the Gateway they have established may not be immediately obvious. \
- Do not panic if you cannot locate the return Gateway. Begin colonisation of the destination. \
-
A New World
\
- As a participant in the Nanotrasen Gateway Project, you will be on the frontiers of space. \
- Though complete safety is assured, participants are advised to prepare for inhospitable \
- environs."
-
-//we don't want the silly text overlay!
-/obj/item/paper/pamphlet/update_icon()
- return
diff --git a/code/modules/awaymissions/signpost.dm b/code/modules/awaymissions/signpost.dm
deleted file mode 100644
index 460dfc9ba5..0000000000
--- a/code/modules/awaymissions/signpost.dm
+++ /dev/null
@@ -1,63 +0,0 @@
-/*An alternative to exit gateways, signposts send you back to somewhere safe onstation with their semiotic magic.*/
-/obj/structure/signpost
- icon = 'icons/obj/stationobjs.dmi'
- icon_state = "signpost"
- anchored = TRUE
- density = TRUE
- var/question = "Travel back?"
- var/list/zlevels
-
-/obj/structure/signpost/Initialize()
- . = ..()
- set_light(2)
- zlevels = SSmapping.levels_by_trait(ZTRAIT_STATION)
-
-/obj/structure/signpost/interact(mob/user)
- . = ..()
- if(.)
- return
- if(alert(question,name,"Yes","No") == "Yes" && Adjacent(user))
- var/turf/T = find_safe_turf(zlevels=zlevels)
-
- if(T)
- var/atom/movable/AM = user.pulling
- if(AM)
- AM.forceMove(T)
- user.forceMove(T)
- if(AM)
- user.start_pulling(AM)
- to_chat(user, "I blink and find myself in [get_area_name(T)].")
- else
- to_chat(user, "Nothing happens. You feel that this is a bad sign.")
-
-/obj/structure/signpost/attackby(obj/item/W, mob/user, params)
- return interact(user)
-
-/obj/structure/signpost/attack_paw(mob/user)
- return interact(user)
-
-/obj/structure/signpost/attack_hulk(mob/user)
- return
-
-/obj/structure/signpost/attack_animal(mob/user)
- return interact(user)
-
-/obj/structure/signpost/salvation
- name = "\proper salvation"
- desc = ""
- resistance_flags = INDESTRUCTIBLE
-
-/obj/structure/signpost/exit
- name = "exit"
- desc = "Make sure to bring all your belongings with you when you \
- exit the area."
- question = "Leave? You might never come back."
-
-/obj/structure/signpost/exit/Initialize()
- . = ..()
- zlevels = list()
- for(var/i in 1 to world.maxz)
- zlevels += i
- zlevels -= SSmapping.levels_by_trait(ZTRAIT_CENTCOM) // no easy victory, even with meme signposts
- // also, could you think of the horror if they ended up in a holodeck
- // template or something
diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm
deleted file mode 100644
index e008978202..0000000000
--- a/code/modules/awaymissions/super_secret_room.dm
+++ /dev/null
@@ -1,138 +0,0 @@
-/obj/structure/speaking_tile
- name = "strange tile"
- desc = ""
- verb_say = "intones"
- icon = 'icons/obj/structures.dmi'
- icon_state = "speaking_tile"
- layer = 5
- resistance_flags = INDESTRUCTIBLE
- var/speaking = FALSE
- var/times_spoken_to = 0
- var/list/shenanigans = list()
-
-/obj/structure/speaking_tile/Initialize()
- . = ..()
- var/json_file = file("data/npc_saves/Poly.json")
- if(!fexists(json_file))
- return
- var/list/json = json_decode(file2text(json_file))
- shenanigans = json["phrases"]
-
-/obj/structure/speaking_tile/interact(mob/user)
- if(!isliving(user) || speaking)
- return
- speaking = TRUE
-
- switch(times_spoken_to)
- if(0)
- SpeakPeace(list("Welcome to the error handling room.","Something's goofed up bad to send you here.","You should probably tell an admin what you were doing, or make a bug report."))
- for(var/obj/structure/signpost/salvation/S in orange(7))
- S.invisibility = 0
- var/datum/effect_system/smoke_spread/smoke = new
- smoke.set_up(1, S.loc)
- smoke.start()
- break
- if(1)
- SpeakPeace(list("Take that ladder up.","It'll send you back to the station.","Hopefully you'll never need to see this place again."))
- if(2)
- SpeakPeace(list("Curious about what happened?","Somehow your corporeal form was sent to nullspace with you still in it.","Lucky for you this room exists to save you from that horrible fate."))
- if(3)
- SpeakPeace(list("So yeah, you're welcome.","Anyway don't you have things to do?","There's no real point to sticking around here forever."))
- if(4)
- SpeakPeace(list("I'm flattered you care this much about this room.","However it's not proper to just stand in here all shift and see what I'll say.","I'm going to work hard to be more boring so you'll leave."))
- if(5 to 8)
- SpeakPeace(list("..."))
- if(9)
- SpeakPeace(list("Alright maybe that's too boring.", "I can't keep manually typing these lines out though.", "It's hard to explain but the code structure I'm using is kind of terrible."))
- if(10)
- SpeakPeace(list("Oh I have an idea!", "Lets outsource this endless banter to Poly!", "Then you'll be able to keep listening to this without getting bored!"))
- if(isnull(shenanigans) || !shenanigans.len)
- shenanigans = list("Except the poly file is missing...")
- if(11 to 14, 16 to 50, 52 to 99, 103 to 107, 109 to 203, 205 to 249, 252 to 665, 667 to 999, 1001 to 5642)
- SpeakPeace(list(pick(shenanigans),pick(shenanigans),pick(shenanigans)))
- if(times_spoken_to % 10 == 0)
- SpeakPeace(list("That's [times_spoken_to] times you've spoken to me by the way."))
- if(15)
- SpeakPeace(list("See? Isn't this fun?","Now you can mash this for hours without getting bored.","Anyway I'll leave you it."))
- if(51)
- SpeakPeace(list("The fun never ends around here.", "The Poly text files stores up to 500 statements.", "But you've probably heard a few repeats by now."))
- if(100)
- SpeakPeace(list("And that's a solid hundred.", "Good hustle I guess.", "You've probably heard a lot of repeats by now."))
- if(101)
- SpeakPeace(list("I hope you're getting the reference this room is presenting.", "As well as the more obscure meta reference this conversation is presenting.", "This stuff has layers."))
- if(102)
- SpeakPeace(list("I am very tempted to just stretch this out forever.","It's technically easier than doing this.","Just an option."))
- if(108)
- SpeakPeace(list("But you have my respect for being this dedicated to the joke.", "So tell you what we're going to do, we're going to set a goal.", "250 is your final mission."))
- if(204)
- SpeakPeace(list("Notice how there was no special message at 200?", "The slow automation of what used to be meaningful milestones?","It's all part of the joke."))
- if(250)
- SpeakPeace(list("Congratulations.", "By my very loose calculations you've now wasted a decent chunk of the round doing this.", "But you've seen this meme to its conclusion, and that's an experience in itself, right?"))
- if(251)
- SpeakPeace(list("Anyway, here.", "I can't give you anything that would impact the progression of the round.","But you've earned this at least."))
- var/obj/item/reagent_containers/food/drinks/trophy/silver_cup/the_ride = new(get_turf(user))
- the_ride.name = "Overextending The Joke: Second Place"
- the_ride.desc = ""
- if(252)
- SpeakPeace(list("You know what this means right?", "Of course it's not over!", "The question becomes now is it more impressive to solider on to an unknown finish, or to have to common sense to stop here?"))
- if(666)
- SpeakPeace(list("The darkness in your heart won't be filled by simple platitudes.","You won't stop now, you're in this to the end.", "Will you reach the finish line before the round ends?"))
- if(1000)
- SpeakPeace(list("The ends exists somewhere beyond meaningful milestones.", "There will be no more messages until then.", "You disgust me."))
- if(5643)
- user.client.give_award(/datum/award/achievement/misc/time_waste, user)
- var/obj/item/reagent_containers/food/drinks/trophy/gold_cup/never_ends = new(get_turf(user))
- never_ends.name = "Overextending The Joke: First Place"
- never_ends.desc = ""
- else
- y += 2
- speaking = FALSE
- times_spoken_to++
-
-/obj/structure/speaking_tile/attackby(obj/item/W, mob/user, params)
- return interact(user)
-
-/obj/structure/speaking_tile/attack_paw(mob/user)
- return interact(user)
-
-/obj/structure/speaking_tile/attack_hulk(mob/user)
- return
-
-/obj/structure/speaking_tile/attack_animal(mob/user)
- return interact(user)
-
-/obj/structure/speaking_tile/proc/SpeakPeace(list/statements)
- for(var/i in 1 to statements.len)
- say("[statements[i]]")
- if(i != statements.len)
- sleep(30)
-
-/obj/item/rupee
- name = "weird crystal"
- desc = ""
- icon = 'icons/obj/economy.dmi'
- icon_state = "rupee"
- w_class = WEIGHT_CLASS_SMALL
- custom_materials = list(/datum/material/glass = 500)
-
-/obj/item/rupee/Initialize()
- . = ..()
- var/newcolor = color2hex(pick(10;"green", 5;"blue", 3;"red", 1;"purple"))
- add_atom_colour(newcolor, FIXED_COLOUR_PRIORITY)
-
-/obj/item/rupee/Crossed(mob/M)
- if(!istype(M))
- return
- if(M.put_in_hands(src))
- if(src != M.get_active_held_item())
- M.swap_hand()
- equip_to_best_slot(M)
- ..()
-
-/obj/item/rupee/equipped(mob/user, slot)
- playsound(get_turf(loc), 'sound/blank.ogg', 50, TRUE, -1)
- ..()
-
-/obj/effect/landmark/error
- name = "error"
- icon_state = "error_room"
diff --git a/code/modules/buildmode/submodes/basic.dm b/code/modules/buildmode/submodes/basic.dm
index b6fddc18b4..65abda4f1d 100644
--- a/code/modules/buildmode/submodes/basic.dm
+++ b/code/modules/buildmode/submodes/basic.dm
@@ -21,14 +21,8 @@
if(istype(object,/turf) && left_click && !alt_click && !ctrl_click)
var/turf/T = object
- if(isspaceturf(object))
- T.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR)
- else if(isplatingturf(object))
- T.PlaceOnTop(/turf/open/floor/plasteel, flags = CHANGETURF_INHERIT_AIR)
- else if(isfloorturf(object))
- T.PlaceOnTop(/turf/closed/wall)
- else if(iswallturf(object))
- T.PlaceOnTop(/turf/closed/wall/r_wall)
+ if(isfloorturf(object))
+ T.PlaceOnTop(/turf/closed/wall/mineral/rogue/decowood)
log_admin("Build Mode: [key_name(c)] built [T] at [AREACOORD(T)]")
return
else if(right_click)
@@ -39,11 +33,3 @@
else if(isobj(object))
qdel(object)
return
- else if(istype(object,/turf) && ctrl_click && left_click)
- var/obj/structure/window/reinforced/window
- if(BM.build_dir == NORTHWEST)
- window = new /obj/structure/window/reinforced/fulltile(get_turf(object))
- else
- window = new /obj/structure/window/reinforced(get_turf(object))
- window.setDir(BM.build_dir)
- log_admin("Build Mode: [key_name(c)] built a window at [AREACOORD(object)]")
diff --git a/code/modules/buildmode/submodes/mapgen.dm b/code/modules/buildmode/submodes/mapgen.dm
index 6420668a9f..12f83a36fa 100644
--- a/code/modules/buildmode/submodes/mapgen.dm
+++ b/code/modules/buildmode/submodes/mapgen.dm
@@ -35,11 +35,6 @@
var/left_click = pa.Find("left")
if(left_click)
var/datum/mapGenerator/G = new generator_path
- if(istype(G, /datum/mapGenerator/repair/reload_station_map))
- if(GLOB.reloading_map)
- to_chat(c, "I are already reloading an area! Please wait for it to fully finish loading before trying to load another!")
- deselect_region()
- return
G.defineRegion(cornerA, cornerB, 1)
highlight_region(G.map)
var/confirm = alert("Are you sure you want to run the map generator?", "Run generator", "Yes", "No")
diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm
index 6fb1e45708..9390936559 100644
--- a/code/modules/cargo/centcom_podlauncher.dm
+++ b/code/modules/cargo/centcom_podlauncher.dm
@@ -416,9 +416,6 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm
if("styleInvisible")
temp_pod.setStyle(STYLE_INVISIBLE)
. = TRUE
- if("styleGondola")
- temp_pod.setStyle(STYLE_GONDOLA)
- . = TRUE
if("styleSeeThrough")
temp_pod.setStyle(STYLE_SEETHROUGH)
. = TRUE
diff --git a/code/modules/cargo/exports.dm b/code/modules/cargo/exports.dm
index 23dbc877e7..832893438e 100644
--- a/code/modules/cargo/exports.dm
+++ b/code/modules/cargo/exports.dm
@@ -160,10 +160,7 @@
report.total_value[src] += the_cost
- if(istype(O, /datum/export/material))
- report.total_amount[src] += amount*MINERAL_MATERIAL_AMOUNT
- else
- report.total_amount[src] += amount
+ report.total_amount[src] += amount
if(!dry_run)
if(apply_elastic)
diff --git a/code/modules/cargo/exports/gear.dm b/code/modules/cargo/exports/gear.dm
deleted file mode 100644
index a6339fdf09..0000000000
--- a/code/modules/cargo/exports/gear.dm
+++ /dev/null
@@ -1,70 +0,0 @@
-/datum/export/gear
-
-/datum/export/gear/sec_armor
- cost = 100
- unit_name = "armor vest"
- export_types = list(/obj/item/clothing/suit/armor/vest)
-
-/datum/export/gear/mask/breath
- cost = 2
- unit_name = "breath mask"
- export_types = list(/obj/item/clothing/mask/breath)
-
-/datum/export/gear/mask/gas
- cost = 10
- unit_name = "gas mask"
- export_types = list(/obj/item/clothing/mask/gas)
- include_subtypes = FALSE
-
-
-/datum/export/gear/radhelmet
- cost = 50
- unit_name = "radsuit hood"
- export_types = list(/obj/item/clothing/head/radiation)
-
-/datum/export/gear/radsuit
- cost = 100
- unit_name = "radsuit"
- export_types = list(/obj/item/clothing/suit/radiation)
-
-/datum/export/gear/biohood
- cost = 50
- unit_name = "biosuit hood"
- export_types = list(/obj/item/clothing/head/bio_hood)
-
-/datum/export/gear/biosuit
- cost = 100
- unit_name = "biosuit"
- export_types = list(/obj/item/clothing/suit/bio_suit)
-
-/datum/export/gear/bombhelmet
- cost = 50
- unit_name = "bomb suit hood"
- export_types = list(/obj/item/clothing/head/bomb_hood)
-
-/datum/export/gear/bombsuit
- cost = 100
- unit_name = "bomb suit"
- export_types = list(/obj/item/clothing/suit/bomb_suit)
-
-/datum/export/gear/lizardboots
- cost = 350
- unit_name = "lizard skin boots"
- export_types = list(/obj/item/clothing/shoes/cowboy/lizard)
- include_subtypes = FALSE
-
-/datum/export/gear/lizardmasterwork
- cost = 1000
- unit_name = "Hugs-the-Feet lizard boots"
- export_types = list(/obj/item/clothing/shoes/cowboy/lizard/masterwork)
-
-/datum/export/gear/bilton
- cost = 2500
- unit_name = "bilton wrangler boots"
- export_types = list(/obj/item/clothing/shoes/cowboy/fancy)
-
-/datum/export/gear/ebonydie
- cost = 500
- unit_name = "ebony die"
- export_types = list(/obj/item/dice/d6/ebony)
-
diff --git a/code/modules/cargo/exports/manifest.dm b/code/modules/cargo/exports/manifest.dm
deleted file mode 100644
index d59ef1093f..0000000000
--- a/code/modules/cargo/exports/manifest.dm
+++ /dev/null
@@ -1,78 +0,0 @@
-// Approved manifest.
-// +200 credits flat.
-/datum/export/manifest_correct
- cost = 200
- k_elasticity = 0
- unit_name = "approved manifest"
- export_types = list(/obj/item/paper/fluff/jobs/cargo/manifest)
-
-/datum/export/manifest_correct/applies_to(obj/O)
- if(!..())
- return FALSE
-
- var/obj/item/paper/fluff/jobs/cargo/manifest/M = O
- if(M.is_approved() && !M.errors)
- return TRUE
- return FALSE
-
-// Correctly denied manifest.
-// Refunds the package cost minus the cost of crate.
-/datum/export/manifest_error_denied
- cost = -500
- k_elasticity = 0
- unit_name = "correctly denied manifest"
- export_types = list(/obj/item/paper/fluff/jobs/cargo/manifest)
-
-/datum/export/manifest_error_denied/applies_to(obj/O)
- if(!..())
- return FALSE
-
- var/obj/item/paper/fluff/jobs/cargo/manifest/M = O
- if(M.is_denied() && M.errors)
- return TRUE
- return FALSE
-
-/datum/export/manifest_error_denied/get_cost(obj/O)
- var/obj/item/paper/fluff/jobs/cargo/manifest/M = O
- return ..() + M.order_cost
-
-
-// Erroneously approved manifest.
-// Substracts the package cost.
-/datum/export/manifest_error
- unit_name = "erroneously approved manifest"
- export_types = list(/obj/item/paper/fluff/jobs/cargo/manifest)
-
-/datum/export/manifest_error/applies_to(obj/O)
- if(!..())
- return FALSE
-
- var/obj/item/paper/fluff/jobs/cargo/manifest/M = O
- if(M.is_approved() && M.errors)
- return TRUE
- return FALSE
-
-/datum/export/manifest_error/get_cost(obj/O)
- var/obj/item/paper/fluff/jobs/cargo/manifest/M = O
- return -M.order_cost
-
-
-// Erroneously denied manifest.
-// Substracts the package cost minus the cost of crate.
-/datum/export/manifest_correct_denied
- cost = 500
- unit_name = "erroneously denied manifest"
- export_types = list(/obj/item/paper/fluff/jobs/cargo/manifest)
-
-/datum/export/manifest_correct_denied/applies_to(obj/O)
- if(!..())
- return FALSE
-
- var/obj/item/paper/fluff/jobs/cargo/manifest/M = O
- if(M.is_denied() && !M.errors)
- return TRUE
- return FALSE
-
-/datum/export/manifest_correct_denied/get_cost(obj/O)
- var/obj/item/paper/fluff/jobs/cargo/manifest/M = O
- return ..() - M.order_cost
diff --git a/code/modules/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm
deleted file mode 100644
index 5cf674d83b..0000000000
--- a/code/modules/cargo/exports/materials.dm
+++ /dev/null
@@ -1,99 +0,0 @@
-/datum/export/material
- cost = 5 // Cost per MINERAL_MATERIAL_AMOUNT, which is 2000cm3 as of April 2016.
- message = "cm3 of developer's tears. Please, report this on github"
- var/material_id = null
- export_types = list(
- /obj/item/stack/sheet/mineral, /obj/item/stack/tile/mineral,
- /obj/item/stack/ore, /obj/item/coin)
-// Yes, it's a base type containing export_types.
-// But it has no material_id, so any applies_to check will return false, and these types reduce amount of copypasta a lot
-
-/datum/export/material/get_amount(obj/O)
- if(!material_id)
- return 0
- if(!isitem(O))
- return 0
- var/obj/item/I = O
- if(!(getmaterialref(material_id) in I.custom_materials))
- return 0
-
- var/amount = I.custom_materials[getmaterialref(material_id)]
-
- if(istype(I, /obj/item/stack/ore))
- amount *= 0.8 // Station's ore redemption equipment is really goddamn good.
-
- return round(amount/MINERAL_MATERIAL_AMOUNT)
-
-// Materials. Nothing but plasma is really worth selling. Better leave it all to RnD and sell some plasma instead.
-
-/datum/export/material/bananium
- cost = 1000
- material_id = /datum/material/bananium
- message = "cm3 of bananium"
-
-/datum/export/material/diamond
- cost = 500
- material_id = /datum/material/diamond
- message = "cm3 of diamonds"
-
-/datum/export/material/plasma
- cost = 200
- k_elasticity = 0
- material_id = /datum/material/plasma
- message = "cm3 of plasma"
-
-/datum/export/material/uranium
- cost = 100
- material_id = /datum/material/uranium
- message = "cm3 of uranium"
-
-/datum/export/material/gold
- cost = 125
- material_id = /datum/material/gold
- message = "cm3 of gold"
-
-/datum/export/material/silver
- cost = 50
- material_id = /datum/material/silver
- message = "cm3 of silver"
-
-/datum/export/material/titanium
- cost = 125
- material_id = /datum/material/titanium
- message = "cm3 of titanium"
-
-
-/datum/export/material/mythril
- cost = 1500
- material_id = /datum/material/mythril
- message = "cm3 of mythril"
-
-/datum/export/material/bscrystal
- cost = 300
- message = "of bluespace crystals"
- material_id = /datum/material/bluespace
-
-/datum/export/material/plastic
- cost = 25
- message = "cm3 of plastic"
- material_id = /datum/material/plastic
-
-/datum/export/material/runite
- cost = 600
- message = "cm3 of runite"
- material_id = /datum/material/runite
-
-/datum/export/material/metal
- cost = 5
- message = "cm3 of metal"
- material_id = /datum/material/iron
- export_types = list(
- /obj/item/stack/sheet/metal, /obj/item/stack/tile/plasteel,
- /obj/item/stack/rods, /obj/item/stack/ore, /obj/item/coin)
-
-/datum/export/material/glass
- cost = 5
- message = "cm3 of glass"
- material_id = /datum/material/glass
- export_types = list(/obj/item/stack/sheet/glass, /obj/item/stack/ore,
- /obj/item/shard)
diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm
deleted file mode 100644
index 10f04fdc21..0000000000
--- a/code/modules/cargo/exports/sheets.dm
+++ /dev/null
@@ -1,84 +0,0 @@
-/datum/export/stack
- unit_name = "sheet"
-
-/datum/export/stack/get_amount(obj/O)
- var/obj/item/stack/S = O
- if(istype(S))
- return S.amount
- return 0
-
-// Hides
-
-/datum/export/stack/skin/monkey
- cost = 50
- unit_name = "monkey hide"
- export_types = list(/obj/item/stack/sheet/animalhide/monkey)
-
-/datum/export/stack/skin/human
- cost = 100
- export_category = EXPORT_CONTRABAND
- unit_name = "piece"
- message = "of human skin"
- export_types = list(/obj/item/stack/sheet/animalhide/human)
-
-/datum/export/stack/skin/goliath_hide
- cost = 200
- unit_name = "goliath hide"
- export_types = list(/obj/item/stack/sheet/animalhide/goliath_hide)
-
-/datum/export/stack/skin/cat
- cost = 150
- export_category = EXPORT_CONTRABAND
- unit_name = "cat hide"
- export_types = list(/obj/item/stack/sheet/animalhide/cat)
-
-/datum/export/stack/skin/corgi
- cost = 200
- export_category = EXPORT_CONTRABAND
- unit_name = "corgi hide"
- export_types = list(/obj/item/stack/sheet/animalhide/corgi)
-
-/datum/export/stack/skin/lizard
- cost = 150
- unit_name = "lizard hide"
- export_types = list(/obj/item/stack/sheet/animalhide/lizard)
-
-/datum/export/stack/skin/gondola
- cost = 5000
- unit_name = "gondola hide"
- export_types = list(/obj/item/stack/sheet/animalhide/gondola)
-
-// Common materials.
-// For base materials, see materials.dm
-
-/datum/export/stack/plasteel
- cost = 155 // 2000u of plasma + 2000u of metal.
- message = "of plasteel"
- export_types = list(/obj/item/stack/sheet/plasteel)
-
-// 1 glass + 0.5 metal, cost is rounded up.
-/datum/export/stack/rglass
- cost = 8
- message = "of reinforced glass"
- export_types = list(/obj/item/stack/sheet/rglass)
-
-/datum/export/stack/plastitanium
- cost = 325 // plasma + titanium costs
- message = "of plastitanium"
- export_types = list(/obj/item/stack/sheet/mineral/plastitanium)
-
-/datum/export/stack/wood
- cost = 30
- unit_name = "wood plank"
- export_types = list(/obj/item/stack/sheet/mineral/wood)
-
-/datum/export/stack/cardboard
- cost = 2
- message = "of cardboard"
- export_types = list(/obj/item/stack/sheet/cardboard)
-
-/datum/export/stack/sandstone
- cost = 1
- unit_name = "block"
- message = "of sandstone"
- export_types = list(/obj/item/stack/sheet/mineral/sandstone)
diff --git a/code/modules/cargo/gondolapod.dm b/code/modules/cargo/gondolapod.dm
deleted file mode 100644
index 3553b2da8f..0000000000
--- a/code/modules/cargo/gondolapod.dm
+++ /dev/null
@@ -1,76 +0,0 @@
-/mob/living/simple_animal/pet/gondola/gondolapod
- name = "gondola"
- real_name = "gondola"
- desc = ""
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "bops"
- response_disarm_simple = "bop"
- response_harm_continuous = "kicks"
- response_harm_simple = "kick"
- faction = list("gondola")
- turns_per_move = 10
- icon = 'icons/mob/gondolapod.dmi'
- icon_state = "gondolapod"
- icon_living = "gondolapod"
- pixel_x = -16//2x2 sprite
- pixel_y = -5
- layer = TABLE_LAYER//so that deliveries dont appear underneath it
- loot = list(/obj/effect/decal/cleanable/blood/gibs, /obj/item/stack/sheet/animalhide/gondola = 2, /obj/item/reagent_containers/food/snacks/meat/slab/gondola = 2)
- //Gondolas aren't affected by cold.
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- maxbodytemp = 1500
- maxHealth = 200
- health = 200
- del_on_death = TRUE
- var/opened = FALSE
- var/obj/structure/closet/supplypod/centcompod/linked_pod
-
-/mob/living/simple_animal/pet/gondola/gondolapod/Initialize(mapload, pod)
- linked_pod = pod
- name = linked_pod.name
- . = ..()
-
-/mob/living/simple_animal/pet/gondola/gondolapod/update_icon_state()
- if(opened)
- icon_state = "gondolapod_open"
- else
- icon_state = "gondolapod"
-
-/mob/living/simple_animal/pet/gondola/gondolapod/verb/deliver()
- set name = "Release Contents"
- set category = "Gondola"
- set desc = ""
- linked_pod.open(src, forced = TRUE)
-
-/mob/living/simple_animal/pet/gondola/gondolapod/examine(mob/user)
- . = ..()
- if (contents.len)
- . += "It looks like it hasn't made its delivery yet."
- else
- . += "It looks like it has already made its delivery."
-
-/mob/living/simple_animal/pet/gondola/gondolapod/verb/check()
- set name = "Count Contents"
- set category = "Gondola"
- set desc = ""
- var/total = contents.len
- if (total)
- to_chat(src, "I detect [total] object\s within your incredibly vast belly.")
- else
- to_chat(src, "A closer look inside myself reveals... nothing.")
-
-/mob/living/simple_animal/pet/gondola/gondolapod/proc/setOpened()
- opened = TRUE
- update_icon()
- addtimer(CALLBACK(src, PROC_REF(setClosed)), 50)
-
-/mob/living/simple_animal/pet/gondola/gondolapod/proc/setClosed()
- opened = FALSE
- update_icon()
-
-/mob/living/simple_animal/pet/gondola/gondolapod/death()
- qdel(linked_pod) //Will cause the open() proc for the linked supplypod to be called with the "broken" parameter set to true, meaning that it will dump its contents on death
- qdel(src)
- ..()
diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm
index 6ed9c00b52..d3391839ef 100644
--- a/code/modules/cargo/order.dm
+++ b/code/modules/cargo/order.dm
@@ -89,12 +89,9 @@
P.info += "Stamp below to confirm receipt of goods:
"
if(P.errors & MANIFEST_ERROR_ITEM)
- if( istype(C, /obj/structure/closet/crate/large))
- P.errors &= ~MANIFEST_ERROR_ITEM
- else
- var/lost = max(round(C.contents.len / 10), 1)
- while(--lost >= 0)
- qdel(pick(C.contents))
+ var/lost = max(round(C.contents.len / 10), 1)
+ while(--lost >= 0)
+ qdel(pick(C.contents))
P.update_icon()
P.forceMove(C)
diff --git a/code/modules/cargo/supplypod.dm b/code/modules/cargo/supplypod.dm
index a4de0a5f20..689cf93890 100644
--- a/code/modules/cargo/supplypod.dm
+++ b/code/modules/cargo/supplypod.dm
@@ -182,12 +182,7 @@
if (effectMissile) //If we are acting like a missile, then right after we land and finish fucking shit up w explosions, we should delete
opened = TRUE //We set opened to TRUE to avoid spending time trying to open (due to being deleted) during the Destroy() proc
qdel(src)
- if (style == STYLE_GONDOLA) //Checks if we are supposed to be a gondola pod. If so, create a gondolapod mob, and move this pod to nullspace. I'd like to give a shout out, to my man oranges
- var/mob/living/simple_animal/pet/gondola/gondolapod/benis = new(get_turf(src), src)
- benis.contents |= contents //Move the contents of this supplypod into the gondolapod mob.
- moveToNullspace()
- addtimer(CALLBACK(src, PROC_REF(open), benis), openingDelay) //After the openingDelay passes, we use the open proc from this supplyprod while referencing the contents of the "holder", in this case the gondolapod mob
- else if (style == STYLE_SEETHROUGH)
+ if (style == STYLE_SEETHROUGH)
open(src)
else
addtimer(CALLBACK(src, PROC_REF(open), src), openingDelay) //After the openingDelay passes, we use the open proc from this supplypod, while referencing this supplypod's contents
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index f7d2b058fb..0b02403356 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -220,7 +220,7 @@
foodtype = CLOTH
/obj/item/clothing/attack(mob/M, mob/user, def_zone)
- if(user.used_intent.type != INTENT_HARM && ismoth(M))
+ if(user.used_intent.type != INTENT_HARM)
var/obj/item/reagent_containers/food/snacks/clothing/clothing_as_food = new
clothing_as_food.name = name
if(clothing_as_food.attack(M, user, def_zone))
diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm
deleted file mode 100644
index caff2a36dd..0000000000
--- a/code/modules/clothing/ears/_ears.dm
+++ /dev/null
@@ -1,52 +0,0 @@
-
-//Ears: currently only used for headsets and earmuffs
-/obj/item/clothing/ears
- name = "ears"
- w_class = WEIGHT_CLASS_TINY
- throwforce = 0
- slot_flags = ITEM_SLOT_HEAD
- resistance_flags = NONE
-
-/obj/item/clothing/ears/earmuffs
- name = "earmuffs"
- desc = ""
- icon_state = "earmuffs"
- item_state = "earmuffs"
- strip_delay = 15
- equip_delay_other = 25
- resistance_flags = FLAMMABLE
- custom_price = 40
-
-/obj/item/clothing/ears/earmuffs/ComponentInitialize()
- . = ..()
- AddElement(/datum/element/earhealing)
- AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_HEAD))
-
-/obj/item/clothing/ears/headphones
- name = "headphones"
- desc = ""
- icon = 'icons/obj/clothing/accessories.dmi'
- icon_state = "headphones"
- item_state = "headphones"
- slot_flags = ITEM_SLOT_HEAD | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want!
- actions_types = list(/datum/action/item_action/toggle_headphones)
- var/headphones_on = FALSE
- custom_price = 20
-
-/obj/item/clothing/ears/headphones/Initialize()
- . = ..()
- update_icon()
-
-/obj/item/clothing/ears/headphones/update_icon()
- icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]"
- item_state = "[initial(item_state)]_[headphones_on? "on" : "off"]"
-
-/obj/item/clothing/ears/headphones/proc/toggle(owner)
- headphones_on = !headphones_on
- update_icon()
- var/mob/living/carbon/human/H = owner
- if(istype(H))
- H.update_inv_ears()
- H.update_inv_neck()
- H.update_inv_head()
- to_chat(owner, "I turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]")
diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm
index 61747da8fc..5a6f44f4d9 100644
--- a/code/modules/clothing/glasses/_glasses.dm
+++ b/code/modules/clothing/glasses/_glasses.dm
@@ -8,7 +8,6 @@
strip_delay = 20
equip_delay_other = 25
resistance_flags = NONE
- custom_materials = list(/datum/material/glass = 250)
var/vision_flags = 0
var/darkness_view = 2//Base human is 2
var/invis_view = SEE_INVISIBLE_LIVING //admin only for now
@@ -41,235 +40,6 @@
if(. && user)
user.update_sight()
-//called when thermal glasses are emped.
-/obj/item/clothing/glasses/proc/thermal_overload()
- if(ishuman(src.loc))
- var/mob/living/carbon/human/H = src.loc
- var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES)
- if(!(HAS_TRAIT(H, TRAIT_BLIND)))
- if(H.glasses == src)
- to_chat(H, "[src] overloads and blinds you!")
- H.flash_act(visual = 1)
- H.blind_eyes(3)
- H.blur_eyes(5)
- eyes.applyOrganDamage(5)
-
-/obj/item/clothing/glasses/meson
- name = "optical meson scanner"
- desc = ""
- icon_state = "meson"
- item_state = "meson"
- darkness_view = 2
- vision_flags = SEE_TURFS
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
- glass_colour_type = /datum/client_colour/glass_colour/lightgreen
-
-/obj/item/clothing/glasses/meson/suicide_act(mob/living/carbon/user)
- user.visible_message("[user] is putting \the [src] to [user.p_their()] eyes and overloading the brightness! It looks like [user.p_theyre()] trying to commit suicide!")
- return BRUTELOSS
-
-/obj/item/clothing/glasses/meson/night
- name = "night vision meson scanner"
- desc = ""
- icon_state = "nvgmeson"
- item_state = "nvgmeson"
- darkness_view = 8
- flash_protect = FLASH_PROTECTION_SENSITIVE
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
- glass_colour_type = /datum/client_colour/glass_colour/green
-
-/obj/item/clothing/glasses/meson/gar
- name = "gar mesons"
- icon_state = "garm"
- item_state = "garm"
- desc = ""
- force = 10
- throwforce = 10
- throw_speed = 4
- attack_verb = list("sliced")
- hitsound = 'sound/blank.ogg'
- sharpness = IS_SHARP
-
-/obj/item/clothing/glasses/science
- name = "science goggles"
- desc = ""
- icon_state = "purple"
- item_state = "glasses"
- clothing_flags = SCAN_REAGENTS //You can see reagents while wearing science goggles
- actions_types = list(/datum/action/item_action/toggle_research_scanner)
- glass_colour_type = /datum/client_colour/glass_colour/purple
- resistance_flags = ACID_PROOF
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
-
-/obj/item/clothing/glasses/science/item_action_slot_check(slot)
- if(slot == SLOT_GLASSES)
- return 1
-
-/obj/item/clothing/glasses/night
- name = "night vision goggles"
- desc = ""
- icon_state = "night"
- item_state = "glasses"
- darkness_view = 8
- flash_protect = FLASH_PROTECTION_SENSITIVE
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
- glass_colour_type = /datum/client_colour/glass_colour/green
-
-/obj/item/clothing/glasses/science/suicide_act(mob/living/carbon/user)
- user.visible_message("[user] is tightening \the [src]'s straps around [user.p_their()] neck! It looks like [user.p_theyre()] trying to commit suicide!")
- return OXYLOSS
-
-/obj/item/clothing/glasses/eyepatch
- name = "eyepatch"
- desc = ""
- icon_state = "eyepatch"
- item_state = "eyepatch"
-
-/obj/item/clothing/glasses/monocle
- name = "monocle"
- desc = ""
- icon_state = "monocle"
- item_state = "headset" // lol
-
-/obj/item/clothing/glasses/material
- name = "optical material scanner"
- desc = ""
- icon_state = "material"
- item_state = "glasses"
- vision_flags = SEE_OBJS
- glass_colour_type = /datum/client_colour/glass_colour/lightblue
-
-/obj/item/clothing/glasses/material/mining
- name = "optical material scanner"
- desc = ""
- icon_state = "material"
- item_state = "glasses"
- darkness_view = 0
-
-/obj/item/clothing/glasses/material/mining/gar
- name = "gar material scanner"
- icon_state = "garm"
- item_state = "garm"
- desc = ""
- force = 10
- throwforce = 20
- throw_speed = 4
- attack_verb = list("sliced")
- hitsound = 'sound/blank.ogg'
- sharpness = IS_SHARP
- glass_colour_type = /datum/client_colour/glass_colour/lightgreen
-
-/obj/item/clothing/glasses/regular
- name = "prescription glasses"
- desc = ""
- icon_state = "glasses"
- item_state = "glasses"
- vision_correction = 1 //corrects nearsightedness
-
-/obj/item/clothing/glasses/regular/jamjar
- name = "jamjar glasses"
- desc = ""
- icon_state = "jamjar_glasses"
- item_state = "jamjar_glasses"
-
-/obj/item/clothing/glasses/regular/hipster
- name = "prescription glasses"
- desc = ""
- icon_state = "hipster_glasses"
- item_state = "hipster_glasses"
-
-/obj/item/clothing/glasses/regular/circle
- name = "circle glasses"
- desc = ""
- icon_state = "circle_glasses"
- item_state = "circle_glasses"
-
-//Here lies green glasses, so ugly they died. RIP
-
-/obj/item/clothing/glasses/sunglasses
- name = "sunglasses"
- desc = ""
- icon_state = "sun"
- item_state = "sunglasses"
- darkness_view = 1
- flash_protect = FLASH_PROTECTION_FLASH
- tint = 1
- glass_colour_type = /datum/client_colour/glass_colour/gray
- dog_fashion = /datum/dog_fashion/head
-
-/obj/item/clothing/glasses/sunglasses/reagent
- name = "beer goggles"
- desc = ""
- clothing_flags = SCAN_REAGENTS
-
-/obj/item/clothing/glasses/sunglasses/reagent/equipped(mob/user, slot)
- . = ..()
- if(ishuman(user) && slot == SLOT_GLASSES)
- ADD_TRAIT(user, TRAIT_BOOZE_SLIDER, CLOTHING_TRAIT)
-
-/obj/item/clothing/glasses/sunglasses/reagent/dropped(mob/user)
- . = ..()
- REMOVE_TRAIT(user, TRAIT_BOOZE_SLIDER, CLOTHING_TRAIT)
-
-/obj/item/clothing/glasses/sunglasses/garb
- name = "black gar glasses"
- desc = ""
- icon_state = "garb"
- item_state = "garb"
- force = 10
- throwforce = 10
- throw_speed = 4
- attack_verb = list("sliced")
- hitsound = 'sound/blank.ogg'
- sharpness = IS_SHARP
-
-/obj/item/clothing/glasses/sunglasses/garb/supergarb
- name = "black giga gar glasses"
- desc = ""
- icon_state = "supergarb"
- item_state = "garb"
- force = 12
- throwforce = 12
-
-/obj/item/clothing/glasses/sunglasses/gar
- name = "gar glasses"
- desc = ""
- icon_state = "gar"
- item_state = "gar"
- force = 10
- throwforce = 10
- throw_speed = 4
- attack_verb = list("sliced")
- hitsound = 'sound/blank.ogg'
- sharpness = IS_SHARP
- glass_colour_type = /datum/client_colour/glass_colour/orange
-
-/obj/item/clothing/glasses/sunglasses/gar/supergar
- name = "giga gar glasses"
- desc = ""
- icon_state = "supergar"
- item_state = "gar"
- force = 12
- throwforce = 12
- glass_colour_type = /datum/client_colour/glass_colour/red
-
-/obj/item/clothing/glasses/welding
- name = "welding goggles"
- desc = ""
- icon_state = "welding-g"
- item_state = "welding-g"
- actions_types = list(/datum/action/item_action/toggle)
- flash_protect = FLASH_PROTECTION_WELDER
- custom_materials = list(/datum/material/iron = 250)
- tint = 2
- visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
- flags_cover = GLASSESCOVERSEYES
- glass_colour_type = /datum/client_colour/glass_colour/gray
-
-/obj/item/clothing/glasses/welding/attack_self(mob/user)
- weldingvisortoggle(user)
-
-
/obj/item/clothing/glasses/blindfold
name = "blindfold"
desc = ""
@@ -316,122 +86,6 @@
M.color = "#[H.eye_color]"
. += M
-/obj/item/clothing/glasses/sunglasses/big
- desc = ""
- icon_state = "bigsunglasses"
- item_state = "bigsunglasses"
-
-/obj/item/clothing/glasses/thermal
- name = "optical thermal scanner"
- desc = ""
- icon_state = "thermal"
- item_state = "glasses"
- vision_flags = SEE_MOBS
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
- flash_protect = FLASH_PROTECTION_SENSITIVE
- glass_colour_type = /datum/client_colour/glass_colour/red
-
-/obj/item/clothing/glasses/thermal/emp_act(severity)
- . = ..()
- if(. & EMP_PROTECT_SELF)
- return
- thermal_overload()
-
-/obj/item/clothing/glasses/thermal/xray
- name = "syndicate xray goggles"
- desc = ""
- vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS
-
-/obj/item/clothing/glasses/thermal/monocle
- name = "thermoncle"
- desc = ""
- icon_state = "thermoncle"
- flags_1 = null //doesn't protect eyes because it's a monocle, duh
-
-/obj/item/clothing/glasses/thermal/monocle/examine(mob/user) //Different examiners see a different description!
- if(user.gender == MALE)
- desc = replacetext(desc, "person", "man")
- else if(user.gender == FEMALE)
- desc = replacetext(desc, "person", "woman")
- . = ..()
- desc = initial(desc)
-
-/obj/item/clothing/glasses/thermal/eyepatch
- name = "optical thermal eyepatch"
- desc = ""
- icon_state = "eyepatch"
- item_state = "eyepatch"
-
-/obj/item/clothing/glasses/cold
- name = "cold goggles"
- desc = ""
- icon_state = "cold"
- item_state = "cold"
-
-/obj/item/clothing/glasses/heat
- name = "heat goggles"
- desc = ""
- icon_state = "heat"
- item_state = "heat"
-
-/obj/item/clothing/glasses/orange
- name = "orange glasses"
- desc = ""
- icon_state = "orangeglasses"
- item_state = "orangeglasses"
- glass_colour_type = /datum/client_colour/glass_colour/lightorange
-
-/obj/item/clothing/glasses/red
- name = "red glasses"
- desc = ""
- icon_state = "redglasses"
- item_state = "redglasses"
- glass_colour_type = /datum/client_colour/glass_colour/red
-
-/obj/item/clothing/glasses/godeye
- name = "eye of god"
- desc = ""
- icon_state = "godeye"
- item_state = "godeye"
- vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS
- darkness_view = 8
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
- resistance_flags = LAVA_PROOF | FIRE_PROOF
- clothing_flags = SCAN_REAGENTS
-
-/obj/item/clothing/glasses/godeye/Initialize()
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, EYE_OF_GOD_TRAIT)
-
-/obj/item/clothing/glasses/godeye/attackby(obj/item/W as obj, mob/user as mob, params)
- if(istype(W, src) && W != src && W.loc == user)
- if(W.icon_state == "godeye")
- W.icon_state = "doublegodeye"
- W.item_state = "doublegodeye"
- W.desc = ""
- if(iscarbon(user))
- var/mob/living/carbon/C = user
- C.update_inv_wear_mask()
- else
- to_chat(user, "The eye winks at you and vanishes into the abyss, you feel really unlucky.")
- qdel(src)
- ..()
-
-/obj/item/clothing/glasses/AltClick(mob/user)
- if(glass_colour_type && ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.client)
- if(H.client.prefs)
- if(src == H.glasses)
- H.client.prefs.uses_glasses_colour = !H.client.prefs.uses_glasses_colour
- if(H.client.prefs.uses_glasses_colour)
- to_chat(H, "I will now see glasses colors.")
- else
- to_chat(H, "I will no longer see glasses colors.")
- H.update_glasses_color(src, 1)
- else
- return ..()
-
/obj/item/clothing/glasses/proc/change_glass_color(mob/living/carbon/human/H, datum/client_colour/glass_colour/new_color_type)
var/old_colour_type = glass_colour_type
if(!new_color_type || ispath(new_color_type)) //the new glass colour type must be null or a path.
diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm
deleted file mode 100644
index c2a90e27fa..0000000000
--- a/code/modules/clothing/glasses/engine_goggles.dm
+++ /dev/null
@@ -1,150 +0,0 @@
-//Engineering Mesons
-
-#define MODE_NONE ""
-#define MODE_MESON "meson"
-#define MODE_TRAY "t-ray"
-#define MODE_RAD "radiation"
-#define MODE_SHUTTLE "shuttle"
-
-/obj/item/clothing/glasses/meson/engine
- name = "engineering scanner goggles"
- desc = ""
- icon_state = "trayson-meson"
- item_state = "trayson-meson"
- actions_types = list(/datum/action/item_action/toggle_mode)
-
- vision_flags = NONE
- darkness_view = 2
- invis_view = SEE_INVISIBLE_LIVING
-
- var/list/modes = list(MODE_NONE = MODE_MESON, MODE_MESON = MODE_TRAY, MODE_TRAY = MODE_RAD, MODE_RAD = MODE_NONE)
- var/mode = MODE_NONE
- var/range = 1
-
-/obj/item/clothing/glasses/meson/engine/Initialize()
- . = ..()
- START_PROCESSING(SSobj, src)
- update_icon()
-
-/obj/item/clothing/glasses/meson/engine/Destroy()
- STOP_PROCESSING(SSobj, src)
- return ..()
-
-/obj/item/clothing/glasses/meson/engine/proc/toggle_mode(mob/user, voluntary)
- mode = modes[mode]
- to_chat(user, "[voluntary ? "You turn the goggles":"The goggles turn"] [mode ? "to [mode] mode":"off"][voluntary ? ".":"!"]")
-
- switch(mode)
- if(MODE_MESON)
- vision_flags = SEE_TURFS
- darkness_view = 1
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
-
- if(MODE_TRAY) //undoes the last mode, meson
- vision_flags = NONE
- darkness_view = 2
- lighting_alpha = null
-
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(H.glasses == src)
- H.update_sight()
-
- update_icon()
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
-
-/obj/item/clothing/glasses/meson/engine/attack_self(mob/user)
- toggle_mode(user, TRUE)
-
-/obj/item/clothing/glasses/meson/engine/process()
- if(!ishuman(loc))
- return
- var/mob/living/carbon/human/user = loc
- if(user.glasses != src || !user.client)
- return
- switch(mode)
- if(MODE_RAD)
- show_rads()
- if(MODE_SHUTTLE)
- show_shuttle()
-
-/obj/item/clothing/glasses/meson/engine/proc/show_rads()
- var/mob/living/carbon/human/user = loc
- var/list/rad_places = list()
- for(var/datum/component/radioactive/thing in SSradiation.processing)
- var/atom/owner = thing.parent
- var/turf/place = get_turf(owner)
- if(rad_places[place])
- rad_places[place] += thing.strength
- else
- rad_places[place] = thing.strength
-
- for(var/i in rad_places)
- var/turf/place = i
- if(get_dist(user, place) >= range*2) //Rads are easier to see than wires under the floor
- continue
- var/strength = round(rad_places[i] / 1000, 0.1)
- var/image/pic = new(loc = place)
- var/mutable_appearance/MA = new()
- MA.alpha = 180
- MA.maptext = "[strength]k"
- MA.color = "#64C864"
- MA.layer = FLY_LAYER
- pic.appearance = MA
- flick_overlay(pic, list(user.client), 8)
-
-/obj/item/clothing/glasses/meson/engine/proc/show_shuttle()
- var/mob/living/carbon/human/user = loc
- var/obj/docking_port/mobile/port = SSshuttle.get_containing_shuttle(user)
- if(!port)
- return
- var/list/shuttle_areas = port.shuttle_areas
- for(var/r in shuttle_areas)
- var/area/region = r
- for(var/turf/place in region.contents)
- if(get_dist(user, place) > 7)
- continue
- var/image/pic
- if(isshuttleturf(place))
- pic = new('icons/turf/overlays.dmi', place, "greenOverlay", AREA_LAYER)
- else
- pic = new('icons/turf/overlays.dmi', place, "redOverlay", AREA_LAYER)
- flick_overlay(pic, list(user.client), 8)
-
-/obj/item/clothing/glasses/meson/engine/update_icon()
- icon_state = "trayson-[mode]"
- update_mob()
-
-/obj/item/clothing/glasses/meson/engine/proc/update_mob()
- item_state = icon_state
- if(isliving(loc))
- var/mob/living/user = loc
- if(user.get_item_by_slot(SLOT_GLASSES) == src)
- user.update_inv_glasses()
- else
- user.update_inv_hands()
-
-/obj/item/clothing/glasses/meson/engine/tray //atmos techs have lived far too long without tray goggles while those damned engineers get their dual-purpose gogles all to themselves
- name = "optical t-ray scanner"
- icon_state = "trayson-t-ray"
- item_state = "trayson-t-ray"
- desc = ""
- range = 2
-
- modes = list(MODE_NONE = MODE_TRAY, MODE_TRAY = MODE_NONE)
-
-/obj/item/clothing/glasses/meson/engine/shuttle
- name = "shuttle region scanner"
- icon_state = "trayson-shuttle"
- item_state = "trayson-shuttle"
- desc = ""
-
- modes = list(MODE_NONE = MODE_SHUTTLE, MODE_SHUTTLE = MODE_NONE)
-
-#undef MODE_NONE
-#undef MODE_MESON
-#undef MODE_TRAY
-#undef MODE_RAD
-#undef MODE_SHUTTLE
diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm
deleted file mode 100644
index 26c549f9c3..0000000000
--- a/code/modules/clothing/glasses/hud.dm
+++ /dev/null
@@ -1,201 +0,0 @@
-/obj/item/clothing/glasses/hud
- name = "HUD"
- desc = ""
- flags_1 = null //doesn't protect eyes because it's a monocle, duh
- var/hud_type = null
- ///Used for topic calls. Just because you have a HUD display doesn't mean you should be able to interact with stuff.
- var/hud_trait = null
-
-
-/obj/item/clothing/glasses/hud/equipped(mob/living/carbon/human/user, slot)
- ..()
- if(slot != SLOT_GLASSES)
- return
- if(hud_type)
- var/datum/atom_hud/H = GLOB.huds[hud_type]
- H.add_hud_to(user)
- if(hud_trait)
- ADD_TRAIT(user, hud_trait, GLASSES_TRAIT)
-
-/obj/item/clothing/glasses/hud/dropped(mob/living/carbon/human/user)
- ..()
- if(!istype(user) || user.glasses != src)
- return
- if(hud_type)
- var/datum/atom_hud/H = GLOB.huds[hud_type]
- H.remove_hud_from(user)
- if(hud_trait)
- REMOVE_TRAIT(user, hud_trait, GLASSES_TRAIT)
-
-/obj/item/clothing/glasses/hud/emp_act(severity)
- . = ..()
- if(obj_flags & EMAGGED || . & EMP_PROTECT_SELF)
- return
- obj_flags |= EMAGGED
- desc = ""
-
-/obj/item/clothing/glasses/hud/emag_act(mob/user)
- if(obj_flags & EMAGGED)
- return
- obj_flags |= EMAGGED
- to_chat(user, "PZZTTPFFFT")
- desc = ""
-
-/obj/item/clothing/glasses/hud/health
- name = "health scanner HUD"
- desc = ""
- icon_state = "healthhud"
- hud_type = DATA_HUD_MEDICAL_ADVANCED
- hud_trait = TRAIT_MEDICAL_HUD
- glass_colour_type = /datum/client_colour/glass_colour/lightblue
-
-/obj/item/clothing/glasses/hud/health/night
- name = "night vision health scanner HUD"
- desc = ""
- icon_state = "healthhudnight"
- item_state = "glasses"
- darkness_view = 8
- flash_protect = FLASH_PROTECTION_SENSITIVE
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
- glass_colour_type = /datum/client_colour/glass_colour/green
-
-/obj/item/clothing/glasses/hud/health/sunglasses
- name = "medical HUDSunglasses"
- desc = ""
- icon_state = "sunhudmed"
- darkness_view = 1
- flash_protect = FLASH_PROTECTION_FLASH
- tint = 1
- glass_colour_type = /datum/client_colour/glass_colour/blue
-
-/obj/item/clothing/glasses/hud/diagnostic
- name = "diagnostic HUD"
- desc = ""
- icon_state = "diagnostichud"
- hud_type = DATA_HUD_DIAGNOSTIC_BASIC
- glass_colour_type = /datum/client_colour/glass_colour/lightorange
-
-/obj/item/clothing/glasses/hud/diagnostic/night
- name = "night vision diagnostic HUD"
- desc = ""
- icon_state = "diagnostichudnight"
- item_state = "glasses"
- darkness_view = 8
- flash_protect = FLASH_PROTECTION_SENSITIVE
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
- glass_colour_type = /datum/client_colour/glass_colour/green
-
-/obj/item/clothing/glasses/hud/diagnostic/sunglasses
- name = "diagnostic sunglasses"
- desc = ""
- icon_state = "sunhuddiag"
- item_state = "glasses"
- flash_protect = FLASH_PROTECTION_FLASH
- tint = 1
-
-/obj/item/clothing/glasses/hud/security
- name = "security HUD"
- desc = ""
- icon_state = "securityhud"
- hud_type = DATA_HUD_SECURITY_ADVANCED
- hud_trait = TRAIT_SECURITY_HUD
- glass_colour_type = /datum/client_colour/glass_colour/red
-
-/obj/item/clothing/glasses/hud/security/sunglasses/eyepatch
- name = "eyepatch HUD"
- desc = ""
- icon_state = "hudpatch"
-
-/obj/item/clothing/glasses/hud/security/sunglasses
- name = "security HUDSunglasses"
- desc = ""
- icon_state = "sunhudsec"
- darkness_view = 1
- flash_protect = FLASH_PROTECTION_FLASH
- tint = 1
- glass_colour_type = /datum/client_colour/glass_colour/darkred
-
-/obj/item/clothing/glasses/hud/security/night
- name = "night vision security HUD"
- desc = ""
- icon_state = "securityhudnight"
- darkness_view = 8
- flash_protect = FLASH_PROTECTION_SENSITIVE
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
- glass_colour_type = /datum/client_colour/glass_colour/green
-
-/obj/item/clothing/glasses/hud/security/sunglasses/gars
- name = "\improper HUD gar glasses"
- desc = ""
- icon_state = "gars"
- item_state = "garb"
- force = 10
- throwforce = 10
- throw_speed = 4
- attack_verb = list("sliced")
- hitsound = 'sound/blank.ogg'
- sharpness = IS_SHARP
-
-/obj/item/clothing/glasses/hud/security/sunglasses/gars/supergars
- name = "giga HUD gar glasses"
- desc = ""
- icon_state = "supergars"
- item_state = "garb"
- force = 12
- throwforce = 12
-
-/obj/item/clothing/glasses/hud/toggle
- name = "Toggle HUD"
- desc = ""
- actions_types = list(/datum/action/item_action/switch_hud)
-
-/obj/item/clothing/glasses/hud/toggle/attack_self(mob/user)
- if(!ishuman(user))
- return
- var/mob/living/carbon/human/wearer = user
- if (wearer.glasses != src)
- return
-
- if (hud_type)
- var/datum/atom_hud/H = GLOB.huds[hud_type]
- H.remove_hud_from(user)
-
- if (hud_type == DATA_HUD_MEDICAL_ADVANCED)
- hud_type = null
- else if (hud_type == DATA_HUD_SECURITY_ADVANCED)
- hud_type = DATA_HUD_MEDICAL_ADVANCED
- else
- hud_type = DATA_HUD_SECURITY_ADVANCED
-
- if (hud_type)
- var/datum/atom_hud/H = GLOB.huds[hud_type]
- H.add_hud_to(user)
-
-/obj/item/clothing/glasses/hud/toggle/thermal
- name = "thermal HUD scanner"
- desc = ""
- icon_state = "thermal"
- hud_type = DATA_HUD_SECURITY_ADVANCED
- vision_flags = SEE_MOBS
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
- glass_colour_type = /datum/client_colour/glass_colour/red
-
-/obj/item/clothing/glasses/hud/toggle/thermal/attack_self(mob/user)
- ..()
- switch (hud_type)
- if (DATA_HUD_MEDICAL_ADVANCED)
- icon_state = "meson"
- change_glass_color(user, /datum/client_colour/glass_colour/green)
- if (DATA_HUD_SECURITY_ADVANCED)
- icon_state = "thermal"
- change_glass_color(user, /datum/client_colour/glass_colour/red)
- else
- icon_state = "purple"
- change_glass_color(user, /datum/client_colour/glass_colour/purple)
- user.update_inv_glasses()
-
-/obj/item/clothing/glasses/hud/toggle/thermal/emp_act(severity)
- . = ..()
- if(. & EMP_PROTECT_SELF)
- return
- thermal_overload()
diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm
deleted file mode 100644
index 48b2050f9c..0000000000
--- a/code/modules/clothing/gloves/boxing.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-/obj/item/clothing/gloves/boxing
- name = "boxing gloves"
- desc = ""
- icon_state = "boxing"
- item_state = "boxing"
- equip_delay_other = 60
- species_exception = list(/datum/species/golem) // now you too can be a golem boxing champion
-
-/obj/item/clothing/gloves/boxing/green
- icon_state = "boxinggreen"
- item_state = "boxinggreen"
-
-/obj/item/clothing/gloves/boxing/blue
- icon_state = "boxingblue"
- item_state = "boxingblue"
-
-/obj/item/clothing/gloves/boxing/yellow
- icon_state = "boxingyellow"
- item_state = "boxingyellow"
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
deleted file mode 100644
index fd074395d9..0000000000
--- a/code/modules/clothing/gloves/color.dm
+++ /dev/null
@@ -1,180 +0,0 @@
-/obj/item/clothing/gloves/color
- dying_key = DYE_REGISTRY_GLOVES
-
-/obj/item/clothing/gloves/color/yellow
- desc = ""
- name = "insulated gloves"
- icon_state = "yellow"
- item_state = "ygloves"
- siemens_coefficient = 0
- permeability_coefficient = 0.05
- resistance_flags = NONE
-
-/obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap
- desc = ""
- name = "budget insulated gloves"
- icon_state = "yellow"
- item_state = "ygloves"
- siemens_coefficient = 1 //Set to a default of 1, gets overridden in Initialize()
- permeability_coefficient = 0.05
- resistance_flags = NONE
-
-/obj/item/clothing/gloves/color/fyellow/Initialize()
- . = ..()
- siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5)
-
-/obj/item/clothing/gloves/color/fyellow/old
- desc = ""
- name = "worn out insulated gloves"
-
-/obj/item/clothing/gloves/color/fyellow/old/Initialize()
- . = ..()
- siemens_coefficient = pick(0,0,0,0.5,0.5,0.5,0.75)
-
-/obj/item/clothing/gloves/color/black
- desc = ""
- name = "black gloves"
- icon_state = "black"
- item_state = "blackgloves"
- cold_protection = HANDS
- min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
- heat_protection = HANDS
- max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
- resistance_flags = NONE
- var/can_be_cut = TRUE
-
-/obj/item/clothing/gloves/color/black/attackby(obj/item/I, mob/user, params)
- if(I.tool_behaviour == TOOL_WIRECUTTER)
- if(can_be_cut && icon_state == initial(icon_state))//only if not dyed
- to_chat(user, "I snip the fingertips off of [src].")
- I.play_tool_sound(src)
- new /obj/item/clothing/gloves/fingerless(drop_location())
- qdel(src)
- ..()
-
-/obj/item/clothing/gloves/color/orange
- name = "orange gloves"
- desc = ""
- icon_state = "orange"
- item_state = "orangegloves"
-
-/obj/item/clothing/gloves/color/red
- name = "red gloves"
- desc = ""
- icon_state = "red"
- item_state = "redgloves"
-
-
-/obj/item/clothing/gloves/color/red/insulated
- name = "insulated gloves"
- desc = ""
- siemens_coefficient = 0
- permeability_coefficient = 0.05
- resistance_flags = NONE
-
-/obj/item/clothing/gloves/color/rainbow
- name = "rainbow gloves"
- desc = ""
- icon_state = "rainbow"
- item_state = "rainbowgloves"
-
-/obj/item/clothing/gloves/color/blue
- name = "blue gloves"
- desc = ""
- icon_state = "blue"
- item_state = "bluegloves"
-
-/obj/item/clothing/gloves/color/purple
- name = "purple gloves"
- desc = ""
- icon_state = "purple"
- item_state = "purplegloves"
-
-/obj/item/clothing/gloves/color/green
- name = "green gloves"
- desc = ""
- icon_state = "green"
- item_state = "greengloves"
-
-/obj/item/clothing/gloves/color/grey
- name = "grey gloves"
- desc = ""
- icon_state = "gray"
- item_state = "graygloves"
-
-/obj/item/clothing/gloves/color/light_brown
- name = "light brown gloves"
- desc = ""
- icon_state = "lightbrown"
- item_state = "lightbrowngloves"
-
-/obj/item/clothing/gloves/color/brown
- name = "brown gloves"
- desc = ""
- icon_state = "brown"
- item_state = "browngloves"
-
-/obj/item/clothing/gloves/color/captain
- desc = ""
- name = "captain's gloves"
- icon_state = "captain"
- item_state = "egloves"
- siemens_coefficient = 0
- permeability_coefficient = 0.05
- cold_protection = HANDS
- min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
- heat_protection = HANDS
- max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
- strip_delay = 60
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 50)
-
-/obj/item/clothing/gloves/color/latex
- name = "latex gloves"
- desc = ""
- icon_state = "latex"
- item_state = "latex"
- siemens_coefficient = 0.3
- permeability_coefficient = 0.01
- transfer_prints = TRUE
- resistance_flags = NONE
- var/carrytrait = TRAIT_QUICK_CARRY
-
-/obj/item/clothing/gloves/color/latex/equipped(mob/user, slot)
- ..()
- if(slot == SLOT_GLOVES)
- ADD_TRAIT(user, carrytrait, CLOTHING_TRAIT)
-
-/obj/item/clothing/gloves/color/latex/dropped(mob/user)
- ..()
- REMOVE_TRAIT(user, carrytrait, CLOTHING_TRAIT)
-
-/obj/item/clothing/gloves/color/latex/nitrile
- name = "nitrile gloves"
- desc = ""
- icon_state = "nitrile"
- item_state = "nitrilegloves"
- transfer_prints = FALSE
- carrytrait = TRAIT_QUICKER_CARRY
-
-/obj/item/clothing/gloves/color/white
- name = "white gloves"
- desc = ""
- icon_state = "white"
- item_state = "wgloves"
-
-/obj/effect/spawner/lootdrop/gloves
- name = "random gloves"
- desc = ""
- icon = 'icons/obj/clothing/gloves.dmi'
- icon_state = "random_gloves"
- loot = list(
- /obj/item/clothing/gloves/color/orange = 1,
- /obj/item/clothing/gloves/color/red = 1,
- /obj/item/clothing/gloves/color/blue = 1,
- /obj/item/clothing/gloves/color/purple = 1,
- /obj/item/clothing/gloves/color/green = 1,
- /obj/item/clothing/gloves/color/grey = 1,
- /obj/item/clothing/gloves/color/light_brown = 1,
- /obj/item/clothing/gloves/color/brown = 1,
- /obj/item/clothing/gloves/color/white = 1,
- /obj/item/clothing/gloves/color/rainbow = 1)
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
deleted file mode 100644
index bc66871d80..0000000000
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ /dev/null
@@ -1,67 +0,0 @@
-
-/obj/item/clothing/gloves/fingerless
- name = "fingerless gloves"
- desc = ""
- icon_state = "fingerless"
- item_state = "fingerless"
- transfer_prints = TRUE
- strip_delay = 40
- equip_delay_other = 20
- cold_protection = HANDS
- min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
- custom_price = 10
- undyeable = TRUE
-
-/obj/item/clothing/gloves/botanic_leather
- name = "botanist's leather gloves"
- desc = ""
- icon_state = "leather"
- item_state = "ggloves"
- permeability_coefficient = 0.9
- cold_protection = HANDS
- min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
- heat_protection = HANDS
- max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
- resistance_flags = NONE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30)
-
-/obj/item/clothing/gloves/combat
- name = "combat gloves"
- desc = ""
- icon_state = "black"
- item_state = "blackgloves"
- siemens_coefficient = 0
- permeability_coefficient = 0.05
- strip_delay = 80
- cold_protection = HANDS
- min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
- heat_protection = HANDS
- max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
- resistance_flags = NONE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
-
-/obj/item/clothing/gloves/bracer
- name = "bone bracers"
- desc = ""
- icon_state = "bracers"
- item_state = "bracers"
- transfer_prints = TRUE
- strip_delay = 40
- equip_delay_other = 20
- body_parts_covered = ARMS
- cold_protection = ARMS
- min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
- max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
- resistance_flags = NONE
- armor = list("melee" = 15, "bullet" = 25, "laser" = 15, "energy" = 15, "bomb" = 20, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
-
-/obj/item/clothing/gloves/rapid
- name = "Gloves of the North Star"
- desc = ""
- icon_state = "rapid"
- item_state = "rapid"
- transfer_prints = TRUE
-
-/obj/item/clothing/gloves/rapid/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/wearertargeting/punchcooldown)
diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm
index c40f837c27..f60e9e23da 100644
--- a/code/modules/clothing/head/_head.dm
+++ b/code/modules/clothing/head/_head.dm
@@ -19,57 +19,11 @@
///Special throw_impact for hats to frisbee hats at people to place them on their heads/attempt to de-hat them.
/obj/item/clothing/head/throw_impact(atom/hit_atom, datum/thrownthing/thrownthing)
. = ..()
- ///if the thrown object's target zone isn't the head
-/* if(thrownthing)
- if(thrownthing.target_zone != BODY_ZONE_HEAD)
- return
- ///ignore any hats with the tinfoil counter-measure enabled
- if(clothing_flags & ANTI_TINFOIL_MANEUVER)
- return
- ///if the hat happens to be capable of holding contents and has something in it. mostly to prevent super cheesy stuff like stuffing a mini-bomb in a hat and throwing it
- if(LAZYLEN(contents))
- return
- if(iscarbon(hit_atom))
- var/mob/living/carbon/H = hit_atom
- if(istype(H.head, /obj/item))
- var/obj/item/WH = H.head
- ///check if the item has NODROP
- if(HAS_TRAIT(WH, TRAIT_NODROP))
- H.visible_message("[src] bounces off [H]'s [WH.name]!", "[src] bounces off your [WH.name], falling to the floor.")
- return
- ///check if the item is an actual clothing head item, since some non-clothing items can be worn
- if(istype(WH, /obj/item/clothing/head))
- var/obj/item/clothing/head/WHH = WH
- ///SNUG_FIT hats are immune to being knocked off
- if(WHH.clothing_flags & SNUG_FIT)
- H.visible_message("[src] bounces off [H]'s [WHH.name]!", "[src] bounces off your [WHH.name], falling to the floor.")
- return
- ///if the hat manages to knock something off
- if(H.dropItemToGround(WH))
- H.visible_message("[src] knocks [WH] off [H]'s head!", "[WH] is suddenly knocked off your head by [src]!")
- if(H.equip_to_slot_if_possible(src, SLOT_HEAD, 0, 1, 1))
- H.visible_message("[src] lands neatly on [H]'s head!", "[src] lands perfectly onto your head!")
- return
- if(iscyborg(hit_atom))
- var/mob/living/silicon/robot/R = hit_atom
- ///hats in the borg's blacklist bounce off
- if(is_type_in_typecache(src, GLOB.blacklisted_borg_hats))
- R.visible_message("[src] bounces off [R]!", "[src] bounces off you, falling to the floor.")
- return
- else
- R.visible_message("[src] lands neatly on top of [R]!", "[src] lands perfectly on top of you.")
- R.place_on_head(src) //hats aren't designed to snugly fit borg heads or w/e so they'll always manage to knock eachother off
-*/
/obj/item/clothing/head/worn_overlays(isinhands = FALSE)
. = list()
-// if(!isinhands)
-// if(damaged_clothes)
-// . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet")
-// if(HAS_BLOOD_DNA(src))
-// . += mutable_appearance('icons/effects/blood.dmi', "helmetblood")
/obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE)
..()
diff --git a/code/modules/clothing/head/beanie.dm b/code/modules/clothing/head/beanie.dm
deleted file mode 100644
index 488ff7fce5..0000000000
--- a/code/modules/clothing/head/beanie.dm
+++ /dev/null
@@ -1,90 +0,0 @@
-
-//BeanieStation13 Redux
-
-//Plus a bobble hat, lets be inclusive!!
-
-/obj/item/clothing/head/beanie //Default is white, this is meant to be seen
- name = "white beanie"
- desc = ""
- icon_state = "beanie" //Default white
- custom_price = 10
-
-/obj/item/clothing/head/beanie/black
- name = "black beanie"
- icon_state = "beanie"
- color = "#4A4A4B" //Grey but it looks black
-
-/obj/item/clothing/head/beanie/red
- name = "red beanie"
- icon_state = "beanie"
- color = "#D91414" //Red
-
-/obj/item/clothing/head/beanie/green
- name = "green beanie"
- icon_state = "beanie"
- color = "#5C9E54" //Green
-
-/obj/item/clothing/head/beanie/darkblue
- name = "dark blue beanie"
- icon_state = "beanie"
- color = "#1E85BC" //Blue
-
-/obj/item/clothing/head/beanie/purple
- name = "purple beanie"
- icon_state = "beanie"
- color = "#9557C5" //purple
-
-/obj/item/clothing/head/beanie/yellow
- name = "yellow beanie"
- icon_state = "beanie"
- color = "#E0C14F" //Yellow
-
-/obj/item/clothing/head/beanie/orange
- name = "orange beanie"
- icon_state = "beanie"
- color = "#C67A4B" //orange
-
-/obj/item/clothing/head/beanie/cyan
- name = "cyan beanie"
- icon_state = "beanie"
- color = "#54A3CE" //Cyan (Or close to it)
-
-//Striped Beanies have unique sprites
-
-/obj/item/clothing/head/beanie/christmas
- name = "christmas beanie"
- icon_state = "beaniechristmas"
-
-/obj/item/clothing/head/beanie/striped
- name = "striped beanie"
- icon_state = "beaniestriped"
-
-/obj/item/clothing/head/beanie/stripedred
- name = "red striped beanie"
- icon_state = "beaniestripedred"
-
-/obj/item/clothing/head/beanie/stripedblue
- name = "blue striped beanie"
- icon_state = "beaniestripedblue"
-
-/obj/item/clothing/head/beanie/stripedgreen
- name = "green striped beanie"
- icon_state = "beaniestripedgreen"
-
-/obj/item/clothing/head/beanie/durathread
- name = "durathread beanie"
- desc = ""
- icon_state = "beaniedurathread"
- armor = list("melee" = 15, "bullet" = 5, "laser" = 15, "energy" = 5, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 5)
-
-/obj/item/clothing/head/beanie/waldo
- name = "red striped bobble hat"
- desc = ""
- icon_state = "waldo_hat"
-
-/obj/item/clothing/head/beanie/rasta
- name = "rastacap"
- desc = ""
- icon_state = "beanierasta"
-
-//No dog fashion sprites yet :( poor Ian can't be dope like the rest of us yet
diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm
deleted file mode 100644
index 13770d54a1..0000000000
--- a/code/modules/clothing/head/collectable.dm
+++ /dev/null
@@ -1,153 +0,0 @@
-
-//Hat Station 13
-
-/obj/item/clothing/head/collectable
- name = "collectable hat"
- desc = ""
-
-/obj/item/clothing/head/collectable/petehat
- name = "ultra rare Pete's hat!"
- desc = ""
- icon_state = "petehat"
-
-/obj/item/clothing/head/collectable/xenom
- name = "collectable xenomorph helmet!"
- desc = ""
- clothing_flags = SNUG_FIT
- icon_state = "xenom"
-
-/obj/item/clothing/head/collectable/chef
- name = "collectable chef's hat"
- desc = ""
- icon_state = "chef"
- item_state = "chef"
- dynamic_hair_suffix = ""
-
- dog_fashion = /datum/dog_fashion/head/chef
-
-/obj/item/clothing/head/collectable/paper
- name = "collectable paper hat"
- desc = ""
- icon_state = "paper"
-
- dog_fashion = /datum/dog_fashion/head
-
-/obj/item/clothing/head/collectable/tophat
- name = "collectable top hat"
- desc = ""
- icon_state = "tophat"
- item_state = "that"
-
-/obj/item/clothing/head/collectable/captain
- name = "collectable captain's hat"
- desc = ""
- icon_state = "captain"
- item_state = "caphat"
-
- dog_fashion = /datum/dog_fashion/head/captain
-
-/obj/item/clothing/head/collectable/police
- name = "collectable police officer's hat"
- desc = ""
- icon_state = "policehelm"
- dynamic_hair_suffix = ""
-
- dog_fashion = /datum/dog_fashion/head/warden
-
-/obj/item/clothing/head/collectable/beret
- name = "collectable beret"
- desc = ""
- icon_state = "beret"
-
- dog_fashion = /datum/dog_fashion/head/beret
-
-/obj/item/clothing/head/collectable/welding
- name = "collectable welding helmet"
- desc = ""
- icon_state = "welding"
- item_state = "welding"
- clothing_flags = SNUG_FIT
-
-/obj/item/clothing/head/collectable/slime
- name = "collectable slime hat"
- desc = ""
- icon_state = "headslime"
- item_state = "headslime"
- clothing_flags = SNUG_FIT
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/collectable/flatcap
- name = "collectable flat cap"
- desc = ""
- icon_state = "flat_cap"
- item_state = "detective"
-
-/obj/item/clothing/head/collectable/pirate
- name = "collectable pirate hat"
- desc = ""
- icon_state = "pirate"
- item_state = "pirate"
-
- dog_fashion = /datum/dog_fashion/head/pirate
-
-/obj/item/clothing/head/collectable/kitty
- name = "collectable kitty ears"
- desc = ""
- icon_state = "kitty"
- item_state = "kitty"
- dynamic_hair_suffix = ""
-
- dog_fashion = /datum/dog_fashion/head/kitty
-
-/obj/item/clothing/head/collectable/rabbitears
- name = "collectable rabbit ears"
- desc = ""
- icon_state = "bunny"
- item_state = "bunny"
- dynamic_hair_suffix = ""
-
- dog_fashion = /datum/dog_fashion/head/rabbit
-
-/obj/item/clothing/head/collectable/wizard
- name = "collectable wizard's hat"
- desc = ""
- icon_state = "wizard"
-
- dog_fashion = /datum/dog_fashion/head/blue_wizard
-
-/obj/item/clothing/head/collectable/hardhat
- name = "collectable hard hat"
- desc = ""
- clothing_flags = SNUG_FIT
- icon_state = "hardhat0_yellow"
- item_state = "hardhat0_yellow"
-
- dog_fashion = /datum/dog_fashion/head
-
-/obj/item/clothing/head/collectable/HoS
- name = "collectable HoS hat"
- desc = ""
- icon_state = "hoscap"
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/collectable/HoP
- name = "collectable HoP hat"
- desc = ""
- icon_state = "hopcap"
- dog_fashion = /datum/dog_fashion/head/hop
-
-/obj/item/clothing/head/collectable/thunderdome
- name = "collectable Thunderdome helmet"
- desc = ""
- icon_state = "thunderdome"
- item_state = "thunderdome"
- clothing_flags = SNUG_FIT
- flags_inv = HIDEHAIR
-
-/obj/item/clothing/head/collectable/swat
- name = "collectable SWAT helmet"
- desc = "" //Reference to the actual description
- icon_state = "swat"
- item_state = "swat"
- clothing_flags = SNUG_FIT
- flags_inv = HIDEHAIR
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
deleted file mode 100644
index f4f2c007c6..0000000000
--- a/code/modules/clothing/head/hardhat.dm
+++ /dev/null
@@ -1,158 +0,0 @@
-/obj/item/clothing/head/hardhat
- name = "hard hat"
- desc = ""
- icon_state = "hardhat0_yellow"
- item_state = "hardhat0_yellow"
- var/brightness_on = 4 //luminosity when on
- var/on = FALSE
- var/hat_type = "yellow" //Determines used sprites: hardhat[on]_[hat_type] and hardhat[on]_[hat_type]2 (lying down sprite)
- armor = list("melee" = 15, "bullet" = 5, "laser" = 20, "energy" = 10, "bomb" = 20, "bio" = 10, "rad" = 20, "fire" = 100, "acid" = 50)
- flags_inv = 0
- actions_types = list(/datum/action/item_action/toggle_helmet_light)
- clothing_flags = SNUG_FIT
- resistance_flags = FIRE_PROOF
- dynamic_hair_suffix = "+generic"
-
- dog_fashion = /datum/dog_fashion/head
-
-/obj/item/clothing/head/hardhat/attack_self(mob/living/user)
- toggle_helmet_light(user)
-
-/obj/item/clothing/head/hardhat/proc/toggle_helmet_light(mob/living/user)
- on = !on
- if(on)
- turn_on(user)
- else
- turn_off(user)
- update_icon()
-
-/obj/item/clothing/head/hardhat/update_icon()
- icon_state = "hardhat[on]_[hat_type]"
- item_state = "hardhat[on]_[hat_type]"
- if(ishuman(loc))
- var/mob/living/carbon/human/H = loc
- H.update_inv_head()
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon(force = TRUE)
- ..()
-
-/obj/item/clothing/head/hardhat/proc/turn_on(mob/user)
- set_light(brightness_on)
-
-/obj/item/clothing/head/hardhat/proc/turn_off(mob/user)
- set_light(0)
-
-/obj/item/clothing/head/hardhat/orange
- icon_state = "hardhat0_orange"
- item_state = "hardhat0_orange"
- hat_type = "orange"
- dog_fashion = null
-
-/obj/item/clothing/head/hardhat/red
- icon_state = "hardhat0_red"
- item_state = "hardhat0_red"
- hat_type = "red"
- dog_fashion = null
- name = "firefighter helmet"
- clothing_flags = STOPSPRESSUREDAMAGE
- heat_protection = HEAD
- max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
- cold_protection = HEAD
- min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
-
-/obj/item/clothing/head/hardhat/white
- icon_state = "hardhat0_white"
- item_state = "hardhat0_white"
- hat_type = "white"
- clothing_flags = STOPSPRESSUREDAMAGE
- heat_protection = HEAD
- max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
- cold_protection = HEAD
- min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
- dog_fashion = /datum/dog_fashion/head
-
-/obj/item/clothing/head/hardhat/dblue
- icon_state = "hardhat0_dblue"
- item_state = "hardhat0_dblue"
- hat_type = "dblue"
- dog_fashion = null
-
-/obj/item/clothing/head/hardhat/atmos
- icon_state = "hardhat0_atmos"
- item_state = "hardhat0_atmos"
- hat_type = "atmos"
- dog_fashion = null
- name = "atmospheric technician's firefighting helmet"
- desc = ""
- clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
- heat_protection = HEAD
- max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
- cold_protection = HEAD
- min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
-
-/obj/item/clothing/head/hardhat/weldhat
- name = "welding hard hat"
- desc = ""
- brightness_on = 3 //Needs a little bit of tradeoff
- dog_fashion = null
- actions_types = list(/datum/action/item_action/toggle_helmet_light, /datum/action/item_action/toggle_welding_screen)
- flash_protect = FLASH_PROTECTION_WELDER
- tint = 2
- flags_inv = HIDEEYES | HIDEFACE
- flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
- visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
- visor_flags_inv = HIDEEYES | HIDEFACE
- visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
-
-/obj/item/clothing/head/hardhat/weldhat/Initialize()
- . = ..()
- update_icon()
-
-/obj/item/clothing/head/hardhat/weldhat/attack_self(mob/living/user)
- toggle_helmet_light(user)
-
-/obj/item/clothing/head/hardhat/weldhat/AltClick(mob/user)
- if(user.canUseTopic(src, BE_CLOSE))
- toggle_welding_screen(user)
-
-/obj/item/clothing/head/hardhat/weldhat/proc/toggle_welding_screen(mob/living/user)
- if(weldingvisortoggle(user))
- playsound(src, 'sound/blank.ogg', 50, TRUE) //Visors don't just come from nothing
- update_icon()
-
-/obj/item/clothing/head/hardhat/weldhat/worn_overlays(isinhands)
- . = ..()
- if(!isinhands)
- . += mutable_appearance('icons/mob/clothing/head.dmi', "weldhelmet")
- if(!up)
- . += mutable_appearance('icons/mob/clothing/head.dmi', "weldvisor")
-
-/obj/item/clothing/head/hardhat/weldhat/update_icon()
- cut_overlays()
- if(!up)
- add_overlay("weldvisor")
- ..()
-
-/obj/item/clothing/head/hardhat/weldhat/orange
- icon_state = "hardhat0_orange"
- item_state = "hardhat0_orange"
- hat_type = "orange"
-
-/obj/item/clothing/head/hardhat/weldhat/white
- desc = "" //This bulb is not smaller
- icon_state = "hardhat0_white"
- item_state = "hardhat0_white"
- brightness_on = 4 //Boss always takes the best stuff
- hat_type = "white"
- clothing_flags = STOPSPRESSUREDAMAGE
- heat_protection = HEAD
- max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
- cold_protection = HEAD
- min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
-
-/obj/item/clothing/head/hardhat/weldhat/dblue
- icon_state = "hardhat0_dblue"
- item_state = "hardhat0_dblue"
- hat_type = "dblue"
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
deleted file mode 100644
index a27fd3e787..0000000000
--- a/code/modules/clothing/head/helmet.dm
+++ /dev/null
@@ -1,387 +0,0 @@
-/obj/item/clothing/head/helmet
- name = "helmet"
- desc = ""
- icon_state = "helmet"
- item_state = "helmet"
- armor = list("melee" = 35, "bullet" = 30, "laser" = 30,"energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
- cold_protection = HEAD
- min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT
- heat_protection = HEAD
- max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT
- strip_delay = 60
- clothing_flags = SNUG_FIT
- flags_cover = HEADCOVERSEYES
- flags_inv = HIDEHAIR
-
- dog_fashion = /datum/dog_fashion/head/helmet
-
- var/can_flashlight = FALSE //if a flashlight can be mounted. if it has a flashlight and this is false, it is permanently attached.
- var/obj/item/flashlight/seclite/attached_light
- var/datum/action/item_action/toggle_helmet_flashlight/alight
-
-/obj/item/clothing/head/helmet/Initialize()
- . = ..()
- if(attached_light)
- alight = new(src)
-
-/obj/item/clothing/head/helmet/examine(mob/user)
- . = ..()
- if(attached_light)
- . += "It has \a [attached_light] [can_flashlight ? "" : "permanently "]mounted on it."
- if(can_flashlight)
- . += "[attached_light] looks like it can be unscrewed from [src]."
- else if(can_flashlight)
- . += "It has a mounting point for a seclite."
-
-/obj/item/clothing/head/helmet/Destroy()
- QDEL_NULL(attached_light)
- return ..()
-
-/obj/item/clothing/head/helmet/handle_atom_del(atom/A)
- if(A == attached_light)
- attached_light = null
- update_helmlight()
- update_icon()
- QDEL_NULL(alight)
- return ..()
-
-/obj/item/clothing/head/helmet/alt
- name = "bulletproof helmet"
- desc = ""
- icon_state = "helmetalt"
- item_state = "helmetalt"
- armor = list("melee" = 15, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
- can_flashlight = TRUE
- dog_fashion = null
-
-/obj/item/clothing/head/helmet/old
- name = "degrading helmet"
- desc = ""
- tint = 2
-
-/obj/item/clothing/head/helmet/blueshirt
- name = "blue helmet"
- desc = ""
- icon_state = "blueshift"
- item_state = "blueshift"
- custom_premium_price = 450
-
-/obj/item/clothing/head/helmet/riot
- name = "riot helmet"
- desc = ""
- icon_state = "riot"
- item_state = "helmet"
- toggle_message = "You pull the visor down on"
- alt_toggle_message = "You push the visor up on"
- can_toggle = 1
- armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
- flags_inv = HIDEEARS|HIDEFACE
- strip_delay = 80
- actions_types = list(/datum/action/item_action/toggle)
- visor_flags_inv = HIDEFACE
- toggle_cooldown = 0
- flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
- visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
- dog_fashion = null
-
-/obj/item/clothing/head/helmet/attack_self(mob/user)
- if(can_toggle && !user.incapacitated())
- if(world.time > cooldown + toggle_cooldown)
- cooldown = world.time
- up = !up
- flags_1 ^= visor_flags
- flags_inv ^= visor_flags_inv
- flags_cover ^= visor_flags_cover
- icon_state = "[initial(icon_state)][up ? "up" : ""]"
- to_chat(user, "[up ? alt_toggle_message : toggle_message] \the [src].")
-
- user.update_inv_head()
- if(iscarbon(user))
- var/mob/living/carbon/C = user
- C.head_update(src, forced = 1)
-
- if(active_sound)
- INVOKE_ASYNC(src, PROC_REF(visor_loop))
-
-/obj/item/clothing/head/helmet/proc/visor_loop()
- while(up)
- playsound(src, "[active_sound]", 100, FALSE, 4)
- sleep(15)
-
-/obj/item/clothing/head/helmet/justice
- name = "helmet of justice"
- desc = ""
- icon_state = "justice"
- toggle_message = "You turn off the lights on"
- alt_toggle_message = "You turn on the lights on"
- actions_types = list(/datum/action/item_action/toggle_helmet_light)
- can_toggle = 1
- toggle_cooldown = 20
- active_sound = 'sound/blank.ogg'
- dog_fashion = null
-
-/obj/item/clothing/head/helmet/justice/escape
- name = "alarm helmet"
- desc = ""
- icon_state = "justice2"
- toggle_message = "You turn off the light on"
- alt_toggle_message = "You turn on the light on"
-
-/obj/item/clothing/head/helmet/swat
- name = "\improper SWAT helmet"
- desc = ""
- icon_state = "swatsyndie"
- item_state = "swatsyndie"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 40, "bomb" = 50, "bio" = 90, "rad" = 20, "fire" = 50, "acid" = 50)
- cold_protection = HEAD
- min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
- heat_protection = HEAD
- max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
- clothing_flags = STOPSPRESSUREDAMAGE
- strip_delay = 80
- dog_fashion = null
-
-/obj/item/clothing/head/helmet/police
- name = "police officer's hat"
- desc = ""
- icon_state = "policehelm"
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/helmet/swat/nanotrasen
- name = "\improper SWAT helmet"
- desc = ""
- icon_state = "swat"
- item_state = "swat"
-
-/obj/item/clothing/head/helmet/thunderdome
- name = "\improper Thunderdome helmet"
- desc = ""
- flags_inv = HIDEEARS|HIDEHAIR
- icon_state = "thunderdome"
- item_state = "thunderdome"
- armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90)
- cold_protection = HEAD
- min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
- heat_protection = HEAD
- max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
- strip_delay = 80
- dog_fashion = null
-
-/obj/item/clothing/head/helmet/roman
- name = "\improper Roman helmet"
- desc = ""
- flags_inv = HIDEEARS|HIDEHAIR
- flags_cover = HEADCOVERSEYES
- armor = list("melee" = 25, "bullet" = 0, "laser" = 25, "energy" = 10, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
- resistance_flags = FIRE_PROOF
- icon_state = "roman"
- item_state = "roman"
- strip_delay = 100
- dog_fashion = null
-
-/obj/item/clothing/head/helmet/roman/fake
- desc = ""
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
-
-/obj/item/clothing/head/helmet/roman/legionnaire
- name = "\improper Roman legionnaire helmet"
- desc = ""
- icon_state = "roman_c"
- item_state = "roman_c"
-
-/obj/item/clothing/head/helmet/roman/legionnaire/fake
- desc = ""
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
-
-/obj/item/clothing/head/helmet/gladiator
- name = "gladiator helmet"
- desc = ""
- icon_state = "gladiator"
- item_state = "gladiator"
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR
- flags_cover = HEADCOVERSEYES
- dog_fashion = null
-
-/obj/item/clothing/head/helmet/redtaghelm
- name = "red laser tag helmet"
- desc = ""
- icon_state = "redtaghelm"
- flags_cover = HEADCOVERSEYES
- item_state = "redtaghelm"
- armor = list("melee" = 15, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
- // Offer about the same protection as a hardhat.
- dog_fashion = null
-
-/obj/item/clothing/head/helmet/bluetaghelm
- name = "blue laser tag helmet"
- desc = ""
- icon_state = "bluetaghelm"
- flags_cover = HEADCOVERSEYES
- item_state = "bluetaghelm"
- armor = list("melee" = 15, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
- // Offer about the same protection as a hardhat.
- dog_fashion = null
-
-/obj/item/clothing/head/helmet/knight
- name = "medieval helmet"
- desc = ""
- icon_state = "knight_green"
- item_state = "knight_green"
- armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR
- flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
- strip_delay = 80
- dog_fashion = null
-
-
-/obj/item/clothing/head/helmet/knight/Initialize(mapload)
- . = ..()
- var/datum/component = GetComponent(/datum/component/wearertargeting/earprotection)
- qdel(component)
-
-/obj/item/clothing/head/helmet/knight/blue
- icon_state = "knight_blue"
- item_state = "knight_blue"
-
-/obj/item/clothing/head/helmet/knight/yellow
- icon_state = "knight_yellow"
- item_state = "knight_yellow"
-
-/obj/item/clothing/head/helmet/knight/red
- icon_state = "knight_red"
- item_state = "knight_red"
-
-/obj/item/clothing/head/helmet/knight/greyscale
- name = "knight helmet"
- desc = ""
- icon_state = "knight_greyscale"
- item_state = "knight_greyscale"
- armor = list("melee" = 35, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 40, "acid" = 40)
- material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR//Can change color and add prefix
-
-/obj/item/clothing/head/helmet/skull
- name = "skull helmet"
- desc = ""
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
- flags_cover = HEADCOVERSEYES
- armor = list("melee" = 35, "bullet" = 25, "laser" = 25, "energy" = 35, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
- icon_state = "skull"
- item_state = "skull"
- strip_delay = 100
-
-/obj/item/clothing/head/helmet/durathread
- name = "durathread helmet"
- desc = ""
- icon_state = "durathread"
- item_state = "durathread"
- resistance_flags = FLAMMABLE
- armor = list("melee" = 20, "bullet" = 10, "laser" = 30, "energy" = 40, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 50)
- strip_delay = 60
-
-/obj/item/clothing/head/helmet/rus_helmet
- name = "russian helmet"
- desc = ""
- icon_state = "rus_helmet"
- item_state = "rus_helmet"
- armor = list("melee" = 25, "bullet" = 30, "laser" = 0, "energy" = 10, "bomb" = 10, "bio" = 0, "rad" = 20, "fire" = 20, "acid" = 50)
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/helmet
-
-/obj/item/clothing/head/helmet/rus_ushanka
- name = "battle ushanka"
- desc = ""
- icon_state = "rus_ushanka"
- item_state = "rus_ushanka"
- body_parts_covered = HEAD
- cold_protection = HEAD
- min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
- armor = list("melee" = 25, "bullet" = 20, "laser" = 20, "energy" = 30, "bomb" = 20, "bio" = 50, "rad" = 20, "fire" = -10, "acid" = 50)
-
-//LightToggle
-
-/obj/item/clothing/head/helmet/update_icon()
- var/state = "[initial(icon_state)]"
- if(attached_light)
- if(attached_light.on)
- state += "-flight-on" //"helmet-flight-on" // "helmet-cam-flight-on"
- else
- state += "-flight" //etc.
-
- icon_state = state
-
- if(ishuman(loc))
- var/mob/living/carbon/human/H = loc
- H.update_inv_head()
-
-/obj/item/clothing/head/helmet/ui_action_click(mob/user, action)
- if(istype(action, alight))
- toggle_helmlight()
- else
- ..()
-
-/obj/item/clothing/head/helmet/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/flashlight/seclite))
- var/obj/item/flashlight/seclite/S = I
- if(can_flashlight && !attached_light)
- if(!user.transferItemToLoc(S, src))
- return
- to_chat(user, "I click [S] into place on [src].")
- if(S.on)
- set_light(0)
- attached_light = S
- update_icon()
- update_helmlight()
- alight = new(src)
- if(loc == user)
- alight.Grant(user)
- return
- return ..()
-
-/obj/item/clothing/head/helmet/screwdriver_act(mob/living/user, obj/item/I)
- . = ..()
- if(can_flashlight && attached_light) //if it has a light but can_flashlight is false, the light is permanently attached.
- I.play_tool_sound(src)
- to_chat(user, "I unscrew [attached_light] from [src].")
- attached_light.forceMove(drop_location())
- if(Adjacent(user))
- user.put_in_hands(attached_light)
-
- var/obj/item/flashlight/removed_light = attached_light
- attached_light = null
- update_helmlight()
- removed_light.update_brightness(user)
- update_icon()
- user.update_inv_head()
- QDEL_NULL(alight)
- return TRUE
-
-/obj/item/clothing/head/helmet/proc/toggle_helmlight()
- set name = "Toggle Helmetlight"
- set hidden = 1
- set desc = ""
- if(!usr.client.holder)
- return
- if(!attached_light)
- return
-
- var/mob/user = usr
- if(user.incapacitated())
- return
- attached_light.on = !attached_light.on
- to_chat(user, "I toggle the helmet-light [attached_light.on ? "on":"off"].")
-
- playsound(user, 'sound/blank.ogg', 100, TRUE)
- update_helmlight()
-
-/obj/item/clothing/head/helmet/proc/update_helmlight()
- if(attached_light)
- if(attached_light.on)
- set_light(attached_light.light_outer_range)
- else
- set_light(0)
- update_icon()
-
- else
- set_light(0)
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
deleted file mode 100644
index 9c31a21a0a..0000000000
--- a/code/modules/clothing/head/jobs.dm
+++ /dev/null
@@ -1,270 +0,0 @@
-//defines the drill hat's yelling setting
-#define DRILL_DEFAULT "default"
-#define DRILL_SHOUTING "shouting"
-#define DRILL_YELLING "yelling"
-#define DRILL_CANADIAN "canadian"
-
-//Chef
-/obj/item/clothing/head/chefhat
- name = "chef's hat"
- item_state = "chef"
- icon_state = "chef"
- desc = ""
- strip_delay = 10
- equip_delay_other = 10
- dynamic_hair_suffix = ""
- dog_fashion = /datum/dog_fashion/head/chef
-
-/obj/item/clothing/head/chefhat/suicide_act(mob/user)
- user.visible_message("[user] is donning [src]! It looks like [user.p_theyre()] trying to become a chef.")
- user.say("Bork Bork Bork!", forced = "chef hat suicide")
- sleep(20)
- user.visible_message("[user] climbs into an imaginary oven!")
- user.say("BOOORK!", forced = "chef hat suicide")
- playsound(user, 'sound/blank.ogg', 50, TRUE)
- return(FIRELOSS)
-
-//Captain
-/obj/item/clothing/head/caphat
- name = "captain's hat"
- desc = ""
- icon_state = "captain"
- item_state = "that"
- flags_inv = 0
- armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 35, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
- strip_delay = 60
- dog_fashion = /datum/dog_fashion/head/captain
-
-//Captain: This is no longer space-worthy
-/obj/item/clothing/head/caphat/parade
- name = "captain's parade cap"
- desc = ""
- icon_state = "capcap"
-
- dog_fashion = null
-
-
-//Head of Personnel
-/obj/item/clothing/head/hopcap
- name = "head of personnel's cap"
- icon_state = "hopcap"
- desc = ""
- armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 35, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
- dog_fashion = /datum/dog_fashion/head/hop
-
-//Chaplain
-/obj/item/clothing/head/nun_hood
- name = "nun hood"
- desc = ""
- icon_state = "nun_hood"
- flags_inv = HIDEHAIR
- flags_cover = HEADCOVERSEYES
-
-/obj/item/clothing/head/bishopmitre
- name = "bishop mitre"
- desc = ""
- icon_state = "bishopmitre"
-
-//Detective
-/obj/item/clothing/head/fedora/det_hat
- name = "detective's fedora"
- desc = ""
- armor = list("melee" = 25, "bullet" = 5, "laser" = 25, "energy" = 35, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 50)
- icon_state = "detective"
- var/candy_cooldown = 0
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/fedora/detective
- dog_fashion = /datum/dog_fashion/head/detective
-
-/obj/item/clothing/head/fedora/det_hat/Initialize()
- . = ..()
- new /obj/item/reagent_containers/food/drinks/flask/det(src)
-
-/obj/item/clothing/head/fedora/det_hat/examine(mob/user)
- . = ..()
- . += "Alt-click to take a candy corn."
-
-/obj/item/clothing/head/fedora/det_hat/AltClick(mob/user)
- if(user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
- ..()
- if(loc == user)
- if(candy_cooldown < world.time)
- var/obj/item/reagent_containers/food/snacks/candy_corn/CC = new /obj/item/reagent_containers/food/snacks/candy_corn(src)
- user.put_in_hands(CC)
- to_chat(user, "I slip a candy corn from your hat.")
- candy_cooldown = world.time+1200
- else
- to_chat(user, "I just took a candy corn! You should wait a couple minutes, lest you burn through your stash.")
-
-
-//Mime
-/obj/item/clothing/head/beret
- name = "beret"
- desc = ""
- icon_state = "beret"
- dog_fashion = /datum/dog_fashion/head/beret
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/beret/vintage
- name = "vintage beret"
- desc = ""
- icon_state = "vintageberet"
- dog_fashion = null
-
-/obj/item/clothing/head/beret/archaic
- name = "archaic beret"
- desc = ""
- icon_state = "archaicberet"
- dog_fashion = null
-
-/obj/item/clothing/head/beret/black
- name = "black beret"
- desc = ""
- icon_state = "beretblack"
-
-/obj/item/clothing/head/beret/highlander
- desc = ""
- dog_fashion = null //THIS IS FOR SLAUGHTER, NOT PUPPIES
-
-/obj/item/clothing/head/beret/highlander/Initialize()
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, HIGHLANDER)
-
-/obj/item/clothing/head/beret/durathread
- name = "durathread beret"
- desc = "A beret made from durathread, its resilient fibres provide some protection to the wearer."
- icon_state = "beretdurathread"
- armor = list("melee" = 15, "bullet" = 5, "laser" = 15, "energy" = 25, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 5)
-
-//Security
-
-/obj/item/clothing/head/HoS
- name = "head of security cap"
- desc = ""
- icon_state = "hoscap"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 25, "energy" = 35, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 60)
- strip_delay = 80
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/HoS/syndicate
- name = "syndicate cap"
- desc = ""
-
-/obj/item/clothing/head/HoS/beret
- name = "head of security beret"
- desc = ""
- icon_state = "hosberetblack"
-
-/obj/item/clothing/head/HoS/beret/syndicate
- name = "syndicate beret"
- desc = ""
-
-/obj/item/clothing/head/warden
- name = "warden's police hat"
- desc = ""
- icon_state = "policehelm"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 60)
- strip_delay = 60
- dog_fashion = /datum/dog_fashion/head/warden
-
-/obj/item/clothing/head/warden/drill
- name = "warden's campaign hat"
- desc = ""
- icon_state = "wardendrill"
- item_state = "wardendrill"
- dog_fashion = null
- var/mode = DRILL_DEFAULT
-
-/obj/item/clothing/head/warden/drill/screwdriver_act(mob/living/carbon/human/user, obj/item/I)
- if(..())
- return TRUE
- switch(mode)
- if(DRILL_DEFAULT)
- to_chat(user, "I set the voice circuit to the middle position.")
- mode = DRILL_SHOUTING
- if(DRILL_SHOUTING)
- to_chat(user, "I set the voice circuit to the last position.")
- mode = DRILL_YELLING
- if(DRILL_YELLING)
- to_chat(user, "I set the voice circuit to the first position.")
- mode = DRILL_DEFAULT
- if(DRILL_CANADIAN)
- to_chat(user, "I adjust voice circuit but nothing happens, probably because it's broken.")
- return TRUE
-
-/obj/item/clothing/head/warden/drill/wirecutter_act(mob/living/user, obj/item/I)
- ..()
- if(mode != DRILL_CANADIAN)
- to_chat(user, "I broke the voice circuit!")
- mode = DRILL_CANADIAN
- return TRUE
-
-/obj/item/clothing/head/warden/drill/equipped(mob/M, slot)
- . = ..()
- if (slot == SLOT_HEAD)
- RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(handle_speech))
- else
- UnregisterSignal(M, COMSIG_MOB_SAY)
-
-/obj/item/clothing/head/warden/drill/dropped(mob/M)
- . = ..()
- UnregisterSignal(M, COMSIG_MOB_SAY)
-
-/obj/item/clothing/head/warden/drill/proc/handle_speech(datum/source, list/speech_args)
- var/message = speech_args[SPEECH_MESSAGE]
- if(message[1] != "*")
- switch (mode)
- if(DRILL_SHOUTING)
- message += "!"
- if(DRILL_YELLING)
- message += "!!"
- if(DRILL_CANADIAN)
- message = " [message]"
- var/list/canadian_words = strings("canadian_replacement.json", "canadian")
-
- for(var/key in canadian_words)
- var/value = canadian_words[key]
- if(islist(value))
- value = pick(value)
-
- message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
- message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
- message = replacetextEx(message, " [key]", " [value]")
-
- if(prob(30))
- message += pick(", eh?", ", EH?")
- speech_args[SPEECH_MESSAGE] = message
-
-/obj/item/clothing/head/beret/sec
- name = "security beret"
- desc = ""
- icon_state = "beret_badge"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50)
- strip_delay = 60
- dog_fashion = null
-
-/obj/item/clothing/head/beret/sec/navyhos
- name = "head of security's beret"
- desc = ""
- icon_state = "hosberet"
-
-/obj/item/clothing/head/beret/sec/navywarden
- name = "warden's beret"
- desc = ""
- icon_state = "wardenberet"
- armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 50)
- strip_delay = 60
-
-/obj/item/clothing/head/beret/sec/navyofficer
- desc = ""
- icon_state = "officerberet"
-
-//Curator
-/obj/item/clothing/head/fedora/curator
- name = "treasure hunter's fedora"
- desc = ""
- icon_state = "curator"
-
-#undef DRILL_DEFAULT
-#undef DRILL_SHOUTING
-#undef DRILL_YELLING
-#undef DRILL_CANADIAN
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
deleted file mode 100644
index 88982a697c..0000000000
--- a/code/modules/clothing/head/misc.dm
+++ /dev/null
@@ -1,442 +0,0 @@
-
-
-/obj/item/clothing/head/centhat
- name = "\improper CentCom hat"
- icon_state = "centcom"
- desc = ""
- item_state = "that"
- flags_inv = 0
- armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
- strip_delay = 80
-
-/obj/item/clothing/head/powdered_wig
- name = "powdered wig"
- desc = ""
- icon_state = "pwig"
- item_state = "pwig"
-
-/obj/item/clothing/head/that
- name = "top-hat"
- desc = ""
- icon_state = "tophat"
- item_state = "that"
- dog_fashion = /datum/dog_fashion/head
- throwforce = 1
-
-/obj/item/clothing/head/canada
- name = "striped red tophat"
- desc = ""
- icon_state = "canada"
- item_state = "canada"
-
-/obj/item/clothing/head/redcoat
- name = "redcoat's hat"
- icon_state = "redcoat"
- desc = ""
-
-/obj/item/clothing/head/mailman
- name = "mailman's hat"
- icon_state = "mailman"
- desc = ""
-
-/obj/item/clothing/head/plaguedoctorhat
- name = "plague doctor's hat"
- desc = ""
- icon_state = "plaguedoctor"
- permeability_coefficient = 0.01
-
-/obj/item/clothing/head/hasturhood
- name = "hastur's hood"
- desc = ""
- icon_state = "hasturhood"
- flags_inv = HIDEHAIR
- flags_cover = HEADCOVERSEYES
-
-/obj/item/clothing/head/nursehat
- name = "nurse's hat"
- desc = ""
- icon_state = "nursehat"
- dynamic_hair_suffix = ""
-
- dog_fashion = /datum/dog_fashion/head/nurse
-
-/obj/item/clothing/head/syndicatefake
- name = "black space-helmet replica"
- icon_state = "syndicate-helm-black-red"
- item_state = "syndicate-helm-black-red"
- desc = ""
- clothing_flags = SNUG_FIT
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
-
-/obj/item/clothing/head/cueball
- name = "cueball helmet"
- desc = ""
- icon_state = "cueball"
- item_state="cueball"
- clothing_flags = SNUG_FIT
- flags_cover = HEADCOVERSEYES|HEADCOVERSMOUTH
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
-
-/obj/item/clothing/head/snowman
- name = "Snowman Head"
- desc = ""
- icon_state = "snowman_h"
- item_state = "snowman_h"
- clothing_flags = SNUG_FIT
- flags_cover = HEADCOVERSEYES
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
-
-/obj/item/clothing/head/justice
- name = "justice hat"
- desc = ""
- icon_state = "justicered"
- item_state = "justicered"
- clothing_flags = SNUG_FIT
- flags_inv = HIDEHAIR|HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR
- flags_cover = HEADCOVERSEYES
-
-/obj/item/clothing/head/justice/blue
- icon_state = "justiceblue"
- item_state = "justiceblue"
-
-/obj/item/clothing/head/justice/yellow
- icon_state = "justiceyellow"
- item_state = "justiceyellow"
-
-/obj/item/clothing/head/justice/green
- icon_state = "justicegreen"
- item_state = "justicegreen"
-
-/obj/item/clothing/head/justice/pink
- icon_state = "justicepink"
- item_state = "justicepink"
-
-/obj/item/clothing/head/rabbitears
- name = "rabbit ears"
- desc = ""
- icon_state = "bunny"
- dynamic_hair_suffix = ""
-
- dog_fashion = /datum/dog_fashion/head/rabbit
-
-/obj/item/clothing/head/pirate
- name = "pirate hat"
- desc = ""
- icon_state = "pirate"
- item_state = "pirate"
- dog_fashion = /datum/dog_fashion/head/pirate
-
-/obj/item/clothing/head/pirate
- var/datum/language/piratespeak/L = new
-
-/obj/item/clothing/head/pirate/equipped(mob/user, slot)
- . = ..()
- if(!ishuman(user))
- return
- if(slot == SLOT_HEAD)
- user.grant_language(/datum/language/piratespeak/)
- to_chat(user, "I suddenly know how to speak like a pirate!")
-
-/obj/item/clothing/head/pirate/dropped(mob/user)
- . = ..()
- if(!ishuman(user))
- return
- var/mob/living/carbon/human/H = user
- if(H.get_item_by_slot(SLOT_HEAD) == src)
- user.remove_language(/datum/language/piratespeak/)
- to_chat(user, "I can no longer speak like a pirate.")
-
-/obj/item/clothing/head/pirate/captain
- icon_state = "hgpiratecap"
- item_state = "hgpiratecap"
-
-/obj/item/clothing/head/bandana
- name = "pirate bandana"
- desc = ""
- icon_state = "bandana"
- item_state = "bandana"
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/bowler
- name = "bowler-hat"
- desc = ""
- icon_state = "bowler"
- item_state = "bowler"
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/witchwig
- name = "witch costume wig"
- desc = ""
- icon_state = "witch"
- item_state = "witch"
- flags_inv = HIDEHAIR
-
-/obj/item/clothing/head/chicken
- name = "chicken suit head"
- desc = ""
- icon_state = "chickenhead"
- item_state = "chickensuit"
- clothing_flags = SNUG_FIT
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
-
-/obj/item/clothing/head/griffin
- name = "griffon head"
- desc = ""
- icon_state = "griffinhat"
- item_state = "griffinhat"
- clothing_flags = SNUG_FIT
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
-
-/obj/item/clothing/head/bearpelt
- name = "bear pelt hat"
- desc = ""
- icon_state = "bearpelt"
- item_state = "bearpelt"
-
-/obj/item/clothing/head/xenos
- name = "xenos helmet"
- icon_state = "xenos"
- item_state = "xenos_helm"
- desc = ""
- clothing_flags = SNUG_FIT
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
- flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
-
-/obj/item/clothing/head/fedora
- name = "fedora"
- icon_state = "fedora"
- item_state = "fedora"
- desc = ""
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/small/fedora
-
-/obj/item/clothing/head/fedora/suicide_act(mob/user)
- if(user.gender == FEMALE)
- return 0
- var/mob/living/carbon/human/H = user
- user.visible_message("[user] is donning [src]! It looks like [user.p_theyre()] trying to be nice to girls.")
- user.say("M'lady.", forced = "fedora suicide")
- sleep(10)
- H.facial_hairstyle = "Neckbeard"
- return(BRUTELOSS)
-
-/obj/item/clothing/head/sombrero
- name = "sombrero"
- icon_state = "sombrero"
- item_state = "sombrero"
- desc = ""
- flags_inv = HIDEHAIR
-
- dog_fashion = /datum/dog_fashion/head/sombrero
-
-/obj/item/clothing/head/sombrero/green
- name = "green sombrero"
- icon_state = "greensombrero"
- item_state = "greensombrero"
- desc = ""
- flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
- dog_fashion = null
-
-/obj/item/clothing/head/sombrero/shamebrero
- name = "shamebrero"
- icon_state = "shamebrero"
- item_state = "shamebrero"
- desc = ""
- dog_fashion = null
-
-/obj/item/clothing/head/sombrero/shamebrero/Initialize()
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT)
-
-/obj/item/clothing/head/flatcap
- name = "flat cap"
- desc = ""
- icon_state = "flat_cap"
- item_state = "detective"
-
-/obj/item/clothing/head/hunter
- name = "bounty hunting hat"
- desc = ""
- icon_state = "hunter"
- item_state = "hunter"
- armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- resistance_flags = FIRE_PROOF | ACID_PROOF
-
-/obj/item/clothing/head/cone
- desc = ""
- name = "warning cone"
- icon = 'icons/obj/janitor.dmi'
- icon_state = "cone"
- item_state = "cone"
- force = 1
- throwforce = 3
- throw_speed = 2
- throw_range = 5
- w_class = WEIGHT_CLASS_SMALL
- attack_verb = list("warned", "cautioned", "smashed")
- resistance_flags = NONE
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/santa
- name = "santa hat"
- desc = ""
- icon_state = "santahatnorm"
- item_state = "that"
- cold_protection = HEAD
- min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
- dog_fashion = /datum/dog_fashion/head/santa
-
-/obj/item/clothing/head/jester
- name = "jester hat"
- desc = ""
- icon_state = "jester_hat"
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/rice_hat
- name = "rice hat"
- desc = ""
- icon_state = "rice_hat"
-
-/obj/item/clothing/head/lizard
- name = "lizardskin cloche hat"
- desc = ""
- icon_state = "lizard"
-
-/obj/item/clothing/head/papersack
- name = "paper sack hat"
- desc = ""
- icon_state = "papersack"
- flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
-
-/obj/item/clothing/head/papersack/smiley
- name = "paper sack hat"
- desc = ""
- icon_state = "papersack_smile"
- flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS
-
-/obj/item/clothing/head/crown
- name = "crown"
- desc = ""
- icon_state = "crown"
- armor = list("melee" = 15, "bullet" = 0, "laser" = 0,"energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
- resistance_flags = FIRE_PROOF
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/crown/fancy
- name = "magnificent crown"
- desc = ""
- icon_state = "fancycrown"
-
-/obj/item/clothing/head/scarecrow_hat
- name = "scarecrow hat"
- desc = ""
- icon_state = "scarecrow_hat"
-
-/obj/item/clothing/head/lobsterhat
- name = "foam lobster head"
- desc = ""
- icon_state = "lobster_hat"
- clothing_flags = SNUG_FIT
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
-
-/obj/item/clothing/head/drfreezehat
- name = "doctor freeze's wig"
- desc = ""
- icon_state = "drfreeze_hat"
- flags_inv = HIDEHAIR
-
-/obj/item/clothing/head/pharaoh
- name = "pharaoh hat"
- desc = ""
- icon_state = "pharoah_hat"
- item_state = "pharoah_hat"
-
-/obj/item/clothing/head/jester/alt
- name = "jester hat"
- desc = ""
- icon_state = "jester_hat"
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/nemes
- name = "headdress of Nemes"
- desc = ""
- icon_state = "nemes_headdress"
-
-/obj/item/clothing/head/delinquent
- name = "delinquent hat"
- desc = ""
- icon_state = "delinquent"
-
-/obj/item/clothing/head/frenchberet
- name = "french beret"
- desc = ""
- icon_state = "beret"
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/frenchberet/equipped(mob/M, slot)
- . = ..()
- if (slot == SLOT_HEAD)
- RegisterSignal(M, COMSIG_MOB_SAY, PROC_REF(handle_speech))
- else
- UnregisterSignal(M, COMSIG_MOB_SAY)
-
-/obj/item/clothing/head/frenchberet/dropped(mob/M)
- . = ..()
- UnregisterSignal(M, COMSIG_MOB_SAY)
-
-/obj/item/clothing/head/frenchberet/proc/handle_speech(datum/source, list/speech_args)
- var/message = speech_args[SPEECH_MESSAGE]
- if(message[1] != "*")
- message = " [message]"
- var/list/french_words = strings("french_replacement.json", "french")
-
- for(var/key in french_words)
- var/value = french_words[key]
- if(islist(value))
- value = pick(value)
-
- message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
- message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
- message = replacetextEx(message, " [key]", " [value]")
-
- if(prob(3))
- message += pick(" Honh honh honh!"," Honh!"," Zut Alors!")
- speech_args[SPEECH_MESSAGE] = trim(message)
-
-/obj/item/clothing/head/clownmitre
- name = "Hat of the Honkmother"
- desc = ""
- icon_state = "clownmitre"
-
-/obj/item/clothing/head/kippah
- name = "kippah"
- desc = ""
- icon_state = "kippah"
-
-/obj/item/clothing/head/taqiyahwhite
- name = "white taqiyah"
- desc = ""
- icon_state = "taqiyahwhite"
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/small
-
-/obj/item/clothing/head/taqiyahred
- name = "red taqiyah"
- desc = ""
- icon_state = "taqiyahred"
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/small
-
-/obj/item/clothing/head/shrine_wig
- name = "shrine maiden's wig"
- desc = ""
- flags_inv = HIDEHAIR //bald
- mob_overlay_icon = 'icons/mob/large-worn-icons/64x64/head.dmi'
- icon_state = "shrine_wig"
- item_state = "shrine_wig"
- worn_x_dimension = 64
- worn_y_dimension = 64
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/head/intern
- name = "\improper CentCom Head Intern beancap"
- desc = ""
- icon_state = "intern_hat"
- item_state = "intern_hat"
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
deleted file mode 100644
index fb603573e4..0000000000
--- a/code/modules/clothing/head/misc_special.dm
+++ /dev/null
@@ -1,357 +0,0 @@
-/*
- * Contents:
- * Welding mask
- * Cakehat
- * Ushanka
- * Pumpkin head
- * Kitty ears
- * Cardborg disguise
- * Wig
- * Bronze hat
- */
-
-/*
- * Welding mask
- */
-/obj/item/clothing/head/welding
- name = "welding helmet"
- desc = ""
- icon_state = "welding"
- flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
- item_state = "welding"
- custom_materials = list(/datum/material/iron=1750, /datum/material/glass=400)
- flash_protect = FLASH_PROTECTION_WELDER
- tint = 2
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 60)
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
- actions_types = list(/datum/action/item_action/toggle)
- visor_flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
- visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
- resistance_flags = FIRE_PROOF
- clothing_flags = SNUG_FIT
-
-/obj/item/clothing/head/welding/attack_self(mob/user)
- weldingvisortoggle(user)
-
-
-/*
- * Cakehat
- */
-/obj/item/clothing/head/hardhat/cakehat
- name = "cakehat"
- desc = ""
- icon_state = "hardhat0_cakehat"
- item_state = "hardhat0_cakehat"
- hat_type = "cakehat"
- lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/clothing_righthand.dmi'
- hitsound = 'sound/blank.ogg'
- var/hitsound_on = 'sound/blank.ogg' //so we can differentiate between cakehat and energyhat
- var/hitsound_off = 'sound/blank.ogg'
- var/force_on = 15
- var/throwforce_on = 15
- var/damtype_on = BURN
- flags_inv = HIDEEARS|HIDEHAIR
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- brightness_on = 2 //luminosity when on
- flags_cover = HEADCOVERSEYES
- heat = 999
-
- dog_fashion = /datum/dog_fashion/head
-
-/obj/item/clothing/head/hardhat/cakehat/process()
- var/turf/location = src.loc
- if(ishuman(location))
- var/mob/living/carbon/human/M = location
- if(M.is_holding(src) || M.head == src)
- location = M.loc
-
- if(isturf(location))
- location.hotspot_expose(700, 1)
-
-/obj/item/clothing/head/hardhat/cakehat/turn_on(mob/living/user)
- ..()
- force = force_on
- throwforce = throwforce_on
- damtype = damtype_on
- hitsound = hitsound_on
- START_PROCESSING(SSobj, src)
-
-/obj/item/clothing/head/hardhat/cakehat/turn_off(mob/living/user)
- ..()
- force = 0
- throwforce = 0
- damtype = BRUTE
- hitsound = hitsound_off
- STOP_PROCESSING(SSobj, src)
-
-/obj/item/clothing/head/hardhat/cakehat/get_temperature()
- return on * heat
-
-/obj/item/clothing/head/hardhat/cakehat/energycake
- name = "energy cake"
- desc = ""
- icon_state = "hardhat0_energycake"
- item_state = "hardhat0_energycake"
- hat_type = "energycake"
- hitsound = 'sound/blank.ogg'
- hitsound_on = 'sound/blank.ogg'
- hitsound_off = 'sound/blank.ogg'
- damtype_on = BRUTE
- force_on = 18 //same as epen (but much more obvious)
- brightness_on = 3 //ditto
- heat = 0
-
-/obj/item/clothing/head/hardhat/cakehat/energycake/turn_on(mob/living/user)
- playsound(user, 'sound/blank.ogg', 5, TRUE)
- to_chat(user, "I turn on \the [src].")
- ..()
-
-/obj/item/clothing/head/hardhat/cakehat/energycake/turn_off(mob/living/user)
- playsound(user, 'sound/blank.ogg', 5, TRUE)
- to_chat(user, "I turn off \the [src].")
- ..()
-
-/*
- * Ushanka
- */
-/obj/item/clothing/head/ushanka
- name = "ushanka"
- desc = ""
- icon_state = "ushankadown"
- item_state = "ushankadown"
- flags_inv = HIDEEARS|HIDEHAIR
- var/earflaps = 1
- cold_protection = HEAD
- min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
-
- dog_fashion = /datum/dog_fashion/head/ushanka
-
-/obj/item/clothing/head/ushanka/attack_self(mob/user)
- if(earflaps)
- src.icon_state = "ushankaup"
- src.item_state = "ushankaup"
- earflaps = 0
- to_chat(user, "I raise the ear flaps on the ushanka.")
- else
- src.icon_state = "ushankadown"
- src.item_state = "ushankadown"
- earflaps = 1
- to_chat(user, "I lower the ear flaps on the ushanka.")
-
-/*
- * Pumpkin head
- */
-/obj/item/clothing/head/hardhat/pumpkinhead
- name = "carved pumpkin"
- desc = ""
- icon_state = "hardhat0_pumpkin"
- item_state = "hardhat0_pumpkin"
- hat_type = "pumpkin"
- clothing_flags = SNUG_FIT
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- brightness_on = 2 //luminosity when on
- flags_cover = HEADCOVERSEYES
-
-/*
- * Kitty ears
- */
-/obj/item/clothing/head/kitty
- name = "kitty ears"
- desc = ""
- icon_state = "kitty"
- color = "#999999"
- dynamic_hair_suffix = ""
-
- dog_fashion = /datum/dog_fashion/head/kitty
-
-/obj/item/clothing/head/kitty/equipped(mob/living/carbon/human/user, slot)
- if(ishuman(user) && slot == SLOT_HEAD)
- update_icon(user)
- user.update_inv_head() //Color might have been changed by update_icon.
- ..()
-
-/obj/item/clothing/head/kitty/update_icon(mob/living/carbon/human/user)
- if(ishuman(user))
- add_atom_colour("#[user.hair_color]", FIXED_COLOUR_PRIORITY)
-
-/obj/item/clothing/head/kitty/genuine
- desc = ""
-
-
-/obj/item/clothing/head/hardhat/reindeer
- name = "novelty reindeer hat"
- desc = ""
- icon_state = "hardhat0_reindeer"
- item_state = "hardhat0_reindeer"
- hat_type = "reindeer"
- flags_inv = 0
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- brightness_on = 1 //luminosity when on
- dynamic_hair_suffix = ""
-
- dog_fashion = /datum/dog_fashion/head/reindeer
-
-/obj/item/clothing/head/cardborg
- name = "cardborg helmet"
- desc = ""
- icon_state = "cardborg_h"
- item_state = "cardborg_h"
- clothing_flags = SNUG_FIT
- flags_cover = HEADCOVERSEYES
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
-
- dog_fashion = /datum/dog_fashion/head/cardborg
-
-
-
-/obj/item/clothing/head/wig
- name = "wig"
- desc = ""
- icon = 'icons/mob/human_face.dmi' // default icon for all hairs
- icon_state = "hair_vlong"
- item_state = "pwig"
- flags_inv = HIDEHAIR
- color = "#000"
- var/hairstyle = "Very Long Hair"
- var/adjustablecolor = TRUE //can color be changed manually?
-
-/obj/item/clothing/head/wig/Initialize(mapload)
- . = ..()
- update_icon()
-
-/obj/item/clothing/head/wig/update_icon()
- var/datum/sprite_accessory/S = GLOB.hairstyles_list[hairstyle]
- if(!S)
- icon = 'icons/obj/clothing/hats.dmi'
- icon_state = "pwig"
- else
- icon = S.icon
- icon_state = S.icon_state
-
-/obj/item/clothing/head/wig/worn_overlays(isinhands = FALSE, file2use)
- . = list()
- if(!isinhands)
- var/datum/sprite_accessory/S = GLOB.hairstyles_list[hairstyle]
- if(!S)
- return
- var/mutable_appearance/M = mutable_appearance(S.icon, S.icon_state,layer = -HAIR_LAYER)
- M.appearance_flags |= RESET_COLOR
- M.color = color
- . += M
-
-/obj/item/clothing/head/wig/attack_self(mob/user)
- var/new_style = input(user, "Select a hairstyle", "Wig Styling") as null|anything in (GLOB.hairstyles_list - "Bald")
- if(!user.canUseTopic(src, BE_CLOSE))
- return
- if(new_style && new_style != hairstyle)
- hairstyle = new_style
- user.visible_message("[user] changes \the [src]'s hairstyle to [new_style].", "I change \the [src]'s hairstyle to [new_style].")
- if(adjustablecolor)
- color = input(usr,"","Choose Color",color) as color|null
- update_icon()
-
-/obj/item/clothing/head/wig/random/Initialize(mapload)
- hairstyle = pick(GLOB.hairstyles_list - "Bald") //Don't want invisible wig
- color = "#[random_short_color()]"
- . = ..()
-
-/obj/item/clothing/head/wig/natural
- name = "natural wig"
- desc = ""
- color = "#FFF"
- adjustablecolor = FALSE
- custom_price = 25
-
-/obj/item/clothing/head/wig/natural/Initialize(mapload)
- hairstyle = pick(GLOB.hairstyles_list - "Bald")
- . = ..()
-
-/obj/item/clothing/head/wig/natural/equipped(mob/living/carbon/human/user, slot)
- . = ..()
- if(ishuman(user) && slot == SLOT_HEAD)
- color = "#[user.hair_color]"
- update_icon()
- user.update_inv_head()
-
-/obj/item/clothing/head/bronze
- name = "bronze hat"
- desc = ""
- icon = 'icons/obj/clothing/clockwork_garb.dmi'
- icon_state = "clockwork_helmet_old"
- clothing_flags = SNUG_FIT
- flags_inv = HIDEEARS|HIDEHAIR
- armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
-
-/obj/item/clothing/head/foilhat
- name = "tinfoil hat"
- desc = ""
- icon_state = "foilhat"
- item_state = "foilhat"
- armor = list("melee" = 0, "bullet" = 0, "laser" = -5,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = -5, "fire" = 0, "acid" = 0)
- equip_delay_other = 140
- clothing_flags = ANTI_TINFOIL_MANEUVER
- var/datum/brain_trauma/mild/phobia/conspiracies/paranoia
- var/warped = FALSE
-
-/obj/item/clothing/head/foilhat/Initialize(mapload)
- . = ..()
- if(!warped)
- AddComponent(/datum/component/anti_magic, FALSE, FALSE, TRUE, ITEM_SLOT_HEAD, 6, TRUE, null, CALLBACK(src, PROC_REF(warp_up)))
- else
- warp_up()
-
-/obj/item/clothing/head/foilhat/equipped(mob/living/carbon/human/user, slot)
- . = ..()
- if(slot != SLOT_HEAD || warped)
- return
- if(paranoia)
- QDEL_NULL(paranoia)
- paranoia = new()
- paranoia.clonable = FALSE
-
- user.gain_trauma(paranoia, TRAUMA_RESILIENCE_MAGIC)
- to_chat(user, "As you don the foiled hat, an entire world of conspiracy theories and seemingly insane ideas suddenly rush into my mind. What you once thought unbelievable suddenly seems.. undeniable. Everything is connected and nothing happens just by accident. You know too much and now they're out to get you. ")
-
-
-/obj/item/clothing/head/foilhat/MouseDrop(atom/over_object)
- //God Im sorry
- if(!warped && iscarbon(usr))
- var/mob/living/carbon/C = usr
- if(src == C.head)
- to_chat(C, "Why would you want to take this off? Do you want them to get into my mind?!")
- return
- return ..()
-
-/obj/item/clothing/head/foilhat/dropped(mob/user)
- . = ..()
- if(paranoia)
- QDEL_NULL(paranoia)
-
-/obj/item/clothing/head/foilhat/proc/warp_up()
- name = "scorched tinfoil hat"
- desc = ""
- warped = TRUE
- clothing_flags &= ~ANTI_TINFOIL_MANEUVER
- if(!isliving(loc) || !paranoia)
- return
- var/mob/living/target = loc
- if(target.get_item_by_slot(SLOT_HEAD) != src)
- return
- QDEL_NULL(paranoia)
- if(!target.IsUnconscious())
- to_chat(target, "My zealous conspirationism rapidly dissipates as the donned hat warps up into a ruined mess. All those theories starting to sound like nothing but a ridicolous fanfare.")
-
-/obj/item/clothing/head/foilhat/attack_hand(mob/user)
- if(!warped && iscarbon(user))
- var/mob/living/carbon/C = user
- if(src == C.head)
- to_chat(user, "Why would you want to take this off? Do you want them to get into my mind?!")
- return
- return ..()
-
-/obj/item/clothing/head/foilhat/heating_act()
- . = ..()
- if(!warped)
- warp_up()
diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm
deleted file mode 100644
index fab56667fb..0000000000
--- a/code/modules/clothing/head/soft_caps.dm
+++ /dev/null
@@ -1,132 +0,0 @@
-/obj/item/clothing/head/soft
- name = "cargo cap"
- desc = ""
- icon_state = "cargosoft"
- item_state = "helmet"
- var/soft_type = "cargo"
-
- dog_fashion = /datum/dog_fashion/head/cargo_tech
-
- var/flipped = 0
-
-/obj/item/clothing/head/soft/dropped()
- icon_state = "[soft_type]soft"
- flipped=0
- ..()
-
-/obj/item/clothing/head/soft/verb/flipcap()
- set hidden = 1
- set name = "Flip cap"
- if(!usr.client.holder)
- return
- flip(usr)
-
-
-/obj/item/clothing/head/soft/AltClick(mob/user)
- ..()
- if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
- return
- else
- flip(user)
-
-
-/obj/item/clothing/head/soft/proc/flip(mob/user)
- if(!user.incapacitated())
- flipped = !flipped
- if(src.flipped)
- icon_state = "[soft_type]soft_flipped"
- to_chat(user, "I flip the hat backwards.")
- else
- icon_state = "[soft_type]soft"
- to_chat(user, "I flip the hat back in normal position.")
- usr.update_inv_head() //so our mob-overlays update
-
-/obj/item/clothing/head/soft/examine(mob/user)
- . = ..()
- . += "Alt-click the cap to flip it [flipped ? "forwards" : "backwards"]."
-
-/obj/item/clothing/head/soft/red
- name = "red cap"
- desc = ""
- icon_state = "redsoft"
- soft_type = "red"
- dog_fashion = null
-
-/obj/item/clothing/head/soft/blue
- name = "blue cap"
- desc = ""
- icon_state = "bluesoft"
- soft_type = "blue"
- dog_fashion = null
-
-/obj/item/clothing/head/soft/green
- name = "green cap"
- desc = ""
- icon_state = "greensoft"
- soft_type = "green"
- dog_fashion = null
-
-/obj/item/clothing/head/soft/yellow
- name = "yellow cap"
- desc = ""
- icon_state = "yellowsoft"
- soft_type = "yellow"
- dog_fashion = null
-
-/obj/item/clothing/head/soft/grey
- name = "grey cap"
- desc = ""
- icon_state = "greysoft"
- soft_type = "grey"
- dog_fashion = null
-
-/obj/item/clothing/head/soft/orange
- name = "orange cap"
- desc = ""
- icon_state = "orangesoft"
- soft_type = "orange"
- dog_fashion = null
-
-/obj/item/clothing/head/soft/mime
- name = "white cap"
- desc = ""
- icon_state = "mimesoft"
- soft_type = "mime"
- dog_fashion = null
-
-/obj/item/clothing/head/soft/purple
- name = "purple cap"
- desc = ""
- icon_state = "purplesoft"
- soft_type = "purple"
- dog_fashion = null
-
-/obj/item/clothing/head/soft/black
- name = "black cap"
- desc = ""
- icon_state = "blacksoft"
- soft_type = "black"
- dog_fashion = null
-
-/obj/item/clothing/head/soft/rainbow
- name = "rainbow cap"
- desc = ""
- icon_state = "rainbowsoft"
- soft_type = "rainbow"
- dog_fashion = null
-
-/obj/item/clothing/head/soft/sec
- name = "security cap"
- desc = ""
- icon_state = "secsoft"
- soft_type = "sec"
- armor = list("melee" = 30, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50)
- strip_delay = 60
- dog_fashion = null
-
-/obj/item/clothing/head/soft/emt
- name = "EMT cap"
- desc = ""
- icon_state = "emtsoft"
- soft_type = "emt"
- dog_fashion = null
diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm
deleted file mode 100644
index a628b7f05b..0000000000
--- a/code/modules/clothing/masks/boxing.dm
+++ /dev/null
@@ -1,66 +0,0 @@
-/obj/item/clothing/mask/balaclava
- name = "balaclava"
- desc = ""
- icon_state = "balaclava"
- item_state = "balaclava"
- flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
- visor_flags_inv = HIDEFACE|HIDEFACIALHAIR
- w_class = WEIGHT_CLASS_SMALL
- actions_types = list(/datum/action/item_action/adjust)
-
-/obj/item/clothing/mask/balaclava/attack_self(mob/user)
- adjustmask(user)
-
-/obj/item/clothing/mask/luchador
- name = "Luchador Mask"
- desc = ""
- icon_state = "luchag"
- item_state = "luchag"
- flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
- w_class = WEIGHT_CLASS_SMALL
- modifies_speech = TRUE
-
-/obj/item/clothing/mask/luchador/handle_speech(datum/source, list/speech_args)
- var/message = speech_args[SPEECH_MESSAGE]
- if(message[1] != "*")
- message = replacetext(message, "captain", "CAPITÁN")
- message = replacetext(message, "station", "ESTACIÓN")
- message = replacetext(message, "sir", "SEÑOR")
- message = replacetext(message, "the ", "el ")
- message = replacetext(message, "my ", "mi ")
- message = replacetext(message, "is ", "es ")
- message = replacetext(message, "it's", "es")
- message = replacetext(message, "friend", "amigo")
- message = replacetext(message, "buddy", "amigo")
- message = replacetext(message, "hello", "hola")
- message = replacetext(message, " hot", " caliente")
- message = replacetext(message, " very ", " muy ")
- message = replacetext(message, "sword", "espada")
- message = replacetext(message, "library", "biblioteca")
- message = replacetext(message, "traitor", "traidor")
- message = replacetext(message, "wizard", "mago")
- message = uppertext(message) //Things end up looking better this way (no mixed cases), and it fits the macho wrestler image.
- if(prob(25))
- message += " OLE!"
- speech_args[SPEECH_MESSAGE] = message
-
-/obj/item/clothing/mask/luchador/tecnicos
- name = "Tecnicos Mask"
- desc = ""
- icon_state = "luchador"
- item_state = "luchador"
-
-/obj/item/clothing/mask/luchador/rudos
- name = "Rudos Mask"
- desc = ""
- icon_state = "luchar"
- item_state = "luchar"
-
-/obj/item/clothing/mask/russian_balaclava
- name = "russian balaclava"
- desc = ""
- icon_state = "rus_balaclava"
- item_state = "rus_balaclava"
- flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
- visor_flags_inv = HIDEFACE|HIDEFACIALHAIR
- w_class = WEIGHT_CLASS_SMALL
diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm
deleted file mode 100644
index b32df51dec..0000000000
--- a/code/modules/clothing/masks/breath.dm
+++ /dev/null
@@ -1,41 +0,0 @@
-/obj/item/clothing/mask/breath
- desc = ""
- name = "breath mask"
- icon_state = "breath"
- item_state = "m_mask"
- body_parts_covered = 0
- clothing_flags = MASKINTERNALS
- visor_flags = MASKINTERNALS
- w_class = WEIGHT_CLASS_SMALL
- gas_transfer_coefficient = 0.1
- permeability_coefficient = 0.5
- actions_types = list(/datum/action/item_action/adjust)
- flags_cover = MASKCOVERSMOUTH
- visor_flags_cover = MASKCOVERSMOUTH
- resistance_flags = NONE
-
-/obj/item/clothing/mask/breath/suicide_act(mob/living/carbon/user)
- user.visible_message("[user] is wrapping \the [src]'s tube around [user.p_their()] neck! It looks like [user.p_theyre()] trying to commit suicide!")
- return OXYLOSS
-
-/obj/item/clothing/mask/breath/attack_self(mob/user)
- adjustmask(user)
-
-/obj/item/clothing/mask/breath/AltClick(mob/user)
- ..()
- if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
- return
- else
- adjustmask(user)
-
-/obj/item/clothing/mask/breath/examine(mob/user)
- . = ..()
- . += "Alt-click [src] to adjust it."
-
-/obj/item/clothing/mask/breath/medical
- desc = ""
- name = "medical mask"
- icon_state = "medical"
- item_state = "m_mask"
- permeability_coefficient = 0.01
- equip_delay_other = 10
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
deleted file mode 100644
index e3a4088934..0000000000
--- a/code/modules/clothing/masks/gasmask.dm
+++ /dev/null
@@ -1,232 +0,0 @@
-/obj/item/clothing/mask/gas
- name = "gas mask"
- desc = "" //More accurate
- icon_state = "gas_alt"
- clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS
- flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR
- w_class = WEIGHT_CLASS_NORMAL
- item_state = "gas_alt"
- gas_transfer_coefficient = 0.01
- permeability_coefficient = 0.01
- flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH | PEPPERPROOF
- resistance_flags = NONE
-
-/obj/item/clothing/mask/gas/atmos
- name = "atmospheric gas mask"
- desc = ""
- icon_state = "gas_atmos"
- item_state = "gas_atmos"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 20, "acid" = 10)
- w_class = WEIGHT_CLASS_SMALL
- gas_transfer_coefficient = 0.001 //cargo cult time, this var does nothing but just in case someone actually makes it do something
- permeability_coefficient = 0.001
- resistance_flags = FIRE_PROOF
-
-/obj/item/clothing/mask/gas/atmos/captain
- name = "captain's gas mask"
- desc = ""
- icon_state = "gas_cap"
- item_state = "gas_cap"
- resistance_flags = FIRE_PROOF | ACID_PROOF
-
-// **** Welding gas mask ****
-
-/obj/item/clothing/mask/gas/welding
- name = "welding mask"
- desc = ""
- icon_state = "weldingmask"
- flash_protect = FLASH_PROTECTION_WELDER
- custom_materials = list(/datum/material/iron=4000, /datum/material/glass=2000)
- tint = 2
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 55)
- actions_types = list(/datum/action/item_action/toggle)
- flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
- flags_cover = MASKCOVERSEYES
- visor_flags_inv = HIDEEYES
- visor_flags_cover = MASKCOVERSEYES
- resistance_flags = FIRE_PROOF
-
-/obj/item/clothing/mask/gas/welding/attack_self(mob/user)
- weldingvisortoggle(user)
-
-/obj/item/clothing/mask/gas/welding/up
-
-/obj/item/clothing/mask/gas/welding/up/Initialize()
- . = ..()
- visor_toggling()
-
-// ********************************************************************
-
-//Plague Dr suit can be found in clothing/suits/bio.dm
-/obj/item/clothing/mask/gas/plaguedoctor
- name = "plague doctor mask"
- desc = ""
- icon_state = "plaguedoctor"
- item_state = "gas_mask"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 2,"energy" = 2, "bomb" = 0, "bio" = 75, "rad" = 0, "fire" = 0, "acid" = 0)
-
-/obj/item/clothing/mask/gas/syndicate
- name = "syndicate mask"
- desc = ""
- icon_state = "syndicate"
- strip_delay = 60
-
-/obj/item/clothing/mask/gas/clown_hat
- name = "clown wig and mask"
- desc = ""
- clothing_flags = MASKINTERNALS
- icon_state = "clown"
- item_state = "clown_hat"
- dye_color = "clown"
- w_class = WEIGHT_CLASS_SMALL
- flags_cover = MASKCOVERSEYES
- resistance_flags = FLAMMABLE
- actions_types = list(/datum/action/item_action/adjust)
- dog_fashion = /datum/dog_fashion/head/clown
-
-/obj/item/clothing/mask/gas/clown_hat/ui_action_click(mob/user)
- if(!istype(user) || user.incapacitated())
- return
-
- var/list/options = list()
- options["True Form"] = "clown"
- options["The Feminist"] = "sexyclown"
- options["The Madman"] = "joker"
- options["The Rainbow Color"] ="rainbow"
- options["The Jester"] ="chaos" //Nepeta33Leijon is holding me captive and forced me to help with this please send help
-
- var/choice = input(user,"To what form do you wish to Morph this mask?","Morph Mask") in sortList(options)
-
- if(src && choice && !user.incapacitated() && in_range(user,src))
- icon_state = options[choice]
- user.update_inv_wear_mask()
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
- to_chat(user, "My Clown Mask has now morphed into [choice], all praise the Honkmother!")
- return 1
-
-/obj/item/clothing/mask/gas/sexyclown
- name = "sexy-clown wig and mask"
- desc = ""
- clothing_flags = MASKINTERNALS
- icon_state = "sexyclown"
- item_state = "sexyclown"
- flags_cover = MASKCOVERSEYES
- resistance_flags = FLAMMABLE
-
-/obj/item/clothing/mask/gas/mime
- name = "mime mask"
- desc = ""
- clothing_flags = MASKINTERNALS
- icon_state = "mime"
- item_state = "mime"
- w_class = WEIGHT_CLASS_SMALL
- flags_cover = MASKCOVERSEYES
- resistance_flags = FLAMMABLE
- actions_types = list(/datum/action/item_action/adjust)
-
-
-/obj/item/clothing/mask/gas/mime/ui_action_click(mob/user)
- if(!istype(user) || user.incapacitated())
- return
-
- var/list/options = list()
- options["Blanc"] = "mime"
- options["Triste"] = "sadmime"
- options["Effrayé"] = "scaredmime"
- options["Excité"] ="sexymime"
-
- var/choice = input(user,"To what form do you wish to Morph this mask?","Morph Mask") in sortList(options)
-
- if(src && choice && !user.incapacitated() && in_range(user,src))
- icon_state = options[choice]
- user.update_inv_wear_mask()
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
- to_chat(user, "My Mime Mask has now morphed into [choice]!")
- return 1
-
-/obj/item/clothing/mask/gas/monkeymask
- name = "monkey mask"
- desc = ""
- clothing_flags = MASKINTERNALS
- icon_state = "monkeymask"
- item_state = "monkeymask"
- flags_cover = MASKCOVERSEYES
- resistance_flags = FLAMMABLE
-
-/obj/item/clothing/mask/gas/sexymime
- name = "sexy mime mask"
- desc = ""
- clothing_flags = MASKINTERNALS
- icon_state = "sexymime"
- item_state = "sexymime"
- flags_cover = MASKCOVERSEYES
- resistance_flags = FLAMMABLE
-
-/obj/item/clothing/mask/gas/death_commando
- name = "Death Commando Mask"
- icon_state = "swat"
- item_state = "swat"
-
-/obj/item/clothing/mask/gas/cyborg
- name = "cyborg visor"
- desc = ""
- icon_state = "death"
- resistance_flags = FLAMMABLE
-
-/obj/item/clothing/mask/gas/owl_mask
- name = "owl mask"
- desc = ""
- icon_state = "owl"
- clothing_flags = MASKINTERNALS
- flags_cover = MASKCOVERSEYES
- resistance_flags = FLAMMABLE
-
-/obj/item/clothing/mask/gas/carp
- name = "carp mask"
- desc = ""
- icon_state = "carp_mask"
-
-/obj/item/clothing/mask/gas/tiki_mask
- name = "tiki mask"
- desc = ""
- icon_state = "tiki_eyebrow"
- item_state = "tiki_eyebrow"
- resistance_flags = FLAMMABLE
- actions_types = list(/datum/action/item_action/adjust)
- dog_fashion = null
-
-
-/obj/item/clothing/mask/gas/tiki_mask/ui_action_click(mob/user)
- var/mob/M = usr
- var/list/options = list()
- options["Original Tiki"] = "tiki_eyebrow"
- options["Happy Tiki"] = "tiki_happy"
- options["Confused Tiki"] = "tiki_confused"
- options["Angry Tiki"] ="tiki_angry"
-
- var/choice = input(M,"To what form do you wish to change this mask?","Morph Mask") in sortList(options)
-
- if(src && choice && !M.stat && in_range(M,src))
- icon_state = options[choice]
- user.update_inv_wear_mask()
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
- to_chat(M, "The Tiki Mask has now changed into the [choice] Mask!")
- return 1
-
-/obj/item/clothing/mask/gas/tiki_mask/yalp_elor
- icon_state = "tiki_yalp"
- actions_types = list()
-
-/obj/item/clothing/mask/gas/hunter
- name = "bounty hunting mask"
- desc = ""
- icon_state = "hunter"
- item_state = "hunter"
- resistance_flags = FIRE_PROOF | ACID_PROOF
- flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS|HIDEHAIR
diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm
deleted file mode 100644
index 6a0fafef76..0000000000
--- a/code/modules/clothing/masks/hailer.dm
+++ /dev/null
@@ -1,194 +0,0 @@
-
-// **** Security gas mask ****
-
-/obj/item/clothing/mask/gas/sechailer
- name = "security gas mask"
- desc = ""
- actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/adjust)
- icon_state = "sechailer"
- item_state = "sechailer"
- clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS
- flags_inv = HIDEFACIALHAIR|HIDEFACE
- w_class = WEIGHT_CLASS_SMALL
- visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS
- visor_flags_inv = HIDEFACE
- flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF
- visor_flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF
- var/aggressiveness = 2
- var/cooldown_special
- var/recent_uses = 0
- var/broken_hailer = 0
- var/safety = TRUE
-
-/obj/item/clothing/mask/gas/sechailer/swat
- name = "\improper SWAT mask"
- desc = ""
- actions_types = list(/datum/action/item_action/halt)
- icon_state = "swat"
- item_state = "swat"
- aggressiveness = 3
- flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS|HIDEHAIR
- visor_flags_inv = 0
-
-/obj/item/clothing/mask/gas/sechailer/swat/spacepol
- name = "spacepol mask"
- desc = ""
- icon_state = "spacepol"
- item_state = "spacepol"
-
-/obj/item/clothing/mask/gas/sechailer/cyborg
- name = "security hailer"
- desc = ""
- icon = 'icons/obj/device.dmi'
- icon_state = "taperecorder_idle"
- aggressiveness = 1 //Borgs are nicecurity!
- actions_types = list(/datum/action/item_action/halt)
-
-/obj/item/clothing/mask/gas/sechailer/screwdriver_act(mob/living/user, obj/item/I)
- if(..())
- return TRUE
- switch(aggressiveness)
- if(1)
- to_chat(user, "I set the restrictor to the middle position.")
- aggressiveness = 2
- if(2)
- to_chat(user, "I set the restrictor to the last position.")
- aggressiveness = 3
- if(3)
- to_chat(user, "I set the restrictor to the first position.")
- aggressiveness = 1
- if(4)
- to_chat(user, "I adjust the restrictor but nothing happens, probably because it's broken.")
- return TRUE
-
-/obj/item/clothing/mask/gas/sechailer/wirecutter_act(mob/living/user, obj/item/I)
- ..()
- if(aggressiveness != 4)
- to_chat(user, "I broke the restrictor!")
- aggressiveness = 4
- return TRUE
-
-/obj/item/clothing/mask/gas/sechailer/ui_action_click(mob/user, action)
- if(istype(action, /datum/action/item_action/halt))
- halt()
- else
- adjustmask(user)
-
-/obj/item/clothing/mask/gas/sechailer/attack_self()
- halt()
-/obj/item/clothing/mask/gas/sechailer/emag_act(mob/user as mob)
- if(safety)
- safety = FALSE
- to_chat(user, "I silently fry [src]'s vocal circuit with the cryptographic sequencer.")
- else
- return
-
-/obj/item/clothing/mask/gas/sechailer/verb/halt()
- set hidden = 1
- set name = "HALT"
- set src in usr
- if(!usr.client.holder)
- return
- if(!isliving(usr))
- return
- if(!can_use(usr))
- return
- if(broken_hailer)
- to_chat(usr, "\The [src]'s hailing system is broken.")
- return
-
- var/phrase = 0 //selects which phrase to use
- var/phrase_text = null
- var/phrase_sound = null
-
-
- if(cooldown < world.time - 30) // A cooldown, to stop people being jerks
- recent_uses++
- if(cooldown_special < world.time - 180) //A better cooldown that burns jerks
- recent_uses = initial(recent_uses)
-
- switch(recent_uses)
- if(3)
- to_chat(usr, "\The [src] is starting to heat up.")
- if(4)
- to_chat(usr, "\The [src] is heating up dangerously from overuse!")
- if(5) //overload
- broken_hailer = 1
- to_chat(usr, "\The [src]'s power modulator overloads and breaks.")
- return
-
- switch(aggressiveness) // checks if the user has unlocked the restricted phrases
- if(1)
- phrase = rand(1,5) // set the upper limit as the phrase above the first 'bad cop' phrase, the mask will only play 'nice' phrases
- if(2)
- phrase = rand(1,11) // default setting, set upper limit to last 'bad cop' phrase. Mask will play good cop and bad cop phrases
- if(3)
- phrase = rand(1,18) // user has unlocked all phrases, set upper limit to last phrase. The mask will play all phrases
- if(4)
- phrase = rand(12,18) // user has broke the restrictor, it will now only play shitcurity phrases
-
- if(!safety)
- phrase_text = "FUCK YOUR CUNT YOU SHIT EATING COCKSTORM AND EAT A DONG FUCKING ASS RAMMING SHIT FUCK EAT PENISES IN YOUR FUCK FACE AND SHIT OUT ABORTIONS OF FUCK AND POO AND SHIT IN YOUR ASS YOU COCK FUCK SHIT MONKEY FUCK ASS WANKER FROM THE DEPTHS OF SHIT."
- phrase_sound = "emag"
- else
-
- switch(phrase) //sets the properties of the chosen phrase
- if(1) // good cop
- phrase_text = "HALT! HALT! HALT!"
- phrase_sound = "halt"
- if(2)
- phrase_text = "Stop in the name of the Law."
- phrase_sound = "bobby"
- if(3)
- phrase_text = "Compliance is in your best interest."
- phrase_sound = "compliance"
- if(4)
- phrase_text = "Prepare for justice!"
- phrase_sound = "justice"
- if(5)
- phrase_text = "Running will only increase your sentence."
- phrase_sound = "running"
- if(6) // bad cop
- phrase_text = "Don't move, Creep!"
- phrase_sound = "dontmove"
- if(7)
- phrase_text = "Down on the floor, Creep!"
- phrase_sound = "floor"
- if(8)
- phrase_text = "Dead or alive you're coming with me."
- phrase_sound = "robocop"
- if(9)
- phrase_text = "God made today for the crooks we could not catch yesterday."
- phrase_sound = "god"
- if(10)
- phrase_text = "Freeze, Scum Bag!"
- phrase_sound = "freeze"
- if(11)
- phrase_text = "Stop right there, criminal scum!"
- phrase_sound = "imperial"
- if(12) // LA-PD
- phrase_text = "Stop or I'll bash you."
- phrase_sound = "bash"
- if(13)
- phrase_text = "Go ahead, make my day."
- phrase_sound = "harry"
- if(14)
- phrase_text = "Stop breaking the law, ass hole."
- phrase_sound = "asshole"
- if(15)
- phrase_text = "You have the right to shut the fuck up."
- phrase_sound = "stfu"
- if(16)
- phrase_text = "Shut up crime!"
- phrase_sound = "shutup"
- if(17)
- phrase_text = "Face the wrath of the golden bolt."
- phrase_sound = "super"
- if(18)
- phrase_text = "I am, the LAW!"
- phrase_sound = "dredd"
-
- usr.audible_message("[usr]'s Compli-o-Nator: [phrase_text]")
- playsound(src.loc, "sound/voice/complionator/[phrase_sound].ogg", 100, FALSE, 4)
- cooldown = world.time
- cooldown_special = world.time
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index 3914fc0043..f36b4b7158 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -16,59 +16,6 @@
return
..()
-/obj/item/clothing/mask/surgical
- name = "sterile mask"
- desc = ""
- icon_state = "sterile"
- item_state = "sterile"
- w_class = WEIGHT_CLASS_TINY
- flags_inv = HIDEFACE
- flags_cover = MASKCOVERSMOUTH
- visor_flags_inv = HIDEFACE
- visor_flags_cover = MASKCOVERSMOUTH
- gas_transfer_coefficient = 0.9
- permeability_coefficient = 0.01
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 25, "rad" = 0, "fire" = 0, "acid" = 0)
- actions_types = list(/datum/action/item_action/adjust)
-
-/obj/item/clothing/mask/surgical/attack_self(mob/user)
- adjustmask(user)
-
-/obj/item/clothing/mask/fakemoustache
- name = "fake moustache"
- desc = ""
- icon_state = "fake-moustache"
- flags_inv = HIDEFACE
-
-/obj/item/clothing/mask/fakemoustache/italian
- name = "italian moustache"
- desc = ""
- modifies_speech = TRUE
-
-/obj/item/clothing/mask/fakemoustache/italian/handle_speech(datum/source, list/speech_args)
- var/message = speech_args[SPEECH_MESSAGE]
- if(message[1] != "*")
- message = " [message]"
- var/list/italian_words = strings("italian_replacement.json", "italian")
-
- for(var/key in italian_words)
- var/value = italian_words[key]
- if(islist(value))
- value = pick(value)
-
- message = replacetextEx(message, " [uppertext(key)]", " [uppertext(value)]")
- message = replacetextEx(message, " [capitalize(key)]", " [capitalize(value)]")
- message = replacetextEx(message, " [key]", " [value]")
-
- if(prob(3))
- message += pick(" Ravioli, ravioli, give me the formuoli!"," Mamma-mia!"," Mamma-mia! That's a spicy meat-ball!", " La la la la la funiculi funicula!")
- speech_args[SPEECH_MESSAGE] = trim(message)
-
-/obj/item/clothing/mask/joy
- name = "joy mask"
- desc = ""
- icon_state = "joy"
-
/obj/item/clothing/mask/pig
name = "pig mask"
desc = ""
@@ -89,90 +36,6 @@
flags_inv = HIDEFACIALHAIR
clothing_flags = NONE
-/obj/item/clothing/mask/pig/cursed/Initialize()
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT)
- playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE)
-
-///frog mask - reeee!!
-/obj/item/clothing/mask/frog
- name = "frog mask"
- desc = ""
- icon_state = "frog"
- item_state = "frog"
- flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
- w_class = WEIGHT_CLASS_SMALL
- clothing_flags = VOICEBOX_TOGGLABLE
- modifies_speech = TRUE
-
-/obj/item/clothing/mask/frog/handle_speech(datum/source, list/speech_args) //whenever you speak
- if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED))
- if(prob(5)) //sometimes, the angry spirit finds others words to speak.
- speech_args[SPEECH_MESSAGE] = pick("HUUUUU!!","SMOOOOOKIN'!!","Hello my baby, hello my honey, hello my rag-time gal.", "Feels bad, man.", "GIT DIS GUY OFF ME!!" ,"SOMEBODY STOP ME!!", "NORMIES, GET OUT!!")
- else
- speech_args[SPEECH_MESSAGE] = pick("Ree!!", "Reee!!","REEE!!","REEEEE!!") //but its usually just angry gibberish,
-
-/obj/item/clothing/mask/frog/cursed
- clothing_flags = NONE
-
-/obj/item/clothing/mask/frog/cursed/Initialize()
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT)
-
-/obj/item/clothing/mask/frog/cursed/equipped(mob/user, slot)
- var/mob/living/carbon/C = user
- if(C.wear_mask == src && HAS_TRAIT_FROM(src, TRAIT_NODROP, CURSED_MASK_TRAIT))
- to_chat(user, "[src] was cursed! Ree!!")
- return ..()
-
-/obj/item/clothing/mask/cowmask
- name = "cow mask"
- icon_state = "cowmask"
- item_state = "cowmask"
- clothing_flags = VOICEBOX_TOGGLABLE
- flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
- w_class = WEIGHT_CLASS_SMALL
- modifies_speech = TRUE
-
-/obj/item/clothing/mask/cowmask/handle_speech(datum/source, list/speech_args)
- if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED))
- speech_args[SPEECH_MESSAGE] = pick("Moooooooo!","Moo!","Moooo!")
-
-/obj/item/clothing/mask/cowmask/cursed
- name = "cow face"
- desc = ""
- flags_inv = HIDEFACIALHAIR
- clothing_flags = NONE
-
-/obj/item/clothing/mask/cowmask/cursed/Initialize()
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT)
- playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE)
-
-/obj/item/clothing/mask/horsehead
- name = "horse head mask"
- desc = ""
- icon_state = "horsehead"
- item_state = "horsehead"
- flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDEEYES|HIDEEARS
- w_class = WEIGHT_CLASS_SMALL
- clothing_flags = VOICEBOX_TOGGLABLE
-
-/obj/item/clothing/mask/horsehead/handle_speech(datum/source, list/speech_args)
- if(!CHECK_BITFIELD(clothing_flags, VOICEBOX_DISABLED))
- speech_args[SPEECH_MESSAGE] = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!")
-
-/obj/item/clothing/mask/horsehead/cursed
- name = "horse face"
- desc = ""
- clothing_flags = NONE
- flags_inv = HIDEFACIALHAIR
-
-/obj/item/clothing/mask/horsehead/cursed/Initialize()
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, CURSED_MASK_TRAIT)
- playsound(get_turf(src), 'sound/blank.ogg', 50, TRUE)
-
/obj/item/clothing/mask/rat
name = "rat mask"
desc = ""
@@ -262,74 +125,8 @@
else
to_chat(user, "I must be holding [src] in order to tie it!")
-/obj/item/clothing/mask/bandana/red
- name = "red bandana"
- desc = ""
- icon_state = "bandred"
-
-/obj/item/clothing/mask/bandana/blue
- name = "blue bandana"
- desc = ""
- icon_state = "bandblue"
-
-/obj/item/clothing/mask/bandana/green
- name = "green bandana"
- desc = ""
- icon_state = "bandgreen"
-
-/obj/item/clothing/mask/bandana/gold
- name = "gold bandana"
- desc = ""
- icon_state = "bandgold"
/obj/item/clothing/mask/bandana/black
name = "black bandana"
desc = ""
icon_state = "bandblack"
-
-/obj/item/clothing/mask/bandana/skull
- name = "skull bandana"
- desc = ""
- icon_state = "bandskull"
-
-/obj/item/clothing/mask/bandana/durathread
- name = "durathread bandana"
- desc = "A bandana made from durathread, you wish it would provide some protection to its wearer, but it's far too thin..."
- icon_state = "banddurathread"
-
-/obj/item/clothing/mask/mummy
- name = "mummy mask"
- desc = ""
- icon_state = "mummy_mask"
- item_state = "mummy_mask"
- flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
-
-/obj/item/clothing/mask/scarecrow
- name = "sack mask"
- desc = ""
- icon_state = "scarecrow_sack"
- item_state = "scarecrow_sack"
- flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
-
-/obj/item/clothing/mask/gondola
- name = "gondola mask"
- desc = ""
- icon_state = "gondola"
- item_state = "gondola"
- flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
- w_class = WEIGHT_CLASS_SMALL
- modifies_speech = TRUE
-
-/obj/item/clothing/mask/gondola/handle_speech(datum/source, list/speech_args)
- var/message = speech_args[SPEECH_MESSAGE]
- if(message[1] != "*")
- message = " [message]"
- var/list/spurdo_words = strings("spurdo_replacement.json", "spurdo")
- for(var/key in spurdo_words)
- var/value = spurdo_words[key]
- if(islist(value))
- value = pick(value)
- message = replacetextEx(message,regex(uppertext(key),"g"), "[uppertext(value)]")
- message = replacetextEx(message,regex(capitalize(key),"g"), "[capitalize(value)]")
- message = replacetextEx(message,regex(key,"g"), "[value]")
- speech_args[SPEECH_MESSAGE] = trim(message)
diff --git a/code/modules/clothing/outfits/event.dm b/code/modules/clothing/outfits/event.dm
deleted file mode 100644
index 35788e479d..0000000000
--- a/code/modules/clothing/outfits/event.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-/datum/outfit/santa //ho ho ho!
- name = "Santa Claus"
-
- uniform = /obj/item/clothing/under/color/red
- shoes = /obj/item/clothing/shoes/sneakers/red
- head = /obj/item/clothing/head/santa
- back = /obj/item/storage/backpack/santabag
- r_pocket = /obj/item/flashlight
- gloves = /obj/item/clothing/gloves/color/red
- backpack_contents = list(/obj/item/a_gift/anything = 5)
-
-/datum/outfit/santa/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
- return
- H.fully_replace_character_name(H.real_name, "Santa Claus")
- H.mind.assigned_role = "Santa"
- H.mind.special_role = "Santa"
-
- H.hairstyle = "Long Hair 3"
- H.facial_hairstyle = "Beard (Full)"
- H.hair_color = "FFF"
- H.facial_hair_color = "FFF"
- H.update_hair()
diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm
deleted file mode 100644
index 796cdbd0ea..0000000000
--- a/code/modules/clothing/outfits/standard.dm
+++ /dev/null
@@ -1,245 +0,0 @@
-/datum/outfit/spec_ops
- name = "Special Ops Officer"
-
- uniform = /obj/item/clothing/under/syndicate
- shoes = /obj/item/clothing/shoes/combat/swat
- gloves = /obj/item/clothing/gloves/combat
- glasses = /obj/item/clothing/glasses/thermal/eyepatch
- mask = /obj/item/clothing/mask/cigarette/cigar/havana
- r_pocket = /obj/item/lighter
- back = /obj/item/storage/backpack/satchel/leather
-
-/datum/outfit/spec_ops/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
- return
-
-/datum/outfit/space
- name = "Standard Space Gear"
-
- uniform = /obj/item/clothing/under/color/grey
- shoes = /obj/item/clothing/shoes/sneakers/black
- head = /obj/item/clothing/head/helmet/space
- mask = /obj/item/clothing/mask/breath
-
-/datum/outfit/tournament
- name = "tournament standard red"
-
- uniform = /obj/item/clothing/under/color/red
- shoes = /obj/item/clothing/shoes/sneakers/black
- suit = /obj/item/clothing/suit/armor/vest
- head = /obj/item/clothing/head/helmet/thunderdome
- l_hand = /obj/item/kitchen/knife
- r_pocket = /obj/item/grenade/smokebomb
-
-/datum/outfit/tournament/green
- name = "tournament standard green"
-
- uniform = /obj/item/clothing/under/color/green
-
-/datum/outfit/tournament/gangster
- name = "tournament gangster"
-
- uniform = /obj/item/clothing/under/rank/security/detective
- glasses = /obj/item/clothing/glasses/thermal/monocle
- head = /obj/item/clothing/head/fedora/det_hat
- r_hand = /obj/item/gun/ballistic
- l_hand = null
- r_pocket = /obj/item/ammo_box/c10mm
-
-/datum/outfit/tournament/janitor
- name = "tournament janitor"
-
- uniform = /obj/item/clothing/under/rank/civilian/janitor
- back = /obj/item/storage/backpack
- suit = null
- head = null
- r_hand = /obj/item/mop
- l_hand = /obj/item/reagent_containers/glass/bucket
- backpack_contents = list(/obj/item/stack/tile/plasteel=6)
-
-/datum/outfit/tournament/janitor/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
- return
-
- var/obj/item/reagent_containers/glass/bucket/bucket = H.get_item_for_held_index(1)
- bucket.reagents.add_reagent(/datum/reagent/water,70)
-
-/datum/outfit/pirate
- name = "Space Pirate"
-
- uniform = /obj/item/clothing/under/costume/pirate
- shoes = /obj/item/clothing/shoes/sneakers/brown
- suit = /obj/item/clothing/suit/pirate
- head = /obj/item/clothing/head/bandana
- glasses = /obj/item/clothing/glasses/eyepatch
-
-
-/datum/outfit/pirate/post_equip(mob/living/carbon/human/H)
- H.faction |= "pirate"
-
-/datum/outfit/tunnel_clown
- name = "Tunnel Clown"
-
- uniform = /obj/item/clothing/under/rank/civilian/clown
- shoes = /obj/item/clothing/shoes/clown_shoes
- gloves = /obj/item/clothing/gloves/color/black
- mask = /obj/item/clothing/mask/gas/clown_hat
- glasses = /obj/item/clothing/glasses/thermal/monocle
- suit = /obj/item/clothing/suit/hooded/chaplain_hoodie
- l_pocket = /obj/item/reagent_containers/food/snacks/grown/banana
- r_pocket = /obj/item/bikehorn
- r_hand = /obj/item/twohanded/fireaxe
-
-/datum/outfit/tunnel_clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
- return
-
-/datum/outfit/psycho
- name = "Masked Killer"
-
- uniform = /obj/item/clothing/under/misc/overalls
- shoes = /obj/item/clothing/shoes/sneakers/white
- gloves = /obj/item/clothing/gloves/color/latex
- mask = /obj/item/clothing/mask/surgical
- head = /obj/item/clothing/head/welding
- glasses = /obj/item/clothing/glasses/thermal/monocle
- suit = /obj/item/clothing/suit/apron
- l_pocket = /obj/item/kitchen/knife
- r_pocket = /obj/item/scalpel
- r_hand = /obj/item/twohanded/fireaxe
-
-/datum/outfit/psycho/post_equip(mob/living/carbon/human/H)
- for(var/obj/item/carried_item in H.get_equipped_items(TRUE))
- carried_item.add_mob_blood(H)//Oh yes, there will be blood...
- for(var/obj/item/I in H.held_items)
- I.add_mob_blood(H)
- H.regenerate_icons()
-
-/datum/outfit/assassin
- name = "Assassin"
-
- uniform = /obj/item/clothing/under/suit/black
- shoes = /obj/item/clothing/shoes/sneakers/black
- gloves = /obj/item/clothing/gloves/color/black
- glasses = /obj/item/clothing/glasses/sunglasses
- l_hand = /obj/item/storage/secure/briefcase
-
-/datum/outfit/assassin/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- var/obj/item/clothing/under/U = H.wear_pants
- U.attach_accessory(new /obj/item/clothing/accessory/waistcoat(H))
-
- if(visualsOnly)
- return
-
- //Could use a type
- var/obj/item/storage/secure/briefcase/sec_briefcase = H.get_item_for_held_index(1)
- for(var/obj/item/briefcase_item in sec_briefcase)
- qdel(briefcase_item)
- for(var/i = 3 to 0 step -1)
- SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/stack/spacecash/c1000, null, TRUE, TRUE)
- SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/ballistic/revolver/mateba, null, TRUE, TRUE)
- SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/ammo_box/a357, null, TRUE, TRUE)
-
-/datum/outfit/centcom/commander
- name = "CentCom Commander"
-
- uniform = /obj/item/clothing/under/rank/centcom/commander
- suit = /obj/item/clothing/suit/armor/bulletproof
- shoes = /obj/item/clothing/shoes/combat/swat
- gloves = /obj/item/clothing/gloves/combat
- glasses = /obj/item/clothing/glasses/eyepatch
- mask = /obj/item/clothing/mask/cigarette/cigar/cohiba
- head = /obj/item/clothing/head/centhat
- belt = /obj/item/gun/ballistic/revolver/mateba
- r_pocket = /obj/item/lighter
- l_pocket = /obj/item/ammo_box/a357
- back = /obj/item/storage/backpack/satchel/leather
-
-/datum/outfit/centcom/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
- return
-
-/datum/outfit/soviet
- name = "Soviet Admiral"
-
- uniform = /obj/item/clothing/under/costume/soviet
- head = /obj/item/clothing/head/pirate/captain
- shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/combat
- glasses = /obj/item/clothing/glasses/thermal/eyepatch
- suit = /obj/item/clothing/suit/pirate/captain
- back = /obj/item/storage/backpack/satchel/leather
- belt = /obj/item/gun/ballistic/revolver/mateba
-
-
-/datum/outfit/soviet/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
- return
-
-/datum/outfit/mobster
- name = "Mobster"
-
- uniform = /obj/item/clothing/under/suit/black_really
- head = /obj/item/clothing/head/fedora
- shoes = /obj/item/clothing/shoes/laceup
- gloves = /obj/item/clothing/gloves/color/black
- glasses = /obj/item/clothing/glasses/sunglasses
- r_hand = /obj/item/gun/ballistic/automatic/tommygun
-
-/datum/outfit/mobster/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
- return
-
-/datum/outfit/plasmaman
- name = "Plasmaman"
-
- head = /obj/item/clothing/head/helmet/space/plasmaman
- uniform = /obj/item/clothing/under/plasmaman
- r_hand= /obj/item/tank/internals/plasmaman/belt/full
- mask = /obj/item/clothing/mask/breath
-
-/datum/outfit/death_commando
- name = "Death Commando"
-
- uniform = /obj/item/clothing/under/rank/centcom/commander
- shoes = /obj/item/clothing/shoes/combat/swat
- gloves = /obj/item/clothing/gloves/combat
- mask = /obj/item/clothing/mask/gas/sechailer/swat
- glasses = /obj/item/clothing/glasses/hud/toggle/thermal
- back = /obj/item/storage/backpack/security
- suit_store = /obj/item/tank/internals/emergency_oxygen/double
- belt = /obj/item/gun/ballistic/revolver/mateba
-
- backpack_contents = list(/obj/item/storage/box=1,\
- /obj/item/ammo_box/a357=1,\
- /obj/item/storage/firstaid/regular=1,\
- /obj/item/storage/box/flashbangs=1,\
- /obj/item/flashlight=1)
-
-/datum/outfit/death_commando/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- if(visualsOnly)
- return
-
-/datum/outfit/chrono_agent
- name = "Timeline Eradication Agent"
- uniform = /obj/item/clothing/under/color/white
- mask = /obj/item/clothing/mask/breath
- suit_store = /obj/item/tank/internals/oxygen
-
-/datum/outfit/debug //Debug objs plus hardsuit
- name = "Debug outfit"
- uniform = /obj/item/clothing/under/misc/patriotsuit
- glasses = /obj/item/clothing/glasses/meson/night
- mask = /obj/item/clothing/mask/gas/welding/up
- gloves = /obj/item/clothing/gloves/combat
- belt = /obj/item/storage/belt/utility/chief/full
- shoes = /obj/item/clothing/shoes/magboots/advance
- suit_store = /obj/item/tank/internals/oxygen
- back = /obj/item/storage/backpack/holding
- box = /obj/item/storage/box/debugtools
- internals_slot = SLOT_S_STORE
- backpack_contents = list(
- /obj/item/gun/magic/wand/resurrection/debug=1,\
- /obj/item/gun/magic/wand/death/debug=1,\
- /obj/item/debug/human_spawner=1
- )
diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm
deleted file mode 100644
index f97e643e47..0000000000
--- a/code/modules/clothing/outfits/vr.dm
+++ /dev/null
@@ -1,22 +0,0 @@
-/datum/outfit/vr
- name = "Basic VR"
- uniform = /obj/item/clothing/under/color/random
- shoes = /obj/item/clothing/shoes/sneakers/black
-
-
-/datum/outfit/vr/pre_equip(mob/living/carbon/human/H)
- H.dna.species.before_equip_job(null, H)
-
-/datum/outfit/vr/syndicate
- name = "Syndicate VR Operative - Basic"
- uniform = /obj/item/clothing/under/syndicate
- shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/combat
- back = /obj/item/storage/backpack
- belt = /obj/item/gun/ballistic/automatic/pistol
- l_pocket = /obj/item/paper/fluff/vr/fluke_ops
- backpack_contents = list(/obj/item/kitchen/knife/combat/survival)
-
-/obj/item/paper/fluff/vr/fluke_ops
- name = "Where is my uplink?"
- info = "Use the radio in your backpack."
diff --git a/code/modules/clothing/outfits/vv_outfit.dm b/code/modules/clothing/outfits/vv_outfit.dm
index 50a430f3c4..f623ebf658 100644
--- a/code/modules/clothing/outfits/vv_outfit.dm
+++ b/code/modules/clothing/outfits/vv_outfit.dm
@@ -106,10 +106,6 @@
typecounts[I.type] = 1
O.backpack_contents = typecounts
//TODO : Copy varedits from backpack stuff too.
- //Copy implants
- O.implants = list()
- for(var/obj/item/implant/I in implants)
- O.implants |= I.type
//Copy to outfit cache
var/outfit_name = stripped_input(usr,"Enter the outfit name")
O.name = outfit_name
diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm
deleted file mode 100644
index ae119cfa52..0000000000
--- a/code/modules/clothing/shoes/bananashoes.dm
+++ /dev/null
@@ -1,66 +0,0 @@
-//banana flavored chaos and horror ahead
-
-/obj/item/clothing/shoes/clown_shoes/banana_shoes
- name = "mk-honk prototype shoes"
- desc = ""
- icon_state = "clown_prototype_off"
- actions_types = list(/datum/action/item_action/toggle)
- var/on = FALSE
- var/always_noslip = FALSE
-
-/obj/item/clothing/shoes/clown_shoes/banana_shoes/Initialize()
- . = ..()
- AddComponent(/datum/component/material_container, list(/datum/material/bananium), 200000, TRUE, /obj/item/stack)
- AddComponent(/datum/component/squeak, list('sound/blank.ogg'=1), 75)
- if(always_noslip)
- clothing_flags |= NOSLIP
-
-/obj/item/clothing/shoes/clown_shoes/banana_shoes/step_action()
- . = ..()
- var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
- if(on)
- if(bananium.get_material_amount(/datum/material/bananium) < 100)
- on = !on
- if(!always_noslip)
- clothing_flags &= ~NOSLIP
- update_icon()
- to_chat(loc, "I ran out of bananium!")
- else
- new /obj/item/grown/bananapeel/specialpeel(get_step(src,turn(usr.dir, 180))) //honk
- bananium.use_amount_mat(100, /datum/material/bananium)
-
-/obj/item/clothing/shoes/clown_shoes/banana_shoes/attack_self(mob/user)
- var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
- var/sheet_amount = bananium.retrieve_all()
- if(sheet_amount)
- to_chat(user, "I retrieve [sheet_amount] sheets of bananium from the prototype shoes.")
- else
- to_chat(user, "I cannot retrieve any bananium from the prototype shoes!")
-
-/obj/item/clothing/shoes/clown_shoes/banana_shoes/examine(mob/user)
- . = ..()
- . += "The shoes are [on ? "enabled" : "disabled"]."
-
-/obj/item/clothing/shoes/clown_shoes/banana_shoes/ui_action_click(mob/user)
- var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container)
- if(bananium.get_material_amount(/datum/material/bananium))
- on = !on
- update_icon()
- to_chat(user, "I [on ? "activate" : "deactivate"] the prototype shoes.")
- if(!always_noslip)
- if(on)
- clothing_flags |= NOSLIP
- else
- clothing_flags &= ~NOSLIP
- else
- to_chat(user, "I need bananium to turn the prototype shoes on!")
-
-/obj/item/clothing/shoes/clown_shoes/banana_shoes/update_icon()
- if(on)
- icon_state = "clown_prototype_on"
- else
- icon_state = "clown_prototype_off"
- usr.update_inv_shoes()
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm
deleted file mode 100644
index 70de84d69a..0000000000
--- a/code/modules/clothing/shoes/colour.dm
+++ /dev/null
@@ -1,89 +0,0 @@
-/obj/item/clothing/shoes/sneakers
- dying_key = DYE_REGISTRY_SNEAKERS
-
-/obj/item/clothing/shoes/sneakers/black
- name = "black shoes"
- icon_state = "black"
- desc = ""
- custom_price = 20
-
- cold_protection = FEET
- min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
- heat_protection = FEET
- max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
-
-/obj/item/clothing/shoes/sneakers/brown
- name = "brown shoes"
- desc = ""
- icon_state = "brown"
-
-/obj/item/clothing/shoes/sneakers/blue
- name = "blue shoes"
- icon_state = "blue"
-
-/obj/item/clothing/shoes/sneakers/green
- name = "green shoes"
- icon_state = "green"
-
-/obj/item/clothing/shoes/sneakers/yellow
- name = "yellow shoes"
- icon_state = "yellow"
-
-/obj/item/clothing/shoes/sneakers/purple
- name = "purple shoes"
- icon_state = "purple"
-
-/obj/item/clothing/shoes/sneakers/red
- name = "red shoes"
- desc = ""
- icon_state = "red"
-
-/obj/item/clothing/shoes/sneakers/white
- name = "white shoes"
- icon_state = "white"
- permeability_coefficient = 0.01
-
-/obj/item/clothing/shoes/sneakers/rainbow
- name = "rainbow shoes"
- desc = ""
- icon_state = "rain_bow"
-
-/obj/item/clothing/shoes/sneakers/orange
- name = "orange shoes"
- icon_state = "orange"
-
-/obj/item/clothing/shoes/sneakers/orange/attack_self(mob/user)
- if (src.chained)
- src.chained = null
- src.slowdown = SHOES_SLOWDOWN
- new /obj/item/restraints/handcuffs( user.loc )
- src.icon_state = "orange"
- return
-
-/obj/item/clothing/shoes/sneakers/orange/attackby(obj/H, loc, params)
- ..()
- // Note: not using istype here because we want to ignore all subtypes
- if (H.type == /obj/item/restraints/handcuffs && !chained)
- qdel(H)
- src.chained = 1
- src.slowdown = 15
- src.icon_state = "orange1"
- return
-
-/obj/item/clothing/shoes/sneakers/orange/allow_attack_hand_drop(mob/user)
- if(ishuman(user))
- var/mob/living/carbon/human/C = user
- if(C.shoes == src && chained == 1)
- to_chat(user, "I need help taking these off!")
- return FALSE
- return ..()
-
-/obj/item/clothing/shoes/sneakers/orange/MouseDrop(atom/over)
- var/mob/m = usr
- if(ishuman(m))
- var/mob/living/carbon/human/c = m
- if(c.shoes == src && chained == 1)
- to_chat(c, "I need help taking these off!")
- return
- return ..()
-
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
deleted file mode 100644
index b95f896c74..0000000000
--- a/code/modules/clothing/shoes/magboots.dm
+++ /dev/null
@@ -1,59 +0,0 @@
-/obj/item/clothing/shoes/magboots
- desc = ""
- name = "magboots"
- icon_state = "magboots0"
- var/magboot_state = "magboots"
- var/magpulse = 0
- var/slowdown_active = 2
- permeability_coefficient = 0.05
- actions_types = list(/datum/action/item_action/toggle)
- strip_delay = 70
- equip_delay_other = 70
- resistance_flags = FIRE_PROOF
-
-/obj/item/clothing/shoes/magboots/verb/toggle()
- set name = "Toggle Magboots"
- set hidden = 1
- set src in usr
- if(!can_use(usr))
- return
- attack_self(usr)
-
-
-/obj/item/clothing/shoes/magboots/attack_self(mob/user)
- if(magpulse)
- clothing_flags &= ~NOSLIP
- slowdown = SHOES_SLOWDOWN
- else
- clothing_flags |= NOSLIP
- slowdown = slowdown_active
- magpulse = !magpulse
- icon_state = "[magboot_state][magpulse]"
- to_chat(user, "I [magpulse ? "enable" : "disable"] the mag-pulse traction system.")
- user.update_inv_shoes() //so our mob-overlays update
- user.update_gravity(user.has_gravity())
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
-
-/obj/item/clothing/shoes/magboots/negates_gravity()
- return clothing_flags & NOSLIP
-
-/obj/item/clothing/shoes/magboots/examine(mob/user)
- . = ..()
- . += "Its mag-pulse traction system appears to be [magpulse ? "enabled" : "disabled"]."
-
-
-/obj/item/clothing/shoes/magboots/advance
- desc = ""
- name = "advanced magboots"
- icon_state = "advmag0"
- magboot_state = "advmag"
- slowdown_active = SHOES_SLOWDOWN
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
-
-/obj/item/clothing/shoes/magboots/syndie
- desc = ""
- name = "blood-red magboots"
- icon_state = "syndiemag0"
- magboot_state = "syndiemag"
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
deleted file mode 100644
index adddddc73e..0000000000
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ /dev/null
@@ -1,420 +0,0 @@
-
-
-/obj/item/clothing/shoes/sneakers/mime
- name = "mime shoes"
- icon_state = "mime"
-
-/obj/item/clothing/shoes/combat //basic syndicate combat boots for nuke ops and mob corpses
- name = "combat boots"
- desc = ""
- icon_state = "jackboots"
- item_state = "jackboots"
- lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
- armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50)
- strip_delay = 40
- resistance_flags = NONE
- permeability_coefficient = 0.05 //Thick soles, and covers the ankle
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
-
-/obj/item/clothing/shoes/combat/swat //overpowered boots for death squads
- name = "\improper SWAT boots"
- desc = ""
- permeability_coefficient = 0.01
- clothing_flags = NOSLIP
- armor = list("melee" = 40, "bullet" = 30, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 90, "acid" = 50)
-
-/obj/item/clothing/shoes/sandal
- desc = ""
- name = "sandals"
- icon_state = "wizard"
- strip_delay = 5
- equip_delay_other = 50
- permeability_coefficient = 0.9
-
-/obj/item/clothing/shoes/sandal/marisa
- desc = ""
- name = "magic shoes"
- icon_state = "black"
- resistance_flags = FIRE_PROOF | ACID_PROOF
-
-/obj/item/clothing/shoes/sandal/magic
- name = "magical sandals"
- desc = ""
- resistance_flags = FIRE_PROOF | ACID_PROOF
-
-/obj/item/clothing/shoes/galoshes
- desc = ""
- name = "galoshes"
- icon_state = "galoshes"
- permeability_coefficient = 0.01
- clothing_flags = NOSLIP
- slowdown = SHOES_SLOWDOWN+1
- strip_delay = 30
- equip_delay_other = 50
- resistance_flags = NONE
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 75)
- can_be_bloody = FALSE
- custom_price = 100
-
-/obj/item/clothing/shoes/galoshes/dry
- name = "absorbent galoshes"
- desc = ""
- icon_state = "galoshes_dry"
-
-/obj/item/clothing/shoes/galoshes/dry/step_action()
- var/turf/open/t_loc = get_turf(src)
- SEND_SIGNAL(t_loc, COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY)
-
-/obj/item/clothing/shoes/clown_shoes
- desc = ""
- name = "clown shoes"
- icon_state = "clown"
- item_state = "clown_shoes"
- slowdown = SHOES_SLOWDOWN+1
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes/clown
- var/datum/component/waddle
- var/enabled_waddle = TRUE
-
-/obj/item/clothing/shoes/clown_shoes/Initialize()
- . = ..()
- AddComponent(/datum/component/squeak, list('sound/blank.ogg'=1), 50)
-
-/obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot)
- . = ..()
- if(slot == SLOT_SHOES)
- if(enabled_waddle)
- waddle = user.AddComponent(/datum/component/waddling)
- if(user.mind && user.mind.assigned_role == "Clown")
- SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "clownshoes", /datum/mood_event/clownshoes)
-
-/obj/item/clothing/shoes/clown_shoes/dropped(mob/user)
- . = ..()
- QDEL_NULL(waddle)
- if(user.mind && user.mind.assigned_role == "Clown")
- SEND_SIGNAL(user, COMSIG_CLEAR_MOOD_EVENT, "clownshoes")
-
-/obj/item/clothing/shoes/clown_shoes/CtrlClick(mob/living/user)
- if(!isliving(user))
- return
- if(user.get_active_held_item() != src)
- to_chat(user, "I must hold the [src] in your hand to do this!")
- return
- if (!enabled_waddle)
- to_chat(user, "I switch off the waddle dampeners!")
- enabled_waddle = TRUE
- else
- to_chat(user, "I switch on the waddle dampeners!")
- enabled_waddle = FALSE
-
-/obj/item/clothing/shoes/clown_shoes/jester
- name = "jester shoes"
- desc = ""
- icon_state = "jester_shoes"
-
-/obj/item/clothing/shoes/jackboots
- name = "jackboots"
- desc = ""
- icon_state = "jackboots"
- item_state = "jackboots"
- lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
- strip_delay = 30
- equip_delay_other = 50
- resistance_flags = NONE
- permeability_coefficient = 0.05 //Thick soles, and covers the ankle
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
-
-/obj/item/clothing/shoes/jackboots/fast
- slowdown = -1
-
-/obj/item/clothing/shoes/winterboots
- name = "winter boots"
- desc = ""
- icon_state = "winterboots"
- item_state = "winterboots"
- permeability_coefficient = 0.15
- cold_protection = FEET|LEGS
- min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
- heat_protection = FEET|LEGS
- max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
-
-/obj/item/clothing/shoes/workboots
- name = "work boots"
- desc = ""
- icon_state = "workboots"
- item_state = "jackboots"
- lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
- permeability_coefficient = 0.15
- strip_delay = 20
- equip_delay_other = 40
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
-
-/obj/item/clothing/shoes/workboots/mining
- name = "mining boots"
- desc = ""
- icon_state = "explorer"
- resistance_flags = FIRE_PROOF
-
-/obj/item/clothing/shoes/cult
- name = "\improper Nar'Sien invoker boots"
- desc = ""
- icon_state = "cult"
- item_state = "cult"
- cold_protection = FEET
- min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
- heat_protection = FEET
- max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT
-
-/obj/item/clothing/shoes/cult/alt
- name = "cultist boots"
- icon_state = "cultalt"
-
-/obj/item/clothing/shoes/cult/alt/ghost
- item_flags = DROPDEL
-
-/obj/item/clothing/shoes/cult/alt/ghost/Initialize()
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
-
-/obj/item/clothing/shoes/cyborg
- name = "cyborg boots"
- desc = ""
- icon_state = "boots"
-
-/obj/item/clothing/shoes/laceup
- name = "laceup shoes"
- desc = ""
- icon_state = "laceups"
- equip_delay_other = 50
-
-/obj/item/clothing/shoes/roman
- name = "roman sandals"
- desc = ""
- icon_state = "roman"
- item_state = "roman"
- strip_delay = 100
- equip_delay_other = 100
- permeability_coefficient = 0.9
-
-/obj/item/clothing/shoes/griffin
- name = "griffon boots"
- desc = ""
- icon_state = "griffinboots"
- item_state = "griffinboots"
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
-
-/obj/item/clothing/shoes/bhop
- name = "jump boots"
- desc = ""
- icon_state = "jetboots"
- item_state = "jetboots"
- resistance_flags = FIRE_PROOF
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
- actions_types = list(/datum/action/item_action/bhop)
- permeability_coefficient = 0.05
- strip_delay = 30
- var/jumpdistance = 5 //-1 from to see the actual distance, e.g 4 goes over 3 tiles
- var/jumpspeed = 3
- var/recharging_rate = 60 //default 6 seconds between each dash
- var/recharging_time = 0 //time until next dash
-
-/obj/item/clothing/shoes/bhop/ui_action_click(mob/user, action)
- if(!isliving(user))
- return
-
- if(recharging_time > world.time)
- to_chat(user, "The boot's internal propulsion needs to recharge still!")
- return
-
- var/atom/target = get_edge_target_turf(user, user.dir) //gets the user's direction
-
- if (user.throw_at(target, jumpdistance, jumpspeed, spin = FALSE, diagonals_first = TRUE))
- playsound(src, 'sound/blank.ogg', 50, TRUE, TRUE)
- user.visible_message("[usr] dashes forward into the air!")
- recharging_time = world.time + recharging_rate
- else
- to_chat(user, "Something prevents you from dashing forward!")
-
-/obj/item/clothing/shoes/singery
- name = "yellow performer's boots"
- desc = ""
- icon_state = "ysing"
- equip_delay_other = 50
-
-/obj/item/clothing/shoes/singerb
- name = "blue performer's boots"
- desc = ""
- icon_state = "bsing"
- equip_delay_other = 50
-
-/obj/item/clothing/shoes/bronze
- name = "bronze boots"
- desc = ""
- icon = 'icons/obj/clothing/clockwork_garb.dmi'
- icon_state = "clockwork_treads"
-
-/obj/item/clothing/shoes/bronze/Initialize()
- . = ..()
- AddComponent(/datum/component/squeak, list('sound/blank.ogg' = 1), 50)
-
-/obj/item/clothing/shoes/wheelys
- name = "Wheely-Heels"
- desc = "" //Thanks Fel
- icon_state = "wheelys"
- item_state = "wheelys"
- actions_types = list(/datum/action/item_action/wheelys)
- var/wheelToggle = FALSE //False means wheels are not popped out
- var/obj/vehicle/ridden/scooter/wheelys/W
-
-/obj/item/clothing/shoes/wheelys/Initialize()
- . = ..()
- W = new /obj/vehicle/ridden/scooter/wheelys(null)
-
-/obj/item/clothing/shoes/wheelys/ui_action_click(mob/user, action)
- if(!isliving(user))
- return
- if(!istype(user.get_item_by_slot(SLOT_SHOES), /obj/item/clothing/shoes/wheelys))
- to_chat(user, "I must be wearing the wheely-heels to use them!")
- return
- if(!(W.is_occupant(user)))
- wheelToggle = FALSE
- if(wheelToggle)
- W.unbuckle_mob(user)
- wheelToggle = FALSE
- return
- W.forceMove(get_turf(user))
- W.buckle_mob(user)
- wheelToggle = TRUE
-
-/obj/item/clothing/shoes/wheelys/dropped(mob/user)
- if(wheelToggle)
- W.unbuckle_mob(user)
- wheelToggle = FALSE
- ..()
-
-/obj/item/clothing/shoes/wheelys/Destroy()
- QDEL_NULL(W)
- . = ..()
-
-/obj/item/clothing/shoes/kindleKicks
- name = "Kindle Kicks"
- desc = ""
- icon_state = "kindleKicks"
- item_state = "kindleKicks"
- actions_types = list(/datum/action/item_action/kindleKicks)
- var/lightCycle = 0
- var/active = FALSE
-
-/obj/item/clothing/shoes/kindleKicks/ui_action_click(mob/user, action)
- if(active)
- return
- active = TRUE
- set_light(2, 2, 3, l_color = rgb(rand(0,255),rand(0,255),rand(0,255)))
- addtimer(CALLBACK(src, PROC_REF(lightUp)), 5)
-
-/obj/item/clothing/shoes/kindleKicks/proc/lightUp(mob/user)
- if(lightCycle < 15)
- set_light(2, 2, 3, l_color = rgb(rand(0,255),rand(0,255),rand(0,255)))
- lightCycle += 1
- addtimer(CALLBACK(src, PROC_REF(lightUp)), 5)
- else
- set_light(0)
- lightCycle = 0
- active = FALSE
-
-/obj/item/clothing/shoes/russian
- name = "russian boots"
- desc = ""
- icon_state = "rus_shoes"
- item_state = "rus_shoes"
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
-
-/obj/item/clothing/shoes/cowboy
- name = "cowboy boots"
- desc = ""
- icon_state = "cowboy_brown"
- permeability_coefficient = 0.05 //these are quite tall
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes
- custom_price = 35 //poor assistants cant afford 50 credits
- var/list/occupants = list()
- var/max_occupants = 4
-
-/obj/item/clothing/shoes/cowboy/Initialize()
- . = ..()
- if(prob(2))
- var/mob/living/simple_animal/hostile/retaliate/poison/snake/bootsnake = new/mob/living/simple_animal/hostile/retaliate/poison/snake(src)
- occupants += bootsnake
-
-
-/obj/item/clothing/shoes/cowboy/equipped(mob/living/carbon/user, slot)
- . = ..()
- if(slot == SLOT_SHOES)
- for(var/mob/living/occupant in occupants)
- occupant.forceMove(user.drop_location())
- user.visible_message("[user] recoils as something slithers out of [src].", "I feel a sudden stabbing pain in your [pick("foot", "toe", "ankle")]!")
- user.Knockdown(20) //Is one second paralyze better here? I feel you would fall on your ass in some fashion.
- user.apply_damage(5, BRUTE, pick(BODY_ZONE_R_LEG, BODY_ZONE_L_LEG))
- if(istype(occupant, /mob/living/simple_animal/hostile/retaliate/poison))
- user.reagents.add_reagent(/datum/reagent/toxin, 7)
- occupants.Cut()
-
-/obj/item/clothing/shoes/cowboy/MouseDrop_T(mob/living/target, mob/living/user)
- . = ..()
- if(user.stat || !(user.mobility_flags & MOBILITY_USE) || user.restrained() || !Adjacent(user) || !user.Adjacent(target) || target.stat == DEAD)
- return
- if(occupants.len >= max_occupants)
- to_chat(user, "[src] are full!")
- return
- if(istype(target, /mob/living/simple_animal/hostile/retaliate/poison/snake))
- occupants += target
- target.forceMove(src)
- to_chat(user, "[target] slithers into [src].")
-
-/obj/item/clothing/shoes/cowboy/container_resist(mob/living/user)
- if(!do_after(user, 10, target = user))
- return
- user.forceMove(user.drop_location())
- occupants -= user
-
-/obj/item/clothing/shoes/cowboy/white
- name = "white cowboy boots"
- icon_state = "cowboy_white"
-
-/obj/item/clothing/shoes/cowboy/black
- name = "black cowboy boots"
- desc = ""
- icon_state = "cowboy_black"
-
-/obj/item/clothing/shoes/cowboy/fancy
- name = "bilton wrangler boots"
- desc = ""
- icon_state = "cowboy_fancy"
- permeability_coefficient = 0.08
-
-/obj/item/clothing/shoes/cowboy/lizard
- name = "lizard skin boots"
- desc = ""
- icon_state = "lizardboots_green"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 0) //lizards like to stay warm
-
-/obj/item/clothing/shoes/cowboy/lizard/masterwork
- name = "\improper Hugs-The-Feet lizard skin boots"
- desc = ""
- icon_state = "lizardboots_blue"
-
-/obj/effect/spawner/lootdrop/lizardboots
- name = "random lizard boot quality"
- desc = ""
- icon = 'icons/obj/clothing/shoes.dmi'
- icon_state = "lizardboots_green"
- loot = list(
- /obj/item/clothing/shoes/cowboy/lizard = 7,
- /obj/item/clothing/shoes/cowboy/lizard/masterwork = 1)
-
-/obj/item/clothing/shoes/cookflops
- desc = ""
- name = "grilling sandals"
- icon_state = "cookflops"
diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm
index de870b1741..2b327e54ce 100644
--- a/code/modules/clothing/suits/_suits.dm
+++ b/code/modules/clothing/suits/_suits.dm
@@ -2,7 +2,6 @@
icon = 'icons/obj/clothing/suits.dmi'
name = "suit"
var/fire_resist = T0C+100
- allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
drop_sound = 'sound/blank.ogg'
pickup_sound = 'sound/blank.ogg'
@@ -15,10 +14,6 @@
/obj/item/clothing/suit/worn_overlays(isinhands = FALSE)
. = list()
if(!isinhands)
-// if(damaged_clothes)
-// . += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]")
-// if(HAS_BLOOD_DNA(src))
-// . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood")
var/mob/living/carbon/human/M = loc
if(ishuman(M) && M.wear_pants)
var/obj/item/clothing/under/U = M.wear_pants
@@ -31,6 +26,5 @@
..()
if(ismob(loc))
var/mob/M = loc
-// M.update_inv_wear_suit()
M.update_inv_shirt()
M.update_inv_armor()
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
deleted file mode 100644
index e621d14d98..0000000000
--- a/code/modules/clothing/suits/armor.dm
+++ /dev/null
@@ -1,279 +0,0 @@
-/obj/item/clothing/suit/armor
- allowed = null
- body_parts_covered = CHEST
- cold_protection = CHEST|GROIN
- min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
- heat_protection = CHEST|GROIN
- max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
- strip_delay = 60
- equip_delay_other = 40
- max_integrity = 250
- resistance_flags = NONE
- armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
-
-/obj/item/clothing/suit/armor/Initialize()
- . = ..()
- if(!allowed)
- allowed = GLOB.security_vest_allowed
-
-/obj/item/clothing/suit/armor/vest
- name = "armor vest"
- desc = ""
- icon_state = "armoralt"
- item_state = "armoralt"
- blood_overlay_type = "armor"
- dog_fashion = /datum/dog_fashion/back
-
-/obj/item/clothing/suit/armor/vest/alt
- desc = ""
- icon_state = "armor"
- item_state = "armor"
-
-/obj/item/clothing/suit/armor/vest/old
- name = "degrading armor vest"
- desc = ""
- icon_state = "armor"
- item_state = "armor"
- slowdown = 1
-
-/obj/item/clothing/suit/armor/vest/blueshirt
- name = "large armor vest"
- desc = ""
- icon_state = "blueshift"
- item_state = "blueshift"
- custom_premium_price = 600
-
-/obj/item/clothing/suit/armor/hos
- name = "armored greatcoat"
- desc = ""
- icon_state = "hos"
- item_state = "greatcoat"
- body_parts_covered = CHEST|GROIN|ARMS|LEGS
- armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90)
- cold_protection = CHEST|GROIN|LEGS|ARMS
- heat_protection = CHEST|GROIN|LEGS|ARMS
- strip_delay = 80
-
-/obj/item/clothing/suit/armor/hos/trenchcoat
- name = "armored trenchcoat"
- desc = ""
- icon_state = "hostrench"
- item_state = "hostrench"
- flags_inv = 0
- strip_delay = 80
-
-/obj/item/clothing/suit/armor/vest/warden
- name = "warden's jacket"
- desc = ""
- icon_state = "warden_alt"
- item_state = "armor"
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS|HANDS
- heat_protection = CHEST|GROIN|ARMS|HANDS
- strip_delay = 70
- resistance_flags = FLAMMABLE
- dog_fashion = null
-
-/obj/item/clothing/suit/armor/vest/warden/alt
- name = "warden's armored jacket"
- desc = ""
- icon_state = "warden_jacket"
-
-/obj/item/clothing/suit/armor/vest/leather
- name = "security overcoat"
- desc = ""
- icon_state = "leathercoat-sec"
- item_state = "hostrench"
- body_parts_covered = CHEST|GROIN|ARMS|LEGS
- cold_protection = CHEST|GROIN|LEGS|ARMS
- heat_protection = CHEST|GROIN|LEGS|ARMS
- dog_fashion = null
-
-/obj/item/clothing/suit/armor/vest/capcarapace
- name = "captain's carapace"
- desc = ""
- icon_state = "capcarapace"
- item_state = "armor"
- body_parts_covered = CHEST|GROIN
- armor = list("melee" = 50, "bullet" = 40, "laser" = 50, "energy" = 50, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 90)
- dog_fashion = null
- resistance_flags = FIRE_PROOF
-
-/obj/item/clothing/suit/armor/vest/capcarapace/syndicate
- name = "syndicate captain's vest"
- desc = ""
- icon_state = "syndievest"
-
-/obj/item/clothing/suit/armor/vest/capcarapace/alt
- name = "captain's parade jacket"
- desc = ""
- icon_state = "capformal"
- item_state = "capspacesuit"
-
-/obj/item/clothing/suit/armor/riot
- name = "riot suit"
- desc = ""
- icon_state = "riot"
- item_state = "swat_suit"
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
- clothing_flags = BLOCKS_SHOVE_KNOCKDOWN
- strip_delay = 80
- equip_delay_other = 60
-
-/obj/item/clothing/suit/armor/bone
- name = "bone armor"
- desc = ""
- icon_state = "bonearmor"
- item_state = "bonearmor"
- blood_overlay_type = "armor"
- armor = list("melee" = 35, "bullet" = 25, "laser" = 25, "energy" = 35, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS
-
-/obj/item/clothing/suit/armor/bulletproof
- name = "bulletproof armor"
- desc = ""
- icon_state = "bulletproof"
- item_state = "armor"
- blood_overlay_type = "armor"
- armor = list("melee" = 15, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
- strip_delay = 70
- equip_delay_other = 50
-
-/obj/item/clothing/suit/armor/laserproof
- name = "reflector vest"
- desc = ""
- icon_state = "armor_reflec"
- item_state = "armor_reflec"
- blood_overlay_type = "armor"
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- heat_protection = CHEST|GROIN|ARMS
- armor = list("melee" = 10, "bullet" = 10, "laser" = 60, "energy" = 60, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
- var/hit_reflect_chance = 50
-
-/obj/item/clothing/suit/armor/laserproof/IsReflect(def_zone)
- if(!(def_zone in list(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_GROIN, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))) //If not shot where ablative is covering you, you don't get the reflection bonus!
- return FALSE
- if (prob(hit_reflect_chance))
- return TRUE
-
-/obj/item/clothing/suit/armor/vest/det_suit
- name = "detective's armor vest"
- desc = ""
- icon_state = "detective-armor"
- resistance_flags = FLAMMABLE
- dog_fashion = null
-
-/obj/item/clothing/suit/armor/vest/det_suit/Initialize()
- . = ..()
- allowed = GLOB.detective_vest_allowed
-
-//All of the armor below is mostly unused
-
-/obj/item/clothing/suit/armor/centcom
- name = "\improper CentCom armor"
- desc = ""
- icon_state = "centcom"
- item_state = "centcom"
- w_class = WEIGHT_CLASS_BULKY
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/restraints/handcuffs, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- clothing_flags = THICKMATERIAL
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS
- min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
- heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
- armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90)
-
-/obj/item/clothing/suit/armor/heavy
- name = "heavy armor"
- desc = ""
- icon_state = "heavy"
- item_state = "swat_suit"
- w_class = WEIGHT_CLASS_BULKY
- gas_transfer_coefficient = 0.9
- clothing_flags = THICKMATERIAL
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- slowdown = 3
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90)
-
-/obj/item/clothing/suit/armor/tdome
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- clothing_flags = THICKMATERIAL
- cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90)
-
-/obj/item/clothing/suit/armor/tdome/red
- name = "thunderdome suit"
- desc = ""
- icon_state = "tdred"
- item_state = "tdred"
-
-/obj/item/clothing/suit/armor/tdome/green
- name = "thunderdome suit"
- desc = "" //classy.
- icon_state = "tdgreen"
- item_state = "tdgreen"
-
-
-/obj/item/clothing/suit/armor/riot/knight
- name = "plate armour"
- desc = ""
- icon_state = "knight_green"
- item_state = "knight_green"
-
-/obj/item/clothing/suit/armor/riot/knight/yellow
- icon_state = "knight_yellow"
- item_state = "knight_yellow"
-
-/obj/item/clothing/suit/armor/riot/knight/blue
- icon_state = "knight_blue"
- item_state = "knight_blue"
-
-/obj/item/clothing/suit/armor/riot/knight/red
- icon_state = "knight_red"
- item_state = "knight_red"
-
-/obj/item/clothing/suit/armor/riot/knight/greyscale
- name = "knight armour"
- desc = ""
- icon_state = "knight_greyscale"
- item_state = "knight_greyscale"
- material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR//Can change color and add prefix
- armor = list("melee" = 35, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 10, "bio" = 10, "rad" = 10, "fire" = 40, "acid" = 40)
-
-/obj/item/clothing/suit/armor/vest/durathread
- name = "durathread vest"
- desc = ""
- icon_state = "durathread"
- item_state = "durathread"
- strip_delay = 60
- equip_delay_other = 40
- max_integrity = 200
- resistance_flags = FLAMMABLE
- armor = list("melee" = 20, "bullet" = 10, "laser" = 30, "energy" = 40, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 50)
-
-/obj/item/clothing/suit/armor/vest/russian
- name = "russian vest"
- desc = ""
- icon_state = "rus_armor"
- item_state = "rus_armor"
- armor = list("melee" = 25, "bullet" = 30, "laser" = 0, "energy" = 10, "bomb" = 10, "bio" = 0, "rad" = 20, "fire" = 20, "acid" = 50)
-
-/obj/item/clothing/suit/armor/vest/russian_coat
- name = "russian battle coat"
- desc = ""
- icon_state = "rus_coat"
- item_state = "rus_coat"
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
- armor = list("melee" = 25, "bullet" = 20, "laser" = 20, "energy" = 30, "bomb" = 20, "bio" = 50, "rad" = 20, "fire" = -10, "acid" = 50)
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
deleted file mode 100644
index 77284a6507..0000000000
--- a/code/modules/clothing/suits/bio.dm
+++ /dev/null
@@ -1,100 +0,0 @@
-//Biosuit complete with shoes (in the item sprite)
-/obj/item/clothing/head/bio_hood
- name = "bio hood"
- icon_state = "bio"
- desc = ""
- permeability_coefficient = 0.01
- clothing_flags = THICKMATERIAL | BLOCK_GAS_SMOKE_EFFECT | SNUG_FIT
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100)
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDEFACE
- resistance_flags = ACID_PROOF
- flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
-
-/obj/item/clothing/suit/bio_suit
- name = "bio suit"
- desc = ""
- icon_state = "bio"
- item_state = "bio_suit"
- w_class = WEIGHT_CLASS_BULKY
- gas_transfer_coefficient = 0.01
- permeability_coefficient = 0.01
- clothing_flags = THICKMATERIAL
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- slowdown = 0.5
- allowed = list(/obj/item/tank/internals, /obj/item/reagent_containers/dropper, /obj/item/flashlight/pen, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/glass/beaker)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100)
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- strip_delay = 70
- equip_delay_other = 70
- resistance_flags = ACID_PROOF
-
-//Standard biosuit, orange stripe
-/obj/item/clothing/head/bio_hood/general
- icon_state = "bio_general"
-
-/obj/item/clothing/suit/bio_suit/general
- icon_state = "bio_general"
-
-
-//Virology biosuit, green stripe
-/obj/item/clothing/head/bio_hood/virology
- icon_state = "bio_virology"
-
-/obj/item/clothing/suit/bio_suit/virology
- icon_state = "bio_virology"
-
-
-//Security biosuit, grey with red stripe across the chest
-/obj/item/clothing/head/bio_hood/security
- armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100)
- icon_state = "bio_security"
-
-/obj/item/clothing/suit/bio_suit/security
- armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100)
- icon_state = "bio_security"
-
-/obj/item/clothing/suit/bio_suit/security/Initialize()
- . = ..()
- allowed += GLOB.security_vest_allowed
-
-//Janitor's biosuit, grey with purple arms
-/obj/item/clothing/head/bio_hood/janitor
- icon_state = "bio_janitor"
-
-/obj/item/clothing/suit/bio_suit/janitor
- icon_state = "bio_janitor"
-
-/obj/item/clothing/suit/bio_suit/janitor/Initialize()
- . = ..()
- allowed += list(/obj/item/storage/bag/trash, /obj/item/reagent_containers/spray)
-
-//Scientist's biosuit, white with a pink-ish hue
-/obj/item/clothing/head/bio_hood/scientist
- icon_state = "bio_scientist"
-
-/obj/item/clothing/suit/bio_suit/scientist
- icon_state = "bio_scientist"
-
-//CMO's biosuit, blue stripe
-/obj/item/clothing/head/bio_hood/cmo
- icon_state = "bio_cmo"
-
-/obj/item/clothing/suit/bio_suit/cmo
- icon_state = "bio_cmo"
-
-/obj/item/clothing/suit/bio_suit/cmo/Initialize()
- . = ..()
- allowed += list(/obj/item/melee/classic_baton/telescopic)
-
-//Plague Dr mask can be found in clothing/masks/gasmask.dm
-/obj/item/clothing/suit/bio_suit/plaguedoctorsuit
- name = "plague doctor suit"
- desc = ""
- icon_state = "plaguedoctor"
- item_state = "bio_suit"
- strip_delay = 40
- equip_delay_other = 20
-
-/obj/item/clothing/suit/bio_suit/plaguedoctorsuit/Initialize()
- . = ..()
- allowed += list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/cane)
diff --git a/code/modules/clothing/suits/chaplainsuits.dm b/code/modules/clothing/suits/chaplainsuits.dm
deleted file mode 100644
index e0de76a2ec..0000000000
--- a/code/modules/clothing/suits/chaplainsuits.dm
+++ /dev/null
@@ -1,87 +0,0 @@
-//Chaplain Suit Subtypes
-//If any new staple chaplain items get added, put them in these lists
-/obj/item/clothing/suit/chaplainsuit
- allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
-
-/obj/item/clothing/suit/hooded/chaplainsuit
- allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
-
-//Suits
-/obj/item/clothing/suit/chaplainsuit/holidaypriest
- name = "holiday priest"
- desc = ""
- icon_state = "holidaypriest"
- item_state = "w_suit"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- flags_inv = HIDEJUMPSUIT
-
-/obj/item/clothing/suit/chaplainsuit/nun
- name = "nun robe"
- desc = ""
- icon_state = "nun"
- item_state = "nun"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
- flags_inv = HIDESHOES|HIDEJUMPSUIT
-
-/obj/item/clothing/suit/chaplainsuit/bishoprobe
- name = "bishop's robes"
- desc = ""
- icon_state = "bishoprobe"
- item_state = "bishoprobe"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- flags_inv = HIDEJUMPSUIT
-
-/obj/item/clothing/suit/chaplainsuit/studentuni
- name = "student robe"
- desc = ""
- icon_state = "studentuni"
- item_state = "studentuni"
- body_parts_covered = ARMS|CHEST
-
-/obj/item/clothing/suit/chaplainsuit/witchhunter
- name = "witchunter garb"
- desc = ""
- icon_state = "witchhunter"
- item_state = "witchhunter"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
-
-/obj/item/clothing/suit/hooded/chaplainsuit/monkfrock
- name = "monk's frock"
- desc = ""
- icon_state = "monkfrock"
- item_state = "monkfrock"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- hoodtype = /obj/item/clothing/head/hooded/monkfrock
-
-/obj/item/clothing/head/hooded/monkfrock
- name = "monk's hood"
- desc = ""
- icon_state = "monkhood"
- item_state = "monkhood"
- body_parts_covered = HEAD
- flags_inv = HIDEHAIR|HIDEEARS
-
-/obj/item/clothing/suit/chaplainsuit/monkrobeeast
- name = "eastern monk's robes"
- desc = ""
- icon_state = "monkrobeeast"
- item_state = "monkrobeeast"
- body_parts_covered = GROIN|LEGS
- flags_inv = HIDEJUMPSUIT
-
-/obj/item/clothing/suit/chaplainsuit/whiterobe
- name = "white robe"
- desc = ""
- icon_state = "whiterobe"
- item_state = "whiterobe"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- flags_inv = HIDEJUMPSUIT
-
-/obj/item/clothing/suit/chaplainsuit/clownpriest
- name = "Robes of the Honkmother"
- desc = ""
- icon_state = "clownpriest"
- item_state = "clownpriest"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- flags_inv = HIDEJUMPSUIT
- allowed = list(/obj/item/megaphone/clown, /obj/item/soap, /obj/item/reagent_containers/food/snacks/pie/cream, /obj/item/bikehorn, /obj/item/bikehorn/golden, /obj/item/bikehorn/airhorn, /obj/item/instrument/bikehorn, /obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter, /obj/item/toy/crayon, /obj/item/toy/crayon/spraycan, /obj/item/toy/crayon/spraycan/lubecan, /obj/item/grown/bananapeel, /obj/item/reagent_containers/food/snacks/grown/banana)
diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm
deleted file mode 100644
index 7531e1de6c..0000000000
--- a/code/modules/clothing/suits/labcoat.dm
+++ /dev/null
@@ -1,49 +0,0 @@
-/obj/item/clothing/suit/toggle/labcoat
- name = "labcoat"
- desc = ""
- icon_state = "labcoat"
- item_state = "labcoat"
- blood_overlay_type = "coat"
- body_parts_covered = CHEST|ARMS
- allowed = list(/obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50)
- togglename = "buttons"
- species_exception = list(/datum/species/golem)
-
-/obj/item/clothing/suit/toggle/labcoat/cmo
- name = "chief medical officer's labcoat"
- desc = ""
- icon_state = "labcoat_cmo"
- item_state = "labcoat_cmo"
-
-/obj/item/clothing/suit/toggle/labcoat/emt
- name = "\improper EMT's jacket"
- desc = ""
- icon_state = "labcoat_emt"
- item_state = "labcoat_cmo"
-
-/obj/item/clothing/suit/toggle/labcoat/mad
- name = "\proper The Mad's labcoat"
- desc = ""
- icon_state = "labgreen"
- item_state = "labgreen"
-
-/obj/item/clothing/suit/toggle/labcoat/genetics
- name = "geneticist labcoat"
- desc = ""
- icon_state = "labcoat_gen"
-
-/obj/item/clothing/suit/toggle/labcoat/chemist
- name = "chemist labcoat"
- desc = ""
- icon_state = "labcoat_chem"
-
-/obj/item/clothing/suit/toggle/labcoat/virologist
- name = "virologist labcoat"
- desc = ""
- icon_state = "labcoat_vir"
-
-/obj/item/clothing/suit/toggle/labcoat/science
- name = "scientist labcoat"
- desc = ""
- icon_state = "labcoat_tox"
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
deleted file mode 100644
index aac60d277f..0000000000
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ /dev/null
@@ -1,652 +0,0 @@
-/*
- * Contains:
- * Costume
- * Misc
- */
-
-/*
- * Costume
- */
-/obj/item/clothing/suit/hooded/flashsuit
- name = "flashy costume"
- desc = ""
- icon_state = "flashsuit"
- item_state = "armor"
- body_parts_covered = CHEST|GROIN
- hoodtype = /obj/item/clothing/head/hooded/flashsuit
-
-/obj/item/clothing/head/hooded/flashsuit
- name = "flash button"
- desc = ""
- icon_state = "flashsuit"
- body_parts_covered = HEAD
- flags_inv = HIDEHAIR|HIDEEARS|HIDEFACIALHAIR|HIDEFACE|HIDEMASK
-
-/obj/item/clothing/suit/pirate
- name = "pirate coat"
- desc = ""
- icon_state = "pirate"
- item_state = "pirate"
- allowed = list(/obj/item/clothing/glasses/eyepatch, /obj/item/reagent_containers/food/drinks/bottle/rum)
-
-/obj/item/clothing/suit/pirate/captain
- name = "pirate captain coat"
- desc = ""
- icon_state = "hgpirate"
- item_state = "hgpirate"
-
-
-/obj/item/clothing/suit/cyborg_suit
- name = "cyborg suit"
- desc = ""
- icon_state = "death"
- item_state = "death"
- flags_1 = CONDUCT_1
- fire_resist = T0C+5200
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-
-/obj/item/clothing/suit/justice
- name = "justice suit"
- desc = "" //Needs no fixing
- icon_state = "justice"
- item_state = "justice"
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-
-/obj/item/clothing/suit/judgerobe
- name = "judge's robe"
- desc = ""
- icon_state = "judge"
- item_state = "judge"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- allowed = list(/obj/item/storage/fancy/cigarettes, /obj/item/stack/spacecash)
- flags_inv = HIDEJUMPSUIT
-
-
-/obj/item/clothing/suit/apron/overalls
- name = "coveralls"
- desc = ""
- icon_state = "overalls"
- item_state = "overalls"
- body_parts_covered = CHEST|GROIN|LEGS
-
-/obj/item/clothing/suit/apron/purple_bartender
- name = "purple bartender apron"
- desc = ""
- icon_state = "purplebartenderapron"
- item_state = "purplebartenderapron"
- body_parts_covered = CHEST|GROIN|LEGS
-
-/obj/item/clothing/suit/syndicatefake
- name = "black and red space suit replica"
- icon_state = "syndicate-black-red"
- item_state = "syndicate-black-red"
- desc = ""
- w_class = WEIGHT_CLASS_NORMAL
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy)
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- resistance_flags = NONE
-
-/obj/item/clothing/suit/hastur
- name = "\improper Hastur's robe"
- desc = ""
- icon_state = "hastur"
- item_state = "hastur"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-
-/obj/item/clothing/suit/imperium_monk
- name = "\improper Imperium monk suit"
- desc = ""
- icon_state = "imperium_monk"
- item_state = "imperium_monk"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- flags_inv = HIDESHOES|HIDEJUMPSUIT
- allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen)
-
-
-/obj/item/clothing/suit/chickensuit
- name = "chicken suit"
- desc = ""
- icon_state = "chickensuit"
- item_state = "chickensuit"
- body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET
- flags_inv = HIDESHOES|HIDEJUMPSUIT
-
-
-/obj/item/clothing/suit/monkeysuit
- name = "monkey suit"
- desc = ""
- icon_state = "monkeysuit"
- item_state = "monkeysuit"
- body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET|HANDS
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-/obj/item/clothing/suit/toggle/owlwings
- name = "owl cloak"
- desc = ""
- icon_state = "owl_wings"
- item_state = "owl_wings"
- togglename = "wings"
- body_parts_covered = ARMS|CHEST
- actions_types = list(/datum/action/item_action/toggle_wings)
-
-/obj/item/clothing/suit/toggle/owlwings/Initialize()
- . = ..()
- allowed = GLOB.security_vest_allowed
-
-/obj/item/clothing/suit/toggle/owlwings/griffinwings
- name = "griffon cloak"
- desc = ""
- icon_state = "griffin_wings"
- item_state = "griffin_wings"
-
-/obj/item/clothing/suit/cardborg
- name = "cardborg suit"
- desc = ""
- icon_state = "cardborg"
- item_state = "cardborg"
- body_parts_covered = CHEST|GROIN
- flags_inv = HIDEJUMPSUIT
- dog_fashion = /datum/dog_fashion/back
-
-/obj/item/clothing/suit/snowman
- name = "snowman outfit"
- desc = ""
- icon_state = "snowman"
- item_state = "snowman"
- body_parts_covered = CHEST|GROIN
- flags_inv = HIDEJUMPSUIT
-
-/obj/item/clothing/suit/poncho
- name = "poncho"
- desc = ""
- icon_state = "classicponcho"
- item_state = "classicponcho"
-
-/obj/item/clothing/suit/poncho/green
- name = "green poncho"
- desc = ""
- icon_state = "greenponcho"
- item_state = "greenponcho"
-
-/obj/item/clothing/suit/poncho/red
- name = "red poncho"
- desc = ""
- icon_state = "redponcho"
- item_state = "redponcho"
-
-/obj/item/clothing/suit/poncho/ponchoshame
- name = "poncho of shame"
- desc = ""
- icon_state = "ponchoshame"
- item_state = "ponchoshame"
-
-/obj/item/clothing/suit/poncho/ponchoshame/Initialize()
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT)
-
-/obj/item/clothing/suit/whitedress
- name = "white dress"
- desc = ""
- icon_state = "white_dress"
- item_state = "w_suit"
- body_parts_covered = CHEST|GROIN|LEGS|FEET
- flags_inv = HIDEJUMPSUIT|HIDESHOES
-
-/obj/item/clothing/suit/hooded/carp_costume
- name = "carp costume"
- desc = ""
- icon_state = "carp_casual"
- item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too
- allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/pneumatic_cannon/speargun)
- hoodtype = /obj/item/clothing/head/hooded/carp_hood
-
-/obj/item/clothing/head/hooded/carp_hood
- name = "carp hood"
- desc = ""
- icon_state = "carp_casual"
- body_parts_covered = HEAD
- cold_protection = HEAD
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- flags_inv = HIDEHAIR|HIDEEARS
-
-/obj/item/clothing/head/hooded/carp_hood/equipped(mob/living/carbon/human/user, slot)
- ..()
- if (slot == SLOT_HEAD)
- user.faction |= "carp"
-
-/obj/item/clothing/head/hooded/carp_hood/dropped(mob/living/carbon/human/user)
- ..()
- if (user.head == src)
- user.faction -= "carp"
-
-/obj/item/clothing/suit/hooded/ian_costume //It's Ian, rub his bell- oh god what happened to his inside parts?
- name = "corgi costume"
- desc = ""
- icon_state = "ian"
- item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
- //cold_protection = CHEST|GROIN|ARMS
- //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- allowed = list()
- hoodtype = /obj/item/clothing/head/hooded/ian_hood
- dog_fashion = /datum/dog_fashion/back
-
-/obj/item/clothing/head/hooded/ian_hood
- name = "corgi hood"
- desc = ""
- icon_state = "ian"
- body_parts_covered = HEAD
- //cold_protection = HEAD
- //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- flags_inv = HIDEHAIR|HIDEEARS
-
-/obj/item/clothing/suit/hooded/bee_costume // It's Hip!
- name = "bee costume"
- desc = ""
- icon_state = "bee"
- item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
- clothing_flags = THICKMATERIAL
- hoodtype = /obj/item/clothing/head/hooded/bee_hood
-
-/obj/item/clothing/head/hooded/bee_hood
- name = "bee hood"
- desc = ""
- icon_state = "bee"
- body_parts_covered = HEAD
- clothing_flags = THICKMATERIAL
- flags_inv = HIDEHAIR|HIDEEARS
- dynamic_hair_suffix = ""
-
-/obj/item/clothing/suit/hooded/bloated_human //OH MY GOD WHAT HAVE YOU DONE!?!?!?
- name = "bloated human suit"
- desc = ""
- icon_state = "lingspacesuit"
- item_state = "labcoat"
- body_parts_covered = CHEST|GROIN|ARMS
- allowed = list()
- actions_types = list(/datum/action/item_action/toggle_human_head)
- hoodtype = /obj/item/clothing/head/hooded/human_head
-
-
-/obj/item/clothing/head/hooded/human_head
- name = "bloated human head"
- desc = ""
- icon_state = "lingspacehelmet"
- body_parts_covered = HEAD
- flags_cover = HEADCOVERSEYES
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
-
-/obj/item/clothing/suit/security/officer/russian
- name = "\improper Russian officer's jacket"
- desc = ""
- icon_state = "officertanjacket"
- item_state = "officertanjacket"
- body_parts_covered = CHEST|ARMS
-
-/obj/item/clothing/suit/shrine_maiden
- name = "shrine maiden's outfit"
- desc = ""
- icon_state = "shrine_maiden"
- item_state = "shrine_maiden"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- flags_inv = HIDEJUMPSUIT
-
-/*
- * Misc
- */
-
-/obj/item/clothing/suit/straight_jacket
- name = "straight jacket"
- desc = "" //Straight jacket is antifun
- icon_state = "straight_jacket"
- item_state = "straight_jacket"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- equip_delay_self = 50
- strip_delay = 60
- breakouttime = 3000
-
-/obj/item/clothing/suit/ianshirt
- name = "worn shirt"
- desc = ""
- icon_state = "ianshirt"
- item_state = "ianshirt"
-
-/obj/item/clothing/suit/nerdshirt
- name = "gamer shirt"
- desc = ""
- icon_state = "nerdshirt"
- item_state = "nerdshirt"
-
-/obj/item/clothing/suit/vapeshirt //wearing this is asking to get beat.
- name = "Vape Naysh shirt"
- desc = ""
- icon_state = "vapeshirt"
- item_state = "vapeshirt"
-
-/obj/item/clothing/suit/striped_sweater
- name = "striped sweater"
- desc = ""
- icon_state = "waldo_shirt"
- item_state = "waldo_shirt"
-
-/obj/item/clothing/suit/jacket
- name = "bomber jacket"
- desc = ""
- icon_state = "bomberjacket"
- item_state = "brownjsuit"
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
-
-/obj/item/clothing/suit/jacket/leather
- name = "leather jacket"
- desc = ""
- icon_state = "leatherjacket"
- item_state = "hostrench"
- resistance_flags = NONE
- max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective)
-
-/obj/item/clothing/suit/jacket/leather/overcoat
- name = "leather overcoat"
- desc = ""
- icon_state = "leathercoat"
- body_parts_covered = CHEST|GROIN|ARMS|LEGS
- cold_protection = CHEST|GROIN|ARMS|LEGS
-
-/obj/item/clothing/suit/jacket/puffer
- name = "puffer jacket"
- desc = ""
- icon_state = "pufferjacket"
- item_state = "hostrench"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 0)
-
-/obj/item/clothing/suit/jacket/puffer/vest
- name = "puffer vest"
- desc = ""
- icon_state = "puffervest"
- item_state = "armor"
- body_parts_covered = CHEST|GROIN
- cold_protection = CHEST|GROIN
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = 0)
-
-/obj/item/clothing/suit/jacket/miljacket
- name = "military jacket"
- desc = ""
- icon_state = "militaryjacket"
- item_state = "militaryjacket"
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver)
-
-/obj/item/clothing/suit/jacket/letterman
- name = "letterman jacket"
- desc = ""
- icon_state = "letterman"
- item_state = "letterman"
-
-/obj/item/clothing/suit/jacket/letterman_red
- name = "red letterman jacket"
- desc = ""
- icon_state = "letterman_red"
- item_state = "letterman_red"
-
-/obj/item/clothing/suit/jacket/letterman_syndie
- name = "blood-red letterman jacket"
- desc = ""
- icon_state = "letterman_s"
- item_state = "letterman_s"
-
-/obj/item/clothing/suit/jacket/letterman_nanotrasen
- name = "blue letterman jacket"
- desc = ""
- icon_state = "letterman_n"
- item_state = "letterman_n"
-
-/obj/item/clothing/suit/dracula
- name = "dracula coat"
- desc = ""
- icon_state = "draculacoat"
- item_state = "draculacoat"
-
-/obj/item/clothing/suit/drfreeze_coat
- name = "doctor freeze's labcoat"
- desc = ""
- icon_state = "drfreeze_coat"
- item_state = "drfreeze_coat"
-
-/obj/item/clothing/suit/gothcoat
- name = "gothic coat"
- desc = ""
- icon_state = "gothcoat"
- item_state = "gothcoat"
-
-/obj/item/clothing/suit/nemes
- name = "pharoah tunic"
- desc = ""
- icon_state = "pharoah"
- item_state = "pharoah"
- body_parts_covered = CHEST|GROIN
-
-/obj/item/clothing/suit/caution
- name = "wet floor sign"
- desc = ""
- icon_state = "caution"
- lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
- force = 1
- throwforce = 3
- throw_speed = 2
- throw_range = 5
- w_class = WEIGHT_CLASS_SMALL
- body_parts_covered = CHEST|GROIN
- attack_verb = list("warned", "cautioned", "smashed")
- armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
-
-
-
-// WINTER COATS
-
-/obj/item/clothing/suit/hooded/wintercoat
- name = "winter coat"
- desc = ""
- icon_state = "coatwinter"
- item_state = "coatwinter"
- body_parts_covered = CHEST|GROIN|ARMS
- cold_protection = CHEST|GROIN|ARMS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
-
-/obj/item/clothing/head/hooded/winterhood
- name = "winter hood"
- desc = ""
- icon_state = "winterhood"
- body_parts_covered = HEAD
- cold_protection = HEAD
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- flags_inv = HIDEHAIR|HIDEEARS
-
-/obj/item/clothing/suit/hooded/wintercoat/captain
- name = "captain's winter coat"
- icon_state = "coatcaptain"
- item_state = "coatcaptain"
- armor = list("melee" = 25, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/captain
-
-/obj/item/clothing/suit/hooded/wintercoat/captain/Initialize()
- . = ..()
- allowed = GLOB.security_wintercoat_allowed
-
-/obj/item/clothing/head/hooded/winterhood/captain
- icon_state = "winterhood_captain"
-
-/obj/item/clothing/suit/hooded/wintercoat/security
- name = "security winter coat"
- icon_state = "coatsecurity"
- item_state = "coatsecurity"
- armor = list("melee" = 25, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/security
-
-/obj/item/clothing/suit/hooded/wintercoat/security/Initialize()
- . = ..()
- allowed = GLOB.security_wintercoat_allowed
-
-/obj/item/clothing/head/hooded/winterhood/security
- icon_state = "winterhood_security"
-
-/obj/item/clothing/suit/hooded/wintercoat/medical
- name = "medical winter coat"
- icon_state = "coatmedical"
- item_state = "coatmedical"
- allowed = list(/obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/medical
-
-/obj/item/clothing/head/hooded/winterhood/medical
- icon_state = "winterhood_medical"
-
-/obj/item/clothing/suit/hooded/wintercoat/science
- name = "science winter coat"
- icon_state = "coatscience"
- item_state = "coatscience"
- allowed = list(/obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/science
-
-/obj/item/clothing/head/hooded/winterhood/science
- icon_state = "winterhood_science"
-
-/obj/item/clothing/suit/hooded/wintercoat/engineering
- name = "engineering winter coat"
- icon_state = "coatengineer"
- item_state = "coatengineer"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45)
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering
-
-/obj/item/clothing/head/hooded/winterhood/engineering
- icon_state = "winterhood_engineer"
-
-/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos
- name = "atmospherics winter coat"
- icon_state = "coatatmos"
- item_state = "coatatmos"
- hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering/atmos
-
-/obj/item/clothing/head/hooded/winterhood/engineering/atmos
- icon_state = "winterhood_atmos"
-
-/obj/item/clothing/suit/hooded/wintercoat/hydro
- name = "hydroponics winter coat"
- icon_state = "coathydro"
- item_state = "coathydro"
- allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants, /obj/item/toy, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/hydro
-
-/obj/item/clothing/head/hooded/winterhood/hydro
- icon_state = "winterhood_hydro"
-
-/obj/item/clothing/suit/hooded/wintercoat/cargo
- name = "cargo winter coat"
- icon_state = "coatcargo"
- item_state = "coatcargo"
- hoodtype = /obj/item/clothing/head/hooded/winterhood/cargo
-
-/obj/item/clothing/head/hooded/winterhood/cargo
- icon_state = "winterhood_cargo"
-
-/obj/item/clothing/suit/hooded/wintercoat/miner
- name = "mining winter coat"
- icon_state = "coatminer"
- item_state = "coatminer"
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter)
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- hoodtype = /obj/item/clothing/head/hooded/winterhood/miner
-
-/obj/item/clothing/head/hooded/ablative
- name = "ablative hood"
- desc = ""
- icon_state = "ablativehood"
- armor = list("melee" = 10, "bullet" = 10, "laser" = 60, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- strip_delay = 30
- var/hit_reflect_chance = 50
-
-/obj/item/clothing/head/hooded/ablative/equipped(mob/living/carbon/human/user, slot)
- ..()
- to_chat(user, "As you put on the hood, a visor shifts into place and starts analyzing the people around you. Neat!")
- ADD_TRAIT(user, TRAIT_SECURITY_HUD, HELMET_TRAIT)
- var/datum/atom_hud/H = GLOB.huds[DATA_HUD_SECURITY_ADVANCED]
- H.add_hud_to(user)
-
-/obj/item/clothing/head/hooded/ablative/dropped(mob/living/carbon/human/user)
- ..()
- to_chat(user, "You take off the hood, removing the visor in the process and disabling its integrated hud.")
- REMOVE_TRAIT(user, TRAIT_SECURITY_HUD, HELMET_TRAIT)
- var/datum/atom_hud/H = GLOB.huds[DATA_HUD_SECURITY_ADVANCED]
- H.remove_hud_from(user)
-
-/obj/item/clothing/head/hooded/ablative/IsReflect(def_zone)
- if(!(def_zone in BODY_ZONE_HEAD)) //If not shot where ablative is covering you, you don't get the reflection bonus!
- return FALSE
- if (prob(hit_reflect_chance))
- return TRUE
-
-/obj/item/clothing/suit/hooded/ablative
- name = "ablative trenchcoat"
- desc = ""
- icon_state = "ablativecoat"
- item_state = "ablativecoat"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- armor = list("melee" = 10, "bullet" = 10, "laser" = 60, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
- hoodtype = /obj/item/clothing/head/hooded/ablative
- strip_delay = 30
- equip_delay_other = 40
- var/hit_reflect_chance = 50
-
-/obj/item/clothing/suit/hooded/ablative/Initialize()
- . = ..()
- allowed = GLOB.security_vest_allowed
-
-/obj/item/clothing/suit/hooded/ablative/IsReflect(def_zone)
- if(!(def_zone in list(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_GROIN, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))) //If not shot where ablative is covering you, you don't get the reflection bonus!
- return FALSE
- if (prob(hit_reflect_chance))
- return TRUE
-
-/obj/item/clothing/head/hooded/winterhood/miner
- icon_state = "winterhood_miner"
-
-/obj/item/clothing/suit/spookyghost
- name = "spooky ghost"
- desc = ""
- icon_state = "bedsheet"
- user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = INCORPOREAL_MOVE_BASIC, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150)
- alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //so the bedsheet goes over everything but fire
-
-/obj/item/clothing/suit/bronze
- name = "bronze suit"
- desc = ""
- icon = 'icons/obj/clothing/clockwork_garb.dmi'
- icon_state = "clockwork_cuirass_old"
- armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20)
-
-/obj/item/clothing/suit/ghost_sheet
- name = "ghost sheet"
- desc = ""
- icon_state = "ghost_sheet"
- item_state = "ghost_sheet"
- throwforce = 0
- throw_speed = 1
- throw_range = 2
- w_class = WEIGHT_CLASS_TINY
- flags_inv = HIDEGLOVES|HIDEEARS|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
- alternate_worn_layer = UNDER_HAT_LAYER
diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm
index a1ddda166c..1af94c73b3 100644
--- a/code/modules/clothing/suits/toggles.dm
+++ b/code/modules/clothing/suits/toggles.dm
@@ -46,19 +46,6 @@
body_parts_covered = initial(body_parts_covered)
prevent_crits = initial(prevent_crits)
-// if(!slot_flags == ITEM_SLOT_HEAD|ITEM_SLOT_HIP) // Prevents people right clicking visored helmets on their hip and exploiting coverage
-// body_parts_covered = initial(body_parts_covered)
-
-/*
-/obj/item/clothing/ui_action_click()
- . = ..()
- if(hoodtype)
- ToggleHood()
-
-/obj/item/clothing/item_action_slot_check(slot, mob/user)
- if(slot == SLOT_ARMOR|SLOT_CLOAK)
- return 1
-*/
/obj/item/clothing/equipped(mob/user, slot)
if(hoodtype && slot != SLOT_ARMOR|SLOT_CLOAK)
RemoveHood()
@@ -121,9 +108,7 @@
H.update_inv_neck()
H.update_inv_pants()
H.update_fov_angles()
-// for(var/X in actions)
-// var/datum/action/A = X
-// A.UpdateButtonIcon()
+
else
RemoveHood()
testing("endtoggle")
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
deleted file mode 100644
index 4eb6b5aae2..0000000000
--- a/code/modules/clothing/suits/utility.dm
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Contains:
- * Fire protection
- * Bomb protection
- * Radiation protection
- */
-
-/*
- * Fire protection
- */
-
-/obj/item/clothing/suit/fire
- name = "emergency firesuit"
- desc = ""
- icon_state = "fire"
- item_state = "ro_suit"
- w_class = WEIGHT_CLASS_BULKY
- gas_transfer_coefficient = 0.9
- permeability_coefficient = 0.5
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/extinguisher, /obj/item/crowbar)
- slowdown = 1
- armor = list("melee" = 15, "bullet" = 5, "laser" = 20, "energy" = 10, "bomb" = 20, "bio" = 10, "rad" = 20, "fire" = 100, "acid" = 50)
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL
- heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT
- cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
- strip_delay = 60
- equip_delay_other = 60
- resistance_flags = FIRE_PROOF
-
-/obj/item/clothing/suit/fire/firefighter
- icon_state = "firesuit"
- item_state = "firefighter"
-
-/obj/item/clothing/suit/fire/heavy
- name = "heavy firesuit"
- desc = ""
- icon_state = "thermal"
- item_state = "firefighter"
- slowdown = 1.5
-
-/obj/item/clothing/suit/fire/atmos
- name = "firesuit"
- desc = ""
- icon_state = "atmos_firesuit"
- item_state = "firesuit_atmos"
- max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
-
-/*
- * Bomb protection
- */
-/obj/item/clothing/head/bomb_hood
- name = "bomb hood"
- desc = ""
- icon_state = "bombsuit"
- clothing_flags = THICKMATERIAL | SNUG_FIT
- armor = list("melee" = 20, "bullet" = 0, "laser" = 20,"energy" = 10, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
- flags_inv = HIDEFACE|HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR
- dynamic_hair_suffix = ""
- dynamic_fhair_suffix = ""
- cold_protection = HEAD
- min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT
- heat_protection = HEAD
- max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT
- strip_delay = 70
- equip_delay_other = 70
- flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
- resistance_flags = NONE
-
-
-/obj/item/clothing/suit/bomb_suit
- name = "bomb suit"
- desc = ""
- icon_state = "bombsuit"
- item_state = "bombsuit"
- w_class = WEIGHT_CLASS_BULKY
- gas_transfer_coefficient = 0.01
- permeability_coefficient = 0.01
- clothing_flags = THICKMATERIAL
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- slowdown = 2
- armor = list("melee" = 20, "bullet" = 0, "laser" = 20,"energy" = 10, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50)
- flags_inv = HIDEJUMPSUIT
- heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
- cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
- strip_delay = 70
- equip_delay_other = 70
- resistance_flags = NONE
-
-
-/obj/item/clothing/head/bomb_hood/security
- icon_state = "bombsuit_sec"
- item_state = "bombsuit_sec"
-
-/obj/item/clothing/suit/bomb_suit/security
- icon_state = "bombsuit_sec"
- item_state = "bombsuit_sec"
- allowed = list(/obj/item/restraints/handcuffs)
-
-
-/obj/item/clothing/head/bomb_hood/white
- icon_state = "bombsuit_white"
- item_state = "bombsuit_white"
-
-/obj/item/clothing/suit/bomb_suit/white
- icon_state = "bombsuit_white"
- item_state = "bombsuit_white"
-
-/*
-* Radiation protection
-*/
-
-/obj/item/clothing/head/radiation
- name = "radiation hood"
- icon_state = "rad"
- desc = ""
- clothing_flags = THICKMATERIAL | SNUG_FIT
- flags_inv = HIDEMASK|HIDEEARS|HIDEFACE|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30)
- strip_delay = 60
- equip_delay_other = 60
- flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
- resistance_flags = NONE
- rad_flags = RAD_PROTECT_CONTENTS
-
-/obj/item/clothing/suit/radiation
- name = "radiation suit"
- desc = ""
- icon_state = "rad"
- item_state = "rad_suit"
- w_class = WEIGHT_CLASS_BULKY
- gas_transfer_coefficient = 0.9
- permeability_coefficient = 0.5
- clothing_flags = THICKMATERIAL
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/geiger_counter)
- slowdown = 1.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30)
- strip_delay = 60
- equip_delay_other = 60
- flags_inv = HIDEJUMPSUIT
- resistance_flags = NONE
- rad_flags = RAD_PROTECT_CONTENTS
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
deleted file mode 100644
index b0f247da09..0000000000
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ /dev/null
@@ -1,154 +0,0 @@
-/obj/item/clothing/head/wizard
- name = "wizard hat"
- desc = ""
- icon_state = "wizard"
- gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE
- permeability_coefficient = 0.01
- armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100)
- strip_delay = 50
- equip_delay_other = 50
- clothing_flags = SNUG_FIT
- resistance_flags = FIRE_PROOF | ACID_PROOF
- dog_fashion = /datum/dog_fashion/head/blue_wizard
-
-/obj/item/clothing/head/wizard/red
- name = "red wizard hat"
- desc = ""
- icon_state = "redwizard"
- dog_fashion = /datum/dog_fashion/head/red_wizard
-
-/obj/item/clothing/head/wizard/yellow
- name = "yellow wizard hat"
- desc = ""
- icon_state = "yellowwizard"
- dog_fashion = null
-
-/obj/item/clothing/head/wizard/black
- name = "black wizard hat"
- desc = ""
- icon_state = "blackwizard"
- dog_fashion = null
-
-/obj/item/clothing/head/wizard/fake
- name = "wizard hat"
- desc = ""
- icon_state = "wizard-fake"
- gas_transfer_coefficient = 1
- permeability_coefficient = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- resistance_flags = FLAMMABLE
- dog_fashion = /datum/dog_fashion/head/blue_wizard
-
-/obj/item/clothing/head/wizard/marisa
- name = "witch hat"
- desc = ""
- icon_state = "marisa"
- dog_fashion = null
-
-/obj/item/clothing/head/wizard/magus
- name = "\improper Magus helm"
- desc = ""
- icon_state = "magus"
- item_state = "magus"
- dog_fashion = null
-
-/obj/item/clothing/head/wizard/santa
- name = "Santa's hat"
- desc = ""
- icon_state = "santahat"
- flags_inv = HIDEHAIR|HIDEFACIALHAIR
- dog_fashion = null
-
-/obj/item/clothing/suit/wizrobe
- name = "wizard robe"
- desc = ""
- icon_state = "wizard"
- item_state = "wizrobe"
- gas_transfer_coefficient = 0.01
- permeability_coefficient = 0.01
- body_parts_covered = CHEST|GROIN|ARMS|LEGS
- armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100)
- allowed = list(/obj/item/teleportation_scroll)
- flags_inv = HIDEJUMPSUIT
- strip_delay = 50
- equip_delay_other = 50
- resistance_flags = FIRE_PROOF | ACID_PROOF
-
-/obj/item/clothing/suit/wizrobe/red
- name = "red wizard robe"
- desc = ""
- icon_state = "redwizard"
- item_state = "redwizrobe"
-
-/obj/item/clothing/suit/wizrobe/yellow
- name = "yellow wizard robe"
- desc = ""
- icon_state = "yellowwizard"
- item_state = "yellowwizrobe"
-
-/obj/item/clothing/suit/wizrobe/black
- name = "black wizard robe"
- desc = ""
- icon_state = "blackwizard"
- item_state = "blackwizrobe"
-
-/obj/item/clothing/suit/wizrobe/marisa
- name = "witch robe"
- desc = ""
- icon_state = "marisa"
- item_state = "marisarobe"
-
-/obj/item/clothing/suit/wizrobe/magusblue
- name = "\improper Magus robe"
- desc = ""
- icon_state = "magusblue"
- item_state = "magusblue"
-
-/obj/item/clothing/suit/wizrobe/magusred
- name = "\improper Magus robe"
- desc = ""
- icon_state = "magusred"
- item_state = "magusred"
-
-
-/obj/item/clothing/suit/wizrobe/santa
- name = "Santa's suit"
- desc = ""
- icon_state = "santa"
- item_state = "santa"
-
-/obj/item/clothing/suit/wizrobe/fake
- name = "wizard robe"
- desc = ""
- icon_state = "wizard-fake"
- item_state = "wizrobe"
- gas_transfer_coefficient = 1
- permeability_coefficient = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- resistance_flags = FLAMMABLE
-
-/obj/item/clothing/head/wizard/marisa/fake
- name = "witch hat"
- desc = ""
- icon_state = "marisa"
- gas_transfer_coefficient = 1
- permeability_coefficient = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- resistance_flags = FLAMMABLE
-
-/obj/item/clothing/suit/wizrobe/marisa/fake
- name = "witch robe"
- desc = ""
- icon_state = "marisa"
- item_state = "marisarobe"
- gas_transfer_coefficient = 1
- permeability_coefficient = 1
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- resistance_flags = FLAMMABLE
-
-/obj/item/clothing/suit/wizrobe/paper
- name = "papier-mache robe" // no non-latin characters!
- desc = ""
- icon_state = "wizard-paper"
- item_state = "wizard-paper"
- var/robe_charge = TRUE
diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm
index 8343beaebd..f48661d5f1 100644
--- a/code/modules/clothing/under/accessories.dm
+++ b/code/modules/clothing/under/accessories.dm
@@ -83,292 +83,3 @@
. += "\The [src] can be attached to a uniform. Alt-click to remove it once attached."
if(initial(above_suit))
. += "\The [src] can be worn above or below my suit. Alt-click to toggle."
-
-/obj/item/clothing/accessory/waistcoat
- name = "waistcoat"
- desc = ""
- icon_state = "waistcoat"
- item_state = "waistcoat"
- minimize_when_attached = FALSE
- attachment_slot = null
-
-/obj/item/clothing/accessory/maidapron
- name = "maid apron"
- desc = ""
- icon_state = "maidapron"
- item_state = "maidapron"
- minimize_when_attached = FALSE
- attachment_slot = null
-
-//////////
-//Medals//
-//////////
-
-/obj/item/clothing/accessory/medal
- name = "bronze medal"
- desc = ""
- icon_state = "bronze"
- custom_materials = list(/datum/material/iron=1000)
- resistance_flags = FIRE_PROOF
- var/medaltype = "medal" //Sprite used for medalbox
- var/commended = FALSE
-
-//Pinning medals on people
-/obj/item/clothing/accessory/medal/attack(mob/living/carbon/human/M, mob/living/user)
- if(ishuman(M) && (user.used_intent.type == INTENT_HELP))
-
- if(M.wear_armor)
- if((M.wear_armor.flags_inv & HIDEJUMPSUIT)) //Check if the jumpsuit is covered
- to_chat(user, "Medals can only be pinned on jumpsuits.")
- return
-
- if(M.wear_pants)
- var/obj/item/clothing/under/U = M.wear_pants
- var/delay = 20
- if(user == M)
- delay = 0
- else
- user.visible_message("[user] is trying to pin [src] on [M]'s chest.", \
- "I try to pin [src] on [M]'s chest.")
- var/input
- if(!commended && user != M)
- input = stripped_input(user,"Please input a reason for this commendation, it will be recorded by Nanotrasen.", ,"", 140)
- if(do_after(user, delay, target = M))
- if(U.attach_accessory(src, user, 0)) //Attach it, do not notify the user of the attachment
- if(user == M)
- to_chat(user, "I attach [src] to [U].")
- else
- user.visible_message("[user] pins \the [src] on [M]'s chest.", \
- "I pin \the [src] on [M]'s chest.")
- if(input)
- SSblackbox.record_feedback("associative", "commendation", 1, list("commender" = "[user.real_name]", "commendee" = "[M.real_name]", "medal" = "[src]", "reason" = input))
- GLOB.commendations += "[user.real_name] awarded [M.real_name] the [name]! \n- [input]"
- commended = TRUE
- desc += "
The inscription reads: [input] - [user.real_name]"
- log_game("[key_name(M)] was given the following commendation by [key_name(user)]: [input]")
- message_admins("[key_name_admin(M)] was given the following commendation by [key_name_admin(user)]: [input]")
-
- else
- to_chat(user, "Medals can only be pinned on jumpsuits!")
- else
- ..()
-
-/obj/item/clothing/accessory/medal/conduct
- name = "distinguished conduct medal"
- desc = ""
-
-/obj/item/clothing/accessory/medal/bronze_heart
- name = "bronze heart medal"
- desc = ""
- icon_state = "bronze_heart"
-
-/obj/item/clothing/accessory/medal/ribbon
- name = "ribbon"
- desc = ""
- icon_state = "cargo"
-
-/obj/item/clothing/accessory/medal/ribbon/cargo
- name = "\"cargo tech of the shift\" award"
- desc = ""
-
-/obj/item/clothing/accessory/medal/silver
- name = "silver medal"
- desc = ""
- icon_state = "silver"
- medaltype = "medal-silver"
- custom_materials = list(/datum/material/silver=1000)
-
-/obj/item/clothing/accessory/medal/silver/valor
- name = "medal of valor"
- desc = ""
-
-/obj/item/clothing/accessory/medal/silver/security
- name = "robust security award"
- desc = ""
-
-/obj/item/clothing/accessory/medal/silver/excellence
- name = "the head of personnel award for outstanding achievement in the field of excellence"
- desc = ""
-
-/obj/item/clothing/accessory/medal/gold
- name = "gold medal"
- desc = ""
- icon_state = "gold"
- medaltype = "medal-gold"
- custom_materials = list(/datum/material/gold=1000)
-
-/obj/item/clothing/accessory/medal/gold/captain
- name = "medal of captaincy"
- desc = ""
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
-
-/obj/item/clothing/accessory/medal/gold/heroism
- name = "medal of exceptional heroism"
- desc = ""
-
-/obj/item/clothing/accessory/medal/plasma
- name = "plasma medal"
- desc = ""
- icon_state = "plasma"
- medaltype = "medal-plasma"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = -10, "acid" = 0) //It's made of plasma. Of course it's flammable.
- custom_materials = list(/datum/material/plasma=1000)
-
-/obj/item/clothing/accessory/medal/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- if(exposed_temperature > 300)
- atmos_spawn_air("plasma=20;TEMP=[exposed_temperature]")
- visible_message("\The [src] bursts into flame!", "My [src] bursts into flame!")
- qdel(src)
-
-/obj/item/clothing/accessory/medal/plasma/nobel_science
- name = "nobel sciences award"
- desc = ""
-
-
-
-////////////
-//Armbands//
-////////////
-
-/obj/item/clothing/accessory/armband
- name = "red armband"
- desc = ""
- icon_state = "redband"
- attachment_slot = null
-
-/obj/item/clothing/accessory/armband/deputy
- name = "security deputy armband"
- desc = ""
-
-/obj/item/clothing/accessory/armband/cargo
- name = "cargo bay guard armband"
- desc = ""
- icon_state = "cargoband"
-
-/obj/item/clothing/accessory/armband/engine
- name = "engineering guard armband"
- desc = ""
- icon_state = "engieband"
-
-/obj/item/clothing/accessory/armband/science
- name = "science guard armband"
- desc = ""
- icon_state = "rndband"
-
-/obj/item/clothing/accessory/armband/hydro
- name = "hydroponics guard armband"
- desc = ""
- icon_state = "hydroband"
-
-/obj/item/clothing/accessory/armband/med
- name = "medical guard armband"
- desc = ""
- icon_state = "medband"
-
-/obj/item/clothing/accessory/armband/medblue
- name = "medical guard armband"
- desc = ""
- icon_state = "medblueband"
-
-//////////////
-//OBJECTION!//
-//////////////
-
-/obj/item/clothing/accessory/lawyers_badge
- name = "attorney's badge"
- desc = ""
- icon_state = "lawyerbadge"
-
-/obj/item/clothing/accessory/lawyers_badge/attack_self(mob/user)
- if(prob(1))
- user.say("The testimony contradicts the evidence!", forced = "attorney's badge")
- user.visible_message("[user] shows [user.p_their()] attorney's badge.", "I show my attorney's badge.")
-
-/obj/item/clothing/accessory/lawyers_badge/on_uniform_equip(obj/item/clothing/under/U, user)
- var/mob/living/L = user
- if(L)
- L.bubble_icon = "lawyer"
-
-/obj/item/clothing/accessory/lawyers_badge/on_uniform_dropped(obj/item/clothing/under/U, user)
- var/mob/living/L = user
- if(L)
- L.bubble_icon = initial(L.bubble_icon)
-
-////////////////
-//HA HA! NERD!//
-////////////////
-/obj/item/clothing/accessory/pocketprotector
- name = "pocket protector"
- desc = ""
- icon_state = "pocketprotector"
- pocket_storage_component_path = /datum/component/storage/concrete/pockets/pocketprotector
-
-/obj/item/clothing/accessory/pocketprotector/full/Initialize()
- . = ..()
- new /obj/item/pen/red(src)
- new /obj/item/pen(src)
- new /obj/item/pen/blue(src)
-
-/obj/item/clothing/accessory/pocketprotector/cosmetology/Initialize()
- . = ..()
- for(var/i in 1 to 3)
- new /obj/item/lipstick/random(src)
-
-////////////////
-//REAL BIG FAN//
-////////////////
-
-/obj/item/clothing/accessory/fan_clown_pin
- name = "Clown Pin"
- desc = ""
- icon_state = "fan_clown_pin"
- above_suit = TRUE
- minimize_when_attached = TRUE
- attachment_slot = CHEST
-
-/obj/item/clothing/accessory/fan_clown_pin/on_uniform_equip(obj/item/clothing/under/U, user)
- var/mob/living/L = user
- if(HAS_TRAIT(L, TRAIT_FAN_CLOWN))
- SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "fan_clown_pin", /datum/mood_event/fan_clown_pin)
-
-/obj/item/clothing/accessory/fan_clown_pin/on_uniform_dropped(obj/item/clothing/under/U, user)
- var/mob/living/L = user
- if(HAS_TRAIT(L, TRAIT_FAN_CLOWN))
- SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "fan_clown_pin")
-
-/obj/item/clothing/accessory/fan_mime_pin
- name = "Mime Pin"
- desc = ""
- icon_state = "fan_mime_pin"
- above_suit = TRUE
- minimize_when_attached = TRUE
- attachment_slot = CHEST
-
-/obj/item/clothing/accessory/fan_clown_pin/on_uniform_equip(obj/item/clothing/under/U, user)
- var/mob/living/L = user
- if(HAS_TRAIT(L, TRAIT_FAN_MIME))
- SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "fan_mime_pin", /datum/mood_event/fan_mime_pin)
-
-/obj/item/clothing/accessory/fan_clown_pin/on_uniform_dropped(obj/item/clothing/under/U, user)
- var/mob/living/L = user
- if(HAS_TRAIT(L, TRAIT_FAN_MIME))
- SEND_SIGNAL(L, COMSIG_CLEAR_MOOD_EVENT, "fan_clown_pin")
-
-////////////////
-//OONGA BOONGA//
-////////////////
-
-/obj/item/clothing/accessory/talisman
- name = "bone talisman"
- desc = ""
- icon_state = "talisman"
- armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25)
- attachment_slot = null
-
-/obj/item/clothing/accessory/skullcodpiece
- name = "skull codpiece"
- desc = ""
- icon_state = "skull"
- above_suit = TRUE
- armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25)
- attachment_slot = GROIN
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
deleted file mode 100644
index bae616be50..0000000000
--- a/code/modules/clothing/under/color.dm
+++ /dev/null
@@ -1,231 +0,0 @@
-/obj/item/clothing/under/color
- desc = ""
- dying_key = DYE_REGISTRY_UNDER
- icon = 'icons/obj/clothing/under/color.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/color.dmi'
-
-/obj/item/clothing/under/color/jumpskirt
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/color/random
- icon_state = "random_jumpsuit"
-
-/obj/item/clothing/under/color/random/Initialize()
- ..()
- var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - typesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/glorf - /obj/item/clothing/under/color/black/ghost)
- if(ishuman(loc))
- var/mob/living/carbon/human/H = loc
- H.equip_to_slot_or_del(new C(H), SLOT_PANTS) //or else you end up with naked assistants running around everywhere...
- else
- new C(loc)
- return INITIALIZE_HINT_QDEL
-
-/obj/item/clothing/under/color/jumpskirt/random
- icon_state = "random_jumpsuit" //Skirt variant needed
-
-/obj/item/clothing/under/color/jumpskirt/random/Initialize()
- ..()
- var/obj/item/clothing/under/color/jumpskirt/C = pick(subtypesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/jumpskirt/random)
- if(ishuman(loc))
- var/mob/living/carbon/human/H = loc
- H.equip_to_slot_or_del(new C(H), SLOT_PANTS)
- else
- new C(loc)
- return INITIALIZE_HINT_QDEL
-
-/obj/item/clothing/under/color/black
- name = "black jumpsuit"
- icon_state = "black"
- item_state = "bl_suit"
- resistance_flags = NONE
-
-/obj/item/clothing/under/color/jumpskirt/black
- name = "black jumpskirt"
- icon_state = "black_skirt"
- item_state = "bl_suit"
-
-/obj/item/clothing/under/color/black/ghost
- item_flags = DROPDEL
-
-/obj/item/clothing/under/color/black/ghost/Initialize()
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT)
-
-/obj/item/clothing/under/color/grey
- name = "grey jumpsuit"
- desc = ""
- icon_state = "grey"
- item_state = "gy_suit"
-
-/obj/item/clothing/under/color/jumpskirt/grey
- name = "grey jumpskirt"
- desc = ""
- icon_state = "grey_skirt"
- item_state = "gy_suit"
-
-/obj/item/clothing/under/color/grey/glorf
- name = "ancient jumpsuit"
- desc = ""
-
-/obj/item/clothing/under/color/grey/glorf/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
- owner.forcesay(GLOB.hit_appends)
- return 0
-
-/obj/item/clothing/under/color/blue
- name = "blue jumpsuit"
- icon_state = "blue"
- item_state = "b_suit"
-
-/obj/item/clothing/under/color/jumpskirt/blue
- name = "blue jumpskirt"
- icon_state = "blue_skirt"
- item_state = "b_suit"
-
-/obj/item/clothing/under/color/green
- name = "green jumpsuit"
- icon_state = "green"
- item_state = "g_suit"
-
-/obj/item/clothing/under/color/jumpskirt/green
- name = "green jumpskirt"
- icon_state = "green_skirt"
- item_state = "g_suit"
-
-/obj/item/clothing/under/color/orange
- name = "orange jumpsuit"
- desc = ""
- icon_state = "orange"
- item_state = "o_suit"
-
-/obj/item/clothing/under/color/jumpskirt/orange
- name = "orange jumpskirt"
- icon_state = "orange_skirt"
- item_state = "o_suit"
-
-/obj/item/clothing/under/color/pink
- name = "pink jumpsuit"
- icon_state = "pink"
- desc = ""
- item_state = "p_suit"
-
-/obj/item/clothing/under/color/jumpskirt/pink
- name = "pink jumpskirt"
- icon_state = "pink_skirt"
- item_state = "p_suit"
-
-/obj/item/clothing/under/color/red
- name = "red jumpsuit"
- icon_state = "red"
- item_state = "r_suit"
-
-/obj/item/clothing/under/color/jumpskirt/red
- name = "red jumpskirt"
- icon_state = "red_skirt"
- item_state = "r_suit"
-
-/obj/item/clothing/under/color/white
- name = "white jumpsuit"
- icon_state = "white"
- item_state = "w_suit"
-
-/obj/item/clothing/under/color/jumpskirt/white
- name = "white jumpskirt"
- icon_state = "white_skirt"
- item_state = "w_suit"
-
-/obj/item/clothing/under/color/yellow
- name = "yellow jumpsuit"
- icon_state = "yellow"
- item_state = "y_suit"
-
-/obj/item/clothing/under/color/jumpskirt/yellow
- name = "yellow jumpskirt"
- icon_state = "yellow_skirt"
- item_state = "y_suit"
-
-/obj/item/clothing/under/color/darkblue
- name = "darkblue jumpsuit"
- icon_state = "darkblue"
- item_state = "b_suit"
-
-/obj/item/clothing/under/color/jumpskirt/darkblue
- name = "darkblue jumpskirt"
- icon_state = "darkblue_skirt"
- item_state = "b_suit"
-
-/obj/item/clothing/under/color/teal
- name = "teal jumpsuit"
- icon_state = "teal"
- item_state = "b_suit"
-
-/obj/item/clothing/under/color/jumpskirt/teal
- name = "teal jumpskirt"
- icon_state = "teal_skirt"
- item_state = "b_suit"
-
-
-/obj/item/clothing/under/color/lightpurple
- name = "purple jumpsuit"
- icon_state = "lightpurple"
- item_state = "p_suit"
-
-/obj/item/clothing/under/color/jumpskirt/lightpurple
- name = "lightpurple jumpskirt"
- icon_state = "lightpurple_skirt"
- item_state = "p_suit"
-
-/obj/item/clothing/under/color/darkgreen
- name = "darkgreen jumpsuit"
- icon_state = "darkgreen"
- item_state = "g_suit"
-
-/obj/item/clothing/under/color/jumpskirt/darkgreen
- name = "darkgreen jumpskirt"
- icon_state = "darkgreen_skirt"
- item_state = "g_suit"
-
-/obj/item/clothing/under/color/lightbrown
- name = "lightbrown jumpsuit"
- icon_state = "lightbrown"
- item_state = "lb_suit"
-
-/obj/item/clothing/under/color/jumpskirt/lightbrown
- name = "lightbrown jumpskirt"
- icon_state = "lightbrown_skirt"
- item_state = "lb_suit"
-
-/obj/item/clothing/under/color/brown
- name = "brown jumpsuit"
- icon_state = "brown"
- item_state = "lb_suit"
-
-/obj/item/clothing/under/color/jumpskirt/brown
- name = "brown jumpskirt"
- icon_state = "brown_skirt"
- item_state = "lb_suit"
-
-/obj/item/clothing/under/color/maroon
- name = "maroon jumpsuit"
- icon_state = "maroon"
- item_state = "r_suit"
-
-/obj/item/clothing/under/color/jumpskirt/maroon
- name = "maroon jumpskirt"
- icon_state = "maroon_skirt"
- item_state = "r_suit"
-
-/obj/item/clothing/under/color/rainbow
- name = "rainbow jumpsuit"
- desc = ""
- icon_state = "rainbow"
- item_state = "rainbow"
- can_adjust = FALSE
-
-/obj/item/clothing/under/color/jumpskirt/rainbow
- name = "rainbow jumpskirt"
- desc = ""
- icon_state = "rainbow_skirt"
- item_state = "rainbow"
- can_adjust = FALSE
diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm
deleted file mode 100644
index f2d5498500..0000000000
--- a/code/modules/clothing/under/costume.dm
+++ /dev/null
@@ -1,255 +0,0 @@
-/obj/item/clothing/under/costume
- icon = 'icons/obj/clothing/under/costume.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/costume.dmi'
-
-/obj/item/clothing/under/costume/roman
- name = "\improper Roman armor"
- desc = ""
- icon_state = "roman"
- item_state = "armor"
- can_adjust = FALSE
- strip_delay = 100
- resistance_flags = NONE
-
-/obj/item/clothing/under/costume/jabroni
- name = "jabroni outfit"
- desc = ""
- icon_state = "darkholme"
- item_state = "darkholme"
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/owl
- name = "owl uniform"
- desc = ""
- icon_state = "owl"
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/griffin
- name = "griffon uniform"
- desc = ""
- icon_state = "griffin"
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/schoolgirl
- name = "blue schoolgirl uniform"
- desc = ""
- icon_state = "schoolgirl"
- item_state = "schoolgirl"
- body_parts_covered = CHEST|GROIN|ARMS
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/schoolgirl/red
- name = "red schoolgirl uniform"
- icon_state = "schoolgirlred"
- item_state = "schoolgirlred"
-
-/obj/item/clothing/under/costume/schoolgirl/green
- name = "green schoolgirl uniform"
- icon_state = "schoolgirlgreen"
- item_state = "schoolgirlgreen"
-
-/obj/item/clothing/under/costume/schoolgirl/orange
- name = "orange schoolgirl uniform"
- icon_state = "schoolgirlorange"
- item_state = "schoolgirlorange"
-
-/obj/item/clothing/under/costume/pirate
- name = "pirate outfit"
- desc = ""
- icon_state = "pirate"
- item_state = "pirate"
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/soviet
- name = "soviet uniform"
- desc = ""
- icon_state = "soviet"
- item_state = "soviet"
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/redcoat
- name = "redcoat uniform"
- desc = ""
- icon_state = "redcoat"
- item_state = "redcoat"
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/kilt
- name = "kilt"
- desc = ""
- icon_state = "kilt"
- item_state = "kilt"
- body_parts_covered = CHEST|GROIN|LEGS|FEET
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/kilt/highlander
- desc = ""
-
-/obj/item/clothing/under/costume/kilt/highlander/Initialize()
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, HIGHLANDER)
-
-/obj/item/clothing/under/costume/gladiator
- name = "gladiator uniform"
- desc = ""
- icon_state = "gladiator"
- item_state = "gladiator"
- body_parts_covered = CHEST|GROIN|ARMS
- fitted = NO_FEMALE_UNIFORM
- can_adjust = FALSE
- resistance_flags = NONE
-
-/obj/item/clothing/under/costume/gladiator/ash_walker
- desc = ""
- has_sensor = NO_SENSORS
-
-/obj/item/clothing/under/costume/maid
- name = "maid costume"
- desc = ""
- icon_state = "maid"
- item_state = "maid"
- body_parts_covered = CHEST|GROIN
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/maid/Initialize()
- . = ..()
- var/obj/item/clothing/accessory/maidapron/A = new (src)
- attach_accessory(A)
-
-/obj/item/clothing/under/costume/geisha
- name = "geisha suit"
- desc = ""
- icon_state = "geisha"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/villain
- name = "villain suit"
- desc = ""
- icon_state = "villain"
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/sailor
- name = "sailor suit"
- desc = ""
- icon_state = "sailor"
- item_state = "b_suit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/singer
- desc = ""
- body_parts_covered = CHEST|GROIN|ARMS
- alternate_worn_layer = ABOVE_SHOES_LAYER
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/singer/yellow
- name = "yellow performer's outfit"
- icon_state = "ysing"
- item_state = "ysing"
- fitted = NO_FEMALE_UNIFORM
-
-/obj/item/clothing/under/costume/singer/blue
- name = "blue performer's outfit"
- icon_state = "bsing"
- item_state = "bsing"
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/costume/mummy
- name = "mummy wrapping"
- desc = ""
- icon_state = "mummy"
- item_state = "mummy"
- body_parts_covered = CHEST|GROIN|ARMS|LEGS
- fitted = NO_FEMALE_UNIFORM
- can_adjust = FALSE
- resistance_flags = NONE
-
-/obj/item/clothing/under/costume/scarecrow
- name = "scarecrow clothes"
- desc = ""
- icon_state = "scarecrow"
- item_state = "scarecrow"
- body_parts_covered = CHEST|GROIN|ARMS|LEGS
- fitted = NO_FEMALE_UNIFORM
- can_adjust = FALSE
- resistance_flags = NONE
-
-/obj/item/clothing/under/costume/draculass
- name = "draculass coat"
- desc = ""
- icon_state = "draculass"
- item_state = "draculass"
- body_parts_covered = CHEST|GROIN|ARMS
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/drfreeze
- name = "doctor freeze's jumpsuit"
- desc = ""
- icon_state = "drfreeze"
- item_state = "drfreeze"
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/lobster
- name = "foam lobster suit"
- desc = ""
- icon_state = "lobster"
- item_state = "lobster"
- fitted = NO_FEMALE_UNIFORM
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/gondola
- name = "gondola hide suit"
- desc = ""
- icon_state = "gondola"
- item_state = "lb_suit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/skeleton
- name = "skeleton jumpsuit"
- desc = ""
- icon_state = "skeleton"
- item_state = "skeleton"
- body_parts_covered = CHEST|GROIN|ARMS|LEGS
- fitted = NO_FEMALE_UNIFORM
- can_adjust = FALSE
- resistance_flags = NONE
-
-/obj/item/clothing/under/costume/mech_suit
- name = "red mech pilot's suit"
- desc = ""
- icon_state = "red_mech_suit"
- item_state = "red_mech_suit"
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- fitted = NO_FEMALE_UNIFORM
- alternate_worn_layer = GLOVES_LAYER //covers hands but gloves can go over it. This is how these things work in my head.
- can_adjust = FALSE
-
-/obj/item/clothing/under/costume/mech_suit/white
- name = "white mech pilot's suit"
- desc = ""
- icon_state = "white_mech_suit"
- item_state = "white_mech_suit"
-
-/obj/item/clothing/under/costume/mech_suit/blue
- name = "blue mech pilot's suit"
- desc = ""
- icon_state = "blue_mech_suit"
- item_state = "blue_mech_suit"
-
-/obj/item/clothing/under/costume/russian_officer
- name = "\improper Russian officer's uniform"
- desc = ""
- icon = 'icons/obj/clothing/under/security.dmi'
- icon_state = "hostanclothes"
- item_state = "hostanclothes"
- mob_overlay_icon = 'icons/mob/clothing/under/security.dmi'
- alt_covers_chest = TRUE
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30)
- strip_delay = 50
- sensor_mode = SENSOR_COORDS
- random_sensor = FALSE
diff --git a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm b/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
deleted file mode 100644
index da236236f8..0000000000
--- a/code/modules/clothing/under/jobs/Plasmaman/civilian_service.dm
+++ /dev/null
@@ -1,76 +0,0 @@
-/obj/item/clothing/under/plasmaman/cargo
- name = "cargo plasma envirosuit"
- desc = ""
- icon_state = "cargo_envirosuit"
- item_state = "cargo_envirosuit"
-
-/obj/item/clothing/under/plasmaman/mining
- name = "mining plasma envirosuit"
- desc = ""
- icon_state = "explorer_envirosuit"
- item_state = "explorer_envirosuit"
-
-
-/obj/item/clothing/under/plasmaman/chef
- name = "chef's plasma envirosuit"
- desc = ""
- icon_state = "chef_envirosuit"
- item_state = "chef_envirosuit"
-
-/obj/item/clothing/under/plasmaman/enviroslacks
- name = "enviroslacks"
- desc = ""
- icon_state = "enviroslacks"
- item_state = "enviroslacks"
-
-/obj/item/clothing/under/plasmaman/chaplain
- name = "chaplain's plasma envirosuit"
- desc = ""
- icon_state = "chap_envirosuit"
- item_state = "chap_envirosuit"
-
-/obj/item/clothing/under/plasmaman/curator
- name = "curator's plasma envirosuit"
- desc = ""
- icon_state = "prototype_envirosuit"
- item_state = "prototype_envirosuit"
-
-/obj/item/clothing/under/plasmaman/janitor
- name = "janitor's plasma envirosuit"
- desc = ""
- icon_state = "janitor_envirosuit"
- item_state = "janitor_envirosuit"
-
-/obj/item/clothing/under/plasmaman/botany
- name = "botany envirosuit"
- desc = ""
- icon_state = "botany_envirosuit"
- item_state = "botany_envirosuit"
-
-
-/obj/item/clothing/under/plasmaman/mime
- name = "mime envirosuit"
- desc = ""
- icon_state = "mime_envirosuit"
- item_state = "mime_envirosuit"
-
-/obj/item/clothing/under/plasmaman/clown
- name = "clown envirosuit"
- desc = ""
- icon_state = "clown_envirosuit"
- item_state = "clown_envirosuit"
-
-/obj/item/clothing/under/plasmaman/clown/Extinguish(mob/living/carbon/human/H)
- if(!istype(H))
- return
-
- if(H.on_fire)
- if(extinguishes_left)
- if(next_extinguish > world.time)
- return
- next_extinguish = world.time + extinguish_cooldown
- extinguishes_left--
- H.visible_message("[H]'s suit spews out a tonne of space lube!","My suit spews out a tonne of space lube!")
- H.ExtinguishMob()
- new /obj/effect/particle_effect/foam(loc) //Truely terrifying.
- return 0
diff --git a/code/modules/clothing/under/jobs/Plasmaman/engineering.dm b/code/modules/clothing/under/jobs/Plasmaman/engineering.dm
deleted file mode 100644
index 273f4d91ea..0000000000
--- a/code/modules/clothing/under/jobs/Plasmaman/engineering.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/obj/item/clothing/under/plasmaman/engineering
- name = "engineering plasma envirosuit"
- desc = ""
- icon_state = "engineer_envirosuit"
- item_state = "engineer_envirosuit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 10, "fire" = 95, "acid" = 95)
-
-/obj/item/clothing/under/plasmaman/atmospherics
- name = "atmospherics plasma envirosuit"
- desc = ""
- icon_state = "atmos_envirosuit"
- item_state = "atmos_envirosuit"
-
diff --git a/code/modules/clothing/under/jobs/Plasmaman/medsci.dm b/code/modules/clothing/under/jobs/Plasmaman/medsci.dm
deleted file mode 100644
index 85fbf2b8a9..0000000000
--- a/code/modules/clothing/under/jobs/Plasmaman/medsci.dm
+++ /dev/null
@@ -1,35 +0,0 @@
-/obj/item/clothing/under/plasmaman/medical
- name = "medical plasma envirosuit"
- desc = ""
- icon_state = "doctor_envirosuit"
- item_state = "doctor_envirosuit"
-
-/obj/item/clothing/under/plasmaman/science
- name = "science plasma envirosuit"
- desc = ""
- icon_state = "scientist_envirosuit"
- item_state = "scientist_envirosuit"
-
-/obj/item/clothing/under/plasmaman/robotics
- name = "robotics plasma envirosuit"
- desc = ""
- icon_state = "roboticist_envirosuit"
- item_state = "roboticist_envirosuit"
-
-/obj/item/clothing/under/plasmaman/viro
- name = "virology plasma envirosuit"
- desc = ""
- icon_state = "virologist_envirosuit"
- item_state = "virologist_envirosuit"
-
-/obj/item/clothing/under/plasmaman/genetics
- name = "genetics plasma envirosuit"
- desc = ""
- icon_state = "geneticist_envirosuit"
- item_state = "geneticist_envirosuit"
-
-/obj/item/clothing/under/plasmaman/chemist
- name = "chemistry plasma envirosuit"
- desc = ""
- icon_state = "chemist_envirosuit"
- item_state = "chemist_envirosuit"
diff --git a/code/modules/clothing/under/jobs/Plasmaman/security.dm b/code/modules/clothing/under/jobs/Plasmaman/security.dm
deleted file mode 100644
index 4cf66cf89c..0000000000
--- a/code/modules/clothing/under/jobs/Plasmaman/security.dm
+++ /dev/null
@@ -1,12 +0,0 @@
-/obj/item/clothing/under/plasmaman/security
- name = "security plasma envirosuit"
- desc = ""
- icon_state = "security_envirosuit"
- item_state = "security_envirosuit"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95)
-
-/obj/item/clothing/under/plasmaman/security/warden
- name = "warden plasma envirosuit"
- desc = ""
- icon_state = "warden_envirosuit"
- item_state = "warden_envirosuit"
diff --git a/code/modules/clothing/under/jobs/cargo.dm b/code/modules/clothing/under/jobs/cargo.dm
deleted file mode 100644
index a32ce785a9..0000000000
--- a/code/modules/clothing/under/jobs/cargo.dm
+++ /dev/null
@@ -1,52 +0,0 @@
-/obj/item/clothing/under/rank/cargo
- icon = 'icons/obj/clothing/under/cargo.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/cargo.dmi'
-
-/obj/item/clothing/under/rank/cargo/qm
- name = "quartermaster's jumpsuit"
- desc = ""
- icon_state = "qm"
- item_state = "lb_suit"
-
-/obj/item/clothing/under/rank/cargo/qm/skirt
- name = "quartermaster's jumpskirt"
- desc = ""
- icon_state = "qm_skirt"
- item_state = "lb_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/cargo/tech
- name = "cargo technician's jumpsuit"
- desc = ""
- icon_state = "cargotech"
- item_state = "lb_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- mutantrace_variation = MUTANTRACE_VARIATION
- alt_covers_chest = TRUE
-
-/obj/item/clothing/under/rank/cargo/tech/skirt
- name = "cargo technician's jumpskirt"
- desc = ""
- icon_state = "cargo_skirt"
- item_state = "lb_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- mutantrace_variation = NO_MUTANTRACE_VARIATION
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/cargo/miner
- desc = ""
- name = "shaft miner's jumpsuit"
- icon_state = "miner"
- item_state = "miner"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 0)
- resistance_flags = NONE
-
-/obj/item/clothing/under/rank/cargo/miner/lavaland
- desc = ""
- name = "shaft miner's jumpsuit"
- icon_state = "explorer"
- item_state = "explorer"
- can_adjust = FALSE
diff --git a/code/modules/clothing/under/jobs/centcom.dm b/code/modules/clothing/under/jobs/centcom.dm
deleted file mode 100644
index c3ba56131a..0000000000
--- a/code/modules/clothing/under/jobs/centcom.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-/obj/item/clothing/under/rank
- icon = 'icons/obj/clothing/under/centcom.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/centcom.dmi'
-
-/obj/item/clothing/under/rank/centcom/officer
- name = "\improper CentCom officer's jumpsuit"
- desc = ""
- icon_state = "officer"
- item_state = "g_suit"
- alt_covers_chest = TRUE
-
-/obj/item/clothing/under/rank/centcom/commander
- name = "\improper CentCom officer's jumpsuit"
- desc = ""
- icon_state = "centcom"
- item_state = "dg_suit"
-
-/obj/item/clothing/under/rank/centcom/intern
- name = "\improper CentCom intern's jumpsuit"
- desc = ""
- icon_state = "intern"
- item_state = "g_suit"
- can_adjust = FALSE
diff --git a/code/modules/clothing/under/jobs/civilian/civilian.dm b/code/modules/clothing/under/jobs/civilian/civilian.dm
deleted file mode 100644
index 630a7b909e..0000000000
--- a/code/modules/clothing/under/jobs/civilian/civilian.dm
+++ /dev/null
@@ -1,133 +0,0 @@
-//Alphabetical order of civilian jobs.
-
-/obj/item/clothing/under/rank/civilian
- icon = 'icons/obj/clothing/under/civilian.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/civilian.dmi'
-
-/obj/item/clothing/under/rank/civilian/bartender
- desc = ""
- name = "bartender's uniform"
- icon_state = "barman"
- item_state = "bar_suit"
- alt_covers_chest = TRUE
-
-/obj/item/clothing/under/rank/civilian/bartender/purple
- desc = ""
- name = "purple bartender's uniform"
- icon_state = "purplebartender"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/bartender/skirt
- name = "bartender's skirt"
- desc = ""
- icon_state = "barman_skirt"
- item_state = "bar_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/civilian/chaplain
- desc = ""
- name = "chaplain's jumpsuit"
- icon_state = "chaplain"
- item_state = "bl_suit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/chaplain/skirt
- name = "chaplain's jumpskirt"
- desc = ""
- icon_state = "chapblack_skirt"
- item_state = "bl_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/civilian/chef
- name = "cook's suit"
- desc = ""
- icon_state = "chef"
- alt_covers_chest = TRUE
-
-/obj/item/clothing/under/rank/civilian/chef/skirt
- name = "cook's skirt"
- desc = ""
- icon_state = "chef_skirt"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/civilian/head_of_personnel
- desc = ""
- name = "head of personnel's jumpsuit"
- icon_state = "hop"
- item_state = "b_suit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/head_of_personnel/skirt
- name = "head of personnel's jumpskirt"
- desc = ""
- icon_state = "hop_skirt"
- item_state = "b_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/civilian/head_of_personnel/suit
- name = "head of personnel's suit"
- desc = ""
- icon_state = "teal_suit"
- item_state = "g_suit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/head_of_personnel/suit/skirt
- name = "teal suitskirt"
- desc = ""
- icon_state = "teal_suit_skirt"
- item_state = "g_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/civilian/hydroponics
- desc = ""
- name = "botanist's jumpsuit"
- icon_state = "hydroponics"
- item_state = "g_suit"
- permeability_coefficient = 0.5
-
-/obj/item/clothing/under/rank/civilian/hydroponics/skirt
- name = "botanist's jumpskirt"
- desc = ""
- icon_state = "hydroponics_skirt"
- item_state = "g_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/civilian/janitor
- desc = ""
- name = "janitor's jumpsuit"
- icon_state = "janitor"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
-
-/obj/item/clothing/under/rank/civilian/janitor/skirt
- name = "janitor's jumpskirt"
- desc = ""
- icon_state = "janitor_skirt"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/civilian/janitor/maid
- name = "maid uniform"
- desc = ""
- icon_state = "janimaid"
- item_state = "janimaid"
- body_parts_covered = CHEST|GROIN
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/cookjorts
- name = "grilling shorts"
- desc = ""
- icon_state = "cookjorts"
diff --git a/code/modules/clothing/under/jobs/civilian/clown_mime.dm b/code/modules/clothing/under/jobs/civilian/clown_mime.dm
deleted file mode 100644
index 8c4197e363..0000000000
--- a/code/modules/clothing/under/jobs/civilian/clown_mime.dm
+++ /dev/null
@@ -1,98 +0,0 @@
-
-/obj/item/clothing/under/rank/civilian/mime
- name = "mime's outfit"
- desc = ""
- icon_state = "mime"
- item_state = "mime"
-
-/obj/item/clothing/under/rank/civilian/mime/skirt
- name = "mime's skirt"
- desc = ""
- icon_state = "mime_skirt"
- item_state = "mime"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/civilian/mime/sexy
- name = "sexy mime outfit"
- desc = ""
- icon_state = "sexymime"
- item_state = "sexymime"
- body_parts_covered = CHEST|GROIN|LEGS
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/clown
- name = "clown suit"
- desc = ""
- icon_state = "clown"
- item_state = "clown"
-
-/obj/item/clothing/under/rank/civilian/clown/blue
- name = "blue clown suit"
- desc = ""
- icon_state = "blueclown"
- item_state = "blueclown"
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/clown/green
- name = "green clown suit"
- desc = ""
- icon_state = "greenclown"
- item_state = "greenclown"
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/clown/yellow
- name = "yellow clown suit"
- desc = ""
- icon_state = "yellowclown"
- item_state = "yellowclown"
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/clown/purple
- name = "purple clown suit"
- desc = ""
- icon_state = "purpleclown"
- item_state = "purpleclown"
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/clown/orange
- name = "orange clown suit"
- desc = ""
- icon_state = "orangeclown"
- item_state = "orangeclown"
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/clown/rainbow
- name = "rainbow clown suit"
- desc = ""
- icon_state = "rainbowclown"
- item_state = "rainbowclown"
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/clown/jester
- name = "jester suit"
- desc = ""
- icon_state = "jester"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/clown/jester/alt
- icon_state = "jester2"
-
-/obj/item/clothing/under/rank/civilian/clown/sexy
- name = "sexy-clown suit"
- desc = ""
- icon_state = "sexyclown"
- item_state = "sexyclown"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/clown/Initialize()
- . = ..()
- AddComponent(/datum/component/squeak, list('sound/blank.ogg'=1), 50)
diff --git a/code/modules/clothing/under/jobs/civilian/curator.dm b/code/modules/clothing/under/jobs/civilian/curator.dm
deleted file mode 100644
index 3ef05991b9..0000000000
--- a/code/modules/clothing/under/jobs/civilian/curator.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/obj/item/clothing/under/rank/civilian/curator
- name = "sensible suit"
- desc = ""
- icon = 'icons/obj/clothing/under/suits.dmi'
- icon_state = "red_suit"
- item_state = "red_suit"
- mob_overlay_icon = 'icons/mob/clothing/under/suits.dmi'
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/civilian/curator/skirt
- name = "sensible suitskirt"
- desc = ""
- icon = 'icons/obj/clothing/under/suits.dmi'
- icon_state = "red_suit_skirt"
- item_state = "red_suit"
- mob_overlay_icon = 'icons/mob/clothing/under/suits.dmi'
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/civilian/curator/treasure_hunter
- name = "treasure hunter uniform"
- desc = ""
- icon = 'icons/obj/clothing/under/civilian.dmi'
- icon_state = "curator"
- item_state = "curator"
- mob_overlay_icon = 'icons/mob/clothing/under/civilian.dmi'
-
-/obj/item/clothing/under/rank/civilian/curator/nasa
- name = "\improper NASA jumpsuit"
- desc = ""
- icon = 'icons/obj/clothing/under/color.dmi'
- icon_state = "black"
- item_state = "bl_suit"
- mob_overlay_icon = 'icons/mob/clothing/under/color.dmi'
- w_class = WEIGHT_CLASS_BULKY
- gas_transfer_coefficient = 0.01
- permeability_coefficient = 0.02
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- cold_protection = CHEST | GROIN | LEGS | ARMS //Needs gloves and shoes with cold protection to be fully protected.
- min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
- heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
- can_adjust = FALSE
- resistance_flags = NONE
diff --git a/code/modules/clothing/under/jobs/command.dm b/code/modules/clothing/under/jobs/command.dm
deleted file mode 100644
index 15a5fc91ac..0000000000
--- a/code/modules/clothing/under/jobs/command.dm
+++ /dev/null
@@ -1,41 +0,0 @@
-/obj/item/clothing/under/rank/captain
- desc = ""
- name = "captain's jumpsuit"
- icon_state = "captain"
- item_state = "b_suit"
- sensor_mode = SENSOR_COORDS
- random_sensor = FALSE
- icon = 'icons/obj/clothing/under/captain.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/captain.dmi'
-
-/obj/item/clothing/under/rank/captain/skirt
- name = "captain's jumpskirt"
- desc = ""
- icon_state = "captain_skirt"
- item_state = "b_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/captain/suit
- name = "captain's suit"
- desc = ""
- icon_state = "green_suit"
- item_state = "dg_suit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/captain/suit/skirt
- name = "green suitskirt"
- desc = ""
- icon_state = "green_suit_skirt"
- item_state = "dg_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/captain/parade
- name = "captain's parade uniform"
- desc = ""
- icon_state = "captain_parade"
- item_state = "by_suit"
- can_adjust = FALSE
diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm
deleted file mode 100644
index 34586d466f..0000000000
--- a/code/modules/clothing/under/jobs/engineering.dm
+++ /dev/null
@@ -1,63 +0,0 @@
-//Contains: Engineering department jumpsuits
-
-/obj/item/clothing/under/rank/engineering
- icon = 'icons/obj/clothing/under/engineering.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/engineering.dmi'
-
-/obj/item/clothing/under/rank/engineering/chief_engineer
- desc = ""
- name = "chief engineer's jumpsuit"
- icon_state = "chiefengineer"
- item_state = "gy_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 80, "acid" = 40)
- resistance_flags = NONE
-
-/obj/item/clothing/under/rank/engineering/chief_engineer/skirt
- name = "chief engineer's jumpskirt"
- desc = ""
- icon_state = "chief_skirt"
- item_state = "gy_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/engineering/atmospheric_technician
- desc = ""
- name = "atmospheric technician's jumpsuit"
- icon_state = "atmos"
- item_state = "atmos_suit"
- resistance_flags = NONE
-
-/obj/item/clothing/under/rank/engineering/atmospheric_technician/skirt
- name = "atmospheric technician's jumpskirt"
- desc = ""
- icon_state = "atmos_skirt"
- item_state = "atmos_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/engineering/engineer
- desc = ""
- name = "engineer's jumpsuit"
- icon_state = "engine"
- item_state = "engi_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 60, "acid" = 20)
- resistance_flags = NONE
-
-/obj/item/clothing/under/rank/engineering/engineer/hazard
- name = "engineer's hazard jumpsuit"
- desc = ""
- icon_state = "hazard"
- item_state = "suit-orange"
- alt_covers_chest = TRUE
-
-/obj/item/clothing/under/rank/engineering/engineer/skirt
- name = "engineer's jumpskirt"
- desc = ""
- icon_state = "engine_skirt"
- item_state = "engi_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm
deleted file mode 100644
index ab103eeed0..0000000000
--- a/code/modules/clothing/under/jobs/medical.dm
+++ /dev/null
@@ -1,117 +0,0 @@
-/obj/item/clothing/under/rank/medical
- icon = 'icons/obj/clothing/under/medical.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/medical.dmi'
-
-/obj/item/clothing/under/rank/medical/chief_medical_officer
- desc = ""
- name = "chief medical officer's jumpsuit"
- icon_state = "cmo"
- item_state = "w_suit"
- permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
-
-/obj/item/clothing/under/rank/medical/chief_medical_officer/skirt
- name = "chief medical officer's jumpskirt"
- desc = ""
- icon_state = "cmo_skirt"
- item_state = "w_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/medical/geneticist
- desc = ""
- name = "geneticist's jumpsuit"
- icon_state = "genetics"
- item_state = "w_suit"
- permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
-
-/obj/item/clothing/under/rank/medical/geneticist/skirt
- name = "geneticist's jumpskirt"
- desc = ""
- icon_state = "geneticswhite_skirt"
- item_state = "w_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/medical/virologist
- desc = ""
- name = "virologist's jumpsuit"
- icon_state = "virology"
- item_state = "w_suit"
- permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
-
-/obj/item/clothing/under/rank/medical/virologist/skirt
- name = "virologist's jumpskirt"
- desc = ""
- icon_state = "virologywhite_skirt"
- item_state = "w_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/medical/doctor/nurse
- desc = ""
- name = "nurse's suit"
- icon_state = "nursesuit"
- item_state = "w_suit"
- permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
- body_parts_covered = CHEST|GROIN|ARMS
- fitted = NO_FEMALE_UNIFORM
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/medical/doctor
- desc = ""
- name = "medical doctor's jumpsuit"
- icon_state = "medical"
- item_state = "w_suit"
- permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
-
-/obj/item/clothing/under/rank/medical/doctor/blue
- name = "medical scrubs"
- desc = ""
- icon_state = "scrubsblue"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/medical/doctor/green
- name = "medical scrubs"
- desc = ""
- icon_state = "scrubsgreen"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/medical/doctor/purple
- name = "medical scrubs"
- desc = ""
- icon_state = "scrubspurple"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/medical/doctor/skirt
- name = "medical doctor's jumpskirt"
- desc = ""
- icon_state = "medical_skirt"
- item_state = "w_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/medical/chemist
- desc = ""
- name = "chemist's jumpsuit"
- icon_state = "chemistry"
- item_state = "w_suit"
- permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 65)
-
-/obj/item/clothing/under/rank/medical/chemist/skirt
- name = "chemist's jumpskirt"
- desc = ""
- icon_state = "chemistrywhite_skirt"
- item_state = "w_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
diff --git a/code/modules/clothing/under/jobs/rnd.dm b/code/modules/clothing/under/jobs/rnd.dm
deleted file mode 100644
index d257932ba3..0000000000
--- a/code/modules/clothing/under/jobs/rnd.dm
+++ /dev/null
@@ -1,89 +0,0 @@
-/obj/item/clothing/under/rank/rnd
- icon = 'icons/obj/clothing/under/rnd.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/rnd.dmi'
-
-/obj/item/clothing/under/rank/rnd/research_director
- desc = ""
- name = "research director's vest suit"
- icon_state = "director"
- item_state = "lb_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 35)
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/rnd/research_director/skirt
- name = "research director's vest suitskirt"
- desc = ""
- icon_state = "director_skirt"
- item_state = "lb_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/rnd/research_director/alt
- desc = ""
- name = "research director's tan suit"
- icon_state = "rdwhimsy"
- item_state = "rdwhimsy"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
- can_adjust = TRUE
- alt_covers_chest = TRUE
-
-/obj/item/clothing/under/rank/rnd/research_director/alt/skirt
- name = "research director's tan suitskirt"
- desc = ""
- icon_state = "rdwhimsy_skirt"
- item_state = "rdwhimsy"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/rnd/research_director/turtleneck
- desc = ""
- name = "research director's turtleneck"
- icon_state = "rdturtle"
- item_state = "p_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0)
- can_adjust = TRUE
- alt_covers_chest = TRUE
-
-/obj/item/clothing/under/rank/rnd/research_director/turtleneck/skirt
- name = "research director's turtleneck skirt"
- desc = ""
- icon_state = "rdturtle_skirt"
- item_state = "p_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/rnd/scientist
- desc = ""
- name = "scientist's jumpsuit"
- icon_state = "toxins"
- item_state = "w_suit"
- permeability_coefficient = 0.5
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
-
-/obj/item/clothing/under/rank/rnd/scientist/skirt
- name = "scientist's jumpskirt"
- desc = ""
- icon_state = "toxinswhite_skirt"
- item_state = "w_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/rnd/roboticist
- desc = ""
- name = "roboticist's jumpsuit"
- icon_state = "robotics"
- item_state = "robotics"
- resistance_flags = NONE
-
-/obj/item/clothing/under/rank/rnd/roboticist/skirt
- name = "roboticist's jumpskirt"
- desc = ""
- icon_state = "robotics_skirt"
- item_state = "robotics"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
deleted file mode 100644
index 267554e5e0..0000000000
--- a/code/modules/clothing/under/jobs/security.dm
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Contains:
- * Security
- * Detective
- * Navy uniforms
- */
-
-/*
- * Security
- */
-
-/obj/item/clothing/under/rank/security
- icon = 'icons/obj/clothing/under/security.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/security.dmi'
-
-/obj/item/clothing/under/rank/security/officer
- name = "security jumpsuit"
- desc = ""
- icon_state = "rsecurity"
- item_state = "r_suit"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30)
- strip_delay = 50
- alt_covers_chest = TRUE
- sensor_mode = SENSOR_COORDS
- random_sensor = FALSE
-
-/obj/item/clothing/under/rank/security/officer/grey
- name = "grey security jumpsuit"
- desc = ""
- icon_state = "security"
- item_state = "gy_suit"
-
-/obj/item/clothing/under/rank/security/officer/skirt
- name = "security jumpskirt"
- desc = ""
- icon_state = "secskirt"
- item_state = "r_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE //you know now that i think of it if you adjust the skirt and the sprite disappears isn't that just like flashing everyone
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/security/officer/blueshirt
- name = "blue shirt and tie"
- desc = ""
- icon_state = "blueshift"
- item_state = "blueshift"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/security/officer/formal
- name = "security officer's formal uniform"
- desc = ""
- icon_state = "officerblueclothes"
- item_state = "officerblueclothes"
- alt_covers_chest = TRUE
-
-/obj/item/clothing/under/rank/security/warden
- name = "security suit"
- desc = ""
- icon_state = "rwarden"
- item_state = "r_suit"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30)
- strip_delay = 50
- alt_covers_chest = TRUE
- sensor_mode = 3
- random_sensor = FALSE
-
-/obj/item/clothing/under/rank/security/warden/grey
- name = "grey security suit"
- desc = ""
- icon_state = "warden"
- item_state = "gy_suit"
-
-/obj/item/clothing/under/rank/security/warden/skirt
- name = "warden's suitskirt"
- desc = ""
- icon_state = "rwarden_skirt"
- item_state = "r_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/security/warden/formal
- desc = ""
- name = "warden's formal uniform"
- icon_state = "wardenblueclothes"
- item_state = "wardenblueclothes"
- alt_covers_chest = TRUE
-
-/*
- * Detective
- */
-/obj/item/clothing/under/rank/security/detective
- name = "hard-worn suit"
- desc = ""
- icon_state = "detective"
- item_state = "det"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30)
- strip_delay = 50
- alt_covers_chest = TRUE
- sensor_mode = 3
- random_sensor = FALSE
-
-/obj/item/clothing/under/rank/security/detective/skirt
- name = "detective's suitskirt"
- desc = ""
- icon_state = "detective_skirt"
- item_state = "det"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/security/detective/grey
- name = "noir suit"
- desc = ""
- icon_state = "greydet"
- item_state = "greydet"
- alt_covers_chest = TRUE
-
-/obj/item/clothing/under/rank/security/detective/grey/skirt
- name = "noir suitskirt"
- desc = ""
- icon_state = "greydet_skirt"
- item_state = "greydet"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/*
- * Head of Security
- */
-/obj/item/clothing/under/rank/security/head_of_security
- name = "head of security's jumpsuit"
- desc = ""
- icon_state = "rhos"
- item_state = "r_suit"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
- strip_delay = 60
- alt_covers_chest = TRUE
- sensor_mode = 3
- random_sensor = FALSE
-
-/obj/item/clothing/under/rank/security/head_of_security/skirt
- name = "head of security's jumpskirt"
- desc = ""
- icon_state = "rhos_skirt"
- item_state = "r_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/security/head_of_security/grey
- name = "head of security's grey jumpsuit"
- desc = ""
- icon_state = "hos"
- item_state = "gy_suit"
-
-/obj/item/clothing/under/rank/security/head_of_security/alt
- name = "head of security's turtleneck"
- desc = ""
- icon_state = "hosalt"
- item_state = "bl_suit"
-
-/obj/item/clothing/under/rank/security/head_of_security/alt/skirt
- name = "head of security's turtleneck skirt"
- desc = ""
- icon_state = "hosalt_skirt"
- item_state = "bl_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/rank/security/head_of_security/parade
- name = "head of security's parade uniform"
- desc = ""
- icon_state = "hos_parade_male"
- item_state = "r_suit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/security/head_of_security/parade/female
- name = "head of security's parade uniform"
- desc = ""
- icon_state = "hos_parade_fem"
- item_state = "r_suit"
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/security/head_of_security/formal
- desc = ""
- name = "head of security's formal uniform"
- icon_state = "hosblueclothes"
- item_state = "hosblueclothes"
- alt_covers_chest = TRUE
-
-/*
- *Spacepol
- */
-
-/obj/item/clothing/under/rank/security/officer/spacepol
- name = "police uniform"
- desc = ""
- icon_state = "spacepol"
- item_state = "spacepol"
- can_adjust = FALSE
-
-/obj/item/clothing/under/rank/prisoner
- name = "prison jumpsuit"
- desc = ""
- icon = 'icons/obj/clothing/under/security.dmi'
- icon_state = "prisoner"
- item_state = "o_suit"
- mob_overlay_icon = 'icons/mob/clothing/under/security.dmi'
- has_sensor = LOCKED_SENSORS
- sensor_mode = SENSOR_COORDS
- random_sensor = FALSE
-
-/obj/item/clothing/under/rank/prisoner/skirt
- name = "prison jumpskirt"
- desc = ""
- icon_state = "prisoner_skirt"
- item_state = "o_suit"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
deleted file mode 100644
index 3e74536188..0000000000
--- a/code/modules/clothing/under/miscellaneous.dm
+++ /dev/null
@@ -1,144 +0,0 @@
-/obj/item/clothing/under/misc
- icon = 'icons/obj/clothing/under/misc.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/misc.dmi'
-
-/obj/item/clothing/under/misc/pj
- name = "\improper PJs"
- desc = ""
- can_adjust = FALSE
- item_state = "w_suit"
-
-/obj/item/clothing/under/misc/pj/red
- icon_state = "red_pyjamas"
-
-/obj/item/clothing/under/misc/pj/blue
- icon_state = "blue_pyjamas"
-
-/obj/item/clothing/under/misc/patriotsuit
- name = "Patriotic Suit"
- desc = ""
- icon_state = "ek"
- item_state = "ek"
- can_adjust = FALSE
-
-/obj/item/clothing/under/misc/mailman
- name = "mailman's jumpsuit"
- desc = ""
- icon_state = "mailman"
- item_state = "b_suit"
-
-/obj/item/clothing/under/misc/psyche
- name = "psychedelic jumpsuit"
- desc = ""
- icon_state = "psyche"
- item_state = "p_suit"
-
-/obj/item/clothing/under/misc/vice_officer
- name = "vice officer's jumpsuit"
- desc = ""
- icon_state = "vice"
- item_state = "gy_suit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/misc/adminsuit
- name = "administrative cybernetic jumpsuit"
- icon = 'icons/obj/clothing/under/syndicate.dmi'
- icon_state = "syndicate"
- item_state = "bl_suit"
- mob_overlay_icon = 'icons/mob/clothing/under/syndicate.dmi'
- desc = ""
- gas_transfer_coefficient = 0.01
- permeability_coefficient = 0.01
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- armor = list("melee" = 100, "bullet" = 100, "laser" = 100,"energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
- cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS
- min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
- heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
- can_adjust = FALSE
- resistance_flags = FIRE_PROOF | ACID_PROOF
-
-/obj/item/clothing/under/misc/burial
- name = "burial garments"
- desc = ""
- icon_state = "burial"
- item_state = "burial"
- can_adjust = FALSE
- has_sensor = NO_SENSORS
-
-/obj/item/clothing/under/misc/overalls
- name = "laborer's overalls"
- desc = ""
- icon_state = "overalls"
- item_state = "lb_suit"
- can_adjust = FALSE
- custom_price = 20
-
-/obj/item/clothing/under/misc/assistantformal
- name = "assistant's formal uniform"
- desc = ""
- icon_state = "assistant_formal"
- item_state = "gy_suit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/plasmaman
- name = "plasma envirosuit"
- desc = ""
- icon_state = "plasmaman"
- item_state = "plasmaman"
- icon = 'icons/obj/clothing/under/plasmaman.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/plasmaman.dmi'
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95)
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- can_adjust = FALSE
- strip_delay = 80
- var/next_extinguish = 0
- var/extinguish_cooldown = 100
- var/extinguishes_left = 5
-
-
-/obj/item/clothing/under/plasmaman/examine(mob/user)
- . = ..()
- . += "There are [extinguishes_left] extinguisher charges left in this suit."
-
-/obj/item/clothing/under/plasmaman/proc/Extinguish(mob/living/carbon/human/H)
- if(!istype(H))
- return
-
- if(H.on_fire)
- if(extinguishes_left)
- if(next_extinguish > world.time)
- return
- next_extinguish = world.time + extinguish_cooldown
- extinguishes_left--
- H.visible_message("[H]'s suit automatically extinguishes [H.p_them()]!","My suit automatically extinguishes you.")
- H.ExtinguishMob()
- new /obj/effect/particle_effect/water(get_turf(H))
- return 0
-
-/obj/item/clothing/under/plasmaman/attackby(obj/item/E, mob/user, params)
- ..()
- if (istype(E, /obj/item/extinguisher_refill))
- if (extinguishes_left == 5)
- to_chat(user, "The inbuilt extinguisher is full.")
- return
- else
- extinguishes_left = 5
- to_chat(user, "I refill the suit's built-in extinguisher, using up the cartridge.")
- qdel(E)
- return
- return
-
-/obj/item/extinguisher_refill
- name = "envirosuit extinguisher cartridge"
- desc = ""
- icon_state = "plasmarefill"
- icon = 'icons/obj/device.dmi'
-
-/obj/item/clothing/under/misc/durathread
- name = "durathread jumpsuit"
- desc = ""
- icon_state = "durathread"
- item_state = "durathread"
- can_adjust = FALSE
- armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5)
diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm
deleted file mode 100644
index 8e8035307c..0000000000
--- a/code/modules/clothing/under/pants.dm
+++ /dev/null
@@ -1,69 +0,0 @@
-/obj/item/clothing/under/pants
- gender = PLURAL
- body_parts_covered = GROIN|LEGS
- fitted = NO_FEMALE_UNIFORM
- can_adjust = FALSE
- custom_price = 20
- icon = 'icons/obj/clothing/under/shorts_pants.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/shorts_pants.dmi'
-
-/obj/item/clothing/under/pants/classicjeans
- name = "classic jeans"
- desc = ""
- icon_state = "jeansclassic"
-
-/obj/item/clothing/under/pants/mustangjeans
- name = "Must Hang jeans"
- desc = ""
- icon_state = "jeansmustang"
- custom_price = 75
-
-/obj/item/clothing/under/pants/blackjeans
- name = "black jeans"
- desc = ""
- icon_state = "jeansblack"
-
-/obj/item/clothing/under/pants/youngfolksjeans
- name = "Young Folks jeans"
- desc = ""
- icon_state = "jeansyoungfolks"
-
-/obj/item/clothing/under/pants/white
- name = "white pants"
- desc = ""
- icon_state = "whitepants"
-
-/obj/item/clothing/under/pants/red
- name = "red pants"
- desc = ""
- icon_state = "redpants"
-
-/obj/item/clothing/under/pants/black
- name = "black pants"
- desc = ""
- icon_state = "blackpants"
-
-/obj/item/clothing/under/pants/tan
- name = "tan pants"
- desc = ""
- icon_state = "tanpants"
-
-/obj/item/clothing/under/pants/track
- name = "track pants"
- desc = ""
- icon_state = "trackpants"
-
-/obj/item/clothing/under/pants/jeans
- name = "jeans"
- desc = ""
- icon_state = "jeans"
-
-/obj/item/clothing/under/pants/khaki
- name = "khaki pants"
- desc = ""
- icon_state = "khaki"
-
-/obj/item/clothing/under/pants/camo
- name = "camo pants"
- desc = ""
- icon_state = "camopants"
diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm
deleted file mode 100644
index 86f3cba337..0000000000
--- a/code/modules/clothing/under/shorts.dm
+++ /dev/null
@@ -1,34 +0,0 @@
-/obj/item/clothing/under/shorts
- name = "athletic shorts"
- desc = ""
- gender = PLURAL
- body_parts_covered = GROIN
- fitted = NO_FEMALE_UNIFORM
- mutantrace_variation = MUTANTRACE_VARIATION
- can_adjust = FALSE
- icon = 'icons/obj/clothing/under/shorts_pants.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/shorts_pants.dmi'
-
-/obj/item/clothing/under/shorts/red
- name = "red athletic shorts"
- icon_state = "redshorts"
-
-/obj/item/clothing/under/shorts/green
- name = "green athletic shorts"
- icon_state = "greenshorts"
-
-/obj/item/clothing/under/shorts/blue
- name = "blue athletic shorts"
- icon_state = "blueshorts"
-
-/obj/item/clothing/under/shorts/black
- name = "black athletic shorts"
- icon_state = "blackshorts"
-
-/obj/item/clothing/under/shorts/grey
- name = "grey athletic shorts"
- icon_state = "greyshorts"
-
-/obj/item/clothing/under/shorts/purple
- name = "purple athletic shorts"
- icon_state = "purpleshorts"
diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm
deleted file mode 100644
index 68f4e8e1d1..0000000000
--- a/code/modules/clothing/under/skirt_dress.dm
+++ /dev/null
@@ -1,90 +0,0 @@
-/obj/item/clothing/under/dress
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
- body_parts_covered = CHEST|GROIN
- icon = 'icons/obj/clothing/under/dress.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/dress.dmi'
-
-/obj/item/clothing/under/dress/sundress
- name = "sundress"
- desc = ""
- icon_state = "sundress"
- item_state = "sundress"
-
-/obj/item/clothing/under/dress/blacktango
- name = "black tango dress"
- desc = ""
- icon_state = "black_tango"
- item_state = "wcoat"
-
-/obj/item/clothing/under/dress/striped
- name = "striped dress"
- desc = ""
- icon_state = "striped_dress"
- item_state = "striped_dress"
- fitted = FEMALE_UNIFORM_FULL
-
-/obj/item/clothing/under/dress/sailor
- name = "sailor dress"
- desc = ""
- icon_state = "sailor_dress"
- item_state = "sailor_dress"
-
-/obj/item/clothing/under/dress/redeveninggown
- name = "red evening gown"
- desc = ""
- icon_state = "red_evening_gown"
- item_state = "red_evening_gown"
-
-/obj/item/clothing/under/dress/skirt
- name = "black skirt"
- desc = ""
- icon_state = "blackskirt"
-
-/obj/item/clothing/under/dress/skirt/blue
- name = "blue skirt"
- desc = ""
- icon_state = "blueskirt"
- item_state = "b_suit"
- custom_price = 25
-
-/obj/item/clothing/under/dress/skirt/red
- name = "red skirt"
- desc = ""
- icon_state = "redskirt"
- item_state = "r_suit"
- custom_price = 25
-
-/obj/item/clothing/under/dress/skirt/purple
- name = "purple skirt"
- desc = ""
- icon_state = "purpleskirt"
- item_state = "p_suit"
- custom_price = 25
-
-/obj/item/clothing/under/dress/skirt/plaid
- name = "red plaid skirt"
- desc = ""
- icon_state = "plaid_red"
- item_state = "plaid_red"
- can_adjust = TRUE
- alt_covers_chest = TRUE
- custom_price = 25
-
-/obj/item/clothing/under/dress/skirt/plaid/blue
- name = "blue plaid skirt"
- desc = ""
- icon_state = "plaid_blue"
- item_state = "plaid_blue"
-
-/obj/item/clothing/under/dress/skirt/plaid/purple
- name = "purple plaid skirt"
- desc = ""
- icon_state = "plaid_purple"
- item_state = "plaid_purple"
-
-/obj/item/clothing/under/dress/skirt/plaid/green
- name = "green plaid skirt"
- desc = ""
- icon_state = "plaid_green"
- item_state = "plaid_green"
diff --git a/code/modules/clothing/under/suits.dm b/code/modules/clothing/under/suits.dm
deleted file mode 100644
index a6f3a14649..0000000000
--- a/code/modules/clothing/under/suits.dm
+++ /dev/null
@@ -1,127 +0,0 @@
-/obj/item/clothing/under/suit
- icon = 'icons/obj/clothing/under/suits.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/suits.dmi'
-
-/obj/item/clothing/under/suit/white_on_white
- name = "white suit"
- desc = ""
- icon_state = "scratch"
- item_state = "scratch"
- can_adjust = FALSE
-
-/obj/item/clothing/under/suit/white/skirt
- name = "white suitskirt"
- desc = ""
- icon_state = "white_suit_skirt"
- item_state = "scratch"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/suit/sl
- desc = ""
- name = "amish suit"
- icon_state = "sl_suit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/suit/waiter
- name = "waiter's outfit"
- desc = ""
- icon_state = "waiter"
- item_state = "waiter"
- can_adjust = FALSE
-
-/obj/item/clothing/under/suit/blacktwopiece
- name = "black two piece suit"
- desc = ""
- icon_state = "black_suit"
- item_state = "bl_suit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/suit/black
- name = "black suit"
- desc = ""
- icon_state = "blacksuit"
- item_state = "blacksuit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/suit/black/skirt
- name = "black suitskirt"
- desc = ""
- icon_state = "blacksuit_skirt"
- item_state = "bar_suit"
- alt_covers_chest = TRUE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/suit/black_really
- name = "executive suit"
- desc = ""
- icon_state = "really_black_suit"
- item_state = "really_black_suit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/suit/black_really/skirt
- name = "executive suitskirt"
- desc = ""
- icon_state = "really_black_suit_skirt"
- item_state = "really_black_suit_skirt"
- body_parts_covered = CHEST|GROIN|ARMS
- can_adjust = FALSE
- fitted = FEMALE_UNIFORM_TOP
-
-/obj/item/clothing/under/suit/black/female
- name = "executive suit"
- desc = ""
- icon_state = "black_suit_fem"
- item_state = "black_suit_fem"
-
-/obj/item/clothing/under/suit/green
- name = "green suit"
- desc = ""
- icon = 'icons/obj/clothing/under/captain.dmi'
- icon_state = "green_suit"
- item_state = "dg_suit"
- mob_overlay_icon = 'icons/mob/clothing/under/captain.dmi'
- can_adjust = FALSE
-
-/obj/item/clothing/under/suit/red
- name = "red suit"
- desc = ""
- icon_state = "red_suit"
- item_state = "r_suit"
-
-/obj/item/clothing/under/suit/charcoal
- name = "charcoal suit"
- desc = ""
- icon_state = "charcoal_suit"
- item_state = "charcoal_suit"
-
-/obj/item/clothing/under/suit/navy
- name = "navy suit"
- desc = ""
- icon_state = "navy_suit"
- item_state = "navy_suit"
-
-/obj/item/clothing/under/suit/burgundy
- name = "burgundy suit"
- desc = ""
- icon_state = "burgundy_suit"
- item_state = "burgundy_suit"
-
-/obj/item/clothing/under/suit/checkered
- name = "checkered suit"
- desc = ""
- icon_state = "checkered_suit"
- item_state = "checkered_suit"
-
-/obj/item/clothing/under/suit/tan
- name = "tan suit"
- desc = ""
- icon_state = "tan_suit"
- item_state = "tan_suit"
-
-/obj/item/clothing/under/suit/white
- name = "white suit"
- desc = ""
- icon_state = "white_suit"
- item_state = "white_suit"
diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm
deleted file mode 100644
index c164eff30d..0000000000
--- a/code/modules/clothing/under/syndicate.dm
+++ /dev/null
@@ -1,75 +0,0 @@
-/obj/item/clothing/under/syndicate
- name = "tactical turtleneck"
- desc = ""
- icon_state = "syndicate"
- item_state = "bl_suit"
- has_sensor = NO_SENSORS
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
- alt_covers_chest = TRUE
- icon = 'icons/obj/clothing/under/syndicate.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/syndicate.dmi'
-
-/obj/item/clothing/under/syndicate/skirt
- name = "tactical skirtleneck"
- desc = ""
- icon_state = "syndicate_skirt"
- item_state = "bl_suit"
- has_sensor = NO_SENSORS
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
- alt_covers_chest = TRUE
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/syndicate/tacticool
- name = "tacticool turtleneck"
- desc = ""
- icon_state = "tactifool"
- item_state = "bl_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
-
-/obj/item/clothing/under/syndicate/tacticool/skirt
- name = "tacticool skirtleneck"
- desc = ""
- icon_state = "tactifool_skirt"
- item_state = "bl_suit"
- armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40)
- fitted = FEMALE_UNIFORM_TOP
- can_adjust = FALSE
-
-/obj/item/clothing/under/syndicate/sniper
- name = "Tactical turtleneck suit"
- desc = ""
- icon = 'icons/obj/clothing/under/suits.dmi'
- icon_state = "really_black_suit"
- item_state = "bl_suit"
- mob_overlay_icon = 'icons/mob/clothing/under/suits.dmi'
- can_adjust = FALSE
-
-/obj/item/clothing/under/syndicate/camo
- name = "camouflage fatigues"
- desc = ""
- icon_state = "camogreen"
- item_state = "g_suit"
- can_adjust = FALSE
-
-/obj/item/clothing/under/syndicate/soviet
- name = "Ratnik 5 tracksuit"
- desc = ""
- icon_state = "trackpants"
- can_adjust = FALSE
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- resistance_flags = NONE
-
-/obj/item/clothing/under/syndicate/combat
- name = "combat uniform"
- desc = ""
- icon_state = "syndicate_combat"
- can_adjust = FALSE
-
-/obj/item/clothing/under/syndicate/rus_army
- name = "advanced military tracksuit"
- desc = ""
- icon_state = "rus_under"
- can_adjust = FALSE
- armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
- resistance_flags = NONE
diff --git a/code/modules/clothing/under/trek.dm b/code/modules/clothing/under/trek.dm
deleted file mode 100644
index f70263c3ec..0000000000
--- a/code/modules/clothing/under/trek.dm
+++ /dev/null
@@ -1,64 +0,0 @@
-//Just some alt-uniforms themed around Star Trek - Pls don't sue, Mr Roddenberry ;_;
-
-
-/obj/item/clothing/under/trek
- can_adjust = FALSE
- icon = 'icons/obj/clothing/under/trek.dmi'
- mob_overlay_icon = 'icons/mob/clothing/under/trek.dmi'
-
-
-//TOS
-/obj/item/clothing/under/trek/command
- name = "command uniform"
- desc = ""
- icon_state = "trek_command"
- item_state = "y_suit"
-
-/obj/item/clothing/under/trek/engsec
- name = "engsec uniform"
- desc = ""
- icon_state = "trek_engsec"
- item_state = "r_suit"
- armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) //more sec than eng, but w/e.
- strip_delay = 50
-
-/obj/item/clothing/under/trek/medsci
- name = "medsci uniform"
- desc = ""
- icon_state = "trek_medsci"
- item_state = "b_suit"
-
-
-//TNG
-/obj/item/clothing/under/trek/command/next
- icon_state = "trek_next_command"
- item_state = "r_suit"
-
-/obj/item/clothing/under/trek/engsec/next
- icon_state = "trek_next_engsec"
- item_state = "y_suit"
-
-/obj/item/clothing/under/trek/medsci/next
- icon_state = "trek_next_medsci"
-
-
-//ENT
-/obj/item/clothing/under/trek/command/ent
- icon_state = "trek_ent_command"
- item_state = "bl_suit"
-
-/obj/item/clothing/under/trek/engsec/ent
- icon_state = "trek_ent_engsec"
- item_state = "bl_suit"
-
-/obj/item/clothing/under/trek/medsci/ent
- icon_state = "trek_ent_medsci"
- item_state = "bl_suit"
-
-
-//Q
-/obj/item/clothing/under/trek/Q
- name = "french marshall's uniform"
- desc = ""
- icon_state = "trek_Q"
- item_state = "r_suit"
diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm
index a2aacf9220..3e24c94977 100644
--- a/code/modules/events/spacevine.dm
+++ b/code/modules/events/spacevine.dm
@@ -255,21 +255,6 @@
else
. = expected_damage
-/datum/spacevine_mutation/flowering
- name = "flowering"
- hue = "#0A480D"
- quality = NEGATIVE
- severity = 10
-
-/datum/spacevine_mutation/flowering/on_grow(obj/structure/spacevine/holder)
- if(holder.energy == 2 && prob(severity) && !locate(/obj/structure/alien/resin/flower_bud_enemy) in range(5,holder))
- new/obj/structure/alien/resin/flower_bud_enemy(get_turf(holder))
-
-/datum/spacevine_mutation/flowering/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
- if(prob(25))
- holder.entangle(crosser)
-
-
// SPACE VINES (Note that this code is very similar to Biomass code)
/obj/structure/spacevine
name = "weepvine"
@@ -538,7 +523,7 @@
/obj/structure/spacevine/proc/spread()
var/direction = pick(GLOB.cardinals)
var/turf/stepturf = get_step(src,direction)
- if (!isspaceturf(stepturf) && stepturf.Enter(src))
+ if (stepturf.Enter(src))
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_spread(src, stepturf)
stepturf = get_step(src,direction) //in case turf changes, to make sure no runtimes happen
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 4bdab0a27e..751c1e8d61 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -10,7 +10,6 @@ GLOBAL_LIST_INIT(hallucination_list, list(
/datum/hallucination/fake_alert = 12,
/datum/hallucination/weird_sounds = 8,
/datum/hallucination/stationmessage = 7,
- /datum/hallucination/stray_bullet = 7,
/datum/hallucination/items_other = 7,
/datum/hallucination/husks = 7,
/datum/hallucination/items = 4,
@@ -1036,25 +1035,3 @@ GLOBAL_LIST_INIT(hallucination_list, list(
target.client.images -= target.halbody
QDEL_NULL(target.halbody)
qdel(src)
-
-//hallucination projectile code in code/modules/projectiles/projectile/special.dm
-/datum/hallucination/stray_bullet
-
-/datum/hallucination/stray_bullet/New(mob/living/carbon/C, forced = TRUE)
- set waitfor = FALSE
- ..()
- var/list/turf/startlocs = list()
- for(var/turf/open/T in view(world.view+1,target)-view(world.view,target))
- startlocs += T
- if(!startlocs.len)
- qdel(src)
- return
- var/turf/start = pick(startlocs)
- var/proj_type = pick(subtypesof(/obj/projectile/hallucination))
- feedback_details += "Type: [proj_type]"
- var/obj/projectile/hallucination/H = new proj_type(start)
- target.playsound_local(start, H.hal_fire_sound, 60, 1)
- H.hal_target = target
- H.preparePixelProjectile(target, start)
- H.fire()
- qdel(src)
diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm
deleted file mode 100644
index e09a87969f..0000000000
--- a/code/modules/food_and_drinks/drinks/drinks.dm
+++ /dev/null
@@ -1,560 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-/// Drinks.
-////////////////////////////////////////////////////////////////////////////////
-/obj/item/reagent_containers/food/drinks
- name = "drink"
- desc = ""
- icon = 'icons/obj/drinks.dmi'
- icon_state = null
- lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
- reagent_flags = OPENCONTAINER
- var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it.
- possible_transfer_amounts = list(5,10,15,20,25,30,50)
- volume = 50
- resistance_flags = NONE
- var/isGlass = TRUE //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it
-
-/obj/item/reagent_containers/food/drinks/on_reagent_change(changetype)
- . = ..()
- gulp_size = max(round(reagents.total_volume / 5), 5)
-
-/obj/item/reagent_containers/food/drinks/attack(mob/living/M, mob/user, def_zone)
-
- if(!reagents || !reagents.total_volume)
- to_chat(user, "[src] is empty!")
- return 0
-
- if(!canconsume(M, user))
- return 0
-
- if (!is_drainable())
- to_chat(user, "[src]'s lid hasn't been opened!")
- return 0
-
- if(M == user)
- user.visible_message("[user] swallows a gulp of [src].", \
- "I swallow a gulp of [src].")
- if(HAS_TRAIT(M, TRAIT_VORACIOUS))
- M.changeNext_move(CLICK_CD_MELEE * 0.5) //chug! chug! chug!
-
- else
- M.visible_message("[user] attempts to feed [M] the contents of [src].", \
- "[user] attempts to feed you the contents of [src].")
- if(!do_mob(user, M))
- return
- if(!reagents || !reagents.total_volume)
- return // The drink might be empty after the delay, such as by spam-feeding
- M.visible_message("[user] fed [M] the contents of [src].", \
- "[user] fed you the contents of [src].")
- log_combat(user, M, "fed", reagents.log_list())
-
- var/fraction = min(gulp_size/reagents.total_volume, 1)
- checkLiked(fraction, M)
- reagents.reaction(M, INGEST, fraction)
- reagents.trans_to(M, gulp_size, transfered_by = user)
- playsound(M.loc,'sound/blank.ogg', rand(10,50), TRUE)
- return 1
-
-/obj/item/reagent_containers/food/drinks/afterattack(obj/target, mob/user , proximity)
- . = ..()
- if(!proximity)
- return
-
- if(target.is_refillable() && is_drainable()) //Something like a glass. Player probably wants to transfer TO it.
- if(!reagents.total_volume)
- to_chat(user, "[src] is empty.")
- return
-
- if(target.reagents.holder_full())
- to_chat(user, "[target] is full.")
- return
-
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this, transfered_by = user)
- to_chat(user, "I transfer [trans] units of the solution to [target].")
-
- else if(target.is_drainable()) //A dispenser. Transfer FROM it TO us.
- if (!is_refillable())
- to_chat(user, "[src]'s tab isn't open!")
- return
-
- if(!target.reagents.total_volume)
- to_chat(user, "[target] is empty.")
- return
-
- if(reagents.holder_full())
- to_chat(user, "[src] is full.")
- return
-
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transfered_by = user)
- to_chat(user, "I fill [src] with [trans] units of the contents of [target].")
-
-/obj/item/reagent_containers/food/drinks/attackby(obj/item/I, mob/user, params)
- var/hotness = I.get_temperature()
- if(hotness && reagents)
- reagents.expose_temperature(hotness)
- to_chat(user, "I heat [name] with [I]!")
- ..()
-
-/obj/item/reagent_containers/food/drinks/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
- . = ..()
- if(!.) //if the bottle wasn't caught
- smash(hit_atom, throwingdatum?.thrower, TRUE)
-
-/obj/item/reagent_containers/food/drinks/proc/smash(atom/target, mob/thrower, ranged = FALSE)
- if(!isGlass)
- return
- if(QDELING(src) || !target) //Invalid loc
- return
- if(bartender_check(target) && ranged)
- return
- var/obj/item/broken_bottle/B = new (loc)
- B.icon_state = icon_state
- var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
- I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
- I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
- B.icon = I
- B.name = "broken [name]"
- if(prob(33))
- var/obj/item/shard/S = new(drop_location())
- target.Bumped(S)
- playsound(src, "shatter", 70, TRUE)
- transfer_fingerprints_to(B)
- qdel(src)
- target.Bumped(B)
-
-/obj/item/reagent_containers/food/drinks/bullet_act(obj/projectile/P)
- . = ..()
- if(!(P.nodamage) && P.damage_type == BRUTE && !QDELETED(src))
- var/atom/T = get_turf(src)
- smash(T)
- return
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-/// Drinks. END
-////////////////////////////////////////////////////////////////////////////////
-
-
-/obj/item/reagent_containers/food/drinks/trophy
- name = "pewter cup"
- desc = ""
- icon_state = "pewter_cup"
- w_class = WEIGHT_CLASS_TINY
- force = 1
- throwforce = 1
- amount_per_transfer_from_this = 5
- custom_materials = list(/datum/material/iron=100)
- possible_transfer_amounts = list()
- volume = 5
- flags_1 = CONDUCT_1
- spillable = TRUE
- resistance_flags = FIRE_PROOF
- isGlass = FALSE
-
-/obj/item/reagent_containers/food/drinks/trophy/gold_cup
- name = "gold cup"
- desc = ""
- icon_state = "golden_cup"
- w_class = WEIGHT_CLASS_BULKY
- force = 14
- throwforce = 10
- amount_per_transfer_from_this = 20
- custom_materials = list(/datum/material/gold=1000)
- volume = 150
-
-/obj/item/reagent_containers/food/drinks/trophy/silver_cup
- name = "silver cup"
- desc = ""
- icon_state = "silver_cup"
- w_class = WEIGHT_CLASS_NORMAL
- force = 10
- throwforce = 8
- amount_per_transfer_from_this = 15
- custom_materials = list(/datum/material/silver=800)
- volume = 100
-
-
-/obj/item/reagent_containers/food/drinks/trophy/bronze_cup
- name = "bronze cup"
- desc = ""
- icon_state = "bronze_cup"
- w_class = WEIGHT_CLASS_SMALL
- force = 5
- throwforce = 4
- amount_per_transfer_from_this = 10
- custom_materials = list(/datum/material/iron=400)
- volume = 25
-
-///////////////////////////////////////////////Drinks
-//Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly
-// rather then having to add it to something else first. They should only contain liquids. They have a default container size of 50.
-// Formatting is the same as food.
-
-/obj/item/reagent_containers/food/drinks/coffee
- name = "robust coffee"
- desc = ""
- icon_state = "coffee"
- list_reagents = list(/datum/reagent/consumable/coffee = 30)
- spillable = TRUE
- resistance_flags = FREEZE_PROOF
- isGlass = FALSE
- foodtype = BREAKFAST
-
-/obj/item/reagent_containers/food/drinks/ice
- name = "ice cup"
- desc = ""
- custom_price = 5
- icon_state = "coffee"
- list_reagents = list(/datum/reagent/consumable/ice = 30)
- spillable = TRUE
- isGlass = FALSE
-
-/obj/item/reagent_containers/food/drinks/ice/prison
- name = "dirty ice cup"
- desc = ""
- list_reagents = list(/datum/reagent/consumable/ice = 25, /datum/reagent/liquidgibs = 5)
-
-/obj/item/reagent_containers/food/drinks/mug/ // parent type is literally just so empty mug sprites are a thing
- name = "mug"
- desc = ""
- icon_state = "tea"
- item_state = "coffee"
- spillable = TRUE
-
-/obj/item/reagent_containers/food/drinks/mug/on_reagent_change(changetype)
- if(reagents.total_volume)
- icon_state = "tea"
- else
- icon_state = "tea_empty"
-
-/obj/item/reagent_containers/food/drinks/mug/tea
- name = "Duke Purple tea"
- desc = ""
- list_reagents = list(/datum/reagent/consumable/tea = 30)
-
-/obj/item/reagent_containers/food/drinks/mug/coco
- name = "Dutch hot coco"
- desc = ""
- list_reagents = list(/datum/reagent/consumable/hot_coco = 15, /datum/reagent/consumable/sugar = 5)
- foodtype = SUGAR
- resistance_flags = FREEZE_PROOF
- custom_price = 42
-
-
-/obj/item/reagent_containers/food/drinks/dry_ramen
- name = "cup ramen"
- desc = ""
- icon_state = "ramen"
- list_reagents = list(/datum/reagent/consumable/dry_ramen = 15, /datum/reagent/consumable/sodiumchloride = 3)
- foodtype = GRAIN
- isGlass = FALSE
- custom_price = 38
-
-/obj/item/reagent_containers/food/drinks/beer
- name = "space beer"
- desc = ""
- icon_state = "beer"
- list_reagents = list(/datum/reagent/consumable/ethanol/beer = 30)
- foodtype = GRAIN | ALCOHOL
-
-/obj/item/reagent_containers/food/drinks/beer/light
- name = "Carp Lite"
- desc = ""
- list_reagents = list(/datum/reagent/consumable/ethanol/beer/light = 30)
-
-/obj/item/reagent_containers/food/drinks/ale
- name = "Magm-Ale"
- desc = ""
- icon_state = "alebottle"
- item_state = "beer"
- list_reagents = list(/datum/reagent/consumable/ethanol/ale = 30)
- foodtype = GRAIN | ALCOHOL
-
-/obj/item/reagent_containers/food/drinks/sillycup
- name = "paper cup"
- desc = ""
- icon_state = "water_cup_e"
- possible_transfer_amounts = list()
- volume = 10
- spillable = TRUE
- isGlass = FALSE
-
-/obj/item/reagent_containers/food/drinks/sillycup/on_reagent_change(changetype)
- if(reagents.total_volume)
- icon_state = "water_cup"
- else
- icon_state = "water_cup_e"
-
-/obj/item/reagent_containers/food/drinks/sillycup/smallcarton
- name = "small carton"
- desc = ""
- icon_state = "juicebox"
- volume = 15 //I figure if you have to craft these it should at least be slightly better than something you can get for free from a watercooler
-
-/obj/item/reagent_containers/food/drinks/sillycup/smallcarton/smash(atom/target, mob/thrower, ranged = FALSE)
- if(bartender_check(target) && ranged)
- return
- var/obj/item/broken_bottle/B = new (loc)
- B.icon_state = icon_state
- var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
- I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
- I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
- B.icon = I
- B.name = "broken [name]"
- B.force = 0
- B.throwforce = 0
- B.desc = ""
- transfer_fingerprints_to(B)
- qdel(src)
- target.Bumped(B)
-
-/obj/item/reagent_containers/food/drinks/sillycup/smallcarton/on_reagent_change(changetype)
- if (reagents.reagent_list.len)
- switch(reagents.get_master_reagent_id())
- if(/datum/reagent/consumable/orangejuice)
- icon_state = "orangebox"
- name = "orange juice box"
- desc = ""
- foodtype = FRUIT | BREAKFAST
- if(/datum/reagent/consumable/milk)
- icon_state = "milkbox"
- name = "carton of milk"
- desc = ""
- foodtype = DAIRY | BREAKFAST
- if(/datum/reagent/consumable/applejuice)
- icon_state = "juicebox"
- name = "apple juice box"
- desc = ""
- foodtype = FRUIT
- if(/datum/reagent/consumable/grapejuice)
- icon_state = "grapebox"
- name = "grape juice box"
- desc = ""
- foodtype = FRUIT
- if(/datum/reagent/consumable/milk/chocolate_milk)
- icon_state = "chocolatebox"
- name = "carton of chocolate milk"
- desc = ""
- foodtype = SUGAR
- if(/datum/reagent/consumable/ethanol/eggnog)
- icon_state = "nog2"
- name = "carton of eggnog"
- desc = ""
- foodtype = MEAT
- else
- icon_state = "juicebox"
- name = "small carton"
- desc = ""
-
-
-
-//////////////////////////drinkingglass and shaker//
-//Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink
-// itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass
-// icon states.
-
-/obj/item/reagent_containers/food/drinks/shaker
- name = "shaker"
- desc = ""
- icon_state = "shaker"
- custom_materials = list(/datum/material/iron=1500)
- amount_per_transfer_from_this = 10
- volume = 100
- isGlass = FALSE
-
-/obj/item/reagent_containers/food/drinks/flask
- name = "flask"
- desc = ""
- custom_price = 30
- icon_state = "flask"
- custom_materials = list(/datum/material/iron=250)
- volume = 60
- isGlass = FALSE
-
-/obj/item/reagent_containers/food/drinks/flask/gold
- name = "captain's flask"
- desc = ""
- icon_state = "flask_gold"
- custom_materials = list(/datum/material/gold=500)
-
-/obj/item/reagent_containers/food/drinks/flask/det
- name = "detective's flask"
- desc = ""
- icon_state = "detflask"
- list_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 30)
-
-/obj/item/reagent_containers/food/drinks/britcup
- name = "cup"
- desc = ""
- icon_state = "britcup"
- volume = 30
- spillable = TRUE
-
-//////////////////////////soda_cans//
-//These are in their own group to be used as IED's in /obj/item/grenade/ghettobomb.dm
-
-/obj/item/reagent_containers/food/drinks/soda_cans
- name = "soda can"
- lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
- reagent_flags = NONE
- spillable = FALSE
- isGlass = FALSE
- custom_price = 10
-
-/obj/item/reagent_containers/food/drinks/soda_cans/suicide_act(mob/living/carbon/human/H)
- if(!reagents.total_volume)
- H.visible_message("[H] is trying to take a big sip from [src]... The can is empty!")
- return SHAME
- if(!is_drainable())
- open_soda()
- sleep(10)
- H.visible_message("[H] takes a big sip from [src]! It looks like [H.p_theyre()] trying to commit suicide!")
- playsound(H,'sound/blank.ogg', 80, TRUE)
- reagents.trans_to(H, src.reagents.total_volume, transfered_by = H) //a big sip
- sleep(5)
- H.say(pick("Now, Outbomb Cuban Pete, THAT was a game.", "All these new fangled arcade games are too slow. I prefer the classics.", "They don't make 'em like Orion Trail anymore.", "You know what they say. Worst day of spess carp fishing is better than the best day at work.", "They don't make 'em like good old fashioned singularity engines anymore."))
- if(H.age >= 30)
- H.Stun(50)
- sleep(50)
- playsound(H,'sound/blank.ogg', 80, TRUE)
- H.say(pick("Another day, another dollar.", "I wonder if I should hold?", "Diversifying is for young'ns.", "Yeap, times were good back then."))
- return MANUAL_SUICIDE_NONLETHAL
- sleep(20) //dramatic pause
- return TOXLOSS
-
-/obj/item/reagent_containers/food/drinks/soda_cans/attack(mob/M, mob/user)
- if(istype(M, /mob/living/carbon) && !reagents.total_volume && user.used_intent.type == INTENT_HARM && user.zone_selected == BODY_ZONE_HEAD)
- if(M == user)
- user.visible_message("[user] crushes the can of [src] on [user.p_their()] forehead!", "I crush the can of [src] on your forehead.")
- else
- user.visible_message("[user] crushes the can of [src] on [M]'s forehead!", "I crush the can of [src] on [M]'s forehead.")
- playsound(M,'sound/blank.ogg', rand(10,50), TRUE)
- var/obj/item/trash/can/crushed_can = new /obj/item/trash/can(M.loc)
- crushed_can.icon_state = icon_state
- qdel(src)
- return TRUE
- . = ..()
-
-/obj/item/reagent_containers/food/drinks/soda_cans/bullet_act(obj/projectile/P)
- . = ..()
- if(!(P.nodamage) && P.damage_type == BRUTE && !QDELETED(src))
- var/obj/item/trash/can/crushed_can = new /obj/item/trash/can(src.loc)
- crushed_can.icon_state = icon_state
- var/atom/throw_target = get_edge_target_turf(crushed_can, pick(GLOB.alldirs))
- crushed_can.throw_at(throw_target, rand(1,2), 7)
- qdel(src)
- return
-
-/obj/item/reagent_containers/food/drinks/soda_cans/proc/open_soda(mob/user)
- to_chat(user, "You pull back the tab of \the [src] with a satisfying pop.") //Ahhhhhhhh
- ENABLE_BITFIELD(reagents.flags, OPENCONTAINER)
- playsound(src, "can_open", 50, TRUE)
- spillable = TRUE
-
-/obj/item/reagent_containers/food/drinks/soda_cans/attack_self(mob/user)
- if(!is_drainable())
- open_soda(user)
- return ..()
-
-/obj/item/reagent_containers/food/drinks/soda_cans/cola
- name = "Space Cola"
- desc = ""
- icon_state = "cola"
- list_reagents = list(/datum/reagent/consumable/space_cola = 30)
- foodtype = SUGAR
-
-/obj/item/reagent_containers/food/drinks/soda_cans/tonic
- name = "T-Borg's tonic water"
- desc = ""
- icon_state = "tonic"
- list_reagents = list(/datum/reagent/consumable/tonic = 50)
- foodtype = ALCOHOL
-
-/obj/item/reagent_containers/food/drinks/soda_cans/sodawater
- name = "soda water"
- desc = ""
- icon_state = "sodawater"
- list_reagents = list(/datum/reagent/consumable/sodawater = 50)
-
-/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime
- name = "orange soda"
- desc = ""
- icon_state = "lemon-lime"
- list_reagents = list(/datum/reagent/consumable/lemon_lime = 30)
- foodtype = FRUIT
-
-/obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime/Initialize()
- . = ..()
- name = "lemon-lime soda"
-
-/obj/item/reagent_containers/food/drinks/soda_cans/space_up
- name = "Space-Up!"
- desc = ""
- icon_state = "space-up"
- list_reagents = list(/datum/reagent/consumable/space_up = 30)
- foodtype = SUGAR | JUNKFOOD
-
-/obj/item/reagent_containers/food/drinks/soda_cans/starkist
- name = "Star-kist"
- desc = ""
- icon_state = "starkist"
- list_reagents = list(/datum/reagent/consumable/space_cola = 15, /datum/reagent/consumable/orangejuice = 15)
- foodtype = SUGAR | FRUIT | JUNKFOOD
-
-/obj/item/reagent_containers/food/drinks/soda_cans/space_mountain_wind
- name = "Space Mountain Wind"
- desc = ""
- icon_state = "space_mountain_wind"
- list_reagents = list(/datum/reagent/consumable/spacemountainwind = 30)
- foodtype = SUGAR | JUNKFOOD
-
-/obj/item/reagent_containers/food/drinks/soda_cans/thirteenloko
- name = "Thirteen Loko"
- desc = ""
- icon_state = "thirteen_loko"
- list_reagents = list(/datum/reagent/consumable/ethanol/thirteenloko = 30)
- foodtype = SUGAR | JUNKFOOD
-
-/obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb
- name = "Dr. Gibb"
- desc = ""
- icon_state = "dr_gibb"
- list_reagents = list(/datum/reagent/consumable/dr_gibb = 30)
- foodtype = SUGAR | JUNKFOOD
-
-/obj/item/reagent_containers/food/drinks/soda_cans/pwr_game
- name = "Pwr Game"
- desc = ""
- icon_state = "purple_can"
- list_reagents = list(/datum/reagent/consumable/pwr_game = 30)
-
-/obj/item/reagent_containers/food/drinks/soda_cans/shamblers
- name = "Shambler's juice"
- desc = ""
- icon_state = "shamblers"
- list_reagents = list(/datum/reagent/consumable/shamblers = 30)
- foodtype = SUGAR | JUNKFOOD
-
-/obj/item/reagent_containers/food/drinks/soda_cans/grey_bull
- name = "Grey Bull"
- desc = ""
- icon_state = "energy_drink"
- list_reagents = list(/datum/reagent/consumable/grey_bull = 20)
- foodtype = SUGAR | JUNKFOOD
-
-/obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy
- name = "Monkey Energy"
- desc = ""
- icon_state = "monkey_energy"
- item_state = "monkey_energy"
- list_reagents = list(/datum/reagent/consumable/monkey_energy = 50)
- foodtype = SUGAR | JUNKFOOD
-
-/obj/item/reagent_containers/food/drinks/soda_cans/air
- name = "canned air"
- desc = ""
- icon_state = "air"
- list_reagents = list(/datum/reagent/nitrogen = 24, /datum/reagent/oxygen = 6)
diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm
deleted file mode 100644
index 14ea23e03d..0000000000
--- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm
+++ /dev/null
@@ -1,401 +0,0 @@
-
-
-///////////////////////////////////////////////Alchohol bottles! -Agouri //////////////////////////
-//Functionally identical to regular drinks. The only difference is that the default bottle size is 100. - Darem
-//Bottles now knockdown and break when smashed on people's heads. - Giacom
-
-/obj/item/reagent_containers/food/drinks/bottle
- amount_per_transfer_from_this = 10
- volume = 100
- force = 15 //Smashing bottles over someone's head hurts.
- throwforce = 15
- item_state = "broken_beer" //Generic held-item sprite until unique ones are made.
- lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
- var/const/duration = 13 //Directly relates to the 'knockdown' duration. Lowered by armor (i.e. helmets)
- isGlass = TRUE
- foodtype = ALCOHOL
-
-
-/obj/item/reagent_containers/food/drinks/bottle/smash(mob/living/target, mob/thrower, ranged = FALSE)
- //Creates a shattering noise and replaces the bottle with a broken_bottle
- if(bartender_check(target) && ranged)
- return
- var/obj/item/broken_bottle/B = new (loc)
- if(!ranged && thrower)
- thrower.put_in_hands(B)
- B.icon_state = icon_state
-
- var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
- I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
- I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
- B.icon = I
-
- if(isGlass)
- if(prob(33))
- var/obj/item/shard/S = new(drop_location())
- target.Bumped(S)
- playsound(src, "shatter", 70, TRUE)
- else
- B.force = 0
- B.throwforce = 0
- B.desc = ""
- B.name = "broken [name]"
- transfer_fingerprints_to(B)
-
- qdel(src)
- target.Bumped(B)
-
-/obj/item/reagent_containers/food/drinks/bottle/attack(mob/living/target, mob/living/user)
-
- if(!target)
- return
-
- if(user.used_intent.type != INTENT_HARM || !isGlass)
- return ..()
-
- if(HAS_TRAIT(user, TRAIT_PACIFISM))
- to_chat(user, "I don't want to harm [target]!")
- return
-
- var/obj/item/bodypart/affecting = user.zone_selected //Find what the player is aiming at
-
- var/armor_block = 0 //Get the target's armor values for normal attack damage.
- var/armor_duration = 0 //The more force the bottle has, the longer the duration.
-
- //Calculating duration and calculating damage.
- if(ishuman(target))
-
- var/mob/living/carbon/human/H = target
- var/headarmor = 0 // Target's head armor
- armor_block = H.run_armor_check(affecting, "melee","","",armor_penetration) // For normal attack damage
-
- //If they have a hat/helmet and the user is targeting their head.
- if(istype(H.head, /obj/item/clothing/head) && affecting == BODY_ZONE_HEAD)
- headarmor = H.head.armor.melee
- else
- headarmor = 0
-
- //Calculate the knockdown duration for the target.
- armor_duration = (duration - headarmor) + force
-
- else
- //Only humans can have armor, right?
- armor_block = target.run_armor_check(affecting, "melee")
- if(affecting == BODY_ZONE_HEAD)
- armor_duration = duration + force
-
- //Apply the damage!
- armor_block = min(90,armor_block)
- target.apply_damage(force, BRUTE, affecting, armor_block)
-
- // You are going to knock someone down for longer if they are not wearing a helmet.
- var/head_attack_message = ""
- if(affecting == BODY_ZONE_HEAD && istype(target, /mob/living/carbon/))
- head_attack_message = " on the head"
- if(armor_duration)
- target.apply_effect(min(armor_duration, 200) , EFFECT_KNOCKDOWN)
-
- //Display an attack message.
- if(target != user)
- target.visible_message("[user] hits [target][head_attack_message] with a bottle of [src.name]!", \
- "[user] hits you [head_attack_message] with a bottle of [src.name]!")
- else
- target.visible_message("[target] hits [target.p_them()]self with a bottle of [src.name][head_attack_message]!", \
- "I hit myself with a bottle of [src.name][head_attack_message]!")
-
- //Attack logs
- log_combat(user, target, "attacked", src)
-
- //The reagents in the bottle splash all over the target, thanks for the idea Nodrak
- SplashReagents(target)
-
- //Finally, smash the bottle. This kills (del) the bottle.
- smash(target, user)
-
- return
-
-//Keeping this here for now, I'll ask if I should keep it here.
-/obj/item/broken_bottle
- name = "broken bottle"
- desc = ""
- icon = 'icons/obj/drinks.dmi'
- icon_state = "broken_bottle"
- force = 9
- throwforce = 5
- throw_speed = 1
- throw_range = 5
- w_class = WEIGHT_CLASS_TINY
- item_state = "beer"
- hitsound = 'sound/blank.ogg'
- attack_verb = list("stabbed", "slashed", "attacked")
- sharpness = IS_SHARP
- var/static/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
-
-/obj/item/broken_bottle/Initialize()
- . = ..()
- AddComponent(/datum/component/butchering, 200, 55)
-
-/obj/item/reagent_containers/food/drinks/bottle/whiskey
- name = "Uncle Git's special reserve"
- desc = ""
- icon_state = "whiskeybottle"
- list_reagents = list(/datum/reagent/consumable/ethanol/whiskey = 100)
-
-/obj/item/reagent_containers/food/drinks/bottle/vodka
- name = "Tunguska triple distilled"
- desc = ""
- icon_state = "vodkabottle"
- list_reagents = list(/datum/reagent/consumable/ethanol/vodka = 100)
-
-/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka
- name = "Badminka vodka"
- desc = ""
- icon_state = "badminka"
- list_reagents = list(/datum/reagent/consumable/ethanol/vodka = 100)
-
-/obj/item/reagent_containers/food/drinks/bottle/bottleofnothing
- name = "bottle of nothing"
- desc = ""
- icon_state = "bottleofnothing"
- list_reagents = list(/datum/reagent/consumable/nothing = 100)
- foodtype = NONE
-
-/obj/item/reagent_containers/food/drinks/bottle/rum
- name = "Captain Pete's Cuban spiced rum"
- desc = ""
- icon_state = "rumbottle"
- list_reagents = list(/datum/reagent/consumable/ethanol/rum = 100)
-
-/obj/item/reagent_containers/food/drinks/bottle/holywater
- name = "flask of holy water"
- desc = ""
- icon_state = "holyflask"
- list_reagents = list(/datum/reagent/water/holywater = 100)
- foodtype = NONE
-
-/obj/item/reagent_containers/food/drinks/bottle/holywater/hell
- desc = ""
- list_reagents = list(/datum/reagent/hellwater = 100)
-
-/obj/item/reagent_containers/food/drinks/bottle/wine
- name = "Doublebeard's bearded special wine"
- desc = ""
- icon_state = "winebottle"
- list_reagents = list(/datum/reagent/consumable/ethanol/wine = 100)
- foodtype = FRUIT | ALCOHOL
-
-/obj/item/reagent_containers/food/drinks/bottle/absinthe
- name = "extra-strong absinthe"
- desc = ""
- icon_state = "absinthebottle"
- list_reagents = list(/datum/reagent/consumable/ethanol/absinthe = 100)
-
-/obj/item/reagent_containers/food/drinks/bottle/absinthe/Initialize()
- . = ..()
- redact()
-
-/obj/item/reagent_containers/food/drinks/bottle/absinthe/proc/redact()
- // There was a large fight in the coderbus about a player reference
- // in absinthe. Ergo, this is why the name generation is now so
- // complicated. Judge us kindly.
- var/shortname = pickweight(
- list("T&T" = 1, "A&A" = 1, "Generic" = 1))
- var/fullname
- switch(shortname)
- if("T&T")
- fullname = "Teal and Tealer"
- if("A&A")
- fullname = "Ash and Asher"
- if("Generic")
- fullname = "Nanotrasen Cheap Imitations"
- var/removals = list("\[REDACTED\]", "\[EXPLETIVE DELETED\]",
- "\[EXPUNGED\]", "\[INFORMATION ABOVE YOUR SECURITY CLEARANCE\]",
- "\[MOVE ALONG CITIZEN\]", "\[NOTHING TO SEE HERE\]")
- var/chance = 50
-
- if(prob(chance))
- shortname = pick_n_take(removals)
-
- var/list/final_fullname = list()
- for(var/word in splittext(fullname, " "))
- if(prob(chance))
- word = pick_n_take(removals)
- final_fullname += word
-
- fullname = jointext(final_fullname, " ")
-
- // Actually finally setting the new name and desc
- name = "[shortname] [name]"
- desc = ""
-
-
-/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium
- name = "Gwyn's premium absinthe"
- desc = ""
- icon_state = "absinthepremium"
-
-/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium/redact()
- return
-
-/obj/item/reagent_containers/food/drinks/bottle/lizardwine
- name = "bottle of lizard wine"
- desc = ""
- icon_state = "lizardwine"
- list_reagents = list(/datum/reagent/consumable/ethanol/lizardwine = 100)
- foodtype = FRUIT | ALCOHOL
-
-
-/obj/item/reagent_containers/food/drinks/bottle/sake
- name = "Ryo's traditional sake"
- desc = ""
- icon_state = "sakebottle"
- list_reagents = list(/datum/reagent/consumable/ethanol/sake = 100)
-
-/obj/item/reagent_containers/food/drinks/bottle/sake/Initialize()
- . = ..()
- if(prob(10))
- name = "Fluffy Tail Sake"
- desc += " On the bottle is a picture of a kitsune with nine touchable tails."
- icon_state = "sakebottle_k"
- else if(prob(10))
- name = "Inubashiri's Home Brew"
- desc += " Awoo."
- icon_state = "sakebottle_i"
-
-/obj/item/reagent_containers/food/drinks/bottle/fernet
- name = "Fernet Bronca"
- desc = ""
- icon_state = "fernetbottle"
- list_reagents = list(/datum/reagent/consumable/ethanol/fernet = 100)
-
-//////////////////////////JUICES AND STUFF ///////////////////////
-
-/obj/item/reagent_containers/food/drinks/bottle/orangejuice
- name = "orange juice"
- desc = ""
- custom_price = 10
- icon_state = "orangejuice"
- item_state = "carton"
- lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
- isGlass = FALSE
- list_reagents = list(/datum/reagent/consumable/orangejuice = 100)
- foodtype = FRUIT | BREAKFAST
-
-/obj/item/reagent_containers/food/drinks/bottle/cream
- name = "milk cream"
- desc = ""
- custom_price = 10
- icon_state = "cream"
- item_state = "carton"
- lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
- isGlass = FALSE
- list_reagents = list(/datum/reagent/consumable/cream = 100)
- foodtype = DAIRY
-
-/obj/item/reagent_containers/food/drinks/bottle/tomatojuice
- name = "tomato juice"
- desc = ""
- custom_price = 10
- icon_state = "tomatojuice"
- item_state = "carton"
- lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
- isGlass = FALSE
- list_reagents = list(/datum/reagent/consumable/tomatojuice = 100)
- foodtype = VEGETABLES
-
-/obj/item/reagent_containers/food/drinks/bottle/limejuice
- name = "lime juice"
- desc = ""
- custom_price = 10
- icon_state = "limejuice"
- item_state = "carton"
- lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
- isGlass = FALSE
- list_reagents = list(/datum/reagent/consumable/limejuice = 100)
- foodtype = FRUIT
-
-
-/obj/item/reagent_containers/food/drinks/bottle/blank //Don't let players print these from a lathe, bottles should be obtained in mass from the bar only.
- name = "glass bottle"
- desc = ""
- icon_state = "glassbottle"
- fill_icon_thresholds = list(0, 10, 20, 30, 40, 50, 60, 70, 80, 90)
-
-/obj/item/reagent_containers/food/drinks/bottle/blank/update_icon()
- ..()
- add_overlay("[initial(icon_state)]shine")
-
-/obj/item/reagent_containers/food/drinks/bottle/blank/small
- name = "small glass bottle"
- desc = ""
- icon_state = "glassbottlesmall"
- volume = 50
-
-////////////////////////// MOLOTOV ///////////////////////
-/obj/item/reagent_containers/food/drinks/bottle/molotov
- name = "molotov cocktail"
- desc = ""
- icon_state = "vodkabottle"
- list_reagents = list()
- var/list/accelerants = list( /datum/reagent/consumable/ethanol, /datum/reagent/fuel, /datum/reagent/clf3, /datum/reagent/phlogiston,
- /datum/reagent/napalm, /datum/reagent/hellwater, /datum/reagent/toxin/plasma, /datum/reagent/toxin/spore_burning)
- var/active = 0
-
-/obj/item/reagent_containers/food/drinks/bottle/molotov/CheckParts(list/parts_list)
- ..()
- var/obj/item/reagent_containers/food/drinks/bottle/B = locate() in contents
- if(B)
- icon_state = B.icon_state
- B.reagents.copy_to(src,100)
- if(!B.isGlass)
- desc += " You're not sure if making this out of a carton was the brightest idea."
- isGlass = FALSE
- return
-
-/obj/item/reagent_containers/food/drinks/bottle/molotov/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
- var/firestarter = 0
- for(var/datum/reagent/R in reagents.reagent_list)
- for(var/A in accelerants)
- if(istype(R,A))
- firestarter = 1
- break
- if(firestarter && active)
- hit_atom.fire_act()
- new /obj/effect/hotspot(get_turf(hit_atom))
- ..()
-
-/obj/item/reagent_containers/food/drinks/bottle/molotov/attackby(obj/item/I, mob/user, params)
- if(I.get_temperature() && !active)
- active = TRUE
- log_bomber(user, "has primed a", src, "for detonation")
-
- to_chat(user, "I light [src] on fire.")
- add_overlay(GLOB.fire_overlay)
- if(!isGlass)
- addtimer(CALLBACK(src, PROC_REF(explode)), 5 SECONDS)
-
-/obj/item/reagent_containers/food/drinks/bottle/molotov/proc/explode()
- if(!active)
- return
- if(get_turf(src))
- var/atom/target = loc
- for(var/i in 1 to 2)
- if(istype(target, /obj/item/storage))
- target = target.loc
- SplashReagents(target)
- target.fire_act()
- qdel(src)
-
-/obj/item/reagent_containers/food/drinks/bottle/molotov/attack_self(mob/user)
- if(active)
- if(!isGlass)
- to_chat(user, "The flame's spread too far on it!")
- return
- to_chat(user, "I snuff out the flame on [src].")
- cut_overlay(GLOB.fire_overlay)
- active = 0
diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
deleted file mode 100644
index 220eee8774..0000000000
--- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm
+++ /dev/null
@@ -1,129 +0,0 @@
-
-
-/obj/item/reagent_containers/food/drinks/drinkingglass
- name = "drinking glass"
- desc = ""
- custom_price = 5
- icon_state = "glass_empty"
- amount_per_transfer_from_this = 10
- volume = 50
- custom_materials = list(/datum/material/glass=500)
- max_integrity = 20
- spillable = TRUE
- resistance_flags = ACID_PROOF
- obj_flags = CAN_BE_HIT | UNIQUE_RENAME
- drop_sound = 'sound/blank.ogg'
- pickup_sound = 'sound/blank.ogg'
-
-/obj/item/reagent_containers/food/drinks/drinkingglass/on_reagent_change(changetype)
- cut_overlays()
- if(reagents.reagent_list.len)
- var/datum/reagent/R = reagents.get_master_reagent()
- if(!renamedByPlayer)
- name = R.glass_name
- desc = R.glass_desc
- if(R.glass_icon_state)
- icon_state = R.glass_icon_state
- else
- var/mutable_appearance/reagent_overlay = mutable_appearance(icon, "glassoverlay")
- icon_state = "glass_empty"
- reagent_overlay.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(reagent_overlay)
- else
- icon_state = "glass_empty"
- renamedByPlayer = FALSE //so new drinks can rename the glass
-
-//Shot glasses!//
-// This lets us add shots in here instead of lumping them in with drinks because >logic //
-// The format for shots is the exact same as iconstates for the drinking glass, except you use a shot glass instead. //
-// If it's a new drink, remember to add it to Chemistry-Reagents.dm and Chemistry-Recipes.dm as well. //
-// You can only mix the ported-over drinks in shot glasses for now (they'll mix in a shaker, but the sprite won't change for glasses). //
-// This is on a case-by-case basis, and you can even make a separate sprite for shot glasses if you want. //
-
-/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass
- name = "shot glass"
- desc = ""
- custom_price = 5
- icon_state = "shotglass"
- gulp_size = 15
- amount_per_transfer_from_this = 15
- possible_transfer_amounts = list()
- volume = 15
- custom_materials = list(/datum/material/glass=100)
-
-/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change(changetype)
- cut_overlays()
-
- gulp_size = max(round(reagents.total_volume / 15), 15)
-
- if (reagents.reagent_list.len > 0)
- var/datum/reagent/largest_reagent = reagents.get_master_reagent()
- name = "filled shot glass"
- desc = ""
-
- if(largest_reagent.shot_glass_icon_state)
- icon_state = largest_reagent.shot_glass_icon_state
- else
- icon_state = "shotglassclear"
- var/mutable_appearance/shot_overlay = mutable_appearance(icon, "shotglassoverlay")
- shot_overlay.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(shot_overlay)
-
-
- else
- icon_state = "shotglass"
- name = "shot glass"
- desc = ""
- return
-
-/obj/item/reagent_containers/food/drinks/drinkingglass/filled/Initialize()
- . = ..()
- on_reagent_change(ADD_REAGENT)
-
-/obj/item/reagent_containers/food/drinks/drinkingglass/filled/soda
- name = "Soda Water"
- list_reagents = list(/datum/reagent/consumable/sodawater = 50)
-
-/obj/item/reagent_containers/food/drinks/drinkingglass/filled/cola
- name = "Space Cola"
- list_reagents = list(/datum/reagent/consumable/space_cola = 50)
-
-/obj/item/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola
- name = "Nuka Cola"
- list_reagents = list(/datum/reagent/consumable/nuka_cola = 50)
-
-/obj/item/reagent_containers/food/drinks/drinkingglass/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/reagent_containers/food/snacks/egg)) //breaking eggs
- var/obj/item/reagent_containers/food/snacks/egg/E = I
- if(reagents)
- if(reagents.total_volume >= reagents.maximum_volume)
- to_chat(user, "[src] is full.")
- else
- to_chat(user, "I break [E] in [src].")
- reagents.add_reagent(/datum/reagent/consumable/eggyolk, 5)
- qdel(E)
- return
- else
- ..()
-
-/obj/item/reagent_containers/food/drinks/drinkingglass/attack(obj/target, mob/user)
- if(user.used_intent.type == INTENT_HARM && ismob(target) && target.reagents && reagents.total_volume)
- target.visible_message("[user] splashes the contents of [src] onto [target]!", \
- "[user] splashes the contents of [src] onto you!")
- log_combat(user, target, "splashed", src)
- reagents.reaction(target, TOUCH)
- reagents.clear_reagents()
- return
- ..()
-
-/obj/item/reagent_containers/food/drinks/drinkingglass/afterattack(obj/target, mob/user, proximity)
- . = ..()
- if((!proximity) || !check_allowed_items(target,target_self=1))
- return
-
- else if(reagents.total_volume && user.used_intent.type == INTENT_HARM)
- user.visible_message("[user] splashes the contents of [src] onto [target]!", \
- "I splash the contents of [src] onto [target].")
- reagents.reaction(target, TOUCH)
- reagents.clear_reagents()
- return
diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm
index a1551e36ec..a8fe537dad 100644
--- a/code/modules/food_and_drinks/food/condiment.dm
+++ b/code/modules/food_and_drinks/food/condiment.dm
@@ -101,21 +101,7 @@
. = ..()
if(!proximity)
return
- if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
-
- if(!target.reagents.total_volume)
- to_chat(user, "[target] is empty!")
- return
-
- if(reagents.total_volume >= reagents.maximum_volume)
- to_chat(user, "[src] is full!")
- return
-
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this, transfered_by = user)
- to_chat(user, "I fill [src] with [trans] units of the contents of [target].")
-
- //Something like a glass or a food item. Player probably wants to transfer TO it.
- else if(target.is_drainable() || istype(target, /obj/item/reagent_containers/food/snacks))
+ if(target.is_drainable() || istype(target, /obj/item/reagent_containers/food/snacks))
if(!reagents.total_volume)
to_chat(user, "[src] is empty!")
return
diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm
index ad244866ce..3776af058f 100644
--- a/code/modules/food_and_drinks/food/customizables.dm
+++ b/code/modules/food_and_drinks/food/customizables.dm
@@ -181,7 +181,6 @@
name = "kebab"
desc = ""
ingredients_placement = INGREDIENTS_LINE
- trash = /obj/item/stack/rods
list_reagents = list(/datum/reagent/consumable/nutriment = 1)
ingMax = 6
icon_state = "rod"
diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm
index 7ea6ab98c7..e74a622863 100644
--- a/code/modules/food_and_drinks/food/snacks.dm
+++ b/code/modules/food_and_drinks/food/snacks.dm
@@ -534,7 +534,7 @@ All foods are distributed among various categories. Use common sense.
. = ..()
if(!dunkable || !proximity)
return
- if(istype(M, /obj/item/reagent_containers/glass) || istype(M, /obj/item/reagent_containers/food/drinks)) //you can dunk dunkable snacks into beakers or drinks
+ if(istype(M, /obj/item/reagent_containers/glass)) //you can dunk dunkable snacks into beakers or drinks
if(!M.is_drainable())
to_chat(user, "[M] is unable to be dunked in!")
return
diff --git a/code/modules/food_and_drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm
index cacc7bb97f..c746a8368d 100644
--- a/code/modules/food_and_drinks/food/snacks_cake.dm
+++ b/code/modules/food_and_drinks/food/snacks_cake.dm
@@ -175,10 +175,6 @@
tastes = list("cake" = 5, "sweetness" = 1)
foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR
-/obj/item/reagent_containers/food/snacks/store/cake/birthday/heating_act() //super sekrit club
- new /obj/item/clothing/head/hardhat/cakehat(get_turf(src))
- qdel(src)
-
/obj/item/reagent_containers/food/snacks/cakeslice/birthday
name = "birthday cake slice"
desc = ""
@@ -207,10 +203,6 @@
. = ..()
energy_bite(M, user)
-/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy/heating_act() //super sekriter club
- new /obj/item/clothing/head/hardhat/cakehat/energycake(get_turf(src))
- qdel(src)
-
/obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy
name = "energy cake slice"
desc = ""
diff --git a/code/modules/food_and_drinks/food/snacks_egg.dm b/code/modules/food_and_drinks/food/snacks_egg.dm
index af68dd4e1b..f98fe2add2 100644
--- a/code/modules/food_and_drinks/food/snacks_egg.dm
+++ b/code/modules/food_and_drinks/food/snacks_egg.dm
@@ -25,7 +25,7 @@
icon = 'modular/Neu_Food/icons/food.dmi'
name = "cackleberry"
desc = ""
- icon_state = "egg"
+ icon_state = "egg"
list_reagents = list(/datum/reagent/consumable/eggyolk = 5)
cooked_type = null
fried_type = /obj/item/reagent_containers/food/snacks/rogue/friedegg
@@ -63,38 +63,6 @@
var/color = mix_color_from_reagents(reagents.reagent_list)
add_atom_colour(color, FIXED_COLOUR_PRIORITY)
-/obj/item/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
- if(!..()) //was it caught by a mob?
- var/turf/T = get_turf(hit_atom)
- var/obj/O = new /obj/effect/decal/cleanable/food/egg_smudge(T)
- O.pixel_x = rand(-8,8)
- O.pixel_y = rand(-8,8)
- if(prob(1)) //Roughly (1%) chance to make a chick, as in Minecraft. I decided not to include the chances for the creation of multiple chicks from the impact of one egg, since that'd probably require nested prob()s or something (and people might think that it was a bug, anyway).
- if(chick_count < MAX_CHICKENS) //Chicken code uses this MAX_CHICKENS variable, so I figured that I'd use it again here. Even this check and the check in chicken code both use the MAX_CHICKENS variable, they use independent counter variables and thus are independent of each other.
- new /mob/living/simple_animal/chick(T)
- chick_count++
- reagents.reaction(hit_atom, TOUCH)
- qdel(src)
-
-/obj/item/reagent_containers/food/snacks/egg/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/toy/crayon))
- var/obj/item/toy/crayon/C = W
- var/clr = C.crayon_color
-
- if(!(clr in list("blue", "green", "mime", "orange", "purple", "rainbow", "red", "yellow")))
- to_chat(usr, "[src] refuses to take on this colour!")
- return
-
- to_chat(usr, "I colour [src] with [W].")
- icon_state = "egg-[clr]"
- else if(istype(W, /obj/item/stamp/clown))
- var/clowntype = pick("grock", "grimaldi", "rainbow", "chaos", "joker", "sexy", "standard", "bobble", "krusty", "bozo", "pennywise", "ronald", "jacobs", "kelly", "popov", "cluwne")
- icon_state = "egg-clown-[clowntype]"
- desc = ""
- to_chat(usr, "I stamp [src] with [W], creating an artistic and not remotely horrifying likeness of clown makeup.")
- else
- ..()
-
/obj/item/reagent_containers/food/snacks/egg/blue
icon_state = "egg-blue"
diff --git a/code/modules/food_and_drinks/food/snacks_frozen.dm b/code/modules/food_and_drinks/food/snacks_frozen.dm
index 61b122e964..0bd29d397c 100644
--- a/code/modules/food_and_drinks/food/snacks_frozen.dm
+++ b/code/modules/food_and_drinks/food/snacks_frozen.dm
@@ -52,7 +52,6 @@
desc = ""
icon = 'icons/obj/food/snowcones.dmi'
icon_state = "flaverless_sc"
- trash = /obj/item/reagent_containers/food/drinks/sillycup //We dont eat paper cups
bonus_reagents = list(/datum/reagent/water = 10) //Base line will allways give water
list_reagents = list(/datum/reagent/water = 1) // We dont get food for water/juices
filling_color = "#FFFFFF" //Ice is white
diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm
index 59a5494664..d90d00dd7b 100644
--- a/code/modules/food_and_drinks/food/snacks_meat.dm
+++ b/code/modules/food_and_drinks/food/snacks_meat.dm
@@ -109,24 +109,8 @@
filling_color = "#800000"
tastes = list("meat" = 1)
foodtype = MEAT
-/*
-/obj/item/reagent_containers/food/snacks/sausage
- name = "sausage"
- desc = ""
- icon_state = "sausage"
- filling_color = "#CD5C5C"
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
- list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 1)
- tastes = list("meat" = 1)
- foodtype = MEAT | BREAKFAST
- var/roasted = FALSE
-/obj/item/reagent_containers/food/snacks/sausage/Initialize()
- . = ..()
- eatverb = pick("bite","chew","nibble","deep throat","gobble","chomp")
-*/
/obj/item/reagent_containers/food/snacks/kebab
- trash = /obj/item/stack/rods
icon_state = "kebab"
w_class = WEIGHT_CLASS_NORMAL
list_reagents = list(/datum/reagent/consumable/nutriment = 8)
diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm
index a4750cc987..bc3410039f 100644
--- a/code/modules/food_and_drinks/food/snacks_other.dm
+++ b/code/modules/food_and_drinks/food/snacks_other.dm
@@ -543,7 +543,6 @@
name = "butter on a stick"
desc = ""
icon_state = "butteronastick"
- trash = /obj/item/stack/rods
/obj/item/reagent_containers/food/snacks/pineappleslice
name = "pineapple slice"
diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
deleted file mode 100644
index 024e095899..0000000000
--- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm
+++ /dev/null
@@ -1,163 +0,0 @@
-#define STORAGE_CAPACITY 30
-#define LIQUID_CAPACIY 200
-#define MIXER_CAPACITY 100
-
-/obj/machinery/food_cart
- name = "food cart"
- desc = ""
- icon = 'icons/obj/kitchen.dmi'
- icon_state = "foodcart"
- density = TRUE
- anchored = FALSE
- use_power = NO_POWER_USE
- var/food_stored = 0
- var/glasses = 0
- var/portion = 10
- var/selected_drink
- var/list/stored_food = list()
- var/obj/item/reagent_containers/mixer
-
-/obj/machinery/food_cart/Initialize()
- . = ..()
- create_reagents(LIQUID_CAPACIY, OPENCONTAINER | NO_REACT)
- mixer = new /obj/item/reagent_containers(src, MIXER_CAPACITY)
- mixer.name = "Mixer"
-
-/obj/machinery/food_cart/Destroy()
- QDEL_NULL(mixer)
- return ..()
-
-/obj/machinery/food_cart/ui_interact(mob/user)
- . = ..()
- var/dat
- dat += "
STORED INGREDIENTS AND DRINKS
"
- dat += "Remaining glasses: [glasses]
"
- dat += "Portion:
[portion]"
- for(var/datum/reagent/R in reagents.reagent_list)
- dat += "[R.name]: [R.volume] "
- dat += "
Purge"
- if (glasses > 0)
- dat += "
Pour in a glass"
- dat += "
Add to the mixer"
- dat += "
MIXER CONTENTS
"
- for(var/datum/reagent/R in mixer.reagents.reagent_list)
- dat += "[R.name]: [R.volume] "
- dat += "
Transfer back"
- if (glasses > 0)
- dat += "
Pour in a glass"
- dat += "
"
- dat += "
STORED FOOD
"
- for(var/V in stored_food)
- if(stored_food[V] > 0)
- dat += "
[V]: [stored_food[V]] Dispense"
- dat += "
Refresh Close"
-
- var/datum/browser/popup = new(user, "foodcart","Food Cart", 500, 350, src)
- popup.set_content(dat)
- popup.open()
-
-/obj/machinery/food_cart/proc/isFull()
- return food_stored >= STORAGE_CAPACITY
-
-/obj/machinery/food_cart/attackby(obj/item/O, mob/user, params)
- if(O.tool_behaviour == TOOL_WRENCH)
- default_unfasten_wrench(user, O, 0)
- return TRUE
- if(istype(O, /obj/item/reagent_containers/food/drinks/drinkingglass))
- var/obj/item/reagent_containers/food/drinks/drinkingglass/DG = O
- if(!DG.reagents.total_volume) //glass is empty
- qdel(DG)
- glasses++
- to_chat(user, "[src] accepts the drinking glass, sterilizing it.")
- else if(istype(O, /obj/item/reagent_containers/food/snacks))
- if(isFull())
- to_chat(user, "[src] is at full capacity.")
- else
- var/obj/item/reagent_containers/food/snacks/S = O
- if(!user.transferItemToLoc(S, src))
- return
- if(stored_food[sanitize(S.name)])
- stored_food[sanitize(S.name)]++
- else
- stored_food[sanitize(S.name)] = 1
- else if(istype(O, /obj/item/stack/sheet/glass))
- var/obj/item/stack/sheet/glass/G = O
- if(G.get_amount() >= 1)
- G.use(1)
- glasses += 4
- to_chat(user, "[src] accepts a sheet of glass.")
- else if(istype(O, /obj/item/storage/bag/tray))
- var/obj/item/storage/bag/tray/T = O
- for(var/obj/item/reagent_containers/food/snacks/S in T.contents)
- if(isFull())
- to_chat(user, "[src] is at full capacity.")
- break
- else
- if(SEND_SIGNAL(T, COMSIG_TRY_STORAGE_TAKE, S, src))
- if(stored_food[sanitize(S.name)])
- stored_food[sanitize(S.name)]++
- else
- stored_food[sanitize(S.name)] = 1
- else if(O.is_drainable())
- return
- else
- . = ..()
- updateDialog()
-
-/obj/machinery/food_cart/Topic(href, href_list)
- if(..())
- return
-
- if(href_list["disposeI"])
- reagents.del_reagent(href_list["disposeI"])
-
- if(href_list["dispense"])
- if(stored_food[href_list["dispense"]]-- <= 0)
- stored_food[href_list["dispense"]] = 0
- else
- for(var/obj/O in contents)
- if(sanitize(O.name) == href_list["dispense"])
- O.forceMove(drop_location())
- break
- log_combat(usr, src, "dispensed [O] from", null, "with [stored_food[href_list["dispense"]]] remaining")
-
- if(href_list["portion"])
- portion = CLAMP(input("How much drink do you want to dispense per glass?") as num|null, 0, 50)
-
- if (isnull(portion))
- return
-
- if(href_list["pour"] || href_list["m_pour"])
- if(glasses-- <= 0)
- to_chat(usr, "There are no glasses left!")
- glasses = 0
- else
- var/obj/item/reagent_containers/food/drinks/drinkingglass/DG = new(loc)
- if(href_list["pour"])
- reagents.trans_id_to(DG, href_list["pour"], portion)
- if(href_list["m_pour"])
- mixer.reagents.trans_id_to(DG, href_list["m_pour"], portion)
-
- if(href_list["mix"])
- if(reagents.trans_id_to(mixer, href_list["mix"], portion) == 0)
- to_chat(usr, "[mixer] is full!")
-
- if(href_list["transfer"])
- if(mixer.reagents.trans_id_to(src, href_list["transfer"], portion) == 0)
- to_chat(usr, "[src] is full!")
-
- updateDialog()
-
- if(href_list["close"])
- usr.unset_machine()
- usr << browse(null,"window=foodcart")
- return
-
-/obj/machinery/food_cart/deconstruct(disassembled = TRUE)
- if(!(flags_1 & NODECONSTRUCT_1))
- new /obj/item/stack/sheet/metal(loc, 4)
- qdel(src)
-
-#undef STORAGE_CAPACITY
-#undef LIQUID_CAPACIY
-#undef MIXER_CAPACITY
diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm
deleted file mode 100644
index 5ddfcb275c..0000000000
--- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm
+++ /dev/null
@@ -1,138 +0,0 @@
-//I JUST WANNA GRILL FOR GOD'S SAKE
-
-/obj/machinery/grill
- name = "grill"
- desc = ""
- icon = 'icons/obj/kitchen.dmi'
- icon_state = "grill_open"
- density = TRUE
- layer = BELOW_OBJ_LAYER
- use_power = NO_POWER_USE
- var/grill_fuel = 0
- var/obj/item/reagent_containers/food/grilled_item
- var/grill_time = 0
- var/datum/looping_sound/grill/grill_loop
-
-/obj/machinery/grill/Initialize()
- . = ..()
- grill_loop = new(list(src), FALSE)
-
-/obj/machinery/grill/update_icon()
- if(grilled_item)
- icon_state = "grill"
- else if(grill_fuel)
- icon_state = "grill_on"
- else
- icon_state = "grill_open"
-
-/obj/machinery/grill/attackby(obj/item/I, mob/user)
- if(istype(I, /obj/item/stack/sheet/mineral/coal) || istype(I, /obj/item/stack/sheet/mineral/wood))
- var/obj/item/stack/S = I
- var/stackamount = S.get_amount()
- to_chat(user, "I put [stackamount] [I]s in [src].")
- if(istype(I, /obj/item/stack/sheet/mineral/coal))
- grill_fuel += (500 * stackamount)
- else
- grill_fuel += (50 * stackamount)
- S.use(stackamount)
- update_icon()
- return
- if(I.resistance_flags & INDESTRUCTIBLE)
- to_chat(user, "I don't feel it would be wise to grill [I]...")
- return ..()
- if(istype(I, /obj/item/reagent_containers))
- if(istype(I, /obj/item/reagent_containers/food) && !istype(I, /obj/item/reagent_containers/food/drinks))
- if(HAS_TRAIT(I, TRAIT_NODROP) || (I.item_flags & (ABSTRACT | DROPDEL)))
- return ..()
- else if(!grill_fuel)
- to_chat(user, "There is not enough fuel!")
- return
- else if(!grilled_item && user.transferItemToLoc(I, src))
- grilled_item = I
- to_chat(user, "I put the [grilled_item] on [src].")
- update_icon()
- grill_loop.start()
- return
- else
- if(I.reagents.has_reagent(/datum/reagent/consumable/monkey_energy))
- grill_fuel += (20 * (I.reagents.get_reagent_amount(/datum/reagent/consumable/monkey_energy)))
- to_chat(user, "I pour the Monkey Energy in [src].")
- I.reagents.remove_reagent(/datum/reagent/consumable/monkey_energy, I.reagents.get_reagent_amount(/datum/reagent/consumable/monkey_energy))
- update_icon()
- return
- ..()
-
-/obj/machinery/grill/process()
- ..()
- update_icon()
- if(!grill_fuel)
- return
- else
- grill_fuel -= 1
- if(prob(1))
- var/datum/effect_system/smoke_spread/bad/smoke = new
- smoke.set_up(1, loc)
- smoke.start()
- if(grilled_item)
- grill_time += 1
- grilled_item.reagents.add_reagent(/datum/reagent/consumable/char, 1)
- grill_fuel -= 10
- grilled_item.AddComponent(/datum/component/sizzle)
-
-/obj/machinery/grill/Exited(atom/movable/AM)
- if(AM == grilled_item)
- finish_grill()
- grilled_item = null
- ..()
-
-/obj/machinery/grill/Destroy()
- grilled_item = null
- . = ..()
-
-/obj/machinery/grill/handle_atom_del(atom/A)
- if(A == grilled_item)
- grilled_item = null
- . = ..()
-
-/obj/machinery/grill/wrench_act(mob/living/user, obj/item/I)
- . = ..()
- if(default_unfasten_wrench(user, I) != CANT_UNFASTEN)
- return TRUE
-
-/obj/machinery/grill/deconstruct(disassembled = TRUE)
- finish_grill()
- if(!(flags_1 & NODECONSTRUCT_1))
- new /obj/item/stack/sheet/metal(loc, 5)
- new /obj/item/stack/rods(loc, 5)
- ..()
-
-/obj/machinery/grill/attack_hand(mob/user)
- if(grilled_item)
- to_chat(user, "I take out [grilled_item] from [src].")
- grilled_item.forceMove(drop_location())
- update_icon()
- return
- return ..()
-
-/obj/machinery/grill/proc/finish_grill()
- switch(grill_time) //no 0-9 to prevent spam
- if(10 to 15)
- grilled_item.name = "lightly-grilled [grilled_item.name]"
- grilled_item.desc = ""
- if(16 to 39)
- grilled_item.name = "grilled [grilled_item.name]"
- grilled_item.desc = ""
- grilled_item.foodtype |= FRIED
- if(40 to 50)
- grilled_item.name = "heavily grilled [grilled_item.name]"
- grilled_item.desc = ""
- grilled_item.foodtype |= FRIED
- if(51 to INFINITY) //grill marks reach max alpha
- grilled_item.name = "Powerfully Grilled [grilled_item.name]"
- grilled_item.desc = ""
- grilled_item.foodtype |= FRIED
- grill_time = 0
- grill_loop.stop()
-
-/obj/machinery/grill/unwrenched
- anchored = FALSE
diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
deleted file mode 100644
index 75f565f36d..0000000000
--- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm
+++ /dev/null
@@ -1,313 +0,0 @@
-#define ICECREAM_VANILLA 1
-#define ICECREAM_CHOCOLATE 2
-#define ICECREAM_STRAWBERRY 3
-#define ICECREAM_BLUE 4
-#define ICECREAM_CUSTOM 5
-#define CONE_WAFFLE 6
-#define CONE_CHOC 7
-
-/obj/machinery/icecream_vat
- name = "ice cream vat"
- desc = ""
- icon = 'icons/obj/kitchen.dmi'
- icon_state = "icecream_vat"
- density = TRUE
- anchored = FALSE
- use_power = NO_POWER_USE
- layer = BELOW_OBJ_LAYER
- max_integrity = 300
- var/list/product_types = list()
- var/dispense_flavour = ICECREAM_VANILLA
- var/flavour_name = "vanilla"
- var/obj/item/reagent_containers/beaker = null
- var/static/list/icecream_vat_reagents = list(
- /datum/reagent/consumable/milk = 6,
- /datum/reagent/consumable/flour = 6,
- /datum/reagent/consumable/sugar = 6,
- /datum/reagent/consumable/ice = 6,
- /datum/reagent/consumable/coco = 6,
- /datum/reagent/consumable/vanilla = 6,
- /datum/reagent/consumable/berryjuice = 6,
- /datum/reagent/consumable/ethanol/singulo = 6)
-
-/obj/machinery/icecream_vat/proc/get_ingredient_list(type)
- switch(type)
- if(ICECREAM_CHOCOLATE)
- return list(/datum/reagent/consumable/milk, /datum/reagent/consumable/ice, /datum/reagent/consumable/coco)
- if(ICECREAM_STRAWBERRY)
- return list(/datum/reagent/consumable/milk, /datum/reagent/consumable/ice, /datum/reagent/consumable/berryjuice)
- if(ICECREAM_BLUE)
- return list(/datum/reagent/consumable/milk, /datum/reagent/consumable/ice, /datum/reagent/consumable/ethanol/singulo)
- if(ICECREAM_CUSTOM)
- return list(/datum/reagent/consumable/milk, /datum/reagent/consumable/ice)
- if(CONE_WAFFLE)
- return list(/datum/reagent/consumable/flour, /datum/reagent/consumable/sugar)
- if(CONE_CHOC)
- return list(/datum/reagent/consumable/flour, /datum/reagent/consumable/sugar, /datum/reagent/consumable/coco)
- else //ICECREAM_VANILLA
- return list(/datum/reagent/consumable/milk, /datum/reagent/consumable/ice, /datum/reagent/consumable/vanilla)
-
-
-/obj/machinery/icecream_vat/proc/get_flavour_name(flavour_type)
- switch(flavour_type)
- if(ICECREAM_CHOCOLATE)
- return "chocolate"
- if(ICECREAM_STRAWBERRY)
- return "strawberry"
- if(ICECREAM_BLUE)
- return "blue"
- if(ICECREAM_CUSTOM)
- return "custom"
- if(CONE_WAFFLE)
- return "waffle"
- if(CONE_CHOC)
- return "chocolate"
- else //ICECREAM_VANILLA
- return "vanilla"
-
-
-/obj/machinery/icecream_vat/Initialize()
- . = ..()
- while(product_types.len < 7)
- product_types.Add(5)
- create_reagents(100, NO_REACT | OPENCONTAINER)
- for(var/reagent in icecream_vat_reagents)
- reagents.add_reagent(reagent, icecream_vat_reagents[reagent])
-
-/obj/machinery/icecream_vat/ui_interact(mob/user)
- . = ..()
- var/dat
- dat += "ICE CREAM
"
- dat += "
Dispensing: [flavour_name] icecream "
- dat += "
Vanilla ice cream: Select Make x5 [product_types[ICECREAM_VANILLA]] scoops left. (Ingredients: milk, ice, vanilla)
"
- dat += "
Strawberry ice cream: Select Make x5 [product_types[ICECREAM_STRAWBERRY]] dollops left. (Ingredients: milk, ice, berry juice)
"
- dat += "
Chocolate ice cream: Select Make x5 [product_types[ICECREAM_CHOCOLATE]] dollops left. (Ingredients: milk, ice, coco powder)
"
- dat += "
Blue ice cream: Select Make x5 [product_types[ICECREAM_BLUE]] dollops left. (Ingredients: milk, ice, singulo)
"
- dat += "
Custom ice cream: Select Make x5 [product_types[ICECREAM_CUSTOM]] dollops left. (Ingredients: milk, ice, optional flavoring)
"
- dat += "
CONES
"
- dat += "
Waffle cones: Dispense Make x5 [product_types[CONE_WAFFLE]] cones left. (Ingredients: flour, sugar)
"
- dat += "
Chocolate cones: Dispense Make x5 [product_types[CONE_CHOC]] cones left. (Ingredients: flour, sugar, coco powder)
"
- dat += "
"
- if(beaker)
- dat += "BEAKER CONTENT
"
- for(var/datum/reagent/R in beaker.reagents.reagent_list)
- dat += "[R.name]: [R.volume]u
"
- dat += "
Refill from beaker "
- dat += "
"
- dat += "VAT CONTENT
"
- for(var/datum/reagent/R in reagents.reagent_list)
- dat += "[R.name]: [R.volume]"
- dat += "Purge
"
- dat += "Refresh Close"
-
- var/datum/browser/popup = new(user, "icecreamvat","Icecream Vat", 700, 500, src)
- popup.set_content(dat)
- popup.open()
-
-/obj/machinery/icecream_vat/attackby(obj/item/O, mob/user, params)
- if(istype(O, /obj/item/reagent_containers/food/snacks/icecream))
- var/obj/item/reagent_containers/food/snacks/icecream/I = O
- if(!I.ice_creamed)
- if(product_types[dispense_flavour] > 0)
- visible_message("[icon2html(src, viewers(src))] [user] scoops delicious [flavour_name] ice cream into [I].")
- product_types[dispense_flavour] -= 1
- if(beaker && beaker.reagents.total_volume)
- I.add_ice_cream(flavour_name, beaker.reagents)
- else
- I.add_ice_cream(flavour_name)
- if(I.reagents.total_volume < 10)
- I.reagents.add_reagent(/datum/reagent/consumable/sugar, 10 - I.reagents.total_volume)
- updateDialog()
- else
- to_chat(user, "There is not enough ice cream left!")
- else
- to_chat(user, "[O] already has ice cream in it!")
- return 1
- if(istype(O, /obj/item/reagent_containers) && !(O.item_flags & ABSTRACT) && O.is_open_container())
- . = TRUE //no afterattack
- var/obj/item/reagent_containers/B = O
- if(!user.transferItemToLoc(B, src))
- return
- replace_beaker(user, B)
- to_chat(user, "I add [B] to [src].")
- updateUsrDialog()
- update_icon()
- return
- else if(O.is_drainable())
- return
- else
- return ..()
-
-/obj/machinery/icecream_vat/proc/RefillFromBeaker()
- if(!beaker || !beaker.reagents)
- return
- for(var/datum/reagent/R in beaker.reagents.reagent_list)
- if(R.type in icecream_vat_reagents)
- beaker.reagents.trans_id_to(src, R.type, R.volume)
- say("Internalizing reagent.")
- playsound(src, 'sound/blank.ogg', 25, TRUE)
- return
-
-
-
-/obj/machinery/icecream_vat/proc/make(mob/user, make_type, amount)
- var/recipe_amount = amount * 3 //prevents reagent duping by requring roughly the amount of reagenst you gain back by grinding.
- for(var/R in get_ingredient_list(make_type))
- if(reagents.has_reagent(R, recipe_amount))
- continue
- amount = 0
- break
- if(amount)
- for(var/R in get_ingredient_list(make_type))
- reagents.remove_reagent(R, recipe_amount)
- product_types[make_type] += amount
- var/flavour = get_flavour_name(make_type)
- if(make_type > 5)
- src.visible_message("[user] cooks up some [flavour] cones.")
- else
- src.visible_message("[user] whips up some [flavour] icecream.")
- else
- to_chat(user, "I don't have the ingredients to make this!")
-
-/obj/machinery/icecream_vat/Topic(href, href_list)
- if(..())
- return
- if(href_list["select"])
- dispense_flavour = text2num(href_list["select"])
- flavour_name = get_flavour_name(dispense_flavour)
- src.visible_message("[usr] sets [src] to dispense [flavour_name] flavoured ice cream.")
-
- if(href_list["cone"])
- var/dispense_cone = text2num(href_list["cone"])
- var/cone_name = get_flavour_name(dispense_cone)
- if(product_types[dispense_cone] >= 1)
- product_types[dispense_cone] -= 1
- var/obj/item/reagent_containers/food/snacks/icecream/I = new(src.loc)
- I.set_cone_type(cone_name)
- src.visible_message("[usr] dispenses a crunchy [cone_name] cone from [src].")
- else
- to_chat(usr, "There are no [cone_name] cones left!")
-
- if(href_list["make"])
- var/amount = (text2num(href_list["amount"]))
- var/C = text2num(href_list["make"])
- make(usr, C, amount)
-
- if(href_list["disposeI"])
- reagents.del_reagent(text2path(href_list["disposeI"]))
-
- if(href_list["refill"])
- RefillFromBeaker()
-
- updateDialog()
-
- if(href_list["refresh"])
- updateDialog()
-
- if(href_list["close"])
- usr.unset_machine()
- usr << browse(null,"window=icecreamvat")
- return
-
-/obj/item/reagent_containers/food/snacks/icecream
- name = "ice cream cone"
- desc = ""
- icon = 'icons/obj/kitchen.dmi'
- icon_state = "icecream_cone_waffle" //default for admin-spawned cones, href_list["cone"] should overwrite this all the time
- list_reagents = list(/datum/reagent/consumable/nutriment = 4)
- tastes = list("cream" = 2, "waffle" = 1)
- var/ice_creamed = 0
- var/cone_type
- bitesize = 4
- foodtype = DAIRY | SUGAR
-
-/obj/item/reagent_containers/food/snacks/icecream/Initialize()
- . = ..()
- reagents.maximum_volume = 20
-
-/obj/item/reagent_containers/food/snacks/icecream/proc/set_cone_type(cone_name)
- cone_type = cone_name
- icon_state = "icecream_cone_[cone_name]"
- switch (cone_type)
- if ("waffle")
- reagents.add_reagent(/datum/reagent/consumable/nutriment, 1)
- if ("chocolate")
- reagents.add_reagent(/datum/reagent/consumable/coco, 1) // chocolate ain't as nutritious kids
-
- desc = ""
-
-
-/obj/item/reagent_containers/food/snacks/icecream/proc/add_ice_cream(flavour_name, datum/reagents/R = null)
- name = "[flavour_name] icecream"
- switch (flavour_name) // adding the actual reagents advertised in the ingredient list
- if ("vanilla")
- desc = ""
- reagents.add_reagent(/datum/reagent/consumable/vanilla, 3)
- filling_color = "#ECE1C1"
- if ("chocolate")
- desc = ""
- reagents.add_reagent(/datum/reagent/consumable/coco, 3)
- filling_color = "#93673B"
- if ("strawberry")
- desc = ""
- reagents.add_reagent(/datum/reagent/consumable/berryjuice, 3)
- filling_color = "#EFB4B4"
- if ("blue")
- desc = ""
- reagents.add_reagent(/datum/reagent/consumable/ethanol/singulo, 3)
- filling_color = "#ACBCED"
- if ("mob")
- desc = ""
- reagents.add_reagent(/datum/reagent/liquidgibs, 3)
- filling_color = "#EFB4B4"
- if ("custom")
- if(R && R.total_volume >= 4) //consumable reagents have stronger taste so higher volume will allow non-food flavourings to break through better.
- var/mutable_appearance/flavoring = mutable_appearance(icon,"icecream_custom")
- var/datum/reagent/master = R.get_master_reagent()
- flavoring.color = master.color
- filling_color = master.color
- name = "[master.name] icecream"
- desc = ""
- R.trans_to(src, 4)
- add_overlay(flavoring)
- else
- name = "bland icecream"
- desc = ""
- add_overlay("icecream_custom")
- if(flavour_name != "custom")
- src.add_overlay("icecream_[flavour_name]")
- ice_creamed = 1
-
-/obj/item/reagent_containers/food/snacks/icecream/proc/add_mob_flavor(mob/M)
- add_ice_cream("mob")
- name = "[M.name] icecream"
-
-/obj/machinery/icecream_vat/deconstruct(disassembled = TRUE)
- if(!(flags_1 & NODECONSTRUCT_1))
- new /obj/item/stack/sheet/metal(loc, 4)
- qdel(src)
-
-/obj/machinery/icecream_vat/AltClick(mob/living/user)
- if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
- return
- replace_beaker(user)
-
-/obj/machinery/icecream_vat/proc/replace_beaker(mob/living/user, obj/item/reagent_containers/new_beaker)
- if(beaker)
- beaker.forceMove(drop_location())
- if(user && Adjacent(user))
- user.put_in_hands(beaker)
- if(new_beaker)
- beaker = new_beaker
- else
- beaker = null
- updateDialog()
- return TRUE
-
-#undef ICECREAM_VANILLA
-#undef ICECREAM_CHOCOLATE
-#undef ICECREAM_STRAWBERRY
-#undef ICECREAM_BLUE
-#undef ICECREAM_CUSTOM
-#undef CONE_WAFFLE
-#undef CONE_CHOC
diff --git a/code/modules/games/cas.dm b/code/modules/games/cas.dm
deleted file mode 100644
index 9f774439c1..0000000000
--- a/code/modules/games/cas.dm
+++ /dev/null
@@ -1,158 +0,0 @@
-// CARDS AGAINST SPESS
-// This is a parody of Cards Against Humanity (https://en.wikipedia.org/wiki/Cards_Against_Humanity)
-// which is licensed under CC BY-NC-SA 2.0, the full text of which can be found at the following URL:
-// https://creativecommons.org/licenses/by-nc-sa/2.0/legalcode
-// Original code by Zuhayr, Polaris Station, ported with modifications
-/datum/playingcard
- var/name = "playing card"
- var/card_icon = "card_back"
- var/suit
- var/number
-
-/obj/item/toy/cards/deck/cas
- name = "\improper CAS deck (white)"
- desc = ""
- icon = 'icons/obj/toy.dmi'
- icon_state = "deck_caswhite_full"
- deckstyle = "caswhite"
- var/card_face = "cas_white"
- var/blanks = 25
- var/decksize = 150
- var/card_text_file = "strings/cas_white.txt"
- var/list/allcards = list()
-
-/obj/item/toy/cards/deck/cas/black
- name = "\improper CAS deck (black)"
- desc = ""
- icon_state = "deck_casblack_full"
- deckstyle = "casblack"
- card_face = "cas_black"
- blanks = 0
- decksize = 50
- card_text_file = "strings/cas_black.txt"
-
-/obj/item/toy/cards/deck/cas/populate_deck()
- var/static/list/cards_against_space = list("cas_white" = world.file2list("strings/cas_white.txt"),"cas_black" = world.file2list("strings/cas_black.txt"))
- allcards = cards_against_space[card_face]
- var/list/possiblecards = allcards.Copy()
- if(possiblecards.len < decksize) // sanity check
- decksize = (possiblecards.len - 1)
- var/list/randomcards = list()
- for(var/x in 1 to decksize)
- randomcards += pick_n_take(possiblecards)
- for(var/x in 1 to randomcards.len)
- var/cardtext = randomcards[x]
- var/datum/playingcard/P
- P = new()
- P.name = "[cardtext]"
- P.card_icon = "[src.card_face]"
- cards += P
- if(!blanks)
- return
- for(var/x in 1 to blanks)
- var/datum/playingcard/P
- P = new()
- P.name = "Blank Card"
- P.card_icon = "cas_white"
- cards += P
- shuffle_inplace(cards) // distribute blank cards throughout deck
-
-/obj/item/toy/cards/deck/cas/draw_card(mob/user)
- if(isliving(user))
- var/mob/living/L = user
- if(!(L.mobility_flags & MOBILITY_PICKUP))
- return
- if(cards.len == 0)
- to_chat(user, "There are no more cards to draw!")
- return
- var/obj/item/toy/cards/singlecard/cas/H = new/obj/item/toy/cards/singlecard/cas(user.loc)
- var/datum/playingcard/choice = cards[1]
- if (choice.name == "Blank Card")
- H.blank = 1
- H.name = choice.name
- H.buffertext = choice.name
- H.icon_state = choice.card_icon
- H.card_face = choice.card_icon
- H.parentdeck = src
- src.cards -= choice
- H.pickup(user)
- user.put_in_hands(H)
- user.visible_message("[user] draws a card from the deck.", "I draw a card from the deck.")
- update_icon()
-
-/obj/item/toy/cards/deck/cas/attackby(obj/item/I, mob/living/user, params)
- if(istype(I, /obj/item/toy/cards/singlecard/cas))
- var/obj/item/toy/cards/singlecard/cas/SC = I
- if(!user.temporarilyRemoveItemFromInventory(SC))
- to_chat(user, "The card is stuck to your hand, you can't add it to the deck!")
- return
- var/datum/playingcard/RC // replace null datum for the re-added card
- RC = new()
- RC.name = "[SC.name]"
- RC.card_icon = SC.card_face
- cards += RC
- user.visible_message("[user] adds a card to the bottom of the deck.","I add the card to the bottom of the deck.")
- qdel(SC)
- update_icon()
-
-/obj/item/toy/cards/deck/cas/update_icon()
- if(cards.len < 26)
- icon_state = "deck_[deckstyle]_low"
-
-/obj/item/toy/cards/singlecard/cas
- name = "CAS card"
- desc = ""
- icon_state = "cas_white"
- flipped = 0
- var/card_face = "cas_white"
- var/blank = 0
- var/buffertext = "A funny bit of text."
-
-/obj/item/toy/cards/singlecard/cas/examine(mob/user)
- . = ..()
- if (flipped)
- . += "The card is face down."
- else if (blank)
- . += "The card is blank. Write on it with a pen."
- else
- . += "The card reads: [name]"
- . += "Alt-click to flip it."
-
-/obj/item/toy/cards/singlecard/cas/Flip()
- set name = "Flip Card"
- set hidden = 1
- set src in range(1)
- if(!ishuman(usr) || !usr.canUseTopic(src, BE_CLOSE))
- return
- if(!flipped)
- name = "CAS card"
- else if(flipped)
- name = buffertext
- flipped = !flipped
- update_icon()
-
-/obj/item/toy/cards/singlecard/cas/AltClick(mob/living/user)
- if(!ishuman(user) || !user.canUseTopic(src, BE_CLOSE))
- return
- Flip()
-
-/obj/item/toy/cards/singlecard/cas/update_icon()
- if(flipped)
- icon_state = "[card_face]_flipped"
- else
- icon_state = "[card_face]"
-
-/obj/item/toy/cards/singlecard/cas/attackby(obj/item/I, mob/living/user, params)
- if(istype(I, /obj/item/pen))
- if(!user.is_literate())
- to_chat(user, "I scribble illegibly on [src]!")
- return
- if(!blank)
- to_chat(user, "I cannot write on that card!")
- return
- var/cardtext = stripped_input(user, "What do you wish to write on the card?", "Card Writing", "", 50)
- if(!cardtext || !user.canUseTopic(src, BE_CLOSE))
- return
- name = cardtext
- buffertext = cardtext
- blank = 0
diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm
deleted file mode 100644
index 4adb0a90dd..0000000000
--- a/code/modules/holiday/easter.dm
+++ /dev/null
@@ -1,234 +0,0 @@
-/datum/round_event_control/easter
- name = "Easter Eggselence"
- holidayID = EASTER
- typepath = /datum/round_event/easter
- weight = -1
- max_occurrences = 1
- earliest_start = 0 MINUTES
-
-/datum/round_event/easter/announce(fake)
- priority_announce(pick("Hip-hop into Easter!","Find some Bunny's stash!","Today is National 'Hunt a Wabbit' Day.","Be kind, give Chocolate Eggs!"))
-
-
-/datum/round_event_control/rabbitrelease
- name = "Release the Rabbits!"
- holidayID = EASTER
- typepath = /datum/round_event/rabbitrelease
- weight = 5
- max_occurrences = 10
-
-/datum/round_event/rabbitrelease/announce(fake)
- priority_announce("Unidentified furry objects detected coming aboard [station_name()]. Beware of Adorable-ness.", "Fluffy Alert", 'sound/blank.ogg')
-
-
-/datum/round_event/rabbitrelease/start()
- for(var/obj/effect/landmark/R in GLOB.landmarks_list)
- if(R.name != "blobspawn")
- if(prob(35))
- if(isspaceturf(R.loc))
- new /mob/living/simple_animal/chicken/rabbit/space(R.loc)
- else
- new /mob/living/simple_animal/chicken/rabbit(R.loc)
-
-/mob/living/simple_animal/chicken/rabbit
- name = "\improper rabbit"
- desc = ""
- icon = 'icons/mob/easter.dmi'
- icon_state = "rabbit_white"
- icon_living = "rabbit_white"
- icon_dead = "rabbit_white_dead"
- speak = list("Hop into Easter!","Come get your eggs!","Prizes for everyone!")
- speak_emote = list("sniffles","twitches")
- emote_hear = list("hops.")
- emote_see = list("hops around","bounces up and down")
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1)
- egg_type = /obj/item/reagent_containers/food/snacks/egg/loaded
-// food_type = /obj/item/reagent_containers/food/snacks/grown/carrot
- eggsleft = 10
- eggsFertile = FALSE
- icon_prefix = "rabbit"
- feedMessages = list("It nibbles happily.","It noms happily.")
- layMessage = list("hides an egg.","scampers around suspiciously.","begins making a huge racket.","begins shuffling.")
-
-/mob/living/simple_animal/chicken/rabbit/space
- icon_prefix = "s_rabbit"
- icon_state = "s_rabbit_white"
- icon_living = "s_rabbit_white"
- icon_dead = "s_rabbit_white_dead"
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- maxbodytemp = 1500
- unsuitable_atmos_damage = 0
-
-//Easter Baskets
-/obj/item/storage/bag/easterbasket
- name = "Easter Basket"
- icon = 'icons/mob/easter.dmi'
- icon_state = "basket"
-
-/obj/item/storage/bag/easterbasket/Initialize()
- . = ..()
- var/datum/component/storage/STR = GetComponent(/datum/component/storage)
- STR.set_holdable(list(/obj/item/reagent_containers/food/snacks/egg, /obj/item/reagent_containers/food/snacks/chocolateegg, /obj/item/reagent_containers/food/snacks/boiledegg))
-
-/obj/item/storage/bag/easterbasket/proc/countEggs()
- cut_overlays()
- add_overlay("basket-grass")
- add_overlay("basket-egg[min(contents.len, 5)]")
-
-/obj/item/storage/bag/easterbasket/Exited()
- . = ..()
- countEggs()
-
-/obj/item/storage/bag/easterbasket/Entered()
- . = ..()
- countEggs()
-
-//Bunny Suit
-/obj/item/clothing/head/bunnyhead
- name = "Easter Bunny Head"
- icon_state = "bunnyhead"
- item_state = "bunnyhead"
- desc = ""
- slowdown = -1
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
-
-/obj/item/clothing/suit/bunnysuit
- name = "Easter Bunny Suit"
- desc = ""
- icon_state = "bunnysuit"
- item_state = "bunnysuit"
- slowdown = -1
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
-//Egg prizes and egg spawns!
-/obj/item/reagent_containers/food/snacks/egg
- var/containsPrize = FALSE
-
-/obj/item/reagent_containers/food/snacks/egg/loaded
- containsPrize = TRUE
-
-/obj/item/reagent_containers/food/snacks/egg/loaded/Initialize()
- . = ..()
- var/eggcolor = pick("blue","green","mime","orange","purple","rainbow","red","yellow")
- icon_state = "egg-[eggcolor]"
-
-/obj/item/reagent_containers/food/snacks/egg/proc/dispensePrize(turf/where)
- var/won = pick(/obj/item/clothing/head/bunnyhead,
- /obj/item/clothing/suit/bunnysuit,
-
- /obj/item/reagent_containers/food/snacks/chocolateegg,
- /obj/item/toy/balloon,
- /obj/item/toy/gun,
- /obj/item/toy/sword,
- /obj/item/toy/foamblade,
- /obj/item/toy/prize/ripley,
- /obj/item/toy/prize/honk,
- /obj/item/toy/plush/carpplushie,
- /obj/item/toy/redbutton,
- /obj/item/clothing/head/collectable/rabbitears)
- new won(where)
- new/obj/item/reagent_containers/food/snacks/chocolateegg(where)
-
-/obj/item/reagent_containers/food/snacks/egg/attack_self(mob/user)
- ..()
- if(containsPrize)
- to_chat(user, "I unwrap [src] and find a prize inside!")
- dispensePrize(get_turf(user))
- containsPrize = FALSE
- qdel(src)
-
-//Easter Recipes + food
-/obj/item/reagent_containers/food/snacks/hotcrossbun
- bitesize = 2
- name = "hot-cross bun"
- desc = ""
- icon_state = "hotcrossbun"
-
-/datum/crafting_recipe/food/hotcrossbun
- name = "Hot-Cross Bun"
- reqs = list(
- /obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
- /datum/reagent/consumable/sugar = 1
- )
- result = /obj/item/reagent_containers/food/snacks/hotcrossbun
- category = CAT_NONE
-
-
-/obj/item/reagent_containers/food/snacks/store/cake/brioche
- name = "brioche cake"
- desc = ""
- icon_state = "briochecake"
- slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/brioche
- slices_num = 6
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/vitamin = 2)
-
-/obj/item/reagent_containers/food/snacks/cakeslice/brioche
- name = "brioche cake slice"
- desc = ""
- icon_state = "briochecake_slice"
- filling_color = "#FFD700"
-
-/datum/crafting_recipe/food/briochecake
- name = "Brioche cake"
- reqs = list(
- /obj/item/reagent_containers/food/snacks/store/cake/plain = 1,
- /datum/reagent/consumable/sugar = 2
- )
- result = /obj/item/reagent_containers/food/snacks/store/cake/brioche
- category = CAT_NONE
-
-/obj/item/reagent_containers/food/snacks/scotchegg
- name = "scotch egg"
- desc = ""
- icon_state = "scotchegg"
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 2)
- bitesize = 3
- filling_color = "#FFFFF0"
- list_reagents = list(/datum/reagent/consumable/nutriment = 6)
-
-/datum/crafting_recipe/food/scotchegg
- name = "Scotch egg"
- reqs = list(
- /datum/reagent/consumable/sodiumchloride = 1,
- /datum/reagent/consumable/blackpepper = 1,
- /obj/item/reagent_containers/food/snacks/boiledegg = 1,
- /obj/item/reagent_containers/food/snacks/faggot = 1
- )
- result = /obj/item/reagent_containers/food/snacks/scotchegg
- category = CAT_NONE
-
-/obj/item/reagent_containers/food/snacks/soup/mammi
- name = "Mammi"
- desc = ""
- icon_state = "mammi"
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 1)
- list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 1)
-
-/datum/crafting_recipe/food/mammi
- name = "Mammi"
- reqs = list(
- /obj/item/reagent_containers/food/snacks/store/bread/plain = 1,
- /obj/item/reagent_containers/food/snacks/chocolatebar = 1,
- /datum/reagent/consumable/milk = 5
- )
- result = /obj/item/reagent_containers/food/snacks/soup/mammi
- category = CAT_NONE
-
-/obj/item/reagent_containers/food/snacks/chocolatebunny
- name = "chocolate bunny"
- desc = ""
- icon_state = "chocolatebunny"
- bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1)
- list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sugar = 2, /datum/reagent/consumable/coco = 2)
- filling_color = "#A0522D"
-
-/datum/crafting_recipe/food/chocolatebunny
- name = "Chocolate bunny"
- reqs = list(
- /datum/reagent/consumable/sugar = 2,
- /obj/item/reagent_containers/food/snacks/chocolatebar = 1
- )
- result = /obj/item/reagent_containers/food/snacks/chocolatebunny
- category = CAT_NONE
diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm
index 3829ebac0f..6057b7aa95 100644
--- a/code/modules/holiday/holidays.dm
+++ b/code/modules/holiday/holidays.dm
@@ -61,540 +61,3 @@
return TRUE
return FALSE
-
-// The actual holidays
-/*
-/datum/holiday/new_year
- name = NEW_YEAR
- begin_day = 30
- begin_month = DECEMBER
- end_day = 2
- end_month = JANUARY
- drone_hat = /obj/item/clothing/head/festive
-
-/datum/holiday/new_year/getStationPrefix()
- return pick("Party","New","Hangover","Resolution", "Auld")
-
-/datum/holiday/groundhog
- name = "Groundhog Day"
- begin_day = 2
- begin_month = FEBRUARY
- drone_hat = /obj/item/clothing/head/helmet/space/chronos
-
-/datum/holiday/groundhog/getStationPrefix()
- return pick("Deja Vu") //I have been to this place before
-
-/datum/holiday/valentines
- name = VALENTINES
- begin_day = 13
- end_day = 15
- begin_month = FEBRUARY
-
-/datum/holiday/valentines/getStationPrefix()
- return pick("Love","Amore","Single","Smootch","Hug")
-
-/datum/holiday/birthday
- name = "Birthday of Space Station 13"
- begin_day = 16
- begin_month = FEBRUARY
- drone_hat = /obj/item/clothing/head/festive
-
-/datum/holiday/birthday/greet()
- var/game_age = text2num(time2text(world.timeofday, "YY")) - 3
- var/Fact
- switch(game_age)
- if(16)
- Fact = " SS13 is now old enough to drive!"
- if(18)
- Fact = " SS13 is now legal!"
- if(21)
- Fact = " SS13 can now drink!"
- if(26)
- Fact = " SS13 can now rent a car!"
- if(30)
- Fact = " SS13 can now go home and be a family man!"
- if(35)
- Fact = " SS13 can now run for President of the United States!"
- if(40)
- Fact = " SS13 can now suffer a midlife crisis!"
- if(50)
- Fact = " Happy golden anniversary!"
- if(65)
- Fact = " SS13 can now start thinking about retirement!"
- if(96)
- Fact = " Please send a time machine back to pick me up, I need to update the time formatting for this feature!" //See you later suckers
- if(!Fact)
- Fact = " SS13 is now [game_age] years old!"
-
- return "Say 'Happy Birthday' to Space Station 13, first publicly playable on February 16th, 2003![Fact]"
-
-/datum/holiday/random_kindness
- name = "Random Acts of Kindness Day"
- begin_day = 17
- begin_month = FEBRUARY
-
-/datum/holiday/random_kindness/greet()
- return "Go do some random acts of kindness for a stranger!" //haha yeah right
-
-/datum/holiday/leap
- name = "Leap Day"
- begin_day = 29
- begin_month = FEBRUARY
-
-/datum/holiday/pi
- name = "Pi Day"
- begin_day = 14
- begin_month = MARCH
-
-/datum/holiday/pi/getStationPrefix()
- return pick("Sine","Cosine","Tangent","Secant", "Cosecant", "Cotangent")
-
-/datum/holiday/no_this_is_patrick
- name = "St. Patrick's Day"
- begin_day = 17
- begin_month = MARCH
- drone_hat = /obj/item/clothing/head/soft/green
-
-/datum/holiday/no_this_is_patrick/getStationPrefix()
- return pick("Blarney","Green","Leprechaun","Booze")
-
-/datum/holiday/no_this_is_patrick/greet()
- return "Happy National Inebriation Day!"
-
-/datum/holiday/april_fools
- name = APRIL_FOOLS
- begin_day = 1
- end_day = 1
- begin_month = APRIL
-
-/datum/holiday/april_fools/celebrate()
- SSjob.set_overflow_role("Clown")
- SSticker.login_music = 'sound/blank.ogg'
- for(var/i in GLOB.new_player_list)
- var/mob/dead/new_player/P = i
- if(P.client)
- P.client.playtitlemusic()
-
-/datum/holiday/spess
- name = "Cosmonautics Day"
- begin_day = 12
- begin_month = APRIL
- drone_hat = /obj/item/clothing/head/syndicatefake
-
-/datum/holiday/spess/greet()
- return "On this day over 600 years ago, Comrade Yuri Gagarin first ventured into space!"
-
-/datum/holiday/fourtwenty
- name = "Four-Twenty"
- begin_day = 20
- begin_month = APRIL
-
-/datum/holiday/fourtwenty/getStationPrefix()
- return pick("Snoop","Blunt","Toke","Dank","Cheech","Chong")
-
-/datum/holiday/tea
- name = "National Tea Day"
- begin_day = 21
- begin_month = APRIL
-
-/datum/holiday/tea/getStationPrefix()
- return pick("Crumpet","Assam","Oolong","Pu-erh","Sweet Tea","Green","Black")
-
-/datum/holiday/earth
- name = "Earth Day"
- begin_day = 22
- begin_month = APRIL
-
-/datum/holiday/labor
- name = "Labor Day"
- begin_day = 1
- begin_month = MAY
- drone_hat = /obj/item/clothing/head/hardhat
-
-/datum/holiday/firefighter
- name = "Firefighter's Day"
- begin_day = 4
- begin_month = MAY
- drone_hat = /obj/item/clothing/head/hardhat/red
-
-/datum/holiday/firefighter/getStationPrefix()
- return pick("Burning","Blazing","Plasma","Fire")
-
-/datum/holiday/bee
- name = "Bee Day"
- begin_day = 20
- begin_month = MAY
- drone_hat = /obj/item/clothing/mask/rat/bee
-
-/datum/holiday/bee/getStationPrefix()
- return pick("Bee","Honey","Hive","Africanized","Mead","Buzz")
-
-/datum/holiday/summersolstice
- name = "Summer Solstice"
- begin_day = 21
- begin_month = JUNE
-
-/datum/holiday/doctor
- name = "Doctor's Day"
- begin_day = 1
- begin_month = JULY
- drone_hat = /obj/item/clothing/head/nursehat
-
-/datum/holiday/UFO
- name = "UFO Day"
- begin_day = 2
- begin_month = JULY
- drone_hat = /obj/item/clothing/mask/facehugger/dead
-
-/datum/holiday/UFO/getStationPrefix() //Is such a thing even possible?
- return pick("Ayy","Truth","Tsoukalos","Mulder","Scully") //Yes it is!
-
-/datum/holiday/USA
- name = "Independence Day"
- begin_day = 4
- begin_month = JULY
-
-/datum/holiday/USA/getStationPrefix()
- return pick("Independent","American","Burger","Bald Eagle","Star-Spangled", "Fireworks")
-
-/datum/holiday/writer
- name = "Writer's Day"
- begin_day = 8
- begin_month = JULY
-
-/datum/holiday/france
- name = "Bastille Day"
- begin_day = 14
- begin_month = JULY
- drone_hat = /obj/item/clothing/head/beret
-
-/datum/holiday/france/getStationPrefix()
- return pick("Francais","Fromage", "Zut", "Merde")
-
-/datum/holiday/france/greet()
- return "Do you hear the people sing?"
-
-/datum/holiday/friendship
- name = "Friendship Day"
- begin_day = 30
- begin_month = JULY
-
-/datum/holiday/friendship/greet()
- return "Have a magical [name]!"
-
-/datum/holiday/beer
- name = "Beer Day"
-
-/datum/holiday/beer/shouldCelebrate(dd, mm, yy, ww, ddd)
- if(mm == 8 && ddd == FRIDAY && ww == 1) //First Friday in August
- return TRUE
- return FALSE
-
-/datum/holiday/beer/getStationPrefix()
- return pick("Stout","Porter","Lager","Ale","Malt","Bock","Doppelbock","Hefeweizen","Pilsner","IPA","Lite") //I'm sorry for the last one
-
-/datum/holiday/pirate
- name = "Talk-Like-a-Pirate Day"
- begin_day = 19
- begin_month = SEPTEMBER
- drone_hat = /obj/item/clothing/head/pirate
-
-/datum/holiday/pirate/greet()
- return "Ye be talkin' like a pirate today or else ye'r walkin' tha plank, matey!"
-
-/datum/holiday/pirate/getStationPrefix()
- return pick("Yarr","Scurvy","Yo-ho-ho")
-
-/datum/holiday/programmers
- name = "Programmers' Day"
-
-/datum/holiday/programmers/shouldCelebrate(dd, mm, yy, ww, ddd) //Programmer's day falls on the 2^8th day of the year
- if(mm == 9)
- if(yy/4 == round(yy/4)) //Note: Won't work right on September 12th, 2200 (at least it's a Friday!)
- if(dd == 12)
- return 1
- else
- if(dd == 13)
- return 1
- return 0
-
-/datum/holiday/programmers/getStationPrefix()
- return pick("span>","DEBUG: ","null","/list","EVENT PREFIX NOT FOUND") //Portability
-
-/datum/holiday/questions
- name = "Stupid-Questions Day"
- begin_day = 28
- begin_month = SEPTEMBER
-
-/datum/holiday/questions/greet()
- return "Are you having a happy [name]?"
-
-/datum/holiday/animal
- name = "Animal's Day"
- begin_day = 4
- begin_month = OCTOBER
-
-/datum/holiday/animal/getStationPrefix()
- return pick("Parrot","Corgi","Cat","Pug","Goat","Fox")
-
-/datum/holiday/smile
- name = "Smiling Day"
- begin_day = 7
- begin_month = OCTOBER
- drone_hat = /obj/item/clothing/head/papersack/smiley
-
-/datum/holiday/boss
- name = "Boss' Day"
- begin_day = 16
- begin_month = OCTOBER
- drone_hat = /obj/item/clothing/head/that
-
-/datum/holiday/halloween
- name = HALLOWEEN
- begin_day = 28
- begin_month = OCTOBER
- end_day = 2
- end_month = NOVEMBER
-
-/datum/holiday/halloween/greet()
- return "Have a spooky Halloween!"
-
-/datum/holiday/halloween/getStationPrefix()
- return pick("Bone-Rattling","Mr. Bones' Own","2SPOOKY","Spooky","Scary","Skeletons")
-
-/datum/holiday/vegan
- name = "Vegan Day"
- begin_day = 1
- begin_month = NOVEMBER
-
-/datum/holiday/vegan/getStationPrefix()
- return pick("Tofu", "Tempeh", "Seitan", "Tofurkey")
-
-/datum/holiday/october_revolution
- name = "October Revolution"
- begin_day = 6
- begin_month = NOVEMBER
- end_day = 7
-
-/datum/holiday/october_revolution/getStationPrefix()
- return pick("Communist", "Soviet", "Bolshevik", "Socialist", "Red", "Workers'")
-
-/datum/holiday/kindness
- name = "Kindness Day"
- begin_day = 13
- begin_month = NOVEMBER
-
-/datum/holiday/flowers
- name = "Flowers Day"
- begin_day = 19
- begin_month = NOVEMBER
- drone_hat = /obj/item/reagent_containers/food/snacks/grown/moonflower
-
-/datum/holiday/hello
- name = "Saying-'Hello' Day"
- begin_day = 21
- begin_month = NOVEMBER
-
-/datum/holiday/hello/greet()
- return "[pick(list("Aloha", "Bonjour", "Hello", "Hi", "Greetings", "Salutations", "Bienvenidos", "Hola", "Howdy", "Ni hao", "Guten Tag", "Konnichiwa", "G'day cunt"))]! " + ..()
-
-/datum/holiday/human_rights
- name = "Human-Rights Day"
- begin_day = 10
- begin_month = DECEMBER
-
-/datum/holiday/monkey
- name = "Monkey Day"
- begin_day = 14
- begin_month = DECEMBER
- drone_hat = /obj/item/clothing/mask/gas/monkeymask
-
-/datum/holiday/thanksgiving
- name = "Thanksgiving in the United States"
- begin_week = 4
- begin_month = NOVEMBER
- begin_weekday = THURSDAY
- drone_hat = /obj/item/clothing/head/that //This is the closest we can get to a pilgrim's hat
-
-/datum/holiday/thanksgiving/canada
- name = "Thanksgiving in Canada"
- begin_week = 2
- begin_month = OCTOBER
- begin_weekday = MONDAY
-
-/datum/holiday/columbus
- name = "Columbus Day"
- begin_week = 2
- begin_month = OCTOBER
- begin_weekday = MONDAY
-
-/datum/holiday/mother
- name = "Mother's Day"
- begin_week = 2
- begin_month = MAY
- begin_weekday = SUNDAY
-
-/datum/holiday/mother/greet()
- return "Happy Mother's Day in most of the Americas, Asia, and Oceania!"
-
-/datum/holiday/father
- name = "Father's Day"
- begin_week = 3
- begin_month = JUNE
- begin_weekday = SUNDAY
-
-/datum/holiday/moth
- name = "Moth Week"
-
-/datum/holiday/moth/shouldCelebrate(dd, mm, yy, ww, ddd) //National Moth Week falls on the last full week of July
- return mm == JULY && (ww == 4 || (ww == 5 && ddd == SUNDAY))
-
-/datum/holiday/moth/getStationPrefix()
- return pick("Mothball","Lepidopteran","Lightbulb","Moth","Giant Atlas","Twin-spotted Sphynx","Madagascan Sunset","Luna","Death's Head","Emperor Gum","Polyphenus","Oleander Hawk","Io","Rosy Maple","Cecropia","Noctuidae","Giant Leopard","Dysphania Militaris","Garden Tiger")
-
-/datum/holiday/ramadan
- name = "Start of Ramadan"
-
-/*
-
-For anyone who stumbles on this some time in the future: this was calibrated to 2017
-Calculated based on the start and end of Ramadan in 2000 (First year of the Gregorian Calendar supported by BYOND)
-This is going to be accurate for at least a decade, likely a lot longer
-Since the date fluctuates, it may be inaccurate one year and then accurate for several after
-Inaccuracies will never be by more than one day for at least a hundred years
-Finds the number of days since the day in 2000 and gets the modulo of that and the average length of a Muslim year since the first one (622 AD, Gregorian)
-Since Ramadan is an entire month that lasts 29.5 days on average, the start and end are holidays and are calculated from the two dates in 2000
-
-*/
-
-/datum/holiday/ramadan/shouldCelebrate(dd, mm, yy, ww, ddd)
- if (round(((world.realtime - 285984000) / 864000) % 354.373435326843) == 0)
- return TRUE
- return FALSE
-
-/datum/holiday/ramadan/getStationPrefix()
- return pick("Harm","Halaal","Jihad","Muslim")
-
-/datum/holiday/ramadan/end
- name = "End of Ramadan"
-
-/datum/holiday/ramadan/end/shouldCelebrate(dd, mm, yy, ww, ddd)
- if (round(((world.realtime - 312768000) / 864000) % 354.373435326843) == 0)
- return TRUE
- return FALSE
-
-/datum/holiday/lifeday
- name = "Life Day"
- begin_day = 17
- begin_month = NOVEMBER
-
-/datum/holiday/lifeday/getStationPrefix()
- return pick("Itchy", "Lumpy", "Malla", "Kazook") //he really pronounced it "Kazook", I wish I was making shit up
-
-/datum/holiday/doomsday
- name = "Mayan Doomsday Anniversary"
- begin_day = 21
- begin_month = DECEMBER
- drone_hat = /obj/item/clothing/mask/rat/tribal
-
-/datum/holiday/xmas
- name = CHRISTMAS
- begin_day = 22
- begin_month = DECEMBER
- end_day = 27
- drone_hat = /obj/item/clothing/head/santa
-
-/datum/holiday/xmas/greet()
- return "Have a merry Christmas!"
-
-/datum/holiday/xmas/celebrate()
- SSticker.OnRoundstart(CALLBACK(src, PROC_REF(roundstart_celebrate)))
- GLOB.maintenance_loot += list(
- /obj/item/toy/xmas_cracker = 3,
- /obj/item/clothing/head/santa = 1,
- /obj/item/a_gift/anything = 1
- )
-
-/datum/holiday/xmas/proc/roundstart_celebrate()
- for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines)
- Monitor.icon_state_on = "entertainment_xmas"
-
- for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list)
- Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian))
-
-
-/datum/holiday/festive_season
- name = FESTIVE_SEASON
- begin_day = 1
- begin_month = DECEMBER
- end_day = 31
- drone_hat = /obj/item/clothing/head/santa
-
-/datum/holiday/festive_season/greet()
- return "Have a nice festive season!"
-
-/datum/holiday/boxing
- name = "Boxing Day"
- begin_day = 26
- begin_month = DECEMBER
-
-/datum/holiday/friday_thirteenth
- name = "Friday the 13th"
-
-/datum/holiday/friday_thirteenth/shouldCelebrate(dd, mm, yy, ww, ddd)
- if(dd == 13 && ddd == FRIDAY)
- return TRUE
- return FALSE
-
-/datum/holiday/friday_thirteenth/getStationPrefix()
- return pick("Mike","Friday","Evil","Myers","Murder","Deathly","Stabby")
-
-/datum/holiday/easter
- name = EASTER
- drone_hat = /obj/item/clothing/head/rabbitears
- var/const/days_early = 1 //to make editing the holiday easier
- var/const/days_extra = 1
-
-/datum/holiday/easter/shouldCelebrate(dd, mm, yy, ww, ddd)
- if(!begin_month)
- current_year = text2num(time2text(world.timeofday, "YYYY"))
- var/list/easterResults = EasterDate(current_year+year_offset)
-
- begin_day = easterResults["day"]
- begin_month = easterResults["month"]
-
- end_day = begin_day + days_extra
- end_month = begin_month
- if(end_day >= 32 && end_month == MARCH) //begins in march, ends in april
- end_day -= 31
- end_month++
- if(end_day >= 31 && end_month == APRIL) //begins in april, ends in june
- end_day -= 30
- end_month++
-
- begin_day -= days_early
- if(begin_day <= 0)
- if(begin_month == APRIL)
- begin_day += 31
- begin_month-- //begins in march, ends in april
-
- return ..()
-
-/datum/holiday/easter/celebrate()
- GLOB.maintenance_loot += list(
- /obj/item/reagent_containers/food/snacks/egg/loaded = 15,
- /obj/item/storage/bag/easterbasket = 15)
-
-/datum/holiday/easter/greet()
- return "Greetings! Have a Happy Easter and keep an eye out for Easter Bunnies!"
-
-/datum/holiday/easter/getStationPrefix()
- return pick("Fluffy","Bunny","Easter","Egg")
-
-/datum/holiday/ianbirthday
- name = "Ian's Birthday"
- begin_day = 15
- begin_month = MARCH
-
-/datum/holiday/ianbirthday/greet()
- return "Happy birthday, Ian!"*/
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index ef70f4fc7b..62c445c619 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -92,25 +92,9 @@
/obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params)
..()
- if (istype(O, /obj/item/plant_analyzer))
- var/msg = "*---------*\n This is \a [src].\n"
- if(seed)
- msg += seed.get_analyzer_text()
- var/reag_txt = ""
- if(seed)
- for(var/reagent_id in seed.reagents_add)
- var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_id]
- var/amt = reagents.get_reagent_amount(reagent_id)
- reag_txt += "\n- [R.name]: [amt]"
-
- if(reag_txt)
- msg += reag_txt
- msg += "
*---------*"
- to_chat(user, msg)
- else
- if(seed)
- for(var/datum/plant_gene/trait/T in seed.genes)
- T.on_attackby(src, O, user)
+ if(seed)
+ for(var/datum/plant_gene/trait/T in seed.genes)
+ T.on_attackby(src, O, user)
// Various gene procs
@@ -230,7 +214,7 @@
if(cotton.amount > old_cotton_amount)
to_chat(user, "I add the newly-formed [cotton_name] to the stack. It now contains [cotton.amount] [cotton_name].")
qdel(src)
-
+
/obj/item/grown/novaflower Could be rerolled to fyrtius flowers I suppose, could be useful inspiration
name = "novaflower"
@@ -276,7 +260,7 @@
..()
if(!user.gloves)
to_chat(user, "The [name] burns my bare hand!")
- user.adjustFireLoss(rand(1, 5))
+ user.adjustFireLoss(rand(1, 5))
// corpse flower effect, another worth saving
/obj/item/seeds/starthistle/corpse_flower/process()
diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm
index be54aec8b7..e6d27b9ff9 100644
--- a/code/modules/hydroponics/grown/kudzu.dm
+++ b/code/modules/hydroponics/grown/kudzu.dm
@@ -27,8 +27,6 @@
return (BRUTELOSS)
/obj/item/seeds/kudzu/proc/plant(mob/user)
- if(isspaceturf(user.loc))
- return
if(!isturf(user.loc))
to_chat(user, "I need more space to plant [src].")
return FALSE
diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm
index 8b224261ce..439407fde5 100644
--- a/code/modules/hydroponics/grown/mushrooms.dm
+++ b/code/modules/hydroponics/grown/mushrooms.dm
@@ -125,7 +125,7 @@
growthstages = 3
genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism)
growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
- mutatelist = list(/obj/item/seeds/plump/walkingmushroom)
+ mutatelist = list()
reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.1)
/obj/item/reagent_containers/food/snacks/grown/mushroom/plumphelmet
@@ -136,44 +136,6 @@
filling_color = "#9370DB"
distill_reagent = /datum/reagent/consumable/ethanol/manly_dorf
-// Walking Mushroom
-/obj/item/seeds/plump/walkingmushroom
- name = "pack of walking mushroom mycelium"
- desc = ""
- icon_state = "mycelium-walkingmushroom"
- species = "walkingmushroom"
- plantname = "Walking Mushrooms"
- product = /obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom
- lifespan = 30
- endurance = 30
- maturation = 5
- yield = 1
- growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
- mutatelist = list()
- reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.05, /datum/reagent/consumable/nutriment = 0.15)
- rarity = 30
-
-/obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom
- seed = /obj/item/seeds/plump/walkingmushroom
- name = "walking mushroom"
- desc = ""
- icon_state = "walkingmushroom"
- filling_color = "#9370DB"
- can_distill = FALSE
-
-/obj/item/reagent_containers/food/snacks/grown/mushroom/walkingmushroom/attack_self(mob/user)
- if(isspaceturf(user.loc))
- return
- var/mob/living/simple_animal/hostile/mushroom/M = new /mob/living/simple_animal/hostile/mushroom(user.loc)
- M.maxHealth += round(seed.endurance / 4)
- M.melee_damage_lower += round(seed.potency / 20)
- M.melee_damage_upper += round(seed.potency / 20)
- M.move_to_delay -= round(seed.production / 50)
- M.health = M.maxHealth
- qdel(src)
- to_chat(user, "I plant the walking mushroom.")
-
-
// Chanterelle
/obj/item/seeds/chanter
name = "pack of chanterelle mycelium"
diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm
index 44f2086750..b65149edbd 100644
--- a/code/modules/hydroponics/grown/towercap.dm
+++ b/code/modules/hydroponics/grown/towercap.dm
@@ -41,7 +41,6 @@
throw_speed = 2
throw_range = 3
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
- var/plank_type = /obj/item/stack/sheet/mineral/wood
var/plank_name = "wooden planks"
var/static/list/accepted = typecacheof(list(/*/obj/item/reagent_containers/food/snacks/grown/tobacco,
/obj/item/reagent_containers/food/snacks/grown/tea,
@@ -49,23 +48,6 @@
/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus,
/obj/item/reagent_containers/food/snacks/produce/wheat*/))
-///obj/item/grown/log/attackby(obj/item/W, mob/user, params)
-// if(W.get_sharpness())
-// user.show_message("I make [plank_name] out of \the [src]!", MSG_VISUAL)
-// var/seed_modifier = 0
-// if(seed)
-// seed_modifier = round(seed.potency / 25)
-// var/obj/item/stack/plank = new plank_type(user.loc, 1 + seed_modifier)
-// var/old_plank_amount = plank.amount
-// for(var/obj/item/stack/ST in user.loc)
-// if(ST != plank && istype(ST, plank_type) && ST.amount < ST.max_amount)
-// ST.attackby(plank, user) //we try to transfer all old unfinished stacks to the new stack we created.
-// if(plank.amount > old_plank_amount)
-// to_chat(user, "I add the newly-formed [plank_name] to the stack. It now contains [plank.amount] [plank_name].")
-// qdel(src)
-// else
-// return ..()
-
/obj/item/grown/log/proc/CheckAccepted(obj/item/I)
return is_type_in_typecache(I, accepted)
@@ -74,7 +56,6 @@
name = "steel-cap log"
desc = ""
icon_state = "steellogs"
- plank_type = /obj/item/stack/rods
plank_name = "rods"
/obj/item/grown/log/steel/CheckAccepted(obj/item/I)
@@ -103,7 +84,6 @@
name = "bamboo log"
desc = ""
icon_state = "bamboo"
- plank_type = /obj/item/stack/sheet/mineral/bamboo
plank_name = "bamboo sticks"
/obj/item/grown/log/bamboo/CheckAccepted(obj/item/I)
@@ -154,25 +134,6 @@
return ..()
/obj/structure/bonfire/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/stack/rods) && !can_buckle && !grill)
- var/obj/item/stack/rods/R = W
- var/choice = input(user, "What would you like to construct?", "Bonfire") as null|anything in list("Stake","Grill")
- switch(choice)
- if("Stake")
- R.use(1)
- can_buckle = TRUE
- buckle_requires_restraints = TRUE
- to_chat(user, "I add a rod to \the [src].")
- var/mutable_appearance/rod_underlay = mutable_appearance('icons/obj/hydroponics/equipment.dmi', "bonfire_rod")
- rod_underlay.pixel_y = 16
- underlays += rod_underlay
- if("Grill")
- R.use(1)
- grill = TRUE
- to_chat(user, "I add a grill to \the [src].")
- add_overlay("bonfire_grill")
- else
- return ..()
if(W.get_temperature())
StartBurning()
if(grill)
@@ -202,8 +163,6 @@
var/obj/item/grown/log/L = new /obj/item/grown/log(src.loc)
L.pixel_x += rand(1,4)
L.pixel_y += rand(1,4)
- if(can_buckle || grill)
- new /obj/item/stack/rods(loc, 1)
qdel(src)
return
diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm
index 0a7f16c6de..acc31f085d 100644
--- a/code/modules/hydroponics/growninedible.dm
+++ b/code/modules/hydroponics/growninedible.dm
@@ -31,17 +31,6 @@
transform *= TRANSFORM_USING_VARIABLE(seed.potency, 100) + 0.5
add_juice()
-
-/obj/item/grown/attackby(obj/item/O, mob/user, params)
- ..()
- if (istype(O, /obj/item/plant_analyzer))
- var/msg = "*---------*\n This is \a [src]\n"
- if(seed)
- msg += seed.get_analyzer_text()
- msg += ""
- to_chat(usr, msg)
- return
-
/obj/item/grown/proc/add_juice()
if(reagents)
return 1
diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm
deleted file mode 100644
index 1e3c597b68..0000000000
--- a/code/modules/hydroponics/hydroitemdefines.dm
+++ /dev/null
@@ -1,215 +0,0 @@
-// Plant analyzer
-/obj/item/plant_analyzer
- name = "plant analyzer"
- desc = ""
- icon = 'icons/obj/device.dmi'
- icon_state = "hydro"
- item_state = "analyzer"
- lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
- w_class = WEIGHT_CLASS_TINY
- slot_flags = ITEM_SLOT_BELT
- custom_materials = list(/datum/material/iron=30, /datum/material/glass=20)
-
-// *************************************
-// Hydroponics Tools
-// *************************************
-
-/obj/item/reagent_containers/spray/weedspray // -- Skie
- desc = ""
- icon = 'icons/obj/hydroponics/equipment.dmi'
- name = "weed spray"
- icon_state = "weedspray"
- item_state = "spraycan"
- lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi'
- volume = 100
- list_reagents = list(/datum/reagent/toxin/plantbgone/weedkiller = 100)
-
-/obj/item/reagent_containers/spray/weedspray/suicide_act(mob/user)
- user.visible_message("[user] is huffing [src]! It looks like [user.p_theyre()] trying to commit suicide!")
- return (TOXLOSS)
-
-/obj/item/reagent_containers/spray/pestspray // -- Skie
- desc = ""
- icon = 'icons/obj/hydroponics/equipment.dmi'
- name = "pest spray"
- icon_state = "pestspray"
- item_state = "plantbgone"
- lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi'
- volume = 100
- list_reagents = list(/datum/reagent/toxin/pestkiller = 100)
-
-/obj/item/reagent_containers/spray/pestspray/suicide_act(mob/user)
- user.visible_message("[user] is huffing [src]! It looks like [user.p_theyre()] trying to commit suicide!")
- return (TOXLOSS)
-
-/obj/item/cultivator
- name = "cultivator"
- desc = ""
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "cultivator"
- item_state = "cultivator"
- lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi'
- flags_1 = CONDUCT_1
- force = 5
- throwforce = 7
- w_class = WEIGHT_CLASS_SMALL
- custom_materials = list(/datum/material/iron=50)
- attack_verb = list("slashed", "sliced", "cut", "clawed")
- hitsound = 'sound/blank.ogg'
-
-/obj/item/cultivator/suicide_act(mob/user)
- user.visible_message("[user] is scratching [user.p_their()] back as hard as [user.p_they()] can with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
- return (BRUTELOSS)
-
-/obj/item/cultivator/rake
- name = "rake"
- icon_state = "rake"
- w_class = WEIGHT_CLASS_NORMAL
- attack_verb = list("slashed", "sliced", "bashed", "clawed")
- hitsound = null
- custom_materials = null
- flags_1 = NONE
- resistance_flags = FLAMMABLE
-
-/obj/item/cultivator/rake/Crossed(mob/living/carbon/human/H)
- if(istype(H) && has_gravity(loc) && HAS_TRAIT(H, TRAIT_CLUMSY) && !H.resting)
- H.confused = max(H.confused, 10)
- H.Stun(20)
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- H.visible_message("[H] steps on [src] causing the handle to hit [H.p_them()] right in the face!", \
- "I step on [src] causing the handle to hit you right in the face!")
-
-/obj/item/hatchet
- name = "hatchet"
- desc = ""
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "hatchet"
- item_state = "hatchet"
- lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi'
- flags_1 = CONDUCT_1
- force = 12
- w_class = WEIGHT_CLASS_SMALL
- throwforce = 15
- throw_speed = 1
- throw_range = 4
- custom_materials = list(/datum/material/iron = 15000)
- attack_verb = list("chopped", "torn", "cut")
- hitsound = 'sound/blank.ogg'
- sharpness = IS_SHARP
-
-/obj/item/hatchet/Initialize()
- . = ..()
- AddComponent(/datum/component/butchering, 70, 100)
-
-/obj/item/hatchet/suicide_act(mob/user)
- user.visible_message("[user] is chopping at [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!")
- playsound(src, 'sound/blank.ogg', 50, TRUE, -1)
- return (BRUTELOSS)
-
-/obj/item/hatchet/wooden
- desc = ""
- icon_state = "woodhatchet"
- custom_materials = null
- flags_1 = NONE
-
-/obj/item/scythe
- icon_state = "scythe0"
- lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi'
- name = "scythe"
- desc = ""
- force = 13
- throwforce = 5
- throw_speed = 2
- throw_range = 3
- w_class = WEIGHT_CLASS_BULKY
- flags_1 = CONDUCT_1
- armor_penetration = 20
- slot_flags = ITEM_SLOT_BACK
- attack_verb = list("chopped", "sliced", "cut", "reaped")
- hitsound = 'sound/blank.ogg'
- var/swiping = FALSE
-
-/obj/item/scythe/Initialize()
- . = ..()
- AddComponent(/datum/component/butchering, 90, 105)
-
-/obj/item/scythe/suicide_act(mob/user)
- user.visible_message("[user] is beheading [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!")
- if(iscarbon(user))
- var/mob/living/carbon/C = user
- var/obj/item/bodypart/BP = C.get_bodypart(BODY_ZONE_HEAD)
- if(BP)
- BP.drop_limb()
- playsound(src, "desceration" ,50, TRUE, -1)
- return (BRUTELOSS)
-
-/obj/item/scythe/pre_attack(atom/A, mob/living/user, params)
- if(swiping || !istype(A, /obj/structure/spacevine) || get_turf(A) == get_turf(user))
- return ..()
- var/turf/user_turf = get_turf(user)
- var/dir_to_target = get_dir(user_turf, get_turf(A))
- swiping = TRUE
- var/static/list/scythe_slash_angles = list(0, 45, 90, -45, -90)
- for(var/i in scythe_slash_angles)
- var/turf/T = get_step(user_turf, turn(dir_to_target, i))
- for(var/obj/structure/spacevine/V in T)
- if(user.Adjacent(V))
- melee_attack_chain(user, V)
- swiping = FALSE
- return TRUE
-
-// *************************************
-// Nutrient defines for hydroponics
-// *************************************
-
-
-/obj/item/reagent_containers/glass/bottle/nutrient
- name = "bottle of nutrient"
- volume = 50
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(1,2,5,10,15,25,50)
-
-/obj/item/reagent_containers/glass/bottle/nutrient/Initialize()
- . = ..()
- pixel_x = rand(-5, 5)
- pixel_y = rand(-5, 5)
-
-
-/obj/item/reagent_containers/glass/bottle/nutrient/ez
- name = "bottle of E-Z-Nutrient"
- desc = ""
- list_reagents = list(/datum/reagent/plantnutriment/eznutriment = 50)
-
-/obj/item/reagent_containers/glass/bottle/nutrient/l4z
- name = "bottle of Left 4 Zed"
- desc = ""
- list_reagents = list(/datum/reagent/plantnutriment/left4zednutriment = 50)
-
-/obj/item/reagent_containers/glass/bottle/nutrient/rh
- name = "bottle of Robust Harvest"
- desc = ""
- list_reagents = list(/datum/reagent/plantnutriment/robustharvestnutriment = 50)
-
-/obj/item/reagent_containers/glass/bottle/nutrient/empty
- name = "bottle"
-
-/obj/item/reagent_containers/glass/bottle/killer
- volume = 50
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(1,2,5,10,15,25,50)
-
-/obj/item/reagent_containers/glass/bottle/killer/weedkiller
- name = "bottle of weed killer"
- desc = ""
- list_reagents = list(/datum/reagent/toxin/plantbgone/weedkiller = 50)
-
-/obj/item/reagent_containers/glass/bottle/killer/pestkiller
- name = "bottle of pest spray"
- desc = ""
- list_reagents = list(/datum/reagent/toxin/pestkiller = 50)
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 4c9f1303f6..8c7be976bd 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -337,64 +337,6 @@
/obj/item/seeds/proc/on_chem_reaction(datum/reagents/S) //in case seeds have some special interaction with special chems
return
-/obj/item/seeds/attackby(obj/item/O, mob/user, params)
- if (istype(O, /obj/item/plant_analyzer))
- to_chat(user, "*---------*\n This is \a [src].")
- var/text = get_analyzer_text()
- if(text)
- to_chat(user, "[text]")
-
- return
-
-/* if(istype(O, /obj/item/pen))
- var/choice = input("What would you like to change?") in list("Plant Name", "Seed Description", "Product Description", "Cancel")
- if(!user.canUseTopic(src, BE_CLOSE))
- return
- switch(choice)
- if("Plant Name")
- var/newplantname = reject_bad_text(stripped_input(user, "Write a new plant name:", name, plantname))
- if(!user.canUseTopic(src, BE_CLOSE))
- return
- if (length(newplantname) > 20)
- to_chat(user, "That name is too long!")
- return
- if(!newplantname)
- to_chat(user, "That name is invalid.")
- return
- else
- name = "[lowertext(newplantname)]"
- plantname = newplantname
- if("Seed Description")
- var/newdesc = stripped_input(user, "Write a new description:", name, desc)
- if(!user.canUseTopic(src, BE_CLOSE))
- return
- if (length(newdesc) > 180)
- to_chat(user, "That description is too long!")
- return
- if(!newdesc)
- to_chat(user, "That description is invalid.")
- return
- else
- desc = newdesc
- if("Product Description")
- if(product && !productdesc)
- productdesc = initial(product.desc)
- var/newproductdesc = stripped_input(user, "Write a new description:", name, productdesc)
- if(!user.canUseTopic(src, BE_CLOSE))
- return
- if (length(newproductdesc) > 180)
- to_chat(user, "That description is too long!")
- return
- if(!newproductdesc)
- to_chat(user, "That description is invalid.")
- return
- else
- productdesc = newproductdesc
- else
- return
-*/
- ..() // Fallthrough to item/attackby() so that bags can pick seeds up
-
// Checks plants for broken tray icons. Use Advanced Proc Call to activate.
// Maybe some day it would be used as unit test.
/proc/check_plants_growth_stages_icons()
diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm
index f6f11cd849..f632e66b6d 100644
--- a/code/modules/jobs/job_types/_job.dm
+++ b/code/modules/jobs/job_types/_job.dm
@@ -311,50 +311,13 @@
/datum/job/proc/map_check()
return TRUE
-/datum/job/proc/radio_help_message(mob/M)
- to_chat(M, "Prefix your message with :h to speak on your department's radio. To see other prefixes, look closely at your headset.")
-
/datum/outfit/job
name = "Standard Gear"
var/jobtype = null
- uniform = /obj/item/clothing/under/color/grey
back = /obj/item/storage/backpack
- shoes = /obj/item/clothing/shoes/sneakers/black
- box = /obj/item/storage/box/survival
-
- var/backpack = /obj/item/storage/backpack
- var/satchel = /obj/item/storage/backpack/satchel
- var/duffelbag = /obj/item/storage/backpack/duffelbag
-
- var/pda_slot = SLOT_BELT
-
-/datum/outfit/job/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- ..()
-/* switch(H.backpack)
- if(GBACKPACK)
- back = /obj/item/storage/backpack //Grey backpack
- if(GSATCHEL)
- back = /obj/item/storage/backpack/satchel //Grey satchel
- if(GDUFFELBAG)
- back = /obj/item/storage/backpack/duffelbag //Grey Duffel bag
- if(LSATCHEL)
- back = /obj/item/storage/backpack/satchel/leather //Leather Satchel
- if(DSATCHEL)
- back = satchel //Department satchel
- if(DDUFFELBAG)
- back = duffelbag //Department duffel bag
- else
- back = backpack //Department backpack
- //converts the uniform string into the path we'll wear, whether it's the skirt or regular variant
- var/holder
- if(H.jumpsuit_style == PREF_SKIRT)
- holder = "[uniform]"
- else
- holder = "[uniform]"
- uniform = text2path(holder)*/
/datum/outfit/job/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
if(visualsOnly)
@@ -364,14 +327,6 @@
if(!J)
J = SSjob.GetJob(H.job)
-/datum/outfit/job/get_chameleon_disguise_info()
- var/list/types = ..()
- types -= /obj/item/storage/backpack //otherwise this will override the actual backpacks
- types += backpack
- types += satchel
- types += duffelbag
- return types
-
//Warden and regular officers add this result to their get_access()
/datum/job/proc/check_config_for_sec_maint()
if(CONFIG_GET(flag/security_has_maint_access))
diff --git a/code/modules/jobs/job_types/roguetown/roguetown.dm b/code/modules/jobs/job_types/roguetown/roguetown.dm
index d94fe8f2ab..2ac63fd492 100644
--- a/code/modules/jobs/job_types/roguetown/roguetown.dm
+++ b/code/modules/jobs/job_types/roguetown/roguetown.dm
@@ -31,9 +31,6 @@
back = null
shoes = null
box = null
- backpack = null
- satchel = null
- duffelbag = null
/// List of patrons we are allowed to use
var/list/allowed_patrons
/// Default patron in case the patron is not allowed
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index 1598754d9f..303ffb0cba 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -51,72 +51,6 @@
I.forceMove(src)
update_icon()
-/obj/structure/bookcase/attackby(obj/item/I, mob/user, params)
- switch(state)
- if(0)
- if(I.tool_behaviour == TOOL_WRENCH)
- if(I.use_tool(src, user, 20, volume=50))
- to_chat(user, "I wrench the frame into place.")
- anchored = TRUE
- state = 1
- if(I.tool_behaviour == TOOL_CROWBAR)
- if(I.use_tool(src, user, 20, volume=50))
- to_chat(user, "I pry the frame apart.")
- deconstruct(TRUE)
-
- if(1)
- if(istype(I, /obj/item/stack/sheet/mineral/wood))
- var/obj/item/stack/sheet/mineral/wood/W = I
- if(W.get_amount() >= 2)
- W.use(2)
- to_chat(user, "I add a shelf.")
- state = 2
- icon_state = "book-0"
- if(I.tool_behaviour == TOOL_WRENCH)
- I.play_tool_sound(src, 100)
- to_chat(user, "I unwrench the frame.")
- anchored = FALSE
- state = 0
-
- if(2)
- var/datum/component/storage/STR = I.GetComponent(/datum/component/storage)
- if(is_type_in_list(I, allowed_books))
- if(!(contents.len <= 15))
- to_chat(user, "There are too many books on this shelf!")
- return
- if(!user.transferItemToLoc(I, src))
- return
- update_icon()
- else if(STR)
- for(var/obj/item/T in I.contents)
- if(istype(T, /obj/item/book))
- STR.remove_from_storage(T, src)
- to_chat(user, "I empty \the [I] into \the [src].")
- update_icon()
- else if(istype(I, /obj/item/pen))
- if(!user.is_literate())
- to_chat(user, "I scribble illegibly on the side of [src]!")
- return
- var/newname = stripped_input(user, "What would you like to title this bookshelf?")
- if(!user.canUseTopic(src, BE_CLOSE))
- return
- if(!newname)
- return
- else
- name = "bookcase ([sanitize(newname)])"
- else if(I.tool_behaviour == TOOL_CROWBAR)
- if(contents.len)
- to_chat(user, "I need to remove the books first!")
- else
- I.play_tool_sound(src, 100)
- to_chat(user, "I pry the shelf out.")
- new /obj/item/stack/sheet/mineral/wood(drop_location(), 2)
- state = 1
- icon_state = "bookempty"
- else
- return ..()
-
-
/obj/structure/bookcase/attack_hand(mob/living/user)
. = ..()
if(.)
diff --git a/code/modules/library/soapstone.dm b/code/modules/library/soapstone.dm
deleted file mode 100644
index c54105437f..0000000000
--- a/code/modules/library/soapstone.dm
+++ /dev/null
@@ -1,265 +0,0 @@
-/obj/item/soapstone
- name = "soapstone"
- desc = ""
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "soapstone"
- throw_speed = 1
- throw_range = 5
- w_class = WEIGHT_CLASS_TINY
- var/tool_speed = 50
- var/remaining_uses = 3
-
-/obj/item/soapstone/Initialize(mapload)
- . = ..()
- check_name()
-
-/obj/item/soapstone/examine(mob/user)
- . = ..()
- if(remaining_uses != -1)
- . += "It has [remaining_uses] uses left."
-
-/obj/item/soapstone/afterattack(atom/target, mob/user, proximity)
- . = ..()
- var/turf/T = get_turf(target)
- if(!proximity)
- return
-
- var/obj/structure/chisel_message/existing_message = locate() in T
-
- if(!remaining_uses && !existing_message)
- to_chat(user, "[src] is too worn out to use.")
- return
-
- if(!good_chisel_message_location(T))
- to_chat(user, "It's not appropriate to engrave on [T].")
- return
-
- if(existing_message)
- user.visible_message("[user] starts erasing [existing_message].", "I start erasing [existing_message].", "I hear a chipping sound.")
- playsound(loc, 'sound/blank.ogg', 50, TRUE, -1)
- if(do_after(user, tool_speed, target = existing_message))
- user.visible_message("[user] erases [existing_message].", "I erase [existing_message][existing_message.creator_key == user.ckey ? ", refunding a use" : ""].")
- existing_message.persists = FALSE
- qdel(existing_message)
- playsound(loc, 'sound/blank.ogg', 50, TRUE, -1)
- if(existing_message.creator_key == user.ckey)
- refund_use()
- return
-
- var/message = stripped_input(user, "What would you like to engrave?", "Leave a message")
- if(!message)
- to_chat(user, "I decide not to engrave anything.")
- return
-
- if(!target.Adjacent(user) && locate(/obj/structure/chisel_message) in T)
- to_chat(user, "Someone wrote here before you chose! Find another spot.")
- return
- playsound(loc, 'sound/blank.ogg', 50, TRUE, -1)
- user.visible_message("[user] starts engraving a message into [T]...", "I start engraving a message into [T]...", "I hear a chipping sound.")
- if(can_use() && do_after(user, tool_speed, target = T) && can_use()) //This looks messy but it's actually really clever!
- if(!locate(/obj/structure/chisel_message) in T)
- user.visible_message("[user] leaves a message for future spacemen!", "I engrave a message into [T]!", "I hear a chipping sound.")
- playsound(loc, 'sound/blank.ogg', 50, TRUE, -1)
- var/obj/structure/chisel_message/M = new(T)
- M.register(user, message)
- remove_use()
-
-/obj/item/soapstone/proc/can_use()
- return remaining_uses == -1 || remaining_uses >= 0
-
-/obj/item/soapstone/proc/remove_use()
- if(remaining_uses <= 0)
- return
- remaining_uses--
- check_name()
-
-/obj/item/soapstone/proc/refund_use()
- if(remaining_uses == -1)
- return
- remaining_uses++
- check_name()
-
-/obj/item/soapstone/proc/check_name()
- if(remaining_uses)
- // This will mess up RPG loot names, but w/e
- name = initial(name)
- else
- name = "dull [initial(name)]"
-
-/* Persistent engraved messages, etched onto the station turfs to serve
- * as instructions and/or memes for the next generation of spessmen.
- *
- * Limited in location to station_z only. Can be smashed out or exploded,
- * but only permamently removed with the curator's soapstone.
-*/
-
-/obj/item/soapstone/infinite
- remaining_uses = -1
-
-/obj/item/soapstone/empty
- remaining_uses = 0
-
-/proc/good_chisel_message_location(turf/T)
- if(!T)
- . = FALSE
- else if(!(isfloorturf(T) || iswallturf(T)))
- . = FALSE
- else
- . = TRUE
-
-/obj/structure/chisel_message
- name = "engraved message"
- desc = ""
- icon = 'icons/obj/stationobjs.dmi'
- icon_state = "soapstone_message"
- layer = LATTICE_LAYER
- density = FALSE
- anchored = TRUE
- max_integrity = 30
-
- var/hidden_message
- var/creator_key
- var/creator_name
- var/realdate
- var/map
- var/persists = TRUE
- var/list/like_keys = list()
- var/list/dislike_keys = list()
-
- var/turf/original_turf
-
-/obj/structure/chisel_message/Initialize(mapload)
- . = ..()
- SSpersistence.chisel_messages += src
- var/turf/T = get_turf(src)
- original_turf = T
-
- if(!good_chisel_message_location(T))
- persists = FALSE
- return INITIALIZE_HINT_QDEL
-
-/obj/structure/chisel_message/proc/register(mob/user, newmessage)
- hidden_message = newmessage
- creator_name = user.real_name
- creator_key = user.ckey
- realdate = world.realtime
- map = SSmapping.config.map_name
- update_icon()
-
-/obj/structure/chisel_message/update_icon()
- ..()
- var/hash = md5(hidden_message)
- var/newcolor = copytext(hash, 1, 7)
- add_atom_colour("#[newcolor]", FIXED_COLOUR_PRIORITY)
- light_color = "#[newcolor]"
- set_light(1)
-
-/obj/structure/chisel_message/proc/pack()
- var/list/data = list()
- data["hidden_message"] = hidden_message
- data["creator_name"] = creator_name
- data["creator_key"] = creator_key
- data["realdate"] = realdate
- data["map"] = SSmapping.config.map_name
- data["x"] = original_turf.x
- data["y"] = original_turf.y
- data["z"] = original_turf.z
- data["like_keys"] = like_keys
- data["dislike_keys"] = dislike_keys
- return data
-
-/obj/structure/chisel_message/proc/unpack(list/data)
- if(!islist(data))
- return
-
- hidden_message = data["hidden_message"]
- creator_name = data["creator_name"]
- creator_key = data["creator_key"]
- realdate = data["realdate"]
- like_keys = data["like_keys"]
- if(!like_keys)
- like_keys = list()
- dislike_keys = data["dislike_keys"]
- if(!dislike_keys)
- dislike_keys = list()
-
- var/x = data["x"]
- var/y = data["y"]
- var/z = data["z"]
- var/turf/newloc = locate(x, y, z)
- if(isturf(newloc))
- forceMove(newloc)
- update_icon()
-
-/obj/structure/chisel_message/examine(mob/user)
- . = ..()
- ui_interact(user)
-
-/obj/structure/chisel_message/Destroy()
- if(persists)
- SSpersistence.SaveChiselMessage(src)
- SSpersistence.chisel_messages -= src
- . = ..()
-
-/obj/structure/chisel_message/interact()
- return
-
-/obj/structure/chisel_message/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state)
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
- if(!ui)
- ui = new(user, src, ui_key, "engraved_message", name, 600, 300, master_ui, state)
- ui.open()
-
-/obj/structure/chisel_message/ui_data(mob/user)
- var/list/data = list()
-
- data["hidden_message"] = hidden_message
- data["realdate"] = SQLtime(realdate)
- data["num_likes"] = like_keys.len
- data["num_dislikes"] = dislike_keys.len
- data["is_creator"] = user.ckey == creator_key
- data["has_liked"] = (user.ckey in like_keys)
- data["has_disliked"] = (user.ckey in dislike_keys)
-
- if(check_rights_for(user.client, R_ADMIN))
- data["admin_mode"] = TRUE
- data["creator_key"] = creator_key
- data["creator_name"] = creator_name
-
- return data
-
-/obj/structure/chisel_message/ui_act(action, params, datum/tgui/ui)
- var/mob/user = usr
- var/is_admin = check_rights_for(user.client, R_ADMIN)
- var/is_creator = user.ckey == creator_key
- var/has_liked = (user.ckey in like_keys)
- var/has_disliked = (user.ckey in dislike_keys)
-
- switch(action)
- if("like")
- if(is_creator)
- return
- if(has_disliked)
- dislike_keys -= user.ckey
- like_keys |= user.ckey
- . = TRUE
- if("dislike")
- if(is_creator)
- return
- if(has_liked)
- like_keys -= user.ckey
- dislike_keys |= user.ckey
- . = TRUE
- if("neutral")
- if(is_creator)
- return
- dislike_keys -= user.ckey
- like_keys -= user.ckey
- . = TRUE
- if("delete")
- if(!is_admin)
- return
- var/confirm = alert(user, "Confirm deletion of engraved message?", "Confirm Deletion", "Yes", "No")
- if(confirm == "Yes")
- persists = FALSE
- qdel(src)
diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm
index 4f1ab39d70..d113da8abf 100644
--- a/code/modules/lighting/lighting_object.dm
+++ b/code/modules/lighting/lighting_object.dm
@@ -27,9 +27,6 @@
myturf.lighting_object = src
myturf.luminosity = 0
- for(var/turf/open/space/S in RANGE_TURFS(1, src)) //RANGE_TURFS is in code\__HELPERS\game.dm
- S.update_starlight()
-
needs_update = TRUE
SSlighting.objects_queue += src
diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm
index 6261da59e8..5d07376c27 100644
--- a/code/modules/mapping/mapping_helpers.dm
+++ b/code/modules/mapping/mapping_helpers.dm
@@ -18,7 +18,7 @@
/obj/effect/baseturf_helper/LateInitialize()
if(!baseturf_to_replace)
- baseturf_to_replace = typecacheof(list(/turf/open/space,/turf/baseturf_bottom))
+ baseturf_to_replace = typecacheof(list(/turf/baseturf_bottom))
else if(!length(baseturf_to_replace))
baseturf_to_replace = list(baseturf_to_replace = TRUE)
else if(baseturf_to_replace[baseturf_to_replace[1]] != TRUE) // It's not associative
@@ -48,36 +48,6 @@
else
thing.PlaceOnBottom(null, baseturf)
-
-
-/obj/effect/baseturf_helper/space
- name = "space baseturf editor"
- baseturf = /turf/open/space
-
-/obj/effect/baseturf_helper/asteroid
- name = "asteroid baseturf editor"
- baseturf = /turf/open/floor/plating/asteroid
-
-/obj/effect/baseturf_helper/asteroid/airless
- name = "asteroid airless baseturf editor"
- baseturf = /turf/open/floor/plating/asteroid/airless
-
-/obj/effect/baseturf_helper/asteroid/basalt
- name = "asteroid basalt baseturf editor"
- baseturf = /turf/open/floor/plating/asteroid/basalt
-
-/obj/effect/baseturf_helper/asteroid/snow
- name = "asteroid snow baseturf editor"
- baseturf = /turf/open/floor/plating/asteroid/snow
-
-/obj/effect/baseturf_helper/beach/sand
- name = "beach sand baseturf editor"
- baseturf = /turf/open/floor/plating/beach/sand
-
-/obj/effect/baseturf_helper/beach/water
- name = "water baseturf editor"
- baseturf = /turf/open/floor/plating/beach/water
-
/obj/effect/baseturf_helper/lava
name = "lava baseturf editor"
baseturf = /turf/open/lava/smooth
@@ -143,17 +113,12 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava)
var/bodycount = 2 //number of bodies to spawn
/obj/effect/mapping_helpers/dead_body_placer/LateInitialize()
- var/area/a = get_area(src)
var/list/trays = list()
- for (var/i in a.contents)
- if (istype(i, /obj/structure/bodycontainer/morgue))
- trays += i
if(!trays.len)
log_mapping("[src] at [x],[y] could not find any morgues.")
return
for (var/i = 1 to bodycount)
- var/obj/structure/bodycontainer/morgue/j = pick(trays)
- var/mob/living/carbon/human/h = new /mob/living/carbon/human(j, 1)
+ var/mob/living/carbon/human/h = new /mob/living/carbon/human(get_turf(src), 1)
h.death()
for (var/part in h.internal_organs) //randomly remove organs from each body, set those we keep to be in stasis
if (prob(40))
@@ -161,77 +126,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava)
else
var/obj/item/organ/O = part
O.organ_flags |= ORGAN_FROZEN
- j.update_icon()
qdel(src)
-
-//On Ian's birthday, the hop's office is decorated.
-/obj/effect/mapping_helpers/ianbirthday
- name = "Ian's Bday Helper"
- late = TRUE
- icon_state = "iansbdayhelper"
- var/balloon_clusters = 2
-
-/obj/effect/mapping_helpers/ianbirthday/LateInitialize()
-// if(locate(/datum/holiday/ianbirthday) in SSevents.holidays)
-// birthday()
- qdel(src)
-
-/obj/effect/mapping_helpers/ianbirthday/proc/birthday()
- var/area/a = get_area(src)
- var/list/table = list()//should only be one aka the front desk, but just in case...
- var/list/openturfs = list()
-
- //confetti and a corgi balloon! (and some list stuff for more decorations)
- for(var/thing in a.contents)
- if(istype(thing, /obj/structure/table/reinforced))
- table += thing
- if(isopenturf(thing))
- new /obj/effect/decal/cleanable/confetti(thing)
- if(locate(/obj/structure/bed/dogbed/ian) in thing)
- new /obj/item/toy/balloon/corgi(thing)
- else
- openturfs += thing
- //cake + knife to cut it!
- var/turf/food_turf = get_turf(pick(table))
- new /obj/item/kitchen/knife(food_turf)
- var/obj/item/reagent_containers/food/snacks/store/cake/birthday/iancake = new(food_turf)
- iancake.desc = ""
- //some balloons! this picks an open turf and pops a few balloons in and around that turf, yay.
- for(var/i in 1 to balloon_clusters)
- var/turf/clusterspot = pick_n_take(openturfs)
- new /obj/item/toy/balloon(clusterspot)
- var/balloons_left_to_give = 3 //the amount of balloons around the cluster
- var/list/dirs_to_balloon = GLOB.cardinals.Copy()
- while(balloons_left_to_give > 0)
- balloons_left_to_give--
- var/chosen_dir = pick_n_take(dirs_to_balloon)
- var/turf/balloonstep = get_step(clusterspot, chosen_dir)
- var/placed = FALSE
- if(isopenturf(balloonstep))
- var/obj/item/toy/balloon/B = new(balloonstep)//this clumps the cluster together
- placed = TRUE
- if(chosen_dir == NORTH)
- B.pixel_y -= 10
- if(chosen_dir == SOUTH)
- B.pixel_y += 10
- if(chosen_dir == EAST)
- B.pixel_x -= 10
- if(chosen_dir == WEST)
- B.pixel_x += 10
- if(!placed)
- new /obj/item/toy/balloon(clusterspot)
- //remind me to add wall decor!
-
-/obj/effect/mapping_helpers/ianbirthday/admin//so admins may birthday any room
- name = "generic birthday setup"
- icon_state = "bdayhelper"
-
-/obj/effect/mapping_helpers/ianbirthday/admin/LateInitialize()
- birthday()
- qdel(src)
-
-
//This is our map object, which just gets placed anywhere on the map. A .dm file is linked to it to set the templates list.
//If there's only one template in the list, it will only pick that (useful for editing parts of maps without editing the WHOLE map)
/obj/effect/landmark/map_load_mark
diff --git a/code/modules/mapping/ruins.dm b/code/modules/mapping/ruins.dm
index db361cc195..f2cb80ac48 100644
--- a/code/modules/mapping/ruins.dm
+++ b/code/modules/mapping/ruins.dm
@@ -26,8 +26,6 @@
qdel(nest)
for(var/mob/living/simple_animal/monster in T)
qdel(monster)
- for(var/obj/structure/flora/ash/plant in T)
- qdel(plant)
load(central_turf,centered = TRUE)
loaded++
@@ -96,7 +94,7 @@
break
else //Otherwise just pick random one
current_pick = pickweight(ruins_availible)
-
+
var/placement_tries = forced_turf ? 1 : PLACEMENT_TRIES //Only try once if we target specific turf
var/failed_to_place = TRUE
var/target_z = 0
@@ -169,5 +167,5 @@
for(var/datum/map_template/ruin/R in ruins_availible)
if(R.cost > budget)
ruins_availible -= R
-
+
log_world("Ruin loader finished with [budget] left to spend.")
diff --git a/code/modules/mapping/space_management/space_reservation.dm b/code/modules/mapping/space_management/space_reservation.dm
index 265d2c996d..ba505ab5ec 100644
--- a/code/modules/mapping/space_management/space_reservation.dm
+++ b/code/modules/mapping/space_management/space_reservation.dm
@@ -8,10 +8,10 @@
var/bottom_left_coords[3]
var/top_right_coords[3]
var/wipe_reservation_on_release = TRUE
- var/turf_type = /turf/open/space
+ var/turf_type = /turf/open/floor/rogue/blocks
/datum/turf_reservation/transit
- turf_type = /turf/open/space/transit
+ turf_type = /turf/open/floor/rogue/blocks
/datum/turf_reservation/proc/Release()
var/v = reserved_turfs.Copy()
diff --git a/code/modules/mapping/space_management/space_transition.dm b/code/modules/mapping/space_management/space_transition.dm
index 5a9d52033c..33c680484c 100644
--- a/code/modules/mapping/space_management/space_transition.dm
+++ b/code/modules/mapping/space_management/space_transition.dm
@@ -55,89 +55,3 @@
neigbours |= grid[x][y+1]
if(y-1 >= 1)
neigbours |= grid[x][y-1]
-
-/datum/controller/subsystem/mapping/proc/setup_map_transitions() //listamania
- var/list/SLS = list()
- var/list/cached_z_list = z_list
- var/conf_set_len = 0
- for(var/A in cached_z_list)
- var/datum/space_level/D = A
- if (D.linkage == CROSSLINKED)
- SLS.Add(D)
- conf_set_len++
- var/list/point_grid[conf_set_len*2+1][conf_set_len*2+1]
- var/list/grid = list()
- var/datum/space_transition_point/P
- for(var/i = 1, i<=conf_set_len*2+1, i++)
- for(var/j = 1, j<=conf_set_len*2+1, j++)
- P = new/datum/space_transition_point(i,j, point_grid)
- point_grid[i][j] = P
- grid.Add(P)
- for(var/datum/space_transition_point/pnt in grid)
- pnt.set_neigbours(point_grid)
- P = point_grid[conf_set_len+1][conf_set_len+1]
- var/list/possible_points = list()
- var/list/used_points = list()
- grid.Cut()
- while(SLS.len)
- var/datum/space_level/D = pick_n_take(SLS)
- D.xi = P.x
- D.yi = P.y
- P.spl = D
- possible_points |= P.neigbours
- used_points |= P
- possible_points.Remove(used_points)
- D.set_neigbours(used_points)
- P = pick(possible_points)
- CHECK_TICK
-
- //Lists below are pre-calculated values arranged in the list in such a way to be easily accessable in the loop by the counter
- //Its either this or madness with lotsa math
-
- var/list/x_pos_beginning = list(1, 1, world.maxx - TRANSITIONEDGE, 1) //x values of the lowest-leftest turfs of the respective 4 blocks on each side of zlevel
- var/list/y_pos_beginning = list(world.maxy - TRANSITIONEDGE, 1, 1 + TRANSITIONEDGE, 1 + TRANSITIONEDGE) //y values respectively
- var/list/x_pos_ending = list(world.maxx, world.maxx, world.maxx, 1 + TRANSITIONEDGE) //x values of the highest-rightest turfs of the respective 4 blocks on each side of zlevel
- var/list/y_pos_ending = list(world.maxy, 1 + TRANSITIONEDGE, world.maxy - TRANSITIONEDGE, world.maxy - TRANSITIONEDGE) //y values respectively
- var/list/x_pos_transition = list(1, 1, TRANSITIONEDGE + 2, world.maxx - TRANSITIONEDGE - 1) //values of x for the transition from respective blocks on the side of zlevel, 1 is being translated into turfs respective x value later in the code
- var/list/y_pos_transition = list(TRANSITIONEDGE + 2, world.maxy - TRANSITIONEDGE - 1, 1, 1) //values of y for the transition from respective blocks on the side of zlevel, 1 is being translated into turfs respective y value later in the code
-
- for(var/I in cached_z_list)
- var/datum/space_level/D = I
- if(!D.neigbours.len)
- continue
- var/zlevelnumber = D.z_value
- for(var/side in 1 to 4)
- var/turf/beginning = locate(x_pos_beginning[side], y_pos_beginning[side], zlevelnumber)
- var/turf/ending = locate(x_pos_ending[side], y_pos_ending[side], zlevelnumber)
- var/list/turfblock = block(beginning, ending)
- var/dirside = 2**(side-1)
- var/zdestination = zlevelnumber
- if(D.neigbours["[dirside]"] && D.neigbours["[dirside]"] != D)
- D = D.neigbours["[dirside]"]
- zdestination = D.z_value
- else
- dirside = turn(dirside, 180)
- while(D.neigbours["[dirside]"] && D.neigbours["[dirside]"] != D)
- D = D.neigbours["[dirside]"]
- zdestination = D.z_value
- D = I
- for(var/turf/open/space/S in turfblock)
- S.destination_x = x_pos_transition[side] == 1 ? S.x : x_pos_transition[side]
- S.destination_y = y_pos_transition[side] == 1 ? S.y : y_pos_transition[side]
- S.destination_z = zdestination
-
- // Mirage border code
- var/mirage_dir
- if(S.x == 1 + TRANSITIONEDGE)
- mirage_dir |= WEST
- else if(S.x == world.maxx - TRANSITIONEDGE)
- mirage_dir |= EAST
- if(S.y == 1 + TRANSITIONEDGE)
- mirage_dir |= SOUTH
- else if(S.y == world.maxy - TRANSITIONEDGE)
- mirage_dir |= NORTH
- if(!mirage_dir)
- continue
-
- var/turf/place = locate(S.destination_x, S.destination_y, S.destination_z)
- S.AddComponent(/datum/component/mirage_border, place, mirage_dir)
diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm
deleted file mode 100644
index 82b0d6ce25..0000000000
--- a/code/modules/mining/lavaland/ash_flora.dm
+++ /dev/null
@@ -1,321 +0,0 @@
-//*******************Contains everything related to the flora on lavaland.*******************************
-//This includes: The structures, their produce, their seeds and the crafting recipe for the mushroom bowl
-
-/obj/structure/flora/ash
- gender = PLURAL
- layer = PROJECTILE_HIT_THRESHHOLD_LAYER //sporangiums up don't shoot
- icon = 'icons/obj/lavaland/ash_flora.dmi'
- icon_state = "l_mushroom"
- name = "large mushrooms"
- desc = ""
- var/harvested_name = "shortened mushrooms"
- var/harvested_desc = ""
- var/needs_sharp_harvest = TRUE
- var/harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings
- var/harvest_amount_low = 1
- var/harvest_amount_high = 3
- var/harvest_time = 60
- var/harvest_message_low = "You pick a mushroom, but fail to collect many shavings from its cap."
- var/harvest_message_med = "You pick a mushroom, carefully collecting the shavings from its cap."
- var/harvest_message_high = "You harvest and collect shavings from several mushroom caps."
- var/harvested = FALSE
- var/base_icon
- var/regrowth_time_low = 8 MINUTES
- var/regrowth_time_high = 16 MINUTES
-
-/obj/structure/flora/ash/Initialize()
- . = ..()
- base_icon = "[icon_state][rand(1, 4)]"
- icon_state = base_icon
-
-/obj/structure/flora/ash/proc/harvest(user)
- if(harvested)
- return 0
-
- var/rand_harvested = rand(harvest_amount_low, harvest_amount_high)
- if(rand_harvested)
- if(user)
- var/msg = harvest_message_med
- if(rand_harvested == harvest_amount_low)
- msg = harvest_message_low
- else if(rand_harvested == harvest_amount_high)
- msg = harvest_message_high
- to_chat(user, "[msg]")
- for(var/i in 1 to rand_harvested)
- new harvest(get_turf(src))
-
- icon_state = "[base_icon]p"
- name = harvested_name
- desc = harvested_desc
- harvested = TRUE
- addtimer(CALLBACK(src, PROC_REF(regrow)), rand(regrowth_time_low, regrowth_time_high))
- return 1
-
-/obj/structure/flora/ash/proc/regrow()
- icon_state = base_icon
- name = initial(name)
- desc = initial(desc)
- harvested = FALSE
-
-/obj/structure/flora/ash/attackby(obj/item/W, mob/user, params)
- if(!harvested && needs_sharp_harvest && W.get_sharpness())
- user.visible_message("[user] starts to harvest from [src] with [W].","I begin to harvest from [src] with [W].")
- if(do_after(user, harvest_time, target = src))
- harvest(user)
- else
- return ..()
-
-/obj/structure/flora/ash/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- if(!harvested && !needs_sharp_harvest)
- user.visible_message("[user] starts to harvest from [src].","I begin to harvest from [src].")
- if(do_after(user, harvest_time, target = src))
- harvest(user)
-
-/obj/structure/flora/ash/tall_shroom //exists only so that the spawning check doesn't allow these spawning near other things
- regrowth_time_low = 4200
-
-/obj/structure/flora/ash/leaf_shroom
- icon_state = "s_mushroom"
- name = "leafy mushrooms"
- desc = ""
- harvested_name = "leafless mushrooms"
- harvested_desc = ""
- harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf
- needs_sharp_harvest = FALSE
- harvest_amount_high = 4
- harvest_time = 20
- harvest_message_low = "You pluck a single, suitable leaf."
- harvest_message_med = "You pluck a number of leaves, leaving a few unsuitable ones."
- harvest_message_high = "You pluck quite a lot of suitable leaves."
- regrowth_time_low = 2400
- regrowth_time_high = 6000
-
-/obj/structure/flora/ash/cap_shroom
- icon_state = "r_mushroom"
- name = "tall mushrooms"
- desc = ""
- harvested_name = "small mushrooms"
- harvested_desc = ""
- harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap
- harvest_amount_high = 4
- harvest_time = 50
- harvest_message_low = "You slice the cap off a mushroom."
- harvest_message_med = "You slice off a few conks from the larger mushrooms."
- harvest_message_high = "You slice off a number of caps and conks from these mushrooms."
- regrowth_time_low = 3000
- regrowth_time_high = 5400
-
-/obj/structure/flora/ash/stem_shroom
- icon_state = "t_mushroom"
- name = "numerous mushrooms"
- desc = ""
- light_outer_range = 1.5
- light_power = 2.1
- harvested_name = "tiny mushrooms"
- harvested_desc = ""
- harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem
- harvest_amount_high = 4
- harvest_time = 40
- harvest_message_low = "You pick and slice the cap off a mushroom, leaving the stem."
- harvest_message_med = "You pick and decapitate several mushrooms for their stems."
- harvest_message_high = "You acquire a number of stems from these mushrooms."
- regrowth_time_low = 3000
- regrowth_time_high = 6000
-
-/obj/structure/flora/ash/cacti
- icon_state = "cactus"
- name = "fruiting cacti"
- desc = ""
- harvested_name = "cacti"
- harvested_desc = ""
- harvest = /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit
- needs_sharp_harvest = FALSE
- harvest_amount_high = 2
- harvest_time = 10
- harvest_message_low = "You pick a cactus fruit."
- harvest_message_med = "You pick several cactus fruit." //shouldn't show up, because you can't get more than two
- harvest_message_high = "You pick a pair of cactus fruit."
- regrowth_time_low = 4800
- regrowth_time_high = 7200
-
-/obj/structure/flora/ash/cacti/Initialize(mapload)
- . = ..()
- // min dmg 3, max dmg 6, prob(70)
- AddComponent(/datum/component/caltrop, 3, 6, 70)
-
-//SNACKS
-
-/obj/item/reagent_containers/food/snacks/grown/ash_flora
- name = "mushroom shavings"
- desc = ""
- icon = 'icons/obj/lavaland/ash_flora.dmi'
- icon_state = "mushroom_shavings"
- w_class = WEIGHT_CLASS_TINY
- resistance_flags = FLAMMABLE
- max_integrity = 100
- seed = /obj/item/seeds/lavaland/polypore
- wine_power = 20
-
-/obj/item/reagent_containers/food/snacks/grown/ash_flora/Initialize()
- . = ..()
- pixel_x = rand(-4, 4)
- pixel_y = rand(-4, 4)
-
-/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings //So we can't craft bowls from everything.
-
-/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf
- name = "mushroom leaf"
- desc = ""
- icon_state = "mushroom_leaf"
- seed = /obj/item/seeds/lavaland/porcini
- wine_power = 40
-
-/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap
- name = "mushroom cap"
- desc = ""
- icon_state = "mushroom_cap"
- seed = /obj/item/seeds/lavaland/inocybe
- wine_power = 70
-
-/obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem
- name = "mushroom stem"
- desc = ""
- icon_state = "mushroom_stem"
- seed = /obj/item/seeds/lavaland/ember
- wine_power = 60
-
-/obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit
- name = "cactus fruit"
- desc = ""
- icon_state = "cactus_fruit"
- seed = /obj/item/seeds/lavaland/cactus
- wine_power = 50
-
-//SEEDS
-
-/obj/item/seeds/lavaland
- name = "lavaland seeds"
- desc = ""
- lifespan = 50
- endurance = 25
- maturation = 7
- production = 4
- yield = 4
- potency = 15
- growthstages = 3
- rarity = 20
- reagents_add = list(/datum/reagent/consumable/nutriment = 0.1)
- resistance_flags = FIRE_PROOF
-
-/obj/item/seeds/lavaland/cactus
- name = "pack of fruiting cactus seeds"
- desc = ""
- icon_state = "seed"
- species = "cactus"
- plantname = "Fruiting Cactus"
- product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/cactus_fruit
- genes = list(/datum/plant_gene/trait/fire_resistance)
- growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi'
- growthstages = 2
- reagents_add = list(/datum/reagent/consumable/nutriment/vitamin = 0.04, /datum/reagent/consumable/nutriment = 0.04, /datum/reagent/consumable/vitfro = 0.08)
-
-/obj/item/seeds/lavaland/polypore
- name = "pack of polypore mycelium"
- desc = ""
- icon_state = "mycelium-polypore"
- species = "polypore"
- plantname = "Polypore Mushrooms"
- product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings
- genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance)
- growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
- reagents_add = list(/datum/reagent/consumable/sugar = 0.06, /datum/reagent/consumable/ethanol = 0.04, /datum/reagent/stabilizing_agent = 0.06, /datum/reagent/toxin/minttoxin = 0.02)
-
-/obj/item/seeds/lavaland/porcini
- name = "pack of porcini mycelium"
- desc = ""
- icon_state = "mycelium-porcini"
- species = "porcini"
- plantname = "Porcini Mushrooms"
- product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_leaf
- genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance)
- growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
- reagents_add = list(/datum/reagent/consumable/nutriment = 0.06, /datum/reagent/consumable/vitfro = 0.04, /datum/reagent/drug/nicotine = 0.04)
-
-
-/obj/item/seeds/lavaland/inocybe
- name = "pack of inocybe mycelium"
- desc = ""
- icon_state = "mycelium-inocybe"
- species = "inocybe"
- plantname = "Inocybe Mushrooms"
- product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_cap
- genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/fire_resistance)
- growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
- reagents_add = list(/datum/reagent/toxin/mindbreaker = 0.04, /datum/reagent/consumable/entpoly = 0.08, /datum/reagent/drug/mushroomhallucinogen = 0.04)
-
-/obj/item/seeds/lavaland/ember
- name = "pack of embershroom mycelium"
- desc = ""
- icon_state = "mycelium-ember"
- species = "ember"
- plantname = "Embershroom Mushrooms"
- product = /obj/item/reagent_containers/food/snacks/grown/ash_flora/mushroom_stem
- genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/trait/glow, /datum/plant_gene/trait/fire_resistance)
- growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi'
- reagents_add = list(/datum/reagent/consumable/tinlux = 0.04, /datum/reagent/consumable/nutriment/vitamin = 0.02, /datum/reagent/drug/space_drugs = 0.02)
-
-//CRAFTING
-
-/datum/crafting_recipe/mushroom_bowl
- name = "Mushroom Bowl"
- result = /obj/item/reagent_containers/glass/bowl/mushroom_bowl
- reqs = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings = 5)
- time = 30
- category = CAT_NONE
-
-/obj/item/reagent_containers/food/snacks/customizable/salad/ashsalad
- desc = ""
- trash = /obj/item/reagent_containers/glass/bowl/mushroom_bowl
- icon = 'icons/obj/lavaland/ash_flora.dmi'
- icon_state = "mushroom_bowl"
-
-/obj/item/reagent_containers/food/snacks/customizable/soup/ashsoup
- desc = ""
- trash = /obj/item/reagent_containers/glass/bowl/mushroom_bowl
- icon = 'icons/obj/lavaland/ash_flora.dmi'
- icon_state = "mushroom_soup"
-
-/obj/item/reagent_containers/glass/bowl/mushroom_bowl
- name = "mushroom bowl"
- desc = ""
- icon = 'icons/obj/lavaland/ash_flora.dmi'
- icon_state = "mushroom_bowl"
-
-/obj/item/reagent_containers/glass/bowl/mushroom_bowl/update_icon()
- cut_overlays()
- if(reagents && reagents.total_volume)
- var/mutable_appearance/filling = mutable_appearance('icons/obj/lavaland/ash_flora.dmi', "fullbowl")
- filling.color = mix_color_from_reagents(reagents.reagent_list)
- add_overlay(filling)
- else
- icon_state = "mushroom_bowl"
-
-/obj/item/reagent_containers/glass/bowl/mushroom_bowl/attackby(obj/item/I,mob/user, params)
- if(istype(I, /obj/item/reagent_containers/food/snacks))
- var/obj/item/reagent_containers/food/snacks/S = I
- if(I.w_class > WEIGHT_CLASS_SMALL)
- to_chat(user, "The ingredient is too big for [src]!")
- else if(contents.len >= 20)
- to_chat(user, "I can't add more ingredients to [src]!")
- else
- if(reagents.has_reagent(/datum/reagent/water, 10)) //are we starting a soup or a salad?
- var/obj/item/reagent_containers/food/snacks/customizable/A = new/obj/item/reagent_containers/food/snacks/customizable/soup/ashsoup(get_turf(src))
- A.initialize_custom_food(src, S, user)
- else
- var/obj/item/reagent_containers/food/snacks/customizable/A = new/obj/item/reagent_containers/food/snacks/customizable/salad/ashsalad(get_turf(src))
- A.initialize_custom_food(src, S, user)
- else
- . = ..()
diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm
deleted file mode 100644
index 3795bd502c..0000000000
--- a/code/modules/mining/ores_coins.dm
+++ /dev/null
@@ -1,342 +0,0 @@
-
-#define GIBTONITE_QUALITY_HIGH 3
-#define GIBTONITE_QUALITY_MEDIUM 2
-#define GIBTONITE_QUALITY_LOW 1
-
-#define ORESTACK_OVERLAYS_MAX 10
-
-/**********************Mineral ores**************************/
-
-/obj/item/stack/ore
- name = "rock"
- icon = 'icons/obj/mining.dmi'
- icon_state = "ore"
- item_state = "ore"
- full_w_class = WEIGHT_CLASS_BULKY
- singular_name = "ore chunk"
- var/points = 0 //How many points this ore gets you from the ore redemption machine
- var/refined_type = null //What this ore defaults to being refined into
- var/mine_experience = 5 //How much experience do you get for mining this ore?
- novariants = TRUE // Ore stacks handle their icon updates themselves to keep the illusion that there's more going
- mats_per_stack = 1
- var/list/stack_overlays
-
-/obj/item/stack/ore/update_icon()
- var/difference = min(ORESTACK_OVERLAYS_MAX, amount) - (LAZYLEN(stack_overlays)+1)
- if(difference == 0)
- return
- else if(difference < 0 && LAZYLEN(stack_overlays)) //amount < stack_overlays, remove excess.
- cut_overlays()
- if (LAZYLEN(stack_overlays)-difference <= 0)
- stack_overlays = null;
- else
- stack_overlays.len += difference
- else if(difference > 0) //amount > stack_overlays, add some.
- cut_overlays()
- for(var/i in 1 to difference)
- var/mutable_appearance/newore = mutable_appearance(icon, icon_state)
- newore.pixel_x = rand(-8,8)
- newore.pixel_y = rand(-8,8)
- LAZYADD(stack_overlays, newore)
- if (stack_overlays)
- add_overlay(stack_overlays)
-
-/obj/item/stack/ore/welder_act(mob/living/user, obj/item/I)
- ..()
- if(!refined_type)
- return TRUE
-
- if(I.use_tool(src, user, 0, volume=50, amount=15))
- new refined_type(drop_location())
- use(1)
-
- return TRUE
-
-/obj/item/stack/ore/fire_act(added, maxstacks)
- . = ..()
- if(isnull(refined_type))
- return
- else
- var/probability = (rand(0,100))/100
- var/burn_value = probability*amount
- var/amountrefined = round(burn_value, 1)
- if(amountrefined < 1)
- qdel(src)
- else
- new refined_type(drop_location(),amountrefined)
- qdel(src)
-
-/obj/item/stack/ore/uranium
- name = "uranium ore"
- icon_state = "Uranium ore"
- item_state = "Uranium ore"
- singular_name = "uranium ore chunk"
- points = 30
- material_flags = MATERIAL_NO_EFFECTS
- custom_materials = list(/datum/material/uranium=MINERAL_MATERIAL_AMOUNT)
- refined_type = /obj/item/stack/sheet/mineral/uranium
- mine_experience = 6
-
-/obj/item/stack/ore/iron
- name = "iron ore"
- icon_state = "Iron ore"
- item_state = "Iron ore"
- singular_name = "iron ore chunk"
- points = 1
- custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT)
- refined_type = /obj/item/stack/sheet/metal
- mine_experience = 1
-
-/obj/item/stack/ore/glass
- name = "sand pile"
- icon_state = "Glass ore"
- item_state = "Glass ore"
- singular_name = "sand pile"
- points = 1
- custom_materials = list(/datum/material/glass=MINERAL_MATERIAL_AMOUNT)
- refined_type = /obj/item/stack/sheet/glass
- w_class = WEIGHT_CLASS_TINY
- mine_experience = 0 //its sand
-
-GLOBAL_LIST_INIT(sand_recipes, list(\
- new /datum/stack_recipe("sandstone", /obj/item/stack/sheet/mineral/sandstone, 1, 1, 50),\
- new /datum/stack_recipe("aesthetic volcanic floor tile", /obj/item/stack/tile/basalt, 2, 1, 50)\
-))
-
-/obj/item/stack/ore/glass/get_main_recipes()
- . = ..()
- . += GLOB.sand_recipes
-
-/obj/item/stack/ore/glass/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
- if(..() || !ishuman(hit_atom))
- return
- var/mob/living/carbon/human/C = hit_atom
- if(C.is_eyes_covered())
- C.visible_message("[C]'s eye protection blocks the sand!", "My eye protection blocks the sand!")
- return
- C.adjust_blurriness(6)
- C.adjustStaminaLoss(15)//the pain from my eyes burning does stamina damage
- C.confused += 5
- to_chat(C, "\The [src] gets into my eyes! The pain, it burns!")
- qdel(src)
-
-/obj/item/stack/ore/glass/ex_act(severity, target)
- if (severity == EXPLODE_NONE)
- return
- qdel(src)
-
-/obj/item/stack/ore/glass/basalt
- name = "volcanic ash"
- icon_state = "volcanic_sand"
- item_state = "volcanic_sand"
- singular_name = "volcanic ash pile"
- mine_experience = 0
-
-/obj/item/stack/ore/plasma
- name = "plasma ore"
- icon_state = "Plasma ore"
- item_state = "Plasma ore"
- singular_name = "plasma ore chunk"
- points = 15
- custom_materials = list(/datum/material/plasma=MINERAL_MATERIAL_AMOUNT)
- refined_type = /obj/item/stack/sheet/mineral/plasma
- mine_experience = 5
-
-/obj/item/stack/ore/plasma/welder_act(mob/living/user, obj/item/I)
- to_chat(user, "I can't hit a high enough temperature to smelt [src] properly!")
- return TRUE
-
-
-/obj/item/stack/ore/silver
- name = "silver ore"
- icon_state = "Silver ore"
- item_state = "Silver ore"
- singular_name = "silver ore chunk"
- points = 16
- mine_experience = 3
- custom_materials = list(/datum/material/silver=MINERAL_MATERIAL_AMOUNT)
- refined_type = /obj/item/stack/sheet/mineral/silver
-
-/obj/item/stack/ore/gold
- name = "gold ore"
- icon_state = "Gold ore"
- item_state = "Gold ore"
- singular_name = "gold ore chunk"
- points = 18
- mine_experience = 5
- custom_materials = list(/datum/material/gold=MINERAL_MATERIAL_AMOUNT)
- refined_type = /obj/item/stack/sheet/mineral/gold
- sellprice = 25
-
-/obj/item/stack/ore/diamond
- name = "diamond ore"
- icon_state = "Diamond ore"
- item_state = "Diamond ore"
- singular_name = "diamond ore chunk"
- points = 50
- custom_materials = list(/datum/material/diamond=MINERAL_MATERIAL_AMOUNT)
- refined_type = /obj/item/stack/sheet/mineral/diamond
- mine_experience = 10
-
-/obj/item/stack/ore/bananium
- name = "bananium ore"
- icon_state = "Bananium ore"
- item_state = "Bananium ore"
- singular_name = "bananium ore chunk"
- points = 60
- custom_materials = list(/datum/material/bananium=MINERAL_MATERIAL_AMOUNT)
- refined_type = /obj/item/stack/sheet/mineral/bananium
- mine_experience = 15
-
-/obj/item/stack/ore/titanium
- name = "titanium ore"
- icon_state = "Titanium ore"
- item_state = "Titanium ore"
- singular_name = "titanium ore chunk"
- points = 50
- custom_materials = list(/datum/material/titanium=MINERAL_MATERIAL_AMOUNT)
- refined_type = /obj/item/stack/sheet/mineral/titanium
- mine_experience = 3
-
-/obj/item/stack/ore/slag
- name = "slag"
- desc = ""
- icon_state = "slag"
- item_state = "slag"
- singular_name = "slag chunk"
-
-/obj/item/stack/ore/Initialize()
- . = ..()
- pixel_x = rand(0,16)-8
- pixel_y = rand(0,8)-8
-
-/obj/item/stack/ore/ex_act(severity, target)
- if (!severity || severity >= 2)
- return
- qdel(src)
-
-
-/*****************************Coin********************************/
-
-// The coin's value is a value of it's materials.
-// Yes, the gold standard makes a come-back!
-// This is the only way to make coins that are possible to produce on station actually worth anything.
-/obj/item/coin
- icon = 'icons/obj/economy.dmi'
- name = "coin"
- icon_state = "coin"
- flags_1 = CONDUCT_1
- force = 1
- throwforce = 2
- w_class = WEIGHT_CLASS_TINY
- custom_materials = list(/datum/material/iron = 400)
- material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR
- var/list/sideslist = list("heads","tails")
- var/cooldown = 0
- var/value
- var/coinflip
- item_flags = NO_MAT_REDEMPTION //You know, it's kind of a problem that money is worth more extrinsicly than intrinsically in this universe.
-
-/obj/item/coin/Initialize()
- . = ..()
- coinflip = pick(sideslist)
- icon_state = "coin_[coinflip]"
- pixel_x = rand(0,16)-8
- pixel_y = rand(0,8)-8
-
-/obj/item/coin/set_custom_materials(list/materials, multiplier = 1)
- . = ..()
- value = 0
- for(var/i in custom_materials)
- var/datum/material/M = i
- value += M.value_per_unit * custom_materials[M]
-
-/obj/item/coin/get_item_credit_value()
- return value
-
-/obj/item/coin/suicide_act(mob/living/user)
- user.visible_message("[user] contemplates suicide with \the [src]!")
- if (!attack_self(user))
- user.visible_message("[user] couldn't flip \the [src]!")
- return SHAME
- addtimer(CALLBACK(src, PROC_REF(manual_suicide), user), 10)//10 = time takes for flip animation
- return MANUAL_SUICIDE_NONLETHAL
-
-/obj/item/coin/proc/manual_suicide(mob/living/user)
- var/index = sideslist.Find(coinflip)
- if (index==2)//tails
- user.visible_message("\the [src] lands on [coinflip]! [user] promptly falls over, dead!")
- user.adjustOxyLoss(200)
- user.death(0)
- user.set_suicide(TRUE)
- user.suicide_log()
- else
- user.visible_message("\the [src] lands on [coinflip]! [user] keeps on living!")
-
-/obj/item/coin/examine(mob/user)
- . = ..()
- . += "It's worth [value] credit\s."
-
-
-
-/obj/item/coin/attack_self(mob/user)
- if(cooldown < world.time)
- cooldown = world.time + 15
- flick("coin_[coinflip]_flip", src)
- coinflip = pick(sideslist)
- icon_state = "coin_[coinflip]"
- playsound(user.loc, 'sound/blank.ogg', 50, TRUE)
- var/oldloc = loc
- sleep(15)
- if(loc == oldloc && user && !user.incapacitated())
- user.visible_message("[user] has flipped [src]. It lands on [coinflip].", \
- "I flip [src]. It lands on [coinflip].", \
- "I hear the clattering of loose change.")
- return TRUE//did the coin flip? useful for suicide_act
-
-/obj/item/coin/gold
- custom_materials = list(/datum/material/gold = 400)
-
-/obj/item/coin/silver
- custom_materials = list(/datum/material/silver = 400)
-
-/obj/item/coin/diamond
- custom_materials = list(/datum/material/diamond = 400)
-
-/obj/item/coin/plasma
- custom_materials = list(/datum/material/plasma = 400)
-
-/obj/item/coin/uranium
- custom_materials = list(/datum/material/uranium = 400)
-
-/obj/item/coin/titanium
- custom_materials = list(/datum/material/titanium = 400)
-
-/obj/item/coin/bananium
- custom_materials = list(/datum/material/bananium = 400)
-
-
-/obj/item/coin/mythril
- custom_materials = list(/datum/material/mythril = 400)
-
-/obj/item/coin/plastic
- custom_materials = list(/datum/material/plastic = 400)
-
-/obj/item/coin/runite
- custom_materials = list(/datum/material/runite = 400)
-
-/obj/item/coin/twoheaded
- desc = ""
- sideslist = list("heads")
-
-/obj/item/coin/antagtoken
- name = "antag token"
- desc = ""
- icon_state = "coin_valid"
- custom_materials = list(/datum/material/plastic = 400)
- sideslist = list("valid", "salad")
- material_flags = NONE
-
-/obj/item/coin/iron
-
-#undef ORESTACK_OVERLAYS_MAX
diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm
index 13c5535c1e..283ea8ada4 100644
--- a/code/modules/mob/dead/new_player/new_player.dm
+++ b/code/modules/mob/dead/new_player/new_player.dm
@@ -501,13 +501,6 @@ GLOBAL_LIST_INIT(roleplay_readme, world.file2list("strings/rt/Lore_Primer.txt"))
// add_roundplayed(character.ckey)
log_manifest(character.mind.key,character.mind,character,latejoin = TRUE)
-/mob/dead/new_player/proc/AddEmploymentContract(mob/living/carbon/human/employee)
- //TODO: figure out a way to exclude wizards/nukeops/demons from this.
- for(var/C in GLOB.employmentCabinets)
- var/obj/structure/filingcabinet/employment/employmentCabinet = C
- if(!employmentCabinet.virgin)
- employmentCabinet.addFile(employee)
-
/mob/dead/new_player/proc/LateChoices()
var/list/dat = list("Round Duration: [DisplayTimeText(world.time - SSticker.round_start_time, 1)]
")
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 1e8e92823d..991c7da0f7 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -285,10 +285,6 @@
dat += "
Back: [back ? back : "Nothing"]"
-
- if(istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/tank))
- dat += "
[internal ? "Disable Internals" : "Set Internals"]"
-
if(handcuffed)
dat += "
Handcuffed"
if(legcuffed)
@@ -589,11 +585,10 @@
else
if(message)
visible_message("[src] pukes!", "I puke!")
- if(!isflyperson(src))
- SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "vomit", /datum/mood_event/vomit)
- if(iscarbon(src))
- var/mob/living/carbon/C = src
- C.add_stress(/datum/stressevent/vomit)
+ SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "vomit", /datum/mood_event/vomit)
+ if(iscarbon(src))
+ var/mob/living/carbon/C = src
+ C.add_stress(/datum/stressevent/vomit)
else
if(NOBLOOD in dna?.species?.species_traits)
return TRUE
diff --git a/code/modules/mob/living/carbon/carbon_movement.dm b/code/modules/mob/living/carbon/carbon_movement.dm
index c1c1203b3c..3977d54eee 100644
--- a/code/modules/mob/living/carbon/carbon_movement.dm
+++ b/code/modules/mob/living/carbon/carbon_movement.dm
@@ -11,11 +11,6 @@
if(!isturf(loc))
return 0
- // Do we have a jetpack implant (and is it on)?
- var/obj/item/organ/cyberimp/chest/thrusters/T = getorganslot(ORGAN_SLOT_THRUSTERS)
- if(istype(T) && movement_dir && T.allow_thrust(0.01))
- return 1
-
/mob/living/carbon/Move(NewLoc, direct)
. = ..()
if(. && !(movement_type & FLOATING)) //floating is easy
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 4e2a43f9d3..15bb68ae3f 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -495,13 +495,6 @@
if(R)
. += "Rank: [R.fields["rank"]]\n\[Front photo\]\[Side photo\]"
if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD))
- var/cyberimp_detect
- for(var/obj/item/organ/cyberimp/CI in internal_organs)
- if(CI.status == ORGAN_ROBOTIC && !CI.syndicate_implant)
- cyberimp_detect += "[name] is modified with a [CI.name]."
- if(cyberimp_detect)
- . += "Detected cybernetic modifications:"
- . += cyberimp_detect
if(R)
var/health_r = R.fields["p_stat"]
. += "\[[health_r]\]"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 3cee38ceb4..a0a4cd68e6 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -141,9 +141,6 @@
/mob/living/carbon/human/prepare_data_huds()
//Update med hud images...
..()
- //...sec hud images...
- sec_hud_set_implants()
- sec_hud_set_security_status()
//...and display them.
add_to_all_human_data_huds()
@@ -948,129 +945,21 @@
/mob/living/carbon/human/species/felinid
race = /datum/species/human/felinid
-/mob/living/carbon/human/species/fly
- race = /datum/species/fly
-
-/mob/living/carbon/human/species/golem
- race = /datum/species/golem
-
-/mob/living/carbon/human/species/golem/random
- race = /datum/species/golem/random
-
-/mob/living/carbon/human/species/golem/adamantine
- race = /datum/species/golem/adamantine
-
-/mob/living/carbon/human/species/golem/plasma
- race = /datum/species/golem/plasma
-
-/mob/living/carbon/human/species/golem/diamond
- race = /datum/species/golem/diamond
-
-/mob/living/carbon/human/species/golem/gold
- race = /datum/species/golem/gold
-
-/mob/living/carbon/human/species/golem/silver
- race = /datum/species/golem/silver
-
-/mob/living/carbon/human/species/golem/plasteel
- race = /datum/species/golem/plasteel
-
-/mob/living/carbon/human/species/golem/titanium
- race = /datum/species/golem/titanium
-
-/mob/living/carbon/human/species/golem/plastitanium
- race = /datum/species/golem/plastitanium
-
-/mob/living/carbon/human/species/golem/alien_alloy
- race = /datum/species/golem/alloy
-
-/mob/living/carbon/human/species/golem/wood
- race = /datum/species/golem/wood
-
-/mob/living/carbon/human/species/golem/uranium
- race = /datum/species/golem/uranium
-
-/mob/living/carbon/human/species/golem/sand
- race = /datum/species/golem/sand
-
-/mob/living/carbon/human/species/golem/glass
- race = /datum/species/golem/glass
-
-/mob/living/carbon/human/species/golem/bluespace
- race = /datum/species/golem/bluespace
-
-/mob/living/carbon/human/species/golem/bananium
- race = /datum/species/golem/bananium
-
-/mob/living/carbon/human/species/golem/blood_cult
- race = /datum/species/golem/runic
-
-/mob/living/carbon/human/species/golem/cloth
- race = /datum/species/golem/cloth
-
-/mob/living/carbon/human/species/golem/plastic
- race = /datum/species/golem/plastic
-
-/mob/living/carbon/human/species/golem/bronze
- race = /datum/species/golem/bronze
-
-/mob/living/carbon/human/species/golem/cardboard
- race = /datum/species/golem/cardboard
-
-/mob/living/carbon/human/species/golem/leather
- race = /datum/species/golem/leather
-
-/mob/living/carbon/human/species/golem/bone
- race = /datum/species/golem/bone
-
-/mob/living/carbon/human/species/golem/durathread
- race = /datum/species/golem/durathread
-
-/mob/living/carbon/human/species/golem/snow
- race = /datum/species/golem/snow
-
-/mob/living/carbon/human/species/golem/capitalist
- race = /datum/species/golem/capitalist
-
-/mob/living/carbon/human/species/golem/soviet
- race = /datum/species/golem/soviet
-
/mob/living/carbon/human/species/lizard
race = /datum/species/lizard
/mob/living/carbon/human/species/ethereal
race = /datum/species/ethereal
-/mob/living/carbon/human/species/moth
- race = /datum/species/moth
-
-/mob/living/carbon/human/species/mush
- race = /datum/species/mush
-
-/mob/living/carbon/human/species/plasma
- race = /datum/species/plasmaman
-
-/mob/living/carbon/human/species/pod
- race = /datum/species/pod
-
/mob/living/carbon/human/species/shadow
race = /datum/species/shadow
/mob/living/carbon/human/species/shadow/nightmare
race = /datum/species/shadow/nightmare
-//mob/living/carbon/human/species/skeleton
-// race = /datum/species/skeleton
-
/mob/living/carbon/human/species/snail
race = /datum/species/snail
-/mob/living/carbon/human/species/synth
- race = /datum/species/synth
-
-/mob/living/carbon/human/species/synth/military
- race = /datum/species/synth/military
-
/mob/living/carbon/human/species/vampire
race = /datum/species/vampire
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 55931f7139..af524ca8e5 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -400,8 +400,6 @@
brute_loss = 30*(2 - round(bomb_armor*0.01, 0.05))
burn_loss = brute_loss //damage gets reduced from 120 to up to 60 combined brute+burn
damage_clothes(100 - bomb_armor, BRUTE, "bomb")
-// if (!istype(ears, /obj/item/clothing/ears/earmuffs))
-// adjustEarDamage(30, 120)
Unconscious(20) //short amount of time for follow up attacks against elusive enemies like wizards
Knockdown(200 - (bomb_armor * 1.6)) //between ~4 and ~20 seconds of knockdown depending on bomb armor
@@ -409,9 +407,6 @@
brute_loss = 5
if(bomb_armor)
brute_loss = 5*(2 - round(bomb_armor*0.01, 0.05))
-// damage_clothes(max(50 - bomb_armor, 0), BRUTE, "bomb")
-// if (!istype(ears, /obj/item/clothing/ears/earmuffs))
-// adjustEarDamage(15,60)
Knockdown(160 - (bomb_armor * 1.6)) //100 bomb armor will prevent knockdown altogether
take_overall_damage(brute_loss,burn_loss)
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 4432e0aff6..da2bf4a5de 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -360,12 +360,8 @@
/mob/living/carbon/human/wear_mask_update(obj/item/I, toggle_off = 1)
if((I.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || (initial(I.flags_inv) & (HIDEHAIR|HIDEFACIALHAIR)))
update_hair()
- if(toggle_off && internal && !getorganslot(ORGAN_SLOT_BREATHING_TUBE))
- update_internals_hud_icon(0)
- internal = null
if(I.flags_inv & HIDEEYES)
update_inv_glasses()
- sec_hud_set_security_status()
..()
/mob/living/carbon/human/head_update(obj/item/I, forced)
@@ -379,7 +375,6 @@
update_inv_glasses()
if(I.flags_inv & HIDEEARS || forced)
update_body()
- sec_hud_set_security_status()
..()
/mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 76bf8f86e0..3ec687e037 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -154,39 +154,6 @@
if(!dna || !dna.species.handle_mutations_and_radiation(src))
..()
-/mob/living/carbon/human/breathe()
- if(!dna.species.breathe(src))
- ..()
-
-/mob/living/carbon/human/check_breath(datum/gas_mixture/breath)
-
- var/L = getorganslot(ORGAN_SLOT_LUNGS)
-
- if(!L)
- if(health >= crit_threshold)
- adjustOxyLoss(HUMAN_MAX_OXYLOSS + 1)
- else if(!HAS_TRAIT(src, TRAIT_NOCRITDAMAGE))
- adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS)
-
- failed_last_breath = 1
-
- var/datum/species/S = dna.species
-
- if(S.breathid == "o2")
- throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy)
- else if(S.breathid == "tox")
- throw_alert("not_enough_tox", /atom/movable/screen/alert/not_enough_tox)
- else if(S.breathid == "co2")
- throw_alert("not_enough_co2", /atom/movable/screen/alert/not_enough_co2)
- else if(S.breathid == "n2")
- throw_alert("not_enough_nitro", /atom/movable/screen/alert/not_enough_nitro)
-
- return FALSE
- else
- if(istype(L, /obj/item/organ/lungs))
- var/obj/item/organ/lungs/lun = L
- lun.check_breath(breath,src)
-
/mob/living/carbon/human/handle_environment(datum/gas_mixture/environment)
dna.species.handle_environment(environment, src)
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index bb62a1d59d..641ed4636a 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -2474,12 +2474,6 @@ GLOBAL_LIST_EMPTY(roundstart_races)
return 1
/datum/species/proc/on_hit(obj/projectile/P, mob/living/carbon/human/H)
- // called when hit by a projectile
- switch(P.type)
- if(/obj/projectile/energy/floramut) // overwritten by plants/pods
- H.show_message(span_notice("The radiation beam dissipates harmlessly through my body."))
- if(/obj/projectile/energy/florayield)
- H.show_message(span_notice("The radiation beam dissipates harmlessly through my body."))
/datum/species/proc/bullet_act(obj/projectile/P, mob/living/carbon/human/H, def_zone = BODY_ZONE_CHEST)
// called before a projectile hit
@@ -2493,15 +2487,6 @@ GLOBAL_LIST_EMPTY(roundstart_races)
/obj/item/proc/blockproj(mob/living/carbon/human/H)
return
-/////////////
-//BREATHING//
-/////////////
-
-/datum/species/proc/breathe(mob/living/carbon/human/H)
- if(HAS_TRAIT(H, TRAIT_NOBREATH))
- return TRUE
-
-
/datum/species/proc/handle_environment(datum/gas_mixture/environment, mob/living/carbon/human/H)
if(!environment)
return
diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
deleted file mode 100644
index 6427fa57e2..0000000000
--- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/datum/species/fly
- name = "Flyperson"
- id = "fly"
- say_mod = "buzzes"
- species_traits = list(NOEYESPRITES)
- inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
- mutanttongue = /obj/item/organ/tongue/fly
- mutantliver = /obj/item/organ/liver/fly
- mutantstomach = /obj/item/organ/stomach/fly
- meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/fly
- disliked_food = null
- liked_food = GROSS
- changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | SLIME_EXTRACT
-
-/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
- if(chem.type == /datum/reagent/toxin/pestkiller)
- H.adjustToxLoss(3)
- H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
- return 1
-
-
-/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
- if(istype(chem, /datum/reagent/consumable))
- var/datum/reagent/consumable/nutri_check = chem
- if(nutri_check.nutriment_factor > 0)
- var/turf/pos = get_turf(H)
- H.vomit(0, FALSE, FALSE, 2, TRUE)
- playsound(pos, 'sound/blank.ogg', 50, TRUE)
- H.visible_message("[H] vomits on the floor!", \
- "I throw up on the floor!")
- ..()
-
-/datum/species/fly/check_species_weakness(obj/item/weapon, mob/living/attacker)
- if(istype(weapon, /obj/item/melee/flyswatter))
- return 29 //Flyswatters deal 30x damage to flypeople.
- return 0
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
deleted file mode 100644
index 46d2d23dff..0000000000
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ /dev/null
@@ -1,1128 +0,0 @@
-/datum/species/golem
- // Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck.
- name = "Golem"
- id = "iron golem"
- species_traits = list(NOBLOOD,MUTCOLORS,NO_UNDERWEAR)
- inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
- inherent_biotypes = MOB_HUMANOID|MOB_MINERAL
- mutant_organs = list(/obj/item/organ/adamantine_resonator)
- speedmod = 2
- armor = 55
- siemens_coeff = 0
- punchdamagelow = 5
- punchdamagehigh = 14
- punchstunthreshold = 11 //about 40% chance to stun
- no_equip = list(SLOT_WEAR_MASK, SLOT_ARMOR, SLOT_GLOVES, SLOT_SHOES, SLOT_PANTS, SLOT_S_STORE)
- nojumpsuit = 1
- changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC
- sexes = 1
- damage_overlay_type = ""
- meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/golem
- // To prevent golem subtypes from overwhelming the odds when random species
- // changes, only the Random Golem type can be chosen
- limbs_id = "golem"
- fixed_mut_color = "aaa"
- var/info_text = "As an Iron Golem, you don't have any special traits."
- var/random_eligible = TRUE //If false, the golem subtype can't be made through golem mutation toxin
-
- var/prefix = "Iron"
- var/list/special_names = list("Tarkus")
- var/human_surname_chance = 3
- var/special_name_chance = 5
- var/owner //dobby is a free golem
-
-/datum/species/golem/random_name(gender,unique,lastname)
- var/golem_surname = pick(GLOB.golem_names)
- // 3% chance that our golem has a human surname, because
- // cultural contamination
- if(prob(human_surname_chance))
- golem_surname = pick(GLOB.last_names)
- else if(special_names && special_names.len && prob(special_name_chance))
- golem_surname = pick(special_names)
-
- var/golem_name = "[prefix] [golem_surname]"
- return golem_name
-
-/datum/species/golem/random
- name = "Random Golem"
- changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP
- var/static/list/random_golem_types
-
-/datum/species/golem/random/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- ..()
- if(!random_golem_types)
- random_golem_types = subtypesof(/datum/species/golem) - type
- for(var/V in random_golem_types)
- var/datum/species/golem/G = V
- if(!initial(G.random_eligible))
- random_golem_types -= G
- var/datum/species/golem/golem_type = pick(random_golem_types)
- var/mob/living/carbon/human/H = C
- H.set_species(golem_type)
- to_chat(H, "[initial(golem_type.info_text)]")
-
-/datum/species/golem/adamantine
- name = "Adamantine Golem"
- id = "adamantine golem"
- meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine
- mutant_organs = list(/obj/item/organ/adamantine_resonator, /obj/item/organ/vocal_cords/adamantine)
- fixed_mut_color = "4ed"
- info_text = "As an Adamantine Golem, you possess special vocal cords allowing you to \"resonate\" messages to all golems. Your unique mineral makeup makes you immune to most types of magic."
- prefix = "Adamantine"
- special_names = null
-
-/datum/species/golem/adamantine/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- ..()
- ADD_TRAIT(C, TRAIT_ANTIMAGIC, SPECIES_TRAIT)
-
-/datum/species/golem/adamantine/on_species_loss(mob/living/carbon/C)
- REMOVE_TRAIT(C, TRAIT_ANTIMAGIC, SPECIES_TRAIT)
- ..()
-
-//The suicide bombers of golemkind
-/datum/species/golem/plasma
- name = "Plasma Golem"
- id = "plasma golem"
- fixed_mut_color = "a3d"
- meat = /obj/item/stack/ore/plasma
- //Can burn and takes damage from heat
- inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER) //no RESISTHEAT, NOFIRE
- info_text = "As a Plasma Golem, you burn easily. Be careful, if you get hot enough while burning, you'll blow up!"
- heatmod = 0 //fine until they blow up
- prefix = "Plasma"
- special_names = list("Flood","Fire","Bar","Man")
- var/boom_warning = FALSE
- var/datum/action/innate/ignite/ignite
-
-/datum/species/golem/plasma/spec_life(mob/living/carbon/human/H)
- if(H.bodytemperature > 750)
- if(!boom_warning && H.on_fire)
- to_chat(H, "I feel like you could blow up at any moment!")
- boom_warning = TRUE
- else
- if(boom_warning)
- to_chat(H, "I feel more stable.")
- boom_warning = FALSE
-
- if(H.bodytemperature > 850 && H.on_fire && prob(25))
- explosion(get_turf(H),1,2,4,flame_range = 5)
- if(H)
- H.gib()
- if(H.fire_stacks < 2) //flammable
- H.adjust_fire_stacks(1)
- ..()
-
-/datum/species/golem/plasma/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- ..()
- if(ishuman(C))
- ignite = new
- ignite.Grant(C)
-
-/datum/species/golem/plasma/on_species_loss(mob/living/carbon/C)
- if(ignite)
- ignite.Remove(C)
- ..()
-
-/datum/action/innate/ignite
- name = "Ignite"
- desc = ""
- check_flags = AB_CHECK_CONSCIOUS
- button_icon_state = "sacredflame"
-
-/datum/action/innate/ignite/Activate()
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- if(H.fire_stacks)
- to_chat(owner, "I ignite yourself!")
- else
- to_chat(owner, "I try to ignite yourself, but fail!")
- H.IgniteMob() //firestacks are already there passively
-
-//Harder to hurt
-/datum/species/golem/diamond
- name = "Diamond Golem"
- id = "diamond golem"
- fixed_mut_color = "0ff"
- armor = 70 //up from 55
- meat = /obj/item/stack/ore/diamond
- info_text = "As a Diamond Golem, you are more resistant than the average golem."
- prefix = "Diamond"
- special_names = list("Back","Grill")
-
-//Faster but softer and less armoured
-/datum/species/golem/gold
- name = "Gold Golem"
- id = "gold golem"
- fixed_mut_color = "cc0"
- speedmod = 1
- armor = 25 //down from 55
- meat = /obj/item/stack/ore/gold
- info_text = "As a Gold Golem, you are faster but less resistant than the average golem."
- prefix = "Golden"
- special_names = list("Boy")
-
-//Heavier, thus higher chance of stunning when punching
-/datum/species/golem/silver
- name = "Silver Golem"
- id = "silver golem"
- fixed_mut_color = "ddd"
- punchstunthreshold = 9 //60% chance, from 40%
- meat = /obj/item/stack/ore/silver
- info_text = "As a Silver Golem, my attacks have a higher chance of stunning. Being made of silver, my body is immune to most types of magic."
- prefix = "Silver"
- special_names = list("Surfer", "Chariot", "Lining")
-
-/datum/species/golem/silver/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- ..()
- ADD_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT)
-
-/datum/species/golem/silver/on_species_loss(mob/living/carbon/C)
- REMOVE_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT)
- ..()
-
-//Harder to stun, deals more damage, massively slowpokes, but gravproof and obstructive. Basically, The Wall.
-/datum/species/golem/plasteel
- name = "Plasteel Golem"
- id = "plasteel golem"
- fixed_mut_color = "bbb"
- stunmod = 0.4
- punchdamagelow = 12
- punchdamagehigh = 21
- punchstunthreshold = 18 //still 40% stun chance
- speedmod = 4 //pretty fucking slow
- meat = /obj/item/stack/ore/iron
- info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching. You also magnetically attach to surfaces and so don't float without gravity and cannot have positions swapped with other beings."
- attack_verb = "smash"
- attack_sound = 'sound/blank.ogg' //hits pretty hard
- prefix = "Plasteel"
- special_names = null
-
-/datum/species/golem/plasteel/negates_gravity(mob/living/carbon/human/H)
- return TRUE
-
-/datum/species/golem/plasteel/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- ..()
- ADD_TRAIT(C, TRAIT_NOMOBSWAP, SPECIES_TRAIT) //THE WALL THE WALL THE WALL
-
-/datum/species/golem/plasteel/on_species_loss(mob/living/carbon/C)
- REMOVE_TRAIT(C, TRAIT_NOMOBSWAP, SPECIES_TRAIT) //NOTHING ON ERF CAN MAKE IT FALL
- ..()
-
-//Immune to ash storms
-/datum/species/golem/titanium
- name = "Titanium Golem"
- id = "titanium golem"
- fixed_mut_color = "fff"
- meat = /obj/item/stack/ore/titanium
- info_text = "As a Titanium Golem, you are immune to ash storms, and slightly more resistant to burn damage."
- burnmod = 0.9
- prefix = "Titanium"
- special_names = list("Dioxide")
-
-/datum/species/golem/titanium/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- C.weather_immunities |= "ash"
-
-/datum/species/golem/titanium/on_species_loss(mob/living/carbon/C)
- . = ..()
- C.weather_immunities -= "ash"
-
-//Immune to ash storms and lava
-/datum/species/golem/plastitanium
- name = "Plastitanium Golem"
- id = "plastitanium golem"
- fixed_mut_color = "888"
- meat = /obj/item/stack/ore/titanium
- info_text = "As a Plastitanium Golem, you are immune to both ash storms and lava, and slightly more resistant to burn damage."
- burnmod = 0.8
- prefix = "Plastitanium"
- special_names = null
-
-/datum/species/golem/plastitanium/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- C.weather_immunities |= "lava"
- C.weather_immunities |= "ash"
-
-/datum/species/golem/plastitanium/on_species_loss(mob/living/carbon/C)
- . = ..()
- C.weather_immunities -= "ash"
- C.weather_immunities -= "lava"
-
-//Regenerates because self-repairing super-advanced alien tech
-/datum/species/golem/alloy/spec_life(mob/living/carbon/human/H)
- if(H.stat == DEAD)
- return
- H.heal_overall_damage(2,2, 0, BODYPART_ORGANIC)
- H.adjustToxLoss(-2)
- H.adjustOxyLoss(-2)
-
-//Since this will usually be created from a collaboration between podpeople and free golems, wood golems are a mix between the two races
-/datum/species/golem/wood
- name = "Wood Golem"
- id = "wood golem"
- fixed_mut_color = "9E704B"
- meat = /obj/item/stack/sheet/mineral/wood
- //Can burn and take damage from heat
- inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
- armor = 30
- burnmod = 1.25
- heatmod = 1.5
- info_text = "As a Wooden Golem, you have plant-like traits: you take damage from extreme temperatures, can be set on fire, and have lower armor than a normal golem. You regenerate when in the light and wither in the darkness."
- prefix = "Wooden"
- special_names = list("Bark", "Willow", "Catalpa", "Woody", "Oak", "Sap", "Twig", "Branch", "Maple", "Birch", "Elm", "Basswood", "Cottonwood", "Larch", "Aspen", "Ash", "Beech", "Buckeye", "Cedar", "Chestnut", "Cypress", "Fir", "Hawthorn", "Hazel", "Hickory", "Ironwood", "Juniper", "Leaf", "Mangrove", "Palm", "Pawpaw", "Pine", "Poplar", "Redwood", "Redbud", "Sassafras", "Spruce", "Sumac", "Trunk", "Walnut", "Yew")
- human_surname_chance = 0
- special_name_chance = 100
- inherent_factions = list("plants", "vines")
-
-/datum/species/golem/wood/spec_life(mob/living/carbon/human/H)
- if(H.stat == DEAD)
- return
- var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
- if(isturf(H.loc)) //else, there's considered to be no light
- var/turf/T = H.loc
- light_amount = min(1,T.get_lumcount()) - 0.5
- H.adjust_nutrition(light_amount * 10)
- if(H.nutrition > NUTRITION_LEVEL_ALMOST_FULL)
- H.set_nutrition(NUTRITION_LEVEL_ALMOST_FULL)
- if(light_amount > 0.2) //if there's enough light, heal
- H.heal_overall_damage(1,1,0, BODYPART_ORGANIC)
- H.adjustToxLoss(-1)
- H.adjustOxyLoss(-1)
-
- if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
- H.take_overall_damage(2,0)
-
-/datum/species/golem/wood/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
- if(chem.type == /datum/reagent/toxin/plantbgone)
- H.adjustToxLoss(3)
- H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
- return 1
-
-//Radioactive
-/datum/species/golem/uranium
- name = "Uranium Golem"
- id = "uranium golem"
- fixed_mut_color = "7f0"
- meat = /obj/item/stack/ore/uranium
- info_text = "As an Uranium Golem, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected."
-
- var/last_event = 0
- var/active = null
- prefix = "Uranium"
- special_names = list("Oxide", "Rod", "Meltdown", "235")
-
-/datum/species/golem/uranium/spec_life(mob/living/carbon/human/H)
- if(!active)
- if(world.time > last_event+30)
- active = 1
- radiation_pulse(H, 50)
- last_event = world.time
- active = null
- ..()
-
-//Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death.
-/datum/species/golem/sand
- name = "Sand Golem"
- id = "sand golem"
- fixed_mut_color = "ffdc8f"
- meat = /obj/item/stack/ore/glass //this is sand
- armor = 0
- burnmod = 3 //melts easily
- brutemod = 0.25
- info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage and energy weapons. You will also turn to sand when dying, preventing any form of recovery."
- attack_sound = 'sound/blank.ogg'
- prefix = "Sand"
- special_names = list("Castle", "Bag", "Dune", "Worm", "Storm")
-
-/datum/species/golem/sand/spec_death(gibbed, mob/living/carbon/human/H)
- H.visible_message("[H] turns into a pile of sand!")
- for(var/obj/item/W in H)
- H.dropItemToGround(W)
- for(var/i=1, i <= rand(3,5), i++)
- new /obj/item/stack/ore/glass(get_turf(H))
- qdel(H)
-
-/datum/species/golem/sand/bullet_act(obj/projectile/P, mob/living/carbon/human/H)
- if(!(P.original == H && P.firer == H))
- if(P.flag == "bullet" || P.flag == "bomb")
- playsound(H, 'sound/blank.ogg', 70, TRUE)
- H.visible_message("The [P.name] sinks harmlessly in [H]'s sandy body!", \
- "The [P.name] sinks harmlessly in [H]'s sandy body!")
- return BULLET_ACT_BLOCK
- return ..()
-
-//Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death.
-/datum/species/golem/glass
- name = "Glass Golem"
- id = "glass golem"
- fixed_mut_color = "5a96b4aa" //transparent body
- meat = /obj/item/shard
- armor = 0
- brutemod = 3 //very fragile
- burnmod = 0.25
- info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage. However, you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery."
- attack_sound = 'sound/blank.ogg'
- prefix = "Glass"
- special_names = list("Lens", "Prism", "Fiber", "Bead")
-
-/datum/species/golem/glass/spec_death(gibbed, mob/living/carbon/human/H)
- playsound(H, "shatter", 70, TRUE)
- H.visible_message("[H] shatters!")
- for(var/obj/item/W in H)
- H.dropItemToGround(W)
- for(var/i=1, i <= rand(3,5), i++)
- new /obj/item/shard(get_turf(H))
- qdel(H)
-
-/datum/species/golem/glass/bullet_act(obj/projectile/P, mob/living/carbon/human/H)
- if(!(P.original == H && P.firer == H)) //self-shots don't reflect
- if(P.flag == "laser" || P.flag == "energy")
- H.visible_message("The [P.name] gets reflected by [H]'s glass skin!", \
- "The [P.name] gets reflected by [H]'s glass skin!")
- if(P.starting)
- var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
- var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
- // redirect the projectile
- P.firer = H
- P.preparePixelProjectile(locate(CLAMP(new_x, 1, world.maxx), CLAMP(new_y, 1, world.maxy), H.z), H)
- return BULLET_ACT_FORCE_PIERCE
- return ..()
-
-//Teleports when hit or when it wants to
-/datum/species/golem/bluespace
- name = "Bluespace Golem"
- id = "bluespace golem"
- fixed_mut_color = "33f"
- meat = /obj/item/stack/ore/bluespace_crystal
- info_text = "As a Bluespace Golem, you are spatially unstable: You will teleport when hit, and you can teleport manually at a long distance."
- attack_verb = "bluespace punch"
- attack_sound = 'sound/blank.ogg'
- prefix = "Bluespace"
- special_names = list("Crystal", "Polycrystal")
-
- var/datum/action/innate/unstable_teleport/unstable_teleport
- var/teleport_cooldown = 100
- var/last_teleport = 0
-
-/datum/species/golem/bluespace/proc/reactive_teleport(mob/living/carbon/human/H)
- H.visible_message("[H] teleports!", "I destabilize and teleport!")
- new /obj/effect/particle_effect/sparks(get_turf(H))
- playsound(get_turf(H), "sparks", 50, TRUE)
- do_teleport(H, get_turf(H), 6, asoundin = 'sound/blank.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
- last_teleport = world.time
-
-/datum/species/golem/bluespace/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
- ..()
- var/obj/item/I
- if(istype(AM, /obj/item))
- I = AM
- if(I.thrownby == H) //No throwing stuff at myself to trigger the teleport
- return 0
- else
- reactive_teleport(H)
-
-/datum/species/golem/bluespace/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
- ..()
- if(world.time > last_teleport + teleport_cooldown && M != H && M.used_intent.type != INTENT_HELP)
- reactive_teleport(H)
-
-/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
- ..()
- if(world.time > last_teleport + teleport_cooldown && user != H)
- reactive_teleport(H)
-
-/datum/species/golem/bluespace/on_hit(obj/projectile/P, mob/living/carbon/human/H)
- ..()
- if(world.time > last_teleport + teleport_cooldown)
- reactive_teleport(H)
-
-/datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- ..()
- if(ishuman(C))
- unstable_teleport = new
- unstable_teleport.Grant(C)
- last_teleport = world.time
-
-/datum/species/golem/bluespace/on_species_loss(mob/living/carbon/C)
- if(unstable_teleport)
- unstable_teleport.Remove(C)
- ..()
-
-/datum/action/innate/unstable_teleport
- name = "Unstable Teleport"
- check_flags = AB_CHECK_CONSCIOUS
- button_icon_state = "jaunt"
- icon_icon = 'icons/mob/actions/actions_spells.dmi'
- var/cooldown = 150
- var/last_teleport = 0
-
-/datum/action/innate/unstable_teleport/IsAvailable()
- if(..())
- if(world.time > last_teleport + cooldown)
- return 1
- return 0
-
-/datum/action/innate/unstable_teleport/Activate()
- var/mob/living/carbon/human/H = owner
- H.visible_message("[H] starts vibrating!", "I start charging my bluespace core...")
- playsound(get_turf(H), 'sound/blank.ogg', 25, TRUE)
- addtimer(CALLBACK(src, PROC_REF(teleport), H), 15)
-
-/datum/action/innate/unstable_teleport/proc/teleport(mob/living/carbon/human/H)
- H.visible_message("[H] disappears in a shower of sparks!", "I teleport!")
- var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread
- spark_system.set_up(10, 0, src)
- spark_system.attach(H)
- spark_system.start()
- do_teleport(H, get_turf(H), 12, asoundin = 'sound/blank.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
- last_teleport = world.time
- UpdateButtonIcon() //action icon looks unavailable
- //action icon looks available again
- addtimer(CALLBACK(src, PROC_REF(UpdateButtonIcon)), cooldown + 5)
-
-
-//honk
-/datum/species/golem/bananium
- name = "Bananium Golem"
- id = "bananium golem"
- fixed_mut_color = "ff0"
- say_mod = "honks"
- punchdamagelow = 0
- punchdamagehigh = 1
- punchstunthreshold = 2 //Harmless and can't stun
- meat = /obj/item/stack/ore/bananium
- info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you can barely even hurt people when punching them. Your skin also bleeds banana peels when damaged."
- attack_verb = "honk"
- attack_sound = 'sound/blank.ogg'
- prefix = "Bananium"
- special_names = null
-
- var/last_honk = 0
- var/honkooldown = 0
- var/last_banana = 0
- var/banana_cooldown = 100
- var/active = null
-
-/datum/species/golem/bananium/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- ..()
- last_banana = world.time
- last_honk = world.time
- RegisterSignal(C, COMSIG_MOB_SAY, PROC_REF(handle_speech))
-
-/datum/species/golem/bananium/on_species_loss(mob/living/carbon/C)
- . = ..()
- UnregisterSignal(C, COMSIG_MOB_SAY)
-
-/datum/species/golem/bananium/random_name(gender,unique,lastname)
- var/clown_name = pick(GLOB.clown_names)
- var/golem_name = "[uppertext(clown_name)]"
- return golem_name
-
-/datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
- ..()
- if(world.time > last_banana + banana_cooldown && M != H && M.used_intent.type != INTENT_HELP)
- new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
- last_banana = world.time
-
-/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
- ..()
- if(world.time > last_banana + banana_cooldown && user != H)
- new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
- last_banana = world.time
-
-/datum/species/golem/bananium/on_hit(obj/projectile/P, mob/living/carbon/human/H)
- ..()
- if(world.time > last_banana + banana_cooldown)
- new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
- last_banana = world.time
-
-/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
- ..()
- var/obj/item/I
- if(istype(AM, /obj/item))
- I = AM
- if(I.thrownby == H) //No throwing stuff at myself to make bananas
- return 0
- else
- new/obj/item/grown/bananapeel/specialpeel(get_turf(H))
- last_banana = world.time
-
-/datum/species/golem/bananium/spec_life(mob/living/carbon/human/H)
- if(!active)
- if(world.time > last_honk + honkooldown)
- active = 1
- playsound(get_turf(H), 'sound/blank.ogg', 50, TRUE)
- last_honk = world.time
- honkooldown = rand(20, 80)
- active = null
- ..()
-
-/datum/species/golem/bananium/spec_death(gibbed, mob/living/carbon/human/H)
- playsound(get_turf(H), 'sound/blank.ogg', 70, FALSE)
-
-/datum/species/golem/bananium/handle_speech(datum/source, list/speech_args)
- speech_args[SPEECH_SPANS] |= SPAN_CLOWN
-
-/datum/species/golem/runic
- name = "Runic Golem"
- id = "runic golem"
- limbs_id = "cultgolem"
- sexes = FALSE
- info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder Goddess Nar'Sie."
- species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) //no mutcolors
- inherent_traits = list(TRAIT_NOFLASH,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
- inherent_biotypes = MOB_HUMANOID|MOB_MINERAL
- prefix = "Runic"
- special_names = null
- inherent_factions = list("cult")
-
- var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem/phase_shift
- var/obj/effect/proc_holder/spell/targeted/abyssal_gaze/abyssal_gaze
- var/obj/effect/proc_holder/spell/targeted/dominate/dominate
-
-/datum/species/golem/runic/random_name(gender,unique,lastname)
- var/edgy_first_name = pick("Razor","Blood","Dark","Evil","Cold","Pale","Black","Silent","Chaos","Deadly","Coldsteel")
- var/edgy_last_name = pick("Edge","Night","Death","Razor","Blade","Steel","Calamity","Twilight","Shadow","Nightmare") //dammit Razor Razor
- var/golem_name = "[edgy_first_name] [edgy_last_name]"
- return golem_name
-
-/datum/species/golem/runic/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- phase_shift = new
- phase_shift.charge_counter = 0
- C.AddSpell(phase_shift)
- abyssal_gaze = new
- abyssal_gaze.charge_counter = 0
- C.AddSpell(abyssal_gaze)
- dominate = new
- dominate.charge_counter = 0
- C.AddSpell(dominate)
-
-/datum/species/golem/runic/on_species_loss(mob/living/carbon/C)
- . = ..()
- if(phase_shift)
- C.RemoveSpell(phase_shift)
- if(abyssal_gaze)
- C.RemoveSpell(abyssal_gaze)
- if(dominate)
- C.RemoveSpell(dominate)
-
-/datum/species/golem/runic/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
- if(istype(chem, /datum/reagent/water/holywater))
- H.adjustFireLoss(4)
- H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
-
- if(chem.type == /datum/reagent/fuel/unholywater)
- H.adjustBruteLoss(-4)
- H.adjustFireLoss(-4)
- H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
-
-/datum/species/golem/cloth
- name = "Cloth Golem"
- id = "cloth golem"
- limbs_id = "clothgolem"
- sexes = FALSE
- info_text = "As a Cloth Golem, you are able to reform myself after death, provided my remains aren't burned or destroyed. You are, of course, very flammable. \
- Being made of cloth, my body is magic resistant and faster than that of other golems, but weaker and less resilient."
- species_traits = list(NOBLOOD,NO_UNDERWEAR) //no mutcolors, and can burn
- inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_CHUNKYFINGERS)
- inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
- armor = 15 //feels no pain, but not too resistant
- burnmod = 2 // don't get burned
- speedmod = 1 // not as heavy as stone
- punchdamagelow = 4
- punchstunthreshold = 7
- punchdamagehigh = 8 // not as heavy as stone
- prefix = "Cloth"
- special_names = null
-
-/datum/species/golem/cloth/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- ..()
- ADD_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT)
-
-/datum/species/golem/cloth/on_species_loss(mob/living/carbon/C)
- REMOVE_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT)
- ..()
-
-/datum/species/golem/cloth/check_roundstart_eligible()
- if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
- return TRUE
- return ..()
-
-/datum/species/golem/cloth/random_name(gender,unique,lastname)
- var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \
- "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh
- var/golem_name = "[pharaoh_name] \Roman[rand(1,99)]"
- return golem_name
-
-/datum/species/golem/cloth/spec_life(mob/living/carbon/human/H)
- if(H.fire_stacks < 1)
- H.adjust_fire_stacks(1) //always prone to burning
- ..()
-
-/datum/species/golem/cloth/spec_death(gibbed, mob/living/carbon/human/H)
- if(gibbed)
- return
- if(H.on_fire)
- H.visible_message("[H] burns into ash!")
- H.dust(just_ash = TRUE)
- return
-
- H.visible_message("[H] falls apart into a pile of bandages!")
- new /obj/structure/cloth_pile(get_turf(H), H)
- ..()
-
-/obj/structure/cloth_pile
- name = "pile of bandages"
- desc = ""
- max_integrity = 50
- armor = list("melee" = 90, "bullet" = 90, "laser" = 25, "energy" = 80, "bomb" = 50, "bio" = 100, "fire" = -50, "acid" = -50)
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "pile_bandages"
- resistance_flags = FLAMMABLE
-
- var/revive_time = 900
- var/mob/living/carbon/human/cloth_golem
-
-/obj/structure/cloth_pile/Initialize(mapload, mob/living/carbon/human/H)
- . = ..()
- if(!QDELETED(H) && is_species(H, /datum/species/golem/cloth))
- H.unequip_everything()
- H.forceMove(src)
- cloth_golem = H
- to_chat(cloth_golem, "I start gathering my life energy, preparing to rise again...")
- addtimer(CALLBACK(src, PROC_REF(revive)), revive_time)
- else
- return INITIALIZE_HINT_QDEL
-
-/obj/structure/cloth_pile/Destroy()
- if(cloth_golem)
- QDEL_NULL(cloth_golem)
- return ..()
-
-/obj/structure/cloth_pile/burn()
- visible_message("[src] burns into ash!")
- new /obj/item/ash(get_turf(src))
- ..()
-
-/obj/structure/cloth_pile/proc/revive(full_heal = FALSE, admin_revive = FALSE)
- if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime
- return
- if(cloth_golem.suiciding || cloth_golem.hellbound)
- QDEL_NULL(cloth_golem)
- return
-
- invisibility = INVISIBILITY_MAXIMUM //disappear before the animation
- new /obj/effect/temp_visual/mummy_animation(get_turf(src))
- if(cloth_golem.revive(full_heal = TRUE, admin_revive = TRUE))
- cloth_golem.grab_ghost() //won't pull if it's a suicide
- sleep(20)
- cloth_golem.forceMove(get_turf(src))
- cloth_golem.visible_message("[src] rises and reforms into [cloth_golem]!","I reform into yourself!")
- cloth_golem = null
- qdel(src)
-
-/obj/structure/cloth_pile/attackby(obj/item/P, mob/living/carbon/human/user, params)
- . = ..()
-
- if(resistance_flags & ON_FIRE)
- return
-
- if(P.get_temperature())
- visible_message("[src] bursts into flames!")
- fire_act()
-
-/datum/species/golem/plastic
- name = "Plastic Golem"
- id = "plastic golem"
- prefix = "Plastic"
- special_names = list("Sheet", "Bag", "Bottle")
- fixed_mut_color = "fffa"
- info_text = "As a Plastic Golem, you are capable of ventcrawling and passing through plastic flaps as long as you are naked."
-
-/datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- C.ventcrawler = VENTCRAWLER_NUDE
-
-/datum/species/golem/plastic/on_species_loss(mob/living/carbon/C)
- . = ..()
- C.ventcrawler = initial(C.ventcrawler)
-
-/datum/species/golem/bronze
- name = "Bronze Golem"
- id = "bronze golem"
- prefix = "Bronze"
- special_names = list("Bell")
- fixed_mut_color = "cd7f32"
- info_text = "As a Bronze Golem, you are very resistant to loud noises, and make loud noises if something hard hits you, however this ability does hurt my hearing."
- mutantears = /obj/item/organ/ears/bronze
- var/last_gong_time = 0
- var/gong_cooldown = 150
-
-/datum/species/golem/bronze/bullet_act(obj/projectile/P, mob/living/carbon/human/H)
- if(!(world.time > last_gong_time + gong_cooldown))
- return ..()
- if(P.flag == "bullet" || P.flag == "bomb")
- gong(H)
- return ..()
-
-/datum/species/golem/bronze/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
- ..()
- if(world.time > last_gong_time + gong_cooldown)
- gong(H)
-
-/datum/species/golem/bronze/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
- ..()
- if(world.time > last_gong_time + gong_cooldown && M.used_intent.type != INTENT_HELP)
- gong(H)
-
-/datum/species/golem/bronze/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
- ..()
- if(world.time > last_gong_time + gong_cooldown)
- gong(H)
-
-/datum/species/golem/bronze/on_hit(obj/projectile/P, mob/living/carbon/human/H)
- ..()
- if(world.time > last_gong_time + gong_cooldown)
- gong(H)
-
-/datum/species/golem/bronze/proc/gong(mob/living/carbon/human/H)
- last_gong_time = world.time
- for(var/mob/living/M in get_hearers_in_view(7,H))
- if(M.stat == DEAD) //F
- return
- if(M == H)
- H.show_message("I cringe with pain as my body rings around you!", MSG_AUDIBLE)
- H.playsound_local(H, 'sound/blank.ogg', 100, TRUE)
- H.soundbang_act(2, 0, 100, 1)
- H.jitteriness += 7
- var/distance = max(0,get_dist(get_turf(H),get_turf(M)))
- switch(distance)
- if(0 to 1)
- M.show_message("GONG!", MSG_AUDIBLE)
- M.playsound_local(H, 'sound/blank.ogg', 100, TRUE)
- M.soundbang_act(1, 0, 30, 3)
- M.confused += 10
- M.jitteriness += 4
- SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "gonged", /datum/mood_event/loud_gong)
- if(2 to 3)
- M.show_message("GONG!", MSG_AUDIBLE)
- M.playsound_local(H, 'sound/blank.ogg', 75, TRUE)
- M.soundbang_act(1, 0, 15, 2)
- M.jitteriness += 3
- SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "gonged", /datum/mood_event/loud_gong)
- else
- M.show_message("GONG!", MSG_AUDIBLE)
- M.playsound_local(H, 'sound/blank.ogg', 50, TRUE)
-
-
-/datum/species/golem/cardboard //Faster but weaker, can also make new shells on its own
- name = "Cardboard Golem"
- id = "cardboard golem"
- prefix = "Cardboard"
- special_names = list("Box")
- info_text = "As a Cardboard Golem, you aren't very strong, but you are a bit quicker and can easily create more brethren by using cardboard on myself."
- species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES)
- inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_NOFLASH)
- limbs_id = "c_golem" //special sprites
- attack_verb = "whips"
- attack_sound = 'sound/blank.ogg'
- miss_sound = 'sound/blank.ogg'
- fixed_mut_color = null
- armor = 25
- burnmod = 1.25
- heatmod = 2
- speedmod = 1.5
- punchdamagelow = 4
- punchstunthreshold = 7
- punchdamagehigh = 8
- var/last_creation = 0
- var/brother_creation_cooldown = 300
-
-/datum/species/golem/cardboard/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
- . = ..()
- if(user != H)
- return FALSE //forced reproduction is rape.
- if(istype(I, /obj/item/stack/sheet/cardboard))
- var/obj/item/stack/sheet/cardboard/C = I
- if(last_creation + brother_creation_cooldown > world.time) //no cheesing dork
- return
- if(C.amount < 10)
- to_chat(H, "I do not have enough cardboard!")
- return FALSE
- to_chat(H, "I attempt to create a new cardboard brother.")
- if(do_after(user, 30, target = user))
- if(last_creation + brother_creation_cooldown > world.time) //no cheesing dork
- return
- if(!C.use(10))
- to_chat(H, "I do not have enough cardboard!")
- return FALSE
- to_chat(H, "I create a new cardboard golem shell.")
- create_brother(H.loc)
-
-/datum/species/golem/cardboard/proc/create_brother(location)
- new /obj/effect/mob_spawn/human/golem/servant(location, /datum/species/golem/cardboard, owner)
- last_creation = world.time
-
-/datum/species/golem/leather
- name = "Leather Golem"
- id = "leather golem"
- special_names = list("Face", "Man", "Belt") //Ah dude 4 strength 4 stam leather belt AHHH
- inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_STRONG_GRABBER)
- prefix = "Leather"
- fixed_mut_color = "624a2e"
- info_text = "As a Leather Golem, you are flammable, but you can grab things with incredible ease, allowing all my grabs to start at a strong level."
- grab_sound = 'sound/blank.ogg'
- attack_sound = 'sound/blank.ogg'
-
-/datum/species/golem/durathread
- name = "Durathread Golem"
- id = "durathread golem"
- prefix = "Durathread"
- limbs_id = "d_golem"
- special_names = list("Boll","Weave")
- species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES)
- fixed_mut_color = null
- inherent_traits = list(TRAIT_NOBREATH, TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER, TRAIT_NOFLASH)
- info_text = "As a Durathread Golem, my strikes will cause those my targets to start choking, but my woven body won't withstand fire as well."
-
-/datum/species/golem/durathread/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target)
- . = ..()
- target.apply_status_effect(STATUS_EFFECT_CHOKINGSTRAND)
-
-/datum/species/golem/bone
- name = "Bone Golem"
- id = "bone golem"
- say_mod = "rattles"
- prefix = "Bone"
- limbs_id = "b_golem"
- special_names = list("Head", "Broth", "Fracture", "Rattler", "Appetit")
- liked_food = GROSS | MEAT | RAW
- toxic_food = null
- species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES)
- inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
- mutanttongue = /obj/item/organ/tongue/bone
- sexes = FALSE
- fixed_mut_color = null
- inherent_traits = list(TRAIT_NOFLASH,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_CHUNKYFINGERS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_FAKEDEATH)
- info_text = "As a Bone Golem, You have a powerful spell that lets you chill my enemies with fear, and milk heals you! Just make sure to watch our for bone-hurting juice."
- var/datum/action/innate/bonechill/bonechill
-
-/datum/species/golem/bone/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- ..()
- if(ishuman(C))
- bonechill = new
- bonechill.Grant(C)
-
-/datum/species/golem/bone/on_species_loss(mob/living/carbon/C)
- if(bonechill)
- bonechill.Remove(C)
- ..()
-
-/datum/species/golem/bone/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
- . = ..()
- if(chem.type == /datum/reagent/consumable/milk)
- if(chem.volume > 10)
- H.reagents.remove_reagent(chem.type, chem.volume - 10)
- to_chat(H, "The excess milk is dripping off my bones!")
- H.heal_bodypart_damage(1.5,0, 0)
- H.reagents.remove_reagent(chem.type, chem.metabolization_rate)
- return TRUE
- if(chem.type == /datum/reagent/toxin/bonehurtingjuice)
- H.adjustStaminaLoss(7.5, 0)
- H.adjustBruteLoss(0.5, 0)
- if(prob(20))
- switch(rand(1, 3))
- if(1)
- H.say(pick("oof.", "ouch.", "my bones.", "oof ouch.", "oof ouch my bones."), forced = /datum/reagent/toxin/bonehurtingjuice)
- if(2)
- H.emote("me", 1, pick("oofs silently.", "looks like their bones hurt.", "grimaces, as though their bones hurt."))
- if(3)
- to_chat(H, "My bones hurt!")
- if(chem.overdosed)
- if(prob(4) && iscarbon(H)) //big oof
- var/selected_part = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) //God help you if the same limb gets picked twice quickly.
- var/obj/item/bodypart/bp = H.get_bodypart(selected_part) //We're so sorry skeletons, you're so misunderstood
- if(bp)
- playsound(H, get_sfx("desceration"), 50, TRUE, -1) //You just want to socialize
- H.visible_message("[H] rattles loudly and flails around!!", "My bones hurt so much that my missing muscles spasm!!")
- H.say("OOF!!", forced=/datum/reagent/toxin/bonehurtingjuice)
- bp.receive_damage(200, 0, 0) //But I don't think we should
- else
- to_chat(H, "My missing arm aches from wherever you left it.")
- H.emote("sigh")
- H.reagents.remove_reagent(chem.type, chem.metabolization_rate)
- return TRUE
-
-/datum/action/innate/bonechill
- name = "Bone Chill"
- desc = ""
- check_flags = AB_CHECK_CONSCIOUS
- icon_icon = 'icons/mob/actions/actions_spells.dmi'
- button_icon_state = "bonechill"
- var/cooldown = 600
- var/last_use
- var/snas_chance = 3
-
-/datum/action/innate/bonechill/Activate()
- if(world.time < last_use + cooldown)
- to_chat(owner, "I'm not ready yet to rattle my bones again!")
- return
- owner.visible_message("[owner] rattles [owner.p_their()] bones harrowingly.", "I rattle my bones")
- last_use = world.time
- if(prob(snas_chance))
- playsound(get_turf(owner),'sound/blank.ogg', 100)
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- var/mutable_appearance/badtime = mutable_appearance('icons/mob/human_parts.dmi', "b_golem_eyes", -FIRE_LAYER-0.5)
- badtime.appearance_flags = RESET_COLOR
- H.overlays_standing[FIRE_LAYER+0.5] = badtime
- H.apply_overlay(FIRE_LAYER+0.5)
- addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/carbon, remove_overlay), FIRE_LAYER+0.5), 25)
- else
- playsound(get_turf(owner),'sound/blank.ogg', 100)
- for(var/mob/living/L in orange(7, get_turf(owner)))
- if((L.mob_biotypes & MOB_UNDEAD) || isgolem(L) || HAS_TRAIT(L, TRAIT_RESISTCOLD))
- return //Do not affect our brothers
-
- to_chat(L, "A spine-chilling sound chills you to the bone!")
- SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "spooked", /datum/mood_event/spooked)
-
-/datum/species/golem/snow
- name = "Snow Golem"
- id = "snow golem"
- limbs_id = "sn_golem"
- fixed_mut_color = "null" //custom sprites
- armor = 45 //down from 55
- burnmod = 3 //melts easily
- info_text = "As a Snow Golem, you are extremely vulnerable to burn damage, but you can generate snowballs and shoot cryokinetic beams. You will also turn to snow when dying, preventing any form of recovery."
- prefix = "Snow"
- special_names = list("Flake", "Blizzard", "Storm")
- species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES) //no mutcolors, no eye sprites
- inherent_traits = list(TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
-
- var/obj/effect/proc_holder/spell/targeted/conjure_item/snowball/ball
- var/obj/effect/proc_holder/spell/aimed/cryo/cryo
-
-/datum/species/golem/snow/spec_death(gibbed, mob/living/carbon/human/H)
- H.visible_message("[H] turns into a pile of snow!")
- for(var/obj/item/W in H)
- H.dropItemToGround(W)
- for(var/i=1, i <= rand(3,5), i++)
- new /obj/item/stack/sheet/mineral/snow(get_turf(H))
-// new /obj/item/reagent_containers/food/snacks/grown/carrot(get_turf(H))
- qdel(H)
-
-/datum/species/golem/snow/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- C.weather_immunities |= "snow"
- ball = new
- ball.charge_counter = 0
- C.AddSpell(ball)
- cryo = new
- cryo.charge_counter = 0
- C.AddSpell(cryo)
-
-/datum/species/golem/snow/on_species_loss(mob/living/carbon/C)
- . = ..()
- C.weather_immunities -= "snow"
- if(ball)
- C.RemoveSpell(ball)
- if(cryo)
- C.RemoveSpell(cryo)
-
-/obj/effect/proc_holder/spell/targeted/conjure_item/snowball
- name = "Snowball"
- desc = ""
- item_type = /obj/item/toy/snowball
- charge_max = 15
- action_icon = 'icons/obj/toy.dmi'
- action_icon_state = "snowball"
-
-/datum/species/golem/capitalist
- name = "Capitalist Golem"
- id = "capitalist golem"
- prefix = "Capitalist"
- attack_verb = "monopoliz"
- limbs_id = "ca_golem"
- special_names = list("John D. Rockefeller","Rich Uncle Pennybags","Commodore Vanderbilt","Entrepreneur","Mr. Moneybags", "Adam Smith")
- species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES)
- fixed_mut_color = null
- inherent_traits = list(TRAIT_NOFLASH,TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
- info_text = "As a Capitalist Golem, my fist spreads the powerful industrializing light of capitalism."
- changesource_flags = MIRROR_BADMIN
- random_eligible = FALSE
-
- var/last_cash = 0
- var/cash_cooldown = 100
-
-/datum/species/golem/capitalist/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- C.equip_to_slot_or_del(new /obj/item/clothing/head/that (), SLOT_HEAD)
- C.equip_to_slot_or_del(new /obj/item/clothing/glasses/monocle (), SLOT_GLASSES)
- C.revive(full_heal = TRUE, admin_revive = FALSE)
-
- SEND_SOUND(C, sound('sound/blank.ogg'))
- C.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock ())
- RegisterSignal(C, COMSIG_MOB_SAY, PROC_REF(handle_speech))
-
-/datum/species/golem/capitalist/on_species_loss(mob/living/carbon/C)
- . = ..()
- UnregisterSignal(C, COMSIG_MOB_SAY)
- for(var/obj/effect/proc_holder/spell/aoe_turf/knock/spell in C.mob_spell_list)
- C.RemoveSpell(spell)
-
-/datum/species/golem/capitalist/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target)
- ..()
- if(isgolem(target))
- return
- if(target.nutrition >= NUTRITION_LEVEL_FAT)
- target.set_species(/datum/species/golem/capitalist)
- return
- target.adjust_nutrition(40)
-
-/datum/species/golem/capitalist/handle_speech(datum/source, list/speech_args)
- playsound(source, 'sound/blank.ogg', 25, FALSE)
- speech_args[SPEECH_MESSAGE] = "Hello, I like money!"
-
-/datum/species/golem/soviet
- name = "Soviet Golem"
- id = "soviet golem"
- prefix = "Comrade"
- attack_verb = "nationaliz"
- limbs_id = "s_golem"
- special_names = list("Stalin","Lenin","Trotsky","Marx","Comrade") //comrade comrade
- species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYESPRITES)
- fixed_mut_color = null
- inherent_traits = list(TRAIT_NOFLASH, TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
- info_text = "As a Soviet Golem, my fist spreads the bright soviet light of communism."
- changesource_flags = MIRROR_BADMIN
- random_eligible = FALSE
-
-/datum/species/golem/soviet/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- C.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka (), SLOT_HEAD)
- C.revive(full_heal = TRUE, admin_revive = FALSE)
-
- SEND_SOUND(C, sound('sound/blank.ogg'))
- C.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock ())
- RegisterSignal(C, COMSIG_MOB_SAY, PROC_REF(handle_speech))
-
-/datum/species/golem/soviet/on_species_loss(mob/living/carbon/C)
- . = ..()
- for(var/obj/effect/proc_holder/spell/aoe_turf/knock/spell in C.mob_spell_list)
- C.RemoveSpell(spell)
- UnregisterSignal(C, COMSIG_MOB_SAY, PROC_REF(handle_speech))
-
-/datum/species/golem/soviet/spec_unarmedattacked(mob/living/carbon/human/user, mob/living/carbon/human/target)
- ..()
- if(isgolem(target))
- return
- if(target.nutrition <= NUTRITION_LEVEL_STARVING)
- target.set_species(/datum/species/golem/soviet)
- return
- target.adjust_nutrition(-40)
-
-/datum/species/golem/soviet/handle_speech(datum/source, list/speech_args)
- playsound(source, 'sound/blank.ogg', 25, FALSE)
- speech_args[SPEECH_MESSAGE] = "Cyka Blyat"
diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
deleted file mode 100644
index d9a564ab74..0000000000
--- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm
+++ /dev/null
@@ -1,62 +0,0 @@
-/datum/species/moth
- name = "Mothman"
- id = "moth"
- say_mod = "flutters"
- default_color = "00FF00"
- species_traits = list(LIPS, NOEYESPRITES)
- inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
- mutant_bodyparts = list("moth_wings", "moth_markings")
- default_features = list("moth_wings" = "Plain", "moth_markings" = "None")
- attack_verb = "slash"
- attack_sound = 'sound/blank.ogg'
- miss_sound = 'sound/blank.ogg'
- meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/moth
- liked_food = VEGETABLES | DAIRY | CLOTH
- disliked_food = FRUIT | GROSS
- toxic_food = MEAT | RAW
- mutanteyes = /obj/item/organ/eyes/moth
- changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | SLIME_EXTRACT
-
-/datum/species/moth/regenerate_organs(mob/living/carbon/C,datum/species/old_species,replace_current=TRUE)
- . = ..()
- if(ishuman(C))
- var/mob/living/carbon/human/H = C
- handle_mutant_bodyparts(H)
-
-/datum/species/moth/random_name(gender,unique,lastname)
- if(unique)
- return random_unique_moth_name()
-
- var/randname = moth_name()
-
- if(lastname)
- randname += " [lastname]"
-
- return randname
-
-/datum/species/moth/handle_fire(mob/living/carbon/human/H, no_protection = FALSE)
- . = ..()
- if(.) //if the mob is immune to fire, don't burn wings off.
- return
- if(H.dna.features["moth_wings"] != "Burnt Off" && H.bodytemperature >= 800 && H.fire_stacks > 0) //do not go into the extremely hot light. you will not survive
- to_chat(H, "My precious wings burn to a crisp!")
- H.dna.features["moth_wings"] = "Burnt Off"
- handle_mutant_bodyparts(H)
-
-/datum/species/moth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
- . = ..()
- if(chem.type == /datum/reagent/toxin/pestkiller)
- H.adjustToxLoss(3)
- H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
-
-/datum/species/moth/check_species_weakness(obj/item/weapon, mob/living/attacker)
- if(istype(weapon, /obj/item/melee/flyswatter))
- return 9 //flyswatters deal 10x damage to moths
- return 0
-
-/datum/species/moth/space_move(mob/living/carbon/human/H)
- . = ..()
- if(H.loc && !isspaceturf(H.loc) && H.dna.features["moth_wings"] != "Burnt Off")
- var/datum/gas_mixture/current = H.loc.return_air()
- if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible
- return TRUE
diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
deleted file mode 100644
index a1feb51546..0000000000
--- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
+++ /dev/null
@@ -1,60 +0,0 @@
-/datum/species/mush //mush mush codecuck
- name = "Mushroomperson"
- id = "mush"
- mutant_bodyparts = list("caps")
- default_features = list("caps" = "Round")
- changesource_flags = MIRROR_BADMIN | WABBAJACK
-
- fixed_mut_color = "DBBF92"
- hair_color = "FF4B19" //cap color, spot color uses eye color
- nojumpsuit = TRUE
-
- say_mod = "poofs" //what does a mushroom sound like
- species_traits = list(MUTCOLORS, NOEYESPRITES, NO_UNDERWEAR)
- inherent_traits = list(TRAIT_NOBREATH, TRAIT_NOFLASH)
- inherent_factions = list("mushroom")
- speedmod = 1.5 //faster than golems but not by much
-
- punchdamagelow = 6
- punchdamagehigh = 14
- punchstunthreshold = 14 //about 44% chance to stun
-
- no_equip = list(SLOT_WEAR_MASK, SLOT_ARMOR, SLOT_GLOVES, SLOT_SHOES, SLOT_PANTS)
-
- burnmod = 1.25
- heatmod = 1.5
-
- mutanteyes = /obj/item/organ/eyes/night_vision/mushroom
- use_skintones = FALSE
- var/datum/martial_art/mushpunch/mush
-
-/datum/species/mush/check_roundstart_eligible()
- return FALSE //hard locked out of roundstart on the order of design lead kor, this can be removed in the future when planetstation is here OR SOMETHING but right now we have a problem with races.
-
-/datum/species/mush/after_equip_job(datum/job/J, mob/living/carbon/human/H)
- H.grant_language(/datum/language/mushroom) //pomf pomf
-
-/datum/species/mush/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- if(ishuman(C))
- var/mob/living/carbon/human/H = C
- if(!H.dna.features["caps"])
- H.dna.features["caps"] = "Round"
- handle_mutant_bodyparts(H)
- mush = new(null)
- mush.teach(H)
-
-/datum/species/mush/on_species_loss(mob/living/carbon/C)
- . = ..()
- mush.remove(C)
- QDEL_NULL(mush)
-
-/datum/species/mush/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
- if(chem.type == /datum/reagent/toxin/plantbgone/weedkiller)
- H.adjustToxLoss(3)
- H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
- return TRUE
-
-/datum/species/mush/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour)
- forced_colour = FALSE
- ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
deleted file mode 100644
index c3c9a94f95..0000000000
--- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm
+++ /dev/null
@@ -1,102 +0,0 @@
-/datum/species/plasmaman
- name = "Plasmaman"
- id = "plasmaman"
- say_mod = "rattles"
- sexes = 0
- meat = /obj/item/stack/sheet/mineral/plasma
- species_traits = list(NOBLOOD,NOTRANSSTING)
- inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_NOHUNGER,TRAIT_ALWAYS_CLEAN)
- inherent_biotypes = MOB_HUMANOID|MOB_MINERAL
- mutantlungs = /obj/item/organ/lungs/plasmaman
- mutanttongue = /obj/item/organ/tongue/bone/plasmaman
- mutantliver = /obj/item/organ/liver/plasmaman
- mutantstomach = /obj/item/organ/stomach/plasmaman
- burnmod = 1.5
- heatmod = 1.5
- brutemod = 1.5
- breathid = "tox"
- damage_overlay_type = ""//let's not show bloody wounds or burns over bones.
- var/internal_fire = FALSE //If the bones themselves are burning clothes won't help you much
- disliked_food = FRUIT
- liked_food = VEGETABLES
- changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC
- outfit_important_for_life = /datum/outfit/plasmaman
-
-/datum/species/plasmaman/spec_life(mob/living/carbon/human/H)
- var/datum/gas_mixture/environment = H.loc.return_air()
- var/atmos_sealed = FALSE
- if (H.wear_armor && H.head && istype(H.wear_armor, /obj/item/clothing) && istype(H.head, /obj/item/clothing))
- var/obj/item/clothing/CS = H.wear_armor
- var/obj/item/clothing/CH = H.head
- if (CS.clothing_flags & CH.clothing_flags & STOPSPRESSUREDAMAGE)
- atmos_sealed = TRUE
- if((!istype(H.wear_pants, /obj/item/clothing/under/plasmaman) || !istype(H.head, /obj/item/clothing/head/helmet/space/plasmaman)) && !atmos_sealed)
- if(environment)
- if(environment.total_moles())
- if(environment.gases[/datum/gas/oxygen] && (environment.gases[/datum/gas/oxygen][MOLES]) >= 1) //Same threshhold that extinguishes fire
- H.adjust_fire_stacks(0.5)
- if(!H.on_fire && H.fire_stacks > 0)
- H.visible_message("[H]'s body reacts with the atmosphere and bursts into flames!","My body reacts with the atmosphere and bursts into flame!")
- H.IgniteMob()
- internal_fire = TRUE
- else
- if(H.fire_stacks)
- var/obj/item/clothing/under/plasmaman/P = H.wear_pants
- if(istype(P))
- P.Extinguish(H)
- internal_fire = FALSE
- else
- internal_fire = FALSE
- H.update_fire()
-
-/datum/species/plasmaman/handle_fire(mob/living/carbon/human/H, no_protection)
- if(internal_fire)
- no_protection = TRUE
- . = ..()
-
-/datum/species/plasmaman/random_name(gender,unique,lastname)
- if(unique)
- return random_unique_plasmaman_name()
-
- var/randname = plasmaman_name()
-
- if(lastname)
- randname += " [lastname]"
-
- return randname
-
-/datum/species/plasmaman/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
- . = ..()
- if(chem.type == /datum/reagent/consumable/milk)
- if(chem.volume > 10)
- H.reagents.remove_reagent(chem.type, chem.volume - 10)
- to_chat(H, "The excess milk is dripping off my bones!")
- H.heal_bodypart_damage(1.5,0, 0)
- H.reagents.remove_reagent(chem.type, chem.metabolization_rate)
- return TRUE
- if(chem.type == /datum/reagent/toxin/bonehurtingjuice)
- H.adjustStaminaLoss(7.5, 0)
- H.adjustBruteLoss(0.5, 0)
- if(prob(20))
- switch(rand(1, 3))
- if(1)
- H.say(pick("oof.", "ouch.", "my bones.", "oof ouch.", "oof ouch my bones."), forced = /datum/reagent/toxin/bonehurtingjuice)
- if(2)
- H.emote("me", 1, pick("oofs silently.", "looks like their bones hurt.", "grimaces, as though their bones hurt."))
- if(3)
- to_chat(H, "My bones hurt!")
- if(chem.overdosed)
- if(prob(4) && iscarbon(H)) //big oof
- var/selected_part = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) //God help you if the same limb gets picked twice quickly.
- var/obj/item/bodypart/bp = H.get_bodypart(selected_part) //We're so sorry skeletons, you're so misunderstood
- if(bp)
- playsound(H, get_sfx("desceration"), 50, TRUE, -1) //You just want to socialize
- H.visible_message("[H] rattles loudly and flails around!!", "My bones hurt so much that my missing muscles spasm!!")
- H.say("OOF!!", forced=/datum/reagent/toxin/bonehurtingjuice)
- bp.receive_damage(200, 0, 0) //But I don't think we should
- else
- to_chat(H, "My missing arm aches from wherever you left it.")
- H.emote("sigh")
- H.reagents.remove_reagent(chem.type, chem.metabolization_rate)
- return TRUE
-
diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
deleted file mode 100644
index 0f073b1c1a..0000000000
--- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm
+++ /dev/null
@@ -1,60 +0,0 @@
-/datum/species/pod
- // A mutation caused by a human being ressurected in a revival pod. These regain health in light, and begin to wither in darkness.
- name = "Podperson"
- id = "pod"
- default_color = "59CE00"
- species_traits = list(MUTCOLORS,EYECOLOR)
- inherent_traits = list(TRAIT_ALWAYS_CLEAN)
- inherent_factions = list("plants", "vines")
- attack_verb = "slash"
- attack_sound = 'sound/blank.ogg'
- miss_sound = 'sound/blank.ogg'
- burnmod = 1.25
- heatmod = 1.5
- meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant
- disliked_food = MEAT | DAIRY
- liked_food = VEGETABLES | FRUIT | GRAIN
- changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | SLIME_EXTRACT
-
-/datum/species/pod/spec_life(mob/living/carbon/human/H)
- if(H.stat == DEAD)
- return
- var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
- if(isturf(H.loc)) //else, there's considered to be no light
- var/turf/T = H.loc
- light_amount = min(1,T.get_lumcount()) - 0.5
- H.adjust_nutrition(light_amount * 10)
- if(H.nutrition > NUTRITION_LEVEL_ALMOST_FULL)
- H.set_nutrition(NUTRITION_LEVEL_ALMOST_FULL)
- if(light_amount > 0.2) //if there's enough light, heal
- H.heal_overall_damage(1,1, 0, BODYPART_ORGANIC)
- H.adjustToxLoss(-1)
- H.adjustOxyLoss(-1)
-
- if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
- H.take_overall_damage(2,0)
-
-/datum/species/pod/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
- if(chem.type == /datum/reagent/toxin/plantbgone)
- H.adjustToxLoss(3)
- H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
- return 1
-
-/datum/species/pod/on_hit(obj/projectile/P, mob/living/carbon/human/H)
- switch(P.type)
- if(/obj/projectile/energy/floramut)
- if(prob(15))
- H.rad_act(rand(30,80))
- H.Paralyze(100)
- H.visible_message("[H] writhes in pain as [H.p_their()] vacuoles boil.", "I writhe in pain as your vacuoles boil!", "I hear the crunching of leaves.")
- if(prob(80))
- H.easy_randmut(NEGATIVE+MINOR_NEGATIVE)
- else
- H.easy_randmut(POSITIVE)
- H.randmuti()
- H.domutcheck()
- else
- H.adjustFireLoss(rand(5,15))
- H.show_message("The radiation beam singes you!")
- if(/obj/projectile/energy/florayield)
- H.set_nutrition(min(H.nutrition+30, NUTRITION_LEVEL_FULL))
diff --git a/code/modules/mob/living/carbon/human/species_types/synths.dm b/code/modules/mob/living/carbon/human/species_types/synths.dm
deleted file mode 100644
index 217a81f6cd..0000000000
--- a/code/modules/mob/living/carbon/human/species_types/synths.dm
+++ /dev/null
@@ -1,130 +0,0 @@
-/datum/species/synth
- name = "Synth" //inherited from the real species, for health scanners and things
- id = "synth"
- say_mod = "beep boops" //inherited from a user's real species
- sexes = 0
- species_traits = list(NOTRANSSTING) //all of these + whatever we inherit from the real species
- inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH)
- inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
- meat = null
- damage_overlay_type = "synth"
- limbs_id = "synth"
- var/disguise_fail_health = 75 //When their health gets to this level their instabitaluri partially falls off
- var/datum/species/fake_species //a species to do most of our work for us, unless we're damaged
- var/list/initial_species_traits //for getting these values back for assume_disguise()
- var/list/initial_inherent_traits
- changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC
-
-/datum/species/synth/New()
- initial_species_traits = species_traits.Copy()
- initial_inherent_traits = inherent_traits.Copy()
- ..()
-
-/datum/species/synth/military
- name = "Military Synth"
- id = "military_synth"
- armor = 25
- punchdamagelow = 10
- punchdamagehigh = 19
- punchstunthreshold = 14 //about 50% chance to stun
- disguise_fail_health = 50
- changesource_flags = MIRROR_BADMIN | WABBAJACK
-
-/datum/species/synth/on_species_gain(mob/living/carbon/human/H, datum/species/old_species)
- ..()
- assume_disguise(old_species, H)
- RegisterSignal(H, COMSIG_MOB_SAY, PROC_REF(handle_speech))
-
-/datum/species/synth/on_species_loss(mob/living/carbon/human/H)
- . = ..()
- UnregisterSignal(H, COMSIG_MOB_SAY)
-
-/datum/species/synth/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
- if(chem.type == /datum/reagent/medicine/C2/instabitaluri)
- chem.reaction_mob(H, TOUCH, 2 ,0) //heal a little
- H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM)
- return 1
- else
- return ..()
-
-
-/datum/species/synth/proc/assume_disguise(datum/species/S, mob/living/carbon/human/H)
- if(S && !istype(S, type))
- name = S.name
- say_mod = S.say_mod
- sexes = S.sexes
- species_traits = initial_species_traits.Copy()
- inherent_traits = initial_inherent_traits.Copy()
- species_traits |= S.species_traits
- inherent_traits |= S.inherent_traits
- attack_verb = S.attack_verb
- attack_sound = S.attack_sound
- miss_sound = S.miss_sound
- meat = S.meat
- mutant_bodyparts = S.mutant_bodyparts.Copy()
- mutant_organs = S.mutant_organs.Copy()
- default_features = S.default_features.Copy()
- nojumpsuit = S.nojumpsuit
- no_equip = S.no_equip.Copy()
- limbs_id = S.limbs_id
- use_skintones = S.use_skintones
- fixed_mut_color = S.fixed_mut_color
- hair_color = S.hair_color
- fake_species = new S.type
- else
- name = initial(name)
- say_mod = initial(say_mod)
- species_traits = initial_species_traits.Copy()
- inherent_traits = initial_inherent_traits.Copy()
- attack_verb = initial(attack_verb)
- attack_sound = initial(attack_sound)
- miss_sound = initial(miss_sound)
- mutant_bodyparts = list()
- default_features = list()
- nojumpsuit = initial(nojumpsuit)
- no_equip = list()
- qdel(fake_species)
- fake_species = null
- meat = initial(meat)
- limbs_id = "synth"
- use_skintones = 0
- sexes = 0
- fixed_mut_color = ""
- hair_color = ""
-
- for(var/X in H.bodyparts) //propagates the damage_overlay changes
- var/obj/item/bodypart/BP = X
- BP.update_limb()
- H.update_body_parts() //to update limb icon cache with the new damage overlays
-
-//Proc redirects:
-//Passing procs onto the fake_species, to ensure we look as much like them as possible
-
-/datum/species/synth/handle_hair(mob/living/carbon/human/H, forced_colour)
- if(fake_species)
- fake_species.handle_hair(H, forced_colour)
- else
- return ..()
-
-
-/datum/species/synth/handle_body(mob/living/carbon/human/H)
- if(fake_species)
- fake_species.handle_body(H)
- else
- return ..()
-
-
-/datum/species/synth/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour)
- if(fake_species)
- fake_species.handle_body(H,forced_colour)
- else
- return ..()
-
-
-/datum/species/synth/handle_speech(datum/source, list/speech_args)
- if (isliving(source)) // yeah it's gonna be living but just to be clean
- var/mob/living/L = source
- if(fake_species && L.health > disguise_fail_health)
- switch(fake_species.type)
- if (/datum/species/golem/bananium)
- speech_args[SPEECH_SPANS] |= SPAN_CLOWN
diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm
index 7409fc6d14..cca3feb93c 100644
--- a/code/modules/mob/living/carbon/human/species_types/vampire.dm
+++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm
@@ -12,7 +12,6 @@
mutant_heart = /obj/item/organ/heart/vampire
mutanttongue = /obj/item/organ/tongue/vampire
limbs_id = "human"
- skinned_type = /obj/item/stack/sheet/animalhide/human
var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability."
var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/batform //attached to the datum itself to avoid cloning memes, and other duplicates
@@ -52,11 +51,6 @@
H.shape.dust() //make sure we're killing the bat if you are out of blood, if you don't it creates weird situations where the bat is alive but the caster is dusted.
C.dust()
-/datum/species/vampire/check_species_weakness(obj/item/weapon, mob/living/attacker)
- if(istype(weapon, /obj/item/nullrod/whip))
- return 1 //Whips deal 2x damage to vampires. Vampire killer.
- return 0
-
/obj/item/organ/tongue/vampire
name = "vampire tongue"
actions_types = list(/datum/action/item_action/organ_action/vampire)
diff --git a/code/modules/mob/living/carbon/human/topic.dm b/code/modules/mob/living/carbon/human/topic.dm
index 1cf7d70f14..078e0a871a 100644
--- a/code/modules/mob/living/carbon/human/topic.dm
+++ b/code/modules/mob/living/carbon/human/topic.dm
@@ -233,125 +233,4 @@ GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013???
return
return //Medical HUD ends here.
- if(href_list["hud"] == "s")
- if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD))
- return
- if(usr.stat || usr == src) //|| !usr.canmove || usr.restrained()) Fluff: Sechuds have eye-tracking technology and sets 'arrest' to people that the wearer looks and blinks at.
- return //Non-fluff: This allows sec to set people to arrest as they get disarmed or beaten
- // Checks the user has security clearence before allowing them to change arrest status via hud, comment out to enable all access
- var/allowed_access = null
- var/obj/item/clothing/glasses/hud/security/G = H.glasses
- if(istype(G) && (G.obj_flags & EMAGGED))
- allowed_access = "@%&ERROR_%$*"
- else //Implant and standard glasses check access
- if(H.wear_ring)
- var/list/access = H.wear_ring.GetAccess()
- if(ACCESS_SEC_DOORS in access)
- allowed_access = H.get_authentification_name()
-
- if(!allowed_access)
- to_chat(H, "ERROR: Invalid access.")
- return
-
- if(!perpname)
- to_chat(H, "ERROR: Can not identify target.")
- return
- R = find_record("name", perpname, GLOB.data_core.security)
- if(!R)
- to_chat(usr, "ERROR: Unable to locate data core entry for target.")
- return
- if(href_list["status"])
- var/setcriminal = input(usr, "Specify a new criminal status for this person.", "Security HUD", R.fields["criminal"]) in list("None", "*Arrest*", "Incarcerated", "Paroled", "Discharged", "Cancel")
- if(setcriminal != "Cancel")
- if(!R)
- return
- if(!H.canUseHUD())
- return
- if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD))
- return
- investigate_log("[key_name(src)] has been set from [R.fields["criminal"]] to [setcriminal] by [key_name(usr)].", INVESTIGATE_RECORDS)
- R.fields["criminal"] = setcriminal
- sec_hud_set_security_status()
- return
-
- if(href_list["view"])
- if(!H.canUseHUD())
- return
- if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD))
- return
- to_chat(usr, "Name: [R.fields["name"]] Criminal Status: [R.fields["criminal"]]")
- to_chat(usr, "Minor Crimes:")
- for(var/datum/data/crime/c in R.fields["mi_crim"])
- to_chat(usr, "Crime: [c.crimeName]")
- to_chat(usr, "Details: [c.crimeDetails]")
- to_chat(usr, "Added by [c.author] at [c.time]")
- to_chat(usr, "----------")
- to_chat(usr, "Major Crimes:")
- for(var/datum/data/crime/c in R.fields["ma_crim"])
- to_chat(usr, "Crime: [c.crimeName]")
- to_chat(usr, "Details: [c.crimeDetails]")
- to_chat(usr, "Added by [c.author] at [c.time]")
- to_chat(usr, "----------")
- to_chat(usr, "Notes: [R.fields["notes"]]")
- return
-
- if(href_list["add_crime"])
- switch(alert("What crime would you like to add?","Security HUD","Minor Crime","Major Crime","Cancel"))
- if("Minor Crime")
- var/t1 = stripped_input("Please input minor crime names:", "Security HUD", "", null)
- var/t2 = stripped_multiline_input("Please input minor crime details:", "Security HUD", "", null)
- if(!R || !t1 || !t2 || !allowed_access)
- return
- if(!H.canUseHUD())
- return
- if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD))
- return
- var/crime = GLOB.data_core.createCrimeEntry(t1, t2, allowed_access, station_time_timestamp())
- GLOB.data_core.addMinorCrime(R.fields["id"], crime)
- investigate_log("New Minor Crime: [t1]: [t2] | Added to [R.fields["name"]] by [key_name(usr)]", INVESTIGATE_RECORDS)
- to_chat(usr, "Successfully added a minor crime.")
- return
- if("Major Crime")
- var/t1 = stripped_input("Please input major crime names:", "Security HUD", "", null)
- var/t2 = stripped_multiline_input("Please input major crime details:", "Security HUD", "", null)
- if(!R || !t1 || !t2 || !allowed_access)
- return
- if(!H.canUseHUD())
- return
- if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD))
- return
- var/crime = GLOB.data_core.createCrimeEntry(t1, t2, allowed_access, station_time_timestamp())
- GLOB.data_core.addMajorCrime(R.fields["id"], crime)
- investigate_log("New Major Crime: [t1]: [t2] | Added to [R.fields["name"]] by [key_name(usr)]", INVESTIGATE_RECORDS)
- to_chat(usr, "Successfully added a major crime.")
- return
-
- if(href_list["view_comment"])
- if(!H.canUseHUD())
- return
- if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD))
- return
- to_chat(usr, "Comments/Log:")
- var/counter = 1
- while(R.fields[text("com_[]", counter)])
- to_chat(usr, R.fields[text("com_[]", counter)])
- to_chat(usr, "----------")
- counter++
- return
-
- if(href_list["add_comment"])
- var/t1 = stripped_multiline_input("Add Comment:", "Secure. records", null, null)
- if (!R || !t1 || !allowed_access)
- return
- if(!H.canUseHUD())
- return
- if(!HAS_TRAIT(H, TRAIT_SECURITY_HUD))
- return
- var/counter = 1
- while(R.fields[text("com_[]", counter)])
- counter++
- R.fields[text("com_[]", counter)] = text("Made by [] on [] [], []
[]", allowed_access, station_time_timestamp(), time2text(world.realtime, "MMM DD"), GLOB.year_integer+540, t1)
- to_chat(usr, "Successfully added comment.")
- return
-
return ..() //end of this massive fucking chain. TODO: make the hud chain not spooky. - Yeah, great job doing that.
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 44c4c971e5..2c87ed9bdb 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -237,265 +237,12 @@
//Start of a breath chain, calls breathe()
/mob/living/carbon/handle_breathing(times_fired)
return
-/* var/next_breath = 4
- var/obj/item/organ/lungs/L = getorganslot(ORGAN_SLOT_LUNGS)
- var/obj/item/organ/heart/H = getorganslot(ORGAN_SLOT_HEART)
- if(L)
- if(L.damage > L.high_threshold)
- next_breath--
- if(H)
- if(H.damage > H.high_threshold)
- next_breath--
-
- if((times_fired % next_breath) == 0 || failed_last_breath)
- breathe() //Breathe per 4 ticks if healthy, down to 2 if our lungs or heart are damaged, unless suffocating
- if(failed_last_breath)
- SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "suffocation", /datum/mood_event/suffocation)
- else
- SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "suffocation")
- else
- if(istype(loc, /obj/))
- var/obj/location_as_object = loc
- location_as_object.handle_internal_lifeform(src,0) */
-
-//Second link in a breath chain, calls check_breath()
-/mob/living/carbon/proc/breathe()
- var/obj/item/organ/lungs = getorganslot(ORGAN_SLOT_LUNGS)
- if(reagents.has_reagent(/datum/reagent/toxin/lexorin, needs_metabolizing = TRUE))
- return
-
- var/datum/gas_mixture/environment
- if(loc)
- environment = loc.return_air()
-
- var/datum/gas_mixture/breath
-
- if(!getorganslot(ORGAN_SLOT_BREATHING_TUBE))
- if(health <= HEALTH_THRESHOLD_FULLCRIT || (pulledby && pulledby.grab_state >= GRAB_KILL) || HAS_TRAIT(src, TRAIT_MAGIC_CHOKE) || (lungs && lungs.organ_flags & ORGAN_FAILING))
- losebreath++ //You can't breath at all when in critical or when being choked, so you're going to miss a breath
-
- else if(health <= crit_threshold)
- losebreath += 0.25 //You're having trouble breathing in soft crit, so you'll miss a breath one in four times
-
- //Suffocate
- if(losebreath >= 1) //You've missed a breath, take oxy damage
- losebreath--
- if(prob(10))
- emote("gasp")
- if(istype(loc, /obj/))
- var/obj/loc_as_obj = loc
- loc_as_obj.handle_internal_lifeform(src,0)
- else
- //Breathe from internal
- breath = get_breath_from_internal(BREATH_VOLUME)
-
- if(isnull(breath)) //in case of 0 pressure internals
-
- if(isobj(loc)) //Breathe from loc as object
- var/obj/loc_as_obj = loc
- breath = loc_as_obj.handle_internal_lifeform(src, BREATH_VOLUME)
-
- else if(isturf(loc)) //Breathe from loc as turf
- var/breath_moles = 0
- if(environment)
- breath_moles = environment.total_moles()*BREATH_PERCENTAGE
-
- breath = loc.remove_air(breath_moles)
- else //Breathe from loc as obj again
- if(istype(loc, /obj/))
- var/obj/loc_as_obj = loc
- loc_as_obj.handle_internal_lifeform(src,0)
-
- check_breath(breath)
-
- if(breath)
- loc.assume_air(breath)
- air_update_turf()
/mob/living/carbon/proc/has_smoke_protection()
if(HAS_TRAIT(src, TRAIT_NOBREATH))
return TRUE
return FALSE
-
-//Third link in a breath chain, calls handle_breath_temperature()
-/mob/living/carbon/proc/check_breath(datum/gas_mixture/breath)
- if(status_flags & GODMODE)
- return
- if(HAS_TRAIT(src, TRAIT_NOBREATH))
- return
-
- var/obj/item/organ/lungs = getorganslot(ORGAN_SLOT_LUNGS)
- if(!lungs)
- adjustOxyLoss(2)
-
- //CRIT
- if(!breath || (breath.total_moles() == 0) || !lungs)
- if(reagents.has_reagent(/datum/reagent/medicine/epinephrine, needs_metabolizing = TRUE) && lungs)
- return
- adjustOxyLoss(1)
-
- failed_last_breath = 1
- throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy)
- return 0
-
- var/safe_oxy_min = 16
- var/safe_co2_max = 10
- var/safe_tox_max = 0.05
- var/SA_para_min = 1
- var/SA_sleep_min = 5
- var/oxygen_used = 0
- var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME
-
- var/list/breath_gases = breath.gases
- breath.assert_gases(/datum/gas/oxygen, /datum/gas/plasma, /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/bz)
- var/O2_partialpressure = (breath_gases[/datum/gas/oxygen][MOLES]/breath.total_moles())*breath_pressure
- var/Toxins_partialpressure = (breath_gases[/datum/gas/plasma][MOLES]/breath.total_moles())*breath_pressure
- var/CO2_partialpressure = (breath_gases[/datum/gas/carbon_dioxide][MOLES]/breath.total_moles())*breath_pressure
-
-
- //OXYGEN
- if(O2_partialpressure < safe_oxy_min) //Not enough oxygen
- if(prob(20))
- emote("gasp")
- if(O2_partialpressure > 0)
- var/ratio = 1 - O2_partialpressure/safe_oxy_min
- adjustOxyLoss(min(5*ratio, 3))
- failed_last_breath = 1
- oxygen_used = breath_gases[/datum/gas/oxygen][MOLES]*ratio
- else
- adjustOxyLoss(3)
- failed_last_breath = 1
- throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy)
-
- else //Enough oxygen
- failed_last_breath = 0
- if(health >= crit_threshold)
- adjustOxyLoss(-5)
- oxygen_used = breath_gases[/datum/gas/oxygen][MOLES]
- clear_alert("not_enough_oxy")
-
- breath_gases[/datum/gas/oxygen][MOLES] -= oxygen_used
- breath_gases[/datum/gas/carbon_dioxide][MOLES] += oxygen_used
-
- //CARBON DIOXIDE
- if(CO2_partialpressure > safe_co2_max)
- if(!co2overloadtime)
- co2overloadtime = world.time
- else if(world.time - co2overloadtime > 120)
- Unconscious(60)
- adjustOxyLoss(3)
- if(world.time - co2overloadtime > 300)
- adjustOxyLoss(8)
- if(prob(20))
- emote("cough")
-
- else
- co2overloadtime = 0
-
- //TOXINS/PLASMA
- if(Toxins_partialpressure > safe_tox_max)
- var/ratio = (breath_gases[/datum/gas/plasma][MOLES]/safe_tox_max) * 10
- adjustToxLoss(CLAMP(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE))
- throw_alert("too_much_tox", /atom/movable/screen/alert/too_much_tox)
- else
- clear_alert("too_much_tox")
-
- //NITROUS OXIDE
- if(breath_gases[/datum/gas/nitrous_oxide])
- var/SA_partialpressure = (breath_gases[/datum/gas/nitrous_oxide][MOLES]/breath.total_moles())*breath_pressure
- if(SA_partialpressure > SA_para_min)
- Unconscious(60)
- if(SA_partialpressure > SA_sleep_min)
- Sleeping(max(AmountSleeping() + 40, 200))
- else if(SA_partialpressure > 0.01)
- if(prob(20))
- emote(pick("giggle","laugh"))
- SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "chemical_euphoria", /datum/mood_event/chemical_euphoria)
- else
- SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "chemical_euphoria")
-
- //BZ (Facepunch port of their Agent B)
- if(breath_gases[/datum/gas/bz])
- var/bz_partialpressure = (breath_gases[/datum/gas/bz][MOLES]/breath.total_moles())*breath_pressure
- if(bz_partialpressure > 1)
- hallucination += 10
- else if(bz_partialpressure > 0.01)
- hallucination += 5
-
- //TRITIUM
- if(breath_gases[/datum/gas/tritium])
- var/tritium_partialpressure = (breath_gases[/datum/gas/tritium][MOLES]/breath.total_moles())*breath_pressure
- radiation += tritium_partialpressure/10
-
- //NITRYL
- if(breath_gases[/datum/gas/nitryl])
- var/nitryl_partialpressure = (breath_gases[/datum/gas/nitryl][MOLES]/breath.total_moles())*breath_pressure
- adjustFireLoss(nitryl_partialpressure/4)
-
- //MIASMA
- if(breath_gases[/datum/gas/miasma])
- var/miasma_partialpressure = (breath_gases[/datum/gas/miasma][MOLES]/breath.total_moles())*breath_pressure
- //Miasma side effects
- switch(miasma_partialpressure)
- if(0.25 to 5)
- // At lower pp, give out a little warning
- SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "smell")
- if(prob(5))
- to_chat(src, "There is an unpleasant smell in the air.")
- if(5 to 20)
- //At somewhat higher pp, warning becomes more obvious
- if(prob(15))
- to_chat(src, "I smell something horribly decayed inside this room.")
- SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/bad_smell)
- if(15 to 30)
- //Small chance to vomit. By now, people have internals on anyway
- if(prob(5))
- to_chat(src, "The stench of rotting carcasses is unbearable!")
- SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/nauseating_stench)
- vomit()
- if(30 to INFINITY)
- //Higher chance to vomit. Let the horror start
- if(prob(25))
- to_chat(src, "The stench of rotting carcasses is unbearable!")
- SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/nauseating_stench)
- vomit()
- else
- SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "smell")
-
-
- //Clear all moods if no miasma at all
- else
- SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "smell")
-
-
-
-
- breath.garbage_collect()
-
- //BREATH TEMPERATURE
- handle_breath_temperature(breath)
-
- return 1
-
-//Fourth and final link in a breath chain
-/mob/living/carbon/proc/handle_breath_temperature(datum/gas_mixture/breath)
- return
-
-/mob/living/carbon/proc/get_breath_from_internal(volume_needed)
- if(internal)
- if(internal.loc != src)
- internal = null
- update_internals_hud_icon(0)
- else if ((!wear_mask || !(wear_mask.clothing_flags & MASKINTERNALS)) && !getorganslot(ORGAN_SLOT_BREATHING_TUBE))
- internal = null
- update_internals_hud_icon(0)
- else
- update_internals_hud_icon(1)
- . = internal.remove_air_volume(volume_needed)
- if(!.)
- return FALSE //to differentiate between no internals and active, but empty internals
-
/mob/living/carbon/proc/handle_bodyparts()
var/stam_regen = FALSE
if(stam_regen_start_time <= world.time)
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index 0ca9b7af63..8ed85d1d04 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -49,22 +49,6 @@
vomit(10, TRUE)
return ..()
-/mob/living/carbon/monkey/handle_breath_temperature(datum/gas_mixture/breath)
- if(abs(BODYTEMP_NORMAL - breath.temperature) > 50)
- switch(breath.temperature)
- if(-INFINITY to 120)
- adjustFireLoss(3)
- if(120 to 200)
- adjustFireLoss(1.5)
- if(200 to 260)
- adjustFireLoss(0.5)
- if(360 to 400)
- adjustFireLoss(2)
- if(400 to 1000)
- adjustFireLoss(3)
- if(1000 to INFINITY)
- adjustFireLoss(8)
-
/mob/living/carbon/monkey/handle_environment(datum/gas_mixture/environment)
if(!environment)
return
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index 4be1cd9bc9..e3888ebf39 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -8,7 +8,7 @@
pass_flags = PASSTABLE
ventcrawler = VENTCRAWLER_NUDE
mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/monkey = 5, /obj/item/stack/sheet/animalhide/monkey = 1)
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/monkey = 5)
type_of_meat = /obj/item/reagent_containers/food/snacks/meat/slab/monkey
gib_type = /obj/effect/decal/cleanable/blood/gibs
unique_name = TRUE
@@ -91,14 +91,6 @@
stat(null, "Move Mode: [m_intent]")
return
-
-/mob/living/carbon/monkey/verb/removeinternal()
- set name = "Remove Internals"
- set category = "IC"
- internal = null
- return
-
-
/mob/living/carbon/monkey/IsAdvancedToolUser()//Unless its monkey mode monkeys can't use advanced tools
if(mind)
return TRUE
@@ -123,10 +115,3 @@
/mob/living/carbon/monkey/angry
aggressive = TRUE
-
-/mob/living/carbon/monkey/angry/Initialize()
- . = ..()
- if(prob(10))
- var/obj/item/clothing/head/helmet/justice/escape/helmet = new(src)
- equip_to_slot_or_del(helmet,SLOT_HEAD)
- helmet.attack_self(src) // todo encapsulate toggle
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 3bb2e5941c..b9ea0090ac 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -8,9 +8,6 @@
if (client)
var/turf/T = get_turf(src)
if(!T)
- for(var/obj/effect/landmark/error/E in GLOB.landmarks_list)
- forceMove(E.loc)
- break
var/msg = "[ADMIN_LOOKUPFLW(src)] was found to have no .loc with an attached client, if the cause is unknown it would be wise to ask how this was accomplished."
message_admins(msg)
send2irc_adminless_only("Mob", msg, R_ADMIN)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index a9911be6a9..f8593ef7a1 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -290,14 +290,7 @@
if((AM.anchored && !push_anchored) || (force < (AM.move_resist * MOVE_FORCE_PUSH_RATIO)))
now_pushing = FALSE
return
- if (istype(AM, /obj/structure/window))
- var/obj/structure/window/W = AM
- if(W.fulltile)
- for(var/obj/structure/window/win in get_step(W,t))
- now_pushing = FALSE
- return
-// if(pulling == AM)
-// stop_pulling()
+
var/current_dir
if(isliving(AM))
current_dir = AM.dir
@@ -380,18 +373,6 @@
changeNext_move(CLICK_CD_GRABBING)
-// if(AM.pulledby && AM.pulledby != src)
-// if(AM == src)
-// to_chat(src, "I'm being grabbed by something!")
-// return FALSE
-// else
-// if(!supress_message)
-// AM.visible_message("[src] has pulled [AM] from [AM.pulledby]'s grip.", "[src] has pulled me from [AM.pulledby]'s grip.", null, null, src)
-//
-// to_chat(src, "I pull [AM] from [AM.pulledby]'s grip!")
-// log_combat(AM, AM.pulledby, "pulled from", src)
-// AM.pulledby.stop_pulling() //an object can't be pulled by two mobs at once.
-
if(AM != src)
pulling = AM
AM.pulledby = src
@@ -473,40 +454,6 @@
/mob/living/proc/set_pull_offsets(mob/living/M, grab_state = GRAB_PASSIVE)
return //rtd fix not updating because no dirchange
-/* if(M == src)
- return
- if(M.wallpressed)
- return
- if(M.buckled)
- return //don't make them change direction or offset them if they're buckled into something.
- var/offset = 0
- switch(grab_state)
- if(GRAB_PASSIVE)
- offset = GRAB_PIXEL_SHIFT_PASSIVE
- if(GRAB_AGGRESSIVE)
- offset = GRAB_PIXEL_SHIFT_AGGRESSIVE
- if(GRAB_NECK)
- offset = GRAB_PIXEL_SHIFT_NECK
- if(GRAB_KILL)
- offset = GRAB_PIXEL_SHIFT_NECK
- M.setDir(get_dir(M, src))
- switch(M.dir)
- if(NORTH)
- M.set_mob_offsets("pulledby", _x = 0, _y = offset)
- if(SOUTH)
- M.set_mob_offsets("pulledby", _x = 0, _y = -offset)
- if(EAST)
- if(M.lying == 270) //update the dragged dude's direction if we've turned
- M.lying = 90
- M.update_transform() //force a transformation update, otherwise it'll take a few ticks for update_mobility() to do so
- M.lying_prev = M.lying
- M.set_mob_offsets("pulledby", _x = offset, _y = 0)
- if(WEST)
- if(M.lying == 90)
- M.lying = 270
- M.update_transform()
- M.lying_prev = M.lying
- M.set_mob_offsets("pulledby", _x = offset, _y = 0) */
/mob/living
var/list/mob_offsets = list()
@@ -516,16 +463,11 @@
if(mob_offsets[index])
reset_offsets(index)
mob_offsets[index] = list("x" = _x, "y" = _y)
-// pixel_x = pixel_x + mob_offsets[index]["x"]
-// pixel_y = pixel_y + mob_offsets[index]["y"]
update_transform()
/mob/living/proc/reset_offsets(index)
if(index)
if(mob_offsets[index])
-// animate(src, pixel_x = pixel_x - mob_offsets[index]["x"], pixel_y = pixel_y - mob_offsets[index]["y"], 1)
-// pixel_x = pixel_x - mob_offsets[index]["x"]
-// pixel_y = pixel_y - mob_offsets[index]["y"]
mob_offsets[index] = null
update_transform()
@@ -723,8 +665,6 @@
for(var/i in ret.Copy()) //iterate storage objects
var/atom/A = i
SEND_SIGNAL(A, COMSIG_TRY_STORAGE_RETURN_INVENTORY, ret)
- for(var/obj/item/folder/F in ret.Copy()) //very snowflakey-ly iterate folders
- ret |= F.contents
return ret
// Living mobs use can_inject() to make sure that the mob is not syringe-proof in general.
@@ -1289,9 +1229,6 @@
var/obj_temp = oloc.return_temperature()
if(obj_temp != null)
loc_temp = obj_temp
- else if(isspaceturf(get_turf(src)))
- var/turf/heat_turf = get_turf(src)
- loc_temp = heat_turf.temperature
return loc_temp
/mob/living/proc/get_standard_pixel_x_offset(lying = 0)
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
deleted file mode 100644
index 1ce943c490..0000000000
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ /dev/null
@@ -1,435 +0,0 @@
-/mob/living/simple_animal/hostile/construct
- name = "Construct"
- real_name = "Construct"
- desc = ""
- gender = NEUTER
- mob_biotypes = NONE
- speak_emote = list("hisses")
- response_help_continuous = "thinks better of touching"
- response_help_simple = "think better of touching"
- response_disarm_continuous = "flails at"
- response_disarm_simple = "flail at"
- response_harm_continuous = "punches"
- response_harm_simple = "punch"
- speak_chance = 1
- icon = 'icons/mob/mob.dmi'
- speed = 0
- spacewalk = TRUE
- a_intent = INTENT_HARM
- stop_automated_movement = 1
- status_flags = CANPUSH
- attack_sound = 'sound/blank.ogg'
- see_in_dark = 7
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
- damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- maxbodytemp = INFINITY
- healable = 0
- faction = list("cult")
- movement_type = FLYING
- pressure_resistance = 100
- unique_name = 1
- AIStatus = AI_OFF //normal constructs don't have AI
- loot = list(/obj/item/ectoplasm)
- del_on_death = TRUE
- initial_language_holder = /datum/language_holder/construct
- deathmessage = "collapses in a shattered heap."
- hud_type = /datum/hud/constructs
- var/list/construct_spells = list()
- var/playstyle_string = "I are a generic construct! Your job is to not exist, and you should probably adminhelp this."
- var/master = null
- var/seeking = FALSE
- var/can_repair_constructs = FALSE
- var/can_repair_self = FALSE
- var/runetype
- var/holy = FALSE
-
-/mob/living/simple_animal/hostile/construct/Initialize()
- . = ..()
- update_health_hud()
- var/spellnum = 1
- for(var/spell in construct_spells)
- var/the_spell = new spell(null)
- AddSpell(the_spell)
- var/obj/effect/proc_holder/spell/S = mob_spell_list[spellnum]
- var/pos = 2+spellnum*31
- if(construct_spells.len >= 4)
- pos -= 31*(construct_spells.len - 4)
- S.action.button.screen_loc = "6:[pos],4:-2"
- S.action.button.moved = "6:[pos],4:-2"
- spellnum++
-
-/mob/living/simple_animal/hostile/construct/Login()
- ..()
- to_chat(src, playstyle_string)
-
-/mob/living/simple_animal/hostile/construct/examine(mob/user)
- var/t_He = p_they(TRUE)
- var/t_s = p_s()
- . = list("*---------*\nThis is [icon2html(src, user)] \a [src]!\n[desc]")
- if(health < maxHealth)
- if(health >= maxHealth/2)
- . += "[t_He] look[t_s] slightly dented."
- else
- . += "[t_He] look[t_s] severely dented!"
- . += "*---------*"
-
-/mob/living/simple_animal/hostile/construct/attack_animal(mob/living/simple_animal/M)
- if(isconstruct(M)) //is it a construct?
- var/mob/living/simple_animal/hostile/construct/C = M
- if(!C.can_repair_constructs || (C == src && !C.can_repair_self))
- return ..()
- if(holy != C.holy)
- return ..()
- if(health < maxHealth)
- adjustHealth(-5)
- if(src != M)
- Beam(M,icon_state="sendbeam",time=4)
- M.visible_message("[M] repairs some of \the [src]'s dents.", \
- "I repair some of [src]'s dents, leaving [src] at [health]/[maxHealth] health.")
- else
- M.visible_message("[M] repairs some of [p_their()] own dents.", \
- "I repair some of your own dents, leaving you at [M.health]/[M.maxHealth] health.")
- else
- if(src != M)
- to_chat(M, "I cannot repair [src]'s dents, as [p_they()] [p_have()] none!")
- else
- to_chat(M, "I cannot repair your own dents, as you have none!")
- else if(src != M)
- return ..()
-
-/mob/living/simple_animal/hostile/construct/narsie_act()
- return
-
-/mob/living/simple_animal/hostile/construct/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE)
- return 0
-
-/mob/living/simple_animal/hostile/construct/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
- . = ..()
- if(updating_health)
- update_health_hud()
-
-/////////////////Juggernaut///////////////
-/mob/living/simple_animal/hostile/construct/armored
- name = "Juggernaut"
- real_name = "Juggernaut"
- desc = ""
- icon_state = "behemoth"
- icon_living = "behemoth"
- maxHealth = 150
- health = 150
- response_harm_continuous = "harmlessly punches"
- response_harm_simple = "harmlessly punch"
- harm_intent_damage = 0
- obj_damage = 90
- melee_damage_lower = 25
- melee_damage_upper = 25
- attack_verb_continuous = "smashes their armored gauntlet into"
- attack_verb_simple = "smash your armored gauntlet into"
- speed = 2.5
- environment_smash = ENVIRONMENT_SMASH_WALLS
- attack_sound = 'sound/blank.ogg'
- status_flags = 0
- mob_size = MOB_SIZE_LARGE
- force_threshold = 10
- construct_spells = list(/obj/effect/proc_holder/spell/targeted/forcewall/cult,
- /obj/effect/proc_holder/spell/targeted/projectile/dumbfire/juggernaut)
- playstyle_string = "I are a Juggernaut. Though slow, your shell can withstand heavy punishment, \
- create shield walls, rip apart enemies and walls alike, and even deflect energy weapons."
-
-/mob/living/simple_animal/hostile/construct/armored/hostile //actually hostile, will move around, hit things
- AIStatus = AI_ON
- environment_smash = ENVIRONMENT_SMASH_STRUCTURES //only token destruction, don't smash the cult wall NO STOP
-
-/mob/living/simple_animal/hostile/construct/armored/bullet_act(obj/projectile/P)
- if(istype(P, /obj/projectile/energy) || istype(P, /obj/projectile/beam))
- var/reflectchance = 40 - round(P.damage/3)
- if(prob(reflectchance))
- apply_damage(P.damage * 0.5, P.damage_type)
- visible_message("The [P.name] is reflected by [src]'s armored shell!", \
- "The [P.name] is reflected by your armored shell!")
-
- // Find a turf near or on the original location to bounce to
- if(P.starting)
- var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
- var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
- var/turf/curloc = get_turf(src)
-
- // redirect the projectile
- P.original = locate(new_x, new_y, P.z)
- P.starting = curloc
- P.firer = src
- P.yo = new_y - curloc.y
- P.xo = new_x - curloc.x
- var/new_angle_s = P.Angle + rand(120,240)
- while(new_angle_s > 180) // Translate to regular projectile degrees
- new_angle_s -= 360
- P.setAngle(new_angle_s)
-
- return BULLET_ACT_FORCE_PIERCE // complete projectile permutation
-
- return ..()
-
-//////////////////////////Angelic-Juggernaut////////////////////////////
-/mob/living/simple_animal/hostile/construct/armored/angelic
- icon_state = "behemoth_angelic"
- icon_living = "behemoth_angelic"
- holy = TRUE
- loot = list(/obj/item/ectoplasm/angelic)
-
-/mob/living/simple_animal/hostile/construct/armored/noncult
-
-////////////////////////Wraith/////////////////////////////////////////////
-/mob/living/simple_animal/hostile/construct/wraith
- name = "Wraith"
- real_name = "Wraith"
- desc = ""
- icon_state = "floating"
- icon_living = "floating"
- maxHealth = 65
- health = 65
- melee_damage_lower = 20
- melee_damage_upper = 20
- retreat_distance = 2 //AI wraiths will move in and out of combat
- attack_verb_continuous = "slashes"
- attack_verb_simple = "slash"
- attack_sound = 'sound/blank.ogg'
- construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift)
- playstyle_string = "I are a Wraith. Though relatively fragile, you are fast, deadly, can phase through walls, and your attacks will lower the cooldown on phasing."
-
- var/attack_refund = 10 //1 second per attack
- var/crit_refund = 50 //5 seconds when putting a target into critical
- var/kill_refund = 250 //full refund on kills
-
-/mob/living/simple_animal/hostile/construct/wraith/AttackingTarget() //refund jaunt cooldown when attacking living targets
- var/prev_stat
- if(isliving(target))
- var/mob/living/L = target
- prev_stat = L.stat
-
- . = ..()
-
- if(. && isnum(prev_stat))
- var/mob/living/L = target
- var/refund = 0
- if(QDELETED(L) || (L.stat == DEAD && prev_stat != DEAD)) //they're dead, you killed them
- refund += kill_refund
- else if(L.InCritical() && prev_stat == CONSCIOUS) //you knocked them into critical
- refund += crit_refund
- if(L.stat != DEAD && prev_stat != DEAD)
- refund += attack_refund
- for(var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/S in mob_spell_list)
- S.charge_counter = min(S.charge_counter + refund, S.charge_max)
-
-/mob/living/simple_animal/hostile/construct/wraith/hostile //actually hostile, will move around, hit things
- AIStatus = AI_ON
-
-//////////////////////////Angelic-Wraith////////////////////////////
-/mob/living/simple_animal/hostile/construct/wraith/angelic
- icon_state = "floating_angelic"
- icon_living = "floating_angelic"
- holy = TRUE
- loot = list(/obj/item/ectoplasm/angelic)
-
-/mob/living/simple_animal/hostile/construct/wraith/noncult
-
-/////////////////////////////Artificer/////////////////////////
-/mob/living/simple_animal/hostile/construct/builder
- name = "Artificer"
- real_name = "Artificer"
- desc = ""
- icon_state = "artificer"
- icon_living = "artificer"
- maxHealth = 50
- health = 50
- response_harm_continuous = "viciously beats"
- response_harm_simple = "viciously beat"
- harm_intent_damage = 5
- obj_damage = 60
- melee_damage_lower = 5
- melee_damage_upper = 5
- retreat_distance = 10
- minimum_distance = 10 //AI artificers will flee like fuck
- attack_verb_continuous = "rams"
- attack_verb_simple = "ram"
- environment_smash = ENVIRONMENT_SMASH_WALLS
- attack_sound = 'sound/blank.ogg'
- construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall,
- /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone,
- /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser,
- /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser)
- playstyle_string = "I are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, \
-
- use magic missile, repair allied constructs, shades, and myself (by clicking on them), \
- and, most important of all, create new constructs by producing soulstones to capture souls, \
- and shells to place those soulstones into."
- can_repair_constructs = TRUE
- can_repair_self = TRUE
-
-/mob/living/simple_animal/hostile/construct/builder/Found(atom/A) //what have we found here?
- if(isconstruct(A)) //is it a construct?
- var/mob/living/simple_animal/hostile/construct/C = A
- if(C.health < C.maxHealth) //is it hurt? let's go heal it if it is
- return 1
- else
- return 0
- else
- return 0
-
-/mob/living/simple_animal/hostile/construct/builder/CanAttack(atom/the_target)
- if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it
- return 0
- if(Found(the_target) || ..()) //If we Found it or Can_Attack it normally, we Can_Attack it as long as it wasn't invisible
- return 1 //as a note this shouldn't be added to base hostile mobs because it'll mess up retaliate hostile mobs
-
-/mob/living/simple_animal/hostile/construct/builder/MoveToTarget(list/possible_targets)
- ..()
- if(isliving(target))
- var/mob/living/L = target
- if(isconstruct(L) && L.health >= L.maxHealth) //is this target an unhurt construct? stop trying to heal it
- LoseTarget()
- return 0
- if(L.health <= melee_damage_lower+melee_damage_upper) //ey bucko you're hurt as fuck let's go hit you
- retreat_distance = null
- minimum_distance = 1
-
-/mob/living/simple_animal/hostile/construct/builder/Aggro()
- ..()
- if(isconstruct(target)) //oh the target is a construct no need to flee
- retreat_distance = null
- minimum_distance = 1
-
-/mob/living/simple_animal/hostile/construct/builder/LoseAggro()
- ..()
- retreat_distance = initial(retreat_distance)
- minimum_distance = initial(minimum_distance)
-
-/mob/living/simple_animal/hostile/construct/builder/hostile //actually hostile, will move around, hit things, heal other constructs
- AIStatus = AI_ON
- environment_smash = ENVIRONMENT_SMASH_STRUCTURES //only token destruction, don't smash the cult wall NO STOP
-
-/////////////////////////////Angelic Artificer/////////////////////////
-/mob/living/simple_animal/hostile/construct/builder/angelic
- desc = ""
- icon_state = "artificer_angelic"
- icon_living = "artificer_angelic"
- holy = TRUE
- loot = list(/obj/item/ectoplasm/angelic)
- construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult/purified,
- /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser,
- /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser)
-
-/mob/living/simple_animal/hostile/construct/builder/noncult
- construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall,
- /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult,
- /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser,
- /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser)
-
-/////////////////////////////Harvester/////////////////////////
-/mob/living/simple_animal/hostile/construct/harvester
- name = "Harvester"
- real_name = "Harvester"
- desc = ""
- icon_state = "chosen"
- icon_living = "chosen"
- maxHealth = 40
- health = 40
- sight = SEE_MOBS
- melee_damage_lower = 15
- melee_damage_upper = 20
- attack_verb_continuous = "butchers"
- attack_verb_simple = "butcher"
- attack_sound = 'sound/blank.ogg'
- construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/area_conversion,
- /obj/effect/proc_holder/spell/targeted/forcewall/cult)
- playstyle_string = "I are a Harvester. You are incapable of directly killing humans, but your attacks will remove their limbs: \
- Bring those who still cling to this world of illusion back to the Geometer so they may know Truth. Your form and any you are pulling can pass through runed walls effortlessly."
- can_repair_constructs = TRUE
-
-
-/mob/living/simple_animal/hostile/construct/harvester/Bump(atom/AM)
- . = ..()
- if(istype(AM, /turf/closed/wall/mineral/cult) && AM != loc) //we can go through cult walls
- var/atom/movable/stored_pulling = pulling
- if(stored_pulling)
- stored_pulling.setDir(get_dir(stored_pulling.loc, loc))
- stored_pulling.forceMove(loc)
- forceMove(AM)
- if(stored_pulling)
- start_pulling(stored_pulling, supress_message = TRUE) //drag anything we're pulling through the wall with us by magic
-
-/mob/living/simple_animal/hostile/construct/harvester/AttackingTarget()
- if(iscarbon(target))
- var/mob/living/carbon/C = target
- if(HAS_TRAIT(C, TRAIT_NODISMEMBER))
- return ..() //ATTACK!
- var/list/parts = list()
- var/undismembermerable_limbs = 0
- for(var/X in C.bodyparts)
- var/obj/item/bodypart/BP = X
- if(BP.body_part != HEAD && BP.body_part != CHEST)
- if(BP.dismemberable)
- parts += BP
- else
- undismembermerable_limbs++
- if(!LAZYLEN(parts))
- if(undismembermerable_limbs) //they have limbs we can't remove, and no parts we can, attack!
- return ..()
- C.Paralyze(60)
- visible_message("[src] knocks [C] down!")
- to_chat(src, "\"Bring [C.p_them()] to me.\"")
- return FALSE
- do_attack_animation(C)
- var/obj/item/bodypart/BP = pick(parts)
- BP.dismember()
- return FALSE
- . = ..()
-
-///////////////////////Master-Tracker///////////////////////
-
-/datum/action/innate/seek_master
- name = "Seek your Master"
- desc = ""
- background_icon_state = "bg_demon"
- buttontooltipstyle = "cult"
- button_icon_state = "cult_mark"
- var/tracking = FALSE
- var/mob/living/simple_animal/hostile/construct/the_construct
-
-
-/datum/action/innate/seek_master/Grant(mob/living/C)
- the_construct = C
- ..()
-
-
-/datum/action/innate/seek_prey
- name = "Seek the Harvest"
- desc = ""
- icon_icon = 'icons/mob/actions/actions_cult.dmi'
- background_icon_state = "bg_demon"
- buttontooltipstyle = "cult"
- button_icon_state = "cult_mark"
- var/mob/living/simple_animal/hostile/construct/harvester/the_construct
-
-/datum/action/innate/seek_prey/Grant(mob/living/C)
- the_construct = C
- ..()
-
-
-/////////////////////////////ui stuff/////////////////////////////
-
-/mob/living/simple_animal/hostile/construct/update_health_hud()
- if(hud_used)
- if(health >= maxHealth)
- hud_used.healths.icon_state = "[icon_state]_health0"
- else if(health > maxHealth*0.8)
- hud_used.healths.icon_state = "[icon_state]_health2"
- else if(health > maxHealth*0.6)
- hud_used.healths.icon_state = "[icon_state]_health3"
- else if(health > maxHealth*0.4)
- hud_used.healths.icon_state = "[icon_state]_health4"
- else if(health > maxHealth*0.2)
- hud_used.healths.icon_state = "[icon_state]_health5"
- else
- hud_used.healths.icon_state = "[icon_state]_health6"
diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm
deleted file mode 100644
index e116b4446c..0000000000
--- a/code/modules/mob/living/simple_animal/corpse.dm
+++ /dev/null
@@ -1,188 +0,0 @@
-//Meant for simple animals to drop lootable human bodies.
-
-//If someone can do this in a neater way, be my guest-Kor
-
-//This has to be separate from the Away Mission corpses, because New() doesn't work for those, and initialize() doesn't work for these.
-
-//To do: Allow corpses to appear mangled, bloody, etc. Allow customizing the bodies appearance (they're all bald and white right now).
-
-//List of different corpse types
-
-/obj/effect/mob_spawn/human/corpse/syndicatesoldier
- name = "Syndicate Operative"
- id_job = "Operative"
- hairstyle = "Bald"
- facial_hairstyle = "Shaved"
- outfit = /datum/outfit/syndicatesoldiercorpse
-
-/datum/outfit/syndicatesoldiercorpse
- name = "Syndicate Operative Corpse"
- uniform = /obj/item/clothing/under/syndicate
- suit = /obj/item/clothing/suit/armor/vest
- shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/combat
- mask = /obj/item/clothing/mask/gas
- head = /obj/item/clothing/head/helmet/swat
- back = /obj/item/storage/backpack
-
-/obj/effect/mob_spawn/human/corpse/syndicatecommando
- name = "Syndicate Commando"
- id_job = "Operative"
- hairstyle = "Bald"
- facial_hairstyle = "Shaved"
- outfit = /datum/outfit/syndicatecommandocorpse
-
-/datum/outfit/syndicatecommandocorpse
- name = "Syndicate Commando Corpse"
- uniform = /obj/item/clothing/under/syndicate
- shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/combat
- mask = /obj/item/clothing/mask/gas/syndicate
- r_pocket = /obj/item/tank/internals/emergency_oxygen
-
-
-/obj/effect/mob_spawn/human/corpse/syndicatestormtrooper
- name = "Syndicate Stormtrooper"
- id_job = "Operative"
- hairstyle = "Bald"
- facial_hairstyle = "Shaved"
- outfit = /datum/outfit/syndicatestormtroopercorpse
-
-/datum/outfit/syndicatestormtroopercorpse
- name = "Syndicate Stormtrooper Corpse"
- uniform = /obj/item/clothing/under/syndicate
- shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/combat
- mask = /obj/item/clothing/mask/gas/syndicate
-
-
-/obj/effect/mob_spawn/human/clown/corpse
- roundstart = FALSE
- instant = TRUE
- skin_tone = "fcccb3"
- hairstyle = "Bald"
- facial_hairstyle = "Shaved"
-
-/obj/effect/mob_spawn/human/corpse/pirate
- name = "Pirate"
- skin_tone = "fcccb3" //all pirates are white because it's easier that way
- outfit = /datum/outfit/piratecorpse
- hairstyle = "Bald"
- facial_hairstyle = "Shaved"
-
-/datum/outfit/piratecorpse
- name = "Pirate Corpse"
- uniform = /obj/item/clothing/under/costume/pirate
- shoes = /obj/item/clothing/shoes/jackboots
- glasses = /obj/item/clothing/glasses/eyepatch
- head = /obj/item/clothing/head/bandana
-
-
-/obj/effect/mob_spawn/human/corpse/pirate/ranged
- name = "Pirate Gunner"
- outfit = /datum/outfit/piratecorpse/ranged
-
-/datum/outfit/piratecorpse/ranged
- name = "Pirate Gunner Corpse"
- suit = /obj/item/clothing/suit/pirate
- head = /obj/item/clothing/head/pirate
-
-
-/obj/effect/mob_spawn/human/corpse/russian
- name = "Russian"
- outfit = /datum/outfit/russiancorpse
- hairstyle = "Bald"
- facial_hairstyle = "Shaved"
-
-/datum/outfit/russiancorpse
- name = "Russian Corpse"
- uniform = /obj/item/clothing/under/costume/soviet
- shoes = /obj/item/clothing/shoes/jackboots
- head = /obj/item/clothing/head/bearpelt
- gloves = /obj/item/clothing/gloves/color/black
- mask = /obj/item/clothing/mask/gas
-
-
-
-/obj/effect/mob_spawn/human/corpse/russian/ranged
- outfit = /datum/outfit/russiancorpse/ranged
-
-/datum/outfit/russiancorpse/ranged
- name = "Ranged Russian Corpse"
- head = /obj/item/clothing/head/ushanka
-
-
-/obj/effect/mob_spawn/human/corpse/russian/ranged/trooper
- outfit = /datum/outfit/russiancorpse/ranged/trooper
-
-/datum/outfit/russiancorpse/ranged/trooper
- name = "Ranged Russian Trooper Corpse"
- uniform = /obj/item/clothing/under/syndicate/camo
- suit = /obj/item/clothing/suit/armor/bulletproof
- shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/combat
- head = /obj/item/clothing/head/helmet/alt
- mask = /obj/item/clothing/mask/balaclava
-
-
-/obj/effect/mob_spawn/human/corpse/russian/ranged/officer
- name = "Russian Officer"
- outfit = /datum/outfit/russiancorpse/officer
-
-/datum/outfit/russiancorpse/officer
- name = "Russian Officer Corpse"
- uniform = /obj/item/clothing/under/costume/russian_officer
- suit = /obj/item/clothing/suit/security/officer/russian
- shoes = /obj/item/clothing/shoes/combat
- head = /obj/item/clothing/head/ushanka
-
-
-/obj/effect/mob_spawn/human/corpse/wizard
- name = "Space Wizard Corpse"
- outfit = /datum/outfit/wizardcorpse
- hairstyle = "Bald"
- facial_hairstyle = "Long Beard"
- skin_tone = "caucasian1"
-
-/datum/outfit/wizardcorpse
- name = "Space Wizard Corpse"
- uniform = /obj/item/clothing/under/color/lightpurple
- suit = /obj/item/clothing/suit/wizrobe
- shoes = /obj/item/clothing/shoes/sandal/magic
- head = /obj/item/clothing/head/wizard
-
-
-/obj/effect/mob_spawn/human/corpse/nanotrasensoldier
- name = "Nanotrasen Private Security Officer"
- id_job = "Private Security Force"
- id_access = "Security Officer"
- outfit = /datum/outfit/nanotrasensoldiercorpse2
- hairstyle = "Bald"
- facial_hairstyle = "Shaved"
-
-/datum/outfit/nanotrasensoldiercorpse2
- name = "NT Private Security Officer Corpse"
- uniform = /obj/item/clothing/under/rank/security/officer
- suit = /obj/item/clothing/suit/armor/vest
- shoes = /obj/item/clothing/shoes/combat
- gloves = /obj/item/clothing/gloves/combat
- mask = /obj/item/clothing/mask/gas/sechailer/swat
- head = /obj/item/clothing/head/helmet/swat/nanotrasen
- back = /obj/item/storage/backpack/security
-
-/obj/effect/mob_spawn/human/corpse/cat_butcher
- name = "The Cat Surgeon"
- id_job = "Cat Surgeon"
- id_access_list = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINT)
- hairstyle = "Cut Hair"
- facial_hairstyle = "Watson Mustache"
- skin_tone = "caucasian1"
- outfit = /datum/outfit/cat_butcher
-
-/datum/outfit/cat_butcher
- name = "Cat Butcher Uniform"
- uniform = /obj/item/clothing/under/rank/medical/doctor/green
- shoes = /obj/item/clothing/shoes/sneakers/white
- gloves = /obj/item/clothing/gloves/color/latex/nitrile
- back = /obj/item/storage/backpack/satchel/med
- glasses = /obj/item/clothing/glasses/hud/health
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 7348f3a7be..beef7a4575 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -73,7 +73,7 @@
if(locate(/mob/living/carbon) in get_turf(src))
sleep(1)
dir = pick(GLOB.alldirs)
- step(src, dir)
+ step(src, dir)
personal_space()
else
return
@@ -84,10 +84,10 @@
STASPD = 5
var/isracist = TRUE // Hisses at dark elves if they try to pet it
botched_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1)
- butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1,
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1,
/obj/item/alch/sinew = 1,
/obj/item/alch/bone = 1)
- perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1,
+ perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1,
/obj/item/alch/sinew = 2,
/obj/item/alch/bone = 1)
@@ -110,10 +110,10 @@
emote_see = list("brings their ears alert.", "scratches their ear with a hindleg.")
childtype = list() // TODO: puppy cabbits =:3
botched_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1)
- butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1,
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1,
/obj/item/alch/sinew = 1,
/obj/item/alch/bone = 1)
- perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1,
+ perfect_butcher_results = list(/obj/item/reagent_containers/food/snacks/rogue/meat/steak = 1,
/obj/item/alch/sinew = 2,
/obj/item/alch/bone = 1,
/obj/item/natural/fur/cabbit = 1)
@@ -266,11 +266,6 @@
movement_target = null
stop_automated_movement = 0
break
- for(var/obj/item/toy/cattoy/T in view(1,src))
- if (T.cooldown < (world.time - 400))
- emote("me", 1, "bats \the [T] around with its paw!")
- T.cooldown = world.time
-
..()
make_babies()
@@ -311,7 +306,7 @@
stop_automated_movement = 0
break
-
+
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
deleted file mode 100644
index 109fa74673..0000000000
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ /dev/null
@@ -1,73 +0,0 @@
-//Look Sir, free crabs!
-/mob/living/simple_animal/crab
- name = "crab"
- desc = ""
- icon_state = "crab"
- icon_living = "crab"
- icon_dead = "crab_dead"
- speak_emote = list("clicks")
- emote_hear = list("clicks.")
- emote_see = list("clacks.")
- speak_chance = 1
- turns_per_move = 5
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/rawcrab = 2)
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "gently pushes aside"
- response_disarm_simple = "gently push aside"
- response_harm_continuous = "stomps"
- response_harm_simple = "stomp"
- stop_automated_movement = 1
- friendly_verb_continuous = "pinches"
- friendly_verb_simple = "pinch"
- ventcrawler = VENTCRAWLER_ALWAYS
- var/obj/item/inventory_head
- var/obj/item/inventory_mask
- gold_core_spawnable = FRIENDLY_SPAWN
-
-/mob/living/simple_animal/crab/Life()
- ..()
- //CRAB movement
- if(!ckey && !stat)
- if(isturf(loc) && !resting && !buckled) //This is so it only moves if it's not inside a closet, gentics machine, etc.
- turns_since_move++
- if(turns_since_move >= turns_per_move)
- var/east_vs_west = pick(4,8)
- if(Process_Spacemove(east_vs_west))
- Move(get_step(src,east_vs_west), east_vs_west)
- turns_since_move = 0
- regenerate_icons()
-
-//COFFEE! SQUEEEEEEEEE!
-/mob/living/simple_animal/crab/Coffee
- name = "Coffee"
- real_name = "Coffee"
- desc = ""
- gender = FEMALE
- gold_core_spawnable = NO_SPAWN
-
-/mob/living/simple_animal/crab/evil
- name = "Evil Crab"
- real_name = "Evil Crab"
- desc = ""
- icon_state = "evilcrab"
- icon_living = "evilcrab"
- icon_dead = "evilcrab_dead"
- gold_core_spawnable = HOSTILE_SPAWN
-
-/mob/living/simple_animal/crab/kreb
- name = "Kreb"
- desc = ""
- real_name = "Kreb"
- icon_state = "kreb"
- icon_living = "kreb"
- icon_dead = "kreb_dead"
- gold_core_spawnable = NO_SPAWN
-
-/mob/living/simple_animal/crab/evil/kreb
- name = "Evil Kreb"
- real_name = "Evil Kreb"
- icon_state = "evilkreb"
- icon_living = "evilkreb"
- icon_dead = "evilkreb_dead"
- gold_core_spawnable = NO_SPAWN
diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm
index a3b93c1cf7..1e7a4b82ff 100644
--- a/code/modules/mob/living/simple_animal/friendly/dog.dm
+++ b/code/modules/mob/living/simple_animal/friendly/dog.dm
@@ -81,7 +81,7 @@
icon_state = "corgi"
icon_living = "corgi"
icon_dead = "corgi_dead"
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/corgi = 3, /obj/item/stack/sheet/animalhide/corgi = 1)
+ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/corgi = 3)
childtype = list(/mob/living/simple_animal/pet/dog/corgi/puppy = 95, /mob/living/simple_animal/pet/dog/corgi/puppy/void = 5)
animal_species = /mob/living/simple_animal/pet/dog
gold_core_spawnable = FRIENDLY_SPAWN
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
deleted file mode 100644
index af75efc8b7..0000000000
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ /dev/null
@@ -1,378 +0,0 @@
-// This whole file is mostly obsolete stuff, some bits like chicken still in sue
-// //goat
-/mob/living/simple_animal/hostile/retaliate/goat
- name = "goat"
- desc = ""
- icon_state = "goat"
- icon_living = "goat"
- icon_dead = "goat_dead"
- speak = list("EHEHEHEHEH","eh?")
- speak_emote = list("brays")
- emote_hear = list("brays.")
- emote_see = list("shakes its head.", "stamps a foot.", "glares around.")
- speak_chance = 1
- turns_per_move = 5
- see_in_dark = 6
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 4)
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "gently pushes aside"
- response_disarm_simple = "gently push aside"
- response_harm_continuous = "kicks"
- response_harm_simple = "kick"
- faction = list("neutral")
- mob_biotypes = MOB_ORGANIC|MOB_BEAST
- attack_same = 0
- attack_verb_continuous = "kicks"
- attack_verb_simple = "kick"
- attack_sound = 'sound/blank.ogg'
- health = 40
- maxHealth = 40
- minbodytemp = 180
- melee_damage_lower = 1
- melee_damage_upper = 2
- environment_smash = ENVIRONMENT_SMASH_NONE
- stop_automated_movement_when_pulled = 1
- blood_volume = BLOOD_VOLUME_NORMAL
- food_type = list(/obj/item/reagent_containers/food/snacks/grown)
-// var/obj/item/udder/udder = null
-
- footstep_type = FOOTSTEP_MOB_SHOE
-
-/mob/living/simple_animal/hostile/retaliate/goat/Initialize()
- udder = new()
- . = ..()
-
-/mob/living/simple_animal/hostile/retaliate/goat/Destroy()
- qdel(udder)
- udder = null
- return ..()
-
-/mob/living/simple_animal/hostile/retaliate/goat/Life()
- . = ..()
- if(.)
- //chance to go crazy and start wacking stuff
- if(!enemies.len && prob(1))
- Retaliate()
-
- if(enemies.len && prob(10))
- enemies = list()
- LoseTarget()
- src.visible_message("[src] calms down.")
- if(stat == CONSCIOUS)
- udder.generateMilk()
- eat_plants()
- if(!pulledby)
- for(var/direction in shuffle(list(1,2,4,8,5,6,9,10)))
- var/step = get_step(src, direction)
- if(step)
- if(locate(/obj/structure/spacevine) in step || locate(/obj/structure/kneestingers) in step)
- Move(step, get_dir(src, step))
-
-/mob/living/simple_animal/hostile/retaliate/goat/Retaliate()
- ..()
- src.visible_message("[src] gets an evil-looking gleam in [p_their()] eye.")
-
-/mob/living/simple_animal/hostile/retaliate/goat/attackby(obj/item/O, mob/user, params)
- if(stat == CONSCIOUS && istype(O, /obj/item/reagent_containers/glass))
- udder.milkAnimal(O, user)
- return 1
- else
- return ..()
-
-
-/mob/living/simple_animal/hostile/retaliate/goat/AttackingTarget()
- . = ..()
- if(. && ishuman(target))
- var/mob/living/carbon/human/H = target
- if(istype(H.dna.species, /datum/species/pod))
- var/obj/item/bodypart/NB = pick(H.bodyparts)
- H.visible_message("[src] takes a big chomp out of [H]!", \
- "[src] takes a big chomp out of your [NB]!")
- NB.dismember()
-//cow
-/mob/living/simple_animal/cow
- name = "cow"
- desc = ""
- icon_state = "cow"
- icon_living = "cow"
- icon_dead = "cow_dead"
- icon_gib = "cow_gib"
- gender = FEMALE
- mob_biotypes = MOB_ORGANIC|MOB_BEAST
- speak = list("moo?","moo","MOOOOOO")
- speak_emote = list("moos")
- emote_hear = list("chews.")
- emote_see = list("shakes her head.", "chews her cud.")
- speak_chance = 1
- turns_per_move = 5
- see_in_dark = 6
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 6)
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "gently pushes aside"
- response_disarm_simple = "gently push aside"
- response_harm_continuous = "kicks"
- response_harm_simple = "kick"
- attack_verb_continuous = "kicks"
- attack_verb_simple = "kick"
- attack_sound = 'sound/blank.ogg'
- health = 100
- maxHealth = 100
-// var/obj/item/udder/udder = null
- gold_core_spawnable = FRIENDLY_SPAWN
- blood_volume = BLOOD_VOLUME_NORMAL
- food_type = list(/obj/item/reagent_containers/food/snacks/produce/wheat, /obj/item/reagent_containers/food/snacks/produce/oat)
- tame_chance = 25
- bonus_tame_chance = 15
- footstep_type = FOOTSTEP_MOB_SHOE
- pooptype = /obj/item/natural/poo/cow
-
-/mob/living/simple_animal/cow/Initialize()
- if(gender == FEMALE)
- udder = new()
- . = ..()
-
-/mob/living/simple_animal/cow/Destroy()
- if(udder)
- qdel(udder)
- udder = null
- return ..()
-
-/mob/living/simple_animal/cow/attackby(obj/item/O, mob/user, params)
- if(gender == FEMALE && stat == CONSCIOUS && istype(O, /obj/item/reagent_containers/glass))
- udder.milkAnimal(O, user)
- return 1
- else
- return ..()
-
-/mob/living/simple_animal/cow/tamed(mob/user)
- . = ..()
- can_buckle = TRUE
- buckle_lying = FALSE
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 8), TEXT_SOUTH = list(0, 8), TEXT_EAST = list(-2, 8), TEXT_WEST = list(2, 8)))
- D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
- D.set_vehicle_dir_layer(NORTH, OBJ_LAYER)
- D.set_vehicle_dir_layer(EAST, OBJ_LAYER)
- D.set_vehicle_dir_layer(WEST, OBJ_LAYER)
-
-/mob/living/simple_animal/cow/Life()
- . = ..()
- if(stat == CONSCIOUS && gender == FEMALE)
- udder.generateMilk()
-
-/mob/living/simple_animal/cow/attack_hand(mob/living/carbon/M)
- if(gender == FEMALE && !stat && M.used_intent.type == INTENT_DISARM && icon_state != "[initial(icon_state)]_tip")
- M.visible_message("[M] tips over [src].",
- "I tip over [src].")
- to_chat(src, "I am tipped over by [M]!")
- Paralyze(60, ignore_canstun = TRUE)
- icon_state = "[initial(icon_state)]_tip"
- spawn(rand(20,50))
- if(!stat && M)
- icon_state = icon_living
- var/external
- var/internal
- switch(pick(1,2,3,4))
- if(1,2,3)
- var/text = pick("imploringly.", "pleadingly.",
- "with a resigned expression.")
- external = "[src] looks at [M] [text]"
- internal = "You look at [M] [text]"
- if(4)
- external = "[src] seems resigned to its fate."
- internal = "You resign myself to your fate."
- visible_message("[external]",
- "[internal]")
- else
- ..()
-
-/mob/living/simple_animal/chick
- name = "\improper chick"
- desc = ""
- icon_state = "chick"
- icon_living = "chick"
- icon_dead = "chick_dead"
- icon_gib = "chick_gib"
- gender = FEMALE
- mob_biotypes = MOB_ORGANIC|MOB_BEAST
- speak = list("Cherp.","Cherp?","Chirrup.","Cheep!")
- speak_emote = list("cheeps")
- emote_hear = list("cheeps.")
- emote_see = list("pecks at the ground.","flaps its tiny wings.")
- density = FALSE
- speak_chance = 2
- turns_per_move = 2
- butcher_results = list(/obj/item/reagent_containers/food/snacks/fat = 1)
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "gently pushes aside"
- response_disarm_simple = "gently push aside"
- response_harm_continuous = "kicks"
- response_harm_simple = "kick"
- attack_verb_continuous = "kicks"
- attack_verb_simple = "kick"
- food_type = list(/obj/item/reagent_containers/food/snacks/produce/wheat)
- health = 3
- maxHealth = 3
- ventcrawler = VENTCRAWLER_ALWAYS
- var/amount_grown = 0
- pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
- mob_size = MOB_SIZE_TINY
- gold_core_spawnable = FRIENDLY_SPAWN
-
- footstep_type = FOOTSTEP_MOB_CLAW
-
-/mob/living/simple_animal/chick/Initialize()
- . = ..()
- pixel_x = rand(-6, 6)
- pixel_y = rand(0, 10)
-
-/mob/living/simple_animal/chick/Life()
- . =..()
- if(!.)
- return
- if(!stat && !ckey)
- amount_grown += rand(1,2)
- if(amount_grown >= 100)
- new /mob/living/simple_animal/hostile/retaliate/rogue/chicken(src.loc)
- qdel(src)
-
-/mob/living/simple_animal/chick/holo/Life()
- ..()
- amount_grown = 0
-
-/mob/living/simple_animal/chicken
- name = "\improper chicken"
- desc = ""
- gender = FEMALE
- mob_biotypes = MOB_ORGANIC|MOB_BEAST
- icon_state = "chicken_brown"
- icon_living = "chicken_brown"
- icon_dead = "chicken_brown_dead"
- speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.")
- speak_emote = list("clucks","croons")
- emote_hear = list("clucks.")
- emote_see = list("pecks at the ground.","flaps its wings viciously.")
- density = FALSE
- speak_chance = 2
- turns_per_move = 3
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1)
- var/egg_type = /obj/item/reagent_containers/food/snacks/egg
- food_type = list(/obj/item/reagent_containers/food/snacks/produce/wheat, /obj/item/reagent_containers/food/snacks/produce/oat)
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "gently pushes aside"
- response_disarm_simple = "gently push aside"
- response_harm_continuous = "kicks"
- response_harm_simple = "kick"
- attack_verb_continuous = "kicks"
- attack_verb_simple = "kick"
- health = 15
- maxHealth = 15
- ventcrawler = VENTCRAWLER_ALWAYS
- var/eggsleft = 0
- var/eggsFertile = TRUE
- var/body_color
- var/icon_prefix = "chicken"
- pass_flags = PASSTABLE | PASSMOB
- mob_size = MOB_SIZE_SMALL
- var/list/feedMessages = list("It clucks happily.","It clucks happily.")
- var/list/layMessage = EGG_LAYING_MESSAGES
- var/list/validColors = list("brown","black","white")
- gold_core_spawnable = FRIENDLY_SPAWN
- var/static/chicken_count = 0
-
- footstep_type = FOOTSTEP_MOB_CLAW
-
-/mob/living/simple_animal/chicken/Initialize()
- . = ..()
- if(!body_color)
- body_color = pick(validColors)
- icon_state = "[icon_prefix]_[body_color]"
- icon_living = "[icon_prefix]_[body_color]"
- icon_dead = "[icon_prefix]_[body_color]_dead"
- pixel_x = rand(-6, 6)
- pixel_y = rand(0, 10)
- ++chicken_count
-
-/mob/living/simple_animal/chicken/Destroy()
- --chicken_count
- return ..()
-
-/mob/living/simple_animal/chicken/attackby(obj/item/O, mob/user, params)
- if(is_type_in_list(O, food_type)) //feedin' dem chickens
- if(!stat && eggsleft < 8)
- var/feedmsg = "[user] feeds [O] to [name]! [pick(feedMessages)]"
- user.visible_message(feedmsg)
- qdel(O)
- eggsleft += rand(1, 4)
- else
- to_chat(user, span_warning("[name] doesn't seem hungry!"))
- else
- ..()
-
-/mob/living/simple_animal/chicken/Life()
- . =..()
- if(!.)
- return
- if((!stat && prob(3) && eggsleft > 0) && egg_type)
- visible_message("[src] [pick(layMessage)]")
- eggsleft--
- var/obj/item/E = new egg_type(get_turf(src))
- E.pixel_x = rand(-6,6)
- E.pixel_y = rand(-6,6)
- if(eggsFertile)
- if(chicken_count < MAX_CHICKENS && prob(25))
- START_PROCESSING(SSobj, E)
-
-/obj/item/reagent_containers/food/snacks/egg/var/amount_grown = 0
-/obj/item/reagent_containers/food/snacks/egg/process()
- ..()
- if(fertile)
- if(isturf(loc))
- amount_grown += rand(1,2)
- if(amount_grown >= 100)
- visible_message(span_notice("[src] hatches with a quiet cracking sound."))
- new /mob/living/simple_animal/chick(get_turf(src))
- STOP_PROCESSING(SSobj, src)
- qdel(src)
-
-
-
-//grenchensnacker
-
-/mob/living/simple_animal/grenchensnacker
- name = "grenchensnacker"
- desc = "Why is it smiling like that"
- icon_state = "grenchen"
- icon_living = "grenchen"
- icon_dead = "grenchen_dead"
- gender = MALE
- mob_biotypes = MOB_ORGANIC|MOB_BEAST
- speak = list("GRA","AH!","HEEHEHE")
- speak_emote = list("squeeks")
- emote_hear = list("chops.")
- emote_see = list("dances.", "stares.")
- speak_chance = 1
- turns_per_move = 5
- see_in_dark = 6
- butcher_results = list(/obj/item/roguekey/porta = 1)
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "gently pushes aside"
- response_disarm_simple = "gently push aside"
- response_harm_continuous = "kicks"
- response_harm_simple = "kick"
- attack_verb_continuous = "kicks"
- attack_verb_simple = "kick"
- attack_sound = 'sound/blank.ogg'
- health = 100
- maxHealth = 100
- gold_core_spawnable = FRIENDLY_SPAWN
- blood_volume = BLOOD_VOLUME_NORMAL
- food_type = list(/obj/item/rogueore/gold, /obj/item/rogueore/silver)
- tame_chance = 25
- bonus_tame_chance = 15
- footstep_type = FOOTSTEP_MOB_SHOE
diff --git a/code/modules/mob/living/simple_animal/friendly/gondola.dm b/code/modules/mob/living/simple_animal/friendly/gondola.dm
deleted file mode 100644
index 0b4fc18e69..0000000000
--- a/code/modules/mob/living/simple_animal/friendly/gondola.dm
+++ /dev/null
@@ -1,68 +0,0 @@
-#define GONDOLA_HEIGHT pick("gondola_body_long", "gondola_body_medium", "gondola_body_short")
-#define GONDOLA_COLOR pick("A87855", "915E48", "683E2C")
-#define GONDOLA_MOUSTACHE pick("gondola_moustache_large", "gondola_moustache_small")
-#define GONDOLA_EYES pick("gondola_eyes_close", "gondola_eyes_far")
-
-//Gondolas
-
-/mob/living/simple_animal/pet/gondola
- name = "gondola"
- real_name = "gondola"
- desc = ""
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "bops"
- response_disarm_simple = "bop"
- response_harm_continuous = "kicks"
- response_harm_simple = "kick"
- faction = list("gondola")
- turns_per_move = 10
- icon = 'icons/mob/gondolas.dmi'
- icon_state = "gondola"
- icon_living = "gondola"
- loot = list(/obj/effect/decal/cleanable/blood/gibs, /obj/item/stack/sheet/animalhide/gondola = 1, /obj/item/reagent_containers/food/snacks/meat/slab/gondola = 1)
- //Gondolas aren't affected by cold.
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- maxbodytemp = 1500
- maxHealth = 200
- health = 200
- del_on_death = TRUE
-
- //Gondolas don't make footstep sounds
-
-/mob/living/simple_animal/pet/gondola/Initialize()
- . = ..()
- if (!(istype(src, /mob/living/simple_animal/pet/gondola/gondolapod)))
- CreateGondola()
-
-/mob/living/simple_animal/pet/gondola/proc/CreateGondola()
- icon_state = null
- icon_living = null
- var/height = GONDOLA_HEIGHT
- var/mutable_appearance/body_overlay = mutable_appearance(icon, height)
- var/mutable_appearance/eyes_overlay = mutable_appearance(icon, GONDOLA_EYES)
- var/mutable_appearance/moustache_overlay = mutable_appearance(icon, GONDOLA_MOUSTACHE)
- body_overlay.color = ("#[GONDOLA_COLOR]")
-
- //Offset the face to match the Gondola's height.
- switch(height)
- if("gondola_body_medium")
- eyes_overlay.pixel_y = -4
- moustache_overlay.pixel_y = -4
- if("gondola_body_short")
- eyes_overlay.pixel_y = -8
- moustache_overlay.pixel_y = -8
-
- cut_overlays(TRUE)
- add_overlay(body_overlay)
- add_overlay(eyes_overlay)
- add_overlay(moustache_overlay)
-
-/mob/living/simple_animal/pet/gondola/IsVocal() //Gondolas are the silent walker.
- return FALSE
-
-#undef GONDOLA_HEIGHT
-#undef GONDOLA_COLOR
-#undef GONDOLA_MOUSTACHE
-#undef GONDOLA_EYES
diff --git a/code/modules/mob/living/simple_animal/friendly/grensch.dm b/code/modules/mob/living/simple_animal/friendly/grensch.dm
new file mode 100644
index 0000000000..9809421451
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/friendly/grensch.dm
@@ -0,0 +1,34 @@
+
+/mob/living/simple_animal/grenchensnacker
+ name = "grenchensnacker"
+ desc = "Why is it smiling like that"
+ icon_state = "grenchen"
+ icon_living = "grenchen"
+ icon_dead = "grenchen_dead"
+ gender = MALE
+ mob_biotypes = MOB_ORGANIC|MOB_BEAST
+ speak = list("GRA","AH!","HEEHEHE")
+ speak_emote = list("squeeks")
+ emote_hear = list("chops.")
+ emote_see = list("dances.", "stares.")
+ speak_chance = 1
+ turns_per_move = 5
+ see_in_dark = 6
+ butcher_results = list(/obj/item/roguekey/porta = 1)
+ response_help_continuous = "pets"
+ response_help_simple = "pet"
+ response_disarm_continuous = "gently pushes aside"
+ response_disarm_simple = "gently push aside"
+ response_harm_continuous = "kicks"
+ response_harm_simple = "kick"
+ attack_verb_continuous = "kicks"
+ attack_verb_simple = "kick"
+ attack_sound = 'sound/blank.ogg'
+ health = 100
+ maxHealth = 100
+ gold_core_spawnable = FRIENDLY_SPAWN
+ blood_volume = BLOOD_VOLUME_NORMAL
+ food_type = list(/obj/item/rogueore/gold, /obj/item/rogueore/silver)
+ tame_chance = 25
+ bonus_tame_chance = 15
+ footstep_type = FOOTSTEP_MOB_SHOE
diff --git a/code/modules/mob/living/simple_animal/friendly/penguin.dm b/code/modules/mob/living/simple_animal/friendly/penguin.dm
deleted file mode 100644
index 232b844cc2..0000000000
--- a/code/modules/mob/living/simple_animal/friendly/penguin.dm
+++ /dev/null
@@ -1,57 +0,0 @@
-//Penguins
-
-/mob/living/simple_animal/pet/penguin
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "bops"
- response_disarm_simple = "bop"
- response_harm_continuous = "kicks"
- response_harm_simple = "kick"
- speak = list("Gah Gah!", "NOOT NOOT!", "NOOT!", "Noot", "noot", "Prah!", "Grah!")
- speak_emote = list("squawks", "gakkers")
- emote_hear = list("squawk!", "gakkers!", "noots.","NOOTS!")
- emote_see = list("shakes its beak.", "flaps it's wings.","preens itself.")
- faction = list("penguin")
- minbodytemp = 0
- see_in_dark = 5
- speak_chance = 1
- turns_per_move = 10
- icon = 'icons/mob/penguins.dmi'
- butcher_results = list(/obj/item/organ/ears/penguin = 1, /obj/item/reagent_containers/food/snacks/meat/slab/penguin = 3)
-
- footstep_type = FOOTSTEP_MOB_BAREFOOT
-
-/mob/living/simple_animal/pet/penguin/Initialize()
- . = ..()
- AddComponent(/datum/component/waddling)
-
-/mob/living/simple_animal/pet/penguin/emperor
- name = "Emperor penguin"
- real_name = "penguin"
- desc = ""
- icon_state = "penguin"
- icon_living = "penguin"
- icon_dead = "penguin_dead"
- gold_core_spawnable = FRIENDLY_SPAWN
- butcher_results = list(/obj/item/organ/ears/penguin = 1, /obj/item/reagent_containers/food/snacks/meat/slab/penguin = 3)
-
-/mob/living/simple_animal/pet/penguin/emperor/shamebrero
- name = "Shamebrero penguin"
- desc = ""
- icon_state = "penguin_shamebrero"
- icon_living = "penguin_shamebrero"
- gold_core_spawnable = NO_SPAWN
- unique_pet = TRUE
-
-/mob/living/simple_animal/pet/penguin/baby
- speak = list("gah", "noot noot", "noot!", "noot", "squeee!", "noo!")
- name = "Penguin chick"
- real_name = "penguin"
- desc = ""
- icon_state = "penguin_baby"
- icon_living = "penguin_baby"
- icon_dead = "penguin_baby_dead"
- density = FALSE
- pass_flags = PASSMOB
- mob_size = MOB_SIZE_SMALL
- butcher_results = list(/obj/item/organ/ears/penguin = 1, /obj/item/reagent_containers/food/snacks/meat/slab/penguin = 1)
diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm
deleted file mode 100644
index e7860da452..0000000000
--- a/code/modules/mob/living/simple_animal/friendly/sloth.dm
+++ /dev/null
@@ -1,48 +0,0 @@
-/mob/living/simple_animal/sloth
- name = "sloth"
- desc = ""
- icon = 'icons/mob/pets.dmi'
- icon_state = "sloth"
- icon_living = "sloth"
- icon_dead = "sloth_dead"
- speak_emote = list("yawns")
- emote_hear = list("snores.","yawns.")
- emote_see = list("dozes off.", "looks around sleepily.")
- speak_chance = 1
- turns_per_move = 5
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 3)
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "gently pushes aside"
- response_disarm_simple = "gently push aside"
- response_harm_continuous = "kicks"
- response_harm_simple = "kick"
- mob_biotypes = MOB_ORGANIC|MOB_BEAST
- gold_core_spawnable = FRIENDLY_SPAWN
- melee_damage_lower = 18
- melee_damage_upper = 18
- health = 50
- maxHealth = 50
- speed = 10
-// glide_size = 2
-
- footstep_type = FOOTSTEP_MOB_CLAW
-
-
-//Cargo Sloth
-/mob/living/simple_animal/sloth/paperwork
- name = "Paperwork"
- desc = ""
- gold_core_spawnable = NO_SPAWN
-
-//Cargo Sloth 2
-
-/mob/living/simple_animal/sloth/citrus
- name = "Citrus"
- desc = ""
- icon_state = "cool_sloth"
- icon_living = "cool_sloth"
- icon_dead = "cool_sloth_dead"
- gender = FEMALE
- butcher_results = list(/obj/item/toy/spinningtoy = 1)
- gold_core_spawnable = NO_SPAWN
diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm
deleted file mode 100644
index 934d721cf9..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/bear.dm
+++ /dev/null
@@ -1,156 +0,0 @@
-//Space bears!
-/mob/living/simple_animal/hostile/bear
- name = "space bear"
- desc = ""
- icon_state = "bear"
- icon_living = "bear"
- icon_dead = "bear_dead"
- icon_gib = "bear_gib"
- mob_biotypes = MOB_ORGANIC|MOB_BEAST
- speak = list("RAWR!","Rawr!","GRR!","Growl!")
- speak_emote = list("growls", "roars")
- emote_hear = list("rawrs.","grumbles.","grawls.")
- emote_taunt = list("stares ferociously", "stomps")
- speak_chance = 1
- taunt_chance = 25
- turns_per_move = 5
- see_in_dark = 6
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/bear = 5, /obj/item/clothing/head/bearpelt = 1)
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "gently pushes aside"
- response_disarm_simple = "gently push aside"
- maxHealth = 60
- health = 60
- spacewalk = TRUE
- var/armored = FALSE
-
- obj_damage = 60
- melee_damage_lower = 20
- melee_damage_upper = 30
- attack_verb_continuous = "claws"
- attack_verb_simple = "claw"
- attack_sound = 'sound/blank.ogg'
- friendly_verb_continuous = "bear hugs"
- friendly_verb_simple = "bear hug"
-
- //Space bears aren't affected by cold.
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- maxbodytemp = 1500
-
- faction = list("russian")
- gold_core_spawnable = HOSTILE_SPAWN
-
- footstep_type = FOOTSTEP_MOB_CLAW
-
-//SPACE BEARS! SQUEEEEEEEE~ OW! FUCK! IT BIT MY HAND OFF!!
-/mob/living/simple_animal/hostile/bear/Hudson
- name = "Hudson"
- gender = MALE
- desc = "" //I'm sorry...
-
-/mob/living/simple_animal/hostile/bear/snow
- name = "space polar bear"
- icon_state = "snowbear"
- icon_living = "snowbear"
- icon_dead = "snowbear_dead"
- desc = ""
- weather_immunities = list("snow")
-
-/mob/living/simple_animal/hostile/bear/russian
- name = "combat bear"
- desc = ""
- icon_state = "combatbear"
- icon_living = "combatbear"
- icon_dead = "combatbear_dead"
- faction = list("russian")
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/bear = 5, /obj/item/clothing/head/bearpelt = 1, /obj/item/bear_armor = 1)
- melee_damage_lower = 25
- melee_damage_upper = 35
- armor_penetration = 20
- health = 120
- maxHealth = 120
- armored = TRUE
-
-/mob/living/simple_animal/hostile/bear/update_icons()
- ..()
- if(armored)
- add_overlay("armor_bear")
-
-/obj/item/bear_armor
- name = "pile of bear armor"
- desc = "A scattered pile of various shaped armor pieces fitted for a bear, some duct tape, and a nail filer. Crude instructions \
- are written on the back of one of the plates in russian. This seems like an awful idea."
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "bear_armor_upgrade"
-
-/obj/item/bear_armor/afterattack(atom/target, mob/user, proximity_flag)
- . = ..()
- if(istype(target, /mob/living/simple_animal/hostile/bear) && proximity_flag)
- var/mob/living/simple_animal/hostile/bear/A = target
- if(A.armored)
- to_chat(user, "[A] has already been armored up!")
- return
- A.armored = TRUE
- A.maxHealth += 60
- A.health += 60
- A.armor_penetration += 20
- A.melee_damage_lower += 5
- A.melee_damage_upper += 5
- A.update_icons()
- to_chat(user, "I strap the armor plating to [A] and sharpen [A.p_their()] claws with the nail filer. This was a great idea.")
- qdel(src)
-
-/mob/living/simple_animal/hostile/bear/butter //The mighty companion to Cak. Several functions used from it.
- name = "Terrygold"
- icon_state = "butterbear"
- icon_living = "butterbear"
- icon_dead = "butterbear_dead"
- desc = ""
- faction = list("neutral", "russian")
- obj_damage = 11
- melee_damage_lower = 1
- melee_damage_upper = 1
- armor_penetration = 0
- response_harm_continuous = "takes a bite out of"
- response_harm_simple = "take a bite out of"
- attacked_sound = 'sound/blank.ogg'
- deathmessage = "loses its false life and collapses!"
- butcher_results = list(/obj/item/reagent_containers/food/snacks/butter = 6, /obj/item/reagent_containers/food/snacks/meat/slab = 3, /obj/item/organ/brain = 1, /obj/item/organ/heart = 1)
- attack_sound = 'sound/blank.ogg'
- attack_verb_continuous = "slaps"
-
-/mob/living/simple_animal/hostile/bear/butter/Life() //Heals butter bear really fast when he takes damage.
- if(stat)
- return
- if(health < maxHealth)
- heal_overall_damage(10) //Fast life regen, makes it hard for you to get eaten to death.
-
-/mob/living/simple_animal/hostile/bear/butter/attack_hand(mob/living/L) //Borrowed code from Cak, feeds people if they hit you. More nutriment but less vitamin to represent BUTTER.
- ..()
- if(L.used_intent.type == INTENT_HARM && L.reagents && !stat)
- L.reagents.add_reagent(/datum/reagent/consumable/nutriment, 1)
- L.reagents.add_reagent(/datum/reagent/consumable/nutriment/vitamin, 0.1)
-
-/mob/living/simple_animal/hostile/bear/butter/CheckParts(list/parts) //Borrowed code from Cak, allows the brain used to actually control the bear.
- ..()
- var/obj/item/organ/brain/B = locate(/obj/item/organ/brain) in contents
- if(!B || !B.brainmob || !B.brainmob.mind)
- return
- B.brainmob.mind.transfer_to(src)
- to_chat(src, "I are a butter bear! You're a mostly harmless bear/butter hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \
- so quickly that it generally doesn't matter. You're remarkably resilient to any damage besides this and it's hard for you to really die at all. You should go around and bring happiness and \
- free butter to the station!")
- var/new_name = stripped_input(src, "Enter my name, or press \"Cancel\" to stick with Terrygold.", "Name Change")
- if(new_name)
- to_chat(src, "My name is now \"new_name\"!")
- name = new_name
-
-/mob/living/simple_animal/hostile/bear/butter/AttackingTarget() //Makes some attacks by the butter bear slip those who dare cross its path.
- if(isliving(target))
- var/mob/living/L = target
- if((L.mobility_flags & MOBILITY_STAND))
- L.Knockdown(20)
- playsound(loc, 'sound/blank.ogg', 15)
- L.visible_message("[L] slips on butter!")
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
deleted file mode 100644
index 0438f32b5c..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ /dev/null
@@ -1,177 +0,0 @@
-#define REGENERATION_DELAY 60 // After taking damage, how long it takes for automatic regeneration to begin for megacarps (ty robustin!)
-
-/mob/living/simple_animal/hostile/carp
- name = "space carp"
- desc = ""
- icon = 'icons/mob/carp.dmi'
- icon_state = "base"
- icon_living = "base"
- icon_dead = "base_dead"
- icon_gib = "carp_gib"
- mob_biotypes = MOB_ORGANIC|MOB_BEAST
- speak_chance = 0
- turns_per_move = 5
- butcher_results = list(/obj/item/reagent_containers/food/snacks/carpmeat = 2)
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "gently pushes aside"
- response_disarm_simple = "gently push aside"
- emote_taunt = list("gnashes")
- taunt_chance = 30
- speed = 0
- maxHealth = 25
- health = 25
- spacewalk = TRUE
-
- harm_intent_damage = 8
- obj_damage = 50
- melee_damage_lower = 20
- melee_damage_upper = 20
- attack_verb_continuous = "bites"
- attack_verb_simple = "bite"
- attack_sound = 'sound/blank.ogg'
- speak_emote = list("gnashes")
-
- //Space carp aren't affected by cold.
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- maxbodytemp = 1500
- faction = list("carp")
- movement_type = FLYING
- pressure_resistance = 200
- gold_core_spawnable = HOSTILE_SPAWN
-
- var/random_color = TRUE //if the carp uses random coloring
- var/rarechance = 1 //chance for rare color variant
-
- var/static/list/carp_colors = list(\
- "lightpurple" = "#c3b9f1", \
- "lightpink" = "#da77a8", \
- "green" = "#70ff25", \
- "grape" = "#df0afb", \
- "swamp" = "#e5e75a", \
- "turquoise" = "#04e1ed", \
- "brown" = "#ca805a", \
- "teal" = "#20e28e", \
- "lightblue" = "#4d88cc", \
- "rusty" = "#dd5f34", \
- "beige" = "#bbaeaf", \
- "yellow" = "#f3ca4a", \
- "blue" = "#09bae1", \
- "palegreen" = "#7ef099", \
- )
- var/static/list/carp_colors_rare = list(\
- "silver" = "#fdfbf3", \
- )
-
-/mob/living/simple_animal/hostile/carp/Initialize(mapload)
- . = ..()
- carp_randomify(rarechance)
- update_icons()
-
-/mob/living/simple_animal/hostile/carp/proc/carp_randomify(rarechance)
- if(random_color)
- var/our_color
- if(prob(rarechance))
- our_color = pick(carp_colors_rare)
- add_atom_colour(carp_colors_rare[our_color], FIXED_COLOUR_PRIORITY)
- else
- our_color = pick(carp_colors)
- add_atom_colour(carp_colors[our_color], FIXED_COLOUR_PRIORITY)
- add_carp_overlay()
-
-/mob/living/simple_animal/hostile/carp/proc/add_carp_overlay()
- if(!random_color)
- return
- cut_overlays()
- var/mutable_appearance/base_overlay = mutable_appearance(icon, "base_mouth")
- base_overlay.appearance_flags = RESET_COLOR
- add_overlay(base_overlay)
-
-/mob/living/simple_animal/hostile/carp/proc/add_dead_carp_overlay()
- if(!random_color)
- return
- cut_overlays()
- var/mutable_appearance/base_dead_overlay = mutable_appearance(icon, "base_dead_mouth")
- base_dead_overlay.appearance_flags = RESET_COLOR
- add_overlay(base_dead_overlay)
-
-/mob/living/simple_animal/hostile/carp/death(gibbed)
- . = ..()
- cut_overlays()
- if(!random_color || gibbed)
- return
- add_dead_carp_overlay()
-
-/mob/living/simple_animal/hostile/carp/revive(full_heal = FALSE, admin_revive = FALSE)
- . = ..()
- if(.)
- regenerate_icons()
-
-/mob/living/simple_animal/hostile/carp/regenerate_icons()
- cut_overlays()
- if(!random_color)
- return
- if(stat != DEAD)
- add_carp_overlay()
- else
- add_dead_carp_overlay()
- ..()
-
-/mob/living/simple_animal/hostile/carp/holocarp
- icon_state = "holocarp"
- icon_living = "holocarp"
- maxbodytemp = INFINITY
- gold_core_spawnable = NO_SPAWN
- del_on_death = 1
- random_color = FALSE
-
-/mob/living/simple_animal/hostile/carp/megacarp
- icon = 'icons/mob/broadMobs.dmi'
- name = "Mega Space Carp"
- desc = ""
- icon_state = "megacarp"
- icon_living = "megacarp"
- icon_dead = "megacarp_dead"
- icon_gib = "megacarp_gib"
- maxHealth = 20
- health = 20
- pixel_x = -16
- mob_size = MOB_SIZE_LARGE
- random_color = FALSE
-
- obj_damage = 80
- melee_damage_lower = 20
- melee_damage_upper = 20
-
- var/regen_cooldown = 0
-
-/mob/living/simple_animal/hostile/carp/megacarp/Initialize()
- . = ..()
- name = "[pick(GLOB.megacarp_first_names)] [pick(GLOB.megacarp_last_names)]"
- melee_damage_lower += rand(2, 10)
- melee_damage_upper += rand(10,20)
- maxHealth += rand(30,60)
- move_to_delay = rand(3,7)
-
-/mob/living/simple_animal/hostile/carp/megacarp/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
- . = ..()
- if(.)
- regen_cooldown = world.time + REGENERATION_DELAY
-
-/mob/living/simple_animal/hostile/carp/megacarp/Life()
- . = ..()
- if(regen_cooldown < world.time)
- heal_overall_damage(4)
-
-/mob/living/simple_animal/hostile/carp/cayenne
- name = "Cayenne"
- desc = ""
- gender = FEMALE
- speak_emote = list("squeaks")
- gold_core_spawnable = NO_SPAWN
- faction = list(ROLE_SYNDICATE)
- AIStatus = AI_OFF
- rarechance = 10
-
-#undef REGENERATION_DELAY
diff --git a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm b/code/modules/mob/living/simple_animal/hostile/eyeballs.dm
deleted file mode 100644
index 11437bcd2a..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/eyeballs.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-/mob/living/simple_animal/hostile/carp/eyeball
- name = "eyeball"
- desc = ""
- icon_state = "eyeball"
- icon_living = "eyeball"
- icon_gib = ""
- gender = NEUTER
- mob_biotypes = MOB_ORGANIC
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "gently pushes aside"
- response_disarm_simple = "gently push aside"
- emote_taunt = list("glares")
- taunt_chance = 25
- maxHealth = 45
- health = 45
- speak_emote = list("telepathically cries")
-
- harm_intent_damage = 15
- obj_damage = 60
- melee_damage_lower = 20
- melee_damage_upper = 25
- attack_verb_continuous = "blinks at"
- attack_verb_simple = "blink at"
- attack_sound = 'sound/blank.ogg'
- movement_type = FLYING
-
- faction = list("spooky")
- del_on_death = 1
- random_color = FALSE
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 2a3616b0cb..1c5560c72f 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -394,7 +394,6 @@
..(gibbed)
/mob/living/simple_animal/hostile/proc/summon_backup(distance, exact_faction_match)
- do_alert_animation(src)
playsound(loc, 'sound/blank.ogg', 50, TRUE, -1)
for(var/mob/living/simple_animal/hostile/M in oview(distance, targets_from))
if(faction_check_mob(M, TRUE))
diff --git a/code/modules/mob/living/simple_animal/hostile/killertomato.dm b/code/modules/mob/living/simple_animal/hostile/killertomato.dm
deleted file mode 100644
index 3a4d380dfc..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/killertomato.dm
+++ /dev/null
@@ -1,31 +0,0 @@
-/mob/living/simple_animal/hostile/killertomato
- name = "Killer Tomato"
- desc = ""
- icon_state = "tomato"
- icon_living = "tomato"
- icon_dead = "tomato_dead"
- gender = NEUTER
- speak_chance = 0
- turns_per_move = 5
- maxHealth = 30
- health = 30
- see_in_dark = 3
- butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/killertomato = 2)
- response_help_continuous = "prods"
- response_help_simple = "prod"
- response_disarm_continuous = "pushes aside"
- response_disarm_simple = "push aside"
- response_harm_continuous = "smacks"
- response_harm_simple = "smack"
- melee_damage_lower = 8
- melee_damage_upper = 12
- attack_verb_continuous = "slams"
- attack_verb_simple = "slam"
- attack_sound = 'sound/blank.ogg'
- ventcrawler = VENTCRAWLER_ALWAYS
- faction = list("plants")
-
- atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 150
- maxbodytemp = 500
- gold_core_spawnable = HOSTILE_SPAWN
diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm
deleted file mode 100644
index 8e7de20c8b..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm
+++ /dev/null
@@ -1,195 +0,0 @@
-/mob/living/simple_animal/hostile/mushroom
- name = "walking mushroom"
- desc = ""
- icon_state = "mushroom_color"
- icon_living = "mushroom_color"
- icon_dead = "mushroom_dead"
- speak_chance = 0
- turns_per_move = 1
- maxHealth = 10
- health = 10
- butcher_results = list(/obj/item/reagent_containers/food/snacks/hugemushroomslice = 1)
- response_help_continuous = "pets"
- response_help_simple = "pet"
- response_disarm_continuous = "gently pushes aside"
- response_disarm_simple = "gently push aside"
- response_harm_continuous = "whacks"
- response_harm_simple = "whack"
- harm_intent_damage = 5
- obj_damage = 0
- melee_damage_lower = 1
- melee_damage_upper = 1
- attack_same = 2
- attack_verb_continuous = "chomps"
- attack_verb_simple = "chomp"
- attack_sound = 'sound/blank.ogg'
- faction = list("mushroom")
- environment_smash = ENVIRONMENT_SMASH_NONE
- stat_attack = DEAD
- mouse_opacity = MOUSE_OPACITY_ICON
- speed = 1
- ventcrawler = VENTCRAWLER_ALWAYS
- robust_searching = 1
- unique_name = 1
- speak_emote = list("squeaks")
- deathmessage = "fainted."
- var/cap_color = "#ffffff"
- var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms
- var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it
- var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight
- var/faint_ticker = 0 //If we hit three, another mushroom's gonna eat us
- var/static/mutable_appearance/cap_living //Where we store our cap icons so we dont generate them constantly to update our icon
- var/static/mutable_appearance/cap_dead
-
-/mob/living/simple_animal/hostile/mushroom/examine(mob/user)
- . = ..()
- if(health >= maxHealth)
- . += "It looks healthy."
- else
- . += "It looks like it's been roughed up."
-
-/mob/living/simple_animal/hostile/mushroom/Life()
- ..()
- if(!stat)//Mushrooms slowly regenerate if conscious, for people who want to save them from being eaten
- adjustBruteLoss(-2)
-
-/mob/living/simple_animal/hostile/mushroom/Initialize()//Makes every shroom a little unique
- melee_damage_lower += rand(3, 5)
- melee_damage_upper += rand(10,20)
- maxHealth += rand(40,60)
- move_to_delay = rand(3,11)
- cap_living = cap_living || mutable_appearance(icon, "mushroom_cap")
- cap_dead = cap_dead || mutable_appearance(icon, "mushroom_cap_dead")
-
- cap_color = rgb(rand(0, 255), rand(0, 255), rand(0, 255))
- UpdateMushroomCap()
- health = maxHealth
- . = ..()
-
-/mob/living/simple_animal/hostile/mushroom/CanAttack(atom/the_target) // Mushroom-specific version of CanAttack to handle stupid attack_same = 2 crap so we don't have to do it for literally every single simple_animal/hostile because this shit never gets spawned
- if(!the_target || isturf(the_target) || istype(the_target, /atom/movable/lighting_object))
- return FALSE
-
- if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it
- return FALSE
-
- if(isliving(the_target))
- var/mob/living/L = the_target
-
- if (!faction_check_mob(L) && attack_same == 2)
- return FALSE
- if(L.stat > stat_attack)
- return FALSE
-
- return TRUE
-
- return FALSE
-
-/mob/living/simple_animal/hostile/mushroom/adjustHealth(amount, updating_health = TRUE, forced = FALSE) //Possibility to flee from a fight just to make it more visually interesting
- if(!retreat_distance && prob(33))
- retreat_distance = 5
- addtimer(CALLBACK(src, PROC_REF(stop_retreat)), 30)
- . = ..()
-
-/mob/living/simple_animal/hostile/mushroom/proc/stop_retreat()
- retreat_distance = null
-
-/mob/living/simple_animal/hostile/mushroom/attack_animal(mob/living/L)
- if(istype(L, /mob/living/simple_animal/hostile/mushroom) && stat == DEAD)
- var/mob/living/simple_animal/hostile/mushroom/M = L
- if(faint_ticker < 2)
- M.visible_message("[M] chews a bit on [src].")
- faint_ticker++
- return TRUE
- M.visible_message("[M] devours [src]!")
- var/level_gain = (powerlevel - M.powerlevel)
- if(level_gain >= -1 && !bruised && !M.ckey)//Player shrooms can't level up to become robust gods.
- if(level_gain < 1)//So we still gain a level if two mushrooms were the same level
- level_gain = 1
- M.LevelUp(level_gain)
- M.adjustBruteLoss(-M.maxHealth)
- qdel(src)
- return TRUE
- return ..()
-
-/mob/living/simple_animal/hostile/mushroom/revive(full_heal = FALSE, admin_revive = FALSE)
- if(..())
- icon_state = "mushroom_color"
- UpdateMushroomCap()
- . = 1
-
-/mob/living/simple_animal/hostile/mushroom/death(gibbed)
- ..(gibbed)
- UpdateMushroomCap()
-
-/mob/living/simple_animal/hostile/mushroom/proc/UpdateMushroomCap()
- cut_overlays()
- cap_living.color = cap_color
- cap_dead.color = cap_color
- if(health == 0)
- add_overlay(cap_dead)
- else
- add_overlay(cap_living)
-
-/mob/living/simple_animal/hostile/mushroom/proc/Recover()
- visible_message("[src] slowly begins to recover.")
- faint_ticker = 0
- revive(full_heal = TRUE, admin_revive = FALSE)
- UpdateMushroomCap()
- recovery_cooldown = 1
- addtimer(CALLBACK(src, PROC_REF(recovery_recharge)), 300)
-
-/mob/living/simple_animal/hostile/mushroom/proc/recovery_recharge()
- recovery_cooldown = 0
-
-/mob/living/simple_animal/hostile/mushroom/proc/LevelUp(level_gain)
- if(powerlevel <= 9)
- powerlevel += level_gain
- if(prob(25))
- melee_damage_lower += (level_gain * rand(1,5))
- else
- melee_damage_upper += (level_gain * rand(1,5))
- maxHealth += (level_gain * rand(1,5))
- adjustBruteLoss(-maxHealth) //They'll always heal, even if they don't gain a level, in case you want to keep this shroom around instead of harvesting it
-
-/mob/living/simple_animal/hostile/mushroom/proc/Bruise()
- if(!bruised && !stat)
- src.visible_message("The [src.name] was bruised!")
- bruised = 1
-
-/mob/living/simple_animal/hostile/mushroom/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/reagent_containers/food/snacks/grown/mushroom))
- if(stat == DEAD && !recovery_cooldown)
- Recover()
- qdel(I)
- else
- to_chat(user, "[src] won't eat it!")
- return
- if(I.force)
- Bruise()
- ..()
-
-/mob/living/simple_animal/hostile/mushroom/attack_hand(mob/living/carbon/human/M)
- ..()
- if(M.used_intent.type == INTENT_HARM)
- Bruise()
-
-/mob/living/simple_animal/hostile/mushroom/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
- ..()
- if(istype(AM, /obj/item))
- var/obj/item/T = AM
- if(T.throwforce)
- Bruise()
-
-/mob/living/simple_animal/hostile/mushroom/bullet_act(obj/projectile/P)
- . = ..()
- if(P.nodamage)
- Bruise()
-
-/mob/living/simple_animal/hostile/mushroom/harvest()
- var/counter
- for(counter=0, counter<=powerlevel, counter++)
- var/obj/item/reagent_containers/food/snacks/hugemushroomslice/S = new /obj/item/reagent_containers/food/snacks/hugemushroomslice(src.loc)
- S.reagents.add_reagent(/datum/reagent/drug/mushroomhallucinogen, powerlevel)
- S.reagents.add_reagent(/datum/reagent/medicine/omnizine, powerlevel)
- S.reagents.add_reagent(/datum/reagent/medicine/synaptizine, powerlevel)
diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm
deleted file mode 100644
index a111d7d79b..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/pirate.dm
+++ /dev/null
@@ -1,90 +0,0 @@
-/mob/living/simple_animal/hostile/pirate
- name = "Pirate"
- desc = ""
- icon = 'icons/mob/simple_human.dmi'
- icon_state = "piratemelee"
- icon_living = "piratemelee"
- icon_dead = "pirate_dead"
- mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
- speak_chance = 0
- turns_per_move = 5
- response_help_continuous = "pushes"
- response_help_simple = "push"
- speed = 0
- maxHealth = 100
- health = 100
- harm_intent_damage = 5
- melee_damage_lower = 10
- melee_damage_upper = 10
- attack_verb_continuous = "punches"
- attack_verb_simple = "punch"
- attack_sound = 'sound/blank.ogg'
- a_intent = INTENT_HARM
- atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
- unsuitable_atmos_damage = 15
- speak_emote = list("yarrs")
- loot = list(/obj/effect/mob_spawn/human/corpse/pirate)
- del_on_death = 1
- faction = list("pirate")
-
-
-/mob/living/simple_animal/hostile/pirate/melee
- name = "Pirate Swashbuckler"
- icon_state = "piratemelee"
- icon_living = "piratemelee"
- icon_dead = "piratemelee_dead"
- melee_damage_lower = 30
- melee_damage_upper = 30
- armor_penetration = 35
- attack_verb_continuous = "slashes"
- attack_verb_simple = "slash"
- attack_sound = 'sound/blank.ogg'
- var/obj/effect/light_emitter/red_energy_sword/sord
-
- footstep_type = FOOTSTEP_MOB_SHOE
-
-/mob/living/simple_animal/hostile/pirate/melee/space
- name = "Space Pirate Swashbuckler"
- icon_state = "piratespace"
- icon_living = "piratespace"
- icon_dead = "piratespace_dead"
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- speed = 1
- spacewalk = TRUE
-
-/mob/living/simple_animal/hostile/pirate/melee/Initialize()
- . = ..()
- sord = new(src)
-
-/mob/living/simple_animal/hostile/pirate/melee/Destroy()
- QDEL_NULL(sord)
- return ..()
-
-/mob/living/simple_animal/hostile/pirate/melee/Initialize()
- . = ..()
- set_light(2)
-
-/mob/living/simple_animal/hostile/pirate/ranged
- name = "Pirate Gunner"
- icon_state = "pirateranged"
- icon_living = "pirateranged"
- icon_dead = "pirateranged_dead"
- projectilesound = 'sound/blank.ogg'
- ranged = 1
- rapid = 2
- rapid_fire_delay = 6
- retreat_distance = 5
- minimum_distance = 5
- projectiletype = /obj/projectile/beam/laser
- loot = list(/obj/effect/mob_spawn/human/corpse/pirate/ranged)
-
-/mob/living/simple_animal/hostile/pirate/ranged/space
- name = "Space Pirate Gunner"
- icon_state = "piratespaceranged"
- icon_living = "piratespaceranged"
- icon_dead = "piratespaceranged_dead"
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- speed = 1
- spacewalk = TRUE
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
deleted file mode 100644
index b14fb709c7..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm
+++ /dev/null
@@ -1,303 +0,0 @@
-/mob/living/simple_animal/hostile/retaliate/clown
- name = "Clown"
- desc = ""
- icon = 'icons/mob/clown_mobs.dmi'
- icon_state = "clown"
- icon_living = "clown"
- icon_dead = "clown_dead"
- icon_gib = "clown_gib"
- mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
- turns_per_move = 5
- response_disarm_continuous = "gently pushes aside"
- response_disarm_simple = "gently push aside"
- response_harm_continuous = "robusts"
- response_harm_simple = "robust"
- speak = list("HONK", "Honk!", "Welcome to clown planet!")
- emote_see = list("honks", "squeaks")
- speak_chance = 1
- a_intent = INTENT_HARM
- maxHealth = 75
- health = 75
- speed = 1
- harm_intent_damage = 8
- melee_damage_lower = 10
- melee_damage_upper = 10
- attack_sound = 'sound/blank.ogg'
- obj_damage = 0
- environment_smash = ENVIRONMENT_SMASH_NONE
- del_on_death = 1
- loot = list(/obj/effect/mob_spawn/human/clown/corpse)
-
- atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 270
- maxbodytemp = 370
- unsuitable_atmos_damage = 10
- footstep_type = FOOTSTEP_MOB_SHOE
- var/banana_time = 0 // If there's no time set it won't spawn.
- var/banana_type = /obj/item/grown/bananapeel
- var/attack_reagent
-
-/mob/living/simple_animal/hostile/retaliate/clown/handle_temperature_damage()
- if(bodytemperature < minbodytemp)
- adjustBruteLoss(10)
- else if(bodytemperature > maxbodytemp)
- adjustBruteLoss(15)
-
-/mob/living/simple_animal/hostile/retaliate/clown/attack_hand(mob/living/carbon/human/M)
- ..()
- playsound(src.loc, 'sound/blank.ogg', 50, TRUE)
-
-/mob/living/simple_animal/hostile/retaliate/clown/Life()
- . = ..()
- if(banana_time && banana_time < world.time)
- var/turf/T = get_turf(src)
- var/list/adjacent = T.GetAtmosAdjacentTurfs(1)
- new banana_type(pick(adjacent))
- banana_time = world.time + rand(30,60)
-
-/mob/living/simple_animal/hostile/retaliate/clown/AttackingTarget()
- . = ..()
- if(attack_reagent && . && isliving(target))
- var/mob/living/L = target
- if(L.reagents)
- L.reagents.add_reagent(attack_reagent, rand(1,5))
-
-/mob/living/simple_animal/hostile/retaliate/clown/lube
- name = "Living Lube"
- desc = ""
- icon_state = "lube"
- icon_living = "lube"
- turns_per_move = 1
- response_help_continuous = "dips a finger into"
- response_help_simple = "dip a finger into"
- response_disarm_continuous = "gently scoops and pours aside"
- response_disarm_simple = "gently scoop and pour aside"
- emote_see = list("bubbles", "oozes")
- loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/particle_effect/foam)
-
-/mob/living/simple_animal/hostile/retaliate/clown/lube/Initialize()
- . = ..()
- AddElement(/datum/element/snailcrawl)
-
-/mob/living/simple_animal/hostile/retaliate/clown/banana
- name = "Clownana"
- desc = ""
- icon_state = "banana tree"
- icon_living = "banana tree"
- response_disarm_continuous = "peels"
- response_disarm_simple = "peel"
- response_harm_continuous = "peels"
- response_harm_simple = "peel"
- turns_per_move = 1
- speak = list("HONK", "Honk!", "YA-HONK!!!")
- emote_see = list("honks", "bites into the banana", "plucks a banana off its head", "photosynthesizes")
- maxHealth = 120
- health = 120
- speed = -10
- loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/item/soap, /obj/item/seeds/banana)
- banana_time = 20
-
-/mob/living/simple_animal/hostile/retaliate/clown/honkling
- name = "Honkling"
- desc = ""
- icon_state = "honkling"
- icon_living = "honkling"
- turns_per_move = 1
- speed = -10
- harm_intent_damage = 1
- melee_damage_lower = 1
- melee_damage_upper = 1
- attack_verb_continuous = "cheers up"
- attack_verb_simple = "cheer up"
- loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/item/soap, /obj/item/seeds/banana/bluespace)
- banana_type = /obj/item/grown/bananapeel
- attack_reagent = /datum/reagent/consumable/laughter
-
-/mob/living/simple_animal/hostile/retaliate/clown/fleshclown
- name = "Fleshclown"
- desc = ""
- icon_state = "fleshclown"
- icon_living = "fleshclown"
- response_help_continuous = "reluctantly pokes"
- response_help_simple = "reluctantly poke"
- response_disarm_continuous = "sinks his hands into the spongy flesh of"
- response_disarm_simple = "sink your hands into the spongy flesh of"
- response_harm_continuous = "cleanses the world of"
- response_harm_simple = "cleanse the world of"
- speak = list("HONK", "Honk!", "I didn't ask for this", "I feel constant and horrible pain", "YA-HONK!!!", "this body is a merciless and unforgiving prison", "I was born out of mirthful pranking but I live in suffering")
- emote_see = list("honks", "sweats", "jiggles", "contemplates its existence")
- speak_chance = 5
- dextrous = TRUE
- ventcrawler = VENTCRAWLER_ALWAYS
- maxHealth = 140
- health = 140
- speed = -5
- melee_damage_upper = 15
- attack_verb_continuous = "limply slaps"
- attack_verb_simple = "limply slap"
- obj_damage = 5
- loot = list(/obj/item/clothing/suit/hooded/bloated_human, /obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/item/soap)
-
-/mob/living/simple_animal/hostile/retaliate/clown/longface
- name = "Longface"
- desc = ""
- icon_state = "long face"
- icon_living = "long face"
- move_resist = INFINITY
- turns_per_move = 10
- response_help_continuous = "tries to awkwardly hug"
- response_help_simple = "try to awkwardly hug"
- response_disarm_continuous = "pushes the unwieldy frame of"
- response_disarm_simple = "push the unwieldy frame of"
- response_harm_continuous = "tries to shut up"
- response_harm_simple = "try to shut up"
- speak = list("YA-HONK!!!")
- emote_see = list("honks", "squeaks")
- speak_chance = 60
- maxHealth = 150
- health = 150
- pixel_x = -16
- speed = 10
- harm_intent_damage = 5
- melee_damage_lower = 5
- attack_verb_continuous = "YA-HONKs"
- attack_verb_simple = "YA-HONK"
- loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/item/soap)
-
-/mob/living/simple_animal/hostile/retaliate/clown/clownhulk
- name = "Honk Hulk"
- desc = ""
- icon_state = "honkhulk"
- icon_living = "honkhulk"
- move_resist = INFINITY
- response_help_continuous = "tries desperately to appease"
- response_help_simple = "try desperately to appease"
- response_disarm_continuous = "foolishly pushes"
- response_disarm_simple = "foolishly push"
- response_harm_continuous = "angers"
- response_harm_simple = "anger"
- speak = list("HONK", "Honk!", "HAUAUANK!!!", "GUUURRRRAAAHHH!!!")
- emote_see = list("honks", "sweats", "grunts")
- speak_chance = 5
- maxHealth = 400
- health = 400
- pixel_x = -16
- speed = 2
- harm_intent_damage = 15
- melee_damage_lower = 15
- melee_damage_upper = 20
- attack_verb_continuous = "pummels"
- attack_verb_simple = "pummel"
- obj_damage = 30
- environment_smash = ENVIRONMENT_SMASH_WALLS
- loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/item/soap)
-
-/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/chlown
- name = "Chlown"
- desc = ""
- icon_state = "chlown"
- icon_living = "chlown"
- response_help_continuous = "submits to"
- response_help_simple = "submit to"
- response_disarm_continuous = "tries to assert dominance over"
- response_disarm_simple = "try to assert dominance over"
- response_harm_continuous = "makes a weak beta attack at"
- response_harm_simple = "make a weak beta attack at"
- speak = list("HONK", "Honk!", "Bruh", "cheeaaaahhh?")
- emote_see = list("asserts his dominance", "emasculates everyone implicitly")
- maxHealth = 500
- health = 500
- speed = -2
- armor_penetration = 20
- attack_verb_continuous = "steals the girlfriend of"
- attack_verb_simple = "steal the girlfriend of"
- attack_sound = 'sound/blank.ogg'
- loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/effect/particle_effect/foam, /obj/item/soap)
-
-/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/honcmunculus
- name = "Honkmunculus"
- desc = ""
- icon_state = "honkmunculus"
- icon_living = "honkmunculus"
- response_help_continuous = "skeptically pokes"
- response_help_simple = "skeptically poke"
- response_disarm_continuous = "pushes the unwieldy frame of"
- response_disarm_simple = "push the unwieldy frame of"
- speak = list("honk")
- emote_see = list("squirms", "writhes")
- speak_chance = 1
- maxHealth = 200
- health = 200
- speed = -5
- harm_intent_damage = 5
- melee_damage_lower = 5
- melee_damage_upper = 10
- attack_verb_continuous = "ferociously mauls"
- attack_verb_simple = "ferociously maul"
- environment_smash = ENVIRONMENT_SMASH_NONE
- loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/particle_effect/foam, /obj/item/soap)
- attack_reagent = /datum/reagent/peaceborg/confuse
-
-/mob/living/simple_animal/hostile/retaliate/clown/clownhulk/destroyer
- name = "The Destroyer"
- desc = ""
- icon_state = "destroyer"
- icon_living = "destroyer"
- response_disarm_continuous = "bounces off of"
- response_harm_continuous = "bounces off of"
- speak = list("HONK!!!", "The Honkmother is merciful, so I must act out her wrath.", "parce mihi ad beatus honkmother placet mihi ut peccata committere,", "DIE!!!")
- maxHealth = 400
- health = 400
- speed = 5
- harm_intent_damage = 30
- melee_damage_lower = 20
- melee_damage_upper = 40
- armor_penetration = 30
- stat_attack = UNCONSCIOUS
- attack_verb_continuous = "acts out divine vengeance on"
- attack_verb_simple = "act out divine vengeance on"
- obj_damage = 50
- environment_smash = ENVIRONMENT_SMASH_RWALLS
- loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/human, /obj/effect/particle_effect/foam, /obj/item/soap)
-
-/mob/living/simple_animal/hostile/retaliate/clown/mutant
- name = "Unknown"
- desc = ""
- icon_state = "mutant"
- icon_living = "mutant"
- move_resist = INFINITY
- turns_per_move = 10
- response_help_continuous = "reluctantly sinks a finger into"
- response_help_simple = "reluctantly sink a finger into"
- response_disarm_continuous = "squishes into"
- response_disarm_simple = "squish into"
- response_harm_continuous = "squishes into"
- response_harm_simple = "squish into"
- speak = list("aaaaaahhhhuuhhhuhhhaaaaa", "AAAaaauuuaaAAAaauuhhh", "huuuuuh... hhhhuuuooooonnnnkk", "HuaUAAAnKKKK")
- emote_see = list("squirms", "writhes", "pulsates", "froths", "oozes")
- speak_chance = 10
- maxHealth = 130
- health = 130
- pixel_x = -16
- speed = -5
- harm_intent_damage = 10
- melee_damage_lower = 10
- melee_damage_upper = 20
- attack_verb_continuous = "awkwardly flails at"
- attack_verb_simple = "awkwardly flail at"
- loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/item/soap, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic/animal, /obj/effect/gibspawner/human/bodypartless, /obj/effect/gibspawner/human)
-
-/mob/living/simple_animal/hostile/retaliate/clown/mutant/blob
- name = "Something that was once a clown"
- desc = ""
- icon_state = "blob"
- icon_living = "blob"
- speak = list("hey, buddy", "HONK!!!", "H-h-h-H-HOOOOONK!!!!", "HONKHONKHONK!!!", "HEY, BUCKO, GET BACK HERE!!!", "HOOOOOOOONK!!!")
- emote_see = list("jiggles", "wobbles")
- health = 130
- mob_size = MOB_SIZE_LARGE
- speed = 20
- attack_verb_continuous = "bounces off of"
- attack_verb_simple = "bounce off of"
- loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/particle_effect/foam, /obj/item/soap, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/generic/animal, /obj/effect/gibspawner/human/bodypartless, /obj/effect/gibspawner/human)
- attack_reagent = /datum/reagent/toxin/mindbreaker
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
deleted file mode 100644
index 315a9a56ac..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/ghost.dm
+++ /dev/null
@@ -1,131 +0,0 @@
-/mob/living/simple_animal/hostile/retaliate/ghost
- name = "ghost"
- desc = ""
- icon = 'icons/mob/mob.dmi'
- icon_state = "ghost"
- icon_living = "ghost"
- mob_biotypes = MOB_SPIRIT
- speak_chance = 0
- turns_per_move = 5
- response_help_continuous = "passes through"
- response_help_simple = "pass through"
- a_intent = INTENT_HARM
- healable = 0
- speed = 0
- maxHealth = 40
- health = 40
- harm_intent_damage = 10
- melee_damage_lower = 15
- melee_damage_upper = 15
- del_on_death = 1
- emote_see = list("weeps silently", "groans", "mumbles")
- attack_verb_continuous = "grips"
- attack_verb_simple = "grip"
- attack_sound = 'sound/blank.ogg'
- speak_emote = list("weeps")
- deathmessage = "wails, disintegrating into a pile of ectoplasm!"
- loot = list(/obj/item/ectoplasm)
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- maxbodytemp = 1500
- movement_type = FLYING
- pressure_resistance = 300
- gold_core_spawnable = NO_SPAWN //too spooky for science
- var/ghost_hairstyle
- var/ghost_hair_color
- var/mutable_appearance/ghost_hair
- var/ghost_facial_hairstyle
- var/ghost_facial_hair_color
- var/mutable_appearance/ghost_facial_hair
- var/random = TRUE //if you want random names for ghosts or not
-
-/mob/living/simple_animal/hostile/retaliate/ghost/Initialize()
- . = ..()
- give_hair()
- set_light(1, 1, 2) // same glowing as visible player ghosts
- if(random)
- switch(rand(0,1))
- if(0)
- name = "ghost of [pick(GLOB.first_names_male)] [pick(GLOB.last_names)]"
- if(1)
- name = "ghost of [pick(GLOB.first_names_female)] [pick(GLOB.last_names)]"
-
-
-/mob/living/simple_animal/hostile/retaliate/ghost/proc/give_hair()
- if(ghost_hairstyle != null)
- ghost_hair = mutable_appearance('icons/mob/human_face.dmi', "hair_[ghost_hairstyle]", -HAIR_LAYER)
- ghost_hair.alpha = 200
- ghost_hair.color = ghost_hair_color
- add_overlay(ghost_hair)
- if(ghost_facial_hairstyle != null)
- ghost_facial_hair = mutable_appearance('icons/mob/human_face.dmi', "facial_[ghost_facial_hairstyle]", -HAIR_LAYER)
- ghost_facial_hair.alpha = 200
- ghost_facial_hair.color = ghost_facial_hair_color
- add_overlay(ghost_facial_hair)
-
-/mob/living/simple_animal/hostile/retaliate/gaseousform
- name = "gaseous mist"
- desc = ""
- icon = 'icons/mob/mob.dmi'
- icon_state = "mist"
- icon_living = "mist"
- mob_biotypes = MOB_SPIRIT
- speak_chance = 0
- turns_per_move = 5
- response_help_continuous = "passes through"
- response_help_simple = "pass through"
- a_intent = INTENT_HARM
- healable = 0
- speed = 0
- maxHealth = 40
- health = 40
- harm_intent_damage = 10
- melee_damage_lower = 15
- melee_damage_upper = 15
- del_on_death = 1
- emote_see = list("blows")
- attack_verb_continuous = "grips"
- attack_verb_simple = "grip"
- attack_sound = 'sound/blank.ogg'
- speak_emote = list("wails")
- deathmessage = "wails, disintegrating into a pile of ectoplasm!"
- loot = list(/obj/item/ectoplasm)
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- maxbodytemp = 1500
- movement_type = FLYING
- pressure_resistance = 300
- gold_core_spawnable = NO_SPAWN //too spooky for science
- var/random = TRUE //if you want random names for ghosts or not
-
-/mob/living/simple_animal/hostile/retaliate/gaseousform/Initialize()
- . = ..()
- set_light(1, 1, 2)
- addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living/simple_animal/hostile/retaliate/gaseousform, revert), "VAMPIRE LORD"), 10 SECONDS)
-
-/mob/living/simple_animal/hostile/retaliate/gaseousform/proc/revert()
- qdel()
-
-/mob/living/simple_animal/hostile/retaliate/gaseousform/Move(NewLoc, direct)
- var/oldloc = loc
-
- if(NewLoc)
- var/NewLocTurf = get_turf(NewLoc)
- if(istype(NewLocTurf, /turf/closed/mineral/rogue/bedrock)) // prevent going out of bounds.
- return
- if(istype(NewLocTurf, /turf/closed/wall)) // gas can go through doors/windows but not walls
- return
- forceMove(NewLoc)
- update_parallax_contents()
- else
- forceMove(get_turf(src)) //Get out of closets and such as a ghost
- if((direct & NORTH) && y < world.maxy)
- y++
- else if((direct & SOUTH) && y > 1)
- y--
- if((direct & EAST) && x < world.maxx)
- x++
- else if((direct & WEST) && x > 1)
- x--
-
- Moved(oldloc, direct)
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm
deleted file mode 100644
index 10334cc251..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/spaceman.dm
+++ /dev/null
@@ -1,75 +0,0 @@
-/mob/living/simple_animal/hostile/retaliate/spaceman
- name = "Spaceman"
- desc = ""
- icon_state = "old"
- icon_living = "old"
- icon_dead = "old_dead"
- icon_gib = "clown_gib"
- mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
- gender = MALE
- turns_per_move = 5
- response_disarm_continuous = "gently pushes aside"
- response_disarm_simple = "gently push aside"
- response_harm_continuous = "punches"
- response_harm_simple = "punch"
- a_intent = INTENT_HARM
- maxHealth = 100
- health = 100
- speed = 0
- harm_intent_damage = 8
- melee_damage_lower = 10
- melee_damage_upper = 10
- attack_verb_continuous = "hits"
- attack_verb_simple = "hit"
- attack_sound = 'sound/blank.ogg'
- obj_damage = 0
- environment_smash = ENVIRONMENT_SMASH_NONE
- del_on_death = 0
- footstep_type = FOOTSTEP_MOB_SHOE
-
-/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace //this should be in a different file
- name = "Nanotrasen Private Security Officer"
- desc = ""
- icon = 'icons/mob/simple_human.dmi'
- icon_state = "nanotrasen"
- icon_living = "nanotrasen"
- icon_dead = null
- icon_gib = "syndicate_gib"
- turns_per_move = 5
- speed = 0
- stat_attack = UNCONSCIOUS
- robust_searching = 1
- vision_range = 3
- maxHealth = 100
- health = 100
- harm_intent_damage = 5
- melee_damage_lower = 10
- melee_damage_upper = 15
- attack_verb_continuous = "punches"
- attack_verb_simple = "punch"
- attack_sound = 'sound/blank.ogg'
- faction = list("nanotrasenprivate")
- a_intent = INTENT_HARM
- loot = list(/obj/effect/mob_spawn/human/corpse/nanotrasensoldier)
- atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
- unsuitable_atmos_damage = 15
- status_flags = CANPUSH
- search_objects = 1
-
-/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace/Aggro()
- ..()
- summon_backup(15)
- say("411 in progress, requesting backup!")
-
-/mob/living/simple_animal/hostile/retaliate/nanotrasenpeace/ranged
- icon_state = "nanotrasenrangedsmg"
- icon_living = "nanotrasenrangedsmg"
- vision_range = 9
- rapid = 3
- ranged = 1
- retreat_distance = 3
- minimum_distance = 5
- casingtype = /obj/item/ammo_casing/c46x30mm
- projectilesound = 'sound/blank.ogg'
- loot = list(/obj/item/gun/ballistic/automatic/wt550,
- /obj/effect/mob_spawn/human/corpse/nanotrasensoldier)
diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm
deleted file mode 100644
index 84a89b5531..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm
+++ /dev/null
@@ -1,127 +0,0 @@
-/mob/living/simple_animal/hostile/skeleton
- name = "skeleton"
- desc = ""
- icon = 'icons/mob/simple_human.dmi'
- icon_state = "skeleton"
- icon_living = "skeleton"
- icon_dead = "skeleton"
- gender = NEUTER
- mob_biotypes = MOB_UNDEAD|MOB_HUMANOID
- turns_per_move = 5
- speak_emote = list("rattles")
- emote_see = list("rattles")
- a_intent = INTENT_HARM
- maxHealth = 40
- health = 40
- speed = 1
- harm_intent_damage = 5
- melee_damage_lower = 15
- melee_damage_upper = 15
- minbodytemp = 0
- maxbodytemp = 1500
- healable = 0 //they're skeletons how would bruise packs help them??
- attack_verb_continuous = "slashes"
- attack_verb_simple = "slash"
- attack_sound = 'sound/blank.ogg'
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- unsuitable_atmos_damage = 10
- robust_searching = 1
- stat_attack = UNCONSCIOUS
- gold_core_spawnable = HOSTILE_SPAWN
- faction = list("skeleton")
- see_in_dark = 8
- lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
- deathmessage = "collapses into a pile of bones!"
- del_on_death = 1
- loot = list(/obj/effect/decal/remains/human)
-
- footstep_type = FOOTSTEP_MOB_SHOE
-
-/mob/living/simple_animal/hostile/skeleton/eskimo
- name = "undead eskimo"
- desc = ""
- icon_state = "eskimo"
- icon_living = "eskimo"
- icon_dead = "eskimo_dead"
- maxHealth = 55
- health = 55
- weather_immunities = list("snow")
- gold_core_spawnable = NO_SPAWN
- melee_damage_lower = 17
- melee_damage_upper = 20
- deathmessage = "collapses into a pile of bones, its gear falling to the floor!"
- loot = list(/obj/effect/decal/remains/human,
- /obj/item/twohanded/spear,
- /obj/item/clothing/shoes/winterboots,
- /obj/item/clothing/suit/hooded/wintercoat)
-
-
-/mob/living/simple_animal/hostile/skeleton/templar
- name = "undead templar"
- desc = ""
- icon_state = "templar"
- icon_living = "templar"
- icon_dead = "templar_dead"
- maxHealth = 150
- health = 150
- weather_immunities = list("snow")
- speed = 2
- gold_core_spawnable = NO_SPAWN
- speak_chance = 1
- speak = list("THE GODS WILL IT!","DEUS VULT!","REMOVE KABAB!")
- force_threshold = 10 //trying to simulate actually having armor
- obj_damage = 50
- melee_damage_lower = 25
- melee_damage_upper = 30
- deathmessage = "collapses into a pile of bones, its gear clanging as it hits the ground!"
- loot = list(/obj/effect/decal/remains/human,
- /obj/item/clothing/suit/armor/riot/chaplain,
- /obj/item/clothing/head/helmet/chaplain,
- /obj/item/claymore/weak{name = "holy sword"})
-
-/mob/living/simple_animal/hostile/skeleton/ice
- name = "ice skeleton"
- desc = ""
- speed = 5
- maxHealth = 75
- health = 75
- weather_immunities = list("snow")
- color = rgb(114,228,250)
- loot = list(/obj/effect/decal/remains/human{color = rgb(114,228,250)})
-
-/mob/living/simple_animal/hostile/skeleton/plasmaminer
- name = "shambling miner"
- desc = ""
- icon_state = "plasma_miner"
- icon_living = "plasma_miner"
- icon_dead = "plasma_miner"
- maxHealth = 150
- health = 150
- harm_intent_damage = 10
- melee_damage_lower = 15
- melee_damage_upper = 20
- light_color = LIGHT_COLOR_PURPLE
- attack_verb_continuous = "slashes"
- attack_verb_simple = "slash"
- attack_sound = 'sound/blank.ogg'
- deathmessage = "collapses into a pile of bones, their suit dissolving among the plasma!"
- loot = list(/obj/effect/decal/remains/plasma)
-
-/mob/living/simple_animal/hostile/skeleton/plasmaminer/jackhammer
- desc = ""
- icon_state = "plasma_miner_tool"
- icon_living = "plasma_miner_tool"
- icon_dead = "plasma_miner_tool"
- maxHealth = 185
- health = 185
- harm_intent_damage = 15
- melee_damage_lower = 20
- melee_damage_upper = 25
- attack_verb_continuous = "blasts"
- attack_verb_simple = "blast"
- attack_sound = 'sound/blank.ogg'
- loot = list(/obj/effect/decal/remains/plasma)
-
-/mob/living/simple_animal/hostile/skeleton/plasmaminer/Initialize()
- . = ..()
- set_light(2)
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
deleted file mode 100644
index 7b5ff3c41c..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- CONTENTS
- LINE 10 - BASE MOB
- LINE 52 - SWORD AND SHIELD
- LINE 164 - GUNS
- LINE 267 - MISC
-*/
-
-
-///////////////Base mob////////////
-/obj/effect/light_emitter/red_energy_sword //used so there's a combination of both their head light and light coming off the energy sword
- light_color = LIGHT_COLOR_RED
-
-
-/mob/living/simple_animal/hostile/syndicate
- name = "Syndicate Operative"
- desc = ""
- icon = 'icons/mob/simple_human.dmi'
- icon_state = "syndicate"
- icon_living = "syndicate"
- icon_dead = "syndicate_dead"
- icon_gib = "syndicate_gib"
- mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
- speak_chance = 0
- turns_per_move = 5
- speed = 0
- stat_attack = UNCONSCIOUS
- robust_searching = 1
- maxHealth = 100
- health = 100
- harm_intent_damage = 5
- melee_damage_lower = 10
- melee_damage_upper = 10
- attack_verb_continuous = "punches"
- attack_verb_simple = "punch"
- attack_sound = 'sound/blank.ogg'
- a_intent = INTENT_HARM
- loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier)
- atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
- unsuitable_atmos_damage = 15
- faction = list(ROLE_SYNDICATE)
- check_friendly_fire = 1
- status_flags = CANPUSH
- del_on_death = 1
- dodging = TRUE
- rapid_melee = 2
- footstep_type = FOOTSTEP_MOB_SHOE
-
-///////////////Melee////////////
-
-/mob/living/simple_animal/hostile/syndicate/space
- icon_state = "syndicate_space"
- icon_living = "syndicate_space"
- name = "Syndicate Commando"
- maxHealth = 170
- health = 170
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- speed = 1
- spacewalk = TRUE
-
-/mob/living/simple_animal/hostile/syndicate/space/Initialize()
- . = ..()
- set_light(4)
-
-/mob/living/simple_animal/hostile/syndicate/space/stormtrooper
- icon_state = "syndicate_stormtrooper"
- icon_living = "syndicate_stormtrooper"
- name = "Syndicate Stormtrooper"
- maxHealth = 250
- health = 250
-
-/mob/living/simple_animal/hostile/syndicate/melee //dude with a knife and no shields
- melee_damage_lower = 15
- melee_damage_upper = 15
- icon_state = "syndicate_knife"
- icon_living = "syndicate_knife"
- loot = list(/obj/effect/gibspawner/human)
- attack_verb_continuous = "slashes"
- attack_verb_simple = "slash"
- attack_sound = 'sound/blank.ogg'
- status_flags = 0
- var/projectile_deflect_chance = 0
-
-/mob/living/simple_animal/hostile/syndicate/melee/space
- icon_state = "syndicate_space_knife"
- icon_living = "syndicate_space_knife"
- name = "Syndicate Commando"
- maxHealth = 170
- health = 170
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- speed = 1
- spacewalk = TRUE
- projectile_deflect_chance = 50
-
-/mob/living/simple_animal/hostile/syndicate/melee/space/Initialize()
- . = ..()
- set_light(4)
-
-/mob/living/simple_animal/hostile/syndicate/melee/space/stormtrooper
- icon_state = "syndicate_stormtrooper_knife"
- icon_living = "syndicate_stormtrooper_knife"
- name = "Syndicate Stormtrooper"
- maxHealth = 250
- health = 250
- projectile_deflect_chance = 50
-
-/mob/living/simple_animal/hostile/syndicate/melee/sword
- melee_damage_lower = 30
- melee_damage_upper = 30
- icon_state = "syndicate_sword"
- icon_living = "syndicate_sword"
- attack_verb_continuous = "slashes"
- attack_verb_simple = "slash"
- attack_sound = 'sound/blank.ogg'
- armor_penetration = 35
- light_color = LIGHT_COLOR_RED
- status_flags = 0
- var/obj/effect/light_emitter/red_energy_sword/sord
- projectile_deflect_chance = 50
-
-/mob/living/simple_animal/hostile/syndicate/melee/sword/Initialize()
- . = ..()
- set_light(2)
-
-/mob/living/simple_animal/hostile/syndicate/melee/sword/Destroy()
- QDEL_NULL(sord)
- return ..()
-
-/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(obj/projectile/Proj)
- if(prob(projectile_deflect_chance))
- visible_message("[src] blocks [Proj] with its shield!")
- return BULLET_ACT_BLOCK
- return ..()
-
-/mob/living/simple_animal/hostile/syndicate/melee/sword/space
- icon_state = "syndicate_space_sword"
- icon_living = "syndicate_space_sword"
- name = "Syndicate Commando"
- maxHealth = 170
- health = 170
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- speed = 1
- spacewalk = TRUE
- projectile_deflect_chance = 50
-
-/mob/living/simple_animal/hostile/syndicate/melee/sword/space/Initialize()
- . = ..()
- sord = new(src)
- set_light(4)
-
-/mob/living/simple_animal/hostile/syndicate/melee/sword/space/Destroy()
- QDEL_NULL(sord)
- return ..()
-
-/mob/living/simple_animal/hostile/syndicate/melee/sword/space/stormtrooper
- icon_state = "syndicate_stormtrooper_sword"
- icon_living = "syndicate_stormtrooper_sword"
- name = "Syndicate Stormtrooper"
- maxHealth = 250
- health = 250
- projectile_deflect_chance = 50
-
-///////////////Guns////////////
-
-/mob/living/simple_animal/hostile/syndicate/ranged
- ranged = 1
- retreat_distance = 5
- minimum_distance = 5
- icon_state = "syndicate_pistol"
- icon_living = "syndicate_pistol"
- casingtype = /obj/item/ammo_casing/c10mm
- projectilesound = 'sound/blank.ogg'
- loot = list(/obj/effect/gibspawner/human)
- dodging = FALSE
- rapid_melee = 1
-
-/mob/living/simple_animal/hostile/syndicate/ranged/infiltrator //shuttle loan event
- projectilesound = 'sound/blank.ogg'
- loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier)
-
-/mob/living/simple_animal/hostile/syndicate/ranged/space
- icon_state = "syndicate_space_pistol"
- icon_living = "syndicate_space_pistol"
- name = "Syndicate Commando"
- maxHealth = 170
- health = 170
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- speed = 1
- spacewalk = TRUE
-
-/mob/living/simple_animal/hostile/syndicate/ranged/space/Initialize()
- . = ..()
- set_light(4)
-
-/mob/living/simple_animal/hostile/syndicate/ranged/space/stormtrooper
- icon_state = "syndicate_stormtrooper_pistol"
- icon_living = "syndicate_stormtrooper_pistol"
- name = "Syndicate Stormtrooper"
- maxHealth = 250
- health = 250
-
-/mob/living/simple_animal/hostile/syndicate/ranged/smg
- rapid = 2
- icon_state = "syndicate_smg"
- icon_living = "syndicate_smg"
- casingtype = /obj/item/ammo_casing/c45
- projectilesound = 'sound/blank.ogg'
-
-/mob/living/simple_animal/hostile/syndicate/ranged/smg/pilot //caravan ambush ruin
- name = "Syndicate Salvage Pilot"
- loot = list(/obj/effect/mob_spawn/human/corpse/syndicatesoldier)
-
-/mob/living/simple_animal/hostile/syndicate/ranged/smg/space
- icon_state = "syndicate_space_smg"
- icon_living = "syndicate_space_smg"
- name = "Syndicate Commando"
- maxHealth = 170
- health = 170
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- speed = 1
- spacewalk = TRUE
-
-/mob/living/simple_animal/hostile/syndicate/ranged/smg/space/Initialize()
- . = ..()
- set_light(4)
-
-/mob/living/simple_animal/hostile/syndicate/ranged/smg/space/stormtrooper
- icon_state = "syndicate_stormtrooper_smg"
- icon_living = "syndicate_stormtrooper_smg"
- name = "Syndicate Stormtrooper"
- maxHealth = 250
- health = 250
-
-/mob/living/simple_animal/hostile/syndicate/ranged/shotgun
- rapid = 2
- rapid_fire_delay = 6
- minimum_distance = 3
- icon_state = "syndicate_shotgun"
- icon_living = "syndicate_shotgun"
- casingtype = /obj/item/ammo_casing/shotgun/buckshot //buckshot (up to 72.5 brute) fired in a two-round burst
-
-/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space
- icon_state = "syndicate_space_shotgun"
- icon_living = "syndicate_space_shotgun"
- name = "Syndicate Commando"
- maxHealth = 170
- health = 170
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- speed = 1
- spacewalk = TRUE
-
-/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space/Initialize()
- . = ..()
- set_light(4)
-
-/mob/living/simple_animal/hostile/syndicate/ranged/shotgun/space/stormtrooper
- icon_state = "syndicate_stormtrooper_shotgun"
- icon_living = "syndicate_stormtrooper_shotgun"
- name = "Syndicate Stormtrooper"
- maxHealth = 250
- health = 250
-
-///////////////Misc////////////
-
-/mob/living/simple_animal/hostile/syndicate/civilian
- minimum_distance = 10
- retreat_distance = 10
- obj_damage = 0
- environment_smash = ENVIRONMENT_SMASH_NONE
-
-/mob/living/simple_animal/hostile/syndicate/civilian/Aggro()
- ..()
- summon_backup(15)
- say("GUARDS!!")
-
-
-/mob/living/simple_animal/hostile/viscerator
- name = "viscerator"
- desc = ""
- icon_state = "viscerator_attack"
- icon_living = "viscerator_attack"
- pass_flags = PASSTABLE | PASSMOB
- a_intent = INTENT_HARM
- mob_biotypes = MOB_ROBOTIC
- health = 25
- maxHealth = 25
- melee_damage_lower = 15
- melee_damage_upper = 15
- obj_damage = 0
- environment_smash = ENVIRONMENT_SMASH_NONE
- attack_verb_continuous = "cuts"
- attack_verb_simple = "cut"
- attack_sound = 'sound/blank.ogg'
- faction = list(ROLE_SYNDICATE)
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- minbodytemp = 0
- mob_size = MOB_SIZE_TINY
- movement_type = FLYING
- limb_destroyer = 1
- speak_emote = list("states")
- bubble_icon = "syndibot"
- gold_core_spawnable = HOSTILE_SPAWN
- del_on_death = 1
- deathmessage = "is smashed into pieces!"
-
-/mob/living/simple_animal/hostile/viscerator/Initialize()
- . = ..()
- AddComponent(/datum/component/swarming)
diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm
deleted file mode 100644
index b047869449..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/tree.dm
+++ /dev/null
@@ -1,74 +0,0 @@
-/mob/living/simple_animal/hostile/tree
- name = "pine tree"
- desc = ""
- icon = 'icons/obj/flora/pinetrees.dmi'
- icon_state = "pine_1"
- icon_living = "pine_1"
- icon_dead = "pine_1"
- icon_gib = "pine_1"
- gender = NEUTER
- speak_chance = 0
- turns_per_move = 5
- response_help_continuous = "brushes"
- response_help_simple = "brush"
- response_disarm_continuous = "pushes"
- response_disarm_simple = "push"
- faction = list("hostile")
- speed = 1
- maxHealth = 250
- health = 250
- mob_size = MOB_SIZE_LARGE
-
- pixel_x = -16
-
- harm_intent_damage = 5
- melee_damage_lower = 8
- melee_damage_upper = 12
- attack_verb_continuous = "bites"
- attack_verb_simple = "bite"
- attack_sound = 'sound/blank.ogg'
- speak_emote = list("pines")
- emote_taunt = list("growls")
- taunt_chance = 20
-
- atmos_requirements = list("min_oxy" = 2, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- unsuitable_atmos_damage = 5
- minbodytemp = 0
- maxbodytemp = 1200
-
- deathmessage = "is hacked into pieces!"
- loot = list(/obj/item/stack/sheet/mineral/wood)
- gold_core_spawnable = HOSTILE_SPAWN
- del_on_death = 1
-
-/mob/living/simple_animal/hostile/tree/Life()
- ..()
- if(isopenturf(loc))
- var/turf/open/T = src.loc
- if(T.air && T.air.gases[/datum/gas/carbon_dioxide])
- var/co2 = T.air.gases[/datum/gas/carbon_dioxide][MOLES]
- if(co2 > 0)
- if(prob(25))
- var/amt = min(co2, 9)
- T.air.gases[/datum/gas/carbon_dioxide][MOLES] -= amt
- T.atmos_spawn_air("o2=[amt]")
-
-/mob/living/simple_animal/hostile/tree/AttackingTarget()
- . = ..()
- if(iscarbon(target))
- var/mob/living/carbon/C = target
- if(prob(15))
- C.Paralyze(60)
- C.visible_message("\The [src] knocks down \the [C]!", \
- "\The [src] knocks you down!")
-
-/mob/living/simple_animal/hostile/tree/festivus
- name = "festivus pole"
- desc = ""
- icon_state = "festivus_pole"
- icon_living = "festivus_pole"
- icon_dead = "festivus_pole"
- icon_gib = "festivus_pole"
- loot = list(/obj/item/stack/rods)
- speak_emote = list("polls")
- faction = list()
diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm
deleted file mode 100644
index f16c57ed2e..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-/obj/structure/alien/resin/flower_bud_enemy //inheriting basic attack/damage stuff from alien structures
- name = "flower bud"
- desc = ""
- icon = 'icons/effects/spacevines.dmi'
- icon_state = "flower_bud"
- layer = SPACEVINE_MOB_LAYER
- opacity = 0
- canSmoothWith = list()
- smooth = SMOOTH_FALSE
- var/growth_time = 1200
-
-
-/obj/structure/alien/resin/flower_bud_enemy/Initialize()
- . = ..()
- var/list/anchors = list()
- anchors += locate(x-2,y+2,z)
- anchors += locate(x+2,y+2,z)
- anchors += locate(x-2,y-2,z)
- anchors += locate(x+2,y-2,z)
-
- for(var/turf/T in anchors)
- var/datum/beam/B = Beam(T, "vine", time=INFINITY, maxdistance=5, beam_type=/obj/effect/ebeam/vine)
- B.sleep_time = 10 //these shouldn't move, so let's slow down updates to 1 second (any slower and the deletion of the vines would be too slow)
- addtimer(CALLBACK(src, PROC_REF(bear_fruit)), growth_time)
-
-/obj/structure/alien/resin/flower_bud_enemy/proc/bear_fruit()
- visible_message("the plant has borne fruit!")
- new /mob/living/simple_animal/hostile/venus_human_trap(get_turf(src))
- qdel(src)
-
-
-/obj/effect/ebeam/vine
- name = "thick vine"
- mouse_opacity = MOUSE_OPACITY_ICON
- desc = ""
-
-
-/obj/effect/ebeam/vine/Crossed(atom/movable/AM)
- if(isliving(AM))
- var/mob/living/L = AM
- if(!("vines" in L.faction))
- L.adjustBruteLoss(5)
- to_chat(L, "I cut myself on the thorny vines.")
-
-
-
-/mob/living/simple_animal/hostile/venus_human_trap
- name = "venus human trap"
- desc = ""
- icon_state = "venus_human_trap"
- layer = SPACEVINE_MOB_LAYER
- health = 50
- maxHealth = 50
- ranged = 1
- harm_intent_damage = 5
- obj_damage = 60
- melee_damage_lower = 25
- melee_damage_upper = 25
- a_intent = INTENT_HARM
- attack_sound = 'sound/blank.ogg'
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- unsuitable_atmos_damage = 0
- faction = list("hostile","vines","plants")
- var/list/grasping = list()
- var/list/tethers = list()
- var/max_grasps = 4
- var/grasp_chance = 20
- var/grasp_pull_chance = 85
- var/grasp_range = 4
- del_on_death = 1
-
-/mob/living/simple_animal/hostile/venus_human_trap/Destroy()
- for(var/L in grasping)
- var/datum/beam/B = grasping[L]
- if(B)
- qdel(B)
- for(var/datum/component/tether in tethers)
- tether.RemoveComponent()
- grasping = null
- return ..()
-
-/mob/living/simple_animal/hostile/venus_human_trap/handle_automated_action()
- if(..())
- for(var/mob/living/L in grasping)
- if(L.stat == DEAD)
- var/datum/beam/B = grasping[L]
- if(B)
- B.End()
- grasping -= L
-
- //Can attack+pull multiple times per cycle
- if(L.Adjacent(src))
- L.attack_animal(src)
- else
- if(prob(grasp_pull_chance))
- setDir(get_dir(src,L) )//staaaare
- step(L,get_dir(L,src)) //reel them in
- L.Paralyze(60) //you can't get away now~
-
- if(length(grasping) < max_grasps)
- grasping:
- for(var/mob/living/L in view(grasp_range, src))
- if(L == src || faction_check_mob(L) || (L in grasping) || L == target)
- continue
- for(var/turf/T in getline(src,L))
- if (T.density)
- continue grasping
- for(var/obj/O in T)
- if(O.density)
- continue grasping
- if(prob(grasp_chance))
- to_chat(L, "\The [src] has you entangled!")
- grasping[L] = Beam(L, "vine", time=INFINITY, maxdistance=5, beam_type=/obj/effect/ebeam/vine)
- tethers += list(L.AddComponent(/datum/component/tether, src, grasp_range+1, /obj/effect/ebeam/vine), AddComponent(/datum/component/tether, L, grasp_range+1, /obj/effect/ebeam/vine))
- break //only take 1 new victim per cycle
-
-
-/mob/living/simple_animal/hostile/venus_human_trap/OpenFire(atom/the_target)
- for(var/turf/T in getline(src,target))
- if (T.density)
- return
- for(var/obj/O in T)
- if(O.density)
- return
- var/dist = get_dist(src,the_target)
- Beam(the_target, "vine", time=dist*2, maxdistance=dist+2, beam_type=/obj/effect/ebeam/vine)
- the_target.attack_animal(src)
-
-
-/mob/living/simple_animal/hostile/venus_human_trap/CanAttack(atom/the_target)
- . = ..()
- if(.)
- if(the_target in grasping)
- return 0
diff --git a/code/modules/mob/living/simple_animal/hostile/wizard.dm b/code/modules/mob/living/simple_animal/hostile/wizard.dm
deleted file mode 100644
index cd2dea75de..0000000000
--- a/code/modules/mob/living/simple_animal/hostile/wizard.dm
+++ /dev/null
@@ -1,77 +0,0 @@
-/mob/living/simple_animal/hostile/wizard
- name = "Space Wizard"
- desc = ""
- icon = 'icons/mob/simple_human.dmi'
- icon_state = "wizard"
- icon_living = "wizard"
- icon_dead = "wizard_dead"
- mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
- speak_chance = 0
- turns_per_move = 3
- speed = 0
- maxHealth = 100
- health = 100
- harm_intent_damage = 5
- melee_damage_lower = 5
- melee_damage_upper = 5
- attack_verb_continuous = "punches"
- attack_verb_simple = "punch"
- attack_sound = 'sound/blank.ogg'
- a_intent = INTENT_HARM
- atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0)
- unsuitable_atmos_damage = 15
- faction = list(ROLE_WIZARD)
- status_flags = CANPUSH
-
- retreat_distance = 3 //out of fireball range
- minimum_distance = 3
- del_on_death = 1
- loot = list(/obj/effect/mob_spawn/human/corpse/wizard,
- /obj/item/staff)
-
- var/obj/effect/proc_holder/spell/aimed/fireball/fireball = null
- var/obj/effect/proc_holder/spell/targeted/turf_teleport/blink/blink = null
- var/obj/effect/proc_holder/spell/targeted/projectile/magic_missile/mm = null
-
- var/next_cast = 0
-
- footstep_type = FOOTSTEP_MOB_SHOE
-
-/mob/living/simple_animal/hostile/wizard/Initialize()
- . = ..()
- fireball = new /obj/effect/proc_holder/spell/aimed/fireball
- fireball.clothes_req = 0
- fireball.human_req = 0
- fireball.player_lock = 0
- AddSpell(fireball)
- implants += new /obj/item/implant/exile(src)
-
- mm = new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile
- mm.clothes_req = 0
- mm.human_req = 0
- mm.player_lock = 0
- AddSpell(mm)
-
- blink = new /obj/effect/proc_holder/spell/targeted/turf_teleport/blink
- blink.clothes_req = 0
- blink.human_req = 0
- blink.player_lock = 0
- blink.outer_tele_radius = 3
- AddSpell(blink)
-
-/mob/living/simple_animal/hostile/wizard/handle_automated_action()
- . = ..()
- if(target && next_cast < world.time)
- if((get_dir(src,target) in list(SOUTH,EAST,WEST,NORTH)) && fireball.cast_check(0,src)) //Lined up for fireball
- src.setDir(get_dir(src,target))
- fireball.perform(list(target), user = src)
- next_cast = world.time + 10 //One spell per second
- return .
- if(mm.cast_check(0,src))
- mm.choose_targets(src)
- next_cast = world.time + 10
- return .
- if(blink.cast_check(0,src)) //Spam Blink when you can
- blink.choose_targets(src)
- next_cast = world.time + 10
- return .
diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index ac05ef7f0b..bd654f49c1 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -643,16 +643,6 @@
emote("me", 1, "[src] eagerly downs the cracker.")
return 1
-
- if(!drop_gently)
- if(istype(held_item, /obj/item/grenade))
- var/obj/item/grenade/G = held_item
- G.forceMove(drop_location())
- G.prime()
- to_chat(src, "I let go of [held_item]!")
- held_item = null
- return 1
-
to_chat(src, "I drop [held_item].")
held_item.forceMove(drop_location())
@@ -842,7 +832,6 @@
speak_chance = 20
status_flags = GODMODE
incorporeal_move = INCORPOREAL_MOVE_BASIC
- butcher_results = list(/obj/item/ectoplasm = 1)
/mob/living/simple_animal/parrot/Poly/ghost/Initialize()
memory_saved = TRUE //At this point nothing is saved
diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm
deleted file mode 100644
index 2ccf7ac9a0..0000000000
--- a/code/modules/mob/living/simple_animal/shade.dm
+++ /dev/null
@@ -1,67 +0,0 @@
-/mob/living/simple_animal/shade
- name = "Shade"
- real_name = "Shade"
- desc = ""
- gender = PLURAL
- icon = 'icons/mob/mob.dmi'
- icon_state = "shade"
- icon_living = "shade"
- mob_biotypes = MOB_SPIRIT
- maxHealth = 40
- health = 40
- spacewalk = TRUE
- healable = 0
- speak_emote = list("hisses")
- emote_hear = list("wails.","screeches.")
- response_help_continuous = "puts their hand through"
- response_help_simple = "put your hand through"
- response_disarm_continuous = "flails at"
- response_disarm_simple = "flail at"
- response_harm_continuous = "punches"
- response_harm_simple = "punch"
- speak_chance = 1
- melee_damage_lower = 5
- melee_damage_upper = 12
- attack_verb_continuous = "metaphysically strikes"
- attack_verb_simple = "metaphysically strike"
- minbodytemp = 0
- maxbodytemp = INFINITY
- atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
- stop_automated_movement = 1
- faction = list("cult")
- status_flags = CANPUSH
- movement_type = FLYING
- loot = list(/obj/item/ectoplasm)
- del_on_death = TRUE
- initial_language_holder = /datum/language_holder/construct
-
-/mob/living/simple_animal/shade/death()
- deathmessage = "lets out a contented sigh as [p_their()] form unwinds."
- ..()
-
-/mob/living/simple_animal/shade/canSuicide()
- if(istype(loc, /obj/item/soulstone)) //do not suicide inside the soulstone
- return 0
- return ..()
-
-/mob/living/simple_animal/shade/attack_animal(mob/living/simple_animal/M)
- if(isconstruct(M))
- var/mob/living/simple_animal/hostile/construct/C = M
- if(!C.can_repair_constructs)
- return
- if(health < maxHealth)
- adjustHealth(-25)
- Beam(M,icon_state="sendbeam",time=4)
- M.visible_message("[M] heals \the [src].", \
- "I heal [src], leaving [src] at [health]/[maxHealth] health.")
- else
- to_chat(M, "I cannot heal [src], as [p_theyre()] unharmed!")
- else if(src != M)
- return ..()
-
-/mob/living/simple_animal/shade/attackby(obj/item/O, mob/user, params) //Marker -Agouri
- if(istype(O, /obj/item/soulstone))
- var/obj/item/soulstone/SS = O
- SS.transfer_soul("SHADE", src, user)
- else
- . = ..()
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 3a42fd5968..3f784462e8 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -722,13 +722,6 @@ GLOBAL_VAR_INIT(farm_animals, FALSE)
return ..()
if(!hand_index)
hand_index = (active_hand_index % held_items.len)+1
- var/obj/item/held_item = get_active_held_item()
- if(held_item)
- if(istype(held_item, /obj/item/twohanded))
- var/obj/item/twohanded/T = held_item
- if(T.wielded == 1)
- to_chat(usr, "My other hand is too busy holding [T].")
- return FALSE
var/oindex = active_hand_index
active_hand_index = hand_index
if(hud_used)
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index a2e3e4827e..6521909a2a 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -338,8 +338,6 @@
continue
else if(isturf(A))
var/turf/turf = A
- if(isspaceturf(turf))
- continue
if(!turf.density && !mob_negates_gravity())
continue
return A
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index ace23bd768..7dfc5aef39 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -3,16 +3,8 @@
return
//Handle items on mob
- //first implants & organs
- var/list/stored_implants = list()
var/list/int_organs = list()
- if (tr_flags & TR_KEEPIMPLANTS)
- for(var/X in implants)
- var/obj/item/implant/IMP = X
- stored_implants += IMP
- IMP.removed(src, 1, 1)
-
var/list/missing_bodyparts_zones = get_missing_limbs()
var/obj/item/cavity_object
@@ -69,12 +61,6 @@
O.updatehealth()
O.radiation = radiation
- //re-add implants to new mob
- if (tr_flags & TR_KEEPIMPLANTS)
- for(var/Y in implants)
- var/obj/item/implant/IMP = Y
- IMP.implant(O, null, 1)
-
//re-add organs to new mob. this order prevents moving the mind to a brain at any point
if(tr_flags & TR_KEEPORGANS)
for(var/X in O.internal_organs)
@@ -147,16 +133,8 @@
return
//Handle items on mob
- //first implants & organs
- var/list/stored_implants = list()
var/list/int_organs = list()
- if (tr_flags & TR_KEEPIMPLANTS)
- for(var/X in implants)
- var/obj/item/implant/IMP = X
- stored_implants += IMP
- IMP.removed(src, 1, 1)
-
var/list/missing_bodyparts_zones = get_missing_limbs()
var/obj/item/cavity_object
@@ -224,12 +202,6 @@
O.updatehealth()
O.radiation = radiation
- //re-add implants to new mob
- if (tr_flags & TR_KEEPIMPLANTS)
- for(var/Y in implants)
- var/obj/item/implant/IMP = Y
- IMP.implant(O, null, 1)
-
if(tr_flags & TR_KEEPORGANS)
for(var/X in O.internal_organs)
var/obj/item/organ/I = X
@@ -402,28 +374,13 @@
if(!MP)
return 0 //Sanity, this should never happen.
- if(ispath(MP, /mob/living/simple_animal/hostile/construct))
- return 0 //Verbs do not appear for players.
-
//Good mobs!
if(ispath(MP, /mob/living/simple_animal/pet/cat))
return 1
if(ispath(MP, /mob/living/simple_animal/pet/dog/corgi))
return 1
- if(ispath(MP, /mob/living/simple_animal/crab))
- return 1
- if(ispath(MP, /mob/living/simple_animal/hostile/carp))
- return 1
- if(ispath(MP, /mob/living/simple_animal/hostile/mushroom))
- return 1
- if(ispath(MP, /mob/living/simple_animal/shade))
- return 1
- if(ispath(MP, /mob/living/simple_animal/hostile/killertomato))
- return 1
if(ispath(MP, /mob/living/simple_animal/mouse))
return 1 //It is impossible to pull up the player panel for mice (Fixed! - Nodrak)
- if(ispath(MP, /mob/living/simple_animal/hostile/bear))
- return 1 //Bears will auto-attack mobs, even if they're player controlled (Fixed! - Nodrak)
if(ispath(MP, /mob/living/simple_animal/parrot))
return 1 //Parrots are no longer unfinished! -Nodrak
diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm
deleted file mode 100644
index 9fd997d252..0000000000
--- a/code/modules/paperwork/carbonpaper.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/obj/item/paper/carbon
- name = "sheet of carbon"
- icon_state = "paper_stack"
- item_state = "paper"
- var/copied = FALSE
- var/iscopy = FALSE
-
-/obj/item/paper/carbon/update_icon_state()
- if(iscopy)
- icon_state = "cpaper"
- else if(copied)
- icon_state = "paper"
- else
- icon_state = "paper_stack"
- if(info)
- icon_state = "[icon_state]_words"
-
-/obj/item/paper/carbon/proc/removecopy(mob/living/user)
- if(!copied)
- var/obj/item/paper/carbon/C = src
- var/copycontents = C.info
- var/obj/item/paper/carbon/Copy = new /obj/item/paper/carbon(user.loc)
-
- if(info)
- copycontents = replacetext(copycontents, ""
- Copy.name = "Copy - [C.name]"
- Copy.fields = C.fields
- Copy.updateinfolinks()
- to_chat(user, "I tear off the carbon-copy!")
- C.copied = TRUE
- Copy.iscopy = TRUE
- Copy.update_icon_state()
- C.update_icon_state()
- user.put_in_hands(Copy)
- else
- to_chat(user, "There are no more carbon copies attached to this paper!")
-
-/obj/item/paper/carbon/attack_hand(mob/living/user)
- if(loc == user && user.is_holding(src))
- removecopy(user)
- return
- return ..()
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
deleted file mode 100644
index 9c7605407e..0000000000
--- a/code/modules/paperwork/clipboard.dm
+++ /dev/null
@@ -1,128 +0,0 @@
-/obj/item/clipboard
- name = "clipboard"
- icon = 'icons/obj/bureaucracy.dmi'
- icon_state = "clipboard"
- item_state = "clipboard"
- throwforce = 0
- w_class = WEIGHT_CLASS_SMALL
- throw_speed = 3
- throw_range = 7
- var/obj/item/pen/haspen //The stored pen.
- var/obj/item/paper/toppaper //The topmost piece of paper.
- slot_flags = ITEM_SLOT_BELT
- resistance_flags = FLAMMABLE
-
-/obj/item/clipboard/suicide_act(mob/living/carbon/user)
- user.visible_message("[user] begins putting [user.p_their()] head into the clip of \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
- return BRUTELOSS//the clipboard's clip is very strong. industrial duty. can kill a man easily.
-
-/obj/item/clipboard/Initialize()
- update_icon()
- . = ..()
-
-/obj/item/clipboard/Destroy()
- QDEL_NULL(haspen)
- QDEL_NULL(toppaper) //let movable/Destroy handle the rest
- return ..()
-
-/obj/item/clipboard/update_icon()
- cut_overlays()
- var/list/dat = list()
- if(toppaper)
- dat += toppaper.icon_state
- dat += toppaper.overlays.Copy()
- if(haspen)
- dat += "clipboard_pen"
- dat += "clipboard_over"
- add_overlay(dat)
-
-
-/obj/item/clipboard/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/paper))
- if(!user.transferItemToLoc(W, src))
- return
- toppaper = W
- to_chat(user, "I clip the paper onto \the [src].")
- update_icon()
- else if(toppaper)
- toppaper.attackby(user.get_active_held_item(), user)
- update_icon()
-
-
-/obj/item/clipboard/attack_self(mob/user)
- var/dat = "Clipboard"
- if(haspen)
- dat += "Remove Pen
"
- else
- dat += "Add Pen
"
-
- //The topmost paper. You can't organise contents directly in byond, so this is what we're stuck with. -Pete
- if(toppaper)
- var/obj/item/paper/P = toppaper
- dat += "Write Remove - [P.name]
"
-
- for(P in src)
- if(P == toppaper)
- continue
- dat += "Write Remove Move to top - [P.name]
"
- user << browse(dat, "window=clipboard")
- onclose(user, "clipboard")
- add_fingerprint(usr)
-
-
-/obj/item/clipboard/Topic(href, href_list)
- ..()
- if(usr.stat || usr.restrained())
- return
-
- if(usr.contents.Find(src))
-
- if(href_list["pen"])
- if(haspen)
- haspen.forceMove(usr.loc)
- usr.put_in_hands(haspen)
- haspen = null
-
- if(href_list["addpen"])
- if(!haspen)
- var/obj/item/held = usr.get_active_held_item()
- if(istype(held, /obj/item/pen))
- var/obj/item/pen/W = held
- if(!usr.transferItemToLoc(W, src))
- return
- haspen = W
- to_chat(usr, "I slot [W] into [src].")
-
- if(href_list["write"])
- var/obj/item/P = locate(href_list["write"]) in src
- if(istype(P))
- if(usr.get_active_held_item())
- P.attackby(usr.get_active_held_item(), usr)
-
- if(href_list["remove"])
- var/obj/item/P = locate(href_list["remove"]) in src
- if(istype(P))
- P.forceMove(usr.loc)
- usr.put_in_hands(P)
- if(P == toppaper)
- toppaper = null
- var/obj/item/paper/newtop = locate(/obj/item/paper) in src
- if(newtop && (newtop != P))
- toppaper = newtop
- else
- toppaper = null
-
- if(href_list["read"])
- var/obj/item/paper/P = locate(href_list["read"]) in src
- if(istype(P))
- usr.examinate(P)
-
- if(href_list["top"])
- var/obj/item/P = locate(href_list["top"]) in src
- if(istype(P))
- toppaper = P
- to_chat(usr, "I move [P.name] to the top.")
-
- //Update everything
- attack_self(usr)
- update_icon()
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
deleted file mode 100644
index 9308c8f348..0000000000
--- a/code/modules/paperwork/filingcabinet.dm
+++ /dev/null
@@ -1,223 +0,0 @@
-/* Filing cabinets!
- * Contains:
- * Filing Cabinets
- * Security Record Cabinets
- * Medical Record Cabinets
- * Employment Contract Cabinets
- */
-
-
-/*
- * Filing Cabinets
- */
-/obj/structure/filingcabinet
- name = "filing cabinet"
- desc = ""
- icon = 'icons/obj/bureaucracy.dmi'
- icon_state = "filingcabinet"
- density = TRUE
- anchored = TRUE
-
-/obj/structure/filingcabinet/chestdrawer
- name = "chest drawer"
- icon_state = "chestdrawer"
-
-/obj/structure/filingcabinet/chestdrawer/wheeled
- name = "rolling chest drawer"
- desc = ""
- anchored = FALSE
-
-/obj/structure/filingcabinet/filingcabinet //not changing the path to avoid unnecessary map issues, but please don't name stuff like this in the future -Pete
- icon_state = "tallcabinet"
-
-
-/obj/structure/filingcabinet/Initialize(mapload)
- . = ..()
- if(mapload)
- for(var/obj/item/I in loc)
- if(istype(I, /obj/item/paper) || istype(I, /obj/item/folder) || istype(I, /obj/item/photo))
- I.forceMove(src)
-
-/obj/structure/filingcabinet/deconstruct(disassembled = TRUE)
- if(!(flags_1 & NODECONSTRUCT_1))
- new /obj/item/stack/sheet/metal(loc, 2)
- for(var/obj/item/I in src)
- I.forceMove(loc)
- qdel(src)
-
-/obj/structure/filingcabinet/attackby(obj/item/P, mob/user, params)
- if(istype(P, /obj/item/paper) || istype(P, /obj/item/folder) || istype(P, /obj/item/photo) || istype(P, /obj/item/documents))
- if(!user.transferItemToLoc(P, src))
- return
- to_chat(user, "I put [P] in [src].")
- icon_state = "[initial(icon_state)]-open"
- sleep(5)
- icon_state = initial(icon_state)
- updateUsrDialog()
- else if(P.tool_behaviour == TOOL_WRENCH)
- to_chat(user, "I begin to [anchored ? "unwrench" : "wrench"] [src].")
- if(P.use_tool(src, user, 20, volume=50))
- to_chat(user, "I successfully [anchored ? "unwrench" : "wrench"] [src].")
- anchored = !anchored
- else if(user.used_intent.type != INTENT_HARM)
- to_chat(user, "I can't put [P] in [src]!")
- else
- return ..()
-
-
-/obj/structure/filingcabinet/ui_interact(mob/user)
- . = ..()
- if(contents.len <= 0)
- to_chat(user, "[src] is empty.")
- return
-
- var/dat = ""
- var/i
- for(i=contents.len, i>=1, i--)
- var/obj/item/P = contents[i]
- dat += "[P.name] |
"
- dat += "
"
- user << browse("[name][dat]", "window=filingcabinet;size=350x300")
-
-/obj/structure/filingcabinet/attack_tk(mob/user)
- if(anchored)
- attack_self_tk(user)
- else
- ..()
-
-/obj/structure/filingcabinet/attack_self_tk(mob/user)
- if(contents.len)
- if(prob(40 + contents.len * 5))
- var/obj/item/I = pick(contents)
- I.forceMove(loc)
- if(prob(25))
- step_rand(I)
- to_chat(user, "I pull \a [I] out of [src] at random.")
- return
- to_chat(user, "I find nothing in [src].")
-
-/obj/structure/filingcabinet/Topic(href, href_list)
- if(!usr.canUseTopic(src, BE_CLOSE, ismonkey(usr)))
- return
- if(href_list["retrieve"])
- usr << browse("", "window=filingcabinet") // Close the menu
-
- var/obj/item/P = locate(href_list["retrieve"]) in src //contents[retrieveindex]
- if(istype(P) && in_range(src, usr))
- usr.put_in_hands(P)
- updateUsrDialog()
- icon_state = "[initial(icon_state)]-open"
- addtimer(VARSET_CALLBACK(src, icon_state, initial(icon_state)), 5)
-
-
-/*
- * Security Record Cabinets
- */
-/obj/structure/filingcabinet/security
- var/virgin = 1
-
-/obj/structure/filingcabinet/security/proc/populate()
- if(virgin)
- for(var/datum/data/record/G in GLOB.data_core.general)
- var/datum/data/record/S = find_record("name", G.fields["name"], GLOB.data_core.security)
- if(!S)
- continue
- var/obj/item/paper/P = new /obj/item/paper(src)
- P.info = "Security Record
"
- P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nGender: [G.fields["gender"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
"
- P.info += "
\nSecurity Data
\nCriminal Status: [S.fields["criminal"]]
\n
\nMinor Crimes: [S.fields["mi_crim"]]
\nDetails: [S.fields["mi_crim_d"]]
\n
\nMajor Crimes: [S.fields["ma_crim"]]
\nDetails: [S.fields["ma_crim_d"]]
\n
\nImportant Notes:
\n\t[S.fields["notes"]]
\n
\nComments/Log
"
- var/counter = 1
- while(S.fields["com_[counter]"])
- P.info += "[S.fields["com_[counter]"]]
"
- counter++
- P.info += ""
- P.name = "paper - '[G.fields["name"]]'"
- virgin = 0 //tabbing here is correct- it's possible for people to try and use it
- //before the records have been generated, so we do this inside the loop.
-
-/obj/structure/filingcabinet/security/attack_hand()
- populate()
- . = ..()
-
-/obj/structure/filingcabinet/security/attack_tk()
- populate()
- ..()
-
-/*
- * Medical Record Cabinets
- */
-/obj/structure/filingcabinet/medical
- var/virgin = 1
-
-/obj/structure/filingcabinet/medical/proc/populate()
- if(virgin)
- for(var/datum/data/record/G in GLOB.data_core.general)
- var/datum/data/record/M = find_record("name", G.fields["name"], GLOB.data_core.medical)
- if(!M)
- continue
- var/obj/item/paper/P = new /obj/item/paper(src)
- P.info = "Medical Record
"
- P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]
\nGender: [G.fields["gender"]]
\nAge: [G.fields["age"]]
\nFingerprint: [G.fields["fingerprint"]]
\nPhysical Status: [G.fields["p_stat"]]
\nMental Status: [G.fields["m_stat"]]
"
- P.info += "
\nMedical Data
\nBlood Type: [M.fields["blood_type"]]
\nDNA: [M.fields["b_dna"]]
\n
\nMinor Disabilities: [M.fields["mi_dis"]]
\nDetails: [M.fields["mi_dis_d"]]
\n
\nMajor Disabilities: [M.fields["ma_dis"]]
\nDetails: [M.fields["ma_dis_d"]]
\n
\nAllergies: [M.fields["alg"]]
\nDetails: [M.fields["alg_d"]]
\n
\nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section)
\nDetails: [M.fields["cdi_d"]]
\n
\nImportant Notes:
\n\t[M.fields["notes"]]
\n
\nComments/Log
"
- var/counter = 1
- while(M.fields["com_[counter]"])
- P.info += "[M.fields["com_[counter]"]]
"
- counter++
- P.info += ""
- P.name = "paper - '[G.fields["name"]]'"
- virgin = 0 //tabbing here is correct- it's possible for people to try and use it
- //before the records have been generated, so we do this inside the loop.
-
-//ATTACK HAND IGNORING PARENT RETURN VALUE
-/obj/structure/filingcabinet/medical/attack_hand()
- populate()
- . = ..()
-
-/obj/structure/filingcabinet/medical/attack_tk()
- populate()
- ..()
-
-/*
- * Employment contract Cabinets
- */
-
-GLOBAL_LIST_EMPTY(employmentCabinets)
-
-/obj/structure/filingcabinet/employment
- var/cooldown = 0
- icon_state = "employmentcabinet"
- var/virgin = 1
-
-/obj/structure/filingcabinet/employment/Initialize()
- . = ..()
- GLOB.employmentCabinets += src
-
-/obj/structure/filingcabinet/employment/Destroy()
- GLOB.employmentCabinets -= src
- return ..()
-
-/obj/structure/filingcabinet/employment/proc/fillCurrent()
- //This proc fills the cabinet with the current crew.
- for(var/record in GLOB.data_core.locked)
- var/datum/data/record/G = record
- if(!G)
- continue
- var/datum/mind/M = G.fields["mindref"]
- if(M && ishuman(M.current))
- addFile(M.current)
-
-
-/obj/structure/filingcabinet/employment/proc/addFile(mob/living/carbon/human/employee)
- new /obj/item/paper/contract/employment(src, employee)
-
-/obj/structure/filingcabinet/employment/interact(mob/user)
- if(!cooldown)
- if(virgin)
- fillCurrent()
- virgin = 0
- cooldown = TRUE
- // prevents the devil from just instantly emptying the cabinet, ensuring an easy win.
- addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 10 SECONDS)
- else
- to_chat(user, "[src] is jammed, give it a few seconds.")
- ..()
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
deleted file mode 100644
index 4917eb8ab7..0000000000
--- a/code/modules/paperwork/folders.dm
+++ /dev/null
@@ -1,124 +0,0 @@
-/obj/item/folder
- name = "folder"
- desc = ""
- icon = 'icons/obj/bureaucracy.dmi'
- icon_state = "folder"
- w_class = WEIGHT_CLASS_SMALL
- pressure_resistance = 2
- resistance_flags = FLAMMABLE
-
-/obj/item/folder/suicide_act(mob/living/user)
- user.visible_message("[user] begins filing an imaginary death warrant! It looks like [user.p_theyre()] trying to commit suicide!")
- return OXYLOSS
-
-/obj/item/folder/blue
- desc = ""
- icon_state = "folder_blue"
-
-/obj/item/folder/red
- desc = ""
- icon_state = "folder_red"
-
-/obj/item/folder/yellow
- desc = ""
- icon_state = "folder_yellow"
-
-/obj/item/folder/white
- desc = ""
- icon_state = "folder_white"
-
-
-/obj/item/folder/update_icon()
- cut_overlays()
- if(contents.len)
- add_overlay("folder_paper")
-
-
-/obj/item/folder/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/paper) || istype(W, /obj/item/photo) || istype(W, /obj/item/documents))
- if(!user.transferItemToLoc(W, src))
- return
- to_chat(user, "I put [W] into [src].")
- update_icon()
- else if(istype(W, /obj/item/pen))
- if(!user.is_literate())
- to_chat(user, "I scribble illegibly on the cover of [src]!")
- return
-
- var/inputvalue = input(user, "What would you like to label the folder?", "Folder Labelling", null) as text|null
-
- if (isnull(inputvalue))
- return
-
- var/n_name = copytext(sanitize(inputvalue), 1, MAX_NAME_LEN)
-
- if(user.canUseTopic(src, BE_CLOSE))
- name = "folder[(n_name ? " - '[n_name]'" : null)]"
-
-
-/obj/item/folder/attack_self(mob/user)
- var/dat = "[name]"
-
- for(var/obj/item/I in src)
- dat += "Remove - [I.name]
"
- user << browse(dat, "window=folder")
- onclose(user, "folder")
- add_fingerprint(usr)
-
-
-/obj/item/folder/Topic(href, href_list)
- ..()
- if(usr.stat || usr.restrained())
- return
-
- if(usr.contents.Find(src))
-
- if(href_list["remove"])
- var/obj/item/I = locate(href_list["remove"]) in src
- if(istype(I))
- I.forceMove(usr.loc)
- usr.put_in_hands(I)
-
- if(href_list["read"])
- var/obj/item/I = locate(href_list["read"]) in src
- if(istype(I))
- usr.examinate(I)
-
- //Update everything
- attack_self(usr)
- update_icon()
-
-/obj/item/folder/documents
- name = "folder- 'TOP SECRET'"
- desc = ""
-
-/obj/item/folder/documents/Initialize()
- . = ..()
- new /obj/item/documents/nanotrasen(src)
- update_icon()
-
-/obj/item/folder/syndicate
- icon_state = "folder_syndie"
- name = "folder- 'TOP SECRET'"
- desc = ""
-
-/obj/item/folder/syndicate/red
- icon_state = "folder_sred"
-
-/obj/item/folder/syndicate/red/Initialize()
- . = ..()
- new /obj/item/documents/syndicate/red(src)
- update_icon()
-
-/obj/item/folder/syndicate/blue
- icon_state = "folder_sblue"
-
-/obj/item/folder/syndicate/blue/Initialize()
- . = ..()
- new /obj/item/documents/syndicate/blue(src)
- update_icon()
-
-/obj/item/folder/syndicate/mining/Initialize()
- . = ..()
- new /obj/item/documents/syndicate/mining(src)
- update_icon()
diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm
deleted file mode 100644
index 296d23b612..0000000000
--- a/code/modules/paperwork/handlabeler.dm
+++ /dev/null
@@ -1,84 +0,0 @@
-/obj/item/hand_labeler
- name = "hand labeler"
- desc = ""
- icon = 'icons/obj/bureaucracy.dmi'
- icon_state = "labeler0"
- item_state = "flight"
- var/label = null
- var/labels_left = 30
- var/mode = 0
-
-/obj/item/hand_labeler/suicide_act(mob/user)
- user.visible_message("[user] is pointing [src] at [user.p_them()]self. [user.p_theyre(TRUE)] going to label [user.p_them()]self as a suicide!")
- labels_left = max(labels_left - 1, 0)
- user.real_name += " (suicide)"
-
- // NOT EVEN DEATH WILL TAKE AWAY THE STAIN
- user.mind.name += " (suicide)"
-
- mode = 1
- icon_state = "labeler[mode]"
- label = "suicide"
-
- return OXYLOSS
-
-/obj/item/hand_labeler/afterattack(atom/A, mob/user,proximity)
- . = ..()
- if(!proximity)
- return
- if(!mode) //if it's off, give up.
- return
-
- if(!labels_left)
- to_chat(user, "No labels left!")
- return
- if(!label || !length(label))
- to_chat(user, "No text set!")
- return
- if(length(A.name) + length(label) > 64)
- to_chat(user, "Label too big!")
- return
- if(ismob(A))
- to_chat(user, "I can't label creatures!") // use a collar
- return
-
- user.visible_message("[user] labels [A] as [label].", \
- "I label [A] as [label].")
- A.name = "[A.name] ([label])"
- labels_left--
-
-
-/obj/item/hand_labeler/attack_self(mob/user)
- if(!user.IsAdvancedToolUser())
- to_chat(user, "I don't have the dexterity to use [src]!")
- return
- mode = !mode
- icon_state = "labeler[mode]"
- if(mode)
- to_chat(user, "I turn on [src].")
- //Now let them chose the text.
- var/str = copytext(reject_bad_text(input(user,"Label text?","Set label","")),1,MAX_NAME_LEN)
- if(!str || !length(str))
- to_chat(user, "Invalid text!")
- return
- label = str
- to_chat(user, "I set the text to '[str]'.")
- else
- to_chat(user, "I turn off [src].")
-
-/obj/item/hand_labeler/attackby(obj/item/I, mob/user, params)
- ..()
- if(istype(I, /obj/item/hand_labeler_refill))
- to_chat(user, "I insert [I] into [src].")
- qdel(I)
- labels_left = initial(labels_left) //Yes, it's capped at its initial value
-
-/obj/item/hand_labeler_refill
- name = "hand labeler paper roll"
- icon = 'icons/obj/bureaucracy.dmi'
- desc = ""
- icon_state = "labeler_refill"
- item_state = "electropack"
- lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
- w_class = WEIGHT_CLASS_TINY
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index e73e6f8a4c..90f6855b32 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -280,18 +280,10 @@
t = parsemarkdown(t, user, iscrayon)
- if(!iscrayon)
- if(istype(P, /obj/item/pen))
- var/obj/item/pen/J = P
- t = "[t]"
- else if(istype(P, /obj/item/natural/thorn))
- t = "[t]"
- else if(istype(P, /obj/item/natural/feather))
- t = "[t]"
-
- else
- var/obj/item/toy/crayon/C = P
- t = "[t]"
+ if(istype(P, /obj/item/natural/thorn))
+ t = "[t]"
+ else if(istype(P, /obj/item/natural/feather))
+ t = "[t]"
// Count the fields
var/laststart = 1
@@ -365,20 +357,15 @@
if(!t || !usr.canUseTopic(src, BE_CLOSE, literate))
return
var/obj/item/i = usr.get_active_held_item() //Check to see if he still got that darn pen, also check if he's using a crayon or pen.
- var/iscrayon = 0
- if(!istype(i, /obj/item/pen))
- if(istype(i, /obj/item/toy/crayon))
- iscrayon = 1
- else
- if(!istype(i, /obj/item/natural/thorn))
- if(!istype(i, /obj/item/natural/feather))
- return
+ if(!istype(i, /obj/item/natural/thorn))
+ if(!istype(i, /obj/item/natural/feather))
+ return
- if(!in_range(src, usr) && loc != usr && !istype(loc, /obj/item/clipboard) && loc.loc != usr && usr.get_active_held_item() != i) //Some check to see if he's allowed to write
+ if(!in_range(src, usr) && loc != usr && loc.loc != usr && usr.get_active_held_item() != i) //Some check to see if he's allowed to write
return
log_paper("[key_name(usr)] writing to paper [t]")
- t = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html
+ t = parsepencode(t, i, usr, FALSE) // Encode everything from pencode to html
if(t != null) //No input from the user means nothing needs to be added
if((length(info) + length(t)) > maxlen)
@@ -415,7 +402,7 @@
if(is_blind(user))
return ..()
- if(istype(P, /obj/item/pen) || istype(P, /obj/item/natural/thorn)|| istype(P, /obj/item/natural/feather))
+ if(istype(P, /obj/item/natural/thorn)|| istype(P, /obj/item/natural/feather))
if(length(info) > maxlen)
to_chat(user, "[src] is full of verba.")
return
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
deleted file mode 100644
index 0124f98b41..0000000000
--- a/code/modules/paperwork/paperbin.dm
+++ /dev/null
@@ -1,180 +0,0 @@
-/obj/item/paper_bin
- name = "paper bin"
- desc = ""
- icon = 'icons/obj/bureaucracy.dmi'
- icon_state = "paper_bin1"
- item_state = "sheet-metal"
- lefthand_file = 'icons/mob/inhands/misc/sheets_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/sheets_righthand.dmi'
- throwforce = 0
- w_class = WEIGHT_CLASS_NORMAL
- throw_speed = 3
- throw_range = 7
- pressure_resistance = 8
- var/papertype = /obj/item/paper
- var/total_paper = 30
- var/list/papers = list()
- var/obj/item/pen/bin_pen
-
-/obj/item/paper_bin/Initialize(mapload)
- . = ..()
- interaction_flags_item &= ~INTERACT_ITEM_ATTACK_HAND_PICKUP
- if(!mapload)
- return
- var/obj/item/pen/P = locate(/obj/item/pen) in src.loc
- if(P && !bin_pen)
- P.forceMove(src)
- bin_pen = P
- update_icon()
-
-/obj/item/paper_bin/Destroy()
- if(papers)
- for(var/i in papers)
- qdel(i)
- papers = null
- . = ..()
-
-/obj/item/paper_bin/fire_act(added, maxstacks)
- if(total_paper)
- total_paper = 0
- update_icon()
- ..()
-
-/obj/item/paper_bin/MouseDrop(atom/over_object)
- . = ..()
- var/mob/living/M = usr
- if(!istype(M) || M.incapacitated() || !Adjacent(M))
- return
-
- if(over_object == M)
- M.put_in_hands(src)
-
- else if(istype(over_object, /atom/movable/screen/inventory/hand))
- var/atom/movable/screen/inventory/hand/H = over_object
- M.putItemFromInventoryInHandIfPossible(src, H.held_index)
-
- add_fingerprint(M)
-
-/obj/item/paper_bin/attack_paw(mob/user)
- return attack_hand(user)
-
-//ATTACK HAND IGNORING PARENT RETURN VALUE
-/obj/item/paper_bin/attack_hand(mob/user)
- if(isliving(user))
- var/mob/living/L = user
- if(!(L.mobility_flags & MOBILITY_PICKUP))
- return
- user.changeNext_move(CLICK_CD_MELEE)
- if(bin_pen)
- var/obj/item/pen/P = bin_pen
- P.add_fingerprint(user)
- P.forceMove(user.loc)
- user.put_in_hands(P)
- to_chat(user, "I take [P] out of \the [src].")
- bin_pen = null
- update_icon()
- else if(total_paper >= 1)
- total_paper--
- update_icon()
- // If there's any custom paper on the stack, use that instead of creating a new paper.
- var/obj/item/paper/P
- if(papers.len > 0)
- P = papers[papers.len]
- papers.Remove(P)
- else
- P = new papertype(src)
- if(SSevents.holidays && SSevents.holidays[APRIL_FOOLS])
- if(prob(30))
- P.info = "HONK HONK HONK HONK HONK HONK HONK
HOOOOOOOOOOOOOOOOOOOOOONK
APRIL FOOLS"
- P.rigged = 1
- P.updateinfolinks()
-
- P.add_fingerprint(user)
- P.forceMove(user.loc)
- user.put_in_hands(P)
- to_chat(user, "I take [P] out of \the [src].")
- else
- to_chat(user, "[src] is empty!")
- add_fingerprint(user)
- return ..()
-
-/obj/item/paper_bin/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/paper))
- var/obj/item/paper/P = I
- if(!user.transferItemToLoc(P, src))
- return
- to_chat(user, "I put [P] in [src].")
- papers.Add(P)
- total_paper++
- update_icon()
- else if(istype(I, /obj/item/pen) && !bin_pen)
- var/obj/item/pen/P = I
- if(!user.transferItemToLoc(P, src))
- return
- to_chat(user, "I put [P] in [src].")
- bin_pen = P
- update_icon()
- else
- return ..()
-
-/obj/item/paper_bin/examine(mob/user)
- . = ..()
- if(total_paper)
- . += "It contains [total_paper > 1 ? "[total_paper] papers" : " one paper"]."
- else
- . += "It doesn't contain anything."
-
-
-/obj/item/paper_bin/update_icon()
- if(total_paper < 1)
- icon_state = "paper_bin0"
- else
- icon_state = "[initial(icon_state)]"
- cut_overlays()
- if(bin_pen)
- add_overlay(mutable_appearance(bin_pen.icon, bin_pen.icon_state))
-
-/obj/item/paper_bin/construction
- name = "construction paper bin"
- desc = ""
- icon_state = "paper_binc"
- papertype = /obj/item/paper/construction
-
-/obj/item/paper_bin/bundlenatural
- name = "natural paper bundle"
- desc = ""
- icon_state = "paper_bundle"
- papertype = /obj/item/paper/natural
- resistance_flags = FLAMMABLE
-
-/obj/item/paper_bin/bundlenatural/attack_hand(mob/user)
- ..()
- if(total_paper < 1)
- qdel(src)
-
-/obj/item/paper_bin/bundlenatural/fire_act(added, maxstacks)
- qdel(src)
-
-/obj/item/paper_bin/bundlenatural/attackby(obj/item/W, mob/user)
- if(W.get_sharpness())
- to_chat(user, "I snip \the [src], spilling paper everywhere.")
- var/turf/T = get_turf(src.loc)
- while(total_paper > 0)
- total_paper--
- var/obj/item/paper/P
- if(papers.len > 0)
- P = papers[papers.len]
- papers -= P
- else
- P = new papertype()
- P.forceMove(T)
- CHECK_TICK
- qdel(src)
- else
- ..()
-
-/obj/item/paper_bin/carbon
- name = "carbon paper bin"
- desc = ""
- icon_state = "paper_bin_carbon"
- papertype = /obj/item/paper/carbon
diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm
deleted file mode 100644
index 6ea3aa689f..0000000000
--- a/code/modules/paperwork/paperplane.dm
+++ /dev/null
@@ -1,150 +0,0 @@
-/obj/item/paperplane
- name = "paper plane"
- desc = ""
- icon = 'icons/obj/bureaucracy.dmi'
- icon_state = "paperplane"
- throw_range = 7
- throw_speed = 1
- throwforce = 0
- w_class = WEIGHT_CLASS_TINY
- resistance_flags = FLAMMABLE
- max_integrity = 50
-
- var/hit_probability = 2 //%
- var/obj/item/paper/internalPaper
-
-/obj/item/paperplane/syndicate
- desc = ""
- throwforce = 20 //same as throwing stars, but no chance of embedding.
- hit_probability = 100 //guaranteed to cause eye damage when it hits a mob.
-
-/obj/item/paperplane/Initialize(mapload, obj/item/paper/newPaper)
- . = ..()
- pixel_y = rand(-8, 8)
- pixel_x = rand(-9, 9)
- if(newPaper)
- internalPaper = newPaper
- flags_1 = newPaper.flags_1
- color = newPaper.color
- newPaper.forceMove(src)
- else
- internalPaper = new(src)
- update_icon()
-
-/obj/item/paperplane/handle_atom_del(atom/A)
- if(A == internalPaper)
- internalPaper = null
- if(!QDELETED(src))
- qdel(src)
- return ..()
-
-/obj/item/paperplane/Exited(atom/movable/AM, atom/newLoc)
- . = ..()
- if (AM == internalPaper)
- internalPaper = null
- if(!QDELETED(src))
- qdel(src)
-
-/obj/item/paperplane/Destroy()
- internalPaper = null
- return ..()
-
-/obj/item/paperplane/suicide_act(mob/living/user)
- var/obj/item/organ/eyes/eyes = user.getorganslot(ORGAN_SLOT_EYES)
- user.Stun(200)
- user.visible_message("[user] jams [src] in [user.p_their()] nose. It looks like [user.p_theyre()] trying to commit suicide!")
- user.adjust_blurriness(6)
- if(eyes)
- eyes.applyOrganDamage(rand(6,8))
- sleep(10)
- return (BRUTELOSS)
-
-/obj/item/paperplane/update_icon()
- cut_overlays()
- var/list/stamped = internalPaper.stamped
- if(stamped)
- for(var/S in stamped)
- add_overlay("paperplane_[S]")
-
-/obj/item/paperplane/attack_self(mob/user)
- to_chat(user, "I unfold [src].")
- var/obj/item/paper/internal_paper_tmp = internalPaper
- internal_paper_tmp.forceMove(loc)
- internalPaper = null
- qdel(src)
- user.put_in_hands(internal_paper_tmp)
-
-/obj/item/paperplane/attackby(obj/item/P, mob/living/carbon/human/user, params)
- ..()
- if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon))
- to_chat(user, "I should unfold [src] before changing it!")
- return
-
- else if(istype(P, /obj/item/stamp)) //we don't randomize stamps on a paperplane
- internalPaper.attackby(P, user) //spoofed attack to update internal paper.
- update_icon()
-
- else if(P.get_temperature())
- if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(10))
- user.visible_message("[user] accidentally ignites [user.p_them()]self!", \
- "I miss [src] and accidentally light myself on fire!")
- user.dropItemToGround(P)
- user.adjust_fire_stacks(1)
- user.IgniteMob()
- return
-
- if(!(in_range(user, src))) //to prevent issues as a result of telepathically lighting a paper
- return
- user.dropItemToGround(src)
- user.visible_message("[user] lights [src] ablaze with [P]!", "I light [src] on fire!")
- fire_act()
-
- add_fingerprint(user)
-
-
-/obj/item/paperplane/throw_at(atom/target, range, speed, mob/thrower, spin=FALSE, diagonals_first = FALSE, datum/callback/callback)
- . = ..(target, range, speed, thrower, FALSE, diagonals_first, callback)
-
-/obj/item/paperplane/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
- if(iscarbon(hit_atom))
- var/mob/living/carbon/C = hit_atom
- if(C.can_catch_item(TRUE))
- var/datum/action/innate/origami/origami_action = locate() in C.actions
- if(origami_action?.active) //if they're a master of origami and have the ability turned on, force throwmode on so they'll automatically catch the plane.
- C.throw_mode_on()
-
- if(..() || !ishuman(hit_atom))//if the plane is caught or it hits a nonhuman
- return
- var/mob/living/carbon/human/H = hit_atom
- var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES)
- if(prob(hit_probability))
- if(H.is_eyes_covered())
- return
- visible_message("\The [src] hits [H] in the eye[eyes ? "" : " socket"]!")
- H.adjust_blurriness(6)
- eyes?.applyOrganDamage(rand(6,8))
- H.Paralyze(40)
- H.emote("scream")
-/*
-/obj/item/paper/examine(mob/user)
- . = ..()
-// . += "Alt-click [src] to fold it into a paper plane."
-
-/obj/item/paper/AltClick(mob/living/carbon/user, obj/item/I)
- if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
- return
- if(istype(src, /obj/item/paper/carbon))
- var/obj/item/paper/carbon/Carbon = src
- if(!Carbon.iscopy && !Carbon.copied)
- to_chat(user, "Take off the carbon copy first.")
- return
- to_chat(user, "I fold [src] into the shape of a plane!")
- user.temporarilyRemoveItemFromInventory(src)
- var/obj/item/paperplane/plane_type = /obj/item/paperplane
- //Origami Master
- var/datum/action/innate/origami/origami_action = locate() in user.actions
- if(origami_action?.active)
- plane_type = /obj/item/paperplane/syndicate
-
- I = new plane_type(user, src)
- user.put_in_hands(I)*/
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
deleted file mode 100644
index f2b92a6df4..0000000000
--- a/code/modules/paperwork/pen.dm
+++ /dev/null
@@ -1,231 +0,0 @@
-/* Pens!
- * Contains:
- * Pens
- * Sleepy Pens
- * Parapens
- * Edaggers
- */
-
-
-/*
- * Pens
- */
-/obj/item/pen
- desc = ""
- name = "pen"
- icon = 'icons/obj/bureaucracy.dmi'
- icon_state = "pen"
- item_state = "pen"
- slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_HEAD
- throwforce = 0
- w_class = WEIGHT_CLASS_TINY
- throw_speed = 3
- throw_range = 7
- custom_materials = list(/datum/material/iron=10)
- pressure_resistance = 2
- grind_results = list(/datum/reagent/iron = 2, /datum/reagent/iodine = 1)
- var/colour = "black" //what colour the ink is!
- var/degrees = 0
- var/font = PEN_FONT
-
-/obj/item/pen/suicide_act(mob/user)
- user.visible_message("[user] is scribbling numbers all over [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit sudoku...")
- return(BRUTELOSS)
-
-/obj/item/pen/blue
- desc = ""
- icon_state = "pen_blue"
- colour = "blue"
-
-/obj/item/pen/red
- desc = ""
- icon_state = "pen_red"
- colour = "red"
-
-/obj/item/pen/invisible
- desc = ""
- icon_state = "pen"
- colour = "white"
-
-/obj/item/pen/fourcolor
- desc = ""
- name = "four-color pen"
- colour = "black"
-
-/obj/item/pen/fourcolor/attack_self(mob/living/carbon/user)
- switch(colour)
- if("black")
- colour = "red"
- if("red")
- colour = "green"
- if("green")
- colour = "blue"
- else
- colour = "black"
- to_chat(user, "\The [src] will now write in [colour].")
- desc = ""
-
-/obj/item/pen/fountain
- name = "fountain pen"
- desc = ""
- icon_state = "pen-fountain"
- font = FOUNTAIN_PEN_FONT
-
-/obj/item/pen/fountain/captain
- name = "captain's fountain pen"
- desc = ""
- icon_state = "pen-fountain-o"
- force = 5
- throwforce = 5
- throw_speed = 4
- colour = "crimson"
- custom_materials = list(/datum/material/gold = 750)
- sharpness = IS_SHARP
- resistance_flags = FIRE_PROOF
- unique_reskin = list("Oak" = "pen-fountain-o",
- "Gold" = "pen-fountain-g",
- "Rosewood" = "pen-fountain-r",
- "Black and Silver" = "pen-fountain-b",
- "Command Blue" = "pen-fountain-cb"
- )
-
-/obj/item/pen/fountain/captain/Initialize()
- . = ..()
- AddComponent(/datum/component/butchering, 200, 115) //the pen is mightier than the sword
-
-/obj/item/pen/fountain/captain/reskin_obj(mob/M)
- ..()
- if(current_skin)
- desc = ""
-
-/obj/item/pen/attack_self(mob/living/carbon/user)
-// var/deg = input(user, "What angle would you like to rotate the pen head to? (1-360)", "Rotate Pen Head") as null|num
-// if(deg && (deg > 0 && deg <= 360))
-// degrees = deg
-// to_chat(user, "I rotate the top of the pen to [degrees] degrees.")
-// SEND_SIGNAL(src, COMSIG_PEN_ROTATED, deg, user)
- return
-
-/obj/item/pen/attack(mob/living/M, mob/user,stealth)
- if(!istype(M))
- return
-
- if(!force)
- if(M.can_inject(user, 1))
- to_chat(user, "I stab [M] with the pen.")
- if(!stealth)
- to_chat(M, "I feel a tiny prick!")
- . = 1
-
- log_combat(user, M, "stabbed", src)
-
- else
- . = ..()
-
-/obj/item/pen/afterattack(obj/O, mob/living/user, proximity)
- . = ..()
- //Changing Name/Description of items. Only works if they have the 'unique_rename' flag set
- if(isobj(O) && proximity && (O.obj_flags & UNIQUE_RENAME))
- var/penchoice = input(user, "What would you like to edit?", "Rename or change description?") as null|anything in list("Rename","Change description")
- if(QDELETED(O) || !user.canUseTopic(O, BE_CLOSE))
- return
- if(penchoice == "Rename")
- var/input = stripped_input(user,"What do you want to name \the [O.name]?", ,"", MAX_NAME_LEN)
- var/oldname = O.name
- if(QDELETED(O) || !user.canUseTopic(O, BE_CLOSE))
- return
- if(oldname == input)
- to_chat(user, "I changed \the [O.name] to... well... \the [O.name].")
- else
- O.name = input
- to_chat(user, "\The [oldname] has been successfully been renamed to \the [input].")
- O.renamedByPlayer = TRUE
-
- if(penchoice == "Change description")
- var/input = stripped_input(user,"Describe \the [O.name] here", ,"", 100)
- if(QDELETED(O) || !user.canUseTopic(O, BE_CLOSE))
- return
- O.desc = input
- to_chat(user, "I have successfully changed \the [O.name]'s description.")
-
-/*
- * Sleepypens
- */
-
-/obj/item/pen/sleepy/attack(mob/living/M, mob/user)
- if(!istype(M))
- return
-
- if(..())
- if(reagents.total_volume)
- if(M.reagents)
- reagents.reaction(M, INJECT, reagents.total_volume)
- reagents.trans_to(M, reagents.total_volume, transfered_by = user)
-
-
-/obj/item/pen/sleepy/Initialize()
- . = ..()
- create_reagents(45, OPENCONTAINER)
- reagents.add_reagent(/datum/reagent/toxin/chloralhydrate, 20)
- reagents.add_reagent(/datum/reagent/toxin/mutetoxin, 15)
- reagents.add_reagent(/datum/reagent/toxin/staminatoxin, 10)
-
-/*
- * (Alan) Edaggers
- */
-/obj/item/pen/edagger
- attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") //these wont show up if the pen is off
- sharpness = IS_SHARP
- var/on = FALSE
-
-/obj/item/pen/edagger/Initialize()
- . = ..()
- AddComponent(/datum/component/butchering, 60, 100, 0, 'sound/blank.ogg')
-
-/obj/item/pen/edagger/get_sharpness()
- return on * sharpness
-
-/obj/item/pen/edagger/suicide_act(mob/user)
- . = BRUTELOSS
- if(on)
- user.visible_message("[user] forcefully rams the pen into their mouth!")
- else
- user.visible_message("[user] is holding a pen up to their mouth! It looks like [user.p_theyre()] trying to commit suicide!")
- attack_self(user)
-
-/obj/item/pen/edagger/attack_self(mob/living/user)
- if(on)
- on = FALSE
- force = initial(force)
- throw_speed = initial(throw_speed)
- w_class = initial(w_class)
- name = initial(name)
- hitsound = initial(hitsound)
- embedding = embedding.setRating(embed_chance = EMBED_CHANCE)
- throwforce = initial(throwforce)
- playsound(user, 'sound/blank.ogg', 5, TRUE)
- to_chat(user, "[src] can now be concealed.")
- else
- on = TRUE
- force = 18
- throw_speed = 4
- w_class = WEIGHT_CLASS_NORMAL
- name = "energy dagger"
- hitsound = 'sound/blank.ogg'
- embedding = embedding.setRating(embed_chance = 100) //rule of cool
- throwforce = 35
- playsound(user, 'sound/blank.ogg', 5, TRUE)
- to_chat(user, "[src] is now active.")
- update_icon()
-
-/obj/item/pen/edagger/update_icon()
- if(on)
- icon_state = "edagger"
- item_state = "edagger"
- lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
- else
- icon_state = initial(icon_state) //looks like a normal pen when off.
- item_state = initial(item_state)
- lefthand_file = initial(lefthand_file)
- righthand_file = initial(righthand_file)
diff --git a/code/modules/paperwork/rogue.dm b/code/modules/paperwork/rogue.dm
index 4349edfb89..f8812c259f 100644
--- a/code/modules/paperwork/rogue.dm
+++ b/code/modules/paperwork/rogue.dm
@@ -12,7 +12,7 @@
/obj/item/paper/scroll/attackby(obj/item/P, mob/living/carbon/human/user, params)
- if(istype(P, /obj/item/pen) || istype(P, /obj/item/natural/thorn) || istype(P, /obj/item/natural/feather))
+ if(istype(P, /obj/item/natural/thorn) || istype(P, /obj/item/natural/feather))
if(!open)
to_chat(user, "Open me.")
return
@@ -201,7 +201,7 @@
to_chat(user, "The paper resists my attempts to write upon it!")
return
-/obj/item/paper/confession/update_icon_state()
+/obj/item/paper/confession/update_icon_state()
if(mailer)
icon_state = "paper_prep"
name = "letter"
@@ -271,7 +271,7 @@
var/signed = 0
/obj/item/merctoken/attackby(obj/item/P, mob/living/carbon/human/user, params)
- if(istype(P, /obj/item/pen) || istype(P, /obj/item/natural/thorn) || istype(P, /obj/item/natural/feather))
+ if(istype(P, /obj/item/natural/thorn) || istype(P, /obj/item/natural/feather))
if(!user.can_read(src))
to_chat(user, "Even a reader would find these verba incomprehensible.")
return
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
deleted file mode 100644
index 1526e89c67..0000000000
--- a/code/modules/paperwork/stamps.dm
+++ /dev/null
@@ -1,70 +0,0 @@
-/obj/item/stamp
- name = "\improper GRANTED rubber stamp"
- desc = ""
- icon = 'icons/obj/bureaucracy.dmi'
- icon_state = "stamp-ok"
- item_state = "stamp"
- throwforce = 0
- w_class = WEIGHT_CLASS_TINY
- throw_speed = 3
- throw_range = 7
- custom_materials = list(/datum/material/iron=60)
- pressure_resistance = 2
- attack_verb = list("stamped")
-
-/obj/item/stamp/suicide_act(mob/user)
- user.visible_message("[user] stamps 'VOID' on [user.p_their()] forehead, then promptly falls over, dead.")
- return (OXYLOSS)
-
-/obj/item/stamp/qm
- name = "quartermaster's rubber stamp"
- icon_state = "stamp-qm"
- dye_color = DYE_QM
-
-/obj/item/stamp/law
- name = "law office's rubber stamp"
- icon_state = "stamp-law"
- dye_color = DYE_LAW
-
-/obj/item/stamp/captain
- name = "captain's rubber stamp"
- icon_state = "stamp-cap"
- dye_color = DYE_CAPTAIN
-
-/obj/item/stamp/hop
- name = "head of personnel's rubber stamp"
- icon_state = "stamp-hop"
- dye_color = DYE_HOP
-
-/obj/item/stamp/hos
- name = "head of security's rubber stamp"
- icon_state = "stamp-hos"
- dye_color = DYE_HOS
-
-/obj/item/stamp/ce
- name = "chief engineer's rubber stamp"
- icon_state = "stamp-ce"
- dye_color = DYE_CE
-
-/obj/item/stamp/rd
- name = "research director's rubber stamp"
- icon_state = "stamp-rd"
- dye_color = DYE_RD
-
-/obj/item/stamp/cmo
- name = "chief medical officer's rubber stamp"
- icon_state = "stamp-cmo"
- dye_color = DYE_CMO
-
-/obj/item/stamp/denied
- name = "\improper DENIED rubber stamp"
- icon_state = "stamp-deny"
- dye_color = DYE_REDCOAT
-
-/obj/item/stamp/clown
- name = "clown's rubber stamp"
- icon_state = "stamp-clown"
- dye_color = DYE_CLOWN
-
-/obj/item/stamp/attack_paw(mob/user)
- return attack_hand(user)
diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm
index f407ac9efc..b842b1d9c2 100644
--- a/code/modules/photography/photos/frame.dm
+++ b/code/modules/photography/photos/frame.dm
@@ -1,7 +1,6 @@
// Picture frames
/obj/item/wallframe
icon = 'icons/obj/wallframe.dmi'
- custom_materials = list(/datum/material/iron=MINERAL_MATERIAL_AMOUNT*2)
flags_1 = CONDUCT_1
item_state = "syringe_kit"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
@@ -55,25 +54,6 @@
/obj/item/wallframe/proc/after_attach(obj/O)
transfer_fingerprints_to(O)
-/obj/item/wallframe/attackby(obj/item/W, mob/user, params)
- ..()
- if(W.tool_behaviour == TOOL_SCREWDRIVER)
- // For camera-building borgs
- var/turf/T = get_step(get_turf(user), user.dir)
- if(iswallturf(T))
- T.attackby(src, user, params)
-
- var/metal_amt = round(custom_materials[getmaterialref(/datum/material/iron)]/MINERAL_MATERIAL_AMOUNT) //Replace this shit later
- var/glass_amt = round(custom_materials[getmaterialref(/datum/material/glass)]/MINERAL_MATERIAL_AMOUNT) //Replace this shit later
-
- if(W.tool_behaviour == TOOL_WRENCH && (metal_amt || glass_amt))
- to_chat(user, "I dismantle [src].")
- if(metal_amt)
- new /obj/item/stack/sheet/metal(get_turf(src), metal_amt)
- if(glass_amt)
- new /obj/item/stack/sheet/glass(get_turf(src), glass_amt)
- qdel(src)
-
/obj/item/wallframe/picture
name = "picture frame"
desc = ""
diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm
index 05abccfae9..bc0c975e41 100644
--- a/code/modules/photography/photos/photo.dm
+++ b/code/modules/photography/photos/photo.dm
@@ -50,17 +50,6 @@
/obj/item/photo/attack_self(mob/user)
user.examinate(src)
-/obj/item/photo/attackby(obj/item/P, mob/user, params)
- if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon))
- if(!user.is_literate())
- to_chat(user, "I scribble illegibly on [src]!")
- return
- var/txt = sanitize(input(user, "What would you like to write on the back?", "Photo Writing", null) as text)
- txt = copytext(txt, 1, 128)
- if(user.canUseTopic(src, BE_CLOSE))
- scribble = txt
- ..()
-
/obj/item/photo/examine(mob/user)
. = ..()
diff --git a/code/modules/procedural_mapping/mapGenerator.dm b/code/modules/procedural_mapping/mapGenerator.dm
index b2c73cc2f7..f50e3c5397 100644
--- a/code/modules/procedural_mapping/mapGenerator.dm
+++ b/code/modules/procedural_mapping/mapGenerator.dm
@@ -137,73 +137,3 @@
/datum/mapGenerator/proc/syncModules()
for(var/datum/mapGeneratorModule/mod in modules)
mod.sync(src)
-
-
-
-///////////////////////////
-// HERE BE DEBUG DRAGONS //
-///////////////////////////
-
-/client/proc/debugNatureMapGenerator()
- set name = "Test Nature Map Generator"
- set category = "Debug"
-
- var/datum/mapGenerator/nature/N = new()
- var/startInput = input(usr,"Start turf of Map, (X;Y;Z)", "Map Gen Settings", "1;1;1") as text|null
-
- if (isnull(startInput))
- return
-
- var/endInput = input(usr,"End turf of Map (X;Y;Z)", "Map Gen Settings", "[world.maxx];[world.maxy];[mob ? mob.z : 1]") as text|null
-
- if (isnull(endInput))
- return
-
- //maxx maxy and current z so that if you fuck up, you only fuck up one entire z level instead of the entire universe
- if(!startInput || !endInput)
- to_chat(src, "Missing Input")
- return
-
- var/list/startCoords = splittext(startInput, ";")
- var/list/endCoords = splittext(endInput, ";")
- if(!startCoords || !endCoords)
- to_chat(src, "Invalid Coords")
- to_chat(src, "Start Input: [startInput]")
- to_chat(src, "End Input: [endInput]")
- return
-
- var/turf/Start = locate(text2num(startCoords[1]),text2num(startCoords[2]),text2num(startCoords[3]))
- var/turf/End = locate(text2num(endCoords[1]),text2num(endCoords[2]),text2num(endCoords[3]))
- if(!Start || !End)
- to_chat(src, "Invalid Turfs")
- to_chat(src, "Start Coords: [startCoords[1]] - [startCoords[2]] - [startCoords[3]]")
- to_chat(src, "End Coords: [endCoords[1]] - [endCoords[2]] - [endCoords[3]]")
- return
-
- var/list/clusters = list("None"=CLUSTER_CHECK_NONE,"All"=CLUSTER_CHECK_ALL,"Sames"=CLUSTER_CHECK_SAMES,"Differents"=CLUSTER_CHECK_DIFFERENTS, \
- "Same turfs"=CLUSTER_CHECK_SAME_TURFS, "Same atoms"=CLUSTER_CHECK_SAME_ATOMS, "Different turfs"=CLUSTER_CHECK_DIFFERENT_TURFS, \
- "Different atoms"=CLUSTER_CHECK_DIFFERENT_ATOMS, "All turfs"=CLUSTER_CHECK_ALL_TURFS,"All atoms"=CLUSTER_CHECK_ALL_ATOMS)
-
- var/moduleClusters = input("Cluster Flags (Cancel to leave unchanged from defaults)","Map Gen Settings") as null|anything in clusters
- //null for default
-
- var/theCluster = 0
- if(moduleClusters != "None")
- if(!clusters[moduleClusters])
- to_chat(src, "Invalid Cluster Flags")
- return
- theCluster = clusters[moduleClusters]
- else
- theCluster = CLUSTER_CHECK_NONE
-
- if(theCluster)
- for(var/datum/mapGeneratorModule/M in N.modules)
- M.clusterCheckFlags = theCluster
-
-
- to_chat(src, "Defining Region")
- N.defineRegion(Start, End)
- to_chat(src, "Region Defined")
- to_chat(src, "Generating Region")
- N.generate()
- to_chat(src, "Generated Region")
diff --git a/code/modules/procedural_mapping/mapGeneratorModule.dm b/code/modules/procedural_mapping/mapGeneratorModule.dm
index 69aa5a3e80..7924e63bc7 100644
--- a/code/modules/procedural_mapping/mapGeneratorModule.dm
+++ b/code/modules/procedural_mapping/mapGeneratorModule.dm
@@ -6,7 +6,6 @@
var/clusterMax = 5
var/clusterMin = 1
var/clusterCheckFlags = CLUSTER_CHECK_SAME_ATOMS
- var/allowAtomsOnSpace = FALSE
var/checkdensity = TRUE
var/list/excluded_turfs = list()
var/list/allowed_turfs = list()
@@ -140,8 +139,6 @@
if(A.density)
. = 0
break
- if(!allowAtomsOnSpace && (isspaceturf(T)))
- . = 0
///////////////////////////////////////////////////////////
diff --git a/code/modules/procedural_mapping/mapGeneratorModules/nature.dm b/code/modules/procedural_mapping/mapGeneratorModules/nature.dm
deleted file mode 100644
index d0589b909d..0000000000
--- a/code/modules/procedural_mapping/mapGeneratorModules/nature.dm
+++ /dev/null
@@ -1,37 +0,0 @@
-
-//Contents exist primarily for the nature generator test type.
-
-
-//Pine Trees
-/datum/mapGeneratorModule/pineTrees
- spawnableAtoms = list(/obj/structure/flora/tree/pine = 30)
-
-//Dead Trees
-/datum/mapGeneratorModule/deadTrees
- spawnableAtoms = list(/obj/structure/flora/tree/dead = 10)
-
-//Random assortment of bushes
-/datum/mapGeneratorModule/randBushes
- spawnableAtoms = list()
-
-/datum/mapGeneratorModule/randBushes/New()
- ..()
- spawnableAtoms = typesof(/obj/structure/flora/ausbushes)
- for(var/i in spawnableAtoms)
- spawnableAtoms[i] = 20
-
-
-//Random assortment of rocks and rockpiles
-/datum/mapGeneratorModule/randRocks
- spawnableAtoms = list(/obj/structure/flora/rock = 40, /obj/structure/flora/rock/pile = 20)
-
-
-//Grass turfs
-/datum/mapGeneratorModule/bottomLayer/grassTurfs
- spawnableTurfs = list(/turf/open/floor/grass = 100)
-
-
-//Grass tufts with a high spawn chance
-/datum/mapGeneratorModule/denseLayer/grassTufts
- spawnableTurfs = list()
- spawnableAtoms = list(/obj/structure/flora/ausbushes/grassybush = 75)
diff --git a/code/modules/procedural_mapping/mapGeneratorObj.dm b/code/modules/procedural_mapping/mapGeneratorObj.dm
index d52403df03..8528c9916a 100644
--- a/code/modules/procedural_mapping/mapGeneratorObj.dm
+++ b/code/modules/procedural_mapping/mapGeneratorObj.dm
@@ -5,7 +5,7 @@
var/endTurfX = 0
var/endTurfY = 0
var/endTurfZ = -1
- var/mapGeneratorType = /datum/mapGenerator/nature
+ var/mapGeneratorType = /datum/mapGenerator/beach
var/datum/mapGenerator/mapGenerator
/obj/effect/landmark/mapGenerator/Initialize(mapload)
diff --git a/code/modules/procedural_mapping/mapGenerators/cellular.dm b/code/modules/procedural_mapping/mapGenerators/cellular.dm
index 5fc1344dc4..b914f51307 100644
--- a/code/modules/procedural_mapping/mapGenerators/cellular.dm
+++ b/code/modules/procedural_mapping/mapGenerators/cellular.dm
@@ -12,7 +12,7 @@
var/list/current_state
var/width = 10
var/height = 10
- var/list/type_map = list(/turf/open/floor/plating, /turf/closed/wall)
+ var/list/type_map = list(/turf/open/floor/rogue/blocks, /turf/closed/wall)
var/turf/start = null
/datum/mapGenerator/ca/defineRegion(turf/Start, turf/End, replace = 0)
@@ -83,12 +83,6 @@
return old_state[i][j]
return 0
-/datum/mapGenerator/ca/caves
- b_rule = list(5,6,7,8)
- s_rule = list(4)
- type_map = list(/turf/open/floor/plating/asteroid/basalt, /turf/closed/mineral/volcanic)
- iterations = 5
-
/datum/mapGenerator/ca/maze
b_rule = list(3)
s_rule = list(1,2,3,4,5)
diff --git a/code/modules/procedural_mapping/mapGenerators/nature.dm b/code/modules/procedural_mapping/mapGenerators/nature.dm
deleted file mode 100644
index abb4e7ed10..0000000000
--- a/code/modules/procedural_mapping/mapGenerators/nature.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-
-//Exists primarily as a test type.
-
-/datum/mapGenerator/nature
- modules = list(/datum/mapGeneratorModule/bottomLayer/grassTurfs, \
- /datum/mapGeneratorModule/pineTrees, \
- /datum/mapGeneratorModule/deadTrees, \
- /datum/mapGeneratorModule/randBushes, \
- /datum/mapGeneratorModule/randRocks, \
- /datum/mapGeneratorModule/denseLayer/grassTufts)
- buildmode_name = "Pattern: Nature"
diff --git a/code/modules/procedural_mapping/mapGenerators/repair.dm b/code/modules/procedural_mapping/mapGenerators/repair.dm
deleted file mode 100644
index e0dc7aa745..0000000000
--- a/code/modules/procedural_mapping/mapGenerators/repair.dm
+++ /dev/null
@@ -1,102 +0,0 @@
-/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel
- spawnableTurfs = list(/turf/open/floor/plasteel = 100)
- var/ignore_wall = FALSE
- allowAtomsOnSpace = TRUE
-
-/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/place(turf/T)
- if(isclosedturf(T) && !ignore_wall)
- return FALSE
- return ..()
-
-/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten
- ignore_wall = TRUE
-
-/datum/mapGeneratorModule/border/normalWalls
- spawnableAtoms = list()
- spawnableTurfs = list(/turf/closed/wall = 100)
- allowAtomsOnSpace = TRUE
-
-/datum/mapGeneratorModule/reload_station_map/generate()
- if(!istype(mother, /datum/mapGenerator/repair/reload_station_map))
- return
- var/datum/mapGenerator/repair/reload_station_map/mother1 = mother
- GLOB.reloading_map = TRUE
- // This is kind of finicky on multi-Z maps but the reader would need to be
- // changed to allow Z cropping and that's a mess
- var/z_offset = SSmapping.station_start
- var/list/bounds
- for (var/path in SSmapping.config.GetFullMapPaths())
- var/datum/parsed_map/parsed = load_map(file(path), 1, 1, z_offset, measureOnly = FALSE, no_changeturf = FALSE, cropMap=TRUE, x_lower = mother1.x_low, y_lower = mother1.y_low, x_upper = mother1.x_high, y_upper = mother1.y_high)
- bounds = parsed?.bounds
- z_offset += bounds[MAP_MAXZ] - bounds[MAP_MINZ] + 1
-
- var/list/atom/atoms = list()
-
- repopulate_sorted_areas()
-
- for(var/L in block(locate(bounds[MAP_MINX], bounds[MAP_MINY], SSmapping.station_start),
- locate(bounds[MAP_MAXX], bounds[MAP_MAXY], z_offset - 1)))
- set waitfor = FALSE
- var/turf/B = L
- atoms += B
- for(var/A in B)
- atoms += A
-
- SSatoms.InitializeAtoms(atoms)
- GLOB.reloading_map = FALSE
-
-/datum/mapGenerator/repair
- modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel,
- /datum/mapGeneratorModule/bottomLayer/repressurize)
- buildmode_name = "Repair: Floor"
-
-/datum/mapGenerator/repair/delete_walls
- modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten,
- /datum/mapGeneratorModule/bottomLayer/repressurize)
- buildmode_name = "Repair: Floor: Flatten Walls"
-
-/datum/mapGenerator/repair/enclose_room
- modules = list(/datum/mapGeneratorModule/bottomLayer/repairFloorPlasteel/flatten,
- /datum/mapGeneratorModule/border/normalWalls,
- /datum/mapGeneratorModule/bottomLayer/repressurize)
- buildmode_name = "Repair: Generate Aired Room"
-
-/datum/mapGenerator/repair/reload_station_map
- modules = list(/datum/mapGeneratorModule/bottomLayer/massdelete/no_delete_mobs)
- var/x_low = 0
- var/x_high = 0
- var/y_low = 0
- var/y_high = 0
- var/z = 0
- var/cleanload = FALSE
- var/datum/mapGeneratorModule/reload_station_map/loader
- buildmode_name = "Repair: Reload Block \[DO NOT USE\]"
-
-/datum/mapGenerator/repair/reload_station_map/clean
- buildmode_name = "Repair: Reload Block - Mass Delete"
- cleanload = TRUE
-
-/datum/mapGenerator/repair/reload_station_map/clean/in_place
- modules = list(/datum/mapGeneratorModule/bottomLayer/massdelete/regeneration_delete)
- buildmode_name = "Repair: Reload Block - Mass Delete - In Place"
-
-/datum/mapGenerator/repair/reload_station_map/defineRegion(turf/start, turf/end)
- . = ..()
- if(!is_station_level(start.z) || !is_station_level(end.z))
- return
- x_low = min(start.x, end.x)
- y_low = min(start.y, end.y)
- x_high = max(start.x, end.x)
- y_high = max(start.y, end.y)
- z = SSmapping.station_start
-
-GLOBAL_VAR_INIT(reloading_map, FALSE)
-
-/datum/mapGenerator/repair/reload_station_map/generate(clean = cleanload)
- if(!loader)
- loader = new
- if(cleanload)
- ..() //Trigger mass deletion.
- modules |= loader
- syncModules()
- loader.generate()
diff --git a/code/modules/procedural_mapping/mapGenerators/shuttle.dm b/code/modules/procedural_mapping/mapGenerators/shuttle.dm
deleted file mode 100644
index ba877eeabb..0000000000
--- a/code/modules/procedural_mapping/mapGenerators/shuttle.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-/datum/mapGeneratorModule/bottomLayer/shuttleFloor
- spawnableTurfs = list(/turf/open/floor/plasteel/shuttle = 100)
-
-/datum/mapGeneratorModule/border/shuttleWalls
- spawnableAtoms = list()
- spawnableTurfs = list(/turf/closed/wall/mineral/titanium = 100)
-// Generators
-
-/datum/mapGenerator/shuttle/full
- modules = list(/datum/mapGeneratorModule/bottomLayer/shuttleFloor, \
- /datum/mapGeneratorModule/border/shuttleWalls,\
- /datum/mapGeneratorModule/bottomLayer/repressurize)
- buildmode_name = "Pattern: Shuttle Room"
-
-/datum/mapGenerator/shuttle/floor
- modules = list(/datum/mapGeneratorModule/bottomLayer/shuttleFloor)
- buildmode_name = "Block: Shuttle Floor"
diff --git a/code/modules/procedural_mapping/mapGenerators/syndicate.dm b/code/modules/procedural_mapping/mapGenerators/syndicate.dm
deleted file mode 100644
index 1852c0a4f0..0000000000
--- a/code/modules/procedural_mapping/mapGenerators/syndicate.dm
+++ /dev/null
@@ -1,56 +0,0 @@
-
-// Modules
-
-/turf/open/floor/plasteel/shuttle/red/syndicate
- name = "floor" //Not Brig Floor
-
-/datum/mapGeneratorModule/bottomLayer/syndieFloor
- spawnableTurfs = list(/turf/open/floor/plasteel/shuttle/red/syndicate = 100)
-
-/datum/mapGeneratorModule/border/syndieWalls
- spawnableAtoms = list()
- spawnableTurfs = list(/turf/closed/wall/r_wall = 100)
-
-
-/datum/mapGeneratorModule/syndieFurniture
- clusterCheckFlags = CLUSTER_CHECK_ALL
- spawnableTurfs = list()
- spawnableAtoms = list(/obj/structure/table = 20,/obj/structure/chair = 15,/obj/structure/chair/stool = 10, \
- /obj/item/storage/toolbox/syndicate = 15)
-
-/datum/mapGeneratorModule/splatterLayer/syndieMobs
- spawnableAtoms = list(/mob/living/simple_animal/hostile/syndicate = 30, \
- /mob/living/simple_animal/hostile/syndicate/melee = 20, \
- /mob/living/simple_animal/hostile/syndicate/ranged = 20, \
- /mob/living/simple_animal/hostile/viscerator = 30)
- spawnableTurfs = list()
-
-// Generators
-
-/datum/mapGenerator/syndicate/empty //walls and floor only
- modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \
- /datum/mapGeneratorModule/border/syndieWalls,\
- /datum/mapGeneratorModule/bottomLayer/repressurize)
- buildmode_name = "Pattern: Shuttle Room: Syndicate"
-
-/datum/mapGenerator/syndicate/mobsonly
- modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \
- /datum/mapGeneratorModule/border/syndieWalls,\
- /datum/mapGeneratorModule/splatterLayer/syndieMobs, \
- /datum/mapGeneratorModule/bottomLayer/repressurize)
- buildmode_name = "Pattern: Shuttle Room: Syndicate: Mobs"
-
-/datum/mapGenerator/syndicate/furniture
- modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \
- /datum/mapGeneratorModule/border/syndieWalls,\
- /datum/mapGeneratorModule/syndieFurniture, \
- /datum/mapGeneratorModule/bottomLayer/repressurize)
- buildmode_name = "Pattern: Shuttle Room: Syndicate: Furniture"
-
-/datum/mapGenerator/syndicate/full
- modules = list(/datum/mapGeneratorModule/bottomLayer/syndieFloor, \
- /datum/mapGeneratorModule/border/syndieWalls,\
- /datum/mapGeneratorModule/syndieFurniture, \
- /datum/mapGeneratorModule/splatterLayer/syndieMobs, \
- /datum/mapGeneratorModule/bottomLayer/repressurize)
- buildmode_name = "Pattern: Shuttle Room: Syndicate: All"
diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm
index 38d02e853b..cb6a36186f 100644
--- a/code/modules/projectiles/ammunition/_ammunition.dm
+++ b/code/modules/projectiles/ammunition/_ammunition.dm
@@ -7,7 +7,7 @@
slot_flags = ITEM_SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_TINY
- custom_materials = list(/datum/material/iron = 500)
+
var/fire_sound = null //What sound should play when this ammo is fired
var/caliber = null //Which kind of guns it can be loaded into
var/projectile_type = null //The bullet type to create when New() is called
diff --git a/code/modules/projectiles/ammunition/ballistic/lmg.dm b/code/modules/projectiles/ammunition/ballistic/lmg.dm
deleted file mode 100644
index 68f9a0b932..0000000000
--- a/code/modules/projectiles/ammunition/ballistic/lmg.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-// 7.12x82mm (SAW)
-
-/obj/item/ammo_casing/mm712x82
- name = "7.12x82mm bullet casing"
- desc = ""
- icon_state = "762-casing"
- caliber = "mm71282"
- projectile_type = /obj/projectile/bullet/mm712x82
-
-/obj/item/ammo_casing/mm712x82/ap
- name = "7.12x82mm armor-piercing bullet casing"
- desc = ""
- projectile_type = /obj/projectile/bullet/mm712x82_ap
-
-/obj/item/ammo_casing/mm712x82/hollow
- name = "7.12x82mm hollow-point bullet casing"
- desc = ""
- projectile_type = /obj/projectile/bullet/mm712x82_hp
-
-/obj/item/ammo_casing/mm712x82/incen
- name = "7.12x82mm incendiary bullet casing"
- desc = ""
- projectile_type = /obj/projectile/bullet/incendiary/mm712x82
diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm
deleted file mode 100644
index 1d182e2b18..0000000000
--- a/code/modules/projectiles/ammunition/ballistic/pistol.dm
+++ /dev/null
@@ -1,50 +0,0 @@
-// 10mm (Stechkin)
-
-/obj/item/ammo_casing/c10mm
- name = "10mm bullet casing"
- desc = ""
- caliber = "10mm"
- projectile_type = /obj/projectile/bullet/c10mm
-
-/obj/item/ammo_casing/c10mm/ap
- name = "10mm armor-piercing bullet casing"
- desc = ""
- projectile_type = /obj/projectile/bullet/c10mm_ap
-
-/obj/item/ammo_casing/c10mm/hp
- name = "10mm hollow-point bullet casing"
- desc = ""
- projectile_type = /obj/projectile/bullet/c10mm_hp
-
-/obj/item/ammo_casing/c10mm/fire
- name = "10mm incendiary bullet casing"
- desc = ""
- projectile_type = /obj/projectile/bullet/incendiary/c10mm
-
-// 9mm (Stechkin APS)
-
-/obj/item/ammo_casing/c9mm
- name = "9mm bullet casing"
- desc = ""
- caliber = "9mm"
- projectile_type = /obj/projectile/bullet/c9mm
-
-/obj/item/ammo_casing/c9mm/ap
- name = "9mm armor-piercing bullet casing"
- desc = ""
- projectile_type =/obj/projectile/bullet/c9mm_ap
-
-/obj/item/ammo_casing/c9mm/inc
- name = "9mm incendiary bullet casing"
- desc = ""
- projectile_type = /obj/projectile/bullet/incendiary/c9mm
-
-
-// .50AE (Desert Eagle)
-
-/obj/item/ammo_casing/a50AE
- name = ".50AE bullet casing"
- desc = ""
- caliber = ".50"
- projectile_type = /obj/projectile/bullet/a50AE
-
diff --git a/code/modules/projectiles/ammunition/ballistic/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm
deleted file mode 100644
index 9e4a0197e7..0000000000
--- a/code/modules/projectiles/ammunition/ballistic/revolver.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-// .357 (Syndie Revolver)
-
-/obj/item/ammo_casing/a357
- name = ".357 bullet casing"
- desc = ""
- caliber = "357"
- projectile_type = /obj/projectile/bullet/a357
-
-// 7.62x38mmR (Nagant Revolver)
-
-/obj/item/ammo_casing/n762
- name = "7.62x38mmR bullet casing"
- desc = ""
- caliber = "n762"
- projectile_type = /obj/projectile/bullet/n762
-
-// .38 (Detective's Gun)
-
-/obj/item/ammo_casing/c38
- name = ".38 bullet casing"
- desc = ""
- caliber = "38"
- projectile_type = /obj/projectile/bullet/c38
-
-/obj/item/ammo_casing/c38/trac
- name = ".38 TRAC bullet casing"
- desc = ""
- projectile_type = /obj/projectile/bullet/c38/trac
-
-/obj/item/ammo_casing/c38/hotshot
- name = ".38 Hot Shot bullet casing"
- desc = ""
- caliber = "38"
- projectile_type = /obj/projectile/bullet/c38/hotshot
-
-/obj/item/ammo_casing/c38/iceblox
- name = ".38 Iceblox bullet casing"
- desc = ""
- caliber = "38"
- projectile_type = /obj/projectile/bullet/c38/iceblox
diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm
deleted file mode 100644
index 27a5a0180b..0000000000
--- a/code/modules/projectiles/ammunition/ballistic/rifle.dm
+++ /dev/null
@@ -1,28 +0,0 @@
-// 7.62 (Nagant Rifle)
-
-/obj/item/ammo_casing/a762
- name = "7.62 bullet casing"
- desc = ""
- icon_state = "762-casing"
- caliber = "a762"
- projectile_type = /obj/projectile/bullet/a762
-
-/obj/item/ammo_casing/a762/enchanted
- projectile_type = /obj/projectile/bullet/a762_enchanted
-
-// 5.56mm (M-90gl Carbine)
-
-/obj/item/ammo_casing/a556
- name = "5.56mm bullet casing"
- desc = ""
- caliber = "a556"
- projectile_type = /obj/projectile/bullet/a556
-
-// 40mm (Grenade Launcher)
-
-/obj/item/ammo_casing/a40mm
- name = "40mm HE shell"
- desc = ""
- caliber = "40mm"
- icon_state = "40mmHE"
- projectile_type = /obj/projectile/bullet/a40mm
diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm
deleted file mode 100644
index 0b53c40ede..0000000000
--- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm
+++ /dev/null
@@ -1,150 +0,0 @@
-// Shotgun
-
-/obj/item/ammo_casing/shotgun
- name = "shotgun slug"
- desc = ""
- icon_state = "blshell"
- caliber = "shotgun"
- custom_materials = list(/datum/material/iron=4000)
- projectile_type = /obj/projectile/bullet/shotgun_slug
-
-/obj/item/ammo_casing/shotgun/beanbag
- name = "beanbag slug"
- desc = ""
- icon_state = "bshell"
- custom_materials = list(/datum/material/iron=250)
- projectile_type = /obj/projectile/bullet/shotgun_beanbag
-
-/obj/item/ammo_casing/shotgun/incendiary
- name = "incendiary slug"
- desc = ""
- icon_state = "ishell"
- projectile_type = /obj/projectile/bullet/incendiary/shotgun
-
-/obj/item/ammo_casing/shotgun/dragonsbreath
- name = "dragonsbreath shell"
- desc = ""
- icon_state = "ishell2"
- projectile_type = /obj/projectile/bullet/incendiary/shotgun/dragonsbreath
- pellets = 4
- variance = 35
-
-/obj/item/ammo_casing/shotgun/stunslug
- name = "taser slug"
- desc = ""
- icon_state = "stunshell"
- projectile_type = /obj/projectile/bullet/shotgun_stunslug
- custom_materials = list(/datum/material/iron=250)
-
-/obj/item/ammo_casing/shotgun/meteorslug
- name = "meteorslug shell"
- desc = ""
- icon_state = "mshell"
- projectile_type = /obj/projectile/bullet/shotgun_meteorslug
-
-/obj/item/ammo_casing/shotgun/pulseslug
- name = "pulse slug"
- desc = "A delicate device which can be loaded into a shotgun. The primer acts as a button which triggers the gain medium and fires a powerful \
- energy blast. While the heat and power drain limit it to one use, it can still allow an operator to engage targets that ballistic ammunition \
- would have difficulty with."
- icon_state = "pshell"
- projectile_type = /obj/projectile/beam/pulse/shotgun
-
-/obj/item/ammo_casing/shotgun/frag12
- name = "FRAG-12 slug"
- desc = ""
- icon_state = "heshell"
- projectile_type = /obj/projectile/bullet/shotgun_frag12
-
-/obj/item/ammo_casing/shotgun/buckshot
- name = "buckshot shell"
- desc = ""
- icon_state = "gshell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun_buckshot
- pellets = 6
- variance = 25
-
-/obj/item/ammo_casing/shotgun/rubbershot
- name = "rubber shot"
- desc = ""
- icon_state = "bshell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun_rubbershot
- pellets = 6
- variance = 25
- custom_materials = list(/datum/material/iron=4000)
-
-/obj/item/ammo_casing/shotgun/incapacitate
- name = "custom incapacitating shot"
- desc = ""
- icon_state = "bountyshell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun_incapacitate
- pellets = 12//double the pellets, but half the stun power of each, which makes this best for just dumping right in someone's face.
- variance = 25
- custom_materials = list(/datum/material/iron=4000)
-
-/obj/item/ammo_casing/shotgun/improvised
- name = "improvised shell"
- desc = ""
- icon_state = "improvshell"
- projectile_type = /obj/projectile/bullet/pellet/shotgun_improvised
- custom_materials = list(/datum/material/iron=250)
- pellets = 10
- variance = 25
-
-/obj/item/ammo_casing/shotgun/ion
- name = "ion shell"
- desc = "An advanced shotgun shell which uses a subspace ansible crystal to produce an effect similar to a standard ion rifle. \
- The unique properties of the crystal split the pulse into a spread of individually weaker bolts."
- icon_state = "ionshell"
- projectile_type = /obj/projectile/ion/weak
- pellets = 4
- variance = 35
-
-/obj/item/ammo_casing/shotgun/laserslug
- name = "scatter laser shell"
- desc = ""
- icon_state = "lshell"
- projectile_type = /obj/projectile/beam/weak
- pellets = 6
- variance = 35
-
-/obj/item/ammo_casing/shotgun/techshell
- name = "unloaded technological shell"
- desc = ""
- icon_state = "cshell"
- projectile_type = null
-
-/obj/item/ammo_casing/shotgun/dart
- name = "shotgun dart"
- desc = ""
- icon_state = "cshell"
- projectile_type = /obj/projectile/bullet/dart
- var/reagent_amount = 30
-
-/obj/item/ammo_casing/shotgun/dart/Initialize()
- . = ..()
- create_reagents(reagent_amount, OPENCONTAINER)
-
-/obj/item/ammo_casing/shotgun/dart/attackby()
- return
-
-/obj/item/ammo_casing/shotgun/dart/noreact
- name = "cryostasis shotgun dart"
- desc = ""
- icon_state = "cnrshell"
- reagent_amount = 10
-
-/obj/item/ammo_casing/shotgun/dart/noreact/Initialize()
- . = ..()
- ENABLE_BITFIELD(reagents.flags, NO_REACT)
-
-/obj/item/ammo_casing/shotgun/dart/bioterror
- desc = ""
-
-/obj/item/ammo_casing/shotgun/dart/bioterror/Initialize()
- . = ..()
- reagents.add_reagent(/datum/reagent/consumable/ethanol/neurotoxin, 6)
- reagents.add_reagent(/datum/reagent/toxin/spore, 6)
- reagents.add_reagent(/datum/reagent/toxin/mutetoxin, 6) //;HELP OPS IN MAINT
- reagents.add_reagent(/datum/reagent/toxin/coniine, 6)
- reagents.add_reagent(/datum/reagent/toxin/sodium_thiopental, 6)
diff --git a/code/modules/projectiles/ammunition/ballistic/smg.dm b/code/modules/projectiles/ammunition/ballistic/smg.dm
deleted file mode 100644
index 84d945e15e..0000000000
--- a/code/modules/projectiles/ammunition/ballistic/smg.dm
+++ /dev/null
@@ -1,25 +0,0 @@
-// 4.6x30mm (Autorifles)
-
-/obj/item/ammo_casing/c46x30mm
- name = "4.6x30mm bullet casing"
- desc = ""
- caliber = "4.6x30mm"
- projectile_type = /obj/projectile/bullet/c46x30mm
-
-/obj/item/ammo_casing/c46x30mm/ap
- name = "4.6x30mm armor-piercing bullet casing"
- desc = ""
- projectile_type = /obj/projectile/bullet/c46x30mm_ap
-
-/obj/item/ammo_casing/c46x30mm/inc
- name = "4.6x30mm incendiary bullet casing"
- desc = ""
- projectile_type = /obj/projectile/bullet/incendiary/c46x30mm
-
-// .45 (M1911 + C20r)
-
-/obj/item/ammo_casing/c45
- name = ".45 bullet casing"
- desc = ""
- caliber = ".45"
- projectile_type = /obj/projectile/bullet/c45
diff --git a/code/modules/projectiles/ammunition/ballistic/sniper.dm b/code/modules/projectiles/ammunition/ballistic/sniper.dm
deleted file mode 100644
index 75fb7d7193..0000000000
--- a/code/modules/projectiles/ammunition/ballistic/sniper.dm
+++ /dev/null
@@ -1,20 +0,0 @@
-// .50 (Sniper)
-
-/obj/item/ammo_casing/p50
- name = ".50 bullet casing"
- desc = ""
- caliber = ".50"
- projectile_type = /obj/projectile/bullet/p50
- icon_state = ".50"
-
-/obj/item/ammo_casing/p50/soporific
- name = ".50 soporific bullet casing"
- desc = ""
- projectile_type = /obj/projectile/bullet/p50/soporific
- icon_state = "sleeper"
- harmful = FALSE
-
-/obj/item/ammo_casing/p50/penetrator
- name = ".50 penetrator round bullet casing"
- desc = ""
- projectile_type = /obj/projectile/bullet/p50/penetrator
diff --git a/code/modules/projectiles/ammunition/caseless/_caseless.dm b/code/modules/projectiles/ammunition/caseless/_caseless.dm
deleted file mode 100644
index fe804f351c..0000000000
--- a/code/modules/projectiles/ammunition/caseless/_caseless.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-/obj/item/ammo_casing/caseless
- desc = ""
- firing_effect_type = null
- heavy_metal = FALSE
-
-/obj/item/ammo_casing/caseless/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from)
- if (..()) //successfully firing
-// moveToNullspace()
- testing("qdelling caseless bolt")
- qdel(src)
- return TRUE
- else
- return FALSE
-
-/obj/item/ammo_casing/caseless/update_icon()
- ..()
- icon_state = "[initial(icon_state)]"
diff --git a/code/modules/projectiles/ammunition/caseless/foam.dm b/code/modules/projectiles/ammunition/caseless/foam.dm
deleted file mode 100644
index c9182edaab..0000000000
--- a/code/modules/projectiles/ammunition/caseless/foam.dm
+++ /dev/null
@@ -1,65 +0,0 @@
-/obj/item/ammo_casing/caseless/foam_dart
- name = "foam dart"
- desc = ""
- projectile_type = /obj/projectile/bullet/reusable/foam_dart
- caliber = "foam_force"
- icon = 'icons/obj/guns/toy.dmi'
- icon_state = "foamdart"
- custom_materials = list(/datum/material/iron = 11.25)
- harmful = FALSE
- var/modified = FALSE
-
-/obj/item/ammo_casing/caseless/foam_dart/update_icon()
- ..()
- if (modified)
- icon_state = "foamdart_empty"
- desc = ""
- if(BB)
- BB.icon_state = "foamdart_empty"
- else
- icon_state = initial(icon_state)
- desc = ""
- if(BB)
- BB.icon_state = initial(BB.icon_state)
-
-
-/obj/item/ammo_casing/caseless/foam_dart/attackby(obj/item/A, mob/user, params)
- var/obj/projectile/bullet/reusable/foam_dart/FD = BB
- if (A.tool_behaviour == TOOL_SCREWDRIVER && !modified)
- modified = TRUE
- FD.modified = TRUE
- FD.damage_type = BRUTE
- to_chat(user, "I pop the safety cap off [src].")
- update_icon()
- else if (istype(A, /obj/item/pen))
- if(modified)
- if(!FD.pen)
- harmful = TRUE
- if(!user.transferItemToLoc(A, FD))
- return
- FD.pen = A
- FD.damage = 5
- FD.nodamage = FALSE
- to_chat(user, "I insert [A] into [src].")
- else
- to_chat(user, "There's already something in [src].")
- else
- to_chat(user, "The safety cap prevents you from inserting [A] into [src].")
- else
- return ..()
-
-/obj/item/ammo_casing/caseless/foam_dart/attack_self(mob/living/user)
- var/obj/projectile/bullet/reusable/foam_dart/FD = BB
- if(FD.pen)
- FD.damage = initial(FD.damage)
- FD.nodamage = initial(FD.nodamage)
- user.put_in_hands(FD.pen)
- to_chat(user, "I remove [FD.pen] from [src].")
- FD.pen = null
-
-/obj/item/ammo_casing/caseless/foam_dart/riot
- name = "riot foam dart"
- desc = ""
- projectile_type = /obj/projectile/bullet/reusable/foam_dart/riot
- icon_state = "foamdart_riot"
- custom_materials = list(/datum/material/iron = 1125)
diff --git a/code/modules/projectiles/ammunition/caseless/misc.dm b/code/modules/projectiles/ammunition/caseless/misc.dm
deleted file mode 100644
index 29738b3aed..0000000000
--- a/code/modules/projectiles/ammunition/caseless/misc.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/obj/item/ammo_casing/caseless/laser
- name = "laser casing"
- desc = ""
- caliber = "laser"
- icon_state = "s-casing-live"
- projectile_type = /obj/projectile/beam
- fire_sound = 'sound/blank.ogg'
- firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/energy
-
-/obj/item/ammo_casing/caseless/laser/gatling
- projectile_type = /obj/projectile/beam/weak/penetrator
- variance = 0.8
- click_cooldown_override = 1
diff --git a/code/modules/projectiles/ammunition/caseless/rocket.dm b/code/modules/projectiles/ammunition/caseless/rocket.dm
deleted file mode 100644
index a438ce09ec..0000000000
--- a/code/modules/projectiles/ammunition/caseless/rocket.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-/obj/item/ammo_casing/caseless/rocket
- name = "\improper PM-9HE"
- desc = ""
- caliber = "84mm"
- icon_state = "srm-8"
- projectile_type = /obj/projectile/bullet/a84mm_he
-
-/obj/item/ammo_casing/caseless/rocket/hedp
- name = "\improper PM-9HEDP"
- desc = ""
- caliber = "84mm"
- icon_state = "84mm-hedp"
- projectile_type = /obj/projectile/bullet/a84mm
-
-/obj/item/ammo_casing/caseless/a75
- desc = ""
- caliber = "75"
- icon_state = "s-casing-live"
- projectile_type = /obj/projectile/bullet/gyro
diff --git a/code/modules/projectiles/ammunition/energy/_energy.dm b/code/modules/projectiles/ammunition/energy/_energy.dm
deleted file mode 100644
index a18c713f60..0000000000
--- a/code/modules/projectiles/ammunition/energy/_energy.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-/obj/item/ammo_casing/energy
- name = "energy weapon lens"
- desc = ""
- caliber = "energy"
- projectile_type = /obj/projectile/energy
- var/e_cost = 100 //The amount of energy a cell needs to expend to create this shot.
- var/select_name = "energy"
- fire_sound = 'sound/blank.ogg'
- firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/energy
- heavy_metal = FALSE
diff --git a/code/modules/projectiles/ammunition/energy/ebow.dm b/code/modules/projectiles/ammunition/energy/ebow.dm
deleted file mode 100644
index 8618f1c5dc..0000000000
--- a/code/modules/projectiles/ammunition/energy/ebow.dm
+++ /dev/null
@@ -1,12 +0,0 @@
-/obj/item/ammo_casing/energy/bolt
- projectile_type = /obj/projectile/energy/bolt
- select_name = "bolt"
- e_cost = 500
- fire_sound = 'sound/blank.ogg'
-
-/obj/item/ammo_casing/energy/bolt/halloween
- projectile_type = /obj/projectile/energy/bolt/halloween
-
-/obj/item/ammo_casing/energy/bolt/large
- projectile_type = /obj/projectile/energy/bolt/large
- select_name = "heavy bolt"
diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm
deleted file mode 100644
index 1d0344eed7..0000000000
--- a/code/modules/projectiles/ammunition/energy/laser.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-/obj/item/ammo_casing/energy/laser
- projectile_type = /obj/projectile/beam/laser
- select_name = "kill"
-
-/obj/item/ammo_casing/energy/lasergun
- projectile_type = /obj/projectile/beam/laser
- e_cost = 83
- select_name = "kill"
-
-/obj/item/ammo_casing/energy/lasergun/old
- projectile_type = /obj/projectile/beam/laser
- e_cost = 200
- select_name = "kill"
-
-/obj/item/ammo_casing/energy/laser/hos
- e_cost = 120
-
-/obj/item/ammo_casing/energy/laser/practice
- projectile_type = /obj/projectile/beam/practice
- select_name = "practice"
- harmful = FALSE
-
-/obj/item/ammo_casing/energy/laser/scatter
- projectile_type = /obj/projectile/beam/scatter
- pellets = 5
- variance = 25
- select_name = "scatter"
-
-/obj/item/ammo_casing/energy/laser/scatter/disabler
- projectile_type = /obj/projectile/beam/disabler
- pellets = 3
- variance = 15
- harmful = FALSE
-
-/obj/item/ammo_casing/energy/laser/heavy
- projectile_type = /obj/projectile/beam/laser/heavylaser
- select_name = "anti-vehicle"
- fire_sound = 'sound/blank.ogg'
-
-/obj/item/ammo_casing/energy/laser/pulse
- projectile_type = /obj/projectile/beam/pulse
- e_cost = 200
- select_name = "DESTROY"
- fire_sound = 'sound/blank.ogg'
-
-/obj/item/ammo_casing/energy/xray
- projectile_type = /obj/projectile/beam/xray
- e_cost = 50
- fire_sound = 'sound/blank.ogg'
-
-/obj/item/ammo_casing/energy/mindflayer
- projectile_type = /obj/projectile/beam/mindflayer
- select_name = "MINDFUCK"
- fire_sound = 'sound/blank.ogg'
diff --git a/code/modules/projectiles/ammunition/energy/lmg.dm b/code/modules/projectiles/ammunition/energy/lmg.dm
deleted file mode 100644
index bd83197f0c..0000000000
--- a/code/modules/projectiles/ammunition/energy/lmg.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/obj/item/ammo_casing/energy/c3dbullet
- projectile_type = /obj/projectile/bullet/c3d
- select_name = "spraydown"
- fire_sound = 'sound/blank.ogg'
- e_cost = 20
- firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect
diff --git a/code/modules/projectiles/ammunition/energy/plasma.dm b/code/modules/projectiles/ammunition/energy/plasma.dm
deleted file mode 100644
index f860c05130..0000000000
--- a/code/modules/projectiles/ammunition/energy/plasma.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/obj/item/ammo_casing/energy/plasma
- projectile_type = /obj/projectile/plasma
- select_name = "plasma burst"
- fire_sound = 'sound/blank.ogg'
- delay = 15
- e_cost = 25
-
-/obj/item/ammo_casing/energy/plasma/adv
- projectile_type = /obj/projectile/plasma/adv
- delay = 10
- e_cost = 10
diff --git a/code/modules/projectiles/ammunition/energy/special.dm b/code/modules/projectiles/ammunition/energy/special.dm
deleted file mode 100644
index 67cf4daa0d..0000000000
--- a/code/modules/projectiles/ammunition/energy/special.dm
+++ /dev/null
@@ -1,64 +0,0 @@
-/obj/item/ammo_casing/energy/ion
- projectile_type = /obj/projectile/ion
- select_name = "ion"
- fire_sound = 'sound/blank.ogg'
-
-/obj/item/ammo_casing/energy/ion/hos
- projectile_type = /obj/projectile/ion/weak
- e_cost = 300
-
-/obj/item/ammo_casing/energy/declone
- projectile_type = /obj/projectile/energy/declone
- select_name = "declone"
- fire_sound = 'sound/blank.ogg'
-
-/obj/item/ammo_casing/energy/declone/weak
- projectile_type = /obj/projectile/energy/declone/weak
-
-/obj/item/ammo_casing/energy/flora
- fire_sound = 'sound/blank.ogg'
- harmful = FALSE
-
-/obj/item/ammo_casing/energy/flora/yield
- projectile_type = /obj/projectile/energy/florayield
- select_name = "yield"
-
-/obj/item/ammo_casing/energy/flora/mut
- projectile_type = /obj/projectile/energy/floramut
- select_name = "mutation"
-
-/obj/item/ammo_casing/energy/temp
- projectile_type = /obj/projectile/temp
- select_name = "freeze"
- e_cost = 250
- fire_sound = 'sound/blank.ogg'
-
-/obj/item/ammo_casing/energy/temp/hot
- projectile_type = /obj/projectile/temp/hot
- select_name = "bake"
-
-/obj/item/ammo_casing/energy/meteor
- projectile_type = /obj/projectile/meteor
- select_name = "goddamn meteor"
-
-/obj/item/ammo_casing/energy/trap
- projectile_type = /obj/projectile/energy/trap
- select_name = "snare"
- harmful = FALSE
-
-/obj/item/ammo_casing/energy/instakill
- projectile_type = /obj/projectile/beam/instakill
- e_cost = 0
- select_name = "DESTROY"
-
-/obj/item/ammo_casing/energy/instakill/blue
- projectile_type = /obj/projectile/beam/instakill/blue
-
-/obj/item/ammo_casing/energy/instakill/red
- projectile_type = /obj/projectile/beam/instakill/red
-
-
-/obj/item/ammo_casing/energy/shrink
- projectile_type = /obj/projectile/beam/shrink
- select_name = "shrink ray"
- e_cost = 200
diff --git a/code/modules/projectiles/ammunition/energy/stun.dm b/code/modules/projectiles/ammunition/energy/stun.dm
deleted file mode 100644
index 9e23ed0a52..0000000000
--- a/code/modules/projectiles/ammunition/energy/stun.dm
+++ /dev/null
@@ -1,26 +0,0 @@
-/obj/item/ammo_casing/energy/electrode
- projectile_type = /obj/projectile/energy/electrode
- select_name = "stun"
- fire_sound = 'sound/blank.ogg'
- e_cost = 200
- harmful = FALSE
-
-/obj/item/ammo_casing/energy/electrode/spec
- e_cost = 100
-
-/obj/item/ammo_casing/energy/electrode/gun
- fire_sound = 'sound/blank.ogg'
- e_cost = 100
-
-/obj/item/ammo_casing/energy/electrode/old
- e_cost = 1000
-
-/obj/item/ammo_casing/energy/disabler
- projectile_type = /obj/projectile/beam/disabler
- select_name = "disable"
- e_cost = 50
- fire_sound = 'sound/blank.ogg'
- harmful = FALSE
-
-/obj/item/ammo_casing/energy/disabler/hos
- e_cost = 60
diff --git a/code/modules/projectiles/ammunition/special/magic.dm b/code/modules/projectiles/ammunition/special/magic.dm
deleted file mode 100644
index b445196352..0000000000
--- a/code/modules/projectiles/ammunition/special/magic.dm
+++ /dev/null
@@ -1,60 +0,0 @@
-/obj/item/ammo_casing/magic
- name = "magic casing"
- desc = ""
- projectile_type = /obj/projectile/magic
- firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/magic
- heavy_metal = FALSE
-
-/obj/item/ammo_casing/magic/change
- projectile_type = /obj/projectile/magic/change
-
-/obj/item/ammo_casing/magic/heal
- projectile_type = /obj/projectile/magic/resurrection
- harmful = FALSE
-
-/obj/item/ammo_casing/magic/death
- projectile_type = /obj/projectile/magic/death
-
-/obj/item/ammo_casing/magic/teleport
- projectile_type = /obj/projectile/magic/teleport
- harmful = FALSE
-
-/obj/item/ammo_casing/magic/safety
- projectile_type = /obj/projectile/magic/safety
- harmful = FALSE
-
-/obj/item/ammo_casing/magic/fireball
- projectile_type = /obj/projectile/magic/aoe/fireball
-
-/obj/item/ammo_casing/magic/chaos
- projectile_type = /obj/projectile/magic
-
-/obj/item/ammo_casing/magic/spellblade
- projectile_type = /obj/projectile/magic/spellblade
-
-/obj/item/ammo_casing/magic/arcane_barrage
- projectile_type = /obj/projectile/magic/arcane_barrage
-
-/obj/item/ammo_casing/magic/honk
- projectile_type = /obj/projectile/bullet/honker
-
-/obj/item/ammo_casing/magic/locker
- projectile_type = /obj/projectile/magic/locker
-
-/obj/item/ammo_casing/magic/flying
- projectile_type = /obj/projectile/magic/flying
-
-/obj/item/ammo_casing/magic/bounty
- projectile_type = /obj/projectile/magic/bounty
-
-/obj/item/ammo_casing/magic/antimagic
- projectile_type = /obj/projectile/magic/antimagic
-
-/obj/item/ammo_casing/magic/sapping
- projectile_type = /obj/projectile/magic/sapping
-
-/obj/item/ammo_casing/magic/necropotence
- projectile_type = /obj/projectile/magic/necropotence
-
-/obj/item/ammo_casing/magic/wipe
- projectile_type = /obj/projectile/magic/wipe
diff --git a/code/modules/projectiles/ammunition/special/syringe.dm b/code/modules/projectiles/ammunition/special/syringe.dm
deleted file mode 100644
index 925fb0a6b1..0000000000
--- a/code/modules/projectiles/ammunition/special/syringe.dm
+++ /dev/null
@@ -1,61 +0,0 @@
-/obj/item/ammo_casing/syringegun
- name = "syringe gun spring"
- desc = ""
- projectile_type = /obj/projectile/bullet/dart/syringe
- firing_effect_type = null
-
-/obj/item/ammo_casing/syringegun/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
- if(!BB)
- return
- if(istype(loc, /obj/item/gun/syringe))
- var/obj/item/gun/syringe/SG = loc
- if(!SG.syringes.len)
- return
-
- var/obj/item/reagent_containers/syringe/S = SG.syringes[1]
-
- S.reagents.trans_to(BB, S.reagents.total_volume, transfered_by = user)
- BB.name = S.name
- var/obj/projectile/bullet/dart/D = BB
- D.piercing = S.proj_piercing
- SG.syringes.Remove(S)
- qdel(S)
- ..()
-
-/obj/item/ammo_casing/chemgun
- name = "dart synthesiser"
- desc = ""
- projectile_type = /obj/projectile/bullet/dart
- firing_effect_type = null
-
-/obj/item/ammo_casing/chemgun/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
- if(!BB)
- return
- if(istype(loc, /obj/item/gun/chem))
- var/obj/item/gun/chem/CG = loc
- if(CG.syringes_left <= 0)
- return
- CG.reagents.trans_to(BB, 15, transfered_by = user)
- BB.name = "chemical dart"
- CG.syringes_left--
- ..()
-
-/obj/item/ammo_casing/dnainjector
- name = "rigged syringe gun spring"
- desc = ""
- projectile_type = /obj/projectile/bullet/dnainjector
- firing_effect_type = null
-
-/obj/item/ammo_casing/dnainjector/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
- if(!BB)
- return
- if(istype(loc, /obj/item/gun/syringe/dna))
- var/obj/item/gun/syringe/dna/SG = loc
- if(!SG.syringes.len)
- return
-
- var/obj/item/dnainjector/S = popleft(SG.syringes)
- var/obj/projectile/bullet/dnainjector/D = BB
- S.forceMove(D)
- D.injector = S
- ..()
diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_ammo_box.dm
similarity index 99%
rename from code/modules/projectiles/boxes_magazines/_box_magazine.dm
rename to code/modules/projectiles/boxes_magazines/_ammo_box.dm
index 3e3b91747a..be0a747445 100644
--- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm
+++ b/code/modules/projectiles/boxes_magazines/_ammo_box.dm
@@ -8,7 +8,6 @@
item_state = "syringe_kit"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- custom_materials = list(/datum/material/iron = 30000)
throwforce = 2
w_class = WEIGHT_CLASS_TINY
throw_speed = 1
diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
deleted file mode 100644
index 384def2110..0000000000
--- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
+++ /dev/null
@@ -1,84 +0,0 @@
-/obj/item/ammo_box/a357
- name = "speed loader (.357)"
- desc = ""
- icon_state = "357"
- ammo_type = /obj/item/ammo_casing/a357
- max_ammo = 7
- multiple_sprites = AMMO_BOX_PER_BULLET
- item_flags = NO_MAT_REDEMPTION
-
-/obj/item/ammo_box/c38
- name = "speed loader (.38)"
- desc = ""
- icon_state = "38"
- ammo_type = /obj/item/ammo_casing/c38
- max_ammo = 6
- multiple_sprites = AMMO_BOX_PER_BULLET
- custom_materials = list(/datum/material/iron = 20000)
-
-/obj/item/ammo_box/c38/trac
- name = "speed loader (.38 TRAC)"
- desc = ""
- ammo_type = /obj/item/ammo_casing/c38/trac
-
-/obj/item/ammo_box/c38/hotshot
- name = "speed loader (.38 Hot Shot)"
- desc = ""
- ammo_type = /obj/item/ammo_casing/c38/hotshot
-
-/obj/item/ammo_box/c38/iceblox
- name = "speed loader (.38 Iceblox)"
- desc = ""
- ammo_type = /obj/item/ammo_casing/c38/iceblox
-
-/obj/item/ammo_box/c9mm
- name = "ammo box (9mm)"
- icon_state = "9mmbox"
- ammo_type = /obj/item/ammo_casing/c9mm
- max_ammo = 30
-
-/obj/item/ammo_box/c10mm
- name = "ammo box (10mm)"
- icon_state = "10mmbox"
- ammo_type = /obj/item/ammo_casing/c10mm
- max_ammo = 20
-
-/obj/item/ammo_box/c45
- name = "ammo box (.45)"
- icon_state = "45box"
- ammo_type = /obj/item/ammo_casing/c45
- max_ammo = 20
-
-/obj/item/ammo_box/a40mm
- name = "ammo box (40mm grenades)"
- icon_state = "40mm"
- ammo_type = /obj/item/ammo_casing/a40mm
- max_ammo = 4
- multiple_sprites = AMMO_BOX_PER_BULLET
-
-/obj/item/ammo_box/a762
- name = "stripper clip (7.62mm)"
- desc = ""
- icon_state = "762"
- ammo_type = /obj/item/ammo_casing/a762
- max_ammo = 5
- multiple_sprites = AMMO_BOX_PER_BULLET
-
-/obj/item/ammo_box/n762
- name = "ammo box (7.62x38mmR)"
- icon_state = "10mmbox"
- ammo_type = /obj/item/ammo_casing/n762
- max_ammo = 14
-
-/obj/item/ammo_box/foambox
- name = "ammo box (Foam Darts)"
- icon = 'icons/obj/guns/toy.dmi'
- icon_state = "foambox"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart
- max_ammo = 40
- custom_materials = list(/datum/material/iron = 500)
-
-/obj/item/ammo_box/foambox/riot
- icon_state = "foambox_riot"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
- custom_materials = list(/datum/material/iron = 50000)
diff --git a/code/modules/projectiles/boxes_magazines/external/grenade.dm b/code/modules/projectiles/boxes_magazines/external/grenade.dm
deleted file mode 100644
index 69e56bc649..0000000000
--- a/code/modules/projectiles/boxes_magazines/external/grenade.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/obj/item/ammo_box/magazine/m75
- name = "specialized magazine (.75)"
- icon_state = "75"
- ammo_type = /obj/item/ammo_casing/caseless/a75
- caliber = "75"
- multiple_sprites = AMMO_BOX_FULL_EMPTY
- max_ammo = 8
-
diff --git a/code/modules/projectiles/boxes_magazines/external/lmg.dm b/code/modules/projectiles/boxes_magazines/external/lmg.dm
deleted file mode 100644
index 2b192f598c..0000000000
--- a/code/modules/projectiles/boxes_magazines/external/lmg.dm
+++ /dev/null
@@ -1,22 +0,0 @@
-/obj/item/ammo_box/magazine/mm712x82
- name = "box magazine (7.12x82mm)"
- icon_state = "a762-50"
- ammo_type = /obj/item/ammo_casing/mm712x82
- caliber = "mm71282"
- max_ammo = 50
-
-/obj/item/ammo_box/magazine/mm712x82/hollow
- name = "box magazine (Hollow-Point 7.12x82mm)"
- ammo_type = /obj/item/ammo_casing/mm712x82/hollow
-
-/obj/item/ammo_box/magazine/mm712x82/ap
- name = "box magazine (Armor Penetrating 7.12x82mm)"
- ammo_type = /obj/item/ammo_casing/mm712x82/ap
-
-/obj/item/ammo_box/magazine/mm712x82/incen
- name = "box magazine (Incendiary 7.12x82mm)"
- ammo_type = /obj/item/ammo_casing/mm712x82/incen
-
-/obj/item/ammo_box/magazine/mm712x82/update_icon()
- ..()
- icon_state = "a762-[round(ammo_count(),10)]"
diff --git a/code/modules/projectiles/boxes_magazines/external/pistol.dm b/code/modules/projectiles/boxes_magazines/external/pistol.dm
deleted file mode 100644
index f6077a037e..0000000000
--- a/code/modules/projectiles/boxes_magazines/external/pistol.dm
+++ /dev/null
@@ -1,59 +0,0 @@
-/obj/item/ammo_box/magazine/m10mm
- name = "pistol magazine (10mm)"
- desc = ""
- icon_state = "9x19p"
- ammo_type = /obj/item/ammo_casing/c10mm
- caliber = "10mm"
- max_ammo = 8
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
-/obj/item/ammo_box/magazine/m10mm/fire
- name = "pistol magazine (10mm incendiary)"
- icon_state = "9x19pI"
- desc = ""
- ammo_type = /obj/item/ammo_casing/c10mm/fire
-
-/obj/item/ammo_box/magazine/m10mm/hp
- name = "pistol magazine (10mm HP)"
- icon_state = "9x19pH"
- desc= "A gun magazine. Loaded with hollow-point rounds, extremely effective against unarmored targets, but nearly useless against protective clothing."
- ammo_type = /obj/item/ammo_casing/c10mm/hp
-
-/obj/item/ammo_box/magazine/m10mm/ap
- name = "pistol magazine (10mm AP)"
- icon_state = "9x19pA"
- desc= "A gun magazine. Loaded with rounds which penetrate armour, but are less effective against normal targets."
- ammo_type = /obj/item/ammo_casing/c10mm/ap
-
-/obj/item/ammo_box/magazine/m45
- name = "handgun magazine (.45)"
- icon_state = "45-8"
- ammo_type = /obj/item/ammo_casing/c45
- caliber = ".45"
- max_ammo = 8
-
-/obj/item/ammo_box/magazine/m45/update_icon()
- ..()
- if (ammo_count() >= 8)
- icon_state = "45-8"
- else
- icon_state = "45-[ammo_count()]"
-
-/obj/item/ammo_box/magazine/pistolm9mm
- name = "pistol magazine (9mm)"
- icon_state = "9x19p-8"
- ammo_type = /obj/item/ammo_casing/c9mm
- caliber = "9mm"
- max_ammo = 15
-
-/obj/item/ammo_box/magazine/pistolm9mm/update_icon()
- ..()
- icon_state = "9x19p-[ammo_count() ? "8" : "0"]"
-
-/obj/item/ammo_box/magazine/m50
- name = "handgun magazine (.50ae)"
- icon_state = "50ae"
- ammo_type = /obj/item/ammo_casing/a50AE
- caliber = ".50"
- max_ammo = 7
- multiple_sprites = AMMO_BOX_PER_BULLET
diff --git a/code/modules/projectiles/boxes_magazines/external/rechargable.dm b/code/modules/projectiles/boxes_magazines/external/rechargable.dm
deleted file mode 100644
index 18e4bda4cb..0000000000
--- a/code/modules/projectiles/boxes_magazines/external/rechargable.dm
+++ /dev/null
@@ -1,14 +0,0 @@
-/obj/item/ammo_box/magazine/recharge
- name = "power pack"
- desc = ""
- icon_state = "oldrifle-20"
- ammo_type = /obj/item/ammo_casing/caseless/laser
- caliber = "laser"
- max_ammo = 20
-
-/obj/item/ammo_box/magazine/recharge/update_icon()
- desc = ""
- icon_state = "oldrifle-[round(ammo_count(),4)]"
-
-/obj/item/ammo_box/magazine/recharge/attack_self() //No popping out the "bullets"
- return
diff --git a/code/modules/projectiles/boxes_magazines/external/rifle.dm b/code/modules/projectiles/boxes_magazines/external/rifle.dm
deleted file mode 100644
index ec1d1e0472..0000000000
--- a/code/modules/projectiles/boxes_magazines/external/rifle.dm
+++ /dev/null
@@ -1,22 +0,0 @@
-/obj/item/ammo_box/magazine/m10mm/rifle
- name = "rifle magazine (10mm)"
- desc = ""
- icon_state = "75-8"
- ammo_type = /obj/item/ammo_casing/c10mm
- caliber = "10mm"
- max_ammo = 10
-
-/obj/item/ammo_box/magazine/m10mm/rifle/update_icon()
- ..()
- if(ammo_count())
- icon_state = "75-8"
- else
- icon_state = "75-0"
-
-/obj/item/ammo_box/magazine/m556
- name = "toploader magazine (5.56mm)"
- icon_state = "5.56m"
- ammo_type = /obj/item/ammo_casing/a556
- caliber = "a556"
- max_ammo = 30
- multiple_sprites = AMMO_BOX_FULL_EMPTY
diff --git a/code/modules/projectiles/boxes_magazines/external/shotgun.dm b/code/modules/projectiles/boxes_magazines/external/shotgun.dm
deleted file mode 100644
index 9865f5b0c1..0000000000
--- a/code/modules/projectiles/boxes_magazines/external/shotgun.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/obj/item/ammo_box/magazine/m12g
- name = "shotgun magazine (12g buckshot slugs)"
- desc = ""
- icon_state = "m12gb"
- ammo_type = /obj/item/ammo_casing/shotgun/buckshot
- caliber = "shotgun"
- max_ammo = 8
-
-/obj/item/ammo_box/magazine/m12g/update_icon()
- ..()
- icon_state = "[initial(icon_state)]-[CEILING(ammo_count(FALSE)/8, 1)*8]"
-
-/obj/item/ammo_box/magazine/m12g/stun
- name = "shotgun magazine (12g taser slugs)"
- icon_state = "m12gs"
- ammo_type = /obj/item/ammo_casing/shotgun/stunslug
-
-/obj/item/ammo_box/magazine/m12g/slug
- name = "shotgun magazine (12g slugs)"
- icon_state = "m12gb" //this may need an unique sprite
- ammo_type = /obj/item/ammo_casing/shotgun
-
-/obj/item/ammo_box/magazine/m12g/dragon
- name = "shotgun magazine (12g dragon's breath)"
- icon_state = "m12gf"
- ammo_type = /obj/item/ammo_casing/shotgun/dragonsbreath
-
-/obj/item/ammo_box/magazine/m12g/bioterror
- name = "shotgun magazine (12g bioterror)"
- icon_state = "m12gt"
- ammo_type = /obj/item/ammo_casing/shotgun/dart/bioterror
-
-/obj/item/ammo_box/magazine/m12g/meteor
- name = "shotgun magazine (12g meteor slugs)"
- icon_state = "m12gbc"
- ammo_type = /obj/item/ammo_casing/shotgun/meteorslug
diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm
deleted file mode 100644
index 291ec47fa8..0000000000
--- a/code/modules/projectiles/boxes_magazines/external/smg.dm
+++ /dev/null
@@ -1,76 +0,0 @@
-/obj/item/ammo_box/magazine/wt550m9
- name = "wt550 magazine (4.6x30mm)"
- icon_state = "46x30mmt-20"
- ammo_type = /obj/item/ammo_casing/c46x30mm
- caliber = "4.6x30mm"
- max_ammo = 20
-
-/obj/item/ammo_box/magazine/wt550m9/update_icon()
- ..()
- icon_state = "46x30mmt-[round(ammo_count(),4)]"
-
-/obj/item/ammo_box/magazine/wt550m9/wtap
- name = "wt550 magazine (Armour Piercing 4.6x30mm)"
- icon_state = "46x30mmtA-20"
- ammo_type = /obj/item/ammo_casing/c46x30mm/ap
-
-/obj/item/ammo_box/magazine/wt550m9/wtap/update_icon()
- ..()
- icon_state = "46x30mmtA-[round(ammo_count(),4)]"
-
-/obj/item/ammo_box/magazine/wt550m9/wtic
- name = "wt550 magazine (Incendiary 4.6x30mm)"
- icon_state = "46x30mmtI-20"
- ammo_type = /obj/item/ammo_casing/c46x30mm/inc
-
-/obj/item/ammo_box/magazine/wt550m9/wtic/update_icon()
- ..()
- icon_state = "46x30mmtI-[round(ammo_count(),4)]"
-
-/obj/item/ammo_box/magazine/uzim9mm
- name = "uzi magazine (9mm)"
- icon_state = "uzi9mm-32"
- ammo_type = /obj/item/ammo_casing/c9mm
- caliber = "9mm"
- max_ammo = 32
-
-/obj/item/ammo_box/magazine/uzim9mm/update_icon()
- ..()
- icon_state = "uzi9mm-[round(ammo_count(),4)]"
-
-/obj/item/ammo_box/magazine/smgm9mm
- name = "SMG magazine (9mm)"
- icon_state = "smg9mm-42"
- ammo_type = /obj/item/ammo_casing/c9mm
- caliber = "9mm"
- max_ammo = 21
-
-/obj/item/ammo_box/magazine/smgm9mm/update_icon()
- ..()
- icon_state = "smg9mm-[ammo_count() ? "42" : "0"]"
-
-/obj/item/ammo_box/magazine/smgm9mm/ap
- name = "SMG magazine (Armour Piercing 9mm)"
- ammo_type = /obj/item/ammo_casing/c9mm/ap
-
-/obj/item/ammo_box/magazine/smgm9mm/fire
- name = "SMG Magazine (Incendiary 9mm)"
- ammo_type = /obj/item/ammo_casing/c9mm/inc
-
-/obj/item/ammo_box/magazine/smgm45
- name = "SMG magazine (.45)"
- icon_state = "c20r45-24"
- ammo_type = /obj/item/ammo_casing/c45
- caliber = ".45"
- max_ammo = 24
-
-/obj/item/ammo_box/magazine/smgm45/update_icon()
- ..()
- icon_state = "c20r45-[round(ammo_count(),2)]"
-
-/obj/item/ammo_box/magazine/tommygunm45
- name = "drum magazine (.45)"
- icon_state = "drum45"
- ammo_type = /obj/item/ammo_casing/c45
- caliber = ".45"
- max_ammo = 50
diff --git a/code/modules/projectiles/boxes_magazines/external/sniper.dm b/code/modules/projectiles/boxes_magazines/external/sniper.dm
deleted file mode 100644
index 15bf5cb1c6..0000000000
--- a/code/modules/projectiles/boxes_magazines/external/sniper.dm
+++ /dev/null
@@ -1,27 +0,0 @@
-/obj/item/ammo_box/magazine/sniper_rounds
- name = "sniper rounds (.50)"
- icon_state = ".50mag"
- ammo_type = /obj/item/ammo_casing/p50
- max_ammo = 6
- caliber = ".50"
-
-/obj/item/ammo_box/magazine/sniper_rounds/update_icon()
- ..()
- if(ammo_count())
- icon_state = "[initial(icon_state)]-ammo"
- else
- icon_state = "[initial(icon_state)]"
-
-/obj/item/ammo_box/magazine/sniper_rounds/soporific
- name = "sniper rounds (Zzzzz)"
- desc = ""
- icon_state = "soporific"
- ammo_type = /obj/item/ammo_casing/p50/soporific
- max_ammo = 3
- caliber = ".50"
-
-/obj/item/ammo_box/magazine/sniper_rounds/penetrator
- name = "sniper rounds (penetrator)"
- desc = ""
- ammo_type = /obj/item/ammo_casing/p50/penetrator
- max_ammo = 5
diff --git a/code/modules/projectiles/boxes_magazines/external/toy.dm b/code/modules/projectiles/boxes_magazines/external/toy.dm
deleted file mode 100644
index 2369bc6ce3..0000000000
--- a/code/modules/projectiles/boxes_magazines/external/toy.dm
+++ /dev/null
@@ -1,59 +0,0 @@
-/obj/item/ammo_box/magazine/toy
- name = "foam force META magazine"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart
- caliber = "foam_force"
-
-/obj/item/ammo_box/magazine/toy/smg
- name = "foam force SMG magazine"
- icon_state = "smg9mm-42"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart
- max_ammo = 20
-
-/obj/item/ammo_box/magazine/toy/smg/update_icon()
- ..()
- if(ammo_count())
- icon_state = "smg9mm-42"
- else
- icon_state = "smg9mm-0"
-
-/obj/item/ammo_box/magazine/toy/smg/riot
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
-
-/obj/item/ammo_box/magazine/toy/pistol
- name = "foam force pistol magazine"
- icon_state = "9x19p"
- max_ammo = 8
- multiple_sprites = AMMO_BOX_FULL_EMPTY
-
-/obj/item/ammo_box/magazine/toy/pistol/riot
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
-
-/obj/item/ammo_box/magazine/toy/smgm45
- name = "donksoft SMG magazine"
- icon_state = "c20r45-toy"
- caliber = "foam_force"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart
- max_ammo = 20
-
-/obj/item/ammo_box/magazine/toy/smgm45/update_icon()
- ..()
- icon_state = "c20r45-[round(ammo_count(),2)]"
-
-/obj/item/ammo_box/magazine/toy/smgm45/riot
- icon_state = "c20r45-riot"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
-
-/obj/item/ammo_box/magazine/toy/m762
- name = "donksoft box magazine"
- icon_state = "a762-toy"
- caliber = "foam_force"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart
- max_ammo = 50
-
-/obj/item/ammo_box/magazine/toy/m762/update_icon()
- ..()
- icon_state = "a762-[round(ammo_count(),10)]"
-
-/obj/item/ammo_box/magazine/toy/m762/riot
- icon_state = "a762-riot"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
diff --git a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm b/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm
deleted file mode 100644
index 9af0b0e087..0000000000
--- a/code/modules/projectiles/boxes_magazines/internal/_cylinder.dm
+++ /dev/null
@@ -1,49 +0,0 @@
-/obj/item/ammo_box/magazine/internal/cylinder
- name = "revolver cylinder"
- ammo_type = /obj/item/ammo_casing/a357
- caliber = "357"
- max_ammo = 7
-
-/obj/item/ammo_box/magazine/internal/cylinder/get_round(keep = 0)
- rotate()
-
- var/b = stored_ammo[1]
- if(!keep)
- stored_ammo[1] = null
-
- return b
-
-/obj/item/ammo_box/magazine/internal/cylinder/proc/rotate()
- var/b = stored_ammo[1]
- stored_ammo.Cut(1,2)
- stored_ammo.Insert(0, b)
-
-/obj/item/ammo_box/magazine/internal/cylinder/proc/spin()
- for(var/i in 1 to rand(0, max_ammo*2))
- rotate()
-
-/obj/item/ammo_box/magazine/internal/cylinder/ammo_list(drop_list = FALSE)
- var/list/L = list()
- for(var/i=1 to stored_ammo.len)
- var/obj/item/ammo_casing/bullet = stored_ammo[i]
- if(bullet)
- L.Add(bullet)
- if(drop_list)//We have to maintain the list size, to emulate a cylinder
- stored_ammo[i] = null
- return L
-
-/obj/item/ammo_box/magazine/internal/cylinder/give_round(obj/item/ammo_casing/R, replace_spent = 0)
- if(!R || (caliber && R.caliber != caliber) || (!caliber && R.type != ammo_type))
- return FALSE
-
- for(var/i in 1 to stored_ammo.len)
- var/obj/item/ammo_casing/bullet = stored_ammo[i]
- if(!bullet || !bullet.BB) // found a spent ammo
- stored_ammo[i] = R
- R.forceMove(src)
-
- if(bullet)
- bullet.forceMove(drop_location())
- return TRUE
-
- return FALSE
diff --git a/code/modules/projectiles/boxes_magazines/internal/grenade.dm b/code/modules/projectiles/boxes_magazines/internal/grenade.dm
deleted file mode 100644
index 8b2ec9fca3..0000000000
--- a/code/modules/projectiles/boxes_magazines/internal/grenade.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-/obj/item/ammo_box/magazine/internal/cylinder/grenademulti
- name = "grenade launcher internal magazine"
- ammo_type = /obj/item/ammo_casing/a40mm
- caliber = "40mm"
- max_ammo = 6
-
-/obj/item/ammo_box/magazine/internal/grenadelauncher
- name = "grenade launcher internal magazine"
- ammo_type = /obj/item/ammo_casing/a40mm
- caliber = "40mm"
- max_ammo = 1
-
-/obj/item/ammo_box/magazine/internal/rocketlauncher
- name = "rocket launcher internal magazine"
- ammo_type = /obj/item/ammo_casing/caseless/rocket
- caliber = "84mm"
- max_ammo = 1
diff --git a/code/modules/projectiles/boxes_magazines/internal/misc.dm b/code/modules/projectiles/boxes_magazines/internal/misc.dm
deleted file mode 100644
index 4b405c0996..0000000000
--- a/code/modules/projectiles/boxes_magazines/internal/misc.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/obj/item/ammo_box/magazine/internal/minigun
- name = "gatling gun fusion core"
- ammo_type = /obj/item/ammo_casing/caseless/laser/gatling
- caliber = "gatling"
- max_ammo = 5000
diff --git a/code/modules/projectiles/boxes_magazines/internal/revolver.dm b/code/modules/projectiles/boxes_magazines/internal/revolver.dm
deleted file mode 100644
index 982d22493f..0000000000
--- a/code/modules/projectiles/boxes_magazines/internal/revolver.dm
+++ /dev/null
@@ -1,22 +0,0 @@
-/obj/item/ammo_box/magazine/internal/cylinder/rev38
- name = "detective revolver cylinder"
- ammo_type = /obj/item/ammo_casing/c38
- caliber = "38"
- max_ammo = 6
-
-/obj/item/ammo_box/magazine/internal/cylinder/rev762
- name = "\improper Nagant revolver cylinder"
- ammo_type = /obj/item/ammo_casing/n762
- caliber = "n762"
- max_ammo = 7
-
-/obj/item/ammo_box/magazine/internal/cylinder/rus357
- name = "\improper Russian revolver cylinder"
- ammo_type = /obj/item/ammo_casing/a357
- caliber = "357"
- max_ammo = 6
- multiload = 0
-
-/obj/item/ammo_box/magazine/internal/rus357/Initialize()
- stored_ammo += new ammo_type(src)
- . = ..()
diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm
deleted file mode 100644
index 1cd31c0f12..0000000000
--- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-/obj/item/ammo_box/magazine/internal/boltaction
- name = "bolt action rifle internal magazine"
- desc = ""
- ammo_type = /obj/item/ammo_casing/a762
- caliber = "a762"
- max_ammo = 5
- multiload = 1
-
-/obj/item/ammo_box/magazine/internal/boltaction/enchanted
- max_ammo = 1
- ammo_type = /obj/item/ammo_casing/a762/enchanted
-
-/obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage
- ammo_type = /obj/item/ammo_casing/magic/arcane_barrage
-
diff --git a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm
deleted file mode 100644
index 1fa3e6fffb..0000000000
--- a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm
+++ /dev/null
@@ -1,43 +0,0 @@
-/obj/item/ammo_box/magazine/internal/shot
- name = "shotgun internal magazine"
- ammo_type = /obj/item/ammo_casing/shotgun/beanbag
- caliber = "shotgun"
- max_ammo = 4
- multiload = 0
-
-/obj/item/ammo_box/magazine/internal/shot/tube
- name = "dual feed shotgun internal tube"
- ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
- max_ammo = 4
-
-/obj/item/ammo_box/magazine/internal/shot/lethal
- ammo_type = /obj/item/ammo_casing/shotgun/buckshot
-
-/obj/item/ammo_box/magazine/internal/shot/com
- name = "combat shotgun internal magazine"
- ammo_type = /obj/item/ammo_casing/shotgun/buckshot
- max_ammo = 6
-
-/obj/item/ammo_box/magazine/internal/shot/com/compact
- name = "compact combat shotgun internal magazine"
- ammo_type = /obj/item/ammo_casing/shotgun/buckshot
- max_ammo = 4
-
-/obj/item/ammo_box/magazine/internal/shot/dual
- name = "double-barrel shotgun internal magazine"
- max_ammo = 2
-
-/obj/item/ammo_box/magazine/internal/shot/improvised
- name = "improvised shotgun internal magazine"
- ammo_type = /obj/item/ammo_casing/shotgun/improvised
- max_ammo = 1
-
-/obj/item/ammo_box/magazine/internal/shot/riot
- name = "riot shotgun internal magazine"
- ammo_type = /obj/item/ammo_casing/shotgun/rubbershot
- max_ammo = 6
-
-/obj/item/ammo_box/magazine/internal/shot/bounty
- name = "triple-barrel shotgun internal magazine"
- ammo_type = /obj/item/ammo_casing/shotgun/incapacitate
- max_ammo = 3
diff --git a/code/modules/projectiles/boxes_magazines/internal/toy.dm b/code/modules/projectiles/boxes_magazines/internal/toy.dm
deleted file mode 100644
index 7a520c6a1f..0000000000
--- a/code/modules/projectiles/boxes_magazines/internal/toy.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-/obj/item/ammo_box/magazine/internal/shot/toy
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart
- caliber = "foam_force"
- max_ammo = 4
-
-/obj/item/ammo_box/magazine/internal/shot/toy/crossbow
- max_ammo = 5
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index f5b987d72c..c882f3a45d 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -9,7 +9,6 @@
item_state = "gun"
flags_1 = CONDUCT_1
slot_flags = ITEM_SLOT_BELT
- custom_materials = list(/datum/material/iron=2000)
w_class = WEIGHT_CLASS_NORMAL
possible_item_intents = list(INTENT_GENERIC, RANGED_FIRE)
throwforce = 5
@@ -23,126 +22,36 @@
var/vary_fire_sound = TRUE
var/fire_sound_volume = 50
var/dry_fire_sound = 'sound/blank.ogg'
- var/suppressed = null //whether or not a message is displayed when fired
- var/can_suppress = FALSE
- var/suppressed_sound = 'sound/blank.ogg'
- var/suppressed_volume = 60
- var/can_unsuppress = TRUE
var/recoil = 0 //boom boom shake the room
var/clumsy_check = TRUE
var/obj/item/ammo_casing/chambered = null
trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers
- var/sawn_desc = null //description change if weapon is sawn-off
- var/sawn_off = FALSE
- var/burst_size = 1 //how large a burst is
- var/fire_delay = 0 //rate of fire for burst firing and semi auto
- var/firing_burst = 0 //Prevent the weapon from firing again while already firing
- var/semicd = 0 //cooldown handler
- var/weapon_weight = WEAPON_LIGHT
- var/dual_wield_spread = 24 //additional spread when dual wielding
+
var/spread = 0 //Spread induced by the gun itself.
var/randomspread = 1 //Set to 0 for shotguns. This is used for weapons that don't fire all their bullets at once.
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
- var/obj/item/firing_pin/pin = /obj/item/firing_pin //standard firing pin for most guns
-
- var/can_flashlight = FALSE //if a flashlight can be added or removed if it already has one.
- var/obj/item/flashlight/seclite/gun_light
- var/mutable_appearance/flashlight_overlay
- var/datum/action/item_action/toggle_gunlight/alight
- var/gunlight_state = "flight"
-
- var/can_bayonet = FALSE //if a bayonet can be added or removed if it already has one.
- var/obj/item/kitchen/knife/bayonet
- var/mutable_appearance/knife_overlay
- var/knife_x_offset = 0
- var/knife_y_offset = 0
-
var/ammo_x_offset = 0 //used for positioning ammo count overlay on sprite
var/ammo_y_offset = 0
var/flight_x_offset = 0
var/flight_y_offset = 0
- //Zooming
- var/zoomable = FALSE //whether the gun generates a Zoom action on creation
- var/zoomed = FALSE //Zoom toggle
- var/zoom_amt = 3 //Distance in TURFs to move the user's screen forward (the "zoom" effect)
- var/zoom_out_amt = 0
- var/datum/action/toggle_scope_zoom/azoom
-
var/automatic = 0 //can gun use it, 0 is no, anything above 0 is the delay between clicks in ds
var/pb_knockback = 0
-/obj/item/gun/Initialize()
- . = ..()
- if(pin)
- pin = new pin(src)
- if(gun_light)
- alight = new(src)
- build_zooming()
-
/obj/item/gun/Destroy()
- if(isobj(pin)) //Can still be the initial path, then we skip
- QDEL_NULL(pin)
- if(gun_light)
- QDEL_NULL(gun_light)
- if(bayonet)
- QDEL_NULL(bayonet)
if(chambered) //Not all guns are chambered (EMP'ed energy guns etc)
QDEL_NULL(chambered)
- if(azoom)
- QDEL_NULL(azoom)
return ..()
/obj/item/gun/handle_atom_del(atom/A)
- if(A == pin)
- pin = null
if(A == chambered)
chambered = null
update_icon()
- if(A == bayonet)
- clear_bayonet()
- if(A == gun_light)
- clear_gunlight()
return ..()
-/obj/item/gun/CheckParts(list/parts_list)
- ..()
- var/obj/item/gun/G = locate(/obj/item/gun) in contents
- if(G)
- G.forceMove(loc)
- QDEL_NULL(G.pin)
- visible_message("[G] can now fit a new pin, but the old one was destroyed in the process.", null, null, 3)
- qdel(src)
-
-/obj/item/gun/examine(mob/user)
- . = ..()
-// if(pin)
-// . += "It has \a [pin] installed."
-// else
-// . += "It doesn't have a firing pin installed, and won't fire."
-
-// if(gun_light)
-// . += "It has \a [gun_light] [can_flashlight ? "" : "permanently "]mounted on it."
-// if(can_flashlight) //if it has a light and this is false, the light is permanent.
-// . += "[gun_light] looks like it can be unscrewed from [src]."
-// else if(can_flashlight)
-// . += "It has a mounting point for a seclite."
-
-// if(bayonet)
-// . += "It has \a [bayonet] [can_bayonet ? "" : "permanently "]affixed to it."
-// if(can_bayonet) //if it has a bayonet and this is false, the bayonet is permanent.
-// . += "[bayonet] looks like it can be unscrewed from [src]."
-// else if(can_bayonet)
-// . += "It has a bayonet lug on it."
-
-/obj/item/gun/equipped(mob/living/user, slot)
- . = ..()
- if(zoomed && user.get_active_held_item() != src)
- zoom(user, FALSE) //we can only stay zoomed in if it's in our hands //yeah and we only unzoom if we're actually zoomed using the gun!!
-
//called after the gun has successfully fired its chambered ammo.
/obj/item/gun/proc/process_chamber()
return FALSE
@@ -161,24 +70,11 @@
if(recoil)
shake_camera(user, recoil + 1, recoil)
- if(suppressed)
- playsound(user, suppressed_sound, suppressed_volume, vary_fire_sound, ignore_walls = FALSE)
- else
- playsound(user, fire_sound, fire_sound_volume, vary_fire_sound)
- if(message)
-/* if(pointblank)
- user.visible_message("[user] shoots [src] point blank at [pbtarget]!", \
- "I shoot [src] point blank at [pbtarget]!", \
- COMBAT_MESSAGE_RANGE, pbtarget)
- to_chat(pbtarget, "[user] shoots [src] point blank at me!")
- if(pb_knockback > 0)
- var/atom/throw_target = get_edge_target_turf(pbtarget, user.dir)
- pbtarget.throw_at(throw_target, pb_knockback, 2)
-
- else*/
- user.visible_message("[user] shoots [src]!", \
- "I shoot [src]!", \
- COMBAT_MESSAGE_RANGE)
+ playsound(user, fire_sound, fire_sound_volume, vary_fire_sound)
+ if(message)
+ user.visible_message("[user] shoots [src]!", \
+ "I shoot [src]!", \
+ COMBAT_MESSAGE_RANGE)
/obj/item/gun/emp_act(severity)
. = ..()
@@ -192,8 +88,6 @@
if(!target)
testing("no target")
return
- if(firing_burst)
- return
if(!user?.used_intent.tranged) //melee attack
return
if(flag) //It's adjacent, is the user, or is on the user's person
@@ -231,301 +125,58 @@
process_fire(user, user, FALSE, params, shot_leg)
user.dropItemToGround(src, TRUE)
return
- var/obj/item/bodypart/other_hand = user.has_hand_for_held_index(user.get_inactive_hand_index()) //returns non-disabled inactive hands
- if(weapon_weight == WEAPON_HEAVY && (user.get_inactive_held_item() || !other_hand))
- to_chat(user, "I need two hands to fire \the [src]!")
- return
- //DUAL (or more!) WIELDING
- var/bonus_spread = 0
- var/loop_counter = 0
- if(ishuman(user) && user.used_intent.type == INTENT_HARM)
- var/mob/living/carbon/human/H = user
- for(var/obj/item/gun/G in H.held_items)
- if(G == src || G.weapon_weight >= WEAPON_MEDIUM)
- continue
- else if(G.can_trigger_gun(user))
- bonus_spread += dual_wield_spread
- loop_counter++
- addtimer(CALLBACK(G, TYPE_PROC_REF(/obj/item/gun, process_fire), target, user, TRUE, params, null, bonus_spread), loop_counter)
+ return process_fire(target, user, TRUE, params, null, 0)
- return process_fire(target, user, TRUE, params, null, bonus_spread)
-
-
-
-/obj/item/gun/can_trigger_gun(mob/living/user)
- . = ..()
- if(!handle_pins(user))
- return FALSE
-
-/obj/item/gun/proc/handle_pins(mob/living/user)
- if(pin)
- if(pin.pin_auth(user) || (pin.obj_flags & EMAGGED))
- return TRUE
- else
- pin.auth_fail(user)
- return FALSE
- else
- to_chat(user, "[src]'s trigger is locked. This weapon doesn't have a firing pin installed!")
- return FALSE
/obj/item/gun/proc/recharge_newshot()
return
-/obj/item/gun/proc/process_burst(mob/living/user, atom/target, message = TRUE, params=null, zone_override = "", sprd = 0, randomized_gun_spread = 0, randomized_bonus_spread = 0, rand_spr = 0, iteration = 0)
- if(!user || !firing_burst)
- firing_burst = FALSE
- return FALSE
- if(chambered && chambered.BB)
- if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal.
- if(chambered.harmful) // Is the bullet chambered harmful?
- to_chat(user, "[src] is lethally chambered! You don't want to risk harming anyone...")
- return
- if(randomspread)
- sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread))
- else //Smart spread
- sprd = round((((rand_spr/burst_size) * iteration) - (0.5 + (rand_spr * 0.25))) * (randomized_gun_spread + randomized_bonus_spread))
- before_firing(target,user)
- if(!chambered.fire_casing(target, user, params, ,suppressed, zone_override, sprd, src))
- shoot_with_empty_chamber(user)
- firing_burst = FALSE
- return FALSE
- else
-// if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot
-// shoot_live_shot(user, 1, target, message)
-// else
- shoot_live_shot(user, 0, target, message)
- if (iteration >= burst_size)
- firing_burst = FALSE
- else
- shoot_with_empty_chamber(user)
- firing_burst = FALSE
- return FALSE
- process_chamber()
- update_icon()
- return TRUE
/obj/item/gun/proc/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
add_fingerprint(user)
- if(semicd)
- return
-
var/sprd = 0
var/randomized_gun_spread = 0
- var/rand_spr = rand()
if(spread)
randomized_gun_spread = rand(0,spread)
if(HAS_TRAIT(user, TRAIT_POOR_AIM)) //nice shootin' tex
bonus_spread += 25
var/randomized_bonus_spread = rand(0, bonus_spread)
- if(burst_size > 1)
- firing_burst = TRUE
- for(var/i = 1 to burst_size)
- addtimer(CALLBACK(src, PROC_REF(process_burst), user, target, message, params, zone_override, sprd, randomized_gun_spread, randomized_bonus_spread, rand_spr, i), fire_delay * (i - 1))
- else
- if(chambered)
- if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal.
- if(chambered.harmful) // Is the bullet chambered harmful?
- to_chat(user, "[src] is lethally chambered! You don't want to risk harming anyone...")
- return
- sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread))
- before_firing(target,user)
- if(!chambered.fire_casing(target, user, params, , suppressed, zone_override, sprd, src))
- shoot_with_empty_chamber(user)
+ if(chambered)
+ if(HAS_TRAIT(user, TRAIT_PACIFISM)) // If the user has the pacifist trait, then they won't be able to fire [src] if the round chambered inside of [src] is lethal.
+ if(chambered.harmful) // Is the bullet chambered harmful?
+ to_chat(user, "[src] is lethally chambered! You don't want to risk harming anyone...")
return
- else
-// if(get_dist(user, target) <= 1) //Making sure whether the target is in vicinity for the pointblank shot
-// shoot_live_shot(user, 1, target, message)
-// else
- shoot_live_shot(user, 0, target, message)
- else
+ sprd = round((rand() - 0.5) * DUALWIELD_PENALTY_EXTRA_MULTIPLIER * (randomized_gun_spread + randomized_bonus_spread))
+ before_firing(target,user)
+ if(!chambered.fire_casing(target, user, params, , FALSE, zone_override, sprd, src))
shoot_with_empty_chamber(user)
return
- process_chamber()
- update_icon()
- semicd = TRUE
- addtimer(CALLBACK(src, PROC_REF(reset_semicd)), fire_delay)
+ else
+ shoot_live_shot(user, 0, target, message)
+ else
+ shoot_with_empty_chamber(user)
+ return
+ process_chamber()
+ update_icon()
if(user)
user.update_inv_hands()
SSblackbox.record_feedback("tally", "gun_fired", 1, type)
return TRUE
-/obj/item/gun/update_icon()
- ..()
-
-
-/obj/item/gun/proc/reset_semicd()
- semicd = FALSE
-
-/obj/item/gun/attack(mob/M as mob, mob/user)
- if(!user.used_intent.tranged) //Flogging
- if(bayonet)
- M.attackby(bayonet, user)
- return
- else
- return ..()
- return
-
-/obj/item/gun/attack_obj(obj/O, mob/user)
- if(!user.used_intent.tranged)
- if(bayonet)
- O.attackby(bayonet, user)
- return
- else
- return ..()
- return
/obj/item/gun/attackby(obj/item/I, mob/user, params)
if(!user.used_intent.tranged)
return ..()
- else if(istype(I, /obj/item/flashlight/seclite))
- if(!can_flashlight)
- return ..()
- var/obj/item/flashlight/seclite/S = I
- if(!gun_light)
- if(!user.transferItemToLoc(I, src))
- return
- to_chat(user, "I click [S] into place on [src].")
- if(S.on)
- set_light(0)
- gun_light = S
- update_gunlight()
- alight = new(src)
- if(loc == user)
- alight.Grant(user)
- else if(istype(I, /obj/item/kitchen/knife))
- var/obj/item/kitchen/knife/K = I
- if(!can_bayonet || !K.bayonet || bayonet) //ensure the gun has an attachment point available, and that the knife is compatible with it.
- return ..()
- if(!user.transferItemToLoc(I, src))
- return
- to_chat(user, "I attach [K] to [src]'s bayonet lug.")
- bayonet = K
- var/state = "bayonet" //Generic state.
- if(bayonet.icon_state in icon_states('icons/obj/guns/bayonets.dmi')) //Snowflake state?
- state = bayonet.icon_state
- var/icon/bayonet_icons = 'icons/obj/guns/bayonets.dmi'
- knife_overlay = mutable_appearance(bayonet_icons, state)
- knife_overlay.pixel_x = knife_x_offset
- knife_overlay.pixel_y = knife_y_offset
- add_overlay(knife_overlay, TRUE)
else
return ..()
-/obj/item/gun/screwdriver_act(mob/living/user, obj/item/I)
- . = ..()
- if(.)
- return
- if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
- return
- if((can_flashlight && gun_light) && (can_bayonet && bayonet)) //give them a choice instead of removing both
- var/list/possible_items = list(gun_light, bayonet)
- var/obj/item/item_to_remove = input(user, "Select an attachment to remove", "Attachment Removal") as null|obj in sortNames(possible_items)
- if(!item_to_remove || !user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK))
- return
- return remove_gun_attachment(user, I, item_to_remove)
-
- else if(gun_light && can_flashlight) //if it has a gun_light and can_flashlight is false, the flashlight is permanently attached.
- return remove_gun_attachment(user, I, gun_light, "unscrewed")
-
- else if(bayonet && can_bayonet) //if it has a bayonet, and the bayonet can be removed
- return remove_gun_attachment(user, I, bayonet, "unfix")
-
-/obj/item/gun/proc/remove_gun_attachment(mob/living/user, obj/item/tool_item, obj/item/item_to_remove, removal_verb)
- if(tool_item)
- tool_item.play_tool_sound(src)
- to_chat(user, "I [removal_verb ? removal_verb : "remove"] [item_to_remove] from [src].")
- item_to_remove.forceMove(drop_location())
-
- if(Adjacent(user))
- user.put_in_hands(item_to_remove)
-
- if(item_to_remove == bayonet)
- return clear_bayonet()
- else if(item_to_remove == gun_light)
- return clear_gunlight()
-
-/obj/item/gun/proc/clear_bayonet()
- if(!bayonet)
- return
- bayonet = null
- if(knife_overlay)
- cut_overlay(knife_overlay, TRUE)
- knife_overlay = null
- return TRUE
-
-/obj/item/gun/proc/clear_gunlight()
- if(!gun_light)
- return
- var/obj/item/flashlight/seclite/removed_light = gun_light
- gun_light = null
- update_gunlight()
- removed_light.update_brightness()
- QDEL_NULL(alight)
- return TRUE
-
-/obj/item/gun/ui_action_click(mob/user, actiontype)
- if(istype(actiontype, alight))
- toggle_gunlight()
- else
- ..()
-
-/obj/item/gun/proc/toggle_gunlight()
- if(!gun_light)
- return
-
- var/mob/living/carbon/human/user = usr
- gun_light.on = !gun_light.on
- to_chat(user, "I toggle the gunlight [gun_light.on ? "on":"off"].")
-
- playsound(user, 'sound/blank.ogg', 100, TRUE)
- update_gunlight()
-
-/obj/item/gun/proc/update_gunlight()
- if(gun_light)
- if(gun_light.on)
- set_light(gun_light.light_outer_range)
- else
- set_light(0)
- cut_overlays(flashlight_overlay, TRUE)
- var/state = "[gunlight_state][gun_light.on? "_on":""]" //Generic state.
- if(gun_light.icon_state in icon_states('icons/obj/guns/flashlights.dmi')) //Snowflake state?
- state = gun_light.icon_state
- flashlight_overlay = mutable_appearance('icons/obj/guns/flashlights.dmi', state)
- flashlight_overlay.pixel_x = flight_x_offset
- flashlight_overlay.pixel_y = flight_y_offset
- add_overlay(flashlight_overlay, TRUE)
- add_overlay(knife_overlay, TRUE)
- else
- set_light(0)
- cut_overlays(flashlight_overlay, TRUE)
- flashlight_overlay = null
- update_icon(TRUE)
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
-
-/obj/item/gun/pickup(mob/user)
- ..()
- if(azoom)
- azoom.Grant(user)
-
-/obj/item/gun/dropped(mob/user)
- . = ..()
- if(azoom)
- azoom.Remove(user)
- if(zoomed)
- zoom(user,FALSE)
-
/obj/item/gun/proc/handle_suicide(mob/living/carbon/human/user, mob/living/carbon/human/target, params, bypass_timer)
if(!ishuman(user) || !ishuman(target))
return
- if(semicd)
- return
-
if(user == target)
target.visible_message("[user] sticks [src] in [user.p_their()] mouth, ready to pull the trigger...", \
"I stick [src] in your mouth, ready to pull the trigger...")
@@ -533,19 +184,14 @@
target.visible_message("[user] points [src] at [target]'s head, ready to pull the trigger...", \
"[user] points [src] at your head, ready to pull the trigger...")
- semicd = TRUE
-
if(!bypass_timer && (!do_mob(user, target, 120) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH))
if(user)
if(user == target)
user.visible_message("[user] decided not to shoot.")
else if(target && target.Adjacent(user))
target.visible_message("[user] has decided to spare [target]", "[user] has decided to spare your life!")
- semicd = FALSE
return
- semicd = FALSE
-
target.visible_message("[user] pulls the trigger!", "[(user == target) ? "You pull" : "[user] pulls"] the trigger!")
if(chambered && chambered.BB)
@@ -553,78 +199,6 @@
process_fire(target, user, TRUE, params, BODY_ZONE_HEAD)
-/obj/item/gun/proc/unlock() //used in summon guns and as a convience for admins
- if(pin)
- qdel(pin)
- pin = new /obj/item/firing_pin
-
//Happens before the actual projectile creation
/obj/item/gun/proc/before_firing(atom/target,mob/user)
return
-
-/////////////
-// ZOOMING //
-/////////////
-
-/datum/action/toggle_scope_zoom
- name = "Toggle Scope"
- check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_LYING
- icon_icon = 'icons/mob/actions/actions_items.dmi'
- button_icon_state = "sniper_zoom"
- var/obj/item/gun/gun = null
-
-/datum/action/toggle_scope_zoom/Trigger()
- gun.zoom(owner)
-
-/datum/action/toggle_scope_zoom/IsAvailable()
- . = ..()
- if(!. && gun)
- gun.zoom(owner, FALSE)
-
-/datum/action/toggle_scope_zoom/Remove(mob/living/L)
- gun.zoom(L, FALSE)
- ..()
-
-
-/obj/item/gun/proc/zoom(mob/living/user, forced_zoom)
- if(!user || !user.client)
- return
-
- switch(forced_zoom)
- if(FALSE)
- zoomed = FALSE
- if(TRUE)
- zoomed = TRUE
- else
- zoomed = !zoomed
-
- if(zoomed)
- var/_x = 0
- var/_y = 0
- switch(user.dir)
- if(NORTH)
- _y = zoom_amt
- if(EAST)
- _x = zoom_amt
- if(SOUTH)
- _y = -zoom_amt
- if(WEST)
- _x = -zoom_amt
-
- user.client.change_view(zoom_out_amt)
- user.client.pixel_x = world.icon_size*_x
- user.client.pixel_y = world.icon_size*_y
- else
- user.client.change_view(CONFIG_GET(string/default_view))
- user.client.pixel_x = 0
- user.client.pixel_y = 0
- return zoomed
-
-//Proc, so that gun accessories/scopes/etc. can easily add zooming.
-/obj/item/gun/proc/build_zooming()
- if(azoom)
- return
-
- if(zoomable)
- azoom = new()
- azoom.gun = src
diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm
index 76e0f156b7..eba0aab545 100644
--- a/code/modules/projectiles/guns/ballistic.dm
+++ b/code/modules/projectiles/guns/ballistic.dm
@@ -1,3 +1,8 @@
+/obj/item/proc/can_trigger_gun(mob/living/user)
+ if(!user.can_use_guns(src))
+ return FALSE
+ return TRUE
+
///Subtype for any kind of ballistic gun
///This has a shitload of vars on it, and I'm sorry for that, but it does make making new subtypes really easy
/obj/item/gun/ballistic
@@ -48,7 +53,7 @@
///Whether the gun will spawn loaded with a magazine
var/spawnwithmagazine = TRUE
///Compatible magazines with the gun
- var/mag_type = /obj/item/ammo_box/magazine/m10mm //Removes the need for max_ammo and caliber info
+ var/mag_type =/obj/item/ammo_box/magazine/internal/shot/xbow //Removes the need for max_ammo and caliber info
///Whether the sprite has a visible magazine or not
var/mag_display = FALSE
///Whether the sprite has a visible ammo display or not
@@ -83,8 +88,6 @@
var/recent_rack = 0
///Whether the gun can be tacloaded by slapping a fresh magazine directly on it
var/tac_reloads = TRUE //Snowflake mechanic no more.
- ///Whether the gun can be sawn off by sawing tools
- var/can_be_sawn_off = FALSE
var/verbage = "load"
/obj/item/gun/ballistic/Initialize()
@@ -102,17 +105,12 @@
if (QDELETED(src))
return
..()
- if(current_skin)
- icon_state = "[unique_reskin[current_skin]][sawn_off ? "_sawn" : ""]"
- else
- icon_state = "[initial(icon_state)][sawn_off ? "_sawn" : ""]"
+ icon_state = initial(icon_state)
cut_overlays()
if (bolt_type == BOLT_TYPE_LOCKING)
add_overlay("[icon_state]_bolt[bolt_locked ? "_locked" : ""]")
if (bolt_type == BOLT_TYPE_OPEN && bolt_locked)
add_overlay("[icon_state]_bolt")
- if (suppressed)
- add_overlay("[icon_state]_suppressor")
if(!chambered && empty_indicator)
add_overlay("[icon_state]_empty")
if (magazine)
@@ -263,53 +261,14 @@
A.update_icon()
update_icon()
return
- if(istype(A, /obj/item/suppressor))
- var/obj/item/suppressor/S = A
- if(!can_suppress)
- to_chat(user, "I can't seem to figure out how to fit [S] on [src]!")
- return
- if(!user.is_holding(src))
- to_chat(user, "I need be holding [src] to fit [S] to it!")
- return
- if(suppressed)
- to_chat(user, "[src] already has a suppressor!")
- return
- if(user.transferItemToLoc(A, src))
- to_chat(user, "I screw \the [S] onto \the [src].")
- install_suppressor(A)
- return
- if (can_be_sawn_off)
- if (sawoff(user, A))
- return
user.update_inv_hands()
return FALSE
-/obj/item/gun/ballistic/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
- if (sawn_off)
- bonus_spread += SAWN_OFF_ACC_PENALTY
- . = ..()
-
-///Installs a new suppressor, assumes that the suppressor is already in the contents of src
-/obj/item/gun/ballistic/proc/install_suppressor(obj/item/suppressor/S)
- suppressed = S
- w_class += S.w_class //so pistols do not fit in pockets when suppressed
- update_icon()
/obj/item/gun/ballistic/AltClick(mob/user)
if (unique_reskin && !current_skin && user.canUseTopic(src, BE_CLOSE, NO_DEXTERITY))
reskin_obj(user)
return
- if(loc == user)
- if(suppressed && can_unsuppress)
- var/obj/item/suppressor/S = suppressed
- if(!user.is_holding(src))
- return ..()
- to_chat(user, "I unscrew \the [suppressed] from \the [src].")
- user.put_in_hands(suppressed)
- w_class -= S.w_class
- suppressed = null
- update_icon()
- return
///Prefire empty checks for the bolt drop
/obj/item/gun/ballistic/proc/prefire_empty_checks()
@@ -372,18 +331,6 @@
rack(user)
return
-
-/obj/item/gun/ballistic/examine(mob/user)
- . = ..()
-// var/count_chambered = !(bolt_type == BOLT_TYPE_NO_BOLT || bolt_type == BOLT_TYPE_OPEN)
-// . += "It has [get_ammo(count_chambered)] round\s remaining."
-// if (!chambered)
-// . += "It does not seem to have a round chambered."
-// if (bolt_locked)
-// . += "The [bolt_wording] is locked back and needs to be released before firing."
-// if (suppressed)
-// . += "It has a suppressor attached that can be removed with alt+click."
-
///Gets the number of bullets in the gun
/obj/item/gun/ballistic/proc/get_ammo(countchambered = TRUE)
var/boolets = 0 //mature var names for mature people
@@ -429,61 +376,3 @@
return (OXYLOSS)
#undef BRAINS_BLOWN_THROW_SPEED
#undef BRAINS_BLOWN_THROW_RANGE
-
-GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list(
-
- )))
-
-///Handles all the logic of sawing off guns,
-/obj/item/gun/ballistic/proc/sawoff(mob/user, obj/item/saw)
- if(!saw.get_sharpness() || !is_type_in_typecache(saw, GLOB.gun_saw_types) && !saw.tool_behaviour == TOOL_SAW) //needs to be sharp. Otherwise turned off eswords can cut this.
- return
- if(sawn_off)
- to_chat(user, "\The [src] is already shortened!")
- return
- if(bayonet)
- to_chat(user, "I cannot saw-off \the [src] with \the [bayonet] attached!")
- return
- user.changeNext_move(CLICK_CD_MELEE)
- user.visible_message("[user] begins to shorten \the [src].", "I begin to shorten \the [src]...")
-
- //if there's any live ammo inside the gun, makes it go off
- if(blow_up(user))
- user.visible_message("\The [src] goes off!", "\The [src] goes off in your face!")
- return
-
- if(do_after(user, 30, target = src))
- if(sawn_off)
- return
- user.visible_message("[user] shortens \the [src]!", "I shorten \the [src].")
- name = "sawn-off [src.name]"
- desc = sawn_desc
- w_class = WEIGHT_CLASS_NORMAL
- item_state = "gun"
- slot_flags &= ~ITEM_SLOT_BACK //you can't sling it on your back
- slot_flags |= ITEM_SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally)
- recoil = SAWN_OFF_RECOIL
- sawn_off = TRUE
- update_icon()
- return TRUE
-
-///used for sawing guns, causes the gun to fire without the input of the user
-/obj/item/gun/ballistic/proc/blow_up(mob/user)
- . = FALSE
- for(var/obj/item/ammo_casing/AC in magazine.stored_ammo)
- if(AC.BB)
- process_fire(user, user, FALSE)
- . = TRUE
-
-
-/obj/item/suppressor
- name = "suppressor"
- desc = ""
- icon = 'icons/obj/guns/projectile.dmi'
- icon_state = "suppressor"
- w_class = WEIGHT_CLASS_TINY
-
-
-/obj/item/suppressor/specialoffer
- name = "cheap suppressor"
- desc = ""
diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm
deleted file mode 100644
index 6b2bd1bb34..0000000000
--- a/code/modules/projectiles/guns/ballistic/automatic.dm
+++ /dev/null
@@ -1,344 +0,0 @@
-/obj/item/gun/ballistic/automatic
- w_class = WEIGHT_CLASS_NORMAL
- var/select = 1
- can_suppress = TRUE
- burst_size = 3
- fire_delay = 2
- actions_types = list(/datum/action/item_action/toggle_firemode)
- semi_auto = TRUE
- fire_sound = 'sound/blank.ogg'
- fire_sound_volume = 90
- vary_fire_sound = FALSE
- rack_sound = 'sound/blank.ogg'
- suppressed_sound = 'sound/blank.ogg'
-
-/obj/item/gun/ballistic/automatic/proto
- name = "\improper Nanotrasen Saber SMG"
- desc = ""
- icon_state = "saber"
- mag_type = /obj/item/ammo_box/magazine/smgm9mm
- pin = null
- bolt_type = BOLT_TYPE_LOCKING
- mag_display = TRUE
-
-/obj/item/gun/ballistic/automatic/proto/unrestricted
- pin = /obj/item/firing_pin
-
-/obj/item/gun/ballistic/automatic/update_icon()
- ..()
- if(!select)
- add_overlay("[initial(icon_state)]_semi")
- if(select == 1)
- add_overlay("[initial(icon_state)]_burst")
-
-/obj/item/gun/ballistic/automatic/ui_action_click(mob/user, actiontype)
- if(istype(actiontype, /datum/action/item_action/toggle_firemode))
- burst_select()
- else
- ..()
-
-/obj/item/gun/ballistic/automatic/proc/burst_select()
- var/mob/living/carbon/human/user = usr
- select = !select
- if(!select)
- burst_size = 1
- fire_delay = 0
- to_chat(user, "I switch to semi-automatic.")
- else
- burst_size = initial(burst_size)
- fire_delay = initial(fire_delay)
- to_chat(user, "I switch to [burst_size]-rnd burst.")
-
- playsound(user, 'sound/blank.ogg', 100, TRUE)
- update_icon()
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
-
-/obj/item/gun/ballistic/automatic/c20r
- name = "\improper C-20r SMG"
- desc = ""
- icon_state = "c20r"
- item_state = "c20r"
- mag_type = /obj/item/ammo_box/magazine/smgm45
- fire_delay = 2
- burst_size = 2
- pin = /obj/item/firing_pin/implant/pindicate
- can_bayonet = TRUE
- knife_x_offset = 26
- knife_y_offset = 12
- mag_display = TRUE
- mag_display_ammo = TRUE
- empty_indicator = TRUE
-
-/obj/item/gun/ballistic/automatic/c20r/unrestricted
- pin = /obj/item/firing_pin
-
-/obj/item/gun/ballistic/automatic/c20r/Initialize()
- . = ..()
- update_icon()
-
-/obj/item/gun/ballistic/automatic/wt550
- name = "security auto rifle"
- desc = ""
- icon_state = "wt550"
- item_state = "arg"
- mag_type = /obj/item/ammo_box/magazine/wt550m9
- fire_delay = 2
- can_suppress = FALSE
- burst_size = 0
- actions_types = list()
- can_bayonet = TRUE
- knife_x_offset = 25
- knife_y_offset = 12
- mag_display = TRUE
- mag_display_ammo = TRUE
- empty_indicator = TRUE
-
-/obj/item/gun/ballistic/automatic/mini_uzi
- name = "\improper Type U3 Uzi"
- desc = ""
- icon_state = "miniuzi"
- mag_type = /obj/item/ammo_box/magazine/uzim9mm
- burst_size = 2
- bolt_type = BOLT_TYPE_OPEN
- mag_display = TRUE
- rack_sound = 'sound/blank.ogg'
-
-/obj/item/gun/ballistic/automatic/m90
- name = "\improper M-90gl Carbine"
- desc = ""
- icon_state = "m90"
- item_state = "m90"
- mag_type = /obj/item/ammo_box/magazine/m556
- can_suppress = FALSE
- var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel
- burst_size = 3
- fire_delay = 2
- pin = /obj/item/firing_pin/implant/pindicate
- mag_display = TRUE
- empty_indicator = TRUE
- fire_sound = 'sound/blank.ogg'
-
-/obj/item/gun/ballistic/automatic/m90/Initialize()
- . = ..()
- underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher(src)
- update_icon()
-
-/obj/item/gun/ballistic/automatic/m90/unrestricted
- pin = /obj/item/firing_pin
-
-/obj/item/gun/ballistic/automatic/m90/unrestricted/Initialize()
- . = ..()
- underbarrel = new /obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted(src)
- update_icon()
-
-/obj/item/gun/ballistic/automatic/m90/afterattack(atom/target, mob/living/user, flag, params)
- if(select == 2)
- underbarrel.afterattack(target, user, flag, params)
- else
- return ..()
-
-/obj/item/gun/ballistic/automatic/m90/attackby(obj/item/A, mob/user, params)
- if(istype(A, /obj/item/ammo_casing))
- if(istype(A, underbarrel.magazine.ammo_type))
- underbarrel.attack_self()
- underbarrel.attackby(A, user, params)
- else
- ..()
-
-/obj/item/gun/ballistic/automatic/m90/update_icon()
- ..()
- switch(select)
- if(0)
- add_overlay("[initial(icon_state)]_semi")
- if(1)
- add_overlay("[initial(icon_state)]_burst")
- if(2)
- add_overlay("[initial(icon_state)]_gren")
- return
-
-/obj/item/gun/ballistic/automatic/m90/burst_select()
- var/mob/living/carbon/human/user = usr
- switch(select)
- if(0)
- select = 1
- burst_size = initial(burst_size)
- fire_delay = initial(fire_delay)
- to_chat(user, "I switch to [burst_size]-rnd burst.")
- if(1)
- select = 2
- to_chat(user, "I switch to grenades.")
- if(2)
- select = 0
- burst_size = 1
- fire_delay = 0
- to_chat(user, "I switch to semi-auto.")
- playsound(user, 'sound/blank.ogg', 100, TRUE)
- update_icon()
- return
-
-/obj/item/gun/ballistic/automatic/tommygun
- name = "\improper Thompson SMG"
- desc = ""
- icon_state = "tommygun"
- item_state = "shotgun"
- w_class = WEIGHT_CLASS_HUGE
- slot_flags = 0
- mag_type = /obj/item/ammo_box/magazine/tommygunm45
- can_suppress = FALSE
- burst_size = 4
- fire_delay = 1
- bolt_type = BOLT_TYPE_OPEN
-
-/obj/item/gun/ballistic/automatic/ar
- name = "\improper NT-ARG 'Boarder'"
- desc = ""
- icon_state = "arg"
- item_state = "arg"
- slot_flags = 0
- mag_type = /obj/item/ammo_box/magazine/m556
- can_suppress = FALSE
- burst_size = 3
- fire_delay = 1
-
-
-// L6 SAW //
-
-/obj/item/gun/ballistic/automatic/l6_saw
- name = "\improper L6 SAW"
- desc = ""
- icon_state = "l6"
- item_state = "l6closedmag"
- w_class = WEIGHT_CLASS_HUGE
- slot_flags = 0
- mag_type = /obj/item/ammo_box/magazine/mm712x82
- weapon_weight = WEAPON_HEAVY
- var/cover_open = FALSE
- can_suppress = FALSE
- burst_size = 3
- fire_delay = 1
- spread = 7
- pin = /obj/item/firing_pin/implant/pindicate
- bolt_type = BOLT_TYPE_OPEN
- mag_display = TRUE
- mag_display_ammo = TRUE
- tac_reloads = FALSE
- fire_sound = 'sound/blank.ogg'
- rack_sound = 'sound/blank.ogg'
- suppressed_sound = 'sound/blank.ogg'
-
-/obj/item/gun/ballistic/automatic/l6_saw/unrestricted
- pin = /obj/item/firing_pin
-
-
-/obj/item/gun/ballistic/automatic/l6_saw/examine(mob/user)
- . = ..()
- . += "alt + click to [cover_open ? "close" : "open"] the dust cover."
- if(cover_open && magazine)
- . += "It seems like you could use an empty hand to remove the magazine."
-
-
-/obj/item/gun/ballistic/automatic/l6_saw/AltClick(mob/user)
- cover_open = !cover_open
- to_chat(user, "I [cover_open ? "open" : "close"] [src]'s cover.")
- playsound(user, 'sound/blank.ogg', 60, TRUE)
- update_icon()
-
-
-/obj/item/gun/ballistic/automatic/l6_saw/update_icon()
- . = ..()
- add_overlay("l6_door_[cover_open ? "open" : "closed"]")
-
-
-/obj/item/gun/ballistic/automatic/l6_saw/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params)
- if(cover_open)
- to_chat(user, "[src]'s cover is open! Close it before firing!")
- return
- else
- . = ..()
- update_icon()
-
-//ATTACK HAND IGNORING PARENT RETURN VALUE
-/obj/item/gun/ballistic/automatic/l6_saw/attack_hand(mob/user)
- if (loc != user)
- ..()
- return
- if (!cover_open)
- to_chat(user, "[src]'s cover is closed! Open it before trying to remove the magazine!")
- return
- ..()
-
-/obj/item/gun/ballistic/automatic/l6_saw/attackby(obj/item/A, mob/user, params)
- if(!cover_open && istype(A, mag_type))
- to_chat(user, "[src]'s dust cover prevents a magazine from being fit.")
- return
- ..()
-
-
-
-// SNIPER //
-
-/obj/item/gun/ballistic/automatic/sniper_rifle
- name = "sniper rifle"
- desc = ""
- icon_state = "sniper"
- item_state = "sniper"
- fire_sound = 'sound/blank.ogg'
- fire_sound_volume = 90
- vary_fire_sound = FALSE
- load_sound = 'sound/blank.ogg'
- rack_sound = 'sound/blank.ogg'
- suppressed_sound = 'sound/blank.ogg'
- recoil = 2
- weapon_weight = WEAPON_HEAVY
- mag_type = /obj/item/ammo_box/magazine/sniper_rounds
- fire_delay = 40
- burst_size = 1
- w_class = WEIGHT_CLASS_NORMAL
- zoomable = TRUE
- zoom_amt = 10 //Long range, enough to see in front of you, but no tiles behind you.
- zoom_out_amt = 13
- slot_flags = ITEM_SLOT_BACK
- actions_types = list()
- mag_display = TRUE
-
-/obj/item/gun/ballistic/automatic/sniper_rifle/syndicate
- name = "syndicate sniper rifle"
- desc = ""
- can_suppress = TRUE
- can_unsuppress = TRUE
- pin = /obj/item/firing_pin/implant/pindicate
-
-// Old Semi-Auto Rifle //
-
-/obj/item/gun/ballistic/automatic/surplus
- name = "Surplus Rifle"
- desc = ""
- icon_state = "surplus"
- item_state = "moistnugget"
- weapon_weight = WEAPON_HEAVY
- mag_type = /obj/item/ammo_box/magazine/m10mm/rifle
- fire_delay = 30
- burst_size = 1
- can_unsuppress = TRUE
- can_suppress = TRUE
- w_class = WEIGHT_CLASS_HUGE
- slot_flags = ITEM_SLOT_BACK
- actions_types = list()
- mag_display = TRUE
-
-// Laser rifle (rechargeable magazine) //
-
-/obj/item/gun/ballistic/automatic/laser
- name = "laser rifle"
- desc = ""
- icon_state = "oldrifle"
- item_state = "arg"
- mag_type = /obj/item/ammo_box/magazine/recharge
- fire_delay = 2
- can_suppress = FALSE
- burst_size = 0
- actions_types = list()
- fire_sound = 'sound/blank.ogg'
- casing_ejector = FALSE
diff --git a/code/modules/projectiles/guns/ballistic/laser_gatling.dm b/code/modules/projectiles/guns/ballistic/laser_gatling.dm
deleted file mode 100644
index 00a1be8dc8..0000000000
--- a/code/modules/projectiles/guns/ballistic/laser_gatling.dm
+++ /dev/null
@@ -1,147 +0,0 @@
-
-
-//The ammo/gun is stored in a back slot item
-/obj/item/minigunpack
- name = "backpack power source"
- desc = ""
- icon = 'icons/obj/guns/minigun.dmi'
- icon_state = "holstered"
- item_state = "backpack"
- lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi'
- slot_flags = ITEM_SLOT_BACK
- w_class = WEIGHT_CLASS_HUGE
- var/obj/item/gun/ballistic/minigun/gun
- var/armed = 0 //whether the gun is attached, 0 is attached, 1 is the gun is wielded.
- var/overheat = 0
- var/overheat_max = 40
- var/heat_diffusion = 1
-
-/obj/item/minigunpack/Initialize()
- . = ..()
- gun = new(src)
- START_PROCESSING(SSobj, src)
-
-/obj/item/minigunpack/Destroy()
- STOP_PROCESSING(SSobj, src)
- return ..()
-
-/obj/item/minigunpack/process()
- overheat = max(0, overheat - heat_diffusion)
-
-//ATTACK HAND IGNORING PARENT RETURN VALUE
-/obj/item/minigunpack/attack_hand(mob/living/carbon/user)
- if(src.loc == user)
- if(!armed)
- if(user.get_item_by_slot(SLOT_BACK) == src)
- armed = 1
- if(!user.put_in_hands(gun))
- armed = 0
- to_chat(user, "I need a free hand to hold the gun!")
- return
- update_icon()
- user.update_inv_back()
- else
- to_chat(user, "I are already holding the gun!")
- else
- ..()
-
-/obj/item/minigunpack/attackby(obj/item/W, mob/user, params)
- if(W == gun) //Don't need armed check, because if you have the gun assume its armed.
- user.dropItemToGround(gun, TRUE)
- else
- ..()
-
-/obj/item/minigunpack/dropped(mob/user)
- . = ..()
- if(armed)
- user.dropItemToGround(gun, TRUE)
-
-/obj/item/minigunpack/MouseDrop(atom/over_object)
- . = ..()
- if(armed)
- return
- if(iscarbon(usr))
- var/mob/M = usr
-
- if(!over_object)
- return
-
- if(!M.incapacitated())
-
- if(istype(over_object, /atom/movable/screen/inventory/hand))
- var/atom/movable/screen/inventory/hand/H = over_object
- M.putItemFromInventoryInHandIfPossible(src, H.held_index)
-
-
-/obj/item/minigunpack/update_icon()
- if(armed)
- icon_state = "notholstered"
- else
- icon_state = "holstered"
-
-/obj/item/minigunpack/proc/attach_gun(mob/user)
- if(!gun)
- gun = new(src)
- gun.forceMove(src)
- armed = 0
- if(user)
- to_chat(user, "I attach the [gun.name] to the [name].")
- else
- src.visible_message("The [gun.name] snaps back onto the [name]!")
- update_icon()
- user.update_inv_back()
-
-
-/obj/item/gun/ballistic/minigun
- name = "laser gatling gun"
- desc = ""
- icon = 'icons/obj/guns/minigun.dmi'
- icon_state = "minigun_spin"
- item_state = "minigun"
- flags_1 = CONDUCT_1
- slowdown = 1
- slot_flags = null
- w_class = WEIGHT_CLASS_HUGE
- custom_materials = null
- burst_size = 3
- automatic = 0
- fire_delay = 1
- weapon_weight = WEAPON_HEAVY
- fire_sound = 'sound/blank.ogg'
- mag_type = /obj/item/ammo_box/magazine/internal/minigun
- tac_reloads = FALSE
- casing_ejector = FALSE
- item_flags = NEEDS_PERMIT | SLOWS_WHILE_IN_HAND
- var/obj/item/minigunpack/ammo_pack
-
-/obj/item/gun/ballistic/minigun/Initialize()
- if(istype(loc, /obj/item/minigunpack)) //We should spawn inside an ammo pack so let's use that one.
- ammo_pack = loc
- else
- return INITIALIZE_HINT_QDEL //No pack, no gun
-
- return ..()
-
-/obj/item/gun/ballistic/minigun/attack_self(mob/living/user)
- return
-
-/obj/item/gun/ballistic/minigun/dropped(mob/user)
- SHOULD_CALL_PARENT(FALSE)
- if(ammo_pack)
- ammo_pack.attach_gun(user)
- else
- qdel(src)
-
-/obj/item/gun/ballistic/minigun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
- if(ammo_pack)
- if(ammo_pack.overheat < ammo_pack.overheat_max)
- ammo_pack.overheat += burst_size
- ..()
- else
- to_chat(user, "The gun's heat sensor locked the trigger to prevent lens damage!")
-
-/obj/item/gun/ballistic/minigun/afterattack(atom/target, mob/living/user, flag, params)
- if(!ammo_pack || ammo_pack.loc != user)
- to_chat(user, "I need the backpack power source to fire the gun!")
- . = ..()
diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm
index 10ccb695e5..88f43a77eb 100644
--- a/code/modules/projectiles/guns/ballistic/launchers.dm
+++ b/code/modules/projectiles/guns/ballistic/launchers.dm
@@ -6,99 +6,14 @@
name = "grenade launcher"
icon_state = "dshotgun_sawn"
item_state = "gun"
- mag_type = /obj/item/ammo_box/magazine/internal/grenadelauncher
fire_sound = 'sound/blank.ogg'
w_class = WEIGHT_CLASS_NORMAL
- pin = /obj/item/firing_pin/implant/pindicate
bolt_type = BOLT_TYPE_NO_BOLT
istrainable = TRUE // For the moment I'll allow these to be traineable until a proper way to level up bows and crossbows is coded. - Foxtrot
var/damfactor = 1 // Multiplier for projectile damage. Used by bows and crossbows.
-/obj/item/gun/ballistic/revolver/grenadelauncher/unrestricted
- pin = /obj/item/firing_pin
-
/obj/item/gun/ballistic/revolver/grenadelauncher/attackby(obj/item/A, mob/user, params)
..()
if(istype(A, /obj/item/ammo_box) || istype(A, /obj/item/ammo_casing))
chamber_round()
-/obj/item/gun/ballistic/revolver/grenadelauncher/cyborg
- desc = ""
- name = "multi grenade launcher"
- icon = 'icons/mecha/mecha_equipment.dmi'
- icon_state = "mecha_grenadelnchr"
- mag_type = /obj/item/ammo_box/magazine/internal/cylinder/grenademulti
- pin = /obj/item/firing_pin
-
-/obj/item/gun/ballistic/revolver/grenadelauncher/cyborg/attack_self()
- return
-
-/obj/item/gun/ballistic/automatic/gyropistol
- name = "gyrojet pistol"
- desc = ""
- icon_state = "gyropistol"
- fire_sound = 'sound/blank.ogg'
- mag_type = /obj/item/ammo_box/magazine/m75
- burst_size = 1
- fire_delay = 0
- actions_types = list()
- casing_ejector = FALSE
-
-/obj/item/gun/ballistic/rocketlauncher
- name = "\improper PML-9"
- desc = ""
- icon_state = "rocketlauncher"
- item_state = "rocketlauncher"
- mag_type = /obj/item/ammo_box/magazine/internal/rocketlauncher
- fire_sound = 'sound/blank.ogg'
- w_class = WEIGHT_CLASS_BULKY
- can_suppress = FALSE
- pin = /obj/item/firing_pin/implant/pindicate
- burst_size = 1
- fire_delay = 0
- casing_ejector = FALSE
- weapon_weight = WEAPON_HEAVY
- bolt_type = BOLT_TYPE_NO_BOLT
- internal_magazine = TRUE
- cartridge_wording = "rocket"
- empty_indicator = TRUE
- tac_reloads = FALSE
-
-/obj/item/gun/ballistic/rocketlauncher/unrestricted
- pin = /obj/item/firing_pin
-
-/obj/item/gun/ballistic/rocketlauncher/afterattack()
- . = ..()
- magazine.get_round(FALSE) //Hack to clear the mag after it's fired
-
-/obj/item/gun/ballistic/rocketlauncher/attack_self_tk(mob/user)
- return //too difficult to remove the rocket with TK
-
-/obj/item/gun/ballistic/rocketlauncher/suicide_act(mob/living/user)
- user.visible_message("[user] aims [src] at the ground! It looks like [user.p_theyre()] performing a sick rocket jump!", \
- "I aim [src] at the ground to perform a bisnasty rocket jump...")
- if(can_shoot())
- user.notransform = TRUE
- playsound(src, 'sound/blank.ogg', 80, TRUE, 5)
- animate(user, pixel_z = 300, time = 30, easing = LINEAR_EASING)
- sleep(70)
- animate(user, pixel_z = 0, time = 5, easing = LINEAR_EASING)
- sleep(5)
- user.notransform = FALSE
- process_fire(user, user, TRUE)
- if(!QDELETED(user)) //if they weren't gibbed by the explosion, take care of them for good.
- user.gib()
- return MANUAL_SUICIDE
- else
- sleep(5)
- shoot_with_empty_chamber(user)
- sleep(20)
- user.visible_message("[user] looks about the room realizing [user.p_theyre()] still there. [user.p_they(TRUE)] proceed to shove [src] down their throat and choke [user.p_them()]self with it!", \
- "I look around after realizing you're still here, then proceed to choke myself to death with [src]!")
- sleep(20)
- return OXYLOSS
-
-
-
-
-
diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm
deleted file mode 100644
index 5be741690c..0000000000
--- a/code/modules/projectiles/guns/ballistic/pistol.dm
+++ /dev/null
@@ -1,98 +0,0 @@
-/obj/item/gun/ballistic/automatic/pistol
- name = "stechkin pistol"
- desc = ""
- icon_state = "pistol"
- w_class = WEIGHT_CLASS_SMALL
- mag_type = /obj/item/ammo_box/magazine/m10mm
- can_suppress = TRUE
- burst_size = 1
- fire_delay = 0
- actions_types = list()
- bolt_type = BOLT_TYPE_LOCKING
- fire_sound = 'sound/blank.ogg'
- dry_fire_sound = 'sound/blank.ogg'
- suppressed_sound = 'sound/blank.ogg'
- load_sound = 'sound/blank.ogg'
- load_empty_sound = 'sound/blank.ogg'
- eject_sound = 'sound/blank.ogg'
- eject_empty_sound = 'sound/blank.ogg'
- vary_fire_sound = FALSE
- rack_sound = 'sound/blank.ogg'
- lock_back_sound = 'sound/blank.ogg'
- bolt_drop_sound = 'sound/blank.ogg'
- fire_sound_volume = 90
- bolt_wording = "slide"
-
-/obj/item/gun/ballistic/automatic/pistol/no_mag
- spawnwithmagazine = FALSE
-
-/obj/item/gun/ballistic/automatic/pistol/suppressed/Initialize(mapload)
- . = ..()
- var/obj/item/suppressor/S = new(src)
- install_suppressor(S)
-
-/obj/item/gun/ballistic/automatic/pistol/m1911
- name = "\improper M1911"
- desc = ""
- icon_state = "m1911"
- w_class = WEIGHT_CLASS_NORMAL
- mag_type = /obj/item/ammo_box/magazine/m45
- can_suppress = FALSE
- fire_sound = 'sound/blank.ogg'
- rack_sound = 'sound/blank.ogg'
- lock_back_sound = 'sound/blank.ogg'
- bolt_drop_sound = 'sound/blank.ogg'
-
-/obj/item/gun/ballistic/automatic/pistol/m1911/no_mag
- spawnwithmagazine = FALSE
-
-/obj/item/gun/ballistic/automatic/pistol/deagle
- name = "\improper Desert Eagle"
- desc = ""
- icon_state = "deagle"
- force = 14
- mag_type = /obj/item/ammo_box/magazine/m50
- can_suppress = FALSE
- mag_display = TRUE
- fire_sound = 'sound/blank.ogg'
- rack_sound = 'sound/blank.ogg'
- lock_back_sound = 'sound/blank.ogg'
- bolt_drop_sound = 'sound/blank.ogg'
-
-/obj/item/gun/ballistic/automatic/pistol/deagle/gold
- desc = ""
- icon_state = "deagleg"
- item_state = "deagleg"
-
-/obj/item/gun/ballistic/automatic/pistol/deagle/camo
- desc = ""
- icon_state = "deaglecamo"
- item_state = "deagleg"
-
-/obj/item/gun/ballistic/automatic/pistol/APS
- name = "stechkin APS pistol"
- desc = ""
- icon_state = "aps"
- w_class = WEIGHT_CLASS_SMALL
- mag_type = /obj/item/ammo_box/magazine/pistolm9mm
- can_suppress = FALSE
- burst_size = 3
- fire_delay = 2
- actions_types = list(/datum/action/item_action/toggle_firemode)
-
-/obj/item/gun/ballistic/automatic/pistol/stickman
- name = "flat gun"
- desc = ""
- icon_state = "flatgun"
-
-/obj/item/gun/ballistic/automatic/pistol/stickman/pickup(mob/living/user)
- SHOULD_CALL_PARENT(FALSE)
- to_chat(user, "As you try to pick up [src], it slips out of your grip..")
- if(prob(50))
- to_chat(user, "..and vanishes from your vision! Where the hell did it go?")
- qdel(src)
- user.update_icons()
- else
- to_chat(user, "..and falls into view. Whew, that was a close one.")
- user.dropItemToGround(src)
-
diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm
index a5f6502f89..075f5af042 100644
--- a/code/modules/projectiles/guns/ballistic/revolver.dm
+++ b/code/modules/projectiles/guns/ballistic/revolver.dm
@@ -2,7 +2,6 @@
name = "\improper .357 revolver"
desc = "" //usually used by syndicates
icon_state = "revolver"
- mag_type = /obj/item/ammo_box/magazine/internal/cylinder
fire_sound = 'sound/blank.ogg'
load_sound = 'sound/blank.ogg'
eject_sound = 'sound/blank.ogg'
@@ -26,37 +25,6 @@
..()
chamber_round(TRUE)
-/obj/item/gun/ballistic/revolver/AltClick(mob/user)
- ..()
- spin()
-
-/obj/item/gun/ballistic/revolver/verb/spin()
- set name = "Spin Chamber"
- set hidden = 1
- set desc = ""
-
- var/mob/M = usr
-
- if(M.stat || !in_range(M,src))
- return
-
- if (recent_spin > world.time)
- return
- recent_spin = world.time + spin_delay
-
- if(do_spin())
- playsound(usr, "revolver_spin", 30, FALSE)
- usr.visible_message("[usr] spins [src]'s chamber.", "I spin [src]'s chamber.")
- else
- verbs -= /obj/item/gun/ballistic/revolver/verb/spin
-
-/obj/item/gun/ballistic/revolver/proc/do_spin()
- var/obj/item/ammo_box/magazine/internal/cylinder/C = magazine
- . = istype(C)
- if(.)
- C.spin()
- chamber_round(FALSE)
-
/obj/item/gun/ballistic/revolver/get_ammo(countchambered = FALSE, countempties = TRUE)
var/boolets = 0 //mature var names for mature people
if (chambered && countchambered)
@@ -64,197 +32,3 @@
if (magazine)
boolets += magazine.ammo_count(countempties)
return boolets
-
-/obj/item/gun/ballistic/revolver/examine(mob/user)
- . = ..()
-// var/live_ammo = get_ammo(FALSE, FALSE)
-// . += "[live_ammo ? live_ammo : "None"] of those are live rounds."
-// if (current_skin)
-// . += "It can be spun with alt+click"
-
-/obj/item/gun/ballistic/revolver/detective
- name = "\improper Colt Detective Special"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- icon_state = "detective"
- mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev38
- obj_flags = UNIQUE_RENAME
- unique_reskin = list("Default" = "detective",
- "Fitz Special" = "detective_fitz",
- "Police Positive Special" = "detective_police",
- "Blued Steel" = "detective_blued",
- "Stainless Steel" = "detective_stainless",
- "Gold Trim" = "detective_gold",
- "Leopard Spots" = "detective_leopard",
- "The Peacemaker" = "detective_peacemaker",
- "Black Panther" = "detective_panther"
- )
-
-/obj/item/gun/ballistic/revolver/detective/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
- if(magazine.caliber != initial(magazine.caliber))
- if(prob(70 - (magazine.ammo_count() * 10))) //minimum probability of 10, maximum of 60
- playsound(user, fire_sound, fire_sound_volume, vary_fire_sound)
- to_chat(user, "[src] blows up in your face!")
- user.take_bodypart_damage(0,20)
- user.dropItemToGround(src)
- return 0
- ..()
-
-/obj/item/gun/ballistic/revolver/detective/screwdriver_act(mob/living/user, obj/item/I)
- if(..())
- return TRUE
- if(magazine.caliber == "38")
- to_chat(user, "I begin to reinforce the barrel of [src]...")
- if(magazine.ammo_count())
- afterattack(user, user) //you know the drill
- user.visible_message("[src] goes off!", "[src] goes off in your face!")
- return TRUE
- if(I.use_tool(src, user, 30))
- if(magazine.ammo_count())
- to_chat(user, "I can't modify it!")
- return TRUE
- magazine.caliber = "357"
- fire_sound = 'sound/blank.ogg'
- desc = ""
- to_chat(user, "I reinforce the barrel of [src]. Now it will fire .357 rounds.")
- else
- to_chat(user, "I begin to revert the modifications to [src]...")
- if(magazine.ammo_count())
- afterattack(user, user) //and again
- user.visible_message("[src] goes off!", "[src] goes off in your face!")
- return TRUE
- if(I.use_tool(src, user, 30))
- if(magazine.ammo_count())
- to_chat(user, "I can't modify it!")
- return
- magazine.caliber = "38"
- fire_sound = 'sound/blank.ogg'
- desc = initial(desc)
- to_chat(user, "I remove the modifications on [src]. Now it will fire .38 rounds.")
- return TRUE
-
-
-/obj/item/gun/ballistic/revolver/mateba
- name = "\improper Unica 6 auto-revolver"
- desc = ""
- icon_state = "mateba"
-
-/obj/item/gun/ballistic/revolver/golden
- name = "\improper Golden revolver"
- desc = ""
- icon_state = "goldrevolver"
- fire_sound = 'sound/blank.ogg'
- recoil = 8
- pin = /obj/item/firing_pin
-
-/obj/item/gun/ballistic/revolver/nagant
- name = "\improper Nagant revolver"
- desc = ""
- icon_state = "nagant"
- can_suppress = TRUE
-
- mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rev762
-
-
-// A gun to play Russian Roulette!
-// You can spin the chamber to randomize the position of the bullet.
-
-/obj/item/gun/ballistic/revolver/russian
- name = "\improper Russian revolver"
- desc = ""
- icon_state = "russianrevolver"
- mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rus357
- var/spun = FALSE
-
-/obj/item/gun/ballistic/revolver/russian/do_spin()
- . = ..()
- if(.)
- spun = TRUE
-
-/obj/item/gun/ballistic/revolver/russian/attackby(obj/item/A, mob/user, params)
- ..()
- if(get_ammo() > 0)
- spin()
- update_icon()
- A.update_icon()
- return
-
-/obj/item/gun/ballistic/revolver/russian/attack_self(mob/user)
- if(!spun)
- spin()
- spun = TRUE
- return
- ..()
-
-/obj/item/gun/ballistic/revolver/russian/afterattack(atom/target, mob/living/user, flag, params)
- . = ..(null, user, flag, params)
-
- if(flag)
- if(!(target in user.contents) && ismob(target))
- if(user.used_intent.type == INTENT_HARM) // Flogging action
- return
-
- if(isliving(user))
- if(!can_trigger_gun(user))
- return
- if(target != user)
- if(ismob(target))
- to_chat(user, "A mechanism prevents you from shooting anyone but yourself!")
- return
-
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(!spun)
- to_chat(user, "I need to spin \the [src]'s chamber first!")
- return
-
- spun = FALSE
-
- if(chambered)
- var/obj/item/ammo_casing/AC = chambered
- if(AC.fire_casing(user, user))
- playsound(user, fire_sound, fire_sound_volume, vary_fire_sound)
- var/zone = check_zone(user.zone_selected)
- var/obj/item/bodypart/affecting = H.get_bodypart(zone)
- if(zone == BODY_ZONE_HEAD || zone == BODY_ZONE_PRECISE_R_EYE || zone == BODY_ZONE_PRECISE_MOUTH)
- shoot_self(user, affecting)
- else
- user.visible_message("[user.name] cowardly fires [src] at [user.p_their()] [affecting.name]!", "I cowardly fire [src] at your [affecting.name]!", "I hear a gunshot!")
- chambered = null
- return
-
- user.visible_message("*click*")
- playsound(src, dry_fire_sound, 30, TRUE)
-
-/obj/item/gun/ballistic/revolver/russian/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
- add_fingerprint(user)
- playsound(src, dry_fire_sound, 30, TRUE)
- user.visible_message("[user.name] tries to fire \the [src] at the same time, but only succeeds at looking like an idiot.", "\The [src]'s anti-combat mechanism prevents you from firing it at the same time!")
-
-/obj/item/gun/ballistic/revolver/russian/proc/shoot_self(mob/living/carbon/human/user, affecting = BODY_ZONE_HEAD)
- user.apply_damage(300, BRUTE, affecting)
- user.visible_message("[user.name] fires [src] at [user.p_their()] head!", "I fire [src] at your head!", "I hear a gunshot!")
-
-/obj/item/gun/ballistic/revolver/russian/soul
- name = "cursed Russian revolver"
- desc = ""
-
-/obj/item/gun/ballistic/revolver/russian/soul/shoot_self(mob/living/user)
- ..()
- var/obj/item/soulstone/anybody/revolver/SS = new /obj/item/soulstone/anybody/revolver(get_turf(src))
- if(!SS.transfer_soul("FORCE", user)) //Something went wrong
- qdel(SS)
- return
- user.visible_message("[user.name]'s soul is captured by \the [src]!", "You've lost the gamble! Your soul is forfeit!")
-
-/obj/item/gun/ballistic/revolver/reverse //Fires directly at its user... unless the user is a clown, of course.
- clumsy_check = 0
-
-/obj/item/gun/ballistic/revolver/reverse/can_trigger_gun(mob/living/user)
- if((HAS_TRAIT(user, TRAIT_CLUMSY)) || (user.mind && user.mind.assigned_role == "Clown"))
- return ..()
- if(process_fire(user, user, FALSE, null, BODY_ZONE_HEAD))
- user.visible_message("[user] somehow manages to shoot [user.p_them()]self in the face!", "I somehow shoot myself in the face! How the hell?!")
- user.emote("scream")
- user.drop_all_held_items()
- user.Paralyze(80)
diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm
deleted file mode 100644
index f4f72c1a5d..0000000000
--- a/code/modules/projectiles/guns/ballistic/rifle.dm
+++ /dev/null
@@ -1,123 +0,0 @@
-/obj/item/gun/ballistic/rifle
- name = "Bolt Rifle"
- desc = ""
- icon_state = "moistnugget"
- item_state = "moistnugget"
- mag_type = /obj/item/ammo_box/magazine/internal/boltaction
- bolt_wording = "bolt"
- bolt_type = BOLT_TYPE_STANDARD
- semi_auto = FALSE
- internal_magazine = TRUE
- fire_sound = 'sound/blank.ogg'
- fire_sound_volume = 90
- vary_fire_sound = FALSE
- rack_sound = 'sound/blank.ogg'
- bolt_drop_sound = 'sound/blank.ogg'
- tac_reloads = FALSE
-
-/obj/item/gun/ballistic/rifle/update_icon()
- ..()
- add_overlay("[icon_state]_bolt[bolt_locked ? "_locked" : ""]")
-
-/obj/item/gun/ballistic/rifle/rack(mob/user = null)
- if (bolt_locked == FALSE)
- to_chat(user, "I open the bolt of \the [src].")
- playsound(src, rack_sound, rack_sound_volume, rack_sound_vary)
- process_chamber(FALSE, FALSE, FALSE)
- bolt_locked = TRUE
- update_icon()
- return
- drop_bolt(user)
-
-/obj/item/gun/ballistic/rifle/can_shoot()
- if (bolt_locked)
- return FALSE
- return ..()
-
-/obj/item/gun/ballistic/rifle/attackby(obj/item/A, mob/user, params)
- if (!bolt_locked)
- to_chat(user, "The bolt is closed!")
- return
- return ..()
-
-/obj/item/gun/ballistic/rifle/examine(mob/user)
- . = ..()
- . += "The bolt is [bolt_locked ? "open" : "closed"]."
-
-///////////////////////
-// BOLT ACTION RIFLE //
-///////////////////////
-
-/obj/item/gun/ballistic/rifle/boltaction
- name = "\improper Mosin Nagant"
- desc = ""
- sawn_desc = ""
- w_class = WEIGHT_CLASS_BULKY
- weapon_weight = WEAPON_HEAVY
- icon_state = "moistnugget"
- item_state = "moistnugget"
- slot_flags = 0 //no ITEM_SLOT_BACK sprite, alas
- mag_type = /obj/item/ammo_box/magazine/internal/boltaction
- can_bayonet = TRUE
- knife_x_offset = 27
- knife_y_offset = 13
- can_be_sawn_off = TRUE
-
-/obj/item/gun/ballistic/rifle/boltaction/sawoff(mob/user)
- . = ..()
- if(.)
- spread = 36
- can_bayonet = FALSE
-
-/obj/item/gun/ballistic/rifle/boltaction/blow_up(mob/user)
- . = 0
- if(chambered && chambered.BB)
- process_fire(user, user, FALSE)
- . = 1
-
-/obj/item/gun/ballistic/rifle/boltaction/enchanted
- name = "enchanted bolt action rifle"
- desc = ""
- var/guns_left = 30
- mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted
- can_be_sawn_off = FALSE
-
-/obj/item/gun/ballistic/rifle/boltaction/enchanted/arcane_barrage
- name = "arcane barrage"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- pin = /obj/item/firing_pin/magic
- icon_state = "arcane_barrage"
- item_state = "arcane_barrage"
- can_bayonet = FALSE
- item_flags = NEEDS_PERMIT | DROPDEL | ABSTRACT | NOBLUDGEON
- flags_1 = NONE
- trigger_guard = TRIGGER_GUARD_ALLOW_ALL
-
- mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage
-
-/obj/item/gun/ballistic/rifle/boltaction/enchanted/dropped()
- . = ..()
- guns_left = 0
-
-/obj/item/gun/ballistic/rifle/boltaction/enchanted/proc/discard_gun(mob/living/user)
- user.throw_item(pick(oview(7,get_turf(user))))
-
-/obj/item/gun/ballistic/rifle/boltaction/enchanted/arcane_barrage/discard_gun(mob/living/user)
- qdel(src)
-
-/obj/item/gun/ballistic/rifle/boltaction/enchanted/attack_self()
- return
-
-/obj/item/gun/ballistic/rifle/boltaction/enchanted/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
- . = ..()
- if(!.)
- return
- if(guns_left)
- var/obj/item/gun/ballistic/rifle/boltaction/enchanted/gun = new type
- gun.guns_left = guns_left - 1
- discard_gun(user)
- user.swap_hand()
- user.put_in_hands(gun)
- else
- user.dropItemToGround(src, TRUE)
diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm
deleted file mode 100644
index a5ac5fa52e..0000000000
--- a/code/modules/projectiles/guns/ballistic/shotgun.dm
+++ /dev/null
@@ -1,216 +0,0 @@
-/obj/item/gun/ballistic/shotgun
- name = "shotgun"
- desc = ""
- icon_state = "shotgun"
- lefthand_file = 'icons/mob/inhands/weapons/64x_guns_left.dmi'
- righthand_file = 'icons/mob/inhands/weapons/64x_guns_right.dmi'
- item_state = "shotgun"
- inhand_x_dimension = 64
- inhand_y_dimension = 64
- fire_sound = 'sound/blank.ogg'
- vary_fire_sound = FALSE
- fire_sound_volume = 90
- rack_sound = "sound/weapons/gun/shotgun/rack.ogg"
- load_sound = "sound/weapons/gun/shotgun/insert_shell.ogg"
- w_class = WEIGHT_CLASS_BULKY
- force = 10
- flags_1 = CONDUCT_1
- slot_flags = ITEM_SLOT_BACK
- mag_type = /obj/item/ammo_box/magazine/internal/shot
- weapon_weight = WEAPON_MEDIUM
- semi_auto = FALSE
- internal_magazine = TRUE
- casing_ejector = FALSE
- bolt_wording = "pump"
- cartridge_wording = "shell"
- tac_reloads = FALSE
- weapon_weight = WEAPON_HEAVY
-
- pb_knockback = 2
-
-/obj/item/gun/ballistic/shotgun/blow_up(mob/user)
- . = 0
- if(chambered && chambered.BB)
- process_fire(user, user, FALSE)
- . = 1
-
-/obj/item/gun/ballistic/shotgun/lethal
- mag_type = /obj/item/ammo_box/magazine/internal/shot/lethal
-
-// RIOT SHOTGUN //
-
-/obj/item/gun/ballistic/shotgun/riot //for spawn in the armory
- name = "riot shotgun"
- desc = ""
- icon_state = "riotshotgun"
- item_state = "shotgun"
- fire_delay = 7
- mag_type = /obj/item/ammo_box/magazine/internal/shot/riot
- sawn_desc = ""
- can_be_sawn_off = TRUE
-
-// Automatic Shotguns//
-
-/obj/item/gun/ballistic/shotgun/automatic/shoot_live_shot(mob/living/user as mob|obj)
- ..()
- src.rack()
-
-/obj/item/gun/ballistic/shotgun/automatic/combat
- name = "combat shotgun"
- desc = ""
- icon_state = "cshotgun"
- item_state = "shotgun_combat"
- fire_delay = 5
- mag_type = /obj/item/ammo_box/magazine/internal/shot/com
- w_class = WEIGHT_CLASS_HUGE
-
-/obj/item/gun/ballistic/shotgun/automatic/combat/compact
- name = "compact combat shotgun"
- desc = ""
- icon_state = "cshotgunc"
- mag_type = /obj/item/ammo_box/magazine/internal/shot/com/compact
- w_class = WEIGHT_CLASS_BULKY
-
-//Dual Feed Shotgun
-
-/obj/item/gun/ballistic/shotgun/automatic/dual_tube
- name = "cycler shotgun"
- desc = ""
- icon_state = "cycler"
- mag_type = /obj/item/ammo_box/magazine/internal/shot/tube
- w_class = WEIGHT_CLASS_HUGE
- var/toggled = FALSE
- var/obj/item/ammo_box/magazine/internal/shot/alternate_magazine
- semi_auto = TRUE
-
-/obj/item/gun/ballistic/shotgun/automatic/dual_tube/examine(mob/user)
- . = ..()
- . += "Alt-click to pump it."
-
-/obj/item/gun/ballistic/shotgun/automatic/dual_tube/Initialize()
- . = ..()
- if (!alternate_magazine)
- alternate_magazine = new mag_type(src)
-
-/obj/item/gun/ballistic/shotgun/automatic/dual_tube/attack_self(mob/living/user)
- if(!chambered && magazine.contents.len)
- rack()
- else
- toggle_tube(user)
-
-/obj/item/gun/ballistic/shotgun/automatic/dual_tube/proc/toggle_tube(mob/living/user)
- var/current_mag = magazine
- var/alt_mag = alternate_magazine
- magazine = alt_mag
- alternate_magazine = current_mag
- toggled = !toggled
- if(toggled)
- to_chat(user, "I switch to tube B.")
- else
- to_chat(user, "I switch to tube A.")
-
-/obj/item/gun/ballistic/shotgun/automatic/dual_tube/AltClick(mob/living/user)
- if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
- return
- rack()
-
-// Bulldog shotgun //
-
-/obj/item/gun/ballistic/shotgun/bulldog
- name = "\improper Bulldog Shotgun"
- desc = ""
- icon_state = "bulldog"
- item_state = "bulldog"
- lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
- inhand_x_dimension = 32
- inhand_y_dimension = 32
- w_class = WEIGHT_CLASS_NORMAL
- weapon_weight = WEAPON_MEDIUM
- mag_type = /obj/item/ammo_box/magazine/m12g
- can_suppress = FALSE
- burst_size = 1
- fire_delay = 0
- pin = /obj/item/firing_pin/implant/pindicate
- fire_sound = 'sound/blank.ogg'
- actions_types = list()
- mag_display = TRUE
- empty_indicator = TRUE
- empty_alarm = TRUE
- special_mags = TRUE
- semi_auto = TRUE
- internal_magazine = FALSE
- tac_reloads = TRUE
-
-
-/obj/item/gun/ballistic/shotgun/bulldog/unrestricted
- pin = /obj/item/firing_pin
-/////////////////////////////
-// DOUBLE BARRELED SHOTGUN //
-/////////////////////////////
-
-/obj/item/gun/ballistic/shotgun/doublebarrel
- name = "double-barreled shotgun"
- desc = ""
- icon_state = "dshotgun"
- item_state = "shotgun_db"
- w_class = WEIGHT_CLASS_BULKY
- weapon_weight = WEAPON_MEDIUM
- force = 10
- flags_1 = CONDUCT_1
- slot_flags = ITEM_SLOT_BACK
- mag_type = /obj/item/ammo_box/magazine/internal/shot/dual
- sawn_desc = ""
- obj_flags = UNIQUE_RENAME
- rack_sound_volume = 0
- unique_reskin = list("Default" = "dshotgun",
- "Dark Red Finish" = "dshotgun_d",
- "Ash" = "dshotgun_f",
- "Faded Grey" = "dshotgun_g",
- "Maple" = "dshotgun_l",
- "Rosewood" = "dshotgun_p"
- )
- semi_auto = TRUE
- bolt_type = BOLT_TYPE_NO_BOLT
- can_be_sawn_off = TRUE
- pb_knockback = 3 // it's a super shotgun!
-
-/obj/item/gun/ballistic/shotgun/doublebarrel/AltClick(mob/user)
- . = ..()
- if(unique_reskin && !current_skin && user.canUseTopic(src, BE_CLOSE, NO_DEXTERITY))
- reskin_obj(user)
-
-/obj/item/gun/ballistic/shotgun/doublebarrel/sawoff(mob/user)
- . = ..()
- if(.)
- weapon_weight = WEAPON_MEDIUM
-
-// IMPROVISED SHOTGUN //
-
-/obj/item/gun/ballistic/shotgun/doublebarrel/improvised
- name = "improvised shotgun"
- desc = ""
- icon_state = "ishotgun"
- item_state = "ishotgun"
- w_class = WEIGHT_CLASS_BULKY
- force = 10
- slot_flags = null
- mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised
- sawn_desc = ""
- unique_reskin = null
- var/slung = FALSE
-
-/obj/item/gun/ballistic/shotgun/doublebarrel/improvised/update_icon()
- ..()
- if(slung)
- add_overlay("ishotgunsling")
- item_state = "ishotgunsling"
-
-/obj/item/gun/ballistic/shotgun/doublebarrel/improvised/sawn
- name = "sawn-off improvised shotgun"
- desc = ""
- icon_state = "ishotgun_sawn"
- item_state = "ishotgun_sawn"
- w_class = WEIGHT_CLASS_NORMAL
- sawn_off = TRUE
- slot_flags = ITEM_SLOT_BELT
diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm
deleted file mode 100644
index a48d4bdfc9..0000000000
--- a/code/modules/projectiles/guns/ballistic/toy.dm
+++ /dev/null
@@ -1,123 +0,0 @@
-/obj/item/gun/ballistic/automatic/toy
- name = "foam force SMG"
- desc = ""
- icon_state = "saber"
- item_state = "gun"
- mag_type = /obj/item/ammo_box/magazine/toy/smg
- fire_sound = 'sound/blank.ogg'
- force = 0
- throwforce = 0
- burst_size = 3
- can_suppress = TRUE
- clumsy_check = 0
- item_flags = NONE
- casing_ejector = FALSE
-
-/obj/item/gun/ballistic/automatic/toy/update_icon()
- . = ..()
- add_overlay("[icon_state]_toy")
-
-/obj/item/gun/ballistic/automatic/toy/unrestricted
- pin = /obj/item/firing_pin
-
-/obj/item/gun/ballistic/automatic/toy/pistol
- name = "foam force pistol"
- desc = ""
- icon_state = "pistol"
- bolt_type = BOLT_TYPE_LOCKING
- w_class = WEIGHT_CLASS_SMALL
- mag_type = /obj/item/ammo_box/magazine/toy/pistol
- fire_sound = 'sound/blank.ogg'
- burst_size = 1
- fire_delay = 0
- actions_types = list()
-
-/obj/item/gun/ballistic/automatic/toy/pistol/riot
- mag_type = /obj/item/ammo_box/magazine/toy/pistol/riot
-
-/obj/item/gun/ballistic/automatic/toy/pistol/riot/Initialize()
- magazine = new /obj/item/ammo_box/magazine/toy/pistol/riot(src)
- return ..()
-
-/obj/item/gun/ballistic/automatic/toy/pistol/unrestricted
- pin = /obj/item/firing_pin
-
-/obj/item/gun/ballistic/automatic/toy/pistol/riot/unrestricted
- pin = /obj/item/firing_pin
-
-/obj/item/gun/ballistic/shotgun/toy
- name = "foam force shotgun"
- desc = ""
- force = 0
- throwforce = 0
- mag_type = /obj/item/ammo_box/magazine/internal/shot/toy
- fire_sound = 'sound/blank.ogg'
- clumsy_check = FALSE
- item_flags = NONE
- casing_ejector = FALSE
- can_suppress = FALSE
- pb_knockback = 0
-
-/obj/item/gun/ballistic/shotgun/toy/update_icon()
- . = ..()
- add_overlay("[icon_state]_toy")
-
-/obj/item/gun/ballistic/shotgun/toy/process_chamber(empty_chamber = 0)
- ..()
- if(chambered && !chambered.BB)
- qdel(chambered)
-
-/obj/item/gun/ballistic/shotgun/toy/unrestricted
- pin = /obj/item/firing_pin
-
-/obj/item/gun/ballistic/shotgun/toy/crossbow
- name = "foam force crossbow"
- desc = ""
- icon = 'icons/obj/toy.dmi'
- icon_state = "foamcrossbow"
- item_state = "crossbow"
- mag_type = /obj/item/ammo_box/magazine/internal/shot/toy/crossbow
- fire_sound = 'sound/blank.ogg'
- slot_flags = ITEM_SLOT_BELT
- w_class = WEIGHT_CLASS_SMALL
-
-/obj/item/gun/ballistic/automatic/c20r/toy //This is the syndicate variant with syndicate firing pin and riot darts.
- name = "donksoft SMG"
- desc = ""
- can_suppress = TRUE
- item_flags = NONE
- mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot
- casing_ejector = FALSE
- clumsy_check = FALSE
-
-/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted //Use this for actual toys
- pin = /obj/item/firing_pin
- mag_type = /obj/item/ammo_box/magazine/toy/smgm45
-
-/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot
- mag_type = /obj/item/ammo_box/magazine/toy/smgm45/riot
-
-/obj/item/gun/ballistic/automatic/c20r/toy/update_icon()
- . = ..()
- add_overlay("[icon_state]_toy")
-
-/obj/item/gun/ballistic/automatic/l6_saw/toy //This is the syndicate variant with syndicate firing pin and riot darts.
- name = "donksoft LMG"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- can_suppress = FALSE
- item_flags = NONE
- mag_type = /obj/item/ammo_box/magazine/toy/m762/riot
- casing_ejector = FALSE
- clumsy_check = FALSE
-
-/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted //Use this for actual toys
- pin = /obj/item/firing_pin
- mag_type = /obj/item/ammo_box/magazine/toy/m762
-
-/obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted/riot
- mag_type = /obj/item/ammo_box/magazine/toy/m762/riot
-
-/obj/item/gun/ballistic/automatic/l6_saw/toy/update_icon()
- . = ..()
- add_overlay("[icon_state]_toy")
diff --git a/code/modules/projectiles/guns/magic.dm b/code/modules/projectiles/guns/magic.dm
deleted file mode 100644
index bdf1047f15..0000000000
--- a/code/modules/projectiles/guns/magic.dm
+++ /dev/null
@@ -1,90 +0,0 @@
-/obj/item/gun/magic
- name = "staff of nothing"
- desc = ""
- icon = 'icons/obj/guns/magic.dmi'
- icon_state = "staffofnothing"
- item_state = "staff"
- lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' //not really a gun and some toys use these inhands
- righthand_file = 'icons/mob/inhands/items_righthand.dmi'
- fire_sound = 'sound/blank.ogg'
- flags_1 = CONDUCT_1
- w_class = WEIGHT_CLASS_HUGE
- var/checks_antimagic = TRUE
- var/max_charges = 6
- var/charges = 0
- var/recharge_rate = 4
- var/charge_tick = 0
- var/can_charge = TRUE
- var/ammo_type
- var/no_den_usage
- clumsy_check = 0
- trigger_guard = TRIGGER_GUARD_ALLOW_ALL // Has no trigger at all, uses magic instead
- pin = /obj/item/firing_pin/magic
-
-/obj/item/gun/magic/process_fire(atom/target, mob/living/user, message, params, zone_override, bonus_spread)
- if(no_den_usage)
- var/area/A = get_area(user)
- if(istype(A, /area/wizard_station))
- add_fingerprint(user)
- to_chat(user, "I know better than to violate the security of The Den, best wait until you leave to use [src].")
- return
- else
- no_den_usage = 0
- if(checks_antimagic && user.anti_magic_check(TRUE, FALSE, FALSE, 0, TRUE))
- add_fingerprint(user)
- to_chat(user, "Something is interfering with [src].")
- return
- . = ..()
-
-/obj/item/gun/magic/can_shoot()
- return charges
-
-/obj/item/gun/magic/recharge_newshot()
- if (charges && chambered && !chambered.BB)
- chambered.newshot()
-
-/obj/item/gun/magic/process_chamber()
- if(chambered && !chambered.BB) //if BB is null, i.e the shot has been fired...
- charges--//... drain a charge
- recharge_newshot()
-
-/obj/item/gun/magic/Initialize()
- . = ..()
- charges = max_charges
- chambered = new ammo_type(src)
- if(can_charge)
- START_PROCESSING(SSobj, src)
-
-
-/obj/item/gun/magic/Destroy()
- if(can_charge)
- STOP_PROCESSING(SSobj, src)
- return ..()
-
-
-/obj/item/gun/magic/process()
- charge_tick++
- if(charge_tick < recharge_rate || charges >= max_charges)
- return 0
- charge_tick = 0
- charges++
- if(charges == 1)
- recharge_newshot()
- return 1
-
-/obj/item/gun/magic/update_icon()
- return
-
-/obj/item/gun/magic/shoot_with_empty_chamber(mob/living/user as mob|obj)
- to_chat(user, "The [name] whizzles quietly.")
-
-/obj/item/gun/magic/suicide_act(mob/user)
- user.visible_message("[user] is twisting [src] above [user.p_their()] head, releasing a magical blast! It looks like [user.p_theyre()] trying to commit suicide!")
- playsound(loc, fire_sound, 50, TRUE, -1)
- return (FIRELOSS)
-
-/obj/item/gun/magic/vv_edit_var(var_name, var_value)
- . = ..()
- switch (var_name)
- if ("charges")
- recharge_newshot()
diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm
deleted file mode 100644
index 7736137773..0000000000
--- a/code/modules/projectiles/guns/magic/staff.dm
+++ /dev/null
@@ -1,123 +0,0 @@
-/obj/item/gun/magic/staff
- slot_flags = ITEM_SLOT_BACK
- lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
- item_flags = NEEDS_PERMIT | NO_MAT_REDEMPTION
-
-/obj/item/gun/magic/staff/change
- name = "staff of change"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- ammo_type = /obj/item/ammo_casing/magic/change
- icon_state = "staffofchange"
- item_state = "staffofchange"
-
-/obj/item/gun/magic/staff/healing
- name = "staff of healing"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- ammo_type = /obj/item/ammo_casing/magic/heal
- icon_state = "staffofhealing"
- item_state = "staffofhealing"
-
-/obj/item/gun/magic/staff/healing/handle_suicide() //Stops people trying to commit suicide to heal themselves
- return
-
-/obj/item/gun/magic/staff/chaos
- name = "staff of chaos"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- ammo_type = /obj/item/ammo_casing/magic/chaos
- icon_state = "staffofchaos"
- item_state = "staffofchaos"
- max_charges = 10
- recharge_rate = 2
- no_den_usage = 1
- var/allowed_projectile_types = list(/obj/projectile/magic/change, /obj/projectile/magic/resurrection,
- /obj/projectile/magic/death, /obj/projectile/magic/teleport, /obj/projectile/magic/aoe/fireball,
- /obj/projectile/magic/spellblade, /obj/projectile/magic/arcane_barrage, /obj/projectile/magic/locker, /obj/projectile/magic/flying,
- /obj/projectile/magic/bounty, /obj/projectile/magic/antimagic, /obj/projectile/magic/fetch, /obj/projectile/magic/sapping,
- /obj/projectile/magic/necropotence, /obj/projectile/magic, /obj/projectile/temp/chill, /obj/projectile/magic/wipe)
-
-/obj/item/gun/magic/staff/chaos/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
- chambered.projectile_type = pick(allowed_projectile_types)
- . = ..()
-
-/obj/item/gun/magic/staff/honk
- name = "staff of the honkmother"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- ammo_type = /obj/item/ammo_casing/magic/honk
- icon_state = "honker"
- item_state = "honker"
- max_charges = 4
- recharge_rate = 8
-
-/obj/item/gun/magic/staff/spellblade
- name = "spellblade"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- ammo_type = /obj/item/ammo_casing/magic/spellblade
- icon_state = "spellblade"
- item_state = "spellblade"
- lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
- hitsound = 'sound/blank.ogg'
- force = 20
- armor_penetration = 75
- block_chance = 50
- sharpness = IS_SHARP
- max_charges = 4
-
-/obj/item/gun/magic/staff/spellblade/Initialize()
- . = ..()
- AddComponent(/datum/component/butchering, 15, 125, 0, hitsound)
-
-/obj/item/gun/magic/staff/spellblade/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
- if(attack_type == PROJECTILE_ATTACK)
- final_block_chance = 0
- return ..()
-
-/obj/item/gun/magic/staff/locker
- name = "staff of the locker"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- ammo_type = /obj/item/ammo_casing/magic/locker
- icon_state = "locker"
- item_state = "locker"
- max_charges = 6
- recharge_rate = 4
-
-//yes, they don't have sounds. they're admin staves, and their projectiles will play the chaos bolt sound anyway so why bother?
-
-/obj/item/gun/magic/staff/flying
- name = "staff of flying"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- ammo_type = /obj/item/ammo_casing/magic/flying
- icon_state = "staffofflight"
- item_state = "staffofflight"
-
-/obj/item/gun/magic/staff/sapping
- name = "staff of sapping"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- ammo_type = /obj/item/ammo_casing/magic/sapping
- icon_state = "staffofsapping"
- item_state = "staffofsapping"
-
-/obj/item/gun/magic/staff/necropotence
- name = "staff of necropotence"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- ammo_type = /obj/item/ammo_casing/magic/necropotence
- icon_state = "staffofnecropotence"
- item_state = "staffofnecropotence"
-
-/obj/item/gun/magic/staff/wipe
- name = "staff of possession"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- ammo_type = /obj/item/ammo_casing/magic/wipe
- icon_state = "staffofwipe"
- item_state = "staffofwipe"
diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm
deleted file mode 100644
index fd322a288d..0000000000
--- a/code/modules/projectiles/guns/magic/wand.dm
+++ /dev/null
@@ -1,210 +0,0 @@
-/obj/item/gun/magic/wand
- name = "wand of nothing"
- desc = ""
- ammo_type = /obj/item/ammo_casing/magic
- icon_state = "nothingwand"
- item_state = "wand"
- w_class = WEIGHT_CLASS_SMALL
- can_charge = FALSE
- max_charges = 100 //100, 50, 50, 34 (max charge distribution by 25%ths)
- var/variable_charges = TRUE
-
-/obj/item/gun/magic/wand/Initialize()
- if(prob(75) && variable_charges) //25% chance of listed max charges, 50% chance of 1/2 max charges, 25% chance of 1/3 max charges
- if(prob(33))
- max_charges = CEILING(max_charges / 3, 1)
- else
- max_charges = CEILING(max_charges / 2, 1)
- return ..()
-
-/obj/item/gun/magic/wand/examine(mob/user)
- . = ..()
- . += "Has [charges] charge\s remaining."
-
-/obj/item/gun/magic/wand/update_icon()
- icon_state = "[initial(icon_state)][charges ? "" : "-drained"]"
-
-/obj/item/gun/magic/wand/attack(atom/target, mob/living/user)
- if(target == user)
- return
- ..()
-
-/obj/item/gun/magic/wand/afterattack(atom/target, mob/living/user)
- if(!charges)
- shoot_with_empty_chamber(user)
- return
- if(target == user)
- if(no_den_usage)
- var/area/A = get_area(user)
- if(istype(A, /area/wizard_station))
- to_chat(user, "I know better than to violate the security of The Den, best wait until you leave to use [src].")
- return
- else
- no_den_usage = 0
- zap_self(user)
- else
- . = ..()
- update_icon()
-
-
-/obj/item/gun/magic/wand/proc/zap_self(mob/living/user)
- user.visible_message("[user] zaps [user.p_them()]self with [src].")
- playsound(user, fire_sound, 50, TRUE)
- user.log_message("zapped [user.p_them()]self with a [src]", LOG_ATTACK)
-
-
-/////////////////////////////////////
-//WAND OF DEATH
-/////////////////////////////////////
-
-/obj/item/gun/magic/wand/death
- name = "wand of death"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- ammo_type = /obj/item/ammo_casing/magic/death
- icon_state = "deathwand"
- max_charges = 3 //3, 2, 2, 1
-
-/obj/item/gun/magic/wand/death/zap_self(mob/living/user)
- ..()
- charges--
- if(user.anti_magic_check())
- user.visible_message("[src] has no effect on [user]!")
- return
- if(isliving(user))
- var/mob/living/L = user
- if(L.mob_biotypes & MOB_UNDEAD) //negative energy heals the undead
- user.revive(full_heal = TRUE, admin_revive = TRUE)
- to_chat(user, "I feel great!")
- return
- to_chat(user, "I irradiate myself with pure negative energy! \
- [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You Die...","Do you want your possessions identified?")]\
- ")
- user.death(FALSE)
-
-/obj/item/gun/magic/wand/death/debug
- desc = ""
- max_charges = 500
- variable_charges = FALSE
- can_charge = TRUE
- recharge_rate = 1
-
-
-/////////////////////////////////////
-//WAND OF HEALING
-/////////////////////////////////////
-
-/obj/item/gun/magic/wand/resurrection
- name = "wand of healing"
- desc = ""
- ammo_type = /obj/item/ammo_casing/magic/heal
- fire_sound = 'sound/blank.ogg'
- icon_state = "revivewand"
- max_charges = 10 //10, 5, 5, 4
-
-/obj/item/gun/magic/wand/resurrection/zap_self(mob/living/user)
- ..()
- charges--
- if(user.anti_magic_check())
- user.visible_message("[src] has no effect on [user]!")
- return
- if(isliving(user))
- var/mob/living/L = user
- if(L.mob_biotypes & MOB_UNDEAD) //positive energy harms the undead
- to_chat(user, "I irradiate myself with pure positive energy! \
- [pick("Do not pass go. Do not collect 200 zorkmids.","You feel more confident in your spell casting skills.","You Die...","Do you want your possessions identified?")]\
- ")
- user.death(0)
- return
- user.revive(full_heal = TRUE, admin_revive = TRUE)
- to_chat(user, "I feel great!")
-
-/obj/item/gun/magic/wand/resurrection/debug //for testing
- desc = ""
- max_charges = 500
- variable_charges = FALSE
- can_charge = TRUE
- recharge_rate = 1
-
-/////////////////////////////////////
-//WAND OF POLYMORPH
-/////////////////////////////////////
-
-/obj/item/gun/magic/wand/polymorph
- name = "wand of polymorph"
- desc = ""
- ammo_type = /obj/item/ammo_casing/magic/change
- icon_state = "polywand"
- fire_sound = 'sound/blank.ogg'
- max_charges = 10 //10, 5, 5, 4
-
-/obj/item/gun/magic/wand/polymorph/zap_self(mob/living/user)
- ..() //because the user mob ceases to exists by the time wabbajack fully resolves
- wabbajack(user)
- charges--
-
-/////////////////////////////////////
-//WAND OF TELEPORTATION
-/////////////////////////////////////
-
-/obj/item/gun/magic/wand/teleport
- name = "wand of teleportation"
- desc = ""
- ammo_type = /obj/item/ammo_casing/magic/teleport
- fire_sound = 'sound/blank.ogg'
- icon_state = "telewand"
- max_charges = 10 //10, 5, 5, 4
- no_den_usage = TRUE
-
-/obj/item/gun/magic/wand/teleport/zap_self(mob/living/user)
- if(do_teleport(user, user, 10, channel = TELEPORT_CHANNEL_MAGIC))
- var/datum/effect_system/smoke_spread/smoke = new
- smoke.set_up(3, user.loc)
- smoke.start()
- charges--
- ..()
-
-/obj/item/gun/magic/wand/safety
- name = "wand of safety"
- desc = ""
- ammo_type = /obj/item/ammo_casing/magic/safety
- fire_sound = 'sound/blank.ogg'
- icon_state = "telewand"
- max_charges = 10 //10, 5, 5, 4
- no_den_usage = FALSE
-
-/obj/item/gun/magic/wand/safety/zap_self(mob/living/user)
- var/turf/origin = get_turf(user)
- var/turf/destination = find_safe_turf()
-
- if(do_teleport(user, destination, channel=TELEPORT_CHANNEL_MAGIC))
- for(var/t in list(origin, destination))
- var/datum/effect_system/smoke_spread/smoke = new
- smoke.set_up(0, t)
- smoke.start()
- ..()
-
-/obj/item/gun/magic/wand/safety/debug
- desc = ""
- max_charges = 500
- variable_charges = FALSE
- can_charge = TRUE
- recharge_rate = 1
-
-
-/////////////////////////////////////
-//WAND OF FIREBALL
-/////////////////////////////////////
-
-/obj/item/gun/magic/wand/fireball
- name = "wand of fireball"
- desc = ""
- fire_sound = 'sound/blank.ogg'
- ammo_type = /obj/item/ammo_casing/magic/fireball
- icon_state = "firewand"
- max_charges = 8 //8, 4, 4, 3
-
-/obj/item/gun/magic/wand/fireball/zap_self(mob/living/user)
- ..()
- explosion(user.loc, -1, 0, 2, 3, 0, flame_range = 2)
- charges--
diff --git a/code/modules/projectiles/guns/misc/chem_gun.dm b/code/modules/projectiles/guns/misc/chem_gun.dm
deleted file mode 100644
index c7203c7f15..0000000000
--- a/code/modules/projectiles/guns/misc/chem_gun.dm
+++ /dev/null
@@ -1,46 +0,0 @@
-//his isn't a subtype of the syringe gun because the syringegun subtype is made to hold syringes
-//this is meant to hold reagents/obj/item/gun/syringe
-/obj/item/gun/chem
- name = "reagent gun"
- desc = ""
- icon_state = "chemgun"
- item_state = "chemgun"
- w_class = WEIGHT_CLASS_NORMAL
- throw_speed = 1
- throw_range = 7
- force = 4
- custom_materials = list(/datum/material/iron=2000)
- clumsy_check = FALSE
- fire_sound = 'sound/blank.ogg'
- var/time_per_syringe = 250
- var/syringes_left = 4
- var/max_syringes = 4
- var/last_synth = 0
-
-/obj/item/gun/chem/Initialize()
- . = ..()
- chambered = new /obj/item/ammo_casing/chemgun(src)
- START_PROCESSING(SSobj, src)
- create_reagents(100, OPENCONTAINER)
-
-/obj/item/gun/chem/Destroy()
- . = ..()
- STOP_PROCESSING(SSobj, src)
-
-/obj/item/gun/chem/can_shoot()
- return syringes_left
-
-/obj/item/gun/chem/process_chamber()
- if(chambered && !chambered.BB && syringes_left)
- chambered.newshot()
-
-/obj/item/gun/chem/process()
- if(syringes_left >= max_syringes)
- return
- if(world.time < last_synth+time_per_syringe)
- return
- to_chat(loc, "I hear a click as [src] synthesizes a new dart.")
- syringes_left++
- if(chambered && !chambered.BB)
- chambered.newshot()
- last_synth = world.time
diff --git a/code/modules/projectiles/guns/misc/grenade_launcher.dm b/code/modules/projectiles/guns/misc/grenade_launcher.dm
deleted file mode 100644
index 5966dffe11..0000000000
--- a/code/modules/projectiles/guns/misc/grenade_launcher.dm
+++ /dev/null
@@ -1,46 +0,0 @@
-/obj/item/gun/grenadelauncher
- name = "grenade launcher"
- desc = ""
- icon = 'icons/obj/guns/projectile.dmi'
- icon_state = "riotgun"
- item_state = "riotgun"
- w_class = WEIGHT_CLASS_BULKY
- throw_speed = 2
- throw_range = 7
- force = 5
- var/list/grenades = new/list()
- var/max_grenades = 3
- custom_materials = list(/datum/material/iron=2000)
-
-/obj/item/gun/grenadelauncher/examine(mob/user)
- . = ..()
- . += "[grenades.len] / [max_grenades] grenades loaded."
-
-/obj/item/gun/grenadelauncher/attackby(obj/item/I, mob/user, params)
-
- if((istype(I, /obj/item/grenade)))
- if(grenades.len < max_grenades)
- if(!user.transferItemToLoc(I, src))
- return
- grenades += I
- to_chat(user, "I put the grenade in the grenade launcher.")
- to_chat(user, "[grenades.len] / [max_grenades] Grenades.")
- else
- to_chat(usr, "The grenade launcher cannot hold more grenades!")
-
-/obj/item/gun/grenadelauncher/can_shoot()
- return grenades.len
-
-/obj/item/gun/grenadelauncher/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
- user.visible_message("[user] fired a grenade!", \
- "I fire the grenade launcher!")
- var/obj/item/grenade/F = grenades[1] //Now with less copypasta!
- grenades -= F
- F.forceMove(user.loc)
- F.throw_at(target, 30, 2, user)
- message_admins("[ADMIN_LOOKUPFLW(user)] fired a grenade ([F.name]) from a grenade launcher ([src]) from [AREACOORD(user)] at [target] [AREACOORD(target)].")
- log_game("[key_name(user)] fired a grenade ([F.name]) with a grenade launcher ([src]) from [AREACOORD(user)] at [target] [AREACOORD(target)].")
- F.active = 1
- F.icon_state = initial(F.icon_state) + "_active"
- playsound(user.loc, 'sound/blank.ogg', 75, TRUE, -3)
- addtimer(CALLBACK(F, TYPE_PROC_REF(/obj/item/grenade, prime)), 15)
diff --git a/code/modules/projectiles/guns/misc/medbeam.dm b/code/modules/projectiles/guns/misc/medbeam.dm
deleted file mode 100644
index e76cad800b..0000000000
--- a/code/modules/projectiles/guns/misc/medbeam.dm
+++ /dev/null
@@ -1,135 +0,0 @@
-/obj/item/gun/medbeam
- name = "Medical Beamgun"
- desc = ""
- icon = 'icons/obj/chronos.dmi'
- icon_state = "chronogun"
- item_state = "chronogun"
- w_class = WEIGHT_CLASS_NORMAL
-
- var/mob/living/current_target
- var/last_check = 0
- var/check_delay = 10 //Check los as often as possible, max resolution is SSobj tick though
- var/max_range = 8
- var/active = 0
- var/datum/beam/current_beam = null
- var/mounted = 0 //Denotes if this is a handheld or mounted version
-
- weapon_weight = WEAPON_MEDIUM
-
-/obj/item/gun/medbeam/Initialize()
- . = ..()
- START_PROCESSING(SSobj, src)
-
-/obj/item/gun/medbeam/Destroy(mob/user)
- STOP_PROCESSING(SSobj, src)
- LoseTarget()
- return ..()
-
-/obj/item/gun/medbeam/dropped(mob/user)
- ..()
- LoseTarget()
-
-/obj/item/gun/medbeam/equipped(mob/user)
- ..()
- LoseTarget()
-
-/obj/item/gun/medbeam/proc/LoseTarget()
- if(active)
- qdel(current_beam)
- current_beam = null
- active = 0
- on_beam_release(current_target)
- current_target = null
-
-/obj/item/gun/medbeam/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
- if(isliving(user))
- add_fingerprint(user)
-
- if(current_target)
- LoseTarget()
- if(!isliving(target))
- return
-
- current_target = target
- active = TRUE
- current_beam = new(user,current_target,time=6000,beam_icon_state="medbeam",btype=/obj/effect/ebeam/medical)
- INVOKE_ASYNC(current_beam, TYPE_PROC_REF(/datum/beam, Start))
-
- SSblackbox.record_feedback("tally", "gun_fired", 1, type)
-
-/obj/item/gun/medbeam/process()
-
- var/source = loc
- if(!mounted && !isliving(source))
- LoseTarget()
- return
-
- if(!current_target)
- LoseTarget()
- return
-
- if(world.time <= last_check+check_delay)
- return
-
- last_check = world.time
-
- if(get_dist(source, current_target)>max_range || !los_check(source, current_target))
- LoseTarget()
- if(isliving(source))
- to_chat(source, "I lose control of the beam!")
- return
-
- if(current_target)
- on_beam_tick(current_target)
-
-/obj/item/gun/medbeam/proc/los_check(atom/movable/user, mob/target)
- var/turf/user_turf = user.loc
- if(mounted)
- user_turf = get_turf(user)
- else if(!istype(user_turf))
- return 0
- var/obj/dummy = new(user_turf)
- dummy.pass_flags |= PASSTABLE|PASSGLASS|PASSGRILLE //Grille/Glass so it can be used through common windows
- for(var/turf/turf in getline(user_turf,target))
- if(mounted && turf == user_turf)
- continue //Mechs are dense and thus fail the check
- if(turf.density)
- qdel(dummy)
- return 0
- for(var/atom/movable/AM in turf)
- if(!AM.CanPass(dummy,turf,1))
- qdel(dummy)
- return 0
- for(var/obj/effect/ebeam/medical/B in turf)// Don't cross the str-beams!
- if(B.owner.origin != current_beam.origin)
- explosion(B.loc,0,3,5,8)
- qdel(dummy)
- return 0
- qdel(dummy)
- return 1
-
-/obj/item/gun/medbeam/proc/on_beam_hit(mob/living/target)
- return
-
-/obj/item/gun/medbeam/proc/on_beam_tick(mob/living/target)
- if(target.health != target.maxHealth)
- new /obj/effect/temp_visual/heal(get_turf(target), "#80F5FF")
- target.adjustBruteLoss(-4)
- target.adjustFireLoss(-4)
- target.adjustToxLoss(-1)
- target.adjustOxyLoss(-1)
- return
-
-/obj/item/gun/medbeam/proc/on_beam_release(mob/living/target)
- return
-
-/obj/effect/ebeam/medical
- name = "medical beam"
-
-//////////////////////////////Mech Version///////////////////////////////
-/obj/item/gun/medbeam/mech
- mounted = 1
-
-/obj/item/gun/medbeam/mech/Initialize()
- . = ..()
- STOP_PROCESSING(SSobj, src) //Mech mediguns do not process until installed, and are controlled by the holder obj
diff --git a/code/modules/projectiles/guns/misc/syringe_gun.dm b/code/modules/projectiles/guns/misc/syringe_gun.dm
deleted file mode 100644
index 0720d34d55..0000000000
--- a/code/modules/projectiles/guns/misc/syringe_gun.dm
+++ /dev/null
@@ -1,123 +0,0 @@
-/obj/item/gun/syringe
- name = "syringe gun"
- desc = ""
- icon_state = "syringegun"
- item_state = "syringegun"
- w_class = WEIGHT_CLASS_NORMAL
- throw_speed = 1
- throw_range = 7
- force = 4
- custom_materials = list(/datum/material/iron=2000)
- clumsy_check = 0
- fire_sound = 'sound/blank.ogg'
- var/list/syringes = list()
- var/max_syringes = 1
-
-/obj/item/gun/syringe/Initialize()
- . = ..()
- chambered = new /obj/item/ammo_casing/syringegun(src)
-
-/obj/item/gun/syringe/handle_atom_del(atom/A)
- . = ..()
- if(A in syringes)
- syringes.Remove(A)
-
-/obj/item/gun/syringe/recharge_newshot()
- if(!syringes.len)
- return
- chambered.newshot()
-
-/obj/item/gun/syringe/can_shoot()
- return syringes.len
-
-/obj/item/gun/syringe/process_chamber()
- if(chambered && !chambered.BB) //we just fired
- recharge_newshot()
-
-/obj/item/gun/syringe/examine(mob/user)
- . = ..()
- . += "Can hold [max_syringes] syringe\s. Has [syringes.len] syringe\s remaining."
-
-/obj/item/gun/syringe/attack_self(mob/living/user)
- if(!syringes.len)
- to_chat(user, "[src] is empty!")
- return 0
-
- var/obj/item/reagent_containers/syringe/S = syringes[syringes.len]
-
- if(!S)
- return 0
- user.put_in_hands(S)
-
- syringes.Remove(S)
- to_chat(user, "I unload [S] from \the [src].")
-
- return 1
-
-/obj/item/gun/syringe/attackby(obj/item/A, mob/user, params, show_msg = TRUE)
- if(istype(A, /obj/item/reagent_containers/syringe))
- if(syringes.len < max_syringes)
- if(!user.transferItemToLoc(A, src))
- return FALSE
- to_chat(user, "I load [A] into \the [src].")
- syringes += A
- recharge_newshot()
- return TRUE
- else
- to_chat(user, "[src] cannot hold more syringes!")
- return FALSE
-
-/obj/item/gun/syringe/rapidsyringe
- name = "rapid syringe gun"
- desc = ""
- icon_state = "rapidsyringegun"
- max_syringes = 6
-
-/obj/item/gun/syringe/syndicate
- name = "dart pistol"
- desc = ""
- icon_state = "syringe_pistol"
- item_state = "gun" //Smaller inhand
- w_class = WEIGHT_CLASS_SMALL
- force = 2 //Also very weak because it's smaller
- suppressed = TRUE //Softer fire sound
- can_unsuppress = FALSE //Permanently silenced
-
-/obj/item/gun/syringe/dna
- name = "modified syringe gun"
- desc = ""
-
-/obj/item/gun/syringe/dna/Initialize()
- . = ..()
- chambered = new /obj/item/ammo_casing/dnainjector(src)
-
-/obj/item/gun/syringe/dna/attackby(obj/item/A, mob/user, params, show_msg = TRUE)
- if(istype(A, /obj/item/dnainjector))
- var/obj/item/dnainjector/D = A
- if(D.used)
- to_chat(user, "This injector is used up!")
- return
- if(syringes.len < max_syringes)
- if(!user.transferItemToLoc(D, src))
- return FALSE
- to_chat(user, "I load \the [D] into \the [src].")
- syringes += D
- recharge_newshot()
- return TRUE
- else
- to_chat(user, "[src] cannot hold more syringes!")
- return FALSE
-
-/obj/item/gun/syringe/blowgun
- name = "blowgun"
- desc = ""
- icon_state = "blowgun"
- item_state = "blowgun"
- fire_sound = 'sound/blank.ogg'
-
-/obj/item/gun/syringe/blowgun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0)
- visible_message("[user] starts aiming with a blowgun!")
- if(do_after(user, 25, target = src))
- user.adjustStaminaLoss(20)
- user.adjustOxyLoss(20)
- ..()
diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm
deleted file mode 100644
index f21b6093ec..0000000000
--- a/code/modules/projectiles/pins.dm
+++ /dev/null
@@ -1,204 +0,0 @@
-/obj/item/firing_pin
- name = "electronic firing pin"
- desc = ""
- icon = 'icons/obj/device.dmi'
- icon_state = "firing_pin"
- item_state = "pen"
- flags_1 = CONDUCT_1
- w_class = WEIGHT_CLASS_TINY
- attack_verb = list("poked")
- var/fail_message = "INVALID USER."
- var/selfdestruct = 0 // Explode when user check is failed.
- var/force_replace = 0 // Can forcefully replace other pins.
- var/pin_removeable = 0 // Can be replaced by any pin.
- var/obj/item/gun/gun
-
-/obj/item/firing_pin/New(newloc)
- ..()
- if(istype(newloc, /obj/item/gun))
- gun = newloc
-
-/obj/item/firing_pin/afterattack(atom/target, mob/user, proximity_flag)
- . = ..()
- if(proximity_flag)
- if(istype(target, /obj/item/gun))
- var/obj/item/gun/G = target
- if(G.pin && (force_replace || G.pin.pin_removeable))
- G.pin.forceMove(get_turf(G))
- G.pin.gun_remove(user)
- to_chat(user, "I remove [G]'s old pin.")
-
- if(!G.pin)
- if(!user.temporarilyRemoveItemFromInventory(src))
- return
- gun_insert(user, G)
- to_chat(user, "I insert [src] into [G].")
- else
- to_chat(user, "This firearm already has a firing pin installed.")
-
-/obj/item/firing_pin/emag_act(mob/user)
- if(obj_flags & EMAGGED)
- return
- obj_flags |= EMAGGED
- to_chat(user, "I override the authentication mechanism.")
-
-/obj/item/firing_pin/proc/gun_insert(mob/living/user, obj/item/gun/G)
- gun = G
- forceMove(gun)
- gun.pin = src
- return
-
-/obj/item/firing_pin/proc/gun_remove(mob/living/user)
- gun.pin = null
- gun = null
- return
-
-/obj/item/firing_pin/proc/pin_auth(mob/living/user)
- return TRUE
-
-/obj/item/firing_pin/proc/auth_fail(mob/living/user)
- if(user)
- user.show_message(fail_message, MSG_VISUAL)
- if(selfdestruct)
- if(user)
- user.show_message("SELF-DESTRUCTING...
", MSG_VISUAL)
- to_chat(user, "[gun] explodes!")
- explosion(get_turf(gun), -1, 0, 2, 3)
- if(gun)
- qdel(gun)
-
-
-/obj/item/firing_pin/magic
- name = "magic crystal shard"
- desc = ""
-
-
-// Test pin, works only near firing range.
-/obj/item/firing_pin/test_range
- name = "test-range firing pin"
- desc = ""
- fail_message = "TEST RANGE CHECK FAILED."
- pin_removeable = TRUE
-
-/obj/item/firing_pin/test_range/pin_auth(mob/living/user)
- if(!istype(user))
- return FALSE
- return FALSE
-
-
-// Implant pin, checks for implant
-/obj/item/firing_pin/implant
- name = "implant-keyed firing pin"
- desc = ""
- fail_message = "IMPLANT CHECK FAILED."
- var/obj/item/implant/req_implant = null
-
-/obj/item/firing_pin/implant/pin_auth(mob/living/user)
- if(user)
- for(var/obj/item/implant/I in user.implants)
- if(req_implant && I.type == req_implant)
- return TRUE
- return FALSE
-
-/obj/item/firing_pin/implant/mindshield
- name = "mindshield firing pin"
- desc = ""
- icon_state = "firing_pin_loyalty"
-
-/obj/item/firing_pin/implant/pindicate
- name = "syndicate firing pin"
- icon_state = "firing_pin_pindi"
- req_implant = /obj/item/implant/weapons_auth
-
-
-
-// Honk pin, clown's joke item.
-// Can replace other pins. Replace a pin in cap's laser for extra fun!
-/obj/item/firing_pin/clown
- name = "hilarious firing pin"
- desc = ""
- color = "#FFFF00"
- fail_message = "HONK!"
- force_replace = TRUE
-
-/obj/item/firing_pin/clown/pin_auth(mob/living/user)
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- return FALSE
-
-// Ultra-honk pin, clown's deadly joke item.
-// A gun with ultra-honk pin is useful for clown and useless for everyone else.
-/obj/item/firing_pin/clown/ultra/pin_auth(mob/living/user)
- playsound(src.loc, 'sound/blank.ogg', 50, TRUE)
- if(user && (!(HAS_TRAIT(user, TRAIT_CLUMSY)) && !(user.mind && user.mind.assigned_role == "Clown")))
- return FALSE
- return TRUE
-
-/obj/item/firing_pin/clown/ultra/gun_insert(mob/living/user, obj/item/gun/G)
- ..()
- G.clumsy_check = FALSE
-
-/obj/item/firing_pin/clown/ultra/gun_remove(mob/living/user)
- gun.clumsy_check = initial(gun.clumsy_check)
- ..()
-
-// Now two times deadlier!
-/obj/item/firing_pin/clown/ultra/selfdestruct
- desc = ""
- selfdestruct = TRUE
-
-
-// DNA-keyed pin.
-// When you want to keep your toys for myself.
-/obj/item/firing_pin/dna
- name = "DNA-keyed firing pin"
- desc = ""
- icon_state = "firing_pin_dna"
- fail_message = "DNA CHECK FAILED."
- var/unique_enzymes = null
-
-/obj/item/firing_pin/dna/afterattack(atom/target, mob/user, proximity_flag)
- . = ..()
- if(proximity_flag && iscarbon(target))
- var/mob/living/carbon/M = target
- if(M.dna && M.dna.unique_enzymes)
- unique_enzymes = M.dna.unique_enzymes
- to_chat(user, "DNA-LOCK SET.")
-
-/obj/item/firing_pin/dna/pin_auth(mob/living/carbon/user)
- if(user && user.dna && user.dna.unique_enzymes)
- if(user.dna.unique_enzymes == unique_enzymes)
- return TRUE
- return FALSE
-
-/obj/item/firing_pin/dna/auth_fail(mob/living/carbon/user)
- if(!unique_enzymes)
- if(user && user.dna && user.dna.unique_enzymes)
- unique_enzymes = user.dna.unique_enzymes
- to_chat(user, "DNA-LOCK SET.")
- else
- ..()
-
-/obj/item/firing_pin/dna/dredd
- desc = ""
- selfdestruct = TRUE
-
-// Laser tag pins
-/obj/item/firing_pin/tag
- name = "laser tag firing pin"
- desc = ""
- fail_message = "SUIT CHECK FAILED."
- var/obj/item/clothing/suit/suit_requirement = null
- var/tagcolor = ""
-
-/obj/item/firing_pin/tag/pin_auth(mob/living/user)
- if(ishuman(user))
- var/mob/living/carbon/human/M = user
- if(istype(M.wear_armor, suit_requirement))
- return TRUE
- to_chat(user, "I need to be wearing [tagcolor] laser tag armor!")
- return FALSE
-
-/obj/item/firing_pin/Destroy()
- if(gun)
- gun.pin = null
- return ..()
diff --git a/code/modules/projectiles/projectile/bullets/_incendiary.dm b/code/modules/projectiles/projectile/bullets/_incendiary.dm
deleted file mode 100644
index 59baefa6ba..0000000000
--- a/code/modules/projectiles/projectile/bullets/_incendiary.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-/obj/projectile/bullet/incendiary
- damage = 20
- var/fire_stacks = 4
-
-/obj/projectile/bullet/incendiary/on_hit(atom/target, blocked = FALSE)
- . = ..()
- if(iscarbon(target))
- var/mob/living/carbon/M = target
- M.adjust_fire_stacks(fire_stacks)
- M.IgniteMob()
-
-/obj/projectile/bullet/incendiary/Move()
- . = ..()
- var/turf/location = get_turf(src)
- if(location)
- new /obj/effect/hotspot(location)
- location.hotspot_expose(700, 50, 1)
diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm
deleted file mode 100644
index e3918dc665..0000000000
--- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-/obj/projectile/bullet/dart
- name = "dart"
- icon_state = "cbbolt"
- damage = 6
- var/piercing = FALSE
-
-/obj/projectile/bullet/dart/Initialize()
- . = ..()
- create_reagents(50, NO_REACT)
-
-/obj/projectile/bullet/dart/on_hit(atom/target, blocked = FALSE)
- if(iscarbon(target))
- var/mob/living/carbon/M = target
- if(blocked != 100) // not completely blocked
- if(M.can_inject(null, FALSE, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body.
- ..()
- reagents.reaction(M, INJECT)
- reagents.trans_to(M, reagents.total_volume)
- return BULLET_ACT_HIT
- else
- blocked = 100
- target.visible_message("\The [src] was deflected!", \
- "I were protected against \the [src]!")
-
- ..(target, blocked)
- DISABLE_BITFIELD(reagents.flags, NO_REACT)
- reagents.handle_reactions()
- return BULLET_ACT_HIT
-
-/obj/projectile/bullet/dart/metalfoam/Initialize()
- . = ..()
- reagents.add_reagent(/datum/reagent/aluminium, 15)
- reagents.add_reagent(/datum/reagent/foaming_agent, 5)
- reagents.add_reagent(/datum/reagent/toxin/acid/fluacid, 5)
-
-/obj/projectile/bullet/dart/syringe
- name = "syringe"
- icon_state = "syringeproj"
diff --git a/code/modules/projectiles/projectile/bullets/dnainjector.dm b/code/modules/projectiles/projectile/bullets/dnainjector.dm
deleted file mode 100644
index 449d4286cd..0000000000
--- a/code/modules/projectiles/projectile/bullets/dnainjector.dm
+++ /dev/null
@@ -1,24 +0,0 @@
-/obj/projectile/bullet/dnainjector
- name = "\improper DNA injector"
- icon_state = "syringeproj"
- var/obj/item/dnainjector/injector
- damage = 5
- hitsound_wall = "shatter"
-
-/obj/projectile/bullet/dnainjector/on_hit(atom/target, blocked = FALSE)
- if(iscarbon(target))
- var/mob/living/carbon/M = target
- if(blocked != 100)
- if(M.can_inject(null, FALSE, def_zone, FALSE))
- if(injector.inject(M, firer))
- QDEL_NULL(injector)
- return BULLET_ACT_HIT
- else
- blocked = 100
- target.visible_message("\The [src] was deflected!", \
- "I were protected against \the [src]!")
- return ..()
-
-/obj/projectile/bullet/dnainjector/Destroy()
- QDEL_NULL(injector)
- return ..()
diff --git a/code/modules/projectiles/projectile/bullets/grenade.dm b/code/modules/projectiles/projectile/bullets/grenade.dm
deleted file mode 100644
index 5928b07aa3..0000000000
--- a/code/modules/projectiles/projectile/bullets/grenade.dm
+++ /dev/null
@@ -1,12 +0,0 @@
-// 40mm (Grenade Launcher
-
-/obj/projectile/bullet/a40mm
- name ="40mm grenade"
- desc = ""
- icon_state= "bolter"
- damage = 60
-
-/obj/projectile/bullet/a40mm/on_hit(atom/target, blocked = FALSE)
- ..()
- explosion(target, -1, 0, 2, 1, 0, flame_range = 3)
- return BULLET_ACT_HIT
diff --git a/code/modules/projectiles/projectile/bullets/lmg.dm b/code/modules/projectiles/projectile/bullets/lmg.dm
deleted file mode 100644
index 0ae13b3890..0000000000
--- a/code/modules/projectiles/projectile/bullets/lmg.dm
+++ /dev/null
@@ -1,44 +0,0 @@
-// C3D (Borgs)
-
-/obj/projectile/bullet/c3d
- damage = 20
-
-// Mech LMG
-
-/obj/projectile/bullet/lmg
- damage = 20
-
-// Mech FNX-99
-
-/obj/projectile/bullet/incendiary/fnx99
- damage = 20
-
-// Turrets
-
-/obj/projectile/bullet/manned_turret
- damage = 20
-
-/obj/projectile/bullet/syndicate_turret
- damage = 20
-
-// 7.12x82mm (SAW)
-
-/obj/projectile/bullet/mm712x82
- name = "7.12x82mm bullet"
- damage = 45
- armor_penetration = 5
-
-/obj/projectile/bullet/mm712x82_ap
- name = "7.12x82mm armor-piercing bullet"
- damage = 40
- armor_penetration = 75
-
-/obj/projectile/bullet/mm712x82_hp
- name = "7.12x82mm hollow-point bullet"
- damage = 60
- armor_penetration = -60
-
-/obj/projectile/bullet/incendiary/mm712x82
- name = "7.12x82mm incendiary bullet"
- damage = 20
- fire_stacks = 3
diff --git a/code/modules/projectiles/projectile/bullets/pistol.dm b/code/modules/projectiles/projectile/bullets/pistol.dm
deleted file mode 100644
index 8ae6e7d492..0000000000
--- a/code/modules/projectiles/projectile/bullets/pistol.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-// 9mm (Stechkin APS)
-
-/obj/projectile/bullet/c9mm
- name = "9mm bullet"
- damage = 20
-
-/obj/projectile/bullet/c9mm_ap
- name = "9mm armor-piercing bullet"
- damage = 15
- armor_penetration = 40
-
-/obj/projectile/bullet/incendiary/c9mm
- name = "9mm incendiary bullet"
- damage = 10
- fire_stacks = 1
-
-// 10mm (Stechkin)
-
-/obj/projectile/bullet/c10mm
- name = "10mm bullet"
- damage = 30
-
-/obj/projectile/bullet/c10mm_ap
- name = "10mm armor-piercing bullet"
- damage = 27
- armor_penetration = 40
-
-/obj/projectile/bullet/c10mm_hp
- name = "10mm hollow-point bullet"
- damage = 40
- armor_penetration = -50
-
-/obj/projectile/bullet/incendiary/c10mm
- name = "10mm incendiary bullet"
- damage = 15
- fire_stacks = 2
diff --git a/code/modules/projectiles/projectile/bullets/revolver.dm b/code/modules/projectiles/projectile/bullets/revolver.dm
deleted file mode 100644
index 3f8d0c9e33..0000000000
--- a/code/modules/projectiles/projectile/bullets/revolver.dm
+++ /dev/null
@@ -1,60 +0,0 @@
-// 7.62x38mmR (Nagant Revolver)
-
-/obj/projectile/bullet/n762
- name = "7.62x38mmR bullet"
- damage = 60
-
-// .50AE (Desert Eagle)
-
-/obj/projectile/bullet/a50AE
- name = ".50AE bullet"
- damage = 60
-
-// .38 (Detective's Gun)
-
-/obj/projectile/bullet/c38
- name = ".38 bullet"
- damage = 25
-
-/obj/projectile/bullet/c38/trac
- name = ".38 TRAC bullet"
- damage = 10
-
-/obj/projectile/bullet/c38/trac/on_hit(atom/target, blocked = FALSE)
- . = ..()
- var/mob/living/carbon/M = target
- var/obj/item/implant/tracking/c38/imp
- for(var/obj/item/implant/tracking/c38/TI in M.implants) //checks if the target already contains a tracking implant
- imp = TI
- return
- if(!imp)
- imp = new /obj/item/implant/tracking/c38(M)
- imp.implant(M)
-
-/obj/projectile/bullet/c38/hotshot //similar to incendiary bullets, but do not leave a flaming trail
- name = ".38 Hot Shot bullet"
- damage = 20
-
-/obj/projectile/bullet/c38/hotshot/on_hit(atom/target, blocked = FALSE)
- . = ..()
- if(iscarbon(target))
- var/mob/living/carbon/M = target
- M.adjust_fire_stacks(6)
- M.IgniteMob()
-
-/obj/projectile/bullet/c38/iceblox //see /obj/projectile/temp for the original code
- name = ".38 Iceblox bullet"
- damage = 20
- var/temperature = 100
-
-/obj/projectile/bullet/c38/iceblox/on_hit(atom/target, blocked = FALSE)
- . = ..()
- if(isliving(target))
- var/mob/living/M = target
- M.adjust_bodytemperature(((100-blocked)/100)*(temperature - M.bodytemperature))
-
-// .357 (Syndie Revolver)
-
-/obj/projectile/bullet/a357
- name = ".357 bullet"
- damage = 60
diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm
deleted file mode 100644
index a60f1a3ae6..0000000000
--- a/code/modules/projectiles/projectile/bullets/rifle.dm
+++ /dev/null
@@ -1,16 +0,0 @@
-// 5.56mm (M-90gl Carbine)
-
-/obj/projectile/bullet/a556
- name = "5.56mm bullet"
- damage = 35
-
-// 7.62 (Nagant Rifle)
-
-/obj/projectile/bullet/a762
- name = "7.62 bullet"
- damage = 60
-
-/obj/projectile/bullet/a762_enchanted
- name = "enchanted 7.62 bullet"
- damage = 20
- stamina = 80
diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm
deleted file mode 100644
index 38802ed125..0000000000
--- a/code/modules/projectiles/projectile/bullets/shotgun.dm
+++ /dev/null
@@ -1,100 +0,0 @@
-/obj/projectile/bullet/shotgun_slug
- name = "12g shotgun slug"
- damage = 60
-
-/obj/projectile/bullet/shotgun_beanbag
- name = "beanbag slug"
- damage = 5
- stamina = 55
-
-/obj/projectile/bullet/incendiary/shotgun
- name = "incendiary slug"
- damage = 20
-
-/obj/projectile/bullet/incendiary/shotgun/dragonsbreath
- name = "dragonsbreath pellet"
- damage = 5
-
-/obj/projectile/bullet/shotgun_stunslug
- name = "stunslug"
- damage = 5
- paralyze = 100
- stutter = 5
- jitter = 20
- range = 7
- icon_state = "spark"
- color = "#FFFF00"
-
-/obj/projectile/bullet/shotgun_meteorslug
- name = "meteorslug"
- icon = 'icons/obj/meteor.dmi'
- icon_state = "dust"
- damage = 30
- paralyze = 15
- knockdown = 80
- hitsound = 'sound/blank.ogg'
-
-/obj/projectile/bullet/shotgun_meteorslug/on_hit(atom/target, blocked = FALSE)
- . = ..()
- if(ismovableatom(target))
- var/atom/movable/M = target
- var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src)))
- M.safe_throw_at(throw_target, 3, 2)
-
-/obj/projectile/bullet/shotgun_meteorslug/Initialize()
- . = ..()
- SpinAnimation()
-
-/obj/projectile/bullet/shotgun_frag12
- name ="frag12 slug"
- damage = 25
- paralyze = 50
-
-/obj/projectile/bullet/shotgun_frag12/on_hit(atom/target, blocked = FALSE)
- ..()
- explosion(target, -1, 0, 1)
- return BULLET_ACT_HIT
-
-/obj/projectile/bullet/pellet
- var/tile_dropoff = 0.75
- var/tile_dropoff_s = 0.5
-
-/obj/projectile/bullet/pellet/shotgun_buckshot
- name = "buckshot pellet"
- damage = 12.5
-
-/obj/projectile/bullet/pellet/shotgun_rubbershot
- name = "rubbershot pellet"
- damage = 3
- stamina = 11
-
-/obj/projectile/bullet/pellet/shotgun_incapacitate
- name = "incapacitating pellet"
- damage = 1
- stamina = 6
-
-/obj/projectile/bullet/pellet/Range()
- ..()
- if(damage > 0)
- damage -= tile_dropoff
- if(stamina > 0)
- stamina -= tile_dropoff_s
- if(damage < 0 && stamina < 0)
- qdel(src)
-
-/obj/projectile/bullet/pellet/shotgun_improvised
- tile_dropoff = 0.55 //Come on it does 6 damage don't be like that.
- damage = 6
-
-/obj/projectile/bullet/pellet/shotgun_improvised/Initialize()
- . = ..()
- range = rand(1, 8)
-
-/obj/projectile/bullet/pellet/shotgun_improvised/on_range()
- do_sparks(1, TRUE, src)
- ..()
-
-// Mech Scattershot
-
-/obj/projectile/bullet/scattershot
- damage = 24
diff --git a/code/modules/projectiles/projectile/bullets/smg.dm b/code/modules/projectiles/projectile/bullets/smg.dm
deleted file mode 100644
index b49c56ffc1..0000000000
--- a/code/modules/projectiles/projectile/bullets/smg.dm
+++ /dev/null
@@ -1,21 +0,0 @@
-// .45 (M1911 & C20r)
-
-/obj/projectile/bullet/c45
- name = ".45 bullet"
- damage = 30
-
-// 4.6x30mm (Autorifles)
-
-/obj/projectile/bullet/c46x30mm
- name = "4.6x30mm bullet"
- damage = 20
-
-/obj/projectile/bullet/c46x30mm_ap
- name = "4.6x30mm armor-piercing bullet"
- damage = 15
- armor_penetration = 40
-
-/obj/projectile/bullet/incendiary/c46x30mm
- name = "4.6x30mm incendiary bullet"
- damage = 10
- fire_stacks = 1
diff --git a/code/modules/projectiles/projectile/bullets/sniper.dm b/code/modules/projectiles/projectile/bullets/sniper.dm
deleted file mode 100644
index 5985d1ed8f..0000000000
--- a/code/modules/projectiles/projectile/bullets/sniper.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-// .50 (Sniper)
-
-/obj/projectile/bullet/p50
- name =".50 bullet"
- speed = 0.4
- damage = 70
- paralyze = 100
- dismemberment = 50
- armor_penetration = 50
- var/breakthings = TRUE
-
-/obj/projectile/bullet/p50/on_hit(atom/target, blocked = 0)
- if(isobj(target) && (blocked != 100) && breakthings)
- var/obj/O = target
- O.take_damage(80, BRUTE, "bullet", FALSE)
- return ..()
-
-/obj/projectile/bullet/p50/soporific
- name =".50 soporific bullet"
- armor_penetration = 0
- damage = 0
- dismemberment = 0
- paralyze = 0
- breakthings = FALSE
-
-/obj/projectile/bullet/p50/soporific/on_hit(atom/target, blocked = FALSE)
- if((blocked != 100) && isliving(target))
- var/mob/living/L = target
- L.Sleeping(400)
- return ..()
-
-/obj/projectile/bullet/p50/penetrator
- name = "penetrator round"
- icon_state = "gauss"
- damage = 60
- movement_type = FLYING | UNSTOPPABLE
- dismemberment = 0 //It goes through you cleanly.
- paralyze = 0
- breakthings = FALSE
-
-/obj/projectile/bullet/p50/penetrator/shuttle //Nukeop Shuttle Variety
- icon_state = "gaussstrong"
- damage = 25
- speed = 0.3
- range = 16
diff --git a/code/modules/projectiles/projectile/bullets/special.dm b/code/modules/projectiles/projectile/bullets/special.dm
deleted file mode 100644
index 5cc55adfd8..0000000000
--- a/code/modules/projectiles/projectile/bullets/special.dm
+++ /dev/null
@@ -1,32 +0,0 @@
-// Honker
-
-/obj/projectile/bullet/honker
- name = "banana"
- damage = 0
- movement_type = FLYING | UNSTOPPABLE
- nodamage = TRUE
- hitsound = 'sound/blank.ogg'
- icon = 'icons/obj/hydroponics/harvest.dmi'
- icon_state = "banana"
- range = 200
-
-/obj/projectile/bullet/honker/Initialize()
- . = ..()
- SpinAnimation()
-
-/obj/projectile/bullet/honker/on_hit(atom/target, blocked = FALSE)
- . = ..()
- var/mob/M = target
- if(istype(M))
- M.slip(100, M.loc, GALOSHES_DONT_HELP|SLIDE, 0, FALSE)
-
-// Mime
-
-/obj/projectile/bullet/mime
- damage = 40
-
-/obj/projectile/bullet/mime/on_hit(atom/target, blocked = FALSE)
- . = ..()
- if(iscarbon(target))
- var/mob/living/carbon/M = target
- M.silent = max(M.silent, 10)
diff --git a/code/modules/projectiles/projectile/energy/_energy.dm b/code/modules/projectiles/projectile/energy/_energy.dm
deleted file mode 100644
index 49144127d9..0000000000
--- a/code/modules/projectiles/projectile/energy/_energy.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-/obj/projectile/energy
- name = "energy"
- icon_state = "spark"
- damage = 0
- damage_type = BURN
- flag = "energy"
- reflectable = REFLECT_NORMAL
diff --git a/code/modules/projectiles/projectile/energy/ebow.dm b/code/modules/projectiles/projectile/energy/ebow.dm
deleted file mode 100644
index 6d48902905..0000000000
--- a/code/modules/projectiles/projectile/energy/ebow.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-/obj/projectile/energy/bolt //ebow bolts
- name = "bolt"
- icon_state = "cbbolt"
- damage = 15
- damage_type = TOX
- nodamage = FALSE
- stamina = 60
- eyeblur = 10
- knockdown = 10
- slur = 5
-
-/obj/projectile/energy/bolt/halloween
- name = "candy corn"
- icon_state = "candy_corn"
-
-/obj/projectile/energy/bolt/large
- damage = 20
diff --git a/code/modules/projectiles/projectile/energy/misc.dm b/code/modules/projectiles/projectile/energy/misc.dm
deleted file mode 100644
index 79ee634a3e..0000000000
--- a/code/modules/projectiles/projectile/energy/misc.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-/obj/projectile/energy/declone
- name = "radiation beam"
- icon_state = "declone"
- damage = 20
- damage_type = CLONE
- irradiate = 100
- impact_effect_type = /obj/effect/temp_visual/impact_effect/green_laser
-
-/obj/projectile/energy/declone/weak
- damage = 9
- irradiate = 30
-
-/obj/projectile/energy/dart //ninja throwing dart
- name = "dart"
- icon_state = "toxin"
- damage = 5
- damage_type = TOX
- paralyze = 100
- range = 7
diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm
deleted file mode 100644
index cad6d90ca2..0000000000
--- a/code/modules/projectiles/projectile/energy/net_snare.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-/obj/projectile/energy/trap
- name = "energy snare"
- icon_state = "e_snare"
- nodamage = TRUE
- hitsound = 'sound/blank.ogg'
- range = 4
-
-/obj/projectile/energy/trap/on_hit(atom/target, blocked = FALSE)
- if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - drop a trap
- new/obj/item/restraints/legcuffs/beartrap/energy(get_turf(loc))
- else if(iscarbon(target))
- var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy(get_turf(target))
- B.Crossed(target)
- ..()
-
-/obj/projectile/energy/trap/on_range()
- new /obj/item/restraints/legcuffs/beartrap/energy(loc)
- ..()
-
-/obj/projectile/energy/trap/cyborg
- name = "Energy Bola"
- icon_state = "e_snare"
- nodamage = TRUE
- paralyze = 0
- hitsound = 'sound/blank.ogg'
- range = 10
-
-/obj/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = FALSE)
- if(!ismob(target) || blocked >= 100)
- do_sparks(1, TRUE, src)
- qdel(src)
- if(iscarbon(target))
- var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(target))
- B.Crossed(target)
- QDEL_IN(src, 10)
- ..()
-
-/obj/projectile/energy/trap/cyborg/on_range()
- do_sparks(1, TRUE, src)
- qdel(src)
diff --git a/code/modules/projectiles/projectile/energy/nuclear_particle.dm b/code/modules/projectiles/projectile/energy/nuclear_particle.dm
deleted file mode 100644
index 7cd3985f12..0000000000
--- a/code/modules/projectiles/projectile/energy/nuclear_particle.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-//Nuclear particle projectile - a deadly side effect of fusion
-/obj/projectile/energy/nuclear_particle
- name = "nuclear particle"
- icon_state = "nuclear_particle"
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
- flag = "rad"
- irradiate = 5000
- speed = 0.4
- hitsound = 'sound/blank.ogg'
- impact_type = /obj/effect/projectile/impact/xray
- var/static/list/particle_colors = list(
- "red" = "#FF0000",
- "blue" = "#00FF00",
- "green" = "#0000FF",
- "yellow" = "#FFFF00",
- "cyan" = "#00FFFF",
- "purple" = "#FF00FF"
- )
-
-/obj/projectile/energy/nuclear_particle/Initialize()
- . = ..()
- //Random color time!
- var/our_color = pick(particle_colors)
- add_atom_colour(particle_colors[our_color], FIXED_COLOUR_PRIORITY)
- set_light(4, 4, 3, l_color = particle_colors[our_color]) //Range of 4, brightness of 3 - Same range as a flashlight
-
-/atom/proc/fire_nuclear_particle(angle = rand(0,360)) //used by fusion to fire random nuclear particles. Fires one particle in a random direction.
- var/obj/projectile/energy/nuclear_particle/P = new /obj/projectile/energy/nuclear_particle(src)
- P.fire(angle)
diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm
deleted file mode 100644
index 69872af62a..0000000000
--- a/code/modules/projectiles/projectile/energy/stun.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-/obj/projectile/energy/electrode
- name = "electrode"
- icon_state = "spark"
- color = "#FFFF00"
- nodamage = FALSE
- paralyze = 100
- stutter = 5
- jitter = 20
- hitsound = 'sound/blank.ogg'
- range = 7
- tracer_type = /obj/effect/projectile/tracer/stun
- muzzle_type = /obj/effect/projectile/muzzle/stun
- impact_type = /obj/effect/projectile/impact/stun
-
-/obj/projectile/energy/electrode/on_hit(atom/target, blocked = FALSE)
- . = ..()
- if(!ismob(target) || blocked >= 100) //Fully blocked by mob or collided with dense object - burst into sparks!
- do_sparks(1, TRUE, src)
- else if(iscarbon(target))
- var/mob/living/carbon/C = target
- SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "tased", /datum/mood_event/tased)
- SEND_SIGNAL(C, COMSIG_LIVING_MINOR_SHOCK)
- if(C.dna && C.dna.check_mutation(HULK))
- C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk")
- else if((C.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(C, TRAIT_STUNIMMUNE))
- addtimer(CALLBACK(C, TYPE_PROC_REF(/mob/living/carbon, do_jitter_animation), jitter), 5)
-
-/obj/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet
- do_sparks(1, TRUE, src)
- ..()
diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm
index 25997cfc8c..64ddc72cab 100644
--- a/code/modules/projectiles/projectile/magic.dm
+++ b/code/modules/projectiles/projectile/magic.dm
@@ -114,120 +114,6 @@
smoke.set_up(0, t)
smoke.start()
-/obj/projectile/magic/change
- name = "bolt of change"
- icon_state = "ice_1"
- damage = 0
- damage_type = BURN
- nodamage = TRUE
-
-/obj/projectile/magic/change/on_hit(atom/change)
- . = ..()
- if(ismob(change))
- var/mob/M = change
- if(M.anti_magic_check())
- M.visible_message("[src] fizzles on contact with [M]!")
- qdel(src)
- return BULLET_ACT_BLOCK
- wabbajack(change)
- qdel(src)
-
-/proc/wabbajack(mob/living/M)
- if(!istype(M) || M.stat == DEAD || M.notransform || (GODMODE & M.status_flags))
- return
-
- M.notransform = TRUE
- M.mobility_flags = NONE
- M.icon = null
- M.cut_overlays()
- M.invisibility = INVISIBILITY_ABSTRACT
-
- var/list/contents = M.contents.Copy()
-
- for(var/obj/item/W in contents)
- if(!M.dropItemToGround(W))
- qdel(W)
-
- var/mob/living/new_mob
-
- var/randomize = pick("monkey","humanoid","animal")
- switch(randomize)
- if("monkey")
- new_mob = new /mob/living/carbon/monkey(M.loc)
-
- if("animal")
- var/path = pick(/mob/living/simple_animal/hostile/carp,
- /mob/living/simple_animal/hostile/bear,
- /mob/living/simple_animal/hostile/mushroom,
- /mob/living/simple_animal/hostile/statue,
- /mob/living/simple_animal/hostile/retaliate/bat,
- /mob/living/simple_animal/hostile/retaliate/goat,
- /mob/living/simple_animal/hostile/killertomato,
- /mob/living/simple_animal/hostile/poison/giant_spider,
- /mob/living/simple_animal/hostile/poison/giant_spider/hunter,
- /mob/living/simple_animal/hostile/gorilla,
- /mob/living/simple_animal/parrot,
- /mob/living/simple_animal/pet/dog/corgi,
- /mob/living/simple_animal/crab,
- /mob/living/simple_animal/pet/dog/pug,
- /mob/living/simple_animal/pet/cat,
- /mob/living/simple_animal/mouse,
- /mob/living/simple_animal/chicken,
- /mob/living/simple_animal/cow,
- /mob/living/simple_animal/hostile/lizard,
- /mob/living/simple_animal/pet/fox,
- /mob/living/simple_animal/butterfly,
- /mob/living/simple_animal/pet/cat/cak,
- /mob/living/simple_animal/chick)
- new_mob = new path(M.loc)
-
- if("humanoid")
- new_mob = new /mob/living/carbon/human(M.loc)
-
- if(prob(50))
- var/list/chooseable_races = list()
- for(var/speciestype in subtypesof(/datum/species))
- var/datum/species/S = speciestype
- if(initial(S.changesource_flags) & WABBAJACK)
- chooseable_races += speciestype
-
- if(chooseable_races.len)
- new_mob.set_species(pick(chooseable_races))
-
- var/datum/preferences/A = new() //Randomize appearance for the human
- A.copy_to(new_mob, icon_updates=0)
-
- var/mob/living/carbon/human/H = new_mob
- H.update_body()
- H.update_hair()
- H.update_body_parts()
- H.dna.update_dna_identity()
-
- if(!new_mob)
- return
- new_mob.grant_language(/datum/language/common)
-
- // Some forms can still wear some items
- for(var/obj/item/W in contents)
- new_mob.equip_to_appropriate_slot(W)
-
- M.log_message("became [new_mob.real_name]", LOG_ATTACK, color="orange")
-
- new_mob.a_intent = INTENT_HARM
-
- M.wabbajack_act(new_mob)
-
- to_chat(new_mob, "My form morphs into that of a [randomize].")
-
- var/poly_msg = get_policy(POLICY_POLYMORPH)
- if(poly_msg)
- to_chat(new_mob, poly_msg)
-
- M.transfer_observers_to(new_mob)
-
- qdel(M)
- return new_mob
-
/obj/projectile/magic/spellblade
name = "blade energy"
icon_state = "lavastaff"
@@ -554,15 +440,3 @@
var/turf/T = get_turf(target)
for(var/i=0, i<50, i+=10)
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(explosion), T, -1, exp_heavy, exp_light, exp_flash, FALSE, FALSE, exp_fire), i)
-
-//still magic related, but a different path
-
-/obj/projectile/temp/chill
- name = "bolt of chills"
- icon_state = "ice_2"
- damage = 0
- damage_type = BURN
- nodamage = FALSE
- armor_penetration = 100
- temperature = 50
- flag = "magic"
diff --git a/code/modules/projectiles/projectile/reusable/foam_dart.dm b/code/modules/projectiles/projectile/reusable/foam_dart.dm
deleted file mode 100644
index f47c407060..0000000000
--- a/code/modules/projectiles/projectile/reusable/foam_dart.dm
+++ /dev/null
@@ -1,42 +0,0 @@
-/obj/projectile/bullet/reusable/foam_dart
- name = "foam dart"
- desc = ""
- damage = 0 // It's a damn toy.
- damage_type = OXY
- nodamage = TRUE
- icon = 'icons/obj/guns/toy.dmi'
- icon_state = "foamdart_proj"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart
- range = 10
- var/modified = FALSE
- var/obj/item/pen/pen = null
-
-/obj/projectile/bullet/reusable/foam_dart/handle_drop()
- if(dropped)
- return
- var/turf/T = get_turf(src)
- dropped = 1
- var/obj/item/ammo_casing/caseless/foam_dart/newcasing = new ammo_type(T)
- newcasing.modified = modified
- var/obj/projectile/bullet/reusable/foam_dart/newdart = newcasing.BB
- newdart.modified = modified
- newdart.damage = damage
- newdart.nodamage = nodamage
- newdart.damage_type = damage_type
- if(pen)
- newdart.pen = pen
- pen.forceMove(newdart)
- pen = null
- newdart.update_icon()
-
-
-/obj/projectile/bullet/reusable/foam_dart/Destroy()
- pen = null
- return ..()
-
-/obj/projectile/bullet/reusable/foam_dart/riot
- name = "riot foam dart"
- icon_state = "foamdart_riot_proj"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot
- nodamage = FALSE
- stamina = 25
diff --git a/code/modules/projectiles/projectile/special/curse.dm b/code/modules/projectiles/projectile/special/curse.dm
deleted file mode 100644
index 79c87e176d..0000000000
--- a/code/modules/projectiles/projectile/special/curse.dm
+++ /dev/null
@@ -1,52 +0,0 @@
-/obj/effect/ebeam/curse_arm
- name = "curse arm"
- layer = LARGE_MOB_LAYER
-
-/obj/projectile/curse_hand
- name = "curse hand"
- icon_state = "cursehand0"
- hitsound = 'sound/blank.ogg'
- layer = LARGE_MOB_LAYER
- damage_type = BURN
- damage = 10
- paralyze = 20
- speed = 2
- range = 16
- var/datum/beam/arm
- var/handedness = 0
-
-/obj/projectile/curse_hand/Initialize(mapload)
- . = ..()
- ENABLE_BITFIELD(movement_type, UNSTOPPABLE)
- handedness = prob(50)
- icon_state = "cursehand[handedness]"
-
-/obj/projectile/curse_hand/fire(setAngle)
- if(starting)
- arm = starting.Beam(src, icon_state = "curse[handedness]", time = INFINITY, maxdistance = INFINITY, beam_type=/obj/effect/ebeam/curse_arm)
- ..()
-
-/obj/projectile/curse_hand/prehit(atom/target)
- if(target == original)
- DISABLE_BITFIELD(movement_type, UNSTOPPABLE)
- else if(!isturf(target))
- return FALSE
- return ..()
-
-/obj/projectile/curse_hand/Destroy()
- if(arm)
- arm.End()
- arm = null
- if(CHECK_BITFIELD(movement_type, UNSTOPPABLE))
- playsound(src, 'sound/blank.ogg', 25, TRUE, -1)
- var/turf/T = get_step(src, dir)
- new/obj/effect/temp_visual/dir_setting/curse/hand(T, dir, handedness)
- for(var/obj/effect/temp_visual/dir_setting/curse/grasp_portal/G in starting)
- qdel(G)
- new /obj/effect/temp_visual/dir_setting/curse/grasp_portal/fading(starting, dir)
- var/datum/beam/D = starting.Beam(T, icon_state = "curse[handedness]", time = 32, maxdistance = INFINITY, beam_type=/obj/effect/ebeam/curse_arm, beam_sleep_time = 1)
- for(var/b in D.elements)
- var/obj/effect/ebeam/B = b
- animate(B, alpha = 0, time = 32)
- return ..()
-
diff --git a/code/modules/projectiles/projectile/special/floral.dm b/code/modules/projectiles/projectile/special/floral.dm
deleted file mode 100644
index cdf427a474..0000000000
--- a/code/modules/projectiles/projectile/special/floral.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-/obj/projectile/energy/floramut
- name = "alpha somatoray"
- icon_state = "energy"
- damage = 0
- damage_type = TOX
- nodamage = TRUE
- flag = "energy"
-
-/obj/projectile/energy/florayield
- name = "beta somatoray"
- icon_state = "energy2"
- damage = 0
- damage_type = TOX
- nodamage = TRUE
- flag = "energy"
diff --git a/code/modules/projectiles/projectile/special/hallucination.dm b/code/modules/projectiles/projectile/special/hallucination.dm
deleted file mode 100644
index 0acb9503ca..0000000000
--- a/code/modules/projectiles/projectile/special/hallucination.dm
+++ /dev/null
@@ -1,230 +0,0 @@
-/obj/projectile/hallucination
- name = "bullet"
- icon = null
- icon_state = null
- hitsound = ""
- suppressed = TRUE
- ricochets_max = 0
- ricochet_chance = 0
- damage = 0
- nodamage = TRUE
- projectile_type = /obj/projectile/hallucination
- log_override = TRUE
- var/hal_icon_state
- var/image/fake_icon
- var/mob/living/carbon/hal_target
- var/hal_fire_sound
- var/hal_hitsound
- var/hal_hitsound_wall
- var/hal_impact_effect
- var/hal_impact_effect_wall
- var/hit_duration
- var/hit_duration_wall
-
-/obj/projectile/hallucination/fire()
- ..()
- fake_icon = image('icons/obj/projectiles.dmi', src, hal_icon_state, ABOVE_MOB_LAYER)
- if(hal_target.client)
- hal_target.client.images += fake_icon
-
-/obj/projectile/hallucination/Destroy()
- if(hal_target.client)
- hal_target.client.images -= fake_icon
- QDEL_NULL(fake_icon)
- return ..()
-
-/obj/projectile/hallucination/Bump(atom/A)
- if(!ismob(A))
- if(hal_hitsound_wall)
- hal_target.playsound_local(loc, hal_hitsound_wall, 40, 1)
- if(hal_impact_effect_wall)
- spawn_hit(A, TRUE)
- else if(A == hal_target)
- if(hal_hitsound)
- hal_target.playsound_local(A, hal_hitsound, 100, 1)
- target_on_hit(A)
- qdel(src)
- return TRUE
-
-/obj/projectile/hallucination/proc/target_on_hit(mob/M)
- if(M == hal_target)
- to_chat(hal_target, "[M] is hit by \a [src] in the chest!")
- hal_apply_effect()
- else if(M in view(hal_target))
- to_chat(hal_target, "[M] is hit by \a [src] in the chest!!")
- if(damage_type == BRUTE)
- var/splatter_dir = dir
- if(starting)
- splatter_dir = get_dir(starting, get_turf(M))
- spawn_blood(M, splatter_dir)
- else if(hal_impact_effect)
- spawn_hit(M, FALSE)
-
-/obj/projectile/hallucination/proc/spawn_blood(mob/M, set_dir)
- set waitfor = 0
- if(!hal_target.client)
- return
-
- var/splatter_icon_state
- if(set_dir in GLOB.diagonals)
- splatter_icon_state = "splatter[pick(1, 2, 6)]"
- else
- splatter_icon_state = "splatter[pick(3, 4, 5)]"
-
- var/image/blood = image('icons/effects/blood.dmi', M, splatter_icon_state, ABOVE_MOB_LAYER)
- var/target_pixel_x = 0
- var/target_pixel_y = 0
- switch(set_dir)
- if(NORTH)
- target_pixel_y = 16
- if(SOUTH)
- target_pixel_y = -16
- layer = ABOVE_MOB_LAYER
- if(EAST)
- target_pixel_x = 16
- if(WEST)
- target_pixel_x = -16
- if(NORTHEAST)
- target_pixel_x = 16
- target_pixel_y = 16
- if(NORTHWEST)
- target_pixel_x = -16
- target_pixel_y = 16
- if(SOUTHEAST)
- target_pixel_x = 16
- target_pixel_y = -16
- layer = ABOVE_MOB_LAYER
- if(SOUTHWEST)
- target_pixel_x = -16
- target_pixel_y = -16
- layer = ABOVE_MOB_LAYER
- hal_target.client.images += blood
- animate(blood, pixel_x = target_pixel_x, pixel_y = target_pixel_y, alpha = 0, time = 5)
- addtimer(CALLBACK(src, PROC_REF(cleanup_blood)), 5)
-
-/obj/projectile/hallucination/proc/cleanup_blood(image/blood)
- hal_target.client.images -= blood
- qdel(blood)
-
-/obj/projectile/hallucination/proc/spawn_hit(atom/A, is_wall)
- set waitfor = 0
- if(!hal_target.client)
- return
-
- var/image/hit_effect = image('icons/effects/blood.dmi', A, is_wall ? hal_impact_effect_wall : hal_impact_effect, ABOVE_MOB_LAYER)
- hit_effect.pixel_x = A.pixel_x + rand(-4,4)
- hit_effect.pixel_y = A.pixel_y + rand(-4,4)
- hal_target.client.images += hit_effect
- sleep(is_wall ? hit_duration_wall : hit_duration)
- hal_target.client.images -= hit_effect
- qdel(hit_effect)
-
-
-/obj/projectile/hallucination/proc/hal_apply_effect()
- return
-
-/obj/projectile/hallucination/bullet
- name = "bullet"
- hal_icon_state = "bullet"
- hal_fire_sound = "gunshot"
- hal_hitsound = 'sound/blank.ogg'
- hal_hitsound_wall = "ricochet"
- hal_impact_effect = "impact_bullet"
- hal_impact_effect_wall = "impact_bullet"
- hit_duration = 5
- hit_duration_wall = 5
-
-/obj/projectile/hallucination/bullet/hal_apply_effect()
- hal_target.adjustStaminaLoss(60)
-
-/obj/projectile/hallucination/laser
- name = "laser"
- damage_type = BURN
- hal_icon_state = "laser"
- hal_fire_sound = 'sound/blank.ogg'
- hal_hitsound = 'sound/blank.ogg'
- hal_hitsound_wall = 'sound/blank.ogg'
- hal_impact_effect = "impact_laser"
- hal_impact_effect_wall = "impact_laser_wall"
- hit_duration = 4
- hit_duration_wall = 10
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
-
-/obj/projectile/hallucination/laser/hal_apply_effect()
- hal_target.adjustStaminaLoss(20)
- hal_target.blur_eyes(2)
-
-/obj/projectile/hallucination/taser
- name = "electrode"
- damage_type = BURN
- hal_icon_state = "spark"
- color = "#FFFF00"
- hal_fire_sound = 'sound/blank.ogg'
- hal_hitsound = 'sound/blank.ogg'
- hal_hitsound_wall = null
- hal_impact_effect = null
- hal_impact_effect_wall = null
-
-/obj/projectile/hallucination/taser/hal_apply_effect()
- hal_target.Paralyze(100)
- hal_target.stuttering += 20
- if(hal_target.dna && hal_target.dna.check_mutation(HULK))
- hal_target.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk")
- else if((hal_target.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(hal_target, TRAIT_STUNIMMUNE))
- addtimer(CALLBACK(hal_target, TYPE_PROC_REF(/mob/living/carbon, do_jitter_animation), 20), 5)
-
-/obj/projectile/hallucination/disabler
- name = "disabler beam"
- damage_type = STAMINA
- hal_icon_state = "omnilaser"
- hal_fire_sound = 'sound/blank.ogg'
- hal_hitsound = 'sound/blank.ogg'
- hal_hitsound_wall = 'sound/blank.ogg'
- hal_impact_effect = "impact_laser_blue"
- hal_impact_effect_wall = null
- hit_duration = 4
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
-
-/obj/projectile/hallucination/disabler/hal_apply_effect()
- hal_target.adjustStaminaLoss(25)
-
-/obj/projectile/hallucination/ebow
- name = "bolt"
- damage_type = TOX
- hal_icon_state = "cbbolt"
- hal_fire_sound = 'sound/blank.ogg'
- hal_hitsound = null
- hal_hitsound_wall = null
- hal_impact_effect = null
- hal_impact_effect_wall = null
-
-/obj/projectile/hallucination/ebow/hal_apply_effect()
- hal_target.Paralyze(100)
- hal_target.stuttering += 5
- hal_target.adjustStaminaLoss(8)
-
-/obj/projectile/hallucination/change
- name = "bolt of change"
- damage_type = BURN
- hal_icon_state = "ice_1"
- hal_fire_sound = 'sound/blank.ogg'
- hal_hitsound = null
- hal_hitsound_wall = null
- hal_impact_effect = null
- hal_impact_effect_wall = null
-
-/obj/projectile/hallucination/change/hal_apply_effect()
- new /datum/hallucination/self_delusion(hal_target, TRUE, wabbajack = FALSE)
-
-/obj/projectile/hallucination/death
- name = "bolt of death"
- damage_type = BURN
- hal_icon_state = "pulse1_bl"
- hal_fire_sound = 'sound/blank.ogg'
- hal_hitsound = null
- hal_hitsound_wall = null
- hal_impact_effect = null
- hal_impact_effect_wall = null
-
-/obj/projectile/hallucination/death/hal_apply_effect()
- new /datum/hallucination/death(hal_target, TRUE)
diff --git a/code/modules/projectiles/projectile/special/ion.dm b/code/modules/projectiles/projectile/special/ion.dm
deleted file mode 100644
index 1e4ff220e8..0000000000
--- a/code/modules/projectiles/projectile/special/ion.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-/obj/projectile/ion
- name = "ion bolt"
- icon_state = "ion"
- damage = 0
- damage_type = BURN
- nodamage = TRUE
- flag = "energy"
- impact_effect_type = /obj/effect/temp_visual/impact_effect/ion
- var/emp_radius = 1
-
-/obj/projectile/ion/on_hit(atom/target, blocked = FALSE)
- ..()
- empulse(target, emp_radius, emp_radius)
- return BULLET_ACT_HIT
-
-/obj/projectile/ion/weak
- emp_radius = 0
diff --git a/code/modules/projectiles/projectile/special/meteor.dm b/code/modules/projectiles/projectile/special/meteor.dm
deleted file mode 100644
index afdb49568f..0000000000
--- a/code/modules/projectiles/projectile/special/meteor.dm
+++ /dev/null
@@ -1,19 +0,0 @@
-/obj/projectile/meteor
- name = "meteor"
- icon = 'icons/obj/meteor.dmi'
- icon_state = "small1"
- damage = 0
- damage_type = BRUTE
- nodamage = TRUE
- flag = "bullet"
-
-/obj/projectile/meteor/Bump(atom/A)
- if(A == firer)
- forceMove(A.loc)
- return
- A.ex_act(EXPLODE_HEAVY)
- playsound(src.loc, 'sound/blank.ogg', 40, TRUE)
- for(var/mob/M in urange(10, src))
- if(!M.stat)
- shake_camera(M, 3, 1)
- qdel(src)
diff --git a/code/modules/projectiles/projectile/special/mindflayer.dm b/code/modules/projectiles/projectile/special/mindflayer.dm
deleted file mode 100644
index d91735cb19..0000000000
--- a/code/modules/projectiles/projectile/special/mindflayer.dm
+++ /dev/null
@@ -1,9 +0,0 @@
-/obj/projectile/beam/mindflayer
- name = "flayer ray"
-
-/obj/projectile/beam/mindflayer/on_hit(atom/target, blocked = FALSE)
- . = ..()
- if(ishuman(target))
- var/mob/living/carbon/human/M = target
- M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 20)
- M.hallucination += 30
diff --git a/code/modules/projectiles/projectile/special/neurotoxin.dm b/code/modules/projectiles/projectile/special/neurotoxin.dm
deleted file mode 100644
index e4ee605aee..0000000000
--- a/code/modules/projectiles/projectile/special/neurotoxin.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/obj/projectile/bullet/neurotoxin
- name = "neurotoxin spit"
- icon_state = "neurotoxin"
- damage = 5
- damage_type = TOX
- paralyze = 100
diff --git a/code/modules/projectiles/projectile/special/plasma.dm b/code/modules/projectiles/projectile/special/plasma.dm
deleted file mode 100644
index b398731cfd..0000000000
--- a/code/modules/projectiles/projectile/special/plasma.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-/obj/projectile/plasma
- name = "plasma blast"
- icon_state = "plasmacutter"
- damage_type = BRUTE
- damage = 5
- range = 4
- dismemberment = 20
- impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
- var/mine_range = 3 //mines this many additional tiles of rock
- tracer_type = /obj/effect/projectile/tracer/plasma_cutter
- muzzle_type = /obj/effect/projectile/muzzle/plasma_cutter
- impact_type = /obj/effect/projectile/impact/plasma_cutter
-
-/obj/projectile/plasma/on_hit(atom/target)
- . = ..()
- if(ismineralturf(target))
- var/turf/closed/mineral/M = target
- M.gets_drilled(firer, FALSE)
- if(mine_range)
- mine_range--
- range++
- if(range > 0)
- return BULLET_ACT_FORCE_PIERCE
-
-/obj/projectile/plasma/adv
- damage = 7
- range = 5
- mine_range = 5
-
-/obj/projectile/plasma/adv/mech
- damage = 10
- range = 9
- mine_range = 3
-
-/obj/projectile/plasma/turret
- //Between normal and advanced for damage, made a beam so not the turret does not destroy glass
- name = "plasma beam"
- damage = 24
- range = 7
- pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
diff --git a/code/modules/projectiles/projectile/special/rocket.dm b/code/modules/projectiles/projectile/special/rocket.dm
deleted file mode 100644
index 0fa5bb4e40..0000000000
--- a/code/modules/projectiles/projectile/special/rocket.dm
+++ /dev/null
@@ -1,65 +0,0 @@
-/obj/projectile/bullet/gyro
- name ="explosive bolt"
- icon_state= "bolter"
- damage = 50
-
-/obj/projectile/bullet/gyro/on_hit(atom/target, blocked = FALSE)
- ..()
- explosion(target, -1, 0, 2)
- return BULLET_ACT_HIT
-
-/obj/projectile/bullet/a84mm
- name ="\improper HEDP rocket"
- desc = ""
- icon_state= "84mm-hedp"
- damage = 80
- var/anti_armour_damage = 200
- armor_penetration = 100
- dismemberment = 100
-
-/obj/projectile/bullet/a84mm/on_hit(atom/target, blocked = FALSE)
- ..()
- explosion(target, -1, 1, 3, 1, 0, flame_range = 4)
-
- return BULLET_ACT_HIT
-
-/obj/projectile/bullet/a84mm_he
- name ="\improper HE missile"
- desc = ""
- icon_state = "missile"
- damage = 30
- ricochets_max = 0 //it's a MISSILE
-
-/obj/projectile/bullet/a84mm_he/on_hit(atom/target, blocked=0)
- ..()
- if(!isliving(target)) //if the target isn't alive, so is a wall or something
- explosion(target, 0, 1, 2, 4)
- else
- explosion(target, 0, 0, 2, 4)
- return BULLET_ACT_HIT
-
-/obj/projectile/bullet/a84mm_br
- name ="\improper HE missile"
- desc = ""
- icon_state = "missile"
- damage = 30
- ricochets_max = 0 //it's a MISSILE
- var/sturdy = list(
- /turf/closed,
- )
-
-/obj/item/broken_missile
- name = "\improper broken missile"
- desc = ""
- icon = 'icons/obj/projectiles.dmi'
- icon_state = "missile_broken"
- w_class = WEIGHT_CLASS_TINY
-
-
-/obj/projectile/bullet/a84mm_br/on_hit(atom/target, blocked=0)
- ..()
- for(var/i in sturdy)
- if(istype(target, i))
- explosion(target, 0, 1, 1, 2)
- return BULLET_ACT_HIT
- new /obj/item/broken_missile(get_turf(src), 1)
diff --git a/code/modules/projectiles/projectile/special/temperature.dm b/code/modules/projectiles/projectile/special/temperature.dm
deleted file mode 100644
index 163f00bf02..0000000000
--- a/code/modules/projectiles/projectile/special/temperature.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-/obj/projectile/temp
- name = "freeze beam"
- icon_state = "ice_2"
- damage = 0
- damage_type = BURN
- nodamage = FALSE
- flag = "energy"
- var/temperature = 100
-
-/obj/projectile/temp/on_hit(atom/target, blocked = 0)
- . = ..()
- if(isliving(target))
- var/mob/living/L = target
- L.adjust_bodytemperature(((100-blocked)/100)*(temperature - L.bodytemperature)) // the new body temperature is adjusted by 100-blocked % of the delta between body temperature and the bullet's effect temperature
-
-/obj/projectile/temp/hot
- name = "heat beam"
- temperature = 400
-
-/obj/projectile/temp/cryo
- name = "cryo beam"
- range = 3
-
-/obj/projectile/temp/cryo/on_range()
- var/turf/T = get_turf(src)
- if(isopenturf(T))
- var/turf/open/O = T
- O.freon_gas_act()
- return ..()
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 9613113a40..6750503ad4 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -623,8 +623,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
M.adjustStaminaLoss(-10, 0)
if(prob(20))
new /datum/hallucination/items_other(M)
- if(prob(10))
- new /datum/hallucination/stray_bullet(M)
..()
. = 1
@@ -1149,12 +1147,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Fetching Fizz"
glass_desc = ""
-
-/datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/carbon/M)
- for(var/obj/item/stack/ore/O in orange(3, M))
- step_towards(O, get_turf(M))
- return ..()
-
//Another reference. Heals those in critical condition extremely quickly.
/datum/reagent/consumable/ethanol/hearty_punch
name = "Hearty Punch"
@@ -1877,18 +1869,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_name = "Bug Spray"
glass_desc = ""
-/datum/reagent/consumable/ethanol/bug_spray/on_mob_life(mob/living/carbon/M)
-//Bugs should not drink Bug spray.
- if(ismoth(M) || isflyperson(M))
- M.adjustToxLoss(1,0)
- return ..()
-/datum/reagent/consumable/ethanol/bug_spray/on_mob_metabolize(mob/living/carbon/M)
-
- if(ismoth(M) || isflyperson(M))
- M.emote("scream")
- return ..()
-
-
/datum/reagent/consumable/ethanol/applejack
name = "Applejack"
description = "The perfect beverage for when you feel the need to horse around."
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index 960255a415..ebd0087c22 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -294,106 +294,6 @@
..()
. = 1
-/datum/reagent/drug/bath_salts
- name = "Bath Salts"
- description = "Makes you impervious to stuns and grants a stamina regeneration buff, but you will be a nearly uncontrollable tramp-bearded raving lunatic."
- reagent_state = LIQUID
- color = "#FAFAFA"
- overdose_threshold = 20
- addiction_threshold = 10
- taste_description = "salt" // because they're bathsalts?
- var/datum/brain_trauma/special/psychotic_brawling/bath_salts/rage
-
-/datum/reagent/drug/bath_salts/on_mob_metabolize(mob/living/L)
- ..()
- ADD_TRAIT(L, TRAIT_STUNIMMUNE, type)
- ADD_TRAIT(L, TRAIT_SLEEPIMMUNE, type)
- if(iscarbon(L))
- var/mob/living/carbon/C = L
- rage = new()
- C.gain_trauma(rage, TRAUMA_RESILIENCE_ABSOLUTE)
-
-/datum/reagent/drug/bath_salts/on_mob_end_metabolize(mob/living/L)
- REMOVE_TRAIT(L, TRAIT_STUNIMMUNE, type)
- REMOVE_TRAIT(L, TRAIT_SLEEPIMMUNE, type)
- if(rage)
- QDEL_NULL(rage)
- ..()
-
-/datum/reagent/drug/bath_salts/on_mob_life(mob/living/carbon/M)
- var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.")
- if(prob(5))
- to_chat(M, "[high_message]")
- SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "salted", /datum/mood_event/stimulant_heavy, name)
- M.adjustStaminaLoss(-5, 0)
- M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 4)
- M.hallucination += 5
- if((M.mobility_flags & MOBILITY_MOVE) && !ismovableatom(M.loc))
- step(M, pick(GLOB.cardinals))
- step(M, pick(GLOB.cardinals))
- ..()
- . = 1
-
-/datum/reagent/drug/bath_salts/overdose_process(mob/living/M)
- M.hallucination += 5
- if((M.mobility_flags & MOBILITY_MOVE) && !ismovableatom(M.loc))
- for(var/i in 1 to 8)
- step(M, pick(GLOB.cardinals))
- if(prob(20))
- M.emote(pick("twitch","drool","moan"))
- if(prob(33))
- M.drop_all_held_items()
- ..()
-
-/datum/reagent/drug/bath_salts/addiction_act_stage1(mob/living/M)
- M.hallucination += 10
- if((M.mobility_flags & MOBILITY_MOVE) && !ismovableatom(M.loc))
- for(var/i = 0, i < 8, i++)
- step(M, pick(GLOB.cardinals))
- M.Jitter(5)
- M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10)
- if(prob(20))
- M.emote(pick("twitch","drool","moan"))
- ..()
-
-/datum/reagent/drug/bath_salts/addiction_act_stage2(mob/living/M)
- M.hallucination += 20
- if((M.mobility_flags & MOBILITY_MOVE) && !ismovableatom(M.loc))
- for(var/i = 0, i < 8, i++)
- step(M, pick(GLOB.cardinals))
- M.Jitter(10)
- M.Dizzy(10)
- M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10)
- if(prob(30))
- M.emote(pick("twitch","drool","moan"))
- ..()
-
-/datum/reagent/drug/bath_salts/addiction_act_stage3(mob/living/M)
- M.hallucination += 30
- if((M.mobility_flags & MOBILITY_MOVE) && !ismovableatom(M.loc))
- for(var/i = 0, i < 12, i++)
- step(M, pick(GLOB.cardinals))
- M.Jitter(15)
- M.Dizzy(15)
- M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10)
- if(prob(40))
- M.emote(pick("twitch","drool","moan"))
- ..()
-
-/datum/reagent/drug/bath_salts/addiction_act_stage4(mob/living/carbon/human/M)
- M.hallucination += 30
- if((M.mobility_flags & MOBILITY_MOVE) && !ismovableatom(M.loc))
- for(var/i = 0, i < 16, i++)
- step(M, pick(GLOB.cardinals))
- M.Jitter(50)
- M.Dizzy(50)
- M.adjustToxLoss(5, 0)
- M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10)
- if(prob(50))
- M.emote(pick("twitch","drool","moan"))
- ..()
- . = 1
-
/datum/reagent/drug/aranesp
name = "Aranesp"
description = "Amps you up, gets you going, and rapidly restores stamina damage. Side effects include breathlessness and toxicity."
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 2e218f5b8c..b7ae47634f 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -453,11 +453,10 @@
taste_description = "chalky wheat"
/datum/reagent/consumable/flour/reaction_turf(turf/T, reac_volume)
- if(!isspaceturf(T))
- var/obj/effect/decal/cleanable/food/flour/reagentdecal = new(T)
- reagentdecal = locate() in T //Might have merged with flour already there.
- if(reagentdecal)
- reagentdecal.reagents.add_reagent(/datum/reagent/consumable/flour, reac_volume)
+ var/obj/effect/decal/cleanable/food/flour/reagentdecal = new(T)
+ reagentdecal = locate() in T //Might have merged with flour already there.
+ if(reagentdecal)
+ reagentdecal.reagents.add_reagent(/datum/reagent/consumable/flour, reac_volume)
/datum/reagent/consumable/cherryjelly
name = "Cherry Jelly"
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 5c66e8b8ea..3fe87c74f3 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -133,33 +133,13 @@
/datum/reagent/water/reaction_turf(turf/open/T, reac_volume)
if(!istype(T))
return
-// var/CT = cooling_temperature
-
if(reac_volume >= 5)
-// T.MakeSlippery(TURF_WET_WATER, reac_volume*1.5 SECONDS, reac_volume*1.5 SECONDS)
- T.add_water(reac_volume * 3) //nuproc
-
-// for(var/mob/living/simple_animal/slime/M in T)
-// M.apply_water()
-
-// if(reac_volume >= 100)
-// for(var/obj/effect/decal/cleanable/blood/target in T)
-// qdel(target)
-// for(var/obj/effect/decal/cleanable/trail_holder/target in T)
-// qdel(target)
+ T.add_water(reac_volume * 3) //nuprocet)
var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T)
- if(hotspot && !isspaceturf(T))
-// if(T.air)
-// var/datum/gas_mixture/G = T.air
-// G.temperature = max(min(G.temperature-(CT*1000),G.temperature/CT),TCMB)
-// G.react(src)
+ if(hotspot)
new /obj/effect/temp_visual/small_smoke(T)
qdel(hotspot)
- //fixed
-// var/obj/effect/acid/A = (locate(/obj/effect/acid) in T)
-// if(A)
-// A.acid_level = max(A.acid_level - reac_volume*50, 0)
/*
* Water reaction to an object
@@ -487,34 +467,6 @@
race = /datum/species/lizard
taste_description = "dragon's breath but not as cool"
-/datum/reagent/mutationtoxin/fly
- name = "Fly Mutation Toxin"
- description = "An insectifying toxin."
- color = "#5EFF3B" //RGB: 94, 255, 59
- race = /datum/species/fly
- taste_description = "trash"
-
-/datum/reagent/mutationtoxin/moth
- name = "Moth Mutation Toxin"
- description = "A glowing toxin."
- color = "#5EFF3B" //RGB: 94, 255, 59
- race = /datum/species/moth
- taste_description = "clothing"
-
-/datum/reagent/mutationtoxin/pod
- name = "Podperson Mutation Toxin"
- description = "A vegetalizing toxin."
- color = "#5EFF3B" //RGB: 94, 255, 59
- race = /datum/species/pod
- taste_description = "flowers"
-
-/datum/reagent/mutationtoxin/golem
- name = "Golem Mutation Toxin"
- description = "A crystal toxin."
- color = "#5EFF3B" //RGB: 94, 255, 59
- race = /datum/species/golem/random
- taste_description = "rocks"
-
/datum/reagent/mutationtoxin/abductor
name = "Abductor Mutation Toxin"
description = "An alien toxin."
@@ -552,13 +504,6 @@
race = /datum/species/shadow
taste_description = "the night"
-/datum/reagent/mutationtoxin/plasma
- name = "Plasma Mutation Toxin"
- description = "A plasma-based toxin."
- color = "#5EFF3B" //RGB: 94, 255, 59
- race = /datum/species/plasmaman
- taste_description = "plasma"
-
#undef MUT_MSG_IMMEDIATE
#undef MUT_MSG_EXTENDED
#undef MUT_MSG_ABOUT2TURN
@@ -617,13 +562,6 @@
color = "#6E3B08" // rgb: 110, 59, 8
taste_description = "metal"
-/datum/reagent/copper/reaction_obj(obj/O, reac_volume)
- if(istype(O, /obj/item/stack/sheet/metal))
- var/obj/item/stack/sheet/metal/M = O
- reac_volume = min(reac_volume, M.amount)
- new/obj/item/stack/tile/bronze(get_turf(M), reac_volume)
- M.use(reac_volume)
-
/datum/reagent/nitrogen
name = "Nitrogen"
description = "A colorless, odorless, tasteless gas. A simple asphyxiant that can silently displace vital oxygen."
@@ -664,7 +602,7 @@
taste_mult = 0 // apparently tasteless.
/datum/reagent/mercury/on_mob_life(mob/living/carbon/M)
- if((M.mobility_flags & MOBILITY_MOVE) && !isspaceturf(M.loc))
+ if((M.mobility_flags & MOBILITY_MOVE))
step(M, pick(GLOB.cardinals))
if(prob(5))
M.emote(pick("twitch","drool","moan"))
@@ -686,10 +624,9 @@
taste_description = "sour chalk"
/datum/reagent/carbon/reaction_turf(turf/T, reac_volume)
- if(!isspaceturf(T))
- var/obj/effect/decal/cleanable/dirt/D = locate() in T.contents
- if(!D)
- new /obj/effect/decal/cleanable/dirt(T)
+ var/obj/effect/decal/cleanable/dirt/D = locate() in T.contents
+ if(!D)
+ new /obj/effect/decal/cleanable/dirt(T)
/datum/reagent/chlorine
name = "Chlorine"
@@ -737,7 +674,7 @@
taste_description = "metal"
/datum/reagent/lithium/on_mob_life(mob/living/carbon/M)
- if((M.mobility_flags & MOBILITY_MOVE) && !isspaceturf(M.loc))
+ if((M.mobility_flags & MOBILITY_MOVE))
step(M, pick(GLOB.cardinals))
if(prob(5))
M.emote(pick("twitch","drool","moan"))
@@ -796,11 +733,10 @@
/datum/reagent/uranium/reaction_turf(turf/T, reac_volume)
if(reac_volume >= 3)
- if(!isspaceturf(T))
- var/obj/effect/decal/cleanable/greenglow/GG = locate() in T.contents
- if(!GG)
- GG = new/obj/effect/decal/cleanable/greenglow(T)
- GG.reagents.add_reagent(type, reac_volume)
+ var/obj/effect/decal/cleanable/greenglow/GG = locate() in T.contents
+ if(!GG)
+ GG = new/obj/effect/decal/cleanable/greenglow(T)
+ GG.reagents.add_reagent(type, reac_volume)
/datum/reagent/uranium/radium
name = "Radium"
@@ -1266,101 +1202,6 @@
color = "#BC8A00"
taste_description = "metal"
-/datum/reagent/carpet
- name = "Carpet"
- description = "For those that need a more creative way to roll out a red carpet."
- reagent_state = LIQUID
- color = "#771100"
- taste_description = "carpet" // Your tounge feels furry.
- var/carpet_type = /turf/open/floor/carpet
-
-/datum/reagent/carpet/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
- var/turf/open/floor/F = T
- F.PlaceOnTop(carpet_type, flags = CHANGETURF_INHERIT_AIR)
- ..()
-
-/datum/reagent/carpet/black
- name = "Black Carpet"
- description = "The carpet also comes in... BLAPCK" //yes, the typo is intentional
- color = "#1E1E1E"
- taste_description = "licorice"
- carpet_type = /turf/open/floor/carpet/black
-
-/datum/reagent/carpet/blue
- name = "Blue Carpet"
- description = "For those that really need to chill out for a while."
- color = "#0000DC"
- taste_description = "frozen carpet"
- carpet_type = /turf/open/floor/carpet/blue
-
-/datum/reagent/carpet/cyan
- name = "Cyan Carpet"
- description = "For those that need a throwback to the years of using poison as a construction material. Smells like asbestos."
- color = "#00B4FF"
- taste_description = "asbestos"
- carpet_type = /turf/open/floor/carpet/cyan
-
-/datum/reagent/carpet/green
- name = "Green Carpet"
- description = "For those that need the perfect flourish for green eggs and ham."
- color = "#A8E61D"
- taste_description = "Green" //the caps is intentional
- carpet_type = /turf/open/floor/carpet/green
-
-/datum/reagent/carpet/orange
- name = "Orange Carpet"
- description = "For those that prefer a healthy carpet to go along with their healthy diet."
- color = "#E78108"
- taste_description = "orange juice"
- carpet_type = /turf/open/floor/carpet/orange
-
-/datum/reagent/carpet/purple
- name = "Purple Carpet"
- description = "For those that need to waste copious amounts of healing jelly in order to look fancy."
- color = "#91D865"
- taste_description = "jelly"
- carpet_type = /turf/open/floor/carpet/purple
-
-/datum/reagent/carpet/red
- name = "Red Carpet"
- description = "For those that need an even redder carpet."
- color = "#731008"
- taste_description = "blood and gibs"
- carpet_type = /turf/open/floor/carpet/red
-
-/datum/reagent/carpet/royal
- name = "Royal Carpet?"
- description = "For those that break the game and need to make an issue report."
-
-/datum/reagent/carpet/royal/on_mob_life(mob/living/carbon/M)
- . = ..()
- if(!M.mind?.assigned_role)
- return
- switch(M.mind.assigned_role)
- if("Chief Medical Officer", "Captain", "Chief Engineer", "Research Director", "Head of Personnel")
- if(prob(10))
- to_chat(M, "You feel like royalty.")
- if(prob(5))
- M.say(pick("Peasants..","This carpet is worth more than my contracts!","I could fire you at any time..."), forced = "royal carpet")
- if("Quartermaster")
- if(prob(15))
- to_chat(M, "You feel like an impostor...")
-
-/datum/reagent/carpet/royal/black
- name = "Royal Black Carpet"
- description = "For those that feel the need to show off their timewasting skills."
- color = "#000000"
- taste_description = "royalty"
- carpet_type = /turf/open/floor/carpet/royalblack
-
-/datum/reagent/carpet/royal/blue
- name = "Royal Blue Carpet"
- description = "For those that feel the need to show off their timewasting skills.. in BLUE."
- color = "#5A64C8"
- taste_description = "blueyalty" //also intentional
- carpet_type = /turf/open/floor/carpet/royalblue
-
/datum/reagent/bromine
name = "Bromine"
description = "A brownish liquid that's highly reactive. Useful for stopping free radicals, but not intended for human consumption."
@@ -1535,12 +1376,6 @@
if(istype(T))
T.MakeDry(ALL, TRUE, reac_volume * 5 SECONDS) //50 deciseconds per unit
-/datum/reagent/drying_agent/reaction_obj(obj/O, reac_volume)
- if(O.type == /obj/item/clothing/shoes/galoshes)
- var/t_loc = get_turf(O)
- qdel(O)
- new /obj/item/clothing/shoes/galoshes/dry(t_loc)
-
// Bee chemicals
/datum/reagent/royal_bee_jelly
diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
index 4a862efc3d..9e75b1ff84 100644
--- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
@@ -1,20 +1,4 @@
-/datum/reagent/thermite
- name = "Thermite"
- description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls."
- reagent_state = SOLID
- color = "#550000"
- taste_description = "sweet tasting metal"
-
-/datum/reagent/thermite/reaction_turf(turf/T, reac_volume)
- if(reac_volume >= 1)
- T.AddComponent(/datum/component/thermite, reac_volume)
-
-/datum/reagent/thermite/on_mob_life(mob/living/carbon/M)
- M.adjustFireLoss(1, 0)
- ..()
- return TRUE
-
/datum/reagent/nitroglycerin
name = "Nitroglycerin"
description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
@@ -28,49 +12,6 @@
color = "#FFFF00"
taste_description = "metal"
-/datum/reagent/clf3
- name = "Chlorine Trifluoride"
- description = "Makes a temporary 3x3 fireball when it comes into existence, so be careful when mixing. ClF3 applied to a surface burns things that wouldn't otherwise burn, sometimes through the very floors of the station and exposing it to the vacuum of space."
- reagent_state = LIQUID
- color = "#FFC8C8"
- metabolization_rate = 4
- taste_description = "burning"
-
-/datum/reagent/clf3/on_mob_life(mob/living/carbon/M)
- M.adjust_fire_stacks(2)
- var/burndmg = max(0.3*M.fire_stacks, 0.3)
- M.adjustFireLoss(burndmg, 0)
- ..()
- return TRUE
-
-/datum/reagent/clf3/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T))
- var/turf/open/floor/plating/F = T
- if(prob(10 + F.burnt + 5*F.broken)) //broken or burnt plating is more susceptible to being destroyed
- F.ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
- if(isfloorturf(T))
- var/turf/open/floor/F = T
- if(prob(reac_volume))
- F.make_plating()
- else if(prob(reac_volume))
- F.burn_tile()
- if(isfloorturf(F))
- for(var/turf/turf in range(1,F))
- if(!locate(/obj/effect/hotspot) in turf)
- new /obj/effect/hotspot(F)
- if(iswallturf(T))
- var/turf/closed/wall/W = T
- if(prob(reac_volume))
- W.ScrapeAway()
-
-/datum/reagent/clf3/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
- if(istype(M))
- if(method != INGEST && method != INJECT)
- M.adjust_fire_stacks(min(reac_volume/5, 10))
- M.IgniteMob()
- if(!locate(/obj/effect/hotspot) in M.loc)
- new /obj/effect/hotspot(M.loc)
-
/datum/reagent/sorium
name = "Sorium"
description = "Sends everything flying from the detonation point."
@@ -96,8 +37,6 @@
/datum/reagent/gunpowder/on_mob_life(mob/living/carbon/M)
. = TRUE
..()
- if(!isplasmaman(M))
- return
M.set_drugginess(15)
if(M.hallucination < volume)
M.hallucination += 5
@@ -261,7 +200,7 @@
F.lifetime = initial(F.lifetime) //reduce object churn a little bit when using smoke by keeping existing foam alive a bit longer
var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T)
- if(hotspot && !isspaceturf(T))
+ if(hotspot)
if(T.air)
var/datum/gas_mixture/G = T.air
if(G.temperature > T20C)
diff --git a/code/modules/reagents/chemistry/recipes/drugs.dm b/code/modules/reagents/chemistry/recipes/drugs.dm
index 0b66c232c8..ccdc96f5f1 100644
--- a/code/modules/reagents/chemistry/recipes/drugs.dm
+++ b/code/modules/reagents/chemistry/recipes/drugs.dm
@@ -28,13 +28,6 @@
required_reagents = list(/datum/reagent/medicine/ephedrine = 1, /datum/reagent/iodine = 1, /datum/reagent/phosphorus = 1, /datum/reagent/hydrogen = 1)
required_temp = 374
-/datum/chemical_reaction/bath_salts
- name = /datum/reagent/drug/bath_salts
- id = /datum/reagent/drug/bath_salts
- results = list(/datum/reagent/drug/bath_salts = 7)
- required_reagents = list(/datum/reagent/toxin/bad_food = 1, /datum/reagent/saltpetre = 1, /datum/reagent/consumable/nutriment = 1, /datum/reagent/space_cleaner = 1, /datum/reagent/consumable/enzyme = 1, /datum/reagent/consumable/tea = 1, /datum/reagent/mercury = 1)
- required_temp = 374
-
/datum/chemical_reaction/aranesp
name = /datum/reagent/drug/aranesp
id = /datum/reagent/drug/aranesp
diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm
index 342b1fe20e..1d42b51de4 100644
--- a/code/modules/reagents/chemistry/recipes/others.dm
+++ b/code/modules/reagents/chemistry/recipes/others.dm
@@ -47,27 +47,6 @@
results = list(/datum/reagent/consumable/sodiumchloride = 3)
required_reagents = list(/datum/reagent/water = 1, /datum/reagent/sodium = 1, /datum/reagent/chlorine = 1)
-/datum/chemical_reaction/plasmasolidification
- name = "Solid Plasma"
- id = "solidplasma"
- required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/consumable/frostoil = 5, /datum/reagent/toxin/plasma = 20)
- mob_react = FALSE
-
-/datum/chemical_reaction/plasmasolidification/on_reaction(datum/reagents/holder, created_volume)
- var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
- new /obj/item/stack/sheet/mineral/plasma(location)
-
-/datum/chemical_reaction/goldsolidification
- name = "Solid Gold"
- id = "solidgold"
- required_reagents = list(/datum/reagent/consumable/frostoil = 5, /datum/reagent/gold = 20, /datum/reagent/iron = 1)
- mob_react = FALSE
-
-/datum/chemical_reaction/goldsolidification/on_reaction(datum/reagents/holder, created_volume)
- var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
- new /obj/item/stack/sheet/mineral/gold(location)
/datum/chemical_reaction/capsaicincondensation
name = "Capsaicincondensation"
@@ -75,18 +54,6 @@
results = list(/datum/reagent/consumable/condensedcapsaicin = 5)
required_reagents = list(/datum/reagent/consumable/capsaicin = 1, /datum/reagent/consumable/ethanol = 5)
-/datum/chemical_reaction/soapification
- name = "Soapification"
- id = "soapification"
- required_reagents = list(/datum/reagent/liquidgibs = 10, /datum/reagent/lye = 10) // requires two scooped gib tiles
- required_temp = 374
- mob_react = FALSE
-
-/datum/chemical_reaction/soapification/on_reaction(datum/reagents/holder, created_volume)
- var/location = get_turf(holder.my_atom)
- for(var/i = 1, i <= created_volume, i++)
- new /obj/item/soap/homemade(location)
-
/datum/chemical_reaction/candlefication
name = "Candlefication"
id = "candlefication"
@@ -243,70 +210,6 @@
results = list(/datum/reagent/acetone = 3)
required_reagents = list(/datum/reagent/fuel/oil = 1, /datum/reagent/fuel = 1, /datum/reagent/oxygen = 1)
-/datum/chemical_reaction/carpet
- name = /datum/reagent/carpet
- id = /datum/reagent/carpet
- results = list(/datum/reagent/carpet = 2)
- required_reagents = list(/datum/reagent/drug/space_drugs = 1, /datum/reagent/blood = 1)
-
-/datum/chemical_reaction/carpet/black
- name = /datum/reagent/carpet/black
- id = /datum/reagent/carpet/black
- results = list(/datum/reagent/carpet/black = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/fuel/oil = 1)
-
-/datum/chemical_reaction/carpet/blue
- name = /datum/reagent/carpet/blue
- id = /datum/reagent/carpet/blue
- results = list(/datum/reagent/carpet/blue = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/cryostylane = 1)
-
-/datum/chemical_reaction/carpet/cyan
- name = /datum/reagent/carpet/cyan
- id = /datum/reagent/carpet/cyan
- results = list(/datum/reagent/carpet/cyan = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/toxin/cyanide = 1)
- //cyan = cyanide get it huehueuhuehuehheuhe
-
-/datum/chemical_reaction/carpet/green
- name = /datum/reagent/carpet/green
- id = /datum/reagent/carpet/green
- results = list(/datum/reagent/carpet/green = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/ethanol/beer/green = 1)
- //make green beer by grinding up green crayons and mixing with beer
-
-/datum/chemical_reaction/carpet/orange
- name = /datum/reagent/carpet/orange
- id = /datum/reagent/carpet/orange
- results = list(/datum/reagent/carpet/orange = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/consumable/orangejuice = 1)
-
-/datum/chemical_reaction/carpet/purple
- name = /datum/reagent/carpet/purple
- id = /datum/reagent/carpet/purple
- results = list(/datum/reagent/carpet/purple = 2)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/medicine/regen_jelly = 1)
- //slimes only party
-
-/datum/chemical_reaction/carpet/red
- name = /datum/reagent/carpet/red
- id = /datum/reagent/carpet/red
- results = list(/datum/reagent/carpet/red = 2)
- required_reagents = list(/datum/reagent/carpet/ = 1, /datum/reagent/liquidgibs = 1)
-
-/datum/chemical_reaction/carpet/royalblack
- name = /datum/reagent/carpet/royal/black
- id = /datum/reagent/carpet/royal/black
- results = list(/datum/reagent/carpet/royal/black = 2)
- required_reagents = list(/datum/reagent/carpet/black = 1, /datum/reagent/royal_bee_jelly = 1)
-
-/datum/chemical_reaction/carpet/royalblue
- name = /datum/reagent/carpet/royal/blue
- id = /datum/reagent/carpet/royal/blue
- results = list(/datum/reagent/carpet/royal/blue = 2)
- required_reagents = list(/datum/reagent/carpet/blue = 1, /datum/reagent/royal_bee_jelly = 1)
-
-
/datum/chemical_reaction/oil
name = "Oil"
id = /datum/reagent/fuel/oil
@@ -410,12 +313,6 @@
results = list(/datum/reagent/hair_dye = 5)
required_reagents = list(/datum/reagent/colorful_reagent = 1, /datum/reagent/uranium/radium = 1, /datum/reagent/drug/space_drugs = 1)
-/datum/chemical_reaction/barbers_aid
- name = /datum/reagent/barbers_aid
- id = /datum/reagent/barbers_aid
- results = list(/datum/reagent/barbers_aid = 5)
- required_reagents = list(/datum/reagent/carpet = 1, /datum/reagent/uranium/radium = 1, /datum/reagent/drug/space_drugs = 1)
-
/datum/chemical_reaction/concentrated_barbers_aid
name = /datum/reagent/concentrated_barbers_aid
id = /datum/reagent/concentrated_barbers_aid
@@ -452,17 +349,6 @@
results = list(/datum/reagent/consumable/laughter = 10) // Fuck it. I'm not touching this one.
required_reagents = list(/datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/banana = 1)
-/datum/chemical_reaction/plastic_polymers
- name = "plastic polymers"
- id = /datum/reagent/plastic_polymers
- required_reagents = list(/datum/reagent/fuel/oil = 5, /datum/reagent/toxin/acid = 2, /datum/reagent/ash = 3)
- required_temp = 374 //lazily consistent with soap & other crafted objects generically created with heat.
-
-/datum/chemical_reaction/plastic_polymers/on_reaction(datum/reagents/holder, created_volume)
- var/location = get_turf(holder.my_atom)
- for(var/i in 1 to created_volume)
- new /obj/item/stack/sheet/plastic(location)
-
/datum/chemical_reaction/pax
name = /datum/reagent/pax
id = /datum/reagent/pax
diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
index 9dc3ebb62e..54326c0721 100644
--- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
+++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm
@@ -166,12 +166,6 @@
/datum/chemical_reaction/reagent_explosion/gunpowder_explosion/on_reaction(datum/reagents/holder, created_volume)
addtimer(CALLBACK(src, PROC_REF(do_explosion), holder, created_volume), rand(5 SECONDS, 10 SECONDS))
-/datum/chemical_reaction/thermite
- name = "Thermite"
- id = /datum/reagent/thermite
- results = list(/datum/reagent/thermite = 3)
- required_reagents = list(/datum/reagent/aluminium = 1, /datum/reagent/iron = 1, /datum/reagent/oxygen = 1)
-
/datum/chemical_reaction/emp_pulse
name = "EMP Pulse"
id = "emp_pulse"
@@ -190,13 +184,6 @@
results = list(/datum/reagent/stabilizing_agent = 3)
required_reagents = list(/datum/reagent/iron = 1, /datum/reagent/oxygen = 1, /datum/reagent/hydrogen = 1)
-/datum/chemical_reaction/clf3
- name = "Chlorine Trifluoride"
- id = /datum/reagent/clf3
- results = list(/datum/reagent/clf3 = 4)
- required_reagents = list(/datum/reagent/chlorine = 1, /datum/reagent/fluorine = 3)
- required_temp = 424
-
/datum/chemical_reaction/clf3/on_reaction(datum/reagents/holder, created_volume)
var/turf/T = get_turf(holder.my_atom)
for(var/turf/turf in range(1,T))
diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm
index 8b93d75165..12cc83f2c5 100644
--- a/code/modules/reagents/reagent_containers/blood_pack.dm
+++ b/code/modules/reagents/reagent_containers/blood_pack.dm
@@ -67,22 +67,3 @@
/obj/item/reagent_containers/blood/universal
blood_type = "U"
-
-/obj/item/reagent_containers/blood/attackby(obj/item/I, mob/user, params)
- if (istype(I, /obj/item/pen) || istype(I, /obj/item/toy/crayon))
- if(!user.is_literate())
- to_chat(user, "I scribble illegibly on the label of [src]!")
- return
- var/t = stripped_input(user, "What would you like to label the blood pack?", name, null, 53)
- if(!user.canUseTopic(src, BE_CLOSE))
- return
- if(user.get_active_held_item() != I)
- return
- if(t)
- labelled = 1
- name = "blood pack - [t]"
- else
- labelled = 0
- update_pack_name()
- else
- return ..()
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 18245affab..49814f2e85 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -197,111 +197,6 @@
return
..()
-
-/obj/item/reagent_containers/glass/beaker
- name = "beaker"
- desc = ""
- icon = 'icons/obj/chemical.dmi'
- icon_state = "beaker"
- item_state = "beaker"
- custom_materials = list(/datum/material/glass=500)
- fill_icon_thresholds = list(0, 10, 25, 50, 75, 80, 90)
-
-/obj/item/reagent_containers/glass/beaker/Initialize()
- . = ..()
- update_icon()
-
-/obj/item/reagent_containers/glass/beaker/get_part_rating()
- return reagents.maximum_volume
-
-/obj/item/reagent_containers/glass/beaker/jar
- name = "honey jar"
- desc = ""
- icon = 'icons/obj/chemical.dmi'
- icon_state = "vapour"
-
-/obj/item/reagent_containers/glass/beaker/large
- name = "large beaker"
- desc = ""
- icon_state = "beakerlarge"
- custom_materials = list(/datum/material/glass=2500)
- volume = 100
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(5,10,15,20,25,30,50,100)
-
-/obj/item/reagent_containers/glass/beaker/plastic
- name = "x-large beaker"
- desc = ""
- icon_state = "beakerwhite"
- custom_materials = list(/datum/material/glass=2500, /datum/material/plastic=3000)
- volume = 120
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(5,10,15,20,25,30,60,120)
-
-/obj/item/reagent_containers/glass/beaker/plastic/update_icon()
- icon_state = "beakerlarge" // hack to lets us reuse the large beaker reagent fill states
- ..()
- icon_state = "beakerwhite"
-
-/obj/item/reagent_containers/glass/beaker/meta
- name = "metamaterial beaker"
- desc = ""
- icon_state = "beakergold"
- custom_materials = list(/datum/material/glass=2500, /datum/material/plastic=3000, /datum/material/gold=1000, /datum/material/titanium=1000)
- volume = 180
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(5,10,15,20,25,30,60,120,180)
-
-/obj/item/reagent_containers/glass/beaker/noreact
- name = "cryostasis beaker"
- desc = "A cryostasis beaker that allows for chemical storage without \
- reactions. Can hold up to 50 units."
- icon_state = "beakernoreact"
- custom_materials = list(/datum/material/iron=3000)
- reagent_flags = OPENCONTAINER | NO_REACT
- volume = 50
- amount_per_transfer_from_this = 10
-
-/obj/item/reagent_containers/glass/beaker/bluespace
- name = "bluespace beaker"
- desc = "A bluespace beaker, powered by experimental bluespace technology \
- and Element Cuban combined with the Compound Pete. Can hold up to \
- 300 units."
- icon_state = "beakerbluespace"
- custom_materials = list(/datum/material/glass = 5000, /datum/material/plasma = 3000, /datum/material/diamond = 1000, /datum/material/bluespace = 1000)
- volume = 300
- material_flags = MATERIAL_NO_EFFECTS
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(5,10,15,20,25,30,50,100,300)
-
-/obj/item/reagent_containers/glass/beaker/cryoxadone
- list_reagents = list(/datum/reagent/medicine/cryoxadone = 30)
-
-/obj/item/reagent_containers/glass/beaker/sulphuric
- list_reagents = list(/datum/reagent/toxin/acid = 50)
-
-/obj/item/reagent_containers/glass/beaker/slime
- list_reagents = list(/datum/reagent/toxin/slimejelly = 50)
-
-/obj/item/reagent_containers/glass/beaker/large/libital
- name = "libital reserve tank (diluted)"
- list_reagents = list(/datum/reagent/medicine/C2/libital = 10,/datum/reagent/medicine/granibitaluri = 40)
-
-/obj/item/reagent_containers/glass/beaker/large/aiuri
- name = "aiuri reserve tank (diluted)"
- list_reagents = list(/datum/reagent/medicine/C2/aiuri = 10, /datum/reagent/medicine/granibitaluri = 40)
-
-/obj/item/reagent_containers/glass/beaker/large/multiver
- name = "multiver reserve tank (diluted)"
- list_reagents = list(/datum/reagent/medicine/C2/multiver = 10, /datum/reagent/medicine/granibitaluri = 40)
-
-/obj/item/reagent_containers/glass/beaker/large/epinephrine
- name = "epinephrine reserve tank (diluted)"
- list_reagents = list(/datum/reagent/medicine/epinephrine = 50)
-
-/obj/item/reagent_containers/glass/beaker/instabitaluri
- list_reagents = list(/datum/reagent/medicine/C2/instabitaluri = 50)
-
/obj/item/reagent_containers/glass/bucket
name = "bucket"
desc = ""
@@ -311,7 +206,6 @@
icon_state = "woodbucket"
item_state = "woodbucket"
max_integrity = 300
- custom_materials = list(/datum/material/iron=200)
w_class = WEIGHT_CLASS_BULKY
amount_per_transfer_from_this = 9
possible_transfer_amounts = list(9)
@@ -388,151 +282,19 @@
cut_overlays()
- if(reagents.total_volume > 0)
- if(reagents.total_volume <= 50)
+ if(reagents.total_volume > 0)
+ if(reagents.total_volume <= 50)
var/mutable_appearance/filling = mutable_appearance('modular/Neu_Food/icons/cooking.dmi', "bucket_half")
filling.color = mix_color_from_reagents(reagents.reagent_list)
filling.alpha = mix_alpha_from_reagents(reagents.reagent_list)
add_overlay(filling)
- if(reagents.total_volume > 50)
+ if(reagents.total_volume > 50)
var/mutable_appearance/filling = mutable_appearance('modular/Neu_Food/icons/cooking.dmi', "bucket_full")
filling.color = mix_color_from_reagents(reagents.reagent_list)
filling.alpha = mix_alpha_from_reagents(reagents.reagent_list)
add_overlay(filling)
-
-
-
-/obj/item/reagent_containers/glass/waterbottle
- name = "bottle of water"
- desc = ""
- icon = 'icons/obj/drinks.dmi'
- icon_state = "smallbottle"
- item_state = "bottle"
- list_reagents = list(/datum/reagent/water = 49.5, /datum/reagent/fluorine = 0.5)//see desc, don't think about it too hard
- custom_materials = list(/datum/material/plastic=1000)
- volume = 50
- amount_per_transfer_from_this = 10
- fill_icon_thresholds = list(0, 10, 25, 50, 75, 80, 90)
-
- // The 2 bottles have separate cap overlay icons because if the bottle falls over while bottle flipping the cap stays fucked on the moved overlay
- var/cap_icon_state = "bottle_cap_small"
- var/cap_on = TRUE
- var/cap_lost = FALSE
- var/mutable_appearance/cap_overlay
- var/flip_chance = 10
-
-/obj/item/reagent_containers/glass/waterbottle/Initialize()
- . = ..()
- cap_overlay = mutable_appearance(icon, cap_icon_state)
- if(cap_on)
- spillable = FALSE
- add_overlay(cap_overlay, TRUE)
-
-/obj/item/reagent_containers/glass/waterbottle/examine(mob/user)
- . = ..()
- if(cap_lost)
- . += "The cap seems to be missing."
- else if(cap_on)
- . += "The cap is firmly on to prevent spilling. Alt-click to remove the cap."
- else
- . += "The cap has been taken off. Alt-click to put a cap on."
-
-/obj/item/reagent_containers/glass/waterbottle/AltClick(mob/user)
- . = ..()
- if(cap_lost)
- to_chat(user, "The cap seems to be missing! Where did it go?")
- return
-
- var/fumbled = HAS_TRAIT(user, TRAIT_CLUMSY) && prob(5)
- if(cap_on || fumbled)
- cap_on = FALSE
- spillable = TRUE
- cut_overlay(cap_overlay, TRUE)
- animate(src, transform = null, time = 2, loop = 0)
- if(fumbled)
- to_chat(user, "I fumble with [src]'s cap! The cap falls onto the ground and simply vanishes. Where the hell did it go?")
- cap_lost = TRUE
- else
- to_chat(user, "I remove the cap from [src].")
- else
- cap_on = TRUE
- spillable = FALSE
- add_overlay(cap_overlay, TRUE)
- to_chat(user, "I put the cap on [src].")
- update_icon()
-
-/obj/item/reagent_containers/glass/waterbottle/is_refillable()
- if(cap_on)
- return FALSE
- . = ..()
-
-/obj/item/reagent_containers/glass/waterbottle/is_drainable()
- if(cap_on)
- return FALSE
- . = ..()
-
-/obj/item/reagent_containers/glass/waterbottle/attack(mob/M, mob/user, obj/target)
- if(cap_on && reagents.total_volume && istype(M))
- to_chat(user, "I must remove the cap before you can do that!")
- return
- . = ..()
-
-/obj/item/reagent_containers/glass/waterbottle/afterattack(obj/target, mob/user, proximity)
- if(cap_on && (target.is_refillable() || target.is_drainable() || (reagents.total_volume && user.used_intent.type == INTENT_HARM)))
- to_chat(user, "I must remove the cap before you can do that!")
- return
-
- else if(istype(target, /obj/item/reagent_containers/glass/waterbottle))
- var/obj/item/reagent_containers/glass/waterbottle/WB = target
- if(WB.cap_on)
- to_chat(user, "[WB] has a cap firmly twisted on!")
- . = ..()
-
-// heehoo bottle flipping
-/obj/item/reagent_containers/glass/waterbottle/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
- . = ..()
- if(cap_on && reagents.total_volume)
- if(prob(flip_chance)) // landed upright
- src.visible_message("[src] lands upright!")
- SEND_SIGNAL(throwingdatum.thrower, COMSIG_ADD_MOOD_EVENT, "bottle_flip", /datum/mood_event/bottle_flip)
- else // landed on it's side
- animate(src, transform = matrix(prob(50)? 90 : -90, MATRIX_ROTATE), time = 3, loop = 0)
-
-/obj/item/reagent_containers/glass/waterbottle/pickup(mob/user)
- . = ..()
- animate(src, transform = null, time = 1, loop = 0)
-
-/obj/item/reagent_containers/glass/waterbottle/empty
- list_reagents = list()
- cap_on = FALSE
-
-/obj/item/reagent_containers/glass/waterbottle/large
- desc = ""
- icon_state = "largebottle"
- custom_materials = list(/datum/material/plastic=3000)
- list_reagents = list(/datum/reagent/water = 100)
- volume = 100
- amount_per_transfer_from_this = 20
- cap_icon_state = "bottle_cap"
-
-/obj/item/reagent_containers/glass/waterbottle/large/empty
- list_reagents = list()
- cap_on = FALSE
-
-// Admin spawn
-/obj/item/reagent_containers/glass/waterbottle/relic
- name = "mysterious bottle"
- desc = ""
- flip_chance = 100 // FLIPP
-
-/obj/item/reagent_containers/glass/waterbottle/relic/Initialize()
- var/datum/reagent/random_reagent = get_random_reagent_id()
- list_reagents = list((random_reagent) = 50) // without parentheses, it's "random_reagent" the string
- . = ..()
- desc += "The writing reads '[random_reagent.name]'."
-
/obj/item/pestle
name = "pestle"
desc = ""
@@ -592,27 +354,3 @@
grinded = I
return
to_chat(user, "I can't grind this!")
-
-/obj/item/reagent_containers/glass/saline
- name = "saline canister"
- volume = 5000
- list_reagents = list(/datum/reagent/medicine/salglu_solution = 5000)
-
-/obj/item/reagent_containers/glass/colocup
- name = "colo cup"
- desc = ""
- icon = 'icons/obj/drinks.dmi'
- icon_state = "colocup"
- lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
- item_state = "colocup"
- custom_materials = list(/datum/material/plastic = 1000)
- possible_transfer_amounts = list(5, 10, 15, 20)
- volume = 20
- amount_per_transfer_from_this = 5
-
-/obj/item/reagent_containers/glass/colocup/Initialize()
- .=..()
- icon_state = "colocup[rand(0, 6)]"
- pixel_x = rand(-4,4)
- pixel_y = rand(-4,4)
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
deleted file mode 100644
index 0c54425089..0000000000
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ /dev/null
@@ -1,413 +0,0 @@
-/obj/item/reagent_containers/spray
- name = "spray bottle"
- desc = ""
- icon = 'icons/obj/janitor.dmi'
- icon_state = "sprayer_large"
- item_state = "cleaner"
- lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
- item_flags = NOBLUDGEON
- reagent_flags = OPENCONTAINER
- slot_flags = ITEM_SLOT_BELT
- throwforce = 0
- w_class = WEIGHT_CLASS_SMALL
- throw_speed = 3
- throw_range = 7
- var/stream_mode = 0 //whether we use the more focused mode
- var/current_range = 3 //the range of tiles the sprayer will reach.
- var/spray_range = 3 //the range of tiles the sprayer will reach when in spray mode.
- var/stream_range = 1 //the range of tiles the sprayer will reach when in stream mode.
- var/stream_amount = 10 //the amount of reagents transfered when in stream mode.
- var/can_fill_from_container = TRUE
- amount_per_transfer_from_this = 5
- volume = 250
- possible_transfer_amounts = list(5,10,15,20,25,30,50,100)
-
-/obj/item/reagent_containers/spray/afterattack(atom/A, mob/user)
- . = ..()
- if(istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart))
- return
-
- if((A.is_drainable() && !A.is_refillable()) && get_dist(src,A) <= 1 && can_fill_from_container)
- if(!A.reagents.total_volume)
- to_chat(user, "[A] is empty.")
- return
-
- if(reagents.holder_full())
- to_chat(user, "[src] is full.")
- return
-
- var/trans = A.reagents.trans_to(src, 50, transfered_by = user) //transfer 50u , using the spray's transfer amount would take too long to refill
- to_chat(user, "I fill \the [src] with [trans] units of the contents of \the [A].")
- return
-
- if(reagents.total_volume < amount_per_transfer_from_this)
- to_chat(user, "Not enough left!")
- return
-
- spray(A, user)
-
- playsound(src.loc, 'sound/blank.ogg', 50, TRUE, -6)
- user.changeNext_move(CLICK_CD_RANGE*2)
- user.newtonian_move(get_dir(A, user))
-
- var/turf/T = get_turf(src)
- var/contained = reagents.log_list()
-
- log_combat(user, T, "sprayed", src, addition="which had [contained]")
- log_game("[key_name(user)] fired [contained] from \a [src] at [AREACOORD(T)].") //copypasta falling out of my pockets
- return
-
-
-/obj/item/reagent_containers/spray/proc/spray(atom/A, mob/user)
- var/range = max(min(current_range, get_dist(src, A)), 1)
- var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src))
- D.create_reagents(amount_per_transfer_from_this)
- var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed
- if(stream_mode)
- reagents.trans_to(D, amount_per_transfer_from_this)
- puff_reagent_left = 1
- else
- reagents.trans_to(D, amount_per_transfer_from_this, 1/range)
- D.color = mix_color_from_reagents(D.reagents.reagent_list)
- var/wait_step = max(round(2+3/range), 2)
- do_spray(A, wait_step, D, range, puff_reagent_left, user)
-
-/obj/item/reagent_containers/spray/proc/do_spray(atom/A, wait_step, obj/effect/decal/chempuff/D, range, puff_reagent_left, mob/user)
- set waitfor = FALSE
- var/range_left = range
- for(var/i=0, i 0 && (!stream_mode || !range_left))
- D.reagents.reaction(get_turf(D), VAPOR)
- puff_reagent_left -= 1
-
- if(puff_reagent_left <= 0) // we used all the puff so we delete it.
- qdel(D)
- return
- qdel(D)
-
-/obj/item/reagent_containers/spray/attack_self(mob/user)
- stream_mode = !stream_mode
- if(stream_mode)
- amount_per_transfer_from_this = stream_amount
- current_range = stream_range
- else
- amount_per_transfer_from_this = initial(amount_per_transfer_from_this)
- current_range = spray_range
- to_chat(user, "I switch the nozzle setting to [stream_mode ? "\"stream\"":"\"spray\""]. You'll now use [amount_per_transfer_from_this] units per use.")
-
-/obj/item/reagent_containers/spray/attackby(obj/item/I, mob/user, params)
- var/hotness = I.get_temperature()
- if(hotness && reagents)
- reagents.expose_temperature(hotness)
- to_chat(user, "I heat [name] with [I]!")
- return ..()
-
-/obj/item/reagent_containers/spray/verb/empty()
- set name = "Empty Spray Bottle"
- set hidden = 1
- set src in usr
- if(usr.incapacitated())
- return
- if (alert(usr, "Are you sure you want to empty that?", "Empty Bottle:", "Yes", "No") != "Yes")
- return
- if(isturf(usr.loc) && src.loc == usr)
- to_chat(usr, "I empty \the [src] onto the floor.")
- reagents.reaction(usr.loc)
- src.reagents.clear_reagents()
-
-/obj/item/reagent_containers/spray/on_reagent_change(changetype)
- var/total_reagent_weight
- var/amount_of_reagents
- for (var/datum/reagent/R in reagents.reagent_list)
- total_reagent_weight = total_reagent_weight + R.reagent_weight
- amount_of_reagents++
-
- if(total_reagent_weight && amount_of_reagents) //don't bother if the container is empty - DIV/0
- var/average_reagent_weight = total_reagent_weight / amount_of_reagents
- spray_range = CLAMP(round((initial(spray_range) / average_reagent_weight) - ((amount_of_reagents - 1) * 1)), 3, 5) //spray distance between 3 and 5 tiles rounded down; extra reagents lose a tile
- else
- spray_range = initial(spray_range)
- if(stream_mode == 0)
- current_range = spray_range
-
-//space cleaner
-/obj/item/reagent_containers/spray/cleaner
- name = "space cleaner"
- desc = ""
- icon_state = "cleaner"
- volume = 100
- list_reagents = list(/datum/reagent/space_cleaner = 100)
- amount_per_transfer_from_this = 2
- stream_amount = 5
-
-/obj/item/reagent_containers/spray/cleaner/suicide_act(mob/user)
- user.visible_message("[user] is putting the nozzle of \the [src] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide!")
- if(do_mob(user,user,30))
- if(reagents.total_volume >= amount_per_transfer_from_this)//if not empty
- user.visible_message("[user] pulls the trigger!")
- src.spray(user)
- return BRUTELOSS
- else
- user.visible_message("[user] pulls the trigger...but \the [src] is empty!")
- return SHAME
- else
- user.visible_message("[user] decided life was worth living.")
- return
-
-//spray tan
-/obj/item/reagent_containers/spray/spraytan
- name = "spray tan"
- volume = 50
- desc = ""
- list_reagents = list(/datum/reagent/spraytan = 50)
-
-
-//pepperspray
-/obj/item/reagent_containers/spray/pepper
- name = "pepperspray"
- desc = ""
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "pepperspray"
- item_state = "pepperspray"
- lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
- volume = 50
- stream_range = 4
- amount_per_transfer_from_this = 5
- list_reagents = list(/datum/reagent/consumable/condensedcapsaicin = 50)
-
-/obj/item/reagent_containers/spray/pepper/empty //for protolathe printing
- list_reagents = null
-
-/obj/item/reagent_containers/spray/pepper/suicide_act(mob/living/carbon/user)
- user.visible_message("[user] begins huffing \the [src]! It looks like [user.p_theyre()] getting a dirty high!")
- return OXYLOSS
-
-// Fix pepperspraying yourself
-/obj/item/reagent_containers/spray/pepper/afterattack(atom/A as mob|obj, mob/user)
- if (A.loc == user)
- return
- . = ..()
-
-//water flower
-/obj/item/reagent_containers/spray/waterflower
- name = "water flower"
- desc = ""
- icon = 'icons/obj/hydroponics/harvest.dmi'
- icon_state = "sunflower"
- item_state = "sunflower"
- amount_per_transfer_from_this = 1
- volume = 10
- list_reagents = list(/datum/reagent/water = 10)
-
-/obj/item/reagent_containers/spray/waterflower/attack_self(mob/user) //Don't allow changing how much the flower sprays
- return
-
-///Subtype used for the lavaland clown ruin.
-/obj/item/reagent_containers/spray/waterflower/superlube
- name = "clown flower"
- desc = ""
- icon = 'icons/obj/chemical.dmi'
- icon_state = "clownflower"
- volume = 30
- list_reagents = list(/datum/reagent/lube/superlube = 30)
-
-/obj/item/reagent_containers/spray/waterflower/cyborg
- reagent_flags = NONE
- volume = 100
- list_reagents = list(/datum/reagent/water = 100)
- var/generate_amount = 5
- var/generate_type = /datum/reagent/water
- var/last_generate = 0
- var/generate_delay = 10 //deciseconds
- can_fill_from_container = FALSE
-
-/obj/item/reagent_containers/spray/waterflower/cyborg/hacked
- name = "nova flower"
- desc = ""
- list_reagents = list(/datum/reagent/clf3 = 3)
- volume = 3
- generate_type = /datum/reagent/clf3
- generate_amount = 1
- generate_delay = 40 //deciseconds
-
-/obj/item/reagent_containers/spray/waterflower/cyborg/Initialize()
- . = ..()
- START_PROCESSING(SSfastprocess, src)
-
-/obj/item/reagent_containers/spray/waterflower/cyborg/Destroy()
- STOP_PROCESSING(SSfastprocess, src)
- return ..()
-
-/obj/item/reagent_containers/spray/waterflower/cyborg/process()
- if(world.time < last_generate + generate_delay)
- return
- last_generate = world.time
- generate_reagents()
-
-/obj/item/reagent_containers/spray/waterflower/cyborg/empty()
- to_chat(usr, "I can not empty this!")
- return
-
-/obj/item/reagent_containers/spray/waterflower/cyborg/proc/generate_reagents()
- reagents.add_reagent(generate_type, generate_amount)
-
-//chemsprayer
-/obj/item/reagent_containers/spray/chemsprayer
- name = "chem sprayer"
- desc = ""
- icon = 'icons/obj/guns/projectile.dmi'
- icon_state = "chemsprayer"
- item_state = "chemsprayer"
- lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
- throwforce = 0
- w_class = WEIGHT_CLASS_NORMAL
- stream_mode = 1
- current_range = 7
- spray_range = 4
- stream_range = 7
- amount_per_transfer_from_this = 10
- volume = 600
-
-/obj/item/reagent_containers/spray/chemsprayer/afterattack(atom/A as mob|obj, mob/user)
- // Make it so the bioterror spray doesn't spray myself when you click your inventory items
- if (A.loc == user)
- return
- . = ..()
-
-/obj/item/reagent_containers/spray/chemsprayer/spray(atom/A, mob/user)
- var/direction = get_dir(src, A)
- var/turf/T = get_turf(A)
- var/turf/T1 = get_step(T,turn(direction, 90))
- var/turf/T2 = get_step(T,turn(direction, -90))
- var/list/the_targets = list(T,T1,T2)
-
- for(var/i=1, i<=3, i++) // intialize sprays
- if(reagents.total_volume < 1)
- return
- ..(the_targets[i], user)
-
-/obj/item/reagent_containers/spray/chemsprayer/bioterror
- list_reagents = list(/datum/reagent/toxin/sodium_thiopental = 100, /datum/reagent/toxin/coniine = 100, /datum/reagent/toxin/venom = 100, /datum/reagent/consumable/condensedcapsaicin = 100, /datum/reagent/toxin/initropidril = 100, /datum/reagent/toxin/polonium = 100)
-
-
-/obj/item/reagent_containers/spray/chemsprayer/janitor
- name = "janitor chem sprayer"
- desc = ""
- icon_state = "chemsprayer_janitor"
- item_state = "chemsprayer_janitor"
- lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
- reagent_flags = NONE
- list_reagents = list(/datum/reagent/space_cleaner = 1000)
- volume = 1000
- amount_per_transfer_from_this = 5
- var/generate_amount = 50
- var/generate_type = /datum/reagent/space_cleaner
- var/last_generate = 0
- var/generate_delay = 10 //deciseconds
-
-/obj/item/reagent_containers/spray/chemsprayer/janitor/Initialize()
- . = ..()
- START_PROCESSING(SSfastprocess, src)
-
-/obj/item/reagent_containers/spray/chemsprayer/janitor/Destroy()
- STOP_PROCESSING(SSfastprocess, src)
- return ..()
-
-/obj/item/reagent_containers/spray/chemsprayer/janitor/process()
- if(world.time < last_generate + generate_delay)
- return
- last_generate = world.time
- reagents.add_reagent(generate_type, generate_amount)
-
-// Plant-B-Gone
-/obj/item/reagent_containers/spray/plantbgone // -- Skie
- name = "Plant-B-Gone"
- desc = ""
- icon = 'icons/obj/hydroponics/equipment.dmi'
- icon_state = "plantbgone"
- item_state = "plantbgone"
- lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/hydroponics_righthand.dmi'
- volume = 100
- list_reagents = list(/datum/reagent/toxin/plantbgone = 100)
-
-/obj/item/reagent_containers/spray/syndicate
- name = "suspicious spray bottle"
- desc = ""
- icon = 'icons/obj/chemical.dmi'
- icon_state = "sprayer_sus_8"
- item_state = "sprayer_sus"
- lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- spray_range = 4
- stream_range = 2
- volume = 100
- custom_premium_price = 200
-
-/obj/item/reagent_containers/spray/syndicate/Initialize()
- . = ..()
- icon_state = pick("sprayer_sus_1", "sprayer_sus_2", "sprayer_sus_3", "sprayer_sus_4", "sprayer_sus_5","sprayer_sus_6", "sprayer_sus_7", "sprayer_sus_8")
-
-/obj/item/reagent_containers/spray/medical
- name = "medical spray bottle"
- icon = 'icons/obj/chemical.dmi'
- icon_state = "sprayer_med_red"
- item_state = "sprayer_med_red"
- lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- volume = 100
- unique_reskin = list("Red" = "sprayer_med_red",
- "Yellow" = "sprayer_med_yellow",
- "Blue" = "sprayer_med_blue")
-
-/obj/item/reagent_containers/spray/medical/AltClick(mob/user)
- if(unique_reskin && !current_skin && user.canUseTopic(src, BE_CLOSE, NO_DEXTERITY))
- reskin_obj(user)
-
-/obj/item/reagent_containers/spray/medical/reskin_obj(mob/M)
- ..()
- switch(icon_state)
- if("sprayer_med_red")
- item_state = "sprayer_med_red"
- if("sprayer_med_yellow")
- item_state = "sprayer_med_yellow"
- if("sprayer_med_blue")
- item_state = "sprayer_med_blue"
- M.update_inv_hands()
-
-/obj/item/reagent_containers/spray/rhigoxane
- name = "medical spray (rhigoxane)"
- desc = ""
- icon_state = "sprayer_large"
- list_reagents = list(/datum/reagent/medicine/rhigoxane = 100)
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 23fef46b45..61e9578cd0 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -12,7 +12,6 @@
var/mode = SYRINGE_DRAW
var/busy = FALSE // needed for delayed drawing of blood
var/proj_piercing = 0 //does it pierce through thick clothes when shot with syringe gun
- custom_materials = list(/datum/material/iron=10, /datum/material/glass=20)
reagent_flags = TRANSPARENT
/obj/item/reagent_containers/syringe/Initialize()
@@ -173,100 +172,3 @@
injoverlay = "inject"
add_overlay(injoverlay)
M.update_inv_hands()
-
-/obj/item/reagent_containers/syringe/epinephrine
- name = "syringe (epinephrine)"
- desc = ""
- list_reagents = list(/datum/reagent/medicine/epinephrine = 15)
-
-/obj/item/reagent_containers/syringe/multiver
- name = "syringe (multiver)"
- desc = ""
- list_reagents = list(/datum/reagent/medicine/C2/multiver = 6, /datum/reagent/medicine/granibitaluri = 9)
-
-/obj/item/reagent_containers/syringe/convermol
- name = "syringe (convermol)"
- desc = ""
- list_reagents = list(/datum/reagent/medicine/C2/convermol = 6, /datum/reagent/medicine/granibitaluri = 9)
-
-/obj/item/reagent_containers/syringe/antiviral
- name = "syringe (spaceacillin)"
- desc = ""
- list_reagents = list(/datum/reagent/medicine/spaceacillin = 15)
-
-/obj/item/reagent_containers/syringe/bioterror
- name = "bioterror syringe"
- desc = ""
- list_reagents = list(/datum/reagent/consumable/ethanol/neurotoxin = 5, /datum/reagent/toxin/mutetoxin = 5, /datum/reagent/toxin/sodium_thiopental = 5)
-
-/obj/item/reagent_containers/syringe/calomel
- name = "syringe (calomel)"
- desc = ""
- list_reagents = list(/datum/reagent/medicine/calomel = 15)
-
-/obj/item/reagent_containers/syringe/plasma
- name = "syringe (plasma)"
- desc = ""
- list_reagents = list(/datum/reagent/toxin/plasma = 15)
-
-/obj/item/reagent_containers/syringe/lethal
- name = "lethal injection syringe"
- desc = ""
- amount_per_transfer_from_this = 50
- volume = 50
-
-/obj/item/reagent_containers/syringe/lethal/choral
- list_reagents = list(/datum/reagent/toxin/chloralhydrate = 50)
-
-/obj/item/reagent_containers/syringe/lethal/execution
- list_reagents = list(/datum/reagent/toxin/plasma = 15, /datum/reagent/toxin/formaldehyde = 15, /datum/reagent/toxin/cyanide = 10, /datum/reagent/toxin/acid/fluacid = 10)
-
-/obj/item/reagent_containers/syringe/mulligan
- name = "Mulligan"
- desc = ""
- amount_per_transfer_from_this = 1
- volume = 1
- list_reagents = list(/datum/reagent/mulligan = 1)
-
-/obj/item/reagent_containers/syringe/bluespace
- name = "bluespace syringe"
- desc = ""
- amount_per_transfer_from_this = 20
- volume = 60
-
-/obj/item/reagent_containers/syringe/noreact
- name = "cryo syringe"
- desc = ""
- volume = 20
- reagent_flags = TRANSPARENT | NO_REACT
-
-/obj/item/reagent_containers/syringe/piercing
- name = "piercing syringe"
- desc = ""
- volume = 10
- proj_piercing = 1
-
-/obj/item/reagent_containers/syringe/spider_extract
- name = "spider extract syringe"
- desc = ""
- list_reagents = list(/datum/reagent/spider_extract = 1)
-
-/obj/item/reagent_containers/syringe/oxandrolone
- name = "syringe (oxandrolone)"
- desc = ""
- list_reagents = list(/datum/reagent/medicine/oxandrolone = 15)
-
-/obj/item/reagent_containers/syringe/salacid
- name = "syringe (salicylic acid)"
- desc = ""
- list_reagents = list(/datum/reagent/medicine/sal_acid = 15)
-
-/obj/item/reagent_containers/syringe/penacid
- name = "syringe (pentetic acid)"
- desc = ""
- list_reagents = list(/datum/reagent/medicine/pen_acid = 15)
-
-/obj/item/reagent_containers/syringe/syriniver
- name = "syringe (syriniver)"
- desc = ""
- list_reagents = list(/datum/reagent/medicine/C2/syriniver = 15)
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
deleted file mode 100644
index 8d17ec6113..0000000000
--- a/code/modules/reagents/reagent_dispenser.dm
+++ /dev/null
@@ -1,169 +0,0 @@
-/obj/structure/reagent_dispensers
- name = "Dispenser"
- desc = ""
- icon = 'icons/obj/objects.dmi'
- icon_state = "water"
- density = TRUE
- anchored = FALSE
- pressure_resistance = 2*ONE_ATMOSPHERE
- max_integrity = 300
- var/tank_volume = 1000 //In units, how much the dispenser can hold
- var/reagent_id = /datum/reagent/water //The ID of the reagent that the dispenser uses
-
-/obj/structure/reagent_dispensers/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
- . = ..()
- if(. && obj_integrity > 0)
- if(tank_volume && (damage_flag == "bullet" || damage_flag == "laser"))
- boom()
-
-/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, params)
- if(W.is_refillable())
- return 0 //so we can refill them via their afterattack.
- else
- return ..()
-
-/obj/structure/reagent_dispensers/Initialize()
- create_reagents(tank_volume, DRAINABLE | AMOUNT_VISIBLE)
- if(reagent_id)
- reagents.add_reagent(reagent_id, tank_volume)
- . = ..()
-
-/obj/structure/reagent_dispensers/proc/boom()
- visible_message("\The [src] ruptures!")
- chem_splash(loc, 5, list(reagents))
- qdel(src)
-
-/obj/structure/reagent_dispensers/deconstruct(disassembled = TRUE)
- if(!(flags_1 & NODECONSTRUCT_1))
- if(!disassembled)
- boom()
- else
- qdel(src)
-
-/obj/structure/reagent_dispensers/watertank
- name = "water tank"
- desc = ""
- icon_state = "water"
-
-/obj/structure/reagent_dispensers/watertank/high
- name = "high-capacity water tank"
- desc = ""
- icon_state = "water_high" //I was gonna clean my room...
- tank_volume = 100000
-
-/obj/structure/reagent_dispensers/foamtank
- name = "firefighting foam tank"
- desc = ""
- icon_state = "foam"
- reagent_id = /datum/reagent/firefighting_foam
- tank_volume = 500
-
-/obj/structure/reagent_dispensers/fueltank
- name = "fuel tank"
- desc = ""
- icon_state = "fuel"
- reagent_id = /datum/reagent/fuel
-
-/obj/structure/reagent_dispensers/fueltank/boom()
- explosion(get_turf(src), 0, 1, 5, flame_range = 5)
- qdel(src)
-
-
-/obj/structure/reagent_dispensers/fueltank/ex_act()
- boom()
-
-/obj/structure/reagent_dispensers/fueltank/fire_act(added, maxstacks)
- boom()
-
-/obj/structure/reagent_dispensers/fueltank/tesla_act()
- ..() //extend the zap
- boom()
-
-/obj/structure/reagent_dispensers/fueltank/bullet_act(obj/projectile/P)
- . = ..()
- if(!QDELETED(src)) //wasn't deleted by the projectile's effects.
- if(!P.nodamage && ((P.damage_type == BURN) || (P.damage_type == BRUTE)))
- log_bomber(P.firer, "detonated a", src, "via projectile")
- boom()
-
-/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, params)
- if(I.tool_behaviour == TOOL_WELDER)
- if(!reagents.has_reagent(/datum/reagent/fuel))
- to_chat(user, "[src] is out of fuel!")
- return
- var/obj/item/weldingtool/W = I
- if(!W.welding)
- if(W.reagents.has_reagent(/datum/reagent/fuel, W.max_fuel))
- to_chat(user, "My [W.name] is already full!")
- return
- reagents.trans_to(W, W.max_fuel, transfered_by = user)
- user.visible_message("[user] refills [user.p_their()] [W.name].", "I refill [W].")
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- W.update_icon()
- else
- user.visible_message("[user] catastrophically fails at refilling [user.p_their()] [W.name]!", "That was stupid of you.")
-
- log_bomber(user, "detonated a", src, "via welding tool")
-
- boom()
- return
- return ..()
-
-
-/obj/structure/reagent_dispensers/peppertank
- name = "pepper spray refiller"
- desc = ""
- icon_state = "pepper"
- anchored = TRUE
- density = FALSE
- reagent_id = /datum/reagent/consumable/condensedcapsaicin
-
-/obj/structure/reagent_dispensers/peppertank/Initialize()
- . = ..()
- if(prob(1))
- desc = ""
-
-
-/obj/structure/reagent_dispensers/water_cooler
- name = "liquid cooler"
- desc = ""
- icon = 'icons/obj/vending.dmi'
- icon_state = "water_cooler"
- anchored = TRUE
- tank_volume = 500
- var/paper_cups = 25 //Paper cups left from the cooler
-
-/obj/structure/reagent_dispensers/water_cooler/examine(mob/user)
- . = ..()
- if (paper_cups > 1)
- . += "There are [paper_cups] paper cups left."
- else if (paper_cups == 1)
- . += "There is one paper cup left."
- else
- . += "There are no paper cups left."
-
-/obj/structure/reagent_dispensers/water_cooler/attack_hand(mob/living/user)
- . = ..()
- if(.)
- return
- if(!paper_cups)
- to_chat(user, "There aren't any cups left!")
- return
- user.visible_message("[user] takes a cup from [src].", "I take a paper cup from [src].")
- var/obj/item/reagent_containers/food/drinks/sillycup/S = new(get_turf(src))
- user.put_in_hands(S)
- paper_cups--
-
-/obj/structure/reagent_dispensers/beerkeg
- name = "beer keg"
- desc = ""
- icon_state = "beer"
- reagent_id = /datum/reagent/consumable/ethanol/beer
-
-
-/obj/structure/reagent_dispensers/cooking_oil
- name = "vat of cooking oil"
- desc = ""
- icon_state = "vat"
- anchored = TRUE
- reagent_id = /datum/reagent/consumable/cooking_oil
diff --git a/code/modules/roguetown/roguejobs/gravedigger/tools.dm b/code/modules/roguetown/roguejobs/gravedigger/tools.dm
index 27ee7fe1fd..6fccc286d8 100644
--- a/code/modules/roguetown/roguejobs/gravedigger/tools.dm
+++ b/code/modules/roguetown/roguejobs/gravedigger/tools.dm
@@ -309,3 +309,91 @@
var/obj/item/bodybag/B = foldedbag_instance || new foldedbag_path
usr.put_in_hands(B)
qdel(src)
+
+/obj/item/bodybag
+ name = "body bag"
+ desc = ""
+ icon = 'icons/obj/bodybag.dmi'
+ icon_state = "bodybag_folded"
+ w_class = WEIGHT_CLASS_SMALL
+ var/unfoldedbag_path = /obj/structure/closet/body_bag
+
+/obj/item/bodybag/attack_self(mob/user)
+ deploy_bodybag(user, user.loc)
+
+/obj/item/bodybag/afterattack(atom/target, mob/user, proximity)
+ . = ..()
+ if(proximity)
+ if(isopenturf(target))
+ deploy_bodybag(user, target)
+
+/obj/item/bodybag/proc/deploy_bodybag(mob/user, atom/location)
+ var/obj/structure/closet/body_bag/R = new unfoldedbag_path(location)
+ R.open(user)
+ R.add_fingerprint(user)
+ R.foldedbag_instance = src
+ moveToNullspace()
+
+/obj/item/bodybag/suicide_act(mob/user)
+ if(isopenturf(user.loc))
+ user.visible_message("[user] is crawling into [src]! It looks like [user.p_theyre()] trying to commit suicide!")
+ var/obj/structure/closet/body_bag/R = new unfoldedbag_path(user.loc)
+ R.add_fingerprint(user)
+ qdel(src)
+ user.forceMove(R)
+ playsound(src, 'sound/blank.ogg', 15, TRUE, -3)
+ return (OXYLOSS)
+ ..()
+
+
+/obj/structure/closet/body_bag
+ name = "body bag"
+ desc = ""
+ icon = 'icons/obj/bodybag.dmi'
+ icon_state = "bodybag"
+ density = FALSE
+ mob_storage_capacity = 2
+ open_sound = 'sound/blank.ogg'
+ close_sound = 'sound/blank.ogg'
+ open_sound_volume = 15
+ close_sound_volume = 15
+ integrity_failure = 0
+ delivery_icon = null //unwrappable
+ anchorable = FALSE
+ mouse_drag_pointer = MOUSE_ACTIVE_POINTER
+ drag_slowdown = 0
+ var/foldedbag_path = /obj/item/bodybag
+ var/obj/item/bodybag/foldedbag_instance = null
+
+/obj/structure/closet/body_bag/Destroy()
+ // If we have a stored bag, and it's in nullspace (not in someone's hand), delete it.
+ if (foldedbag_instance && !foldedbag_instance.loc)
+ QDEL_NULL(foldedbag_instance)
+ return ..()
+
+/obj/structure/closet/body_bag/open(mob/living/user)
+ . = ..()
+ if(.)
+ mouse_drag_pointer = MOUSE_INACTIVE_POINTER
+
+/obj/structure/closet/body_bag/close()
+ . = ..()
+ if(.)
+ density = FALSE
+ mouse_drag_pointer = MOUSE_ACTIVE_POINTER
+
+/obj/structure/closet/body_bag/MouseDrop(over_object, src_location, over_location)
+ . = ..()
+ if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src)))
+ if(!ishuman(usr))
+ return
+ if(opened)
+ to_chat(usr, "I wrestle with [src], but it won't fold while unzipped.")
+ return
+ if(contents.len)
+ to_chat(usr, "There are too many things inside of [src] to fold it up!")
+ return
+ visible_message("[usr] folds up [src].")
+ var/obj/item/bodybag/B = foldedbag_instance || new foldedbag_path
+ usr.put_in_hands(B)
+ qdel(src)
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index ddb1483ae9..a71ac3a395 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -271,8 +271,6 @@
var/list/ripples = list()
var/engine_coeff = 1 //current engine coeff
- var/current_engines = 0 //current engine power
- var/initial_engines = 0 //initial engine power
var/list/engine_list = list()
var/can_move_docking_ports = FALSE //if this shuttle can move docking ports other than the one it is docked at
var/list/hidden_turfs = list()
@@ -306,9 +304,6 @@
if(istype(cur_area, area_type))
shuttle_areas[cur_area] = TRUE
- initial_engines = count_engines()
- current_engines = initial_engines
-
#ifdef DOCKING_PORT_HIGHLIGHT
highlight("#0f0")
#endif
@@ -483,9 +478,6 @@
for(var/t in return_turfs())
var/turf/T = t
for(var/mob/living/M in T.GetAllContents())
- // If they have a mind and they're not in the brig, they escaped
- if(M.mind && !istype(t, /turf/open/floor/plasteel/shuttle/red) && !istype(t, /turf/open/floor/mineral/plastitanium/red/brig))
- M.mind.force_escaped = TRUE
// Ghostize them and put them in nullspace stasis (for stat & possession checks)
M.notransform = TRUE
M.ghostize(FALSE)
@@ -762,41 +754,11 @@
if(mod == 0)
return
var/old_coeff = engine_coeff
- engine_coeff = get_engine_coeff(current_engines,mod)
- current_engines = max(0,current_engines + mod)
+ engine_coeff = 1
if(in_flight())
var/delta_coeff = engine_coeff / old_coeff
modTimer(delta_coeff)
-/obj/docking_port/mobile/proc/count_engines()
- . = 0
- for(var/thing in shuttle_areas)
- var/area/shuttle/areaInstance = thing
- for(var/obj/structure/shuttle/engine/E in areaInstance.contents)
- if(!QDELETED(E))
- engine_list += E
- . += E.engine_power
-
-// Double initial engines to get to 0.5 minimum
-// Lose all initial engines to get to 2
-//For 0 engine shuttles like BYOS 5 engines to get to doublespeed
-/obj/docking_port/mobile/proc/get_engine_coeff(current,engine_mod)
- var/new_value = max(0,current + engine_mod)
- if(new_value == initial_engines)
- return 1
- if(new_value > initial_engines)
- var/delta = new_value - initial_engines
- var/change_per_engine = (1 - ENGINE_COEFF_MIN) / ENGINE_DEFAULT_MAXSPEED_ENGINES // 5 by default
- if(initial_engines > 0)
- change_per_engine = (1 - ENGINE_COEFF_MIN) / initial_engines // or however many it had
- return CLAMP(1 - delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX)
- if(new_value < initial_engines)
- var/delta = initial_engines - new_value
- var/change_per_engine = 1 //doesn't really matter should not be happening for 0 engine shuttles
- if(initial_engines > 0)
- change_per_engine = (ENGINE_COEFF_MAX - 1) / initial_engines //just linear drop to max delay
- return CLAMP(1 + delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX)
-
/obj/docking_port/mobile/proc/in_flight()
switch(mode)
diff --git a/code/modules/spells/roguetown/acolyte/general.dm b/code/modules/spells/roguetown/acolyte/general.dm
index 9e1ece54fd..05b5fd44ed 100644
--- a/code/modules/spells/roguetown/acolyte/general.dm
+++ b/code/modules/spells/roguetown/acolyte/general.dm
@@ -107,7 +107,7 @@
target.visible_message(span_info("Vital energies are sapped towards [target]!"), span_notice("The life around me pales as I am restored!"))
// set up a ritual pile of bones (or just cast near a stack of bones whatever) around us for massive bonuses, cap at 50 for 75 healing total (wowie)
situational_bonus = 0
- for (var/obj/item/stack/sheet/bone/O in oview(5, user))
+ for (var/obj/item/alch/bone/O in oview(5, user))
situational_bonus = min(situational_bonus + 5, 50)
if (situational_bonus > 0)
conditional_buff = TRUE
diff --git a/code/modules/spells/roguetown/wizard.dm b/code/modules/spells/roguetown/wizard.dm
index b2ba3a03ef..7484f6a419 100644
--- a/code/modules/spells/roguetown/wizard.dm
+++ b/code/modules/spells/roguetown/wizard.dm
@@ -515,15 +515,7 @@
var/skill_level = user.mind?.get_skill_level(attached_spell.associated_skill)
cleanspeed = initial(cleanspeed) - (skill_level * 3) // 3 cleanspeed per skill level, from 35 down to a maximum of 17 (pretty quick)
- if (istype(target, /obj/structure/window))
- user.visible_message(span_notice("[user] gestures at \the [target.name], tiny motes of arcyne power running across its surface..."), span_notice("I begin to clean \the [target.name] with my arcyne power..."))
- if (do_after(user, src.cleanspeed, target = target))
- target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- target.set_opacity(initial(target.opacity))
- to_chat(user, span_notice("I render \the [target.name] clean."))
- return TRUE
- return FALSE
- else if (istype(target, /obj/effect/decal/cleanable))
+ if (istype(target, /obj/effect/decal/cleanable))
user.visible_message(span_notice("[user] gestures at \the [target.name], arcyne power slowly scouring it away..."), span_notice("I begin to scour \the [target.name] away with my arcyne power..."))
if (do_after(user, src.cleanspeed, target = target))
to_chat(user, span_notice("I expunge \the [target.name] with my mana."))
diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm
index dc94ad9186..c6b279e931 100644
--- a/code/modules/spells/spell.dm
+++ b/code/modules/spells/spell.dm
@@ -274,16 +274,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
to_chat(user, "I can't get the words out!")
return FALSE
- var/list/casting_clothes = typecacheof(list(/obj/item/clothing/suit/wizrobe,
- /obj/item/clothing/head/wizard))
-
- if(clothes_req) //clothes check
- if(!is_type_in_typecache(H.wear_armor, casting_clothes))
- to_chat(H, "I don't feel strong enough without your robe!")
- return FALSE
- if(!is_type_in_typecache(H.head, casting_clothes))
- to_chat(H, "I don't feel strong enough without your hat!")
- return FALSE
if(miracle)
var/datum/devotion/cleric_holder/D = H.cleric
if(!D.check_devotion(devotion_cost))
diff --git a/code/modules/spells/spell_types/barnyard.dm b/code/modules/spells/spell_types/barnyard.dm
deleted file mode 100644
index 5dd009f882..0000000000
--- a/code/modules/spells/spell_types/barnyard.dm
+++ /dev/null
@@ -1,51 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/barnyardcurse
- name = "Curse of the Barnyard"
- desc = ""
- school = "transmutation"
- charge_type = "recharge"
- charge_max = 150
- charge_counter = 0
- clothes_req = FALSE
- stat_allowed = FALSE
- invocation = "KN'A FTAGHU, PUCK 'BTHNK!"
- invocation_type = "shout"
- range = 7
- cooldown_min = 30
- selection_type = "range"
- var/static/list/compatible_mobs_typecache = typecacheof(list(/mob/living/carbon/human, /mob/living/carbon/monkey))
-
- action_icon_state = "barn"
-
-/obj/effect/proc_holder/spell/targeted/barnyardcurse/cast(list/targets, mob/user = usr)
- if(!targets.len)
- to_chat(user, "No target found in range!")
- return
-
- var/mob/living/carbon/target = targets[1]
-
-
- if(!is_type_in_typecache(target, compatible_mobs_typecache))
- to_chat(user, "I are unable to curse [target]'s head!")
- return
-
- if(!(target in oview(range)))
- to_chat(user, "[target.p_theyre(TRUE)] too far away!")
- return
-
- if(target.anti_magic_check())
- to_chat(user, "The spell had no effect!")
- target.visible_message("[target]'s face bursts into flames, which instantly burst outward, leaving [target] unharmed!", \
- "My face starts burning up, but the flames are repulsed by my anti-magic protection!")
- return
-
- var/list/masks = list(/obj/item/clothing/mask/pig/cursed, /obj/item/clothing/mask/cowmask/cursed, /obj/item/clothing/mask/horsehead/cursed)
-
- var/choice = pick(masks)
- var/obj/item/clothing/mask/magichead = new choice(get_turf(target))
- target.visible_message("[target]'s face bursts into flames, and a barnyard animal's head takes its place!", \
- "My face burns up, and shortly after the fire you realise you have the face of a barnyard animal!")
- if(!target.dropItemToGround(target.wear_mask))
- qdel(target.wear_mask)
- target.equip_to_slot_if_possible(magichead, SLOT_WEAR_MASK, 1, 1)
-
- target.flash_act()
diff --git a/code/modules/spells/spell_types/construct_spells.dm b/code/modules/spells/spell_types/construct_spells.dm
deleted file mode 100644
index 146eaf3db9..0000000000
--- a/code/modules/spells/spell_types/construct_spells.dm
+++ /dev/null
@@ -1,307 +0,0 @@
-//////////////////////////////Construct Spells/////////////////////////
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser
- charge_max = 1800
- action_icon = 'icons/mob/actions/actions_cult.dmi'
- action_icon_state = "artificer"
- action_background_icon_state = "bg_demon"
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser/cult
- clothes_req = TRUE
- charge_max = 2500
-
-
-/obj/effect/proc_holder/spell/aoe_turf/area_conversion
- name = "Area Conversion"
- desc = ""
-
- school = "transmutation"
- charge_max = 50
- clothes_req = FALSE
- invocation = "none"
- invocation_type = "none"
- range = 2
- action_icon = 'icons/mob/actions/actions_cult.dmi'
- action_icon_state = "areaconvert"
- action_background_icon_state = "bg_cult"
-
-/obj/effect/proc_holder/spell/aoe_turf/area_conversion/cast(list/targets, mob/user = usr)
- playsound(get_turf(user), 'sound/blank.ogg', 75, TRUE)
- for(var/turf/T in targets)
- T.narsie_act(FALSE, TRUE, 100 - (get_dist(user, T) * 25))
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/wall
- name = "Summon Cult Wall"
- desc = ""
-
- school = "conjuration"
- charge_max = 100
- clothes_req = FALSE
- invocation = "none"
- invocation_type = "none"
- range = 0
- action_icon = 'icons/mob/actions/actions_cult.dmi'
- action_icon_state = "lesserconstruct"
- action_background_icon_state = "bg_cult"
-
- summon_type = list(/turf/closed/wall/mineral/cult/artificer) //we don't want artificer-based runed metal farms
-
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced
- name = "Greater Construction"
- desc = ""
-
- school = "conjuration"
- charge_max = 300
- clothes_req = FALSE
- invocation = "none"
- invocation_type = "none"
- range = 0
-
- summon_type = list(/turf/closed/wall/r_wall)
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone
- name = "Summon Soulstone"
- desc = ""
-
- school = "conjuration"
- charge_max = 2400
- clothes_req = FALSE
- invocation = "none"
- invocation_type = "none"
- range = 0
- action_icon = 'icons/mob/actions/actions_cult.dmi'
- action_icon_state = "summonsoulstone"
- action_background_icon_state = "bg_demon"
-
- summon_type = list(/obj/item/soulstone)
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/cult
- clothes_req = TRUE
- charge_max = 3600
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult
- summon_type = list(/obj/item/soulstone/anybody)
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult/purified
- summon_type = list(/obj/item/soulstone/anybody/purified)
-
-/obj/effect/proc_holder/spell/targeted/forcewall/cult
- name = "Shield"
- desc = ""
- school = "transmutation"
- charge_max = 400
- clothes_req = FALSE
- invocation = "none"
- invocation_type = "none"
- wall_type = /obj/effect/forcefield/cult
- action_icon = 'icons/mob/actions/actions_cult.dmi'
- action_icon_state = "cultforcewall"
- action_background_icon_state = "bg_demon"
-
-
-
-/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift
- name = "Phase Shift"
- desc = ""
-
- school = "transmutation"
- charge_max = 250
- clothes_req = FALSE
- invocation = "none"
- invocation_type = "none"
- range = -1
- include_user = TRUE
- jaunt_duration = 50 //in deciseconds
- action_icon = 'icons/mob/actions/actions_cult.dmi'
- action_icon_state = "phaseshift"
- action_background_icon_state = "bg_demon"
- jaunt_in_time = 12
- jaunt_in_type = /obj/effect/temp_visual/dir_setting/wraith
- jaunt_out_type = /obj/effect/temp_visual/dir_setting/wraith/out
-
-/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/jaunt_steam(mobloc)
- return
-
-/obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser
- name = "Lesser Magic Missile"
- desc = ""
-
- school = "evocation"
- charge_max = 400
- clothes_req = FALSE
- invocation = "none"
- invocation_type = "none"
- max_targets = 6
- action_icon_state = "magicm"
- action_background_icon_state = "bg_demon"
- proj_type = /obj/projectile/magic/spell/magic_missile/lesser
-
-/obj/projectile/magic/spell/magic_missile/lesser
- color = "red" //Looks more culty this way
- range = 10
-
-/obj/effect/proc_holder/spell/targeted/smoke/disable
- name = "Paralysing Smoke"
- desc = ""
-
- school = "conjuration"
- charge_max = 200
- clothes_req = FALSE
- invocation = "none"
- invocation_type = "none"
- range = -1
- include_user = TRUE
- cooldown_min = 20 //25 deciseconds reduction per rank
-
- smoke_spread = 3
- smoke_amt = 4
- action_icon_state = "smoke"
- action_background_icon_state = "bg_cult"
-
-
-/obj/effect/proc_holder/spell/targeted/abyssal_gaze
- name = "Abyssal Gaze"
- desc = ""
-
- charge_max = 750
- range = 5
- include_user = FALSE
- selection_type = "range"
- stat_allowed = FALSE
-
- school = "evocation"
- clothes_req = FALSE
- invocation = "none"
- invocation_type = "none"
- action_icon = 'icons/mob/actions/actions_cult.dmi'
- action_background_icon_state = "bg_demon"
- action_icon_state = "abyssal_gaze"
-
-/obj/effect/proc_holder/spell/targeted/abyssal_gaze/cast(list/targets, mob/user = usr)
- if(!LAZYLEN(targets))
- to_chat(user, "No target found in range!")
- revert_cast()
- return
-
- var/mob/living/carbon/target = targets[1]
-
- if(!(target in oview(range)))
- to_chat(user, "[target] is too far away!")
- revert_cast()
- return
-
- if(target.anti_magic_check(TRUE, TRUE))
- to_chat(target, "I feel a freezing darkness closing in on you, but it rapidly dissipates.")
- return
-
- to_chat(target, "A freezing darkness surrounds you...")
- target.playsound_local(get_turf(target), 'sound/blank.ogg', 50, 1)
- user.playsound_local(get_turf(user), 'sound/blank.ogg', 50, 1)
- target.become_blind(ABYSSAL_GAZE_BLIND)
- addtimer(CALLBACK(src, PROC_REF(cure_blindness), target), 40)
- target.adjust_bodytemperature(-200)
-
-/obj/effect/proc_holder/spell/targeted/abyssal_gaze/proc/cure_blindness(mob/target)
- if(isliving(target))
- var/mob/living/L = target
- L.cure_blind(ABYSSAL_GAZE_BLIND)
-
-/obj/effect/proc_holder/spell/targeted/dominate
- name = "Dominate"
- desc = ""
-
- charge_max = 600
- range = 7
- include_user = FALSE
- selection_type = "range"
- stat_allowed = FALSE
-
- school = "evocation"
- clothes_req = FALSE
- invocation = "none"
- invocation_type = "none"
- action_icon = 'icons/mob/actions/actions_cult.dmi'
- action_background_icon_state = "bg_demon"
- action_icon_state = "dominate"
-
-/obj/effect/proc_holder/spell/targeted/dominate/cast(list/targets, mob/user = usr)
- if(!LAZYLEN(targets))
- to_chat(user, "No target found in range.")
- revert_cast()
- return
-
- var/mob/living/simple_animal/S = targets[1]
-
- if(S.ckey)
- to_chat(user, "[S] is too intelligent to dominate!")
- revert_cast()
- return
-
- if(S.stat)
- to_chat(user, "[S] is dead!")
- revert_cast()
- return
-
- if(S.sentience_type != SENTIENCE_ORGANIC)
- to_chat(user, "[S] cannot be dominated!")
- revert_cast()
- return
-
- if(!(S in oview(range)))
- to_chat(user, "[S] is too far away!")
- revert_cast()
- return
-
- S.add_atom_colour("#990000", FIXED_COLOUR_PRIORITY)
- S.faction = list("cult")
- playsound(get_turf(S), 'sound/blank.ogg', 100, TRUE)
- new /obj/effect/temp_visual/cult/sac(get_turf(S))
-
-/obj/effect/proc_holder/spell/targeted/dominate/can_target(mob/living/target)
- if(!isanimal(target) || target.stat)
- return FALSE
- if("cult" in target.faction)
- return FALSE
- return TRUE
-
-/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem
- charge_max = 800
- jaunt_in_type = /obj/effect/temp_visual/dir_setting/cult/phase
- jaunt_out_type = /obj/effect/temp_visual/dir_setting/cult/phase/out
-
-
-/obj/effect/proc_holder/spell/targeted/projectile/dumbfire/juggernaut
- name = "Gauntlet Echo"
- desc = ""
- proj_type = /obj/projectile/magic/spell/juggernaut
- charge_max = 350
- clothes_req = FALSE
- action_icon = 'icons/mob/actions/actions_cult.dmi'
- action_icon_state = "cultfist"
- action_background_icon_state = "bg_demon"
- sound = 'sound/blank.ogg'
-
-/obj/projectile/magic/spell/juggernaut
- name = "Gauntlet Echo"
- icon_state = "cultfist"
- alpha = 180
- damage = 30
- damage_type = BRUTE
- knockdown = 50
- hitsound = 'sound/blank.ogg'
- trigger_range = 0
- check_holy = TRUE
- ignored_factions = list("cult")
- range = 15
- speed = 7
-
-/obj/projectile/magic/spell/juggernaut/on_hit(atom/target, blocked)
- . = ..()
- var/turf/T = get_turf(src)
- playsound(T, 'sound/blank.ogg', 100, FALSE)
- new /obj/effect/temp_visual/cult/sac(T)
- for(var/obj/O in range(src,1))
- if(O.density)
- O.take_damage(90, BRUTE, "melee", 0)
- new /obj/effect/temp_visual/cult/turf/floor(get_turf(O))
diff --git a/code/modules/spells/spell_types/devil_boons.dm b/code/modules/spells/spell_types/devil_boons.dm
deleted file mode 100644
index d57a5dead3..0000000000
--- a/code/modules/spells/spell_types/devil_boons.dm
+++ /dev/null
@@ -1,75 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/summon_wealth
- name = "Summon wealth"
- desc = ""
- invocation_type = "none"
- include_user = TRUE
- range = -1
- clothes_req = FALSE
- school = "conjuration"
- charge_max = 100
- cooldown_min = 10
- action_icon = 'icons/mob/actions/actions_minor_antag.dmi'
- action_icon_state = "moneybag"
-
-
-/obj/effect/proc_holder/spell/targeted/summon_wealth/cast(list/targets, mob/user = usr)
- for(var/mob/living/carbon/C in targets)
- if(user.dropItemToGround(user.get_active_held_item()))
- var/obj/item = pick(
- new /obj/item/coin/gold(user.drop_location()),
- new /obj/item/coin/diamond(user.drop_location()),
- new /obj/item/coin/silver(user.drop_location()),
- new /obj/item/clothing/accessory/medal/gold(user.drop_location()),
- new /obj/item/stack/sheet/mineral/gold(user.drop_location()),
- new /obj/item/stack/sheet/mineral/silver(user.drop_location()),
- new /obj/item/stack/sheet/mineral/diamond(user.drop_location()))
- C.put_in_hands(item)
-
-/obj/effect/proc_holder/spell/targeted/view_range
- name = "Distant vision"
- desc = ""
- invocation_type = "none"
- include_user = TRUE
- range = -1
- clothes_req = FALSE
- charge_max = 50
- cooldown_min = 10
- action_icon = 'icons/mob/actions/actions_silicon.dmi'
- action_icon_state = "camera_jump"
- var/ranges = list(7,8,9,10)
-
-/obj/effect/proc_holder/spell/targeted/view_range/cast(list/targets, mob/user = usr)
- for(var/mob/C in targets)
- if(!C.client)
- continue
- C.client.change_view(input("Select view range:", "Range", 4) in ranges)
-
-/obj/effect/proc_holder/spell/targeted/summon_friend
- name = "Summon Friend"
- desc = ""
- invocation_type = "none"
- include_user = TRUE
- range = -1
- clothes_req = FALSE
- charge_max = 50
- cooldown_min = 10
- action_icon = 'icons/mob/actions/actions_spells.dmi'
- action_icon_state = "sacredflame"
- var/mob/living/friend
- var/obj/effect/mob_spawn/human/demonic_friend/friendShell
-
-/obj/effect/proc_holder/spell/targeted/summon_friend/cast(list/targets, mob/user = usr)
- if(!QDELETED(friend))
- to_chat(friend, "My master has deemed you a poor friend. Your durance in hell will now resume.")
- friend.dust(TRUE)
- qdel(friendShell)
- return
- if(!QDELETED(friendShell))
- qdel(friendShell)
- return
- for(var/C in targets)
- var/mob/living/L = C
- friendShell = new /obj/effect/mob_spawn/human/demonic_friend(L.loc, L.mind, src)
-
-/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/robeless
- clothes_req = FALSE
diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm
index 38b29dd09d..2235b30865 100644
--- a/code/modules/spells/spell_types/godhand.dm
+++ b/code/modules/spells/spell_types/godhand.dm
@@ -44,45 +44,6 @@
attached_spell.on_hand_destroy(src)
return ..()
-/obj/item/melee/touch_attack/disintegrate
- name = "\improper smiting touch"
- desc = ""
- catchphrase = "EI NATH!!"
- on_use_sound = 'sound/blank.ogg'
- icon_state = "disintegrate"
- item_state = "disintegrate"
-
-/obj/item/melee/touch_attack/disintegrate/afterattack(atom/target, mob/living/carbon/user, proximity)
- if(!proximity || target == user || !ismob(target) || !iscarbon(user) || !(user.mobility_flags & MOBILITY_USE)) //exploding after touching myself would be bad
- return
- if(!user.can_speak_vocal())
- to_chat(user, "I can't get the words out!")
- return
- var/mob/M = target
- do_sparks(4, FALSE, M.loc)
- for(var/mob/living/L in view(src, 7))
- if(L != user)
- L.flash_act(affect_silicon = FALSE)
- var/atom/A = M.anti_magic_check()
- if(A)
- if(isitem(A))
- target.visible_message("[target]'s [A] glows brightly as it wards off the spell!")
- user.visible_message("The feedback blows [user]'s arm off!","The spell bounces from [M]'s skin back into your arm!")
- user.flash_act()
- var/obj/item/bodypart/part = user.get_holding_bodypart_of_item(src)
- if(part)
- part.dismember()
- return ..()
- var/obj/item/clothing/suit/hooded/bloated_human/suit = M.get_item_by_slot(SLOT_ARMOR)
- if(istype(suit))
- M.visible_message("[M]'s [suit] explodes off of them into a puddle of gore!")
- M.dropItemToGround(suit)
- qdel(suit)
- new /obj/effect/gibspawner(M.loc)
- return ..()
- M.gib()
- return ..()
-
/obj/item/melee/touch_attack/fleshtostone
name = "\improper petrifying touch"
desc = ""
diff --git a/code/modules/spells/spell_types/infinite_guns.dm b/code/modules/spells/spell_types/infinite_guns.dm
deleted file mode 100644
index c61322a4c0..0000000000
--- a/code/modules/spells/spell_types/infinite_guns.dm
+++ /dev/null
@@ -1,27 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/infinite_guns
- name = "Lesser Summon Guns"
- desc = ""
- invocation_type = "none"
- include_user = TRUE
- range = -1
-
- school = "conjuration"
- charge_max = 750
- clothes_req = TRUE
- cooldown_min = 10 //Gun wizard
- action_icon_state = "bolt_action"
- var/summon_path = /obj/item/gun/ballistic/rifle/boltaction/enchanted
-
-/obj/effect/proc_holder/spell/targeted/infinite_guns/cast(list/targets, mob/user = usr)
- for(var/mob/living/carbon/C in targets)
- C.drop_all_held_items()
- var/GUN = new summon_path
- C.put_in_hands(GUN)
-
-/obj/effect/proc_holder/spell/targeted/infinite_guns/gun
-
-/obj/effect/proc_holder/spell/targeted/infinite_guns/arcane_barrage
- name = "Arcane Barrage"
- desc = ""
- action_icon_state = "arcane_barrage"
- summon_path = /obj/item/gun/ballistic/rifle/boltaction/enchanted/arcane_barrage
diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm
deleted file mode 100644
index 9b56656aa9..0000000000
--- a/code/modules/spells/spell_types/lichdom.dm
+++ /dev/null
@@ -1,75 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/lichdom
- name = "Bind Soul"
- desc = "A dark necromantic pact that can forever bind my soul to an \
- item of my choosing. So long as both my body and the item remain \
- intact and on the same plane you can revive from death, though the time \
- between reincarnations grows steadily with use, along with the weakness \
- that the new skeleton body will experience upon 'birth'. Note that \
- becoming a lich destroys all internal organs except the brain."
- school = "necromancy"
- charge_max = 10
- clothes_req = FALSE
- centcom_cancast = FALSE
- invocation = "NECREM IMORTIUM!"
- invocation_type = "shout"
- range = -1
- level_max = 0 //cannot be improved
- cooldown_min = 10
- include_user = TRUE
-
- action_icon = 'icons/mob/actions/actions_spells.dmi'
- action_icon_state = "skeleton"
-
-/obj/effect/proc_holder/spell/targeted/lichdom/cast(list/targets,mob/user = usr)
- for(var/mob/M in targets)
- var/list/hand_items = list()
- if(iscarbon(M))
- hand_items = list(M.get_active_held_item(),M.get_inactive_held_item())
- if(!hand_items.len)
- to_chat(M, "I must hold an item you wish to make my phylactery!")
- return
- if(!M.mind.hasSoul)
- to_chat(user, "I do not possess a soul!")
- return
-
- var/obj/item/marked_item
-
- for(var/obj/item/item in hand_items)
- // I ensouled the nuke disk once. But it's probably a really
- // mean tactic, so probably should discourage it.
- if((item.item_flags & ABSTRACT) || HAS_TRAIT(item, TRAIT_NODROP) || SEND_SIGNAL(item, COMSIG_ITEM_IMBUE_SOUL, user))
- continue
- marked_item = item
- to_chat(M, "I begin to focus my very being into [item]...")
- break
-
- if(!marked_item)
- to_chat(M, "None of the items you hold are suitable for emplacement of my fragile soul.")
- return
-
- playsound(user, 'sound/blank.ogg', 100)
-
- if(!do_after(M, 50, needhand=FALSE, target=marked_item))
- to_chat(M, "My soul snaps back to my body as you stop ensouling [marked_item]!")
- return
-
- marked_item.name = "ensouled [marked_item.name]"
- marked_item.desc += "\nA terrible aura surrounds this item, its very existence is offensive to life itself..."
- marked_item.add_atom_colour("#003300", ADMIN_COLOUR_PRIORITY)
-
- new /obj/item/phylactery(marked_item, M.mind)
-
- to_chat(M, "With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As my organs crumble to dust in my fleshless chest you come to terms with my choice. You're a lich!")
- M.mind.hasSoul = FALSE
- M.set_species(/datum/species/skeleton)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- H.dropItemToGround(H.wear_pants)
- H.dropItemToGround(H.wear_armor)
- H.dropItemToGround(H.head)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(H), SLOT_ARMOR)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(H), SLOT_HEAD)
- H.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(H), SLOT_PANTS)
-
- // you only get one phylactery.
- M.mind.RemoveSpell(src)
diff --git a/code/modules/spells/spell_types/mime.dm b/code/modules/spells/spell_types/mime.dm
index e763d78cc8..bc8edc3653 100644
--- a/code/modules/spells/spell_types/mime.dm
+++ b/code/modules/spells/spell_types/mime.dm
@@ -66,44 +66,6 @@
A.setDir(user.dir)
A.buckle_mob(user)
-/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_box
- name = "Invisible Box"
- desc = ""
- school = "mime"
- panel = "Mime"
- summon_type = list(/obj/item/storage/box/mime)
- invocation_type = "emote"
- invocation_emote_self = "I conjure up an invisible box, large enough to store a few things."
- summon_lifespan = 500
- charge_max = 300
- clothes_req = FALSE
- antimagic_allowed = TRUE
- range = 0
- cast_sound = null
- human_req = TRUE
-
- action_icon = 'icons/mob/actions/actions_mime.dmi'
- action_icon_state = "invisible_box"
- action_background_icon_state = "bg_mime"
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_box/cast(list/targets,mob/user = usr)
- ..()
- var/turf/T = user.loc
- for (var/obj/item/storage/box/mime/B in T)
- user.put_in_hands(B)
- B.alpha = 255
- addtimer(CALLBACK(B, TYPE_PROC_REF(/obj/item/storage/box/mime, emptyStorage), FALSE), (summon_lifespan - 1))
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_box/Click()
- if(usr && usr.mind)
- if(!usr.mind.miming)
- to_chat(usr, "I must dedicate myself to silence first!")
- return
- invocation = "[usr.real_name] moves [usr.p_their()] hands in the shape of a cube, pressing a box out of the air."
- else
- invocation_type ="none"
- ..()
-
/obj/effect/proc_holder/spell/targeted/mime/speak
name = "Speech"
@@ -174,55 +136,6 @@
invocation_type ="none"
..()
-/obj/effect/proc_holder/spell/aimed/finger_guns
- name = "Finger Guns"
- desc = ""
- school = "mime"
- panel = "Mime"
- charge_max = 300
- clothes_req = FALSE
- antimagic_allowed = TRUE
- invocation_type = "emote"
- invocation_emote_self = "I fire your finger gun!"
- range = 20
- projectile_type = /obj/projectile/bullet/mime
- projectile_amount = 3
- sound = null
- active_msg = "You draw your fingers!"
- deactive_msg = "You put your fingers at ease. Another time."
- active = FALSE
-
- action_icon = 'icons/mob/actions/actions_mime.dmi'
- action_icon_state = "finger_guns0"
- action_background_icon_state = "bg_mime"
- base_icon_state = "finger_guns"
-
-
-/obj/effect/proc_holder/spell/aimed/finger_guns/Click()
- var/mob/living/carbon/human/owner = usr
- if(owner.incapacitated())
- to_chat(owner, "I can't properly point your fingers while incapacitated.")
- return
- if(usr && usr.mind)
- if(!usr.mind.miming)
- to_chat(usr, "I must dedicate myself to silence first!")
- return
- invocation = "[usr.real_name] fires [usr.p_their()] finger gun!"
- else
- invocation_type ="none"
- ..()
-
-/obj/effect/proc_holder/spell/aimed/finger_guns/InterceptClickOn(mob/living/caller, params, atom/target)
- if(caller.incapacitated())
- to_chat(caller, "I can't properly point your fingers while incapacitated.")
- if(charge_type == "recharge")
- var/refund_percent = current_amount/projectile_amount
- charge_counter = charge_max * refund_percent
- start_recharge()
- remove_ranged_ability()
- on_deactivation(caller)
- ..()
-
/obj/item/book/granter/spell/mimery_blockade
spell = /obj/effect/proc_holder/spell/targeted/forcewall/mime
spellname = "Invisible Blockade"
@@ -237,18 +150,3 @@
return
if(!locate(/obj/effect/proc_holder/spell/targeted/mime/speak) in user.mind.spell_list)
user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak)
-
-/obj/item/book/granter/spell/mimery_guns
- spell = /obj/effect/proc_holder/spell/aimed/finger_guns
- spellname = "Finger Guns"
- name = "Guide to Advanced Mimery Vol 2"
- desc = ""
- icon_state ="bookmime"
- remarks = list("...")
-
-/obj/item/book/granter/spell/mimery_guns/attack_self(mob/user)
- . = ..()
- if(!.)
- return
- if(!locate(/obj/effect/proc_holder/spell/targeted/mime/speak) in user.mind.spell_list)
- user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak)
diff --git a/code/modules/spells/spell_types/shadow_walk.dm b/code/modules/spells/spell_types/shadow_walk.dm
index 25bb638055..2c6623c596 100644
--- a/code/modules/spells/spell_types/shadow_walk.dm
+++ b/code/modules/spells/spell_types/shadow_walk.dm
@@ -47,9 +47,6 @@
/obj/effect/dummy/phased_mob/shadow/relaymove(mob/user, direction)
var/turf/newLoc = get_step(src,direction)
- if(isspaceturf(newLoc))
- to_chat(user, "It really would not be wise to go into space.")
- return
forceMove(newLoc)
check_light_level()
diff --git a/code/modules/spells/spell_types/shapeshift.dm b/code/modules/spells/spell_types/shapeshift.dm
index 0794e0f697..49222fc728 100644
--- a/code/modules/spells/spell_types/shapeshift.dm
+++ b/code/modules/spells/spell_types/shapeshift.dm
@@ -19,8 +19,7 @@
var/shapeshift_type
var/list/possible_shapes = list(/mob/living/simple_animal/mouse,\
/mob/living/simple_animal/pet/dog/corgi,\
- /mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper,\
- /mob/living/simple_animal/hostile/construct/armored)
+ /mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper)
/obj/effect/proc_holder/spell/targeted/shapeshift/cast(list/targets,mob/user = usr)
if(src in user.mob_spell_list)
diff --git a/code/modules/spells/spell_types/touch_attacks.dm b/code/modules/spells/spell_types/touch_attacks.dm
index c1d80d2a3e..2216b2502d 100644
--- a/code/modules/spells/spell_types/touch_attacks.dm
+++ b/code/modules/spells/spell_types/touch_attacks.dm
@@ -56,19 +56,6 @@
to_chat(user, "[drawmessage]")
return TRUE
-
-/obj/effect/proc_holder/spell/targeted/touch/disintegrate
- name = "Smite"
- desc = ""
- hand_path = /obj/item/melee/touch_attack/disintegrate
-
- school = "evocation"
- charge_max = 600
- clothes_req = TRUE
- cooldown_min = 200 //100 deciseconds reduction per rank
-
- action_icon_state = "gib"
-
/obj/effect/proc_holder/spell/targeted/touch/flesh_to_stone
name = "Flesh to Stone"
desc = ""
diff --git a/code/modules/spells/spell_types/turf_teleport.dm b/code/modules/spells/spell_types/turf_teleport.dm
index dc6d81b115..880458668e 100644
--- a/code/modules/spells/spell_types/turf_teleport.dm
+++ b/code/modules/spells/spell_types/turf_teleport.dm
@@ -6,7 +6,6 @@
var/inner_tele_radius = 1
var/outer_tele_radius = 2
- var/include_space = FALSE //whether it includes space tiles in possible teleport locations
var/include_dense = FALSE //whether it includes dense tiles in possible teleport locations
var/sound1 = 'sound/blank.ogg'
var/sound2 = 'sound/blank.ogg'
@@ -18,8 +17,6 @@
for(var/turf/T in range(target,outer_tele_radius))
if(T in range(target,inner_tele_radius))
continue
- if(isspaceturf(T) && !include_space)
- continue
if(T.density && !include_dense)
continue
if(T.x>world.maxx-outer_tele_radius || T.xI feel less hungry...")
- owner.adjust_nutrition(50)
- addtimer(CALLBACK(src, PROC_REF(synth_cool)), 50)
-
-/obj/item/organ/cyberimp/chest/nutriment/proc/synth_cool()
- synthesizing = FALSE
-
-/obj/item/organ/cyberimp/chest/nutriment/emp_act(severity)
- . = ..()
- if(!owner || . & EMP_PROTECT_SELF)
- return
- owner.reagents.add_reagent(/datum/reagent/toxin/bad_food, poison_amount / severity)
- to_chat(owner, "I feel like my insides are burning.")
-
-
-/obj/item/organ/cyberimp/chest/nutriment/plus
- name = "Nutriment pump implant PLUS"
- desc = ""
- icon_state = "chest_implant"
- implant_color = "#006607"
- hunger_threshold = NUTRITION_LEVEL_HUNGRY
- poison_amount = 10
-
-/obj/item/organ/cyberimp/chest/reviver
- name = "Reviver implant"
- desc = ""
- icon_state = "chest_implant"
- implant_color = "#AD0000"
- slot = ORGAN_SLOT_HEART_AID
- var/revive_cost = 0
- var/reviving = 0
- var/cooldown = 0
-
-/obj/item/organ/cyberimp/chest/reviver/on_life()
- if(reviving)
- if(owner.stat == UNCONSCIOUS)
- addtimer(CALLBACK(src, PROC_REF(heal)), 30)
- else
- cooldown = revive_cost + world.time
- reviving = FALSE
- to_chat(owner, "My reviver implant shuts down and starts recharging. It will be ready again in [DisplayTimeText(revive_cost)].")
- return
-
- if(cooldown > world.time)
- return
- if(owner.stat != UNCONSCIOUS)
- return
- if(owner.suiciding)
- return
-
- revive_cost = 0
- reviving = TRUE
- to_chat(owner, "I feel a faint buzzing as my reviver implant starts patching my wounds...")
-
-/obj/item/organ/cyberimp/chest/reviver/proc/heal()
- if(owner.getOxyLoss())
- owner.adjustOxyLoss(-5)
- revive_cost += 5
- if(owner.getBruteLoss())
- owner.adjustBruteLoss(-2)
- revive_cost += 40
- if(owner.getFireLoss())
- owner.adjustFireLoss(-2)
- revive_cost += 40
- if(owner.getToxLoss())
- owner.adjustToxLoss(-1)
- revive_cost += 40
-
-/obj/item/organ/cyberimp/chest/reviver/emp_act(severity)
- . = ..()
- if(!owner || . & EMP_PROTECT_SELF)
- return
-
- if(reviving)
- revive_cost += 200
- else
- cooldown += 200
-
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- if(H.stat != DEAD && prob(50 / severity) && H.can_heartattack())
- H.set_heartattack(TRUE)
- to_chat(H, "I feel a horrible agony in my chest!")
- addtimer(CALLBACK(src, PROC_REF(undo_heart_attack)), 600 / severity)
-
-/obj/item/organ/cyberimp/chest/reviver/proc/undo_heart_attack()
- var/mob/living/carbon/human/H = owner
- if(!istype(H))
- return
- H.set_heartattack(FALSE)
- if(H.stat == CONSCIOUS)
- to_chat(H, "I feel my heart beating again!")
-
-
-/obj/item/organ/cyberimp/chest/thrusters
- name = "implantable thrusters set"
- desc = "An implantable set of thruster ports. They use the gas from environment or subject's internals for propulsion in zero-gravity areas. \
- Unlike regular jetpacks, this device has no stabilization system."
- slot = ORGAN_SLOT_THRUSTERS
- icon_state = "imp_jetpack"
- implant_overlay = null
- implant_color = null
- actions_types = list(/datum/action/item_action/organ_action/toggle)
- w_class = WEIGHT_CLASS_NORMAL
- var/on = FALSE
- var/datum/effect_system/trail_follow/ion/ion_trail
-
-/obj/item/organ/cyberimp/chest/thrusters/Insert(mob/living/carbon/M, special = 0)
- . = ..()
- if(!ion_trail)
- ion_trail = new
- ion_trail.set_up(M)
-
-/obj/item/organ/cyberimp/chest/thrusters/Remove(mob/living/carbon/M, special = 0)
- if(on)
- toggle(silent = TRUE)
- ..()
-
-/obj/item/organ/cyberimp/chest/thrusters/ui_action_click()
- toggle()
-
-/obj/item/organ/cyberimp/chest/thrusters/proc/toggle(silent = FALSE)
- if(!on)
- if((organ_flags & ORGAN_FAILING))
- if(!silent)
- to_chat(owner, "My thrusters set seems to be broken!")
- return 0
- on = TRUE
- if(allow_thrust(0.01))
- ion_trail.start()
- RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(move_react))
- owner.add_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER, priority=100, multiplicative_slowdown=-2, movetypes=FLOATING, conflict=MOVE_CONFLICT_JETPACK)
- if(!silent)
- to_chat(owner, "I turn my thrusters set on.")
- else
- ion_trail.stop()
- UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
- owner.remove_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER)
- if(!silent)
- to_chat(owner, "I turn my thrusters set off.")
- on = FALSE
- update_icon()
-
-/obj/item/organ/cyberimp/chest/thrusters/update_icon()
- if(on)
- icon_state = "imp_jetpack-on"
- else
- icon_state = "imp_jetpack"
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
-
-/obj/item/organ/cyberimp/chest/thrusters/proc/move_react()
- allow_thrust(0.01)
-
-/obj/item/organ/cyberimp/chest/thrusters/proc/allow_thrust(num)
- if(!on || !owner)
- return 0
-
- var/turf/T = get_turf(owner)
- if(!T) // No more runtimes from being stuck in nullspace.
- return 0
-
- // Priority 1: use air from environment.
- var/datum/gas_mixture/environment = T.return_air()
- if(environment && environment.return_pressure() > 30)
- return 1
-
- // Priority 3: use internals tank.
- var/obj/item/tank/I = owner.internal
- if(I && I.air_contents && I.air_contents.total_moles() > num)
- var/datum/gas_mixture/removed = I.air_contents.remove(num)
- if(removed.total_moles() > 0.005)
- T.assume_air(removed)
- return 1
- else
- T.assume_air(removed)
-
- toggle(silent = TRUE)
- return 0
diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm
deleted file mode 100644
index 0e6cd60cc3..0000000000
--- a/code/modules/surgery/organs/augments_eyes.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-/obj/item/organ/cyberimp/eyes
- name = "cybernetic eye implant"
- desc = ""
- icon_state = "eye_implant"
- implant_overlay = "eye_implant_overlay"
- slot = ORGAN_SLOT_EYES
- zone = BODY_ZONE_PRECISE_R_EYE
- w_class = WEIGHT_CLASS_TINY
-
-// HUD implants
-/obj/item/organ/cyberimp/eyes/hud
- name = "HUD implant"
- desc = ""
- slot = ORGAN_SLOT_HUD
- var/HUD_type = 0
- var/HUD_trait = null
-
-/obj/item/organ/cyberimp/eyes/hud/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = FALSE)
- ..()
- if(HUD_type)
- var/datum/atom_hud/H = GLOB.huds[HUD_type]
- H.add_hud_to(M)
- if(HUD_trait)
- ADD_TRAIT(M, HUD_trait, ORGAN_TRAIT)
-
-/obj/item/organ/cyberimp/eyes/hud/Remove(mob/living/carbon/M, special = 0)
- if(HUD_type)
- var/datum/atom_hud/H = GLOB.huds[HUD_type]
- H.remove_hud_from(M)
- if(HUD_trait)
- REMOVE_TRAIT(M, HUD_trait, ORGAN_TRAIT)
- ..()
-
-/obj/item/organ/cyberimp/eyes/hud/medical
- name = "Medical HUD implant"
- desc = ""
- HUD_type = DATA_HUD_MEDICAL_ADVANCED
- HUD_trait = TRAIT_MEDICAL_HUD
-
-/obj/item/organ/cyberimp/eyes/hud/security
- name = "Security HUD implant"
- desc = ""
- HUD_type = DATA_HUD_SECURITY_ADVANCED
- HUD_trait = TRAIT_SECURITY_HUD
-
-/obj/item/organ/cyberimp/eyes/hud/diagnostic
- name = "Diagnostic HUD implant"
- desc = ""
- HUD_type = DATA_HUD_DIAGNOSTIC_ADVANCED
-
-/obj/item/organ/cyberimp/eyes/hud/security/syndicate
- name = "Contraband Security HUD Implant"
- desc = ""
- syndicate_implant = TRUE
diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm
deleted file mode 100644
index e6ea9d50b1..0000000000
--- a/code/modules/surgery/organs/augments_internal.dm
+++ /dev/null
@@ -1,177 +0,0 @@
-
-/obj/item/organ/cyberimp
- name = "cybernetic implant"
- desc = ""
- status = ORGAN_ROBOTIC
- organ_flags = ORGAN_SYNTHETIC
- var/implant_color = "#FFFFFF"
- var/implant_overlay
- var/syndicate_implant = FALSE //Makes the implant invisible to health analyzers and medical HUDs.
-
-/obj/item/organ/cyberimp/New(mob/M = null)
- if(iscarbon(M))
- src.Insert(M)
- if(implant_overlay)
- var/mutable_appearance/overlay = mutable_appearance(icon, implant_overlay)
- overlay.color = implant_color
- add_overlay(overlay)
- return ..()
-
-
-
-//[[[[BRAIN]]]]
-
-/obj/item/organ/cyberimp/brain
- name = "cybernetic brain implant"
- desc = ""
- icon_state = "brain_implant"
- implant_overlay = "brain_implant_overlay"
- zone = BODY_ZONE_HEAD
- w_class = WEIGHT_CLASS_TINY
-
-/obj/item/organ/cyberimp/brain/emp_act(severity)
- . = ..()
- if(!owner || . & EMP_PROTECT_SELF)
- return
- var/stun_amount = 200/severity
- owner.Stun(stun_amount)
- to_chat(owner, "My body seizes up!")
-
-
-/obj/item/organ/cyberimp/brain/anti_drop
- name = "anti-drop implant"
- desc = ""
- var/active = 0
- var/list/stored_items = list()
- implant_color = "#DE7E00"
- slot = ORGAN_SLOT_BRAIN_ANTIDROP
- actions_types = list(/datum/action/item_action/organ_action/toggle)
-
-/obj/item/organ/cyberimp/brain/anti_drop/ui_action_click()
- active = !active
- if(active)
- for(var/obj/item/I in owner.held_items)
- stored_items += I
-
- var/list/L = owner.get_empty_held_indexes()
- if(LAZYLEN(L) == owner.held_items.len)
- to_chat(owner, "I are not holding any items, my hands relax...")
- active = 0
- stored_items = list()
- else
- for(var/obj/item/I in stored_items)
- to_chat(owner, "My [owner.get_held_index_name(owner.get_held_index_of_item(I))]'s grip tightens.")
- ADD_TRAIT(I, TRAIT_NODROP, ANTI_DROP_IMPLANT_TRAIT)
-
- else
- release_items()
- to_chat(owner, "My hands relax...")
-
-
-/obj/item/organ/cyberimp/brain/anti_drop/emp_act(severity)
- . = ..()
- if(!owner || . & EMP_PROTECT_SELF)
- return
- var/range = severity ? 10 : 5
- var/atom/A
- if(active)
- release_items()
- for(var/obj/item/I in stored_items)
- A = pick(oview(range))
- I.throw_at(A, range, 2)
- to_chat(owner, "My [owner.get_held_index_name(owner.get_held_index_of_item(I))] spasms and throws the [I.name]!")
- stored_items = list()
-
-
-/obj/item/organ/cyberimp/brain/anti_drop/proc/release_items()
- for(var/obj/item/I in stored_items)
- REMOVE_TRAIT(I, TRAIT_NODROP, ANTI_DROP_IMPLANT_TRAIT)
- stored_items = list()
-
-
-/obj/item/organ/cyberimp/brain/anti_drop/Remove(mob/living/carbon/M, special = 0)
- if(active)
- ui_action_click()
- ..()
-
-/obj/item/organ/cyberimp/brain/anti_stun
- name = "CNS Rebooter implant"
- desc = ""
- implant_color = "#FFFF00"
- slot = ORGAN_SLOT_BRAIN_ANTISTUN
-
- var/static/list/signalCache = list(
- COMSIG_LIVING_STATUS_STUN,
- COMSIG_LIVING_STATUS_KNOCKDOWN,
- COMSIG_LIVING_STATUS_IMMOBILIZE,
- COMSIG_LIVING_STATUS_PARALYZE,
- )
-
- var/stun_cap_amount = 40
-
-/obj/item/organ/cyberimp/brain/anti_stun/Remove(mob/living/carbon/M, special = FALSE)
- . = ..()
- UnregisterSignal(M, signalCache)
-
-/obj/item/organ/cyberimp/brain/anti_stun/Insert()
- . = ..()
- RegisterSignal(owner, signalCache, PROC_REF(on_signal))
-
-/obj/item/organ/cyberimp/brain/anti_stun/proc/on_signal(datum/source, amount)
- if(!(organ_flags & ORGAN_FAILING) && amount > 0)
- addtimer(CALLBACK(src, PROC_REF(clear_stuns)), stun_cap_amount, TIMER_UNIQUE|TIMER_OVERRIDE)
-
-/obj/item/organ/cyberimp/brain/anti_stun/proc/clear_stuns()
- if(owner || !(organ_flags & ORGAN_FAILING))
- owner.SetStun(0)
- owner.SetKnockdown(0)
- owner.SetImmobilized(0)
- owner.SetParalyzed(0)
-
-/obj/item/organ/cyberimp/brain/anti_stun/emp_act(severity)
- . = ..()
- if((organ_flags & ORGAN_FAILING) || . & EMP_PROTECT_SELF)
- return
- organ_flags |= ORGAN_FAILING
- addtimer(CALLBACK(src, PROC_REF(reboot)), 90 / severity)
-
-/obj/item/organ/cyberimp/brain/anti_stun/proc/reboot()
- organ_flags &= ~ORGAN_FAILING
-
-//[[[[MOUTH]]]]
-/obj/item/organ/cyberimp/mouth
- zone = BODY_ZONE_PRECISE_MOUTH
-
-/obj/item/organ/cyberimp/mouth/breathing_tube
- name = "breathing tube implant"
- desc = ""
- icon_state = "implant_mask"
- slot = ORGAN_SLOT_BREATHING_TUBE
- w_class = WEIGHT_CLASS_TINY
-
-/obj/item/organ/cyberimp/mouth/breathing_tube/emp_act(severity)
- . = ..()
- if(!owner || . & EMP_PROTECT_SELF)
- return
- if(prob(60/severity))
- to_chat(owner, "My breathing tube suddenly closes!")
- owner.losebreath += 2
-
-//BOX O' IMPLANTS
-
-/obj/item/storage/box/cyber_implants
- name = "boxed cybernetic implants"
- desc = ""
- icon_state = "cyber_implants"
- var/list/boxed = list(
- /obj/item/autosurgeon/thermal_eyes,
- /obj/item/autosurgeon/xray_eyes,
- /obj/item/autosurgeon/anti_stun,
- /obj/item/autosurgeon/reviver)
- var/amount = 5
-
-/obj/item/storage/box/cyber_implants/PopulateContents()
- var/implant
- while(contents.len <= amount)
- implant = pick(boxed)
- new implant(src)
diff --git a/code/modules/surgery/organs/autosurgeon.dm b/code/modules/surgery/organs/autosurgeon.dm
deleted file mode 100644
index 0571e2bc04..0000000000
--- a/code/modules/surgery/organs/autosurgeon.dm
+++ /dev/null
@@ -1,96 +0,0 @@
-#define INFINITE -1
-
-/obj/item/autosurgeon
- name = "autosurgeon"
- desc = ""
- icon = 'icons/obj/device.dmi'
- icon_state = "autoimplanter"
- item_state = "nothing"
- w_class = WEIGHT_CLASS_SMALL
- var/obj/item/organ/storedorgan
- var/organ_type = /obj/item/organ
- var/uses = INFINITE
- var/starting_organ
-
-/obj/item/autosurgeon/Initialize(mapload)
- . = ..()
- if(starting_organ)
- insert_organ(new starting_organ(src))
-
-/obj/item/autosurgeon/proc/insert_organ(obj/item/I)
- storedorgan = I
- I.forceMove(src)
- name = "[initial(name)] ([storedorgan.name])"
-
-/obj/item/autosurgeon/attack_self(mob/user)//when the object it used...
- if(!uses)
- to_chat(user, "[src] has already been used. The tools are dull and won't reactivate.")
- return
- else if(!storedorgan)
- to_chat(user, "[src] currently has no implant stored.")
- return
- storedorgan.Insert(user)//insert stored organ into the user
- user.visible_message("[user] presses a button on [src], and you hear a short mechanical noise.", "I feel a sharp sting as [src] plunges into my body.")
- playsound(get_turf(user), 'sound/blank.ogg', 50, TRUE)
- storedorgan = null
- name = initial(name)
- if(uses != INFINITE)
- uses--
- if(!uses)
- desc = ""
-
-/obj/item/autosurgeon/attack_self_tk(mob/user)
- return //stops TK fuckery
-
-/obj/item/autosurgeon/attackby(obj/item/I, mob/user, params)
- if(istype(I, organ_type))
- if(storedorgan)
- to_chat(user, "[src] already has an implant stored.")
- return
- else if(!uses)
- to_chat(user, "[src] has already been used up.")
- return
- if(!user.transferItemToLoc(I, src))
- return
- storedorgan = I
- to_chat(user, "I insert the [I] into [src].")
- else
- return ..()
-
-/obj/item/autosurgeon/screwdriver_act(mob/living/user, obj/item/I)
- if(..())
- return TRUE
- if(!storedorgan)
- to_chat(user, "There's no implant in [src] for you to remove!")
- else
- var/atom/drop_loc = user.drop_location()
- for(var/J in src)
- var/atom/movable/AM = J
- AM.forceMove(drop_loc)
-
- to_chat(user, "I remove the [storedorgan] from [src].")
- I.play_tool_sound(src)
- storedorgan = null
- if(uses != INFINITE)
- uses--
- if(!uses)
- desc = ""
- return TRUE
-
-/obj/item/autosurgeon/cmo
- desc = ""
- uses = 1
- starting_organ = /obj/item/organ/cyberimp/eyes/hud/medical
-
-
-/obj/item/autosurgeon/thermal_eyes
- starting_organ = /obj/item/organ/eyes/robotic/thermals
-
-/obj/item/autosurgeon/xray_eyes
- starting_organ = /obj/item/organ/eyes/robotic/xray
-
-/obj/item/autosurgeon/anti_stun
- starting_organ = /obj/item/organ/cyberimp/brain/anti_stun
-
-/obj/item/autosurgeon/reviver
- starting_organ = /obj/item/organ/cyberimp/chest/reviver
diff --git a/code/modules/surgery/organs/brain.dm b/code/modules/surgery/organs/brain.dm
index 36f0ed81ef..0a54111854 100644
--- a/code/modules/surgery/organs/brain.dm
+++ b/code/modules/surgery/organs/brain.dm
@@ -95,9 +95,6 @@
/obj/item/organ/brain/attackby(obj/item/O, mob/user, params)
user.changeNext_move(CLICK_CD_MELEE)
- if(istype(O, /obj/item/organ_storage))
- return //Borg organ bags shouldn't be killing brains
-
if((organ_flags & ORGAN_FAILING) && O.is_drainable() && O.reagents.has_reagent(/datum/reagent/medicine/mannitol)) //attempt to heal the brain
. = TRUE //don't do attack animation.
if(brain_death || brainmob?.health <= HEALTH_THRESHOLD_DEAD) //if the brain is fucked anyway, do nothing
diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm
index b8d516607f..bf4101c189 100644
--- a/code/modules/surgery/organs/lungs.dm
+++ b/code/modules/surgery/organs/lungs.dm
@@ -63,310 +63,6 @@
var/crit_stabilizing_reagent = /datum/reagent/medicine/epinephrine
-
-/obj/item/organ/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H)
- if(H.status_flags & GODMODE)
- return
- if(HAS_TRAIT(H, TRAIT_NOBREATH))
- return
-
- if(!breath || (breath.total_moles() == 0))
- if(H.reagents.has_reagent(crit_stabilizing_reagent, needs_metabolizing = TRUE))
- return
- if(H.health >= H.crit_threshold)
- H.adjustOxyLoss(HUMAN_MAX_OXYLOSS)
- else if(!HAS_TRAIT(H, TRAIT_NOCRITDAMAGE))
- H.adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS)
-
- H.failed_last_breath = TRUE
- if(safe_oxygen_min)
- H.throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy)
- else if(safe_toxins_min)
- H.throw_alert("not_enough_tox", /atom/movable/screen/alert/not_enough_tox)
- else if(safe_co2_min)
- H.throw_alert("not_enough_co2", /atom/movable/screen/alert/not_enough_co2)
- else if(safe_nitro_min)
- H.throw_alert("not_enough_nitro", /atom/movable/screen/alert/not_enough_nitro)
- return FALSE
-
- var/gas_breathed = 0
-
- var/list/breath_gases = breath.gases
-
- breath.assert_gases(/datum/gas/oxygen, /datum/gas/plasma, /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/bz, /datum/gas/nitrogen, /datum/gas/tritium, /datum/gas/nitryl, /datum/gas/pluoxium, /datum/gas/stimulum)
-
- //Partial pressures in our breath
- var/O2_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/oxygen][MOLES])+(8*breath.get_breath_partial_pressure(breath_gases[/datum/gas/pluoxium][MOLES]))
- var/N2_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitrogen][MOLES])
- var/Toxins_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/plasma][MOLES])
- var/CO2_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/carbon_dioxide][MOLES])
-
-
- //-- OXY --//
-
- //Too much oxygen! //Yes, some species may not like it.
- if(safe_oxygen_max)
- if(O2_pp > safe_oxygen_max)
- var/ratio = (breath_gases[/datum/gas/oxygen][MOLES]/safe_oxygen_max) * 10
- H.apply_damage_type(CLAMP(ratio, oxy_breath_dam_min, oxy_breath_dam_max), oxy_damage_type)
- H.throw_alert("too_much_oxy", /atom/movable/screen/alert/too_much_oxy)
- else
- H.clear_alert("too_much_oxy")
-
- //Too little oxygen!
- if(safe_oxygen_min)
- if(O2_pp < safe_oxygen_min)
- gas_breathed = handle_too_little_breath(H, O2_pp, safe_oxygen_min, breath_gases[/datum/gas/oxygen][MOLES])
- H.throw_alert("not_enough_oxy", /atom/movable/screen/alert/not_enough_oxy)
- else
- H.failed_last_breath = FALSE
- if(H.health >= H.crit_threshold)
- H.adjustOxyLoss(-5)
- gas_breathed = breath_gases[/datum/gas/oxygen][MOLES]
- H.clear_alert("not_enough_oxy")
-
- //Exhale
- breath_gases[/datum/gas/oxygen][MOLES] -= gas_breathed
- breath_gases[/datum/gas/carbon_dioxide][MOLES] += gas_breathed
- gas_breathed = 0
-
- //-- Nitrogen --//
-
- //Too much nitrogen!
- if(safe_nitro_max)
- if(N2_pp > safe_nitro_max)
- var/ratio = (breath_gases[/datum/gas/nitrogen][MOLES]/safe_nitro_max) * 10
- H.apply_damage_type(CLAMP(ratio, nitro_breath_dam_min, nitro_breath_dam_max), nitro_damage_type)
- H.throw_alert("too_much_nitro", /atom/movable/screen/alert/too_much_nitro)
- else
- H.clear_alert("too_much_nitro")
-
- //Too little nitrogen!
- if(safe_nitro_min)
- if(N2_pp < safe_nitro_min)
- gas_breathed = handle_too_little_breath(H, N2_pp, safe_nitro_min, breath_gases[/datum/gas/nitrogen][MOLES])
- H.throw_alert("nitro", /atom/movable/screen/alert/not_enough_nitro)
- else
- H.failed_last_breath = FALSE
- if(H.health >= H.crit_threshold)
- H.adjustOxyLoss(-5)
- gas_breathed = breath_gases[/datum/gas/nitrogen][MOLES]
- H.clear_alert("nitro")
-
- //Exhale
- breath_gases[/datum/gas/nitrogen][MOLES] -= gas_breathed
- breath_gases[/datum/gas/carbon_dioxide][MOLES] += gas_breathed
- gas_breathed = 0
-
- //-- CO2 --//
-
- //CO2 does not affect failed_last_breath. So if there was enough oxygen in the air but too much co2, this will hurt you, but only once per 4 ticks, instead of once per tick.
- if(safe_co2_max)
- if(CO2_pp > safe_co2_max)
- if(!H.co2overloadtime) // If it's the first breath with too much CO2 in it, lets start a counter, then have them pass out after 12s or so.
- H.co2overloadtime = world.time
- else if(world.time - H.co2overloadtime > 120)
- H.Unconscious(60)
- H.apply_damage_type(3, co2_damage_type) // Lets hurt em a little, let them know we mean business
- if(world.time - H.co2overloadtime > 300) // They've been in here 30s now, lets start to kill them for their own good!
- H.apply_damage_type(8, co2_damage_type)
- H.throw_alert("too_much_co2", /atom/movable/screen/alert/too_much_co2)
- if(prob(20)) // Lets give them some chance to know somethings not right though I guess.
- H.emote("cough")
-
- else
- H.co2overloadtime = 0
- H.clear_alert("too_much_co2")
-
- //Too little CO2!
- if(safe_co2_min)
- if(CO2_pp < safe_co2_min)
- gas_breathed = handle_too_little_breath(H, CO2_pp, safe_co2_min, breath_gases[/datum/gas/carbon_dioxide][MOLES])
- H.throw_alert("not_enough_co2", /atom/movable/screen/alert/not_enough_co2)
- else
- H.failed_last_breath = FALSE
- if(H.health >= H.crit_threshold)
- H.adjustOxyLoss(-5)
- gas_breathed = breath_gases[/datum/gas/carbon_dioxide][MOLES]
- H.clear_alert("not_enough_co2")
-
- //Exhale
- breath_gases[/datum/gas/carbon_dioxide][MOLES] -= gas_breathed
- breath_gases[/datum/gas/oxygen][MOLES] += gas_breathed
- gas_breathed = 0
-
-
- //-- TOX --//
-
- //Too much toxins!
- if(safe_toxins_max)
- if(Toxins_pp > safe_toxins_max)
- var/ratio = (breath_gases[/datum/gas/plasma][MOLES]/safe_toxins_max) * 10
- H.apply_damage_type(CLAMP(ratio, tox_breath_dam_min, tox_breath_dam_max), tox_damage_type)
- H.throw_alert("too_much_tox", /atom/movable/screen/alert/too_much_tox)
- else
- H.clear_alert("too_much_tox")
-
-
- //Too little toxins!
- if(safe_toxins_min)
- if(Toxins_pp < safe_toxins_min)
- gas_breathed = handle_too_little_breath(H, Toxins_pp, safe_toxins_min, breath_gases[/datum/gas/plasma][MOLES])
- H.throw_alert("not_enough_tox", /atom/movable/screen/alert/not_enough_tox)
- else
- H.failed_last_breath = FALSE
- if(H.health >= H.crit_threshold)
- H.adjustOxyLoss(-5)
- gas_breathed = breath_gases[/datum/gas/plasma][MOLES]
- H.clear_alert("not_enough_tox")
-
- //Exhale
- breath_gases[/datum/gas/plasma][MOLES] -= gas_breathed
- breath_gases[/datum/gas/carbon_dioxide][MOLES] += gas_breathed
- gas_breathed = 0
-
-
- //-- TRACES --//
-
- if(breath) // If there's some other shit in the air lets deal with it here.
-
- // N2O
-
- var/SA_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitrous_oxide][MOLES])
- if(SA_pp > SA_para_min) // Enough to make us stunned for a bit
- H.Unconscious(60) // 60 gives them one second to wake up and run away a bit!
- if(SA_pp > SA_sleep_min) // Enough to make us sleep as well
- H.Sleeping(max(H.AmountSleeping() + 40, 200))
- else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning
- if(prob(20))
- H.emote(pick("giggle", "laugh"))
- SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "chemical_euphoria", /datum/mood_event/chemical_euphoria)
- else
- SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "chemical_euphoria")
-
-
- // Tritium
- var/trit_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/tritium][MOLES])
- if (trit_pp > 50)
- H.radiation += trit_pp/2 //If you're breathing in half an atmosphere of radioactive gas, you fucked up.
- else
- H.radiation += trit_pp/10
-
- // Nitryl
- var/nitryl_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/nitryl][MOLES])
- if (prob(nitryl_pp))
- to_chat(H, "My mouth feels like it's burning!")
- if (nitryl_pp >40)
- H.emote("breathgasp")
- H.adjustFireLoss(10)
- if (prob(nitryl_pp/2))
- to_chat(H, "My throat closes up!")
- H.silent = max(H.silent, 3)
- else
- H.adjustFireLoss(nitryl_pp/4)
- gas_breathed = breath_gases[/datum/gas/nitryl][MOLES]
- if (gas_breathed > gas_stimulation_min)
- H.reagents.add_reagent(/datum/reagent/nitryl,1)
-
- breath_gases[/datum/gas/nitryl][MOLES]-=gas_breathed
-
- // Stimulum
- gas_breathed = breath_gases[/datum/gas/stimulum][MOLES]
- if (gas_breathed > gas_stimulation_min)
- var/existing = H.reagents.get_reagent_amount(/datum/reagent/stimulum)
- H.reagents.add_reagent(/datum/reagent/stimulum,max(0, 1 - existing))
- breath_gases[/datum/gas/stimulum][MOLES]-=gas_breathed
-
- // Miasma
- if (breath_gases[/datum/gas/miasma])
- var/miasma_pp = breath.get_breath_partial_pressure(breath_gases[/datum/gas/miasma][MOLES])
-
- // Miasma side effects
- switch(miasma_pp)
- if(0.25 to 5)
- // At lower pp, give out a little warning
- SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "smell")
- if(prob(5))
- to_chat(owner, "There is an unpleasant smell in the air.")
- if(5 to 15)
- //At somewhat higher pp, warning becomes more obvious
- if(prob(15))
- to_chat(owner, "I smell something horribly decayed inside this room.")
- SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/bad_smell)
- if(15 to 30)
- //Small chance to vomit. By now, people have internals on anyway
- if(prob(5))
- to_chat(owner, "The stench of rotting carcasses is unbearable!")
- SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/nauseating_stench)
- owner.vomit()
- if(30 to INFINITY)
- //Higher chance to vomit. Let the horror start
- if(prob(15))
- to_chat(owner, "The stench of rotting carcasses is unbearable!")
- SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "smell", /datum/mood_event/disgust/nauseating_stench)
- owner.vomit()
- else
- SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "smell")
-
- // In a full miasma atmosphere with 101.34 pKa, about 10 disgust per breath, is pretty low compared to threshholds
- // Then again, this is a purely hypothetical scenario and hardly reachable
- owner.adjust_disgust(0.1 * miasma_pp)
-
- breath_gases[/datum/gas/miasma][MOLES]-=gas_breathed
-
- // Clear out moods when no miasma at all
- else
- SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, "smell")
-
- handle_breath_temperature(breath, H)
- breath.garbage_collect()
- return TRUE
-
-
-/obj/item/organ/lungs/proc/handle_too_little_breath(mob/living/carbon/human/H = null, breath_pp = 0, safe_breath_min = 0, true_pp = 0)
- . = 0
- if(!H || !safe_breath_min) //the other args are either: Ok being 0 or Specifically handled.
- return FALSE
-
- if(prob(20))
- H.emote("breathgasp")
- if(breath_pp > 0)
- var/ratio = safe_breath_min/breath_pp
- H.adjustOxyLoss(min(5*ratio, HUMAN_MAX_OXYLOSS)) // Don't fuck them up too fast (space only does HUMAN_MAX_OXYLOSS after all!
- H.failed_last_breath = TRUE
- . = true_pp*ratio/6
- else
- H.adjustOxyLoss(HUMAN_MAX_OXYLOSS)
- H.failed_last_breath = TRUE
-
-
-/obj/item/organ/lungs/proc/handle_breath_temperature(datum/gas_mixture/breath, mob/living/carbon/human/H) // called by human/life, handles temperatures
- var/breath_temperature = breath.temperature
-
- if(!HAS_TRAIT(H, TRAIT_RESISTCOLD)) // COLD DAMAGE
- var/cold_modifier = H.dna.species.coldmod
- if(breath_temperature < cold_level_3_threshold)
- H.apply_damage_type(cold_level_3_damage*cold_modifier, cold_damage_type)
- if(breath_temperature > cold_level_3_threshold && breath_temperature < cold_level_2_threshold)
- H.apply_damage_type(cold_level_2_damage*cold_modifier, cold_damage_type)
- if(breath_temperature > cold_level_2_threshold && breath_temperature < cold_level_1_threshold)
- H.apply_damage_type(cold_level_1_damage*cold_modifier, cold_damage_type)
- if(breath_temperature < cold_level_1_threshold)
- if(prob(20))
- to_chat(H, "I feel [cold_message] in my [name]!")
-
- if(!HAS_TRAIT(H, TRAIT_RESISTHEAT)) // HEAT DAMAGE
- var/heat_modifier = H.dna.species.heatmod
- if(breath_temperature > heat_level_1_threshold && breath_temperature < heat_level_2_threshold)
- H.apply_damage_type(heat_level_1_damage*heat_modifier, heat_damage_type)
- if(breath_temperature > heat_level_2_threshold && breath_temperature < heat_level_3_threshold)
- H.apply_damage_type(heat_level_2_damage*heat_modifier, heat_damage_type)
- if(breath_temperature > heat_level_3_threshold)
- H.apply_damage_type(heat_level_3_damage*heat_modifier, heat_damage_type)
- if(breath_temperature > heat_level_1_threshold)
- if(prob(20))
- to_chat(H, "I feel [hot_message] in my [name]!")
-
/obj/item/organ/lungs/on_life()
..()
if((!failed) && ((organ_flags & ORGAN_FAILING)))
@@ -398,12 +94,6 @@
safe_toxins_max = 0 //We breathe this to gain POWER.
-/obj/item/organ/lungs/slime/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/H)
- . = ..()
- if (breath && breath.gases[/datum/gas/plasma])
- var/plasma_pp = breath.get_breath_partial_pressure(breath.gases[/datum/gas/plasma][MOLES])
- owner.blood_volume += (0.2 * plasma_pp) // 10/s when breathing literally nothing but plasma, which will suffocate you.
-
/obj/item/organ/lungs/cybernetic
name = "cybernetic lungs"
desc = ""
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index cc11df11e7..49d8e524aa 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -139,10 +139,6 @@
if(L.can_hear() && !L.anti_magic_check(FALSE, TRUE) && L.stat != DEAD)
if(L == user && !include_speaker)
continue
- if(ishuman(L))
- var/mob/living/carbon/human/H = L
- if(istype(H.ears, /obj/item/clothing/ears/earmuffs))
- continue
listeners += L
if(!listeners.len)
diff --git a/code/modules/surgery/surgeries/limb_replacement.dm b/code/modules/surgery/surgeries/limb_replacement.dm
index 2f04acc7ba..50e555fa74 100644
--- a/code/modules/surgery/surgeries/limb_replacement.dm
+++ b/code/modules/surgery/surgeries/limb_replacement.dm
@@ -13,7 +13,6 @@
name = "Replace limb"
implements = list(
/obj/item/bodypart = 80,
- /obj/item/organ_storage = 80,
)
time = 3.2 SECONDS
surgery_flags = SURGERY_INCISED | SURGERY_RETRACTED | SURGERY_BROKEN
@@ -21,8 +20,6 @@
skill_median = SKILL_LEVEL_EXPERT
/datum/surgery_step/replace_limb/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/intent/intent)
- if(istype(tool, /obj/item/organ_storage) && istype(tool.contents[1], /obj/item/bodypart))
- tool = tool.contents[1]
var/obj/item/bodypart/aug = tool
if(!istype(aug) || aug.status != BODYPART_ROBOTIC)
to_chat(user, "That's not an augment, silly!")
@@ -43,11 +40,6 @@
/datum/surgery_step/replace_limb/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/surgery/surgery)
var/obj/item/bodypart/existing = target.get_bodypart(check_zone(target_zone))
if(existing)
- if(istype(tool, /obj/item/organ_storage))
- tool.icon_state = initial(tool.icon_state)
- tool.desc = initial(tool.desc)
- tool.cut_overlays()
- tool = tool.contents[1]
var/obj/item/bodypart/bodypart = tool
if(istype(bodypart) && user.temporarilyRemoveItemFromInventory(bodypart))
if(bodypart.replace_limb(target, special = TRUE) && bodypart.attach_wound)
diff --git a/code/modules/surgery/surgeries/organ_manipulation.dm b/code/modules/surgery/surgeries/organ_manipulation.dm
index adccef462e..5afba7d8eb 100644
--- a/code/modules/surgery/surgeries/organ_manipulation.dm
+++ b/code/modules/surgery/surgeries/organ_manipulation.dm
@@ -18,7 +18,7 @@
BODY_ZONE_PRECISE_MOUTH,
BODY_ZONE_PRECISE_STOMACH,
BODY_ZONE_PRECISE_GROIN,
- BODY_ZONE_L_ARM,
+ BODY_ZONE_L_ARM,
BODY_ZONE_R_ARM,
)
steps = list(
@@ -35,8 +35,7 @@
time = 6.4 SECONDS
accept_hand = TRUE
implements = list(
- /obj/item/organ = 80,
- /obj/item/organ_storage = 80,
+ /obj/item/organ = 80,
/obj/item/reagent_containers/food/snacks/organ = 0,
)
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
@@ -75,15 +74,6 @@
if(istype(tool, /obj/item/reagent_containers/food/snacks/organ))
to_chat(user, "[tool] was bitten by someone! It's too damaged to use!")
return FALSE
-
- if(istype(tool, /obj/item/organ_storage))
- if(!length(tool.contents))
- to_chat(user, "There is nothing inside [tool]!")
- return FALSE
- tool = tool.contents[1]
- if(!isorgan(tool))
- to_chat(user, "I cannot put [tool] inside [target]'s [parse_zone(target_zone)]!")
- return FALSE
var/obj/item/organ/organ_tool = tool
if(istype(organ_tool))
@@ -114,7 +104,7 @@
var/obj/item/organ/final_organ = organs[selected]
if(QDELETED(final_organ))
return FALSE
-
+
user.select_organ_slot(final_organ.slot)
display_results(user, target, "I begin to extract [final_organ] from [target]'s [parse_zone(target_zone)]...",
"[user] begins to extract [final_organ] from [target]'s [parse_zone(target_zone)].",
@@ -123,14 +113,6 @@
return TRUE
/datum/surgery_step/manipulate_organs/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/intent/intent)
- if(istype(tool, /obj/item/organ_storage))
- tool.icon_state = initial(tool.icon_state)
- tool.desc = initial(tool.desc)
- tool.cut_overlays()
- tool = tool.contents[1]
- if(!isorgan(tool))
- return FALSE
-
var/obj/item/organ/organ_tool = tool
if(istype(organ_tool) && user.temporarilyRemoveItemFromInventory(organ_tool))
organ_tool.Insert(target)
diff --git a/code/modules/surgery/surgeries/prosthetic_replacement.dm b/code/modules/surgery/surgeries/prosthetic_replacement.dm
index 20285e7754..dd08248b3e 100644
--- a/code/modules/surgery/surgeries/prosthetic_replacement.dm
+++ b/code/modules/surgery/surgeries/prosthetic_replacement.dm
@@ -19,7 +19,6 @@
name = "Implant limb"
implements = list(
/obj/item/bodypart = 80,
- /obj/item/organ_storage = 80,
)
target_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
possible_locs = list(
@@ -37,15 +36,6 @@
skill_median = SKILL_LEVEL_JOURNEYMAN
/datum/surgery_step/add_prosthetic/preop(mob/user, mob/living/target, target_zone, obj/item/tool, datum/intent/intent)
- if(istype(tool, /obj/item/organ_storage))
- if(!length(tool.contents))
- to_chat(user, "There is nothing inside [tool]!")
- return FALSE
- tool = tool.contents[1]
- if(!isbodypart(tool))
- to_chat(user, "[tool] cannot be attached!")
- return FALSE
-
var/obj/item/bodypart/bodypart = tool
if(ismonkey(target) && bodypart.animal_origin != MONKEY_BODYPART)
to_chat(user, "[bodypart] doesn't match the patient's morphology.")
@@ -64,14 +54,6 @@
return TRUE
/datum/surgery_step/add_prosthetic/success(mob/user, mob/living/target, target_zone, obj/item/tool, datum/intent/intent)
- if(istype(tool, /obj/item/organ_storage))
- tool.icon_state = initial(tool.icon_state)
- tool.desc = initial(tool.desc)
- tool.cut_overlays()
- tool = tool.contents[1]
- if(!isbodypart(tool))
- return FALSE
-
var/obj/item/bodypart/bodypart = tool
if(bodypart.attach_limb(target) && bodypart.attach_wound)
bodypart.add_wound(bodypart.attach_wound)
diff --git a/code/modules/surgery/surgery_tools.dm b/code/modules/surgery/surgery_tools.dm
deleted file mode 100644
index 1afd27b1f0..0000000000
--- a/code/modules/surgery/surgery_tools.dm
+++ /dev/null
@@ -1,315 +0,0 @@
-/obj/item/retractor
- name = "retractor"
- desc = ""
- icon = 'icons/obj/surgery.dmi'
- icon_state = "retractor"
- lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- item_state = "clamps"
- custom_materials = list(/datum/material/iron=6000, /datum/material/glass=3000)
- flags_1 = CONDUCT_1
- item_flags = SURGICAL_TOOL
- w_class = WEIGHT_CLASS_TINY
- tool_behaviour = TOOL_RETRACTOR
- toolspeed = 1
-
-/obj/item/retractor/augment
- desc = ""
- toolspeed = 0.5
-
-
-/obj/item/hemostat
- name = "hemostat"
- desc = ""
- icon = 'icons/obj/surgery.dmi'
- icon_state = "hemostat"
- lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- item_state = "clamps"
- custom_materials = list(/datum/material/iron=5000, /datum/material/glass=2500)
- flags_1 = CONDUCT_1
- item_flags = SURGICAL_TOOL
- w_class = WEIGHT_CLASS_TINY
- attack_verb = list("attacked", "pinched")
- tool_behaviour = TOOL_HEMOSTAT
- toolspeed = 1
-
-/obj/item/hemostat/augment
- desc = ""
- toolspeed = 0.5
-
-
-/obj/item/cautery
- name = "cautery"
- desc = ""
- icon = 'icons/obj/surgery.dmi'
- icon_state = "cautery"
- lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- item_state = "cautery"
- custom_materials = list(/datum/material/iron=2500, /datum/material/glass=750)
- flags_1 = CONDUCT_1
- item_flags = SURGICAL_TOOL
- w_class = WEIGHT_CLASS_TINY
- attack_verb = list("burnt")
- tool_behaviour = TOOL_CAUTERY
- toolspeed = 1
-
-/obj/item/cautery/augment
- desc = ""
- toolspeed = 0.5
-
-
-/obj/item/surgicaldrill
- name = "surgical drill"
- desc = ""
- icon = 'icons/obj/surgery.dmi'
- icon_state = "drill"
- lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
- hitsound = 'sound/blank.ogg'
- custom_materials = list(/datum/material/iron=10000, /datum/material/glass=6000)
- flags_1 = CONDUCT_1
- item_flags = SURGICAL_TOOL
- force = 15
- w_class = WEIGHT_CLASS_NORMAL
- attack_verb = list("drilled")
- tool_behaviour = TOOL_DRILL
- toolspeed = 1
-
-/obj/item/surgicaldrill/augment
- desc = ""
- hitsound = 'sound/blank.ogg'
- force = 10
- w_class = WEIGHT_CLASS_SMALL
- toolspeed = 0.5
-
-
-/obj/item/scalpel
- name = "scalpel"
- desc = ""
- icon = 'icons/obj/surgery.dmi'
- icon_state = "scalpel"
- lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- item_state = "scalpel"
- flags_1 = CONDUCT_1
- item_flags = SURGICAL_TOOL
- force = 10
- w_class = WEIGHT_CLASS_TINY
- throwforce = 5
- throw_speed = 3
- throw_range = 5
- custom_materials = list(/datum/material/iron=4000, /datum/material/glass=1000)
- attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
- hitsound = 'sound/blank.ogg'
- sharpness = IS_SHARP_ACCURATE
- tool_behaviour = TOOL_SCALPEL
- toolspeed = 1
-
-/obj/item/scalpel/Initialize()
- . = ..()
- AddComponent(/datum/component/butchering, 80 * toolspeed, 100, 0)
-
-/obj/item/scalpel/augment
- desc = ""
- toolspeed = 0.5
-
-/obj/item/scalpel/suicide_act(mob/user)
- user.visible_message("[user] is slitting [user.p_their()] [pick("wrists", "throat", "stomach")] with [src]! It looks like [user.p_theyre()] trying to commit suicide!")
- return (BRUTELOSS)
-
-
-/obj/item/circular_saw
- name = "circular saw"
- desc = ""
- icon = 'icons/obj/surgery.dmi'
- icon_state = "saw"
- lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- hitsound = 'sound/blank.ogg'
- mob_throw_hit_sound = 'sound/blank.ogg'
- flags_1 = CONDUCT_1
- item_flags = SURGICAL_TOOL
- force = 15
- w_class = WEIGHT_CLASS_NORMAL
- throwforce = 9
- throw_speed = 2
- throw_range = 5
- custom_materials = list(/datum/material/iron=10000, /datum/material/glass=6000)
- attack_verb = list("attacked", "slashed", "sawed", "cut")
- sharpness = IS_SHARP
- tool_behaviour = TOOL_SAW
- toolspeed = 1
-
-/obj/item/circular_saw/Initialize()
- . = ..()
- AddComponent(/datum/component/butchering, 40 * toolspeed, 100, 5, 'sound/blank.ogg') //saws are very accurate and fast at butchering
-
-/obj/item/circular_saw/augment
- desc = ""
- w_class = WEIGHT_CLASS_SMALL
- force = 10
- toolspeed = 0.5
-
-
-/obj/item/surgical_drapes
- name = "surgical drapes"
- desc = ""
- icon = 'icons/obj/surgery.dmi'
- icon_state = "surgical_drapes"
- lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
- item_state = "drapes"
- w_class = WEIGHT_CLASS_TINY
- attack_verb = list("slapped")
-
-/obj/item/organ_storage //allows medical cyborgs to manipulate organs without hands
- name = "organ storage bag"
- desc = ""
- icon = 'icons/obj/storage.dmi'
- icon_state = "evidenceobj"
- item_flags = SURGICAL_TOOL
-
-/obj/item/organ_storage/afterattack(obj/item/I, mob/user, proximity)
- . = ..()
- if(!proximity)
- return
- if(contents.len)
- to_chat(user, "[src] already has something inside it!")
- return
- if(!isorgan(I) && !isbodypart(I))
- to_chat(user, "[src] can only hold body parts!")
- return
-
- user.visible_message("[user] puts [I] into [src].", "I put [I] inside [src].")
- icon_state = "evidence"
- var/xx = I.pixel_x
- var/yy = I.pixel_y
- I.pixel_x = 0
- I.pixel_y = 0
- var/image/img = image("icon"=I, "layer"=FLOAT_LAYER)
- img.plane = FLOAT_PLANE
- I.pixel_x = xx
- I.pixel_y = yy
- add_overlay(img)
- add_overlay("evidence")
- desc = ""
- I.forceMove(src)
- w_class = I.w_class
-
-/obj/item/organ_storage/attack_self(mob/user)
- if(contents.len)
- var/obj/item/I = contents[1]
- user.visible_message("[user] dumps [I] from [src].", "I dump [I] from [src].")
- cut_overlays()
- I.forceMove(get_turf(src))
- icon_state = "evidenceobj"
- desc = ""
- else
- to_chat(user, "[src] is empty.")
- return
-
-/obj/item/surgical_processor //allows medical cyborgs to scan and initiate advanced surgeries
- name = "\improper Surgical Processor"
- desc = ""
- icon = 'icons/obj/device.dmi'
- icon_state = "spectrometer"
- item_flags = NOBLUDGEON
- var/list/advanced_surgery_steps = list()
-
-/obj/item/surgical_processor/afterattack(obj/item/O, mob/user, proximity)
- . = ..()
- if(!proximity)
- return
- if(istype(O, /obj/item/disk/surgery))
- to_chat(user, "I load the surgery protocol from [O] into [src].")
- var/obj/item/disk/surgery/D = O
- if(do_after(user, 10, target = O))
- advanced_surgery_steps |= D.surgery_steps
- return TRUE
- return
-
-/obj/item/scalpel/advanced
- name = "laser scalpel"
- desc = ""
- icon = 'icons/obj/surgery.dmi'
- icon_state = "scalpel_a"
- hitsound = 'sound/blank.ogg'
- force = 16
- toolspeed = 0.7
- light_color = LIGHT_COLOR_GREEN
- sharpness = IS_SHARP_ACCURATE
-
-/obj/item/scalpel/advanced/Initialize()
- . = ..()
- set_light(1)
-
-/obj/item/scalpel/advanced/attack_self(mob/user)
- playsound(get_turf(user), 'sound/blank.ogg', 50, TRUE)
- if(tool_behaviour == TOOL_SCALPEL)
- tool_behaviour = TOOL_SAW
- to_chat(user, "I increase the power of [src], now it can cut bones.")
- set_light(2)
- force += 1 //we don't want to ruin sharpened stuff
- icon_state = "saw_a"
- else
- tool_behaviour = TOOL_SCALPEL
- to_chat(user, "I lower the power of [src], it can no longer cut bones.")
- set_light(1)
- force -= 1
- icon_state = "scalpel_a"
-
-/obj/item/scalpel/advanced/examine()
- . = ..()
- . += " It's set to [tool_behaviour == TOOL_SCALPEL ? "scalpel" : "saw"] mode."
-
-/obj/item/retractor/advanced
- name = "mechanical pinches"
- desc = ""
- icon = 'icons/obj/surgery.dmi'
- icon_state = "retractor_a"
- toolspeed = 0.7
-
-/obj/item/retractor/advanced/attack_self(mob/user)
- playsound(get_turf(user), 'sound/blank.ogg', 50, TRUE)
- if(tool_behaviour == TOOL_RETRACTOR)
- tool_behaviour = TOOL_HEMOSTAT
- to_chat(user, "I configure the gears of [src], they are now in hemostat mode.")
- icon_state = "hemostat_a"
- else
- tool_behaviour = TOOL_RETRACTOR
- to_chat(user, "I configure the gears of [src], they are now in retractor mode.")
- icon_state = "retractor_a"
-
-/obj/item/retractor/advanced/examine()
- . = ..()
- . += " It resembles a [tool_behaviour == TOOL_RETRACTOR ? "retractor" : "hemostat"]."
-
-/obj/item/surgicaldrill/advanced
- name = "searing tool"
- desc = ""
- icon = 'icons/obj/surgery.dmi'
- icon_state = "surgicaldrill_a"
- hitsound = 'sound/blank.ogg'
- toolspeed = 0.7
- light_color = LIGHT_COLOR_RED
-
-/obj/item/surgicaldrill/advanced/Initialize()
- . = ..()
- set_light(1)
-
-/obj/item/surgicaldrill/advanced/attack_self(mob/user)
- playsound(get_turf(user), 'sound/blank.ogg', 50, TRUE)
- if(tool_behaviour == TOOL_DRILL)
- tool_behaviour = TOOL_CAUTERY
- to_chat(user, "I focus the lenses of [src], it is now in mending mode.")
- icon_state = "cautery_a"
- else
- tool_behaviour = TOOL_DRILL
- to_chat(user, "I dilate the lenses of [src], it is now in drilling mode.")
- icon_state = "surgicaldrill_a"
-
-/obj/item/surgicaldrill/advanced/examine()
- . = ..()
- . += " It's set to [tool_behaviour == TOOL_DRILL ? "drilling" : "mending"] mode."
diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm
index 1e712c57f8..0e95ce276c 100644
--- a/code/modules/unit_tests/create_and_destroy.dm
+++ b/code/modules/unit_tests/create_and_destroy.dm
@@ -28,8 +28,6 @@ GLOBAL_VAR_INIT(running_create_and_destroy, FALSE)
/obj/machinery/launchpad/briefcase,
/obj/item/storage/box/syndicate/bundle_A, // can contain a launchpad briefcase
//template types
- /obj/item/gun/magic,
- /obj/item/gun/magic/staff,
//template type again
/obj/item/storage/fancy,
//needs a mob passed to view it
diff --git a/code/modules/vehicles/bicycle.dm b/code/modules/vehicles/bicycle.dm
deleted file mode 100644
index 45dc6203ad..0000000000
--- a/code/modules/vehicles/bicycle.dm
+++ /dev/null
@@ -1,20 +0,0 @@
-/obj/vehicle/ridden/bicycle
- name = "bicycle"
- desc = ""
- icon_state = "bicycle"
- fall_off_if_missing_arms = TRUE
-
-/obj/vehicle/ridden/bicycle/Initialize()
- . = ..()
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list( 0, 4)))
- D.vehicle_move_delay = 0
-
-
-/obj/vehicle/ridden/bicycle/tesla_act() // :::^^^)))
- name = "fried bicycle"
- desc = ""
- color = rgb(63, 23, 4)
- can_buckle = FALSE
- for(var/m in buckled_mobs)
- unbuckle_mob(m,1)
diff --git a/code/modules/vehicles/cars/car.dm b/code/modules/vehicles/cars/car.dm
deleted file mode 100644
index edda57a304..0000000000
--- a/code/modules/vehicles/cars/car.dm
+++ /dev/null
@@ -1,95 +0,0 @@
-/obj/vehicle/sealed/car
- layer = ABOVE_MOB_LAYER
- anchored = TRUE
- default_driver_move = FALSE
- var/car_traits = NONE //Bitflag for special behavior such as kidnapping
- var/engine_sound = 'sound/blank.ogg'
- var/last_enginesound_time
- var/engine_sound_length = 20 //Set this to the length of the engine sound
- var/escape_time = 60 //Time it takes to break out of the car
-
-/obj/vehicle/sealed/car/Initialize()
- . = ..()
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.vehicle_move_delay = movedelay
- D.slowvalue = 0
-
-/obj/vehicle/sealed/car/generate_actions()
- . = ..()
- initialize_controller_action_type(/datum/action/vehicle/sealed/remove_key, VEHICLE_CONTROL_DRIVE)
- if(car_traits & CAN_KIDNAP)
- initialize_controller_action_type(/datum/action/vehicle/sealed/DumpKidnappedMobs, VEHICLE_CONTROL_DRIVE)
-
-/obj/vehicle/sealed/car/driver_move(mob/user, direction)
- if(key_type && !is_key(inserted_key))
- to_chat(user, "[src] has no key inserted!")
- return FALSE
- var/datum/component/riding/R = GetComponent(/datum/component/riding)
- R.handle_ride(user, direction)
- if(world.time < last_enginesound_time + engine_sound_length)
- return
- last_enginesound_time = world.time
- playsound(src, engine_sound, 100, TRUE)
- return TRUE
-
-/obj/vehicle/sealed/car/MouseDrop_T(atom/dropping, mob/M)
- if(M.stat || M.restrained())
- return FALSE
- if((car_traits & CAN_KIDNAP) && isliving(dropping) && M != dropping)
- var/mob/living/L = dropping
- L.visible_message("[M] starts forcing [L] into [src]!")
- mob_try_forced_enter(M, L)
- return ..()
-
-/obj/vehicle/sealed/car/mob_try_exit(mob/M, mob/user, silent = FALSE)
- if(M == user && (occupants[M] & VEHICLE_CONTROL_KIDNAPPED))
- to_chat(user, "I push against the back of \the [src]'s trunk to try and get out.")
- if(!do_after(user, escape_time, target = src))
- return FALSE
- to_chat(user,"[user] gets out of [src].")
- mob_exit(M, silent)
- return TRUE
- mob_exit(M, silent)
- return TRUE
-
-/obj/vehicle/sealed/car/attacked_by(obj/item/I, mob/living/user)
- if(!I.force)
- return
- if(occupants[user])
- to_chat(user, "My attack bounces off \the [src]'s padded interior.")
- return
- return ..()
-
-/obj/vehicle/sealed/car/attack_hand(mob/living/user)
- . = ..()
- if(!(car_traits & CAN_KIDNAP))
- return
- if(occupants[user])
- return
- to_chat(user, "I start opening [src]'s trunk.")
- if(do_after(user, 30))
- if(return_amount_of_controllers_with_flag(VEHICLE_CONTROL_KIDNAPPED))
- to_chat(user, "The people stuck in [src]'s trunk all come tumbling out.")
- DumpSpecificMobs(VEHICLE_CONTROL_KIDNAPPED)
- else
- to_chat(user, "It seems [src]'s trunk was empty.")
-
-/obj/vehicle/sealed/car/proc/mob_try_forced_enter(mob/forcer, mob/M, silent = FALSE)
- if(!istype(M))
- return FALSE
- if(occupant_amount() >= max_occupants)
- return FALSE
- var/atom/old_loc = loc
- if(do_mob(forcer, M, get_enter_delay(M), extra_checks=CALLBACK(src, TYPE_PROC_REF(/obj/vehicle/sealed/car, is_car_stationary), old_loc)))
- mob_forced_enter(M, silent)
- return TRUE
- return FALSE
-
-/obj/vehicle/sealed/car/proc/is_car_stationary(atom/old_loc)
- return (old_loc == loc)
-
-/obj/vehicle/sealed/car/proc/mob_forced_enter(mob/M, silent = FALSE)
- if(!silent)
- M.visible_message("[M] is forced into \the [src]!")
- M.forceMove(src)
- add_occupant(M, VEHICLE_CONTROL_KIDNAPPED)
diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm
deleted file mode 100644
index 3468bd302d..0000000000
--- a/code/modules/vehicles/cars/clowncar.dm
+++ /dev/null
@@ -1,202 +0,0 @@
-/obj/vehicle/sealed/car/clowncar
- name = "clown car"
- desc = ""
- icon_state = "clowncar"
- max_integrity = 150
- armor = list("melee" = 70, "bullet" = 40, "laser" = 40, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
- enter_delay = 20
- max_occupants = 50
- movedelay = 0.6
- car_traits = CAN_KIDNAP
- key_type = /obj/item/bikehorn
- key_type_exact = FALSE
- var/droppingoil = FALSE
- var/RTDcooldown = 150
- var/lastRTDtime = 0
- var/thankscount
- var/cannonmode = FALSE
- var/cannonbusy = FALSE
-
-/obj/vehicle/sealed/car/clowncar/generate_actions()
- . = ..()
- initialize_controller_action_type(/datum/action/vehicle/sealed/horn/clowncar, VEHICLE_CONTROL_DRIVE)
- initialize_controller_action_type(/datum/action/vehicle/sealed/Thank, VEHICLE_CONTROL_KIDNAPPED)
-
-/obj/vehicle/sealed/car/clowncar/auto_assign_occupant_flags(mob/M)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.mind && H.mind.assigned_role == "Clown") //Ensures only clowns can drive the car. (Including more at once)
- add_control_flags(H, VEHICLE_CONTROL_DRIVE|VEHICLE_CONTROL_PERMISSION)
- RegisterSignal(H, COMSIG_MOB_CLICKON, PROC_REF(FireCannon))
- M.log_message("has entered [src] as a possible driver", LOG_ATTACK)
- return
- add_control_flags(M, VEHICLE_CONTROL_KIDNAPPED)
-
-/obj/vehicle/sealed/car/clowncar/mob_forced_enter(mob/M, silent = FALSE)
- . = ..()
- playsound(src, pick('sound/blank.ogg'), 75)
-
-/obj/vehicle/sealed/car/clowncar/after_add_occupant(mob/M, control_flags)
- . = ..()
- if(return_controllers_with_flag(VEHICLE_CONTROL_KIDNAPPED).len >= 30)
- for(var/i in return_drivers())
- var/mob/voreman = i
- voreman.client.give_award(/datum/award/achievement/misc/round_and_full, voreman)
-
-/obj/vehicle/sealed/car/clowncar/attack_animal(mob/living/simple_animal/M)
- if((M.loc != src) || M.environment_smash & (ENVIRONMENT_SMASH_WALLS|ENVIRONMENT_SMASH_RWALLS))
- return ..()
-
-/obj/vehicle/sealed/car/clowncar/mob_exit(mob/M, silent = FALSE, randomstep = FALSE)
- . = ..()
- UnregisterSignal(M, COMSIG_MOB_CLICKON)
-
-/obj/vehicle/sealed/car/clowncar/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
- . = ..()
- if(prob(33))
- visible_message("[src] spews out a ton of space lube!")
- new /obj/effect/particle_effect/foam(loc) //YEET
-
-/obj/vehicle/sealed/car/clowncar/attacked_by(obj/item/I, mob/living/user)
- . = ..()
- if(istype(I, /obj/item/reagent_containers/food/snacks/grown/banana))
- var/obj/item/reagent_containers/food/snacks/grown/banana/banana = I
- obj_integrity += min(banana.seed.potency, max_integrity-obj_integrity)
- to_chat(user, "I use the [banana] to repair the [src]!")
- qdel(banana)
-
-/obj/vehicle/sealed/car/clowncar/Bump(atom/movable/M)
- . = ..()
- if(isliving(M))
- var/mob/living/L = M
- if(iscarbon(L))
- var/mob/living/carbon/C = L
- C.Paralyze(40) //I play to make sprites go horizontal
- L.visible_message("[src] rams into [L] and sucks [L.p_them()] up!") //fuck off shezza this isn't ERP.
- mob_forced_enter(L)
- playsound(src, pick('sound/blank.ogg'), 75)
- log_combat(src, M, "sucked up")
- else if(istype(M, /turf/closed))
- visible_message("[src] rams into [M] and crashes!")
- playsound(src, pick('sound/blank.ogg'), 75)
- playsound(src, 'sound/blank.ogg', 75)
- DumpMobs(TRUE)
- log_combat(src, M, "crashed into", null, "dumping all passengers")
-
-/obj/vehicle/sealed/car/clowncar/emag_act(mob/user)
- if(obj_flags & EMAGGED)
- return
- obj_flags |= EMAGGED
- to_chat(user, "I scramble \the [src]'s child safety lock, and a panel with six colorful buttons appears!")
- initialize_controller_action_type(/datum/action/vehicle/sealed/RollTheDice, VEHICLE_CONTROL_DRIVE)
- initialize_controller_action_type(/datum/action/vehicle/sealed/Cannon, VEHICLE_CONTROL_DRIVE)
- AddComponent(/datum/component/waddling)
-
-/obj/vehicle/sealed/car/clowncar/Destroy()
- playsound(src, 'sound/blank.ogg', 100)
- return ..()
-
-/obj/vehicle/sealed/car/clowncar/after_move(direction)
- . = ..()
- if(droppingoil)
- new /obj/effect/decal/cleanable/oil/slippery(loc)
-
-/obj/vehicle/sealed/car/clowncar/proc/RollTheDice(mob/user)
- if(world.time - lastRTDtime < RTDcooldown)
- to_chat(user, "The button panel is currently recharging.")
- return
- lastRTDtime = world.time
- var/randomnum = rand(1,6)
- switch(randomnum)
- if(1)
- visible_message("[user] presses one of the colorful buttons on [src], and a special banana peel drops out of it.")
- new /obj/item/grown/bananapeel/specialpeel(loc)
- if(2)
- visible_message("[user] presses one of the colorful buttons on [src], and unknown chemicals flood out of it.")
- var/datum/reagents/R = new/datum/reagents(300)
- R.my_atom = src
- R.add_reagent(get_random_reagent_id(), 100)
- var/datum/effect_system/foam_spread/foam = new
- foam.set_up(200, loc, R)
- foam.start()
- if(3)
- visible_message("[user] presses one of the colorful buttons on [src], and the clown car turns on its singularity disguise system.")
- icon = 'icons/obj/singularity.dmi'
- icon_state = "singularity_s1"
- addtimer(CALLBACK(src, PROC_REF(ResetIcon)), 100)
- if(4)
- visible_message("[user] presses one of the colorful buttons on [src], and the clown car spews out a cloud of laughing gas.")
- var/datum/reagents/R = new/datum/reagents(300)
- R.my_atom = src
- R.add_reagent(/datum/reagent/consumable/superlaughter, 50)
- var/datum/effect_system/smoke_spread/chem/smoke = new()
- smoke.set_up(R, 4)
- smoke.attach(src)
- smoke.start()
- if(5)
- visible_message("[user] presses one of the colorful buttons on [src], and the clown car starts dropping an oil trail.")
- droppingoil = TRUE
- addtimer(CALLBACK(src, PROC_REF(StopDroppingOil)), 30)
- if(6)
- visible_message("[user] presses one of the colorful buttons on [src], and the clown car lets out a comedic toot.")
- playsound(src, 'sound/blank.ogg', 100)
- for(var/mob/living/L in orange(loc, 6))
- L.emote("laughs")
- for(var/mob/living/L in occupants)
- L.emote("laughs")
-
-/obj/vehicle/sealed/car/clowncar/proc/ResetIcon()
- icon = initial(icon)
- icon_state = initial(icon_state)
-
-/obj/vehicle/sealed/car/clowncar/proc/StopDroppingOil()
- droppingoil = FALSE
-
-/obj/vehicle/sealed/car/clowncar/proc/ToggleCannon()
- cannonbusy = TRUE
- if(cannonmode)
- cannonmode = FALSE
- flick("clowncar_fromfire", src)
- icon_state = "clowncar"
- addtimer(CALLBACK(src, PROC_REF(LeaveCannonMode)), 20)
- playsound(src, 'sound/blank.ogg', 75)
- visible_message("The [src] starts going back into mobile mode.")
- else
- canmove = FALSE
- flick("clowncar_tofire", src)
- icon_state = "clowncar_fire"
- visible_message("The [src] opens up and reveals a large cannon.")
- addtimer(CALLBACK(src, PROC_REF(EnterCannonMode)), 20)
- playsound(src, 'sound/blank.ogg', 75)
-
-
-/obj/vehicle/sealed/car/clowncar/proc/EnterCannonMode()
- mouse_pointer = 'icons/mecha/mecha_mouse.dmi'
- cannonmode = TRUE
- cannonbusy = FALSE
- for(var/mob/living/L in return_controllers_with_flag(VEHICLE_CONTROL_DRIVE))
- L.update_mouse_pointer()
-
-/obj/vehicle/sealed/car/clowncar/proc/LeaveCannonMode()
- canmove = TRUE
- cannonbusy = FALSE
- mouse_pointer = null
- for(var/mob/living/L in return_controllers_with_flag(VEHICLE_CONTROL_DRIVE))
- L.update_mouse_pointer()
-
-/obj/vehicle/sealed/car/clowncar/proc/FireCannon(mob/user, atom/A, params)
- if(cannonmode && return_controllers_with_flag(VEHICLE_CONTROL_KIDNAPPED).len)
- var/mob/living/L = pick(return_controllers_with_flag(VEHICLE_CONTROL_KIDNAPPED))
- mob_exit(L, TRUE)
- flick("clowncar_recoil", src)
- playsound(src, pick('sound/blank.ogg'), 75)
- L.throw_at(A, 10, 2)
- log_combat(user, L, "fired", src, "towards [A]") //this doesn't catch if the mob hits something between the car and the target
- return COMSIG_MOB_CANCEL_CLICKON
-
-/obj/vehicle/sealed/car/clowncar/proc/ThanksCounter()
- thankscount++
- if(thankscount >= 100)
- for(var/i in return_drivers())
- var/mob/busdriver = i
- busdriver.client.give_award(/datum/award/achievement/misc/the_best_driver, busdriver)
diff --git a/code/modules/vehicles/lavaboat.dm b/code/modules/vehicles/lavaboat.dm
deleted file mode 100644
index 867ae70c5f..0000000000
--- a/code/modules/vehicles/lavaboat.dm
+++ /dev/null
@@ -1,72 +0,0 @@
-
-//Boat
-
-/obj/vehicle/ridden/lavaboat
- name = "lava boat"
- desc = ""
- icon_state = "goliath_boat"
- icon = 'icons/obj/lavaland/dragonboat.dmi'
- var/allowed_turf = /turf/open/lava
- resistance_flags = LAVA_PROOF | FIRE_PROOF
- can_buckle = TRUE
- legs_required = 0
- arms_required = 0
-
-/obj/vehicle/ridden/lavaboat/Initialize()
- . = ..()
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.keytype = /obj/item/oar
- D.allowed_turf_typecache = typecacheof(allowed_turf)
-
-/obj/item/oar
- name = "oar"
- icon = 'icons/obj/vehicles.dmi'
- icon_state = "oar"
- item_state = "oar"
- lefthand_file = 'icons/mob/inhands/misc/lavaland_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/misc/lavaland_righthand.dmi'
- desc = ""
- force = 12
- w_class = WEIGHT_CLASS_NORMAL
- resistance_flags = LAVA_PROOF | FIRE_PROOF
-
-/datum/crafting_recipe/oar
- name = "Goliath Bone Oar"
- result = /obj/item/oar
- reqs = list(/obj/item/stack/sheet/bone = 2)
- time = 15
- category = CAT_NONE
-
-/datum/crafting_recipe/boat
- name = "Goliath Hide Boat"
- result = /obj/vehicle/ridden/lavaboat
- reqs = list(/obj/item/stack/sheet/animalhide/goliath_hide = 3)
- time = 50
- category = CAT_NONE
-
-//Dragon Boat
-
-
-/obj/item/ship_in_a_bottle
- name = "ship in a bottle"
- desc = ""
- icon = 'icons/obj/lavaland/artefacts.dmi'
- icon_state = "ship_bottle"
-
-/obj/item/ship_in_a_bottle/attack_self(mob/user)
- to_chat(user, "You're not sure how they get the ships in these things, but you're pretty sure you know how to get it out.")
- playsound(user.loc, 'sound/blank.ogg', 100, TRUE)
- new /obj/vehicle/ridden/lavaboat/dragon(get_turf(src))
- qdel(src)
-
-/obj/vehicle/ridden/lavaboat/dragon
- name = "mysterious boat"
- desc = ""
- icon_state = "dragon_boat"
-
-/obj/vehicle/ridden/lavaboat/dragon/Initialize()
- . = ..()
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.vehicle_move_delay = 1
- D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(1, 2), TEXT_SOUTH = list(1, 2), TEXT_EAST = list(1, 2), TEXT_WEST = list( 1, 2)))
- D.keytype = null
diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm
deleted file mode 100644
index e437ef33d1..0000000000
--- a/code/modules/vehicles/pimpin_ride.dm
+++ /dev/null
@@ -1,76 +0,0 @@
-//PIMP-CART
-/obj/vehicle/ridden/janicart
- name = "janicart (pimpin' ride)"
- desc = ""
- icon_state = "pussywagon"
- key_type = /obj/item/key/janitor
- var/obj/item/storage/bag/trash/mybag = null
- var/floorbuffer = FALSE
-
-/obj/vehicle/ridden/janicart/Initialize(mapload)
- . = ..()
- update_icon()
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 7), TEXT_EAST = list(-12, 7), TEXT_WEST = list( 12, 7)))
-
- if(floorbuffer)
- AddElement(/datum/element/cleaning)
-
-/obj/vehicle/ridden/janicart/Destroy()
- if(mybag)
- qdel(mybag)
- mybag = null
- . = ..()
-
-/obj/item/janiupgrade
- name = "floor buffer upgrade"
- desc = ""
- icon = 'icons/obj/vehicles.dmi'
- icon_state = "upgrade"
-
-/obj/vehicle/ridden/janicart/examine(mob/user)
- . += ..()
- if(floorbuffer)
- . += "It has been upgraded with a floor buffer."
-
-/obj/vehicle/ridden/janicart/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/storage/bag/trash))
- if(mybag)
- to_chat(user, "[src] already has a trashbag hooked!")
- return
- if(!user.transferItemToLoc(I, src))
- return
- to_chat(user, "I hook the trashbag onto [src].")
- mybag = I
- update_icon()
- else if(istype(I, /obj/item/janiupgrade))
- if(floorbuffer)
- to_chat(user, "[src] already has a floor buffer!")
- return
- floorbuffer = TRUE
- qdel(I)
- to_chat(user, "I upgrade [src] with the floor buffer.")
- AddElement(/datum/element/cleaning)
- update_icon()
- else
- return ..()
-
-/obj/vehicle/ridden/janicart/update_icon()
- cut_overlays()
- if(mybag)
- add_overlay("cart_garbage")
- if(floorbuffer)
- add_overlay("cart_buffer")
-
-/obj/vehicle/ridden/janicart/attack_hand(mob/user)
- . = ..()
- if(.)
- return
- else if(mybag)
- mybag.forceMove(get_turf(user))
- user.put_in_hands(mybag)
- mybag = null
- update_icon()
-
-/obj/vehicle/ridden/janicart/upgraded
- floorbuffer = TRUE
diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm
deleted file mode 100644
index 751b3393fd..0000000000
--- a/code/modules/vehicles/scooter.dm
+++ /dev/null
@@ -1,297 +0,0 @@
-/obj/vehicle/ridden/scooter
- name = "scooter"
- desc = ""
- icon_state = "scooter"
- are_legs_exposed = TRUE
- fall_off_if_missing_arms = TRUE
-
-/obj/vehicle/ridden/scooter/Initialize()
- . = ..()
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0), TEXT_SOUTH = list(-2), TEXT_EAST = list(0), TEXT_WEST = list( 2)))
-
-
-/obj/vehicle/ridden/scooter/wrench_act(mob/living/user, obj/item/I)
- ..()
- to_chat(user, "I begin to remove the handlebars...")
- if(I.use_tool(src, user, 40, volume=50))
- var/obj/vehicle/ridden/scooter/skateboard/S = new(drop_location())
- new /obj/item/stack/rods(drop_location(), 2)
- to_chat(user, "I remove the handlebars from [src].")
- if(has_buckled_mobs())
- var/mob/living/carbon/H = buckled_mobs[1]
- unbuckle_mob(H)
- S.buckle_mob(H)
- qdel(src)
- return TRUE
-
-/obj/vehicle/ridden/scooter/Moved()
- . = ..()
- for(var/m in buckled_mobs)
- var/mob/living/buckled_mob = m
- if(buckled_mob.get_num_legs(FALSE) > 0)
- buckled_mob.pixel_y = 5
- else
- buckled_mob.pixel_y = -4
-
-/obj/vehicle/ridden/scooter/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE)
- if(!istype(M))
- return FALSE
- if(M.get_num_legs() < legs_required && M.get_num_arms() < arms_required)
- to_chat(M, "I don't think it'd be a good idea trying to ride \the [src]...")
- return FALSE
- return ..()
-
-/obj/vehicle/ridden/scooter/skateboard
- name = "improvised skateboard"
- desc = ""
- icon_state = "skateboard"
- density = FALSE
- arms_required = 0
- fall_off_if_missing_arms = FALSE
- var/datum/effect_system/spark_spread/sparks
- ///Whether the board is currently grinding
- var/grinding = FALSE
- ///Stores the time of the last crash plus a short cooldown, affects availability and outcome of certain actions
- var/next_crash
- ///Stores the default icon state
- var/board_icon = "skateboard"
- ///The handheld item counterpart for the board
- var/board_item_type = /obj/item/melee/skateboard
- ///Stamina drain multiplier
- var/instability = 10
-
-/obj/vehicle/ridden/scooter/skateboard/Initialize()
- . = ..()
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.vehicle_move_delay = 1.5
- D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
- D.set_vehicle_dir_layer(NORTH, OBJ_LAYER)
- D.set_vehicle_dir_layer(EAST, OBJ_LAYER)
- D.set_vehicle_dir_layer(WEST, OBJ_LAYER)
- sparks = new
- sparks.set_up(1, 0, src)
- sparks.attach(src)
-
-/obj/vehicle/ridden/scooter/skateboard/Destroy()
- if(sparks)
- QDEL_NULL(sparks)
- . = ..()
-
-/obj/vehicle/ridden/scooter/skateboard/relaymove()
- if (grinding || world.time < next_crash)
- return FALSE
- return ..()
-
-/obj/vehicle/ridden/scooter/skateboard/generate_actions()
- . = ..()
- initialize_controller_action_type(/datum/action/vehicle/ridden/scooter/skateboard/ollie, VEHICLE_CONTROL_DRIVE)
-
-/obj/vehicle/ridden/scooter/skateboard/post_buckle_mob(mob/living/M)//allows skateboards to be non-dense but still allows 2 skateboarders to collide with each other
- density = TRUE
- return ..()
-
-/obj/vehicle/ridden/scooter/skateboard/post_unbuckle_mob(mob/living/M)
- if(!has_buckled_mobs())
- density = FALSE
- return ..()
-
-/obj/vehicle/ridden/scooter/skateboard/Bump(atom/A)
- . = ..()
- if(A.density && has_buckled_mobs())
- var/mob/living/H = buckled_mobs[1]
- H.adjustStaminaLoss(instability*6)
- playsound(src, 'sound/blank.ogg', 40, TRUE)
- if(!iscarbon(H) || H.getStaminaLoss() >= 100 || grinding || world.time < next_crash)
- var/atom/throw_target = get_edge_target_turf(H, pick(GLOB.cardinals))
- unbuckle_mob(H)
- H.throw_at(throw_target, 3, 2)
- var/head_slot = H.get_item_by_slot(SLOT_HEAD)
- if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat)))
- H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5)
- H.updatehealth()
- visible_message("[src] crashes into [A], sending [H] flying!")
- H.Paralyze(80)
- else
- var/backdir = turn(dir, 180)
- vehicle_move(backdir)
- H.spin(4, 1)
- next_crash = world.time + 10
-
-///Moves the vehicle forward and if it lands on a table, repeats
-/obj/vehicle/ridden/scooter/skateboard/proc/grind()
- vehicle_move(dir)
- if(has_buckled_mobs() && locate(/obj/structure/table) in loc.contents)
- var/mob/living/L = buckled_mobs[1]
- L.adjustStaminaLoss(instability*0.5)
- if (L.getStaminaLoss() >= 100)
- playsound(src, 'sound/blank.ogg', 20, TRUE)
- unbuckle_mob(L)
- var/atom/throw_target = get_edge_target_turf(src, pick(GLOB.cardinals))
- L.throw_at(throw_target, 2, 2)
- visible_message("[L] loses [L.p_their()] footing and slams on the ground!")
- L.Paralyze(40)
- grinding = FALSE
- icon_state = board_icon
- return
- else
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- if(prob (25))
- var/turf/location = get_turf(loc)
- if(location)
- location.hotspot_expose(1000,1000)
- sparks.start() //the most radical way to start plasma fires
- addtimer(CALLBACK(src, PROC_REF(grind)), 2)
- return
- else
- grinding = FALSE
- icon_state = board_icon
-
-/obj/vehicle/ridden/scooter/skateboard/MouseDrop(atom/over_object)
- . = ..()
- var/mob/living/carbon/M = usr
- if(!istype(M) || M.incapacitated() || !Adjacent(M))
- return
- if(has_buckled_mobs() && over_object == M)
- to_chat(M, "I can't lift this up when somebody's on it.")
- return
- if(over_object == M)
- var/board = new board_item_type(get_turf(M))
- M.put_in_hands(board)
- qdel(src)
-
-/obj/vehicle/ridden/scooter/skateboard/pro
- name = "skateboard"
- desc = ""
- icon_state = "skateboard2"
- board_icon = "skateboard2"
- board_item_type = /obj/item/melee/skateboard/pro
- instability = 6
-
-/obj/vehicle/ridden/scooter/skateboard/hoverboard/
- name = "hoverboard"
- desc = ""
- board_item_type = /obj/item/melee/skateboard/hoverboard
- instability = 3
- icon_state = "hoverboard_red"
- board_icon = "hoverboard_red"
-
-/obj/vehicle/ridden/scooter/skateboard/hoverboard/screwdriver_act(mob/living/user, obj/item/I)
- return FALSE
-
-/obj/vehicle/ridden/scooter/skateboard/hoverboard/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/stack/rods))
- return
- else
- return ..()
-
-/obj/vehicle/ridden/scooter/skateboard/hoverboard/admin
- name = "\improper Board Of Directors"
- desc = ""
- board_item_type = /obj/item/melee/skateboard/hoverboard/admin
- instability = 0
- icon_state = "hoverboard_nt"
- board_icon = "hoverboard_nt"
-
-//CONSTRUCTION
-/obj/item/scooter_frame
- name = "scooter frame"
- desc = ""
- icon = 'icons/obj/vehicles.dmi'
- icon_state = "scooter_frame"
- w_class = WEIGHT_CLASS_NORMAL
-
-/obj/item/scooter_frame/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/stack/sheet/metal))
- if(!I.tool_start_check(user, amount=5))
- return
- to_chat(user, "I begin to add wheels to [src].")
- if(I.use_tool(src, user, 80, volume=50, amount=5))
- to_chat(user, "I finish making wheels for [src].")
- new /obj/vehicle/ridden/scooter/skateboard(user.loc)
- qdel(src)
- else
- return ..()
-
-/obj/item/scooter_frame/wrench_act(mob/living/user, obj/item/I)
- ..()
- to_chat(user, "I deconstruct [src].")
- new /obj/item/stack/rods(drop_location(), 10)
- I.play_tool_sound(src)
- qdel(src)
- return TRUE
-
-/obj/vehicle/ridden/scooter/skateboard/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/stack/rods))
- if(!I.tool_start_check(user, amount=2))
- return
- to_chat(user, "I begin making handlebars for [src].")
- if(I.use_tool(src, user, 25, volume=50, amount=2))
- to_chat(user, "I add the rods to [src], creating handlebars.")
- var/obj/vehicle/ridden/scooter/S = new(loc)
- if(has_buckled_mobs())
- var/mob/living/carbon/H = buckled_mobs[1]
- unbuckle_mob(H)
- S.buckle_mob(H)
- qdel(src)
- else
- return ..()
-
-/obj/vehicle/ridden/scooter/skateboard/screwdriver_act(mob/living/user, obj/item/I)
- if(..())
- return TRUE
- to_chat(user, "I begin to deconstruct and remove the wheels on [src]...")
- if(I.use_tool(src, user, 20, volume=50))
- to_chat(user, "I deconstruct the wheels on [src].")
- new /obj/item/stack/sheet/metal(drop_location(), 5)
- new /obj/item/scooter_frame(drop_location())
- if(has_buckled_mobs())
- var/mob/living/carbon/H = buckled_mobs[1]
- unbuckle_mob(H)
- qdel(src)
- return TRUE
-
-/obj/vehicle/ridden/scooter/skateboard/wrench_act(mob/living/user, obj/item/I)
- return
-
-//Wheelys
-/obj/vehicle/ridden/scooter/wheelys
- name = "Wheely-Heels"
- desc = ""
- icon = null
- density = FALSE
-
-/obj/vehicle/ridden/scooter/wheelys/Initialize()
- . = ..()
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.vehicle_move_delay = 0
- D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
- D.set_vehicle_dir_layer(NORTH, OBJ_LAYER)
- D.set_vehicle_dir_layer(EAST, OBJ_LAYER)
- D.set_vehicle_dir_layer(WEST, OBJ_LAYER)
-
-/obj/vehicle/ridden/scooter/wheelys/post_unbuckle_mob(mob/living/M)
- if(!has_buckled_mobs())
- to_chat(M, "I pop the Wheely-Heels' wheels back into place.")
- moveToNullspace()
- return ..()
-
-/obj/vehicle/ridden/scooter/wheelys/post_buckle_mob(mob/living/M)
- to_chat(M, "I pop out the Wheely-Heels' wheels.")
- return ..()
-
-/obj/vehicle/ridden/scooter/wheelys/Bump(atom/A)
- . = ..()
- if(A.density && has_buckled_mobs())
- var/mob/living/H = buckled_mobs[1]
- var/atom/throw_target = get_edge_target_turf(H, pick(GLOB.cardinals))
- unbuckle_mob(H)
- H.throw_at(throw_target, 4, 3)
- H.Paralyze(30)
- H.adjustStaminaLoss(10)
- var/head_slot = H.get_item_by_slot(SLOT_HEAD)
- if(!head_slot || !(istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat)))
- H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1)
- H.updatehealth()
- visible_message("[src] crashes into [A], sending [H] flying!")
- playsound(src, 'sound/blank.ogg', 50, TRUE)
diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm
deleted file mode 100644
index d6feca7cc1..0000000000
--- a/code/modules/vehicles/secway.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-
-/obj/vehicle/ridden/secway
- name = "secway"
- desc = ""
- icon_state = "secway"
- max_integrity = 60
- armor = list("melee" = 10, "bullet" = 0, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60)
- key_type = /obj/item/key/security
- integrity_failure = 0.5
-
-/obj/vehicle/ridden/secway/Initialize()
- . = ..()
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.vehicle_move_delay = 1.75
- D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(0, 4), TEXT_WEST = list( 0, 4)))
-
-/obj/vehicle/ridden/secway/obj_break()
- START_PROCESSING(SSobj, src)
- return ..()
-
-/obj/vehicle/ridden/secway/process()
- if(obj_integrity >= integrity_failure * max_integrity)
- return PROCESS_KILL
- if(prob(20))
- return
- var/datum/effect_system/smoke_spread/smoke = new
- smoke.set_up(0, src)
- smoke.start()
-
-/obj/vehicle/ridden/secway/attackby(obj/item/W, mob/user, params)
- if(W.tool_behaviour == TOOL_WELDER && user.used_intent.type != INTENT_HARM)
- if(obj_integrity < max_integrity)
- if(W.use_tool(src, user, 0, volume = 50, amount = 1))
- user.visible_message("[user] repairs some damage to [name].", "I repair some damage to \the [src].")
- obj_integrity += min(10, max_integrity-obj_integrity)
- if(obj_integrity == max_integrity)
- to_chat(user, "It looks to be fully repaired now.")
- return TRUE
- return ..()
-
-/obj/vehicle/ridden/secway/obj_destruction()
- explosion(src, -1, 0, 2, 4, flame_range = 3)
- return ..()
-
-/obj/vehicle/ridden/secway/Destroy()
- STOP_PROCESSING(SSobj,src)
- return ..()
-
-/obj/vehicle/ridden/secway/bullet_act(obj/projectile/P)
- if(prob(60) && buckled_mobs)
- for(var/mob/M in buckled_mobs)
- M.bullet_act(P)
- return TRUE
- return ..()
diff --git a/code/modules/vehicles/speedbike.dm b/code/modules/vehicles/speedbike.dm
deleted file mode 100644
index c4d7a4d020..0000000000
--- a/code/modules/vehicles/speedbike.dm
+++ /dev/null
@@ -1,93 +0,0 @@
-
-/obj/vehicle/ridden/space
- name = "Generic Space Vehicle!"
-
-/obj/vehicle/ridden/space/Initialize()
- . = ..()
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.override_allow_spacemove = TRUE
-
-/obj/vehicle/ridden/space/speedbike
- name = "Speedbike"
- icon = 'icons/obj/bike.dmi'
- icon_state = "speedbike_blue"
- layer = LYING_MOB_LAYER
- var/overlay_state = "cover_blue"
- var/mutable_appearance/overlay
-
-/obj/vehicle/ridden/space/speedbike/Initialize()
- . = ..()
- overlay = mutable_appearance(icon, overlay_state, ABOVE_MOB_LAYER)
- add_overlay(overlay)
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, -8), TEXT_SOUTH = list(0, 4), TEXT_EAST = list(-10, 5), TEXT_WEST = list( 10, 5)))
- D.vehicle_move_delay = 0
- D.set_vehicle_dir_offsets(NORTH, -16, -16)
- D.set_vehicle_dir_offsets(SOUTH, -16, -16)
- D.set_vehicle_dir_offsets(EAST, -18, 0)
- D.set_vehicle_dir_offsets(WEST, -18, 0)
-
-/obj/vehicle/ridden/space/speedbike/Move(newloc,move_dir)
- if(has_buckled_mobs())
- new /obj/effect/temp_visual/dir_setting/speedbike_trail(loc,move_dir)
- . = ..()
-
-/obj/vehicle/ridden/space/speedbike/red
- icon_state = "speedbike_red"
- overlay_state = "cover_red"
-
-//BM SPEEDWAGON
-
-/obj/vehicle/ridden/space/speedwagon
- name = "BM Speedwagon"
- desc = ""
- icon = 'icons/obj/car.dmi'
- icon_state = "speedwagon"
- layer = LYING_MOB_LAYER
- var/static/mutable_appearance/overlay
- max_buckled_mobs = 4
- var/crash_all = FALSE //CHAOS
- pixel_y = -48
- pixel_x = -48
-
-/obj/vehicle/ridden/space/speedwagon/Initialize()
- . = ..()
- overlay = mutable_appearance(icon, "speedwagon_cover", ABOVE_MOB_LAYER)
- add_overlay(overlay)
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.vehicle_move_delay = 0
- D.set_riding_offsets(1, list(TEXT_NORTH = list(-10, -4), TEXT_SOUTH = list(16, 3), TEXT_EAST = list(-4, 30), TEXT_WEST = list(4, -3)))
- D.set_riding_offsets(2, list(TEXT_NORTH = list(19, -5, 4), TEXT_SOUTH = list(-13, 3, 4), TEXT_EAST = list(-4, -3, 4.1), TEXT_WEST = list(4, 28, 3.9)))
- D.set_riding_offsets(3, list(TEXT_NORTH = list(-10, -18, 4.2), TEXT_SOUTH = list(16, 25, 3.9), TEXT_EAST = list(-22, 30), TEXT_WEST = list(22, -3, 4.1)))
- D.set_riding_offsets(4, list(TEXT_NORTH = list(19, -18, 4.2), TEXT_SOUTH = list(-13, 25, 3.9), TEXT_EAST = list(-22, 3, 3.9), TEXT_WEST = list(22, 28)))
- D.set_vehicle_dir_offsets(NORTH, -48, -48)
- D.set_vehicle_dir_offsets(SOUTH, -48, -48)
- D.set_vehicle_dir_offsets(EAST, -48, -48)
- D.set_vehicle_dir_offsets(WEST, -48, -48)
- for(var/i in GLOB.cardinals)
- D.set_vehicle_dir_layer(i, BELOW_MOB_LAYER)
-
-/obj/vehicle/ridden/space/speedwagon/Bump(atom/movable/A)
- . = ..()
- if(A.density && has_buckled_mobs())
- var/atom/throw_target = get_edge_target_turf(A, dir)
- if(crash_all)
- A.throw_at(throw_target, 4, 3)
- visible_message("[src] crashes into [A]!")
- playsound(src, 'sound/blank.ogg', 50, TRUE)
- if(ishuman(A))
- var/mob/living/carbon/human/H = A
- H.Paralyze(100)
- H.adjustStaminaLoss(30)
- H.apply_damage(rand(20,35), BRUTE)
- if(!crash_all)
- H.throw_at(throw_target, 4, 3)
- visible_message("[src] crashes into [H]!")
- playsound(src, 'sound/blank.ogg', 50, TRUE)
-
-/obj/vehicle/ridden/space/speedwagon/Moved()
- . = ..()
- if(has_buckled_mobs())
- for(var/atom/A in range(2, src))
- if(!(A in buckled_mobs))
- Bump(A)
diff --git a/code/modules/vehicles/vehicle_actions.dm b/code/modules/vehicles/vehicle_actions.dm
index f2de97759c..b5bd8e2b82 100644
--- a/code/modules/vehicles/vehicle_actions.dm
+++ b/code/modules/vehicles/vehicle_actions.dm
@@ -153,78 +153,3 @@
/datum/action/vehicle/sealed/DumpKidnappedMobs/Trigger()
vehicle_entered_target.visible_message("[vehicle_entered_target] starts dumping the people inside of it.")
vehicle_entered_target.DumpSpecificMobs(VEHICLE_CONTROL_KIDNAPPED)
-
-
-/datum/action/vehicle/sealed/RollTheDice
- name = "Press Colorful Button"
- desc = ""
- button_icon_state = "car_rtd"
-
-/datum/action/vehicle/sealed/RollTheDice/Trigger()
- if(istype(vehicle_entered_target, /obj/vehicle/sealed/car/clowncar))
- var/obj/vehicle/sealed/car/clowncar/C = vehicle_entered_target
- C.RollTheDice(owner)
-
-/datum/action/vehicle/sealed/Cannon
- name = "Toggle Siege Mode"
- desc = ""
- button_icon_state = "car_cannon"
-
-/datum/action/vehicle/sealed/Cannon/Trigger()
- if(istype(vehicle_entered_target, /obj/vehicle/sealed/car/clowncar))
- var/obj/vehicle/sealed/car/clowncar/C = vehicle_entered_target
- if(C.cannonbusy)
- to_chat(owner, "Please wait for the vehicle to finish its current action first.")
- C.ToggleCannon()
-
-/datum/action/vehicle/sealed/Thank
- name = "Thank the Clown Car Driver"
- desc = ""
- button_icon_state = "car_thanktheclown"
- var/last_thank_time
-
-/datum/action/vehicle/sealed/Thank/Trigger()
- if(istype(vehicle_entered_target, /obj/vehicle/sealed/car/clowncar))
- var/obj/vehicle/sealed/car/clowncar/C = vehicle_entered_target
- if(world.time >= last_thank_time + 60)
- var/mob/living/carbon/human/clown = pick(C.return_drivers())
- owner.say("Thank you for the fun ride, [clown.name]!")
- last_thank_time = world.time
- C.ThanksCounter()
-
-/datum/action/vehicle/ridden/scooter/skateboard/ollie
- name = "Ollie"
- desc = ""
- button_icon_state = "skateboard_ollie"
- ///Cooldown to next jump
- var/next_ollie
-
-/datum/action/vehicle/ridden/scooter/skateboard/ollie/Trigger()
- if(world.time > next_ollie)
- var/obj/vehicle/ridden/scooter/skateboard/V = vehicle_target
- if (V.grinding)
- return
- var/mob/living/L = owner
- var/turf/landing_turf = get_step(V.loc, V.dir)
- L.adjustStaminaLoss(V.instability*2)
- if (L.getStaminaLoss() >= 100)
- playsound(src, 'sound/blank.ogg', 20, TRUE)
- V.unbuckle_mob(L)
- L.throw_at(landing_turf, 2, 2)
- L.Paralyze(40)
- V.visible_message("[L] misses the landing and falls on [L.p_their()] face!")
- else
- L.spin(4, 1)
- animate(L, pixel_y = -6, time = 4)
- animate(V, pixel_y = -6, time = 3)
- playsound(V, 'sound/blank.ogg', 50, TRUE)
- passtable_on(L, VEHICLE_TRAIT)
- V.pass_flags |= PASSTABLE
- L.Move(landing_turf, vehicle_target.dir)
- passtable_off(L, VEHICLE_TRAIT)
- V.pass_flags &= ~PASSTABLE
- if(locate(/obj/structure/table) in V.loc.contents)
- V.grinding = TRUE
- V.icon_state = "[V.board_icon]-grind"
- addtimer(CALLBACK(V, TYPE_PROC_REF(/obj/vehicle/ridden/scooter/skateboard, grind)), 2)
- next_ollie = world.time + 5
diff --git a/code/modules/vehicles/wheelchair.dm b/code/modules/vehicles/wheelchair.dm
deleted file mode 100644
index 47efe81e2e..0000000000
--- a/code/modules/vehicles/wheelchair.dm
+++ /dev/null
@@ -1,115 +0,0 @@
-/obj/vehicle/ridden/wheelchair //ported from Hippiestation (by Jujumatic)
- name = "wheelchair"
- desc = ""
- icon = 'icons/obj/vehicles.dmi'
- icon_state = "wheelchair"
- layer = OBJ_LAYER
- max_integrity = 100
- armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 30) //Wheelchairs aren't super tough yo
- legs_required = 0 //You'll probably be using this if you don't have legs
- canmove = TRUE
- density = FALSE //Thought I couldn't fix this one easily, phew
- // Run speed delay is multiplied with this for vehicle move delay.
- var/delay_multiplier = 6.7
-
-/obj/vehicle/ridden/wheelchair/Initialize()
- . = ..()
- var/datum/component/riding/D = LoadComponent(/datum/component/riding)
- D.vehicle_move_delay = 0
- D.set_vehicle_dir_layer(SOUTH, OBJ_LAYER)
- D.set_vehicle_dir_layer(NORTH, ABOVE_MOB_LAYER)
- D.set_vehicle_dir_layer(EAST, OBJ_LAYER)
- D.set_vehicle_dir_layer(WEST, OBJ_LAYER)
-
-/obj/vehicle/ridden/wheelchair/ComponentInitialize() //Since it's technically a chair I want it to have chair properties
- . = ..()
- AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE, CALLBACK(src, PROC_REF(can_user_rotate)),CALLBACK(src, PROC_REF(can_be_rotated)),null)
-
-/obj/vehicle/ridden/wheelchair/obj_destruction(damage_flag)
- new /obj/item/stack/rods(drop_location(), 1)
- new /obj/item/stack/sheet/metal(drop_location(), 1)
- return ..()
-
-/obj/vehicle/ridden/wheelchair/Destroy()
- if(has_buckled_mobs())
- var/mob/living/carbon/H = buckled_mobs[1]
- unbuckle_mob(H)
- return ..()
-
-/obj/vehicle/ridden/wheelchair/driver_move(mob/living/user, direction)
- if(istype(user))
- if(canmove && (user.get_num_arms() < arms_required))
- to_chat(user, "I don't have enough arms to operate the wheels!")
- canmove = FALSE
- addtimer(VARSET_CALLBACK(src, canmove, TRUE), 20)
- return FALSE
- set_move_delay(user)
- return ..()
-
-/obj/vehicle/ridden/wheelchair/proc/set_move_delay(mob/living/user)
- var/datum/component/riding/D = GetComponent(/datum/component/riding)
- //1.5 (movespeed as of this change) multiplied by 6.7 gets ABOUT 10 (rounded), the old constant for the wheelchair that gets divided by how many arms they have
- //if that made no sense this simply makes the wheelchair speed change along with movement speed delay
- D.vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * delay_multiplier) / min(user.get_num_arms(), 2)
-
-/obj/vehicle/ridden/wheelchair/Moved()
- . = ..()
- cut_overlays()
- playsound(src, 'sound/blank.ogg', 75, TRUE)
- if(has_buckled_mobs())
- handle_rotation_overlayed()
-
-
-/obj/vehicle/ridden/wheelchair/post_buckle_mob(mob/living/user)
- . = ..()
- handle_rotation_overlayed()
-
-/obj/vehicle/ridden/wheelchair/post_unbuckle_mob()
- . = ..()
- cut_overlays()
-
-/obj/vehicle/ridden/wheelchair/setDir(newdir)
- ..()
- handle_rotation(newdir)
-
-/obj/vehicle/ridden/wheelchair/wrench_act(mob/living/user, obj/item/I) //Attackby should stop it attacking the wheelchair after moving away during decon
- ..()
- to_chat(user, "I begin to detach the wheels...")
- if(I.use_tool(src, user, 40, volume=50))
- to_chat(user, "I detach the wheels and deconstruct the chair.")
- new /obj/item/stack/rods(drop_location(), 6)
- new /obj/item/stack/sheet/metal(drop_location(), 4)
- qdel(src)
- return TRUE
-
-/obj/vehicle/ridden/wheelchair/proc/handle_rotation(direction)
- if(has_buckled_mobs())
- handle_rotation_overlayed()
- for(var/m in buckled_mobs)
- var/mob/living/buckled_mob = m
- buckled_mob.setDir(direction)
-
-/obj/vehicle/ridden/wheelchair/proc/handle_rotation_overlayed()
- cut_overlays()
- var/image/V = image(icon = icon, icon_state = "wheelchair_overlay", layer = FLY_LAYER, dir = src.dir)
- add_overlay(V)
-
-
-
-/obj/vehicle/ridden/wheelchair/proc/can_be_rotated(mob/living/user)
- return TRUE
-
-/obj/vehicle/ridden/wheelchair/proc/can_user_rotate(mob/living/user)
- var/mob/living/L = user
- if(istype(L))
- if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
- return FALSE
- if(isobserver(user) && CONFIG_GET(flag/ghost_interaction))
- return TRUE
- return FALSE
-
-/obj/vehicle/ridden/wheelchair/the_whip/driver_move(mob/living/user, direction)
- if(istype(user))
- var/datum/component/riding/D = GetComponent(/datum/component/riding)
- D.vehicle_move_delay = round(CONFIG_GET(number/movedelay/run_delay) * 6.7) / user.get_num_arms()
- return ..()
diff --git a/modular/Neu_Farming/code/fermenting_barrel.dm b/modular/Neu_Farming/code/fermenting_barrel.dm
index b1758ce243..75a41d38fa 100644
--- a/modular/Neu_Farming/code/fermenting_barrel.dm
+++ b/modular/Neu_Farming/code/fermenting_barrel.dm
@@ -87,7 +87,7 @@
/datum/crafting_recipe/fermenting_barrel
name = "Wooden Barrel"
result = /obj/structure/fermenting_barrel
- reqs = list(/obj/item/stack/sheet/mineral/wood = 30)
+ reqs = list(/obj/item/grown/log = 5)
time = 50
category = CAT_NONE
diff --git a/stonekeep.dme b/stonekeep.dme
index db03bbfda6..a23e397264 100644
--- a/stonekeep.dme
+++ b/stonekeep.dme
@@ -191,7 +191,6 @@
#include "code\_globalvars\lists\client.dm"
#include "code\_globalvars\lists\flavor_misc.dm"
#include "code\_globalvars\lists\keybindings.dm"
-#include "code\_globalvars\lists\maintenance_loot.dm"
#include "code\_globalvars\lists\mapping.dm"
#include "code\_globalvars\lists\mobs.dm"
#include "code\_globalvars\lists\names.dm"
@@ -407,8 +406,6 @@
#include "code\datums\character_flaw\limbloss.dm"
#include "code\datums\components\_component.dm"
#include "code\datums\components\anti_magic.dm"
-#include "code\datums\components\archaeology.dm"
-#include "code\datums\components\armor_plate.dm"
#include "code\datums\components\art.dm"
#include "code\datums\components\bane.dm"
#include "code\datums\components\beauty.dm"
@@ -440,7 +437,6 @@
#include "code\datums\components\mood.dm"
#include "code\datums\components\movable_lighting.dm"
#include "code\datums\components\orbiter.dm"
-#include "code\datums\components\paintable.dm"
#include "code\datums\components\pollutant.dm"
#include "code\datums\components\punchcooldown.dm"
#include "code\datums\components\rad_insulation.dm"
@@ -455,33 +451,21 @@
#include "code\datums\components\soulstoned.dm"
#include "code\datums\components\spawner.dm"
#include "code\datums\components\spill.dm"
-#include "code\datums\components\spooky.dm"
#include "code\datums\components\squeak.dm"
#include "code\datums\components\summoning.dm"
#include "code\datums\components\swarming.dm"
#include "code\datums\components\tactical.dm"
#include "code\datums\components\temporary_pollutor.dm"
#include "code\datums\components\tether.dm"
-#include "code\datums\components\thermite.dm"
#include "code\datums\components\waddling.dm"
#include "code\datums\components\wearertargeting.dm"
#include "code\datums\components\wet_floor.dm"
#include "code\datums\components\crafting\crafting.dm"
#include "code\datums\components\crafting\guncrafting.dm"
#include "code\datums\components\crafting\recipes.dm"
-#include "code\datums\components\crafting\tailoring.dm"
#include "code\datums\components\decals\blood.dm"
-#include "code\datums\components\fantasy\_fantasy.dm"
-#include "code\datums\components\fantasy\affix.dm"
-#include "code\datums\components\fantasy\prefixes.dm"
-#include "code\datums\components\fantasy\suffixes.dm"
#include "code\datums\components\storage\storage.dm"
#include "code\datums\components\storage\concrete\_concrete.dm"
-#include "code\datums\components\storage\concrete\bag_of_holding.dm"
-#include "code\datums\components\storage\concrete\bluespace.dm"
-#include "code\datums\components\storage\concrete\implant.dm"
-#include "code\datums\components\storage\concrete\pockets.dm"
-#include "code\datums\components\storage\concrete\rped.dm"
#include "code\datums\components\storage\concrete\stack.dm"
#include "code\datums\elements\_element.dm"
#include "code\datums\elements\cleaning.dm"
@@ -515,19 +499,9 @@
#include "code\datums\keybinding\movement.dm"
#include "code\datums\looping_sounds\_looping_sound.dm"
#include "code\datums\looping_sounds\item_sounds.dm"
-#include "code\datums\looping_sounds\machinery_sounds.dm"
#include "code\datums\looping_sounds\weather.dm"
#include "code\datums\martial\_martial.dm"
-#include "code\datums\martial\boxing.dm"
-#include "code\datums\martial\cqc.dm"
-#include "code\datums\martial\krav_maga.dm"
-#include "code\datums\martial\mushpunch.dm"
-#include "code\datums\martial\plasma_fist.dm"
-#include "code\datums\martial\psychotic_brawl.dm"
-#include "code\datums\martial\sleeping_carp.dm"
-#include "code\datums\martial\wrestling.dm"
#include "code\datums\materials\_material.dm"
-#include "code\datums\materials\basemats.dm"
#include "code\datums\migrants\migrant_assignment.dm"
#include "code\datums\migrants\migrant_job.dm"
#include "code\datums\migrants\migrant_pref.dm"
@@ -555,7 +529,6 @@
#include "code\datums\mutations\actions.dm"
#include "code\datums\mutations\body.dm"
#include "code\datums\mutations\chameleon.dm"
-#include "code\datums\mutations\cold.dm"
#include "code\datums\mutations\hulk.dm"
#include "code\datums\mutations\radioactive.dm"
#include "code\datums\mutations\sight.dm"
@@ -612,7 +585,6 @@
#include "code\game\communications.dm"
#include "code\game\data_huds.dm"
#include "code\game\say.dm"
-#include "code\game\shuttle_engines.dm"
#include "code\game\sound.dm"
#include "code\game\world.dm"
#include "code\game\area\areas.dm"
@@ -641,6 +613,7 @@
#include "code\game\objects\buckling.dm"
#include "code\game\objects\empulse.dm"
#include "code\game\objects\examine.dm"
+#include "code\game\objects\fluff.dm"
#include "code\game\objects\inhands_rogue.dm"
#include "code\game\objects\items.dm"
#include "code\game\objects\obj_defense.dm"
@@ -655,6 +628,7 @@
#include "code\game\objects\effects\forcefields.dm"
#include "code\game\objects\effects\glowshroom.dm"
#include "code\game\objects\effects\landmarks.dm"
+#include "code\game\objects\effects\light_effect.dm"
#include "code\game\objects\effects\mines.dm"
#include "code\game\objects\effects\misc.dm"
#include "code\game\objects\effects\overlays.dm"
@@ -687,13 +661,11 @@
#include "code\game\objects\effects\effect_system\effects_sparks.dm"
#include "code\game\objects\effects\effect_system\effects_water.dm"
#include "code\game\objects\effects\particles\weather.dm"
-#include "code\game\objects\effects\spawners\bundle.dm"
#include "code\game\objects\effects\spawners\gibspawner.dm"
#include "code\game\objects\effects\spawners\lootdrop.dm"
#include "code\game\objects\effects\spawners\roguemapgen.dm"
#include "code\game\objects\effects\spawners\structure.dm"
#include "code\game\objects\effects\spawners\traps.dm"
-#include "code\game\objects\effects\spawners\vaultspawner.dm"
#include "code\game\objects\effects\temporary_visuals\cult.dm"
#include "code\game\objects\effects\temporary_visuals\miscellaneous.dm"
#include "code\game\objects\effects\temporary_visuals\temporary_visual.dm"
@@ -701,95 +673,40 @@
#include "code\game\objects\effects\temporary_visuals\projectiles\muzzle.dm"
#include "code\game\objects\effects\temporary_visuals\projectiles\projectile_effects.dm"
#include "code\game\objects\effects\temporary_visuals\projectiles\tracer.dm"
+#include "code\game\objects\items\beartraps.dm"
+#include "code\game\objects\items\bedsheets.dm"
#include "code\game\objects\items\blueprints.dm"
-#include "code\game\objects\items\bodybag.dm"
+#include "code\game\objects\items\boxes.dm"
#include "code\game\objects\items\candle.dm"
-#include "code\game\objects\items\cardboard_cutouts.dm"
-#include "code\game\objects\items\charter.dm"
#include "code\game\objects\items\chromosome.dm"
#include "code\game\objects\items\cigs_lighters.dm"
-#include "code\game\objects\items\clown_items.dm"
#include "code\game\objects\items\cosmetics.dm"
#include "code\game\objects\items\courtroom.dm"
-#include "code\game\objects\items\crayons.dm"
#include "code\game\objects\items\debug_items.dm"
-#include "code\game\objects\items\dehy_carp.dm"
#include "code\game\objects\items\dice.dm"
#include "code\game\objects\items\dna_injector.dm"
-#include "code\game\objects\items\documents.dm"
#include "code\game\objects\items\eightball.dm"
#include "code\game\objects\items\etherealdiscoball.dm"
-#include "code\game\objects\items\extinguisher.dm"
#include "code\game\objects\items\flight_potion.dm"
-#include "code\game\objects\items\gift.dm"
+#include "code\game\objects\items\glass_shard.dm"
#include "code\game\objects\items\granters.dm"
-#include "code\game\objects\items\handcuffs.dm"
-#include "code\game\objects\items\his_grace.dm"
-#include "code\game\objects\items\holy_weapons.dm"
#include "code\game\objects\items\honeycomb.dm"
#include "code\game\objects\items\hot_potato.dm"
#include "code\game\objects\items\hourglass.dm"
#include "code\game\objects\items\kitchen.dm"
-#include "code\game\objects\items\latexballoon.dm"
#include "code\game\objects\items\manuals.dm"
-#include "code\game\objects\items\miscellaneous.dm"
-#include "code\game\objects\items\mop.dm"
#include "code\game\objects\items\paint.dm"
-#include "code\game\objects\items\paiwire.dm"
-#include "code\game\objects\items\pet_carrier.dm"
-#include "code\game\objects\items\plushes.dm"
-#include "code\game\objects\items\pneumaticCannon.dm"
-#include "code\game\objects\items\powerfist.dm"
-#include "code\game\objects\items\religion.dm"
#include "code\game\objects\items\scrolls.dm"
#include "code\game\objects\items\sharpener.dm"
#include "code\game\objects\items\shooting_range.dm"
-#include "code\game\objects\items\signs.dm"
-#include "code\game\objects\items\singularityhammer.dm"
+#include "code\game\objects\items\soap.dm"
#include "code\game\objects\items\taster.dm"
-#include "code\game\objects\items\theft_tools.dm"
#include "code\game\objects\items\toys.dm"
#include "code\game\objects\items\trash.dm"
-#include "code\game\objects\items\twohanded.dm"
#include "code\game\objects\items\vending_items.dm"
#include "code\game\objects\items\weaponry.dm"
-#include "code\game\objects\items\devices\beacon.dm"
-#include "code\game\objects\items\devices\chameleonproj.dm"
-#include "code\game\objects\items\devices\desynchronizer.dm"
#include "code\game\objects\items\devices\flashlight.dm"
-#include "code\game\objects\items\devices\forcefieldprojector.dm"
-#include "code\game\objects\items\devices\geiger_counter.dm"
-#include "code\game\objects\items\devices\gps.dm"
-#include "code\game\objects\items\devices\instruments.dm"
-#include "code\game\objects\items\devices\lightreplacer.dm"
-#include "code\game\objects\items\devices\megaphone.dm"
#include "code\game\objects\items\devices\reverse_bear_trap.dm"
-#include "code\game\objects\items\devices\swapper.dm"
-#include "code\game\objects\items\devices\taperecorder.dm"
-#include "code\game\objects\items\grenades\antigravity.dm"
-#include "code\game\objects\items\grenades\clusterbuster.dm"
-#include "code\game\objects\items\grenades\emgrenade.dm"
-#include "code\game\objects\items\grenades\flashbang.dm"
-#include "code\game\objects\items\grenades\ghettobomb.dm"
-#include "code\game\objects\items\grenades\grenade.dm"
-#include "code\game\objects\items\grenades\smokebomb.dm"
-#include "code\game\objects\items\grenades\spawnergrenade.dm"
-#include "code\game\objects\items\grenades\syndieminibomb.dm"
-#include "code\game\objects\items\implants\implant.dm"
-#include "code\game\objects\items\implants\implant_chem.dm"
-#include "code\game\objects\items\implants\implant_clown.dm"
-#include "code\game\objects\items\implants\implant_exile.dm"
-#include "code\game\objects\items\implants\implant_explosive.dm"
-#include "code\game\objects\items\implants\implant_freedom.dm"
-#include "code\game\objects\items\implants\implant_krav_maga.dm"
-#include "code\game\objects\items\implants\implant_misc.dm"
-#include "code\game\objects\items\implants\implant_spell.dm"
-#include "code\game\objects\items\implants\implant_stealth.dm"
-#include "code\game\objects\items\implants\implant_storage.dm"
-#include "code\game\objects\items\implants\implant_track.dm"
-#include "code\game\objects\items\implants\implantcase.dm"
-#include "code\game\objects\items\implants\implanter.dm"
-#include "code\game\objects\items\implants\implantpad.dm"
#include "code\game\objects\items\melee\misc.dm"
#include "code\game\objects\items\melee\transforming.dm"
#include "code\game\objects\items\rogueitems\bags.dm"
@@ -844,39 +761,17 @@
#include "code\game\objects\items\rogueweapons\ranged\crossbows.dm"
#include "code\game\objects\items\rogueweapons\ranged\flintlock.dm"
#include "code\game\objects\items\rogueweapons\ranged\slings.dm"
-#include "code\game\objects\items\stacks\bscrystal.dm"
#include "code\game\objects\items\stacks\cash.dm"
#include "code\game\objects\items\stacks\medical.dm"
-#include "code\game\objects\items\stacks\rods.dm"
#include "code\game\objects\items\stacks\stack.dm"
-#include "code\game\objects\items\stacks\sheets\glass.dm"
-#include "code\game\objects\items\stacks\sheets\leather.dm"
-#include "code\game\objects\items\stacks\sheets\mineral.dm"
-#include "code\game\objects\items\stacks\sheets\sheet_types.dm"
+#include "code\game\objects\items\stacks\sheets\hides.dm"
#include "code\game\objects\items\stacks\sheets\sheets.dm"
-#include "code\game\objects\items\stacks\tiles\light.dm"
-#include "code\game\objects\items\stacks\tiles\tile_mineral.dm"
-#include "code\game\objects\items\stacks\tiles\tile_types.dm"
#include "code\game\objects\items\storage\backpack.dm"
-#include "code\game\objects\items\storage\bags.dm"
+#include "code\game\objects\items\storage\bag.dm"
#include "code\game\objects\items\storage\belt.dm"
#include "code\game\objects\items\storage\book.dm"
-#include "code\game\objects\items\storage\boxes.dm"
-#include "code\game\objects\items\storage\briefcase.dm"
#include "code\game\objects\items\storage\fancy.dm"
-#include "code\game\objects\items\storage\firstaid.dm"
-#include "code\game\objects\items\storage\lockbox.dm"
-#include "code\game\objects\items\storage\secure.dm"
#include "code\game\objects\items\storage\storage.dm"
-#include "code\game\objects\items\storage\toolbox.dm"
-#include "code\game\objects\items\tanks\tank_types.dm"
-#include "code\game\objects\items\tanks\tanks.dm"
-#include "code\game\objects\items\tanks\watertank.dm"
-#include "code\game\objects\items\tools\crowbar.dm"
-#include "code\game\objects\items\tools\screwdriver.dm"
-#include "code\game\objects\items\tools\weldingtool.dm"
-#include "code\game\objects\items\tools\wirecutters.dm"
-#include "code\game\objects\items\tools\wrench.dm"
#include "code\game\objects\lighting\_base_light.dm"
#include "code\game\objects\lighting\_base_roguelight.dm"
#include "code\game\objects\lighting\_base_roguestreet.dm"
@@ -885,41 +780,25 @@
#include "code\game\objects\lighting\sunlight.dm"
#include "code\game\objects\structures\artstuff.dm"
#include "code\game\objects\structures\barricades.dm"
-#include "code\game\objects\structures\barsigns.dm"
#include "code\game\objects\structures\bearpelt.dm"
-#include "code\game\objects\structures\bedsheet_bin.dm"
+#include "code\game\objects\structures\curtain.dm"
+#include "code\game\objects\structures\deer_trophy.dm"
#include "code\game\objects\structures\displaycase.dm"
#include "code\game\objects\structures\divine.dm"
-#include "code\game\objects\structures\dresser.dm"
#include "code\game\objects\structures\dystation.dm"
-#include "code\game\objects\structures\extinguisher.dm"
-#include "code\game\objects\structures\false_walls.dm"
#include "code\game\objects\structures\fence.dm"
#include "code\game\objects\structures\fireaxe.dm"
-#include "code\game\objects\structures\fireplace.dm"
-#include "code\game\objects\structures\flora.dm"
#include "code\game\objects\structures\fluff.dm"
-#include "code\game\objects\structures\ghost_role_spawners.dm"
-#include "code\game\objects\structures\girders.dm"
-#include "code\game\objects\structures\grille.dm"
#include "code\game\objects\structures\guillotine.dm"
-#include "code\game\objects\structures\guncase.dm"
-#include "code\game\objects\structures\headpike.dm"
#include "code\game\objects\structures\hell.dm"
-#include "code\game\objects\structures\janicart.dm"
#include "code\game\objects\structures\kitchen_spike.dm"
#include "code\game\objects\structures\ladders.dm"
-#include "code\game\objects\structures\lattice.dm"
#include "code\game\objects\structures\life_candle.dm"
-#include "code\game\objects\structures\loom.dm"
#include "code\game\objects\structures\maneater.dm"
#include "code\game\objects\structures\mannequin.dm"
#include "code\game\objects\structures\memorial.dm"
#include "code\game\objects\structures\mineral_doors.dm"
#include "code\game\objects\structures\mirror.dm"
-#include "code\game\objects\structures\mop_bucket.dm"
-#include "code\game\objects\structures\morgue.dm"
-#include "code\game\objects\structures\musician.dm"
#include "code\game\objects\structures\noticeboard.dm"
#include "code\game\objects\structures\petrified_statue.dm"
#include "code\game\objects\structures\pillory.dm"
@@ -927,21 +806,17 @@
#include "code\game\objects\structures\roguetent.dm"
#include "code\game\objects\structures\roguewindow.dm"
#include "code\game\objects\structures\safe.dm"
-#include "code\game\objects\structures\showcase.dm"
-#include "code\game\objects\structures\shower.dm"
#include "code\game\objects\structures\spawner.dm"
#include "code\game\objects\structures\spirit_board.dm"
#include "code\game\objects\structures\stairs.dm"
#include "code\game\objects\structures\statues.dm"
-#include "code\game\objects\structures\table_frames.dm"
#include "code\game\objects\structures\tables_racks.dm"
#include "code\game\objects\structures\target_stake.dm"
+#include "code\game\objects\structures\toilet.dm"
#include "code\game\objects\structures\traps.dm"
#include "code\game\objects\structures\traveltile.dm"
#include "code\game\objects\structures\walldeco.dm"
-#include "code\game\objects\structures\watercloset.dm"
#include "code\game\objects\structures\well.dm"
-#include "code\game\objects\structures\window.dm"
#include "code\game\objects\structures\beds_chairs\bed.dm"
#include "code\game\objects\structures\beds_chairs\chair.dm"
#include "code\game\objects\structures\beds_chairs\pew.dm"
@@ -950,16 +825,6 @@
#include "code\game\objects\structures\crates_lockers\closets.dm"
#include "code\game\objects\structures\crates_lockers\crates.dm"
#include "code\game\objects\structures\crates_lockers\roguetown.dm"
-#include "code\game\objects\structures\crates_lockers\closets\bodybag.dm"
-#include "code\game\objects\structures\crates_lockers\closets\cardboardbox.dm"
-#include "code\game\objects\structures\crates_lockers\closets\gimmick.dm"
-#include "code\game\objects\structures\crates_lockers\closets\infinite.dm"
-#include "code\game\objects\structures\crates_lockers\closets\l3closet.dm"
-#include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm"
-#include "code\game\objects\structures\crates_lockers\crates\bins.dm"
-#include "code\game\objects\structures\crates_lockers\crates\critter.dm"
-#include "code\game\objects\structures\crates_lockers\crates\large.dm"
-#include "code\game\objects\structures\crates_lockers\crates\wooden.dm"
#include "code\game\objects\structures\decorations\bones.dm"
#include "code\game\objects\structures\decorations\stone_path.dm"
#include "code\game\objects\structures\roguetown\bell.dm"
@@ -970,11 +835,6 @@
#include "code\game\objects\structures\roguetown\portal.dm"
#include "code\game\objects\structures\roguetown\redstone.dm"
#include "code\game\objects\structures\roguetown\rogueflora.dm"
-#include "code\game\objects\structures\signs\_signs.dm"
-#include "code\game\objects\structures\signs\signs_departments.dm"
-#include "code\game\objects\structures\signs\signs_maps.dm"
-#include "code\game\objects\structures\signs\signs_plaques.dm"
-#include "code\game\objects\structures\signs\signs_warning.dm"
#include "code\game\turfs\baseturf_skipover.dm"
#include "code\game\turfs\change_turf.dm"
#include "code\game\turfs\turf.dm"
@@ -984,8 +844,6 @@
#include "code\game\turfs\closed\transparent.dm"
#include "code\game\turfs\closed\walls.dm"
#include "code\game\turfs\closed\wall\mineral_walls.dm"
-#include "code\game\turfs\closed\wall\misc_walls.dm"
-#include "code\game\turfs\closed\wall\reinf_walls.dm"
#include "code\game\turfs\closed\wall\roguewalls.dm"
#include "code\game\turfs\open\_open.dm"
#include "code\game\turfs\open\floor.dm"
@@ -995,19 +853,8 @@
#include "code\game\turfs\open\river.dm"
#include "code\game\turfs\open\transparent.dm"
#include "code\game\turfs\open\water.dm"
-#include "code\game\turfs\open\floor\fancy_floor.dm"
-#include "code\game\turfs\open\floor\light_floor.dm"
-#include "code\game\turfs\open\floor\mineral_floor.dm"
-#include "code\game\turfs\open\floor\misc_floor.dm"
-#include "code\game\turfs\open\floor\plasteel_floor.dm"
-#include "code\game\turfs\open\floor\plating.dm"
-#include "code\game\turfs\open\floor\reinf_floor.dm"
+#include "code\game\turfs\open\floor\carpet.dm"
#include "code\game\turfs\open\floor\roguefloor.dm"
-#include "code\game\turfs\open\floor\plating\asteroid.dm"
-#include "code\game\turfs\open\floor\plating\dirt.dm"
-#include "code\game\turfs\open\floor\plating\misc_plating.dm"
-#include "code\game\turfs\open\space\space.dm"
-#include "code\game\turfs\open\space\transit.dm"
#include "code\modules\admin\admin.dm"
#include "code\modules\admin\admin_investigate.dm"
#include "code\modules\admin\admin_ranks.dm"
@@ -1102,8 +949,6 @@
#include "code\modules\antagonists\roguetown\villain\zizocult.dm"
#include "code\modules\antagonists\roguetown\villain\zomble.dm"
#include "code\modules\antagonists\traitor\datum_traitor.dm"
-#include "code\modules\antagonists\wizard\equipment\artefact.dm"
-#include "code\modules\antagonists\wizard\equipment\soulstone.dm"
#include "code\modules\atmospherics\environmental\LINDA_fire.dm"
#include "code\modules\atmospherics\environmental\LINDA_system.dm"
#include "code\modules\atmospherics\environmental\LINDA_turf_tile.dm"
@@ -1112,10 +957,6 @@
#include "code\modules\atmospherics\gasmixtures\immutable_mixtures.dm"
#include "code\modules\atmospherics\gasmixtures\reactions.dm"
#include "code\modules\awaymissions\corpse.dm"
-#include "code\modules\awaymissions\exile.dm"
-#include "code\modules\awaymissions\pamphlet.dm"
-#include "code\modules\awaymissions\signpost.dm"
-#include "code\modules\awaymissions\super_secret_room.dm"
#include "code\modules\awaymissions\zlevel.dm"
#include "code\modules\buildmode\bm_mode.dm"
#include "code\modules\buildmode\buildmode.dm"
@@ -1132,14 +973,9 @@
#include "code\modules\buildmode\submodes\variable_edit.dm"
#include "code\modules\cargo\centcom_podlauncher.dm"
#include "code\modules\cargo\exports.dm"
-#include "code\modules\cargo\gondolapod.dm"
#include "code\modules\cargo\order.dm"
#include "code\modules\cargo\supplypod.dm"
-#include "code\modules\cargo\exports\gear.dm"
-#include "code\modules\cargo\exports\manifest.dm"
-#include "code\modules\cargo\exports\materials.dm"
#include "code\modules\cargo\exports\seeds.dm"
-#include "code\modules\cargo\exports\sheets.dm"
#include "code\modules\cargo\packsrogue\_pack.dm"
#include "code\modules\cargo\packsrogue\_rogue.dm"
#include "code\modules\cargo\packsrogue\apparel.dm"
@@ -1182,33 +1018,12 @@
#include "code\modules\client\verbs\suicide.dm"
#include "code\modules\client\verbs\who.dm"
#include "code\modules\clothing\clothing.dm"
-#include "code\modules\clothing\ears\_ears.dm"
#include "code\modules\clothing\glasses\_glasses.dm"
-#include "code\modules\clothing\glasses\engine_goggles.dm"
-#include "code\modules\clothing\glasses\hud.dm"
#include "code\modules\clothing\gloves\_gloves.dm"
-#include "code\modules\clothing\gloves\boxing.dm"
-#include "code\modules\clothing\gloves\color.dm"
-#include "code\modules\clothing\gloves\miscellaneous.dm"
#include "code\modules\clothing\head\_head.dm"
-#include "code\modules\clothing\head\beanie.dm"
-#include "code\modules\clothing\head\collectable.dm"
-#include "code\modules\clothing\head\hardhat.dm"
-#include "code\modules\clothing\head\helmet.dm"
-#include "code\modules\clothing\head\jobs.dm"
-#include "code\modules\clothing\head\misc.dm"
-#include "code\modules\clothing\head\misc_special.dm"
-#include "code\modules\clothing\head\soft_caps.dm"
#include "code\modules\clothing\masks\_masks.dm"
-#include "code\modules\clothing\masks\boxing.dm"
-#include "code\modules\clothing\masks\breath.dm"
-#include "code\modules\clothing\masks\gasmask.dm"
-#include "code\modules\clothing\masks\hailer.dm"
#include "code\modules\clothing\masks\miscellaneous.dm"
#include "code\modules\clothing\neck\_neck.dm"
-#include "code\modules\clothing\outfits\event.dm"
-#include "code\modules\clothing\outfits\standard.dm"
-#include "code\modules\clothing\outfits\vr.dm"
#include "code\modules\clothing\outfits\vv_outfit.dm"
#include "code\modules\clothing\rogueclothes\armor.dm"
#include "code\modules\clothing\rogueclothes\cloaks.dm"
@@ -1227,45 +1042,11 @@
#include "code\modules\clothing\rogueclothes\npc\goblin.dm"
#include "code\modules\clothing\rogueclothes\npc\orc.dm"
#include "code\modules\clothing\shoes\_shoes.dm"
-#include "code\modules\clothing\shoes\bananashoes.dm"
-#include "code\modules\clothing\shoes\colour.dm"
-#include "code\modules\clothing\shoes\magboots.dm"
-#include "code\modules\clothing\shoes\miscellaneous.dm"
#include "code\modules\clothing\suits\_suits.dm"
-#include "code\modules\clothing\suits\armor.dm"
-#include "code\modules\clothing\suits\bio.dm"
-#include "code\modules\clothing\suits\chaplainsuits.dm"
#include "code\modules\clothing\suits\cloaks.dm"
-#include "code\modules\clothing\suits\labcoat.dm"
-#include "code\modules\clothing\suits\miscellaneous.dm"
#include "code\modules\clothing\suits\toggles.dm"
-#include "code\modules\clothing\suits\utility.dm"
-#include "code\modules\clothing\suits\wiz_robe.dm"
#include "code\modules\clothing\under\_under.dm"
#include "code\modules\clothing\under\accessories.dm"
-#include "code\modules\clothing\under\color.dm"
-#include "code\modules\clothing\under\costume.dm"
-#include "code\modules\clothing\under\miscellaneous.dm"
-#include "code\modules\clothing\under\pants.dm"
-#include "code\modules\clothing\under\shorts.dm"
-#include "code\modules\clothing\under\skirt_dress.dm"
-#include "code\modules\clothing\under\suits.dm"
-#include "code\modules\clothing\under\syndicate.dm"
-#include "code\modules\clothing\under\trek.dm"
-#include "code\modules\clothing\under\jobs\cargo.dm"
-#include "code\modules\clothing\under\jobs\centcom.dm"
-#include "code\modules\clothing\under\jobs\command.dm"
-#include "code\modules\clothing\under\jobs\engineering.dm"
-#include "code\modules\clothing\under\jobs\medical.dm"
-#include "code\modules\clothing\under\jobs\rnd.dm"
-#include "code\modules\clothing\under\jobs\security.dm"
-#include "code\modules\clothing\under\jobs\civilian\civilian.dm"
-#include "code\modules\clothing\under\jobs\civilian\clown_mime.dm"
-#include "code\modules\clothing\under\jobs\civilian\curator.dm"
-#include "code\modules\clothing\under\jobs\Plasmaman\civilian_service.dm"
-#include "code\modules\clothing\under\jobs\Plasmaman\engineering.dm"
-#include "code\modules\clothing\under\jobs\Plasmaman\medsci.dm"
-#include "code\modules\clothing\under\jobs\Plasmaman\security.dm"
#include "code\modules\detectivework\detective_work.dm"
#include "code\modules\detectivework\evidence.dm"
#include "code\modules\detectivework\footprints_and_rag.dm"
@@ -1299,9 +1080,6 @@
#include "code\modules\flufftext\Dreaming.dm"
#include "code\modules\flufftext\Hallucination.dm"
#include "code\modules\food_and_drinks\food.dm"
-#include "code\modules\food_and_drinks\drinks\drinks.dm"
-#include "code\modules\food_and_drinks\drinks\drinks\bottle.dm"
-#include "code\modules\food_and_drinks\drinks\drinks\drinkingglass.dm"
#include "code\modules\food_and_drinks\food\condiment.dm"
#include "code\modules\food_and_drinks\food\customizables.dm"
#include "code\modules\food_and_drinks\food\snacks.dm"
@@ -1322,18 +1100,12 @@
#include "code\modules\food_and_drinks\food\snacks_vend.dm"
#include "code\modules\food_and_drinks\food\snacks\dough.dm"
#include "code\modules\food_and_drinks\food\snacks\meat.dm"
-#include "code\modules\food_and_drinks\kitchen_machinery\food_cart.dm"
-#include "code\modules\food_and_drinks\kitchen_machinery\grill.dm"
-#include "code\modules\food_and_drinks\kitchen_machinery\icecream_vat.dm"
#include "code\modules\food_and_drinks\recipes\drinks_recipes.dm"
#include "code\modules\food_and_drinks\recipes\food_mixtures.dm"
-#include "code\modules\games\cas.dm"
#include "code\modules\goonchat\browserOutput.dm"
-#include "code\modules\holiday\easter.dm"
#include "code\modules\holiday\holidays.dm"
#include "code\modules\hydroponics\grown.dm"
#include "code\modules\hydroponics\growninedible.dm"
-#include "code\modules\hydroponics\hydroitemdefines.dm"
#include "code\modules\hydroponics\plant_genes.dm"
#include "code\modules\hydroponics\sample.dm"
#include "code\modules\hydroponics\seeds.dm"
@@ -1504,7 +1276,6 @@
#include "code\modules\library\lib_items.dm"
#include "code\modules\library\lib_machines.dm"
#include "code\modules\library\random_books.dm"
-#include "code\modules\library\soapstone.dm"
#include "code\modules\lighting\lighting_area.dm"
#include "code\modules\lighting\lighting_atom.dm"
#include "code\modules\lighting\lighting_atom_additions.dm"
@@ -1526,8 +1297,6 @@
#include "code\modules\mapping\space_management\space_transition.dm"
#include "code\modules\mapping\space_management\traits.dm"
#include "code\modules\mapping\space_management\zlevel_manager.dm"
-#include "code\modules\mining\ores_coins.dm"
-#include "code\modules\mining\lavaland\ash_flora.dm"
#include "code\modules\mob\death.dm"
#include "code\modules\mob\emote.dm"
#include "code\modules\mob\inventory.dm"
@@ -1641,17 +1410,10 @@
#include "code\modules\mob\living\carbon\human\species_types\dullahan.dm"
#include "code\modules\mob\living\carbon\human\species_types\ethereal.dm"
#include "code\modules\mob\living\carbon\human\species_types\felinid.dm"
-#include "code\modules\mob\living\carbon\human\species_types\flypeople.dm"
-#include "code\modules\mob\living\carbon\human\species_types\golems.dm"
#include "code\modules\mob\living\carbon\human\species_types\lizardpeople.dm"
-#include "code\modules\mob\living\carbon\human\species_types\mothmen.dm"
-#include "code\modules\mob\living\carbon\human\species_types\mushpeople.dm"
-#include "code\modules\mob\living\carbon\human\species_types\plasmamen.dm"
-#include "code\modules\mob\living\carbon\human\species_types\podpeople.dm"
#include "code\modules\mob\living\carbon\human\species_types\shadowpeople.dm"
#include "code\modules\mob\living\carbon\human\species_types\skeletons.dm"
#include "code\modules\mob\living\carbon\human\species_types\snail.dm"
-#include "code\modules\mob\living\carbon\human\species_types\synths.dm"
#include "code\modules\mob\living\carbon\human\species_types\vampire.dm"
#include "code\modules\mob\living\carbon\human\species_types\zombies.dm"
#include "code\modules\mob\living\carbon\human\species_types\roguetown\roguetown_species.dm"
@@ -1704,48 +1466,30 @@
#include "code\modules\mob\living\carbon\spirit\spirit_defense.dm"
#include "code\modules\mob\living\carbon\spirit\update_icons.dm"
#include "code\modules\mob\living\simple_animal\animal_defense.dm"
-#include "code\modules\mob\living\simple_animal\constructs.dm"
-#include "code\modules\mob\living\simple_animal\corpse.dm"
#include "code\modules\mob\living\simple_animal\damage_procs.dm"
#include "code\modules\mob\living\simple_animal\examine.dm"
#include "code\modules\mob\living\simple_animal\parrot.dm"
-#include "code\modules\mob\living\simple_animal\shade.dm"
#include "code\modules\mob\living\simple_animal\simple_animal.dm"
#include "code\modules\mob\living\simple_animal\status_procs.dm"
#include "code\modules\mob\living\simple_animal\topic.dm"
#include "code\modules\mob\living\simple_animal\friendly\butterfly.dm"
#include "code\modules\mob\living\simple_animal\friendly\cat.dm"
#include "code\modules\mob\living\simple_animal\friendly\cockroach.dm"
-#include "code\modules\mob\living\simple_animal\friendly\crab.dm"
#include "code\modules\mob\living\simple_animal\friendly\dog.dm"
-#include "code\modules\mob\living\simple_animal\friendly\farm_animals.dm"
#include "code\modules\mob\living\simple_animal\friendly\fox.dm"
-#include "code\modules\mob\living\simple_animal\friendly\gondola.dm"
+#include "code\modules\mob\living\simple_animal\friendly\grensch.dm"
#include "code\modules\mob\living\simple_animal\friendly\lizard.dm"
#include "code\modules\mob\living\simple_animal\friendly\mouse.dm"
-#include "code\modules\mob\living\simple_animal\friendly\penguin.dm"
#include "code\modules\mob\living\simple_animal\friendly\pet.dm"
-#include "code\modules\mob\living\simple_animal\friendly\sloth.dm"
#include "code\modules\mob\living\simple_animal\friendly\snake.dm"
-#include "code\modules\mob\living\simple_animal\hostile\bear.dm"
-#include "code\modules\mob\living\simple_animal\hostile\carp.dm"
#include "code\modules\mob\living\simple_animal\hostile\dark_wizard.dm"
-#include "code\modules\mob\living\simple_animal\hostile\eyeballs.dm"
#include "code\modules\mob\living\simple_animal\hostile\faithless.dm"
#include "code\modules\mob\living\simple_animal\hostile\giant_spider.dm"
#include "code\modules\mob\living\simple_animal\hostile\goose.dm"
#include "code\modules\mob\living\simple_animal\hostile\hostile.dm"
#include "code\modules\mob\living\simple_animal\hostile\illusion.dm"
-#include "code\modules\mob\living\simple_animal\hostile\killertomato.dm"
-#include "code\modules\mob\living\simple_animal\hostile\mushroom.dm"
#include "code\modules\mob\living\simple_animal\hostile\netherworld.dm"
-#include "code\modules\mob\living\simple_animal\hostile\pirate.dm"
-#include "code\modules\mob\living\simple_animal\hostile\skeleton.dm"
#include "code\modules\mob\living\simple_animal\hostile\statue.dm"
-#include "code\modules\mob\living\simple_animal\hostile\syndicate.dm"
-#include "code\modules\mob\living\simple_animal\hostile\tree.dm"
-#include "code\modules\mob\living\simple_animal\hostile\venus_human_trap.dm"
-#include "code\modules\mob\living\simple_animal\hostile\wizard.dm"
#include "code\modules\mob\living\simple_animal\hostile\zombie.dm"
#include "code\modules\mob\living\simple_animal\hostile\bosses\boss.dm"
#include "code\modules\mob\living\simple_animal\hostile\gorilla\emotes.dm"
@@ -1757,11 +1501,8 @@
#include "code\modules\mob\living\simple_animal\hostile\jungle\mook.dm"
#include "code\modules\mob\living\simple_animal\hostile\jungle\seedling.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\bat.dm"
-#include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\frog.dm"
-#include "code\modules\mob\living\simple_animal\hostile\retaliate\ghost.dm"
#include "code\modules\mob\living\simple_animal\hostile\retaliate\retaliate.dm"
-#include "code\modules\mob\living\simple_animal\hostile\retaliate\spaceman.dm"
#include "code\modules\mob\living\simple_animal\hostile\roguetown\crow.dm"
#include "code\modules\mob\living\simple_animal\hostile\roguetown\haunt.dm"
#include "code\modules\mob\living\simple_animal\hostile\roguetown\smallrat.dm"
@@ -1791,20 +1532,11 @@
#include "code\modules\mob\living\simple_animal\rogue\farm\goat.dm"
#include "code\modules\mob\living\simple_animal\rogue\farm\trufflepig.dm"
#include "code\modules\mob\living\simple_animal\rogue\game\saiga.dm"
-#include "code\modules\paperwork\carbonpaper.dm"
-#include "code\modules\paperwork\clipboard.dm"
#include "code\modules\paperwork\contract.dm"
-#include "code\modules\paperwork\filingcabinet.dm"
-#include "code\modules\paperwork\folders.dm"
-#include "code\modules\paperwork\handlabeler.dm"
#include "code\modules\paperwork\paper.dm"
#include "code\modules\paperwork\paper_cutter.dm"
#include "code\modules\paperwork\paper_premade.dm"
-#include "code\modules\paperwork\paperbin.dm"
-#include "code\modules\paperwork\paperplane.dm"
-#include "code\modules\paperwork\pen.dm"
#include "code\modules\paperwork\rogue.dm"
-#include "code\modules\paperwork\stamps.dm"
#include "code\modules\paperwork\papers\scrap.dm"
#include "code\modules\photography\_pictures.dm"
#include "code\modules\photography\photos\album.dm"
@@ -1815,109 +1547,23 @@
#include "code\modules\procedural_mapping\mapGeneratorObj.dm"
#include "code\modules\procedural_mapping\mapGeneratorReadme.dm"
#include "code\modules\procedural_mapping\mapGeneratorModules\helpers.dm"
-#include "code\modules\procedural_mapping\mapGeneratorModules\nature.dm"
#include "code\modules\procedural_mapping\mapGenerators\cellular.dm"
-#include "code\modules\procedural_mapping\mapGenerators\nature.dm"
-#include "code\modules\procedural_mapping\mapGenerators\repair.dm"
-#include "code\modules\procedural_mapping\mapGenerators\shuttle.dm"
-#include "code\modules\procedural_mapping\mapGenerators\syndicate.dm"
#include "code\modules\projectiles\gun.dm"
-#include "code\modules\projectiles\pins.dm"
#include "code\modules\projectiles\projectile.dm"
#include "code\modules\projectiles\ammunition\_ammunition.dm"
#include "code\modules\projectiles\ammunition\_firing.dm"
-#include "code\modules\projectiles\ammunition\ballistic\lmg.dm"
-#include "code\modules\projectiles\ammunition\ballistic\pistol.dm"
-#include "code\modules\projectiles\ammunition\ballistic\revolver.dm"
-#include "code\modules\projectiles\ammunition\ballistic\rifle.dm"
-#include "code\modules\projectiles\ammunition\ballistic\shotgun.dm"
-#include "code\modules\projectiles\ammunition\ballistic\smg.dm"
-#include "code\modules\projectiles\ammunition\ballistic\sniper.dm"
-#include "code\modules\projectiles\ammunition\caseless\_caseless.dm"
-#include "code\modules\projectiles\ammunition\caseless\foam.dm"
-#include "code\modules\projectiles\ammunition\caseless\misc.dm"
-#include "code\modules\projectiles\ammunition\caseless\rocket.dm"
-#include "code\modules\projectiles\ammunition\energy\_energy.dm"
-#include "code\modules\projectiles\ammunition\energy\ebow.dm"
-#include "code\modules\projectiles\ammunition\energy\laser.dm"
-#include "code\modules\projectiles\ammunition\energy\lmg.dm"
-#include "code\modules\projectiles\ammunition\energy\plasma.dm"
-#include "code\modules\projectiles\ammunition\energy\special.dm"
-#include "code\modules\projectiles\ammunition\energy\stun.dm"
-#include "code\modules\projectiles\ammunition\special\magic.dm"
-#include "code\modules\projectiles\ammunition\special\syringe.dm"
-#include "code\modules\projectiles\boxes_magazines\_box_magazine.dm"
-#include "code\modules\projectiles\boxes_magazines\ammo_boxes.dm"
-#include "code\modules\projectiles\boxes_magazines\external\grenade.dm"
-#include "code\modules\projectiles\boxes_magazines\external\lmg.dm"
-#include "code\modules\projectiles\boxes_magazines\external\pistol.dm"
-#include "code\modules\projectiles\boxes_magazines\external\rechargable.dm"
-#include "code\modules\projectiles\boxes_magazines\external\rifle.dm"
-#include "code\modules\projectiles\boxes_magazines\external\shotgun.dm"
-#include "code\modules\projectiles\boxes_magazines\external\smg.dm"
-#include "code\modules\projectiles\boxes_magazines\external\sniper.dm"
-#include "code\modules\projectiles\boxes_magazines\external\toy.dm"
-#include "code\modules\projectiles\boxes_magazines\internal\_cylinder.dm"
+#include "code\modules\projectiles\boxes_magazines\_ammo_box.dm"
#include "code\modules\projectiles\boxes_magazines\internal\_internal.dm"
-#include "code\modules\projectiles\boxes_magazines\internal\grenade.dm"
-#include "code\modules\projectiles\boxes_magazines\internal\misc.dm"
-#include "code\modules\projectiles\boxes_magazines\internal\revolver.dm"
-#include "code\modules\projectiles\boxes_magazines\internal\rifle.dm"
-#include "code\modules\projectiles\boxes_magazines\internal\shotgun.dm"
-#include "code\modules\projectiles\boxes_magazines\internal\toy.dm"
#include "code\modules\projectiles\guns\ballistic.dm"
-#include "code\modules\projectiles\guns\magic.dm"
-#include "code\modules\projectiles\guns\ballistic\automatic.dm"
-#include "code\modules\projectiles\guns\ballistic\laser_gatling.dm"
#include "code\modules\projectiles\guns\ballistic\launchers.dm"
-#include "code\modules\projectiles\guns\ballistic\pistol.dm"
#include "code\modules\projectiles\guns\ballistic\revolver.dm"
-#include "code\modules\projectiles\guns\ballistic\rifle.dm"
-#include "code\modules\projectiles\guns\ballistic\shotgun.dm"
-#include "code\modules\projectiles\guns\ballistic\toy.dm"
-#include "code\modules\projectiles\guns\magic\staff.dm"
-#include "code\modules\projectiles\guns\magic\wand.dm"
-#include "code\modules\projectiles\guns\misc\chem_gun.dm"
-#include "code\modules\projectiles\guns\misc\grenade_launcher.dm"
-#include "code\modules\projectiles\guns\misc\medbeam.dm"
-#include "code\modules\projectiles\guns\misc\syringe_gun.dm"
#include "code\modules\projectiles\projectile\beams.dm"
#include "code\modules\projectiles\projectile\bullets.dm"
#include "code\modules\projectiles\projectile\magic.dm"
-#include "code\modules\projectiles\projectile\bullets\_incendiary.dm"
-#include "code\modules\projectiles\projectile\bullets\dart_syringe.dm"
-#include "code\modules\projectiles\projectile\bullets\dnainjector.dm"
-#include "code\modules\projectiles\projectile\bullets\grenade.dm"
-#include "code\modules\projectiles\projectile\bullets\lmg.dm"
-#include "code\modules\projectiles\projectile\bullets\pistol.dm"
-#include "code\modules\projectiles\projectile\bullets\revolver.dm"
-#include "code\modules\projectiles\projectile\bullets\rifle.dm"
-#include "code\modules\projectiles\projectile\bullets\shotgun.dm"
-#include "code\modules\projectiles\projectile\bullets\smg.dm"
-#include "code\modules\projectiles\projectile\bullets\sniper.dm"
-#include "code\modules\projectiles\projectile\bullets\special.dm"
-#include "code\modules\projectiles\projectile\energy\_energy.dm"
-#include "code\modules\projectiles\projectile\energy\ebow.dm"
-#include "code\modules\projectiles\projectile\energy\misc.dm"
-#include "code\modules\projectiles\projectile\energy\net_snare.dm"
-#include "code\modules\projectiles\projectile\energy\nuclear_particle.dm"
-#include "code\modules\projectiles\projectile\energy\stun.dm"
#include "code\modules\projectiles\projectile\magic\spellcard.dm"
#include "code\modules\projectiles\projectile\reusable\_reusable.dm"
-#include "code\modules\projectiles\projectile\reusable\foam_dart.dm"
-#include "code\modules\projectiles\projectile\special\curse.dm"
-#include "code\modules\projectiles\projectile\special\floral.dm"
-#include "code\modules\projectiles\projectile\special\hallucination.dm"
-#include "code\modules\projectiles\projectile\special\ion.dm"
-#include "code\modules\projectiles\projectile\special\meteor.dm"
-#include "code\modules\projectiles\projectile\special\mindflayer.dm"
-#include "code\modules\projectiles\projectile\special\neurotoxin.dm"
-#include "code\modules\projectiles\projectile\special\plasma.dm"
-#include "code\modules\projectiles\projectile\special\rocket.dm"
-#include "code\modules\projectiles\projectile\special\temperature.dm"
#include "code\modules\reagents\chem_splash.dm"
#include "code\modules\reagents\reagent_containers.dm"
-#include "code\modules\reagents\reagent_dispenser.dm"
#include "code\modules\reagents\roguespill.dm"
#include "code\modules\reagents\chemistry\colors.dm"
#include "code\modules\reagents\chemistry\holder.dm"
@@ -1950,7 +1596,6 @@
#include "code\modules\reagents\reagent_containers\patch.dm"
#include "code\modules\reagents\reagent_containers\pill.dm"
#include "code\modules\reagents\reagent_containers\powderspice.dm"
-#include "code\modules\reagents\reagent_containers\spray.dm"
#include "code\modules\reagents\reagent_containers\syringes.dm"
#include "code\modules\roguetown\mapgen\ambushmarkers.dm"
#include "code\modules\roguetown\mapgen\beach.dm"
@@ -2048,22 +1693,17 @@
#include "code\modules\spells\roguetown\acolyte\pestra.dm"
#include "code\modules\spells\spell_types\aimed.dm"
#include "code\modules\spells\spell_types\area_teleport.dm"
-#include "code\modules\spells\spell_types\barnyard.dm"
#include "code\modules\spells\spell_types\bloodcrawl.dm"
#include "code\modules\spells\spell_types\conjure.dm"
-#include "code\modules\spells\spell_types\construct_spells.dm"
#include "code\modules\spells\spell_types\curse.dm"
-#include "code\modules\spells\spell_types\devil_boons.dm"
#include "code\modules\spells\spell_types\emplosion.dm"
#include "code\modules\spells\spell_types\ethereal_jaunt.dm"
#include "code\modules\spells\spell_types\explosion.dm"
#include "code\modules\spells\spell_types\forcewall.dm"
#include "code\modules\spells\spell_types\genetic.dm"
#include "code\modules\spells\spell_types\godhand.dm"
-#include "code\modules\spells\spell_types\infinite_guns.dm"
#include "code\modules\spells\spell_types\inflict_handler.dm"
#include "code\modules\spells\spell_types\knock.dm"
-#include "code\modules\spells\spell_types\lichdom.dm"
#include "code\modules\spells\spell_types\lightning.dm"
#include "code\modules\spells\spell_types\mime.dm"
#include "code\modules\spells\spell_types\mind_transfer.dm"
@@ -2084,7 +1724,6 @@
#include "code\modules\surgery\_surgery.dm"
#include "code\modules\surgery\_surgery_step.dm"
#include "code\modules\surgery\surgery_helpers.dm"
-#include "code\modules\surgery\surgery_tools.dm"
#include "code\modules\surgery\surgery_tools_rogue.dm"
#include "code\modules\surgery\bodyparts\_bodyparts.dm"
#include "code\modules\surgery\bodyparts\bodypart_dismemberment.dm"
@@ -2096,10 +1735,6 @@
#include "code\modules\surgery\bodyparts\bodypart_features\features.dm"
#include "code\modules\surgery\organs\_organ_dna.dm"
#include "code\modules\surgery\organs\appendix.dm"
-#include "code\modules\surgery\organs\augments_chest.dm"
-#include "code\modules\surgery\organs\augments_eyes.dm"
-#include "code\modules\surgery\organs\augments_internal.dm"
-#include "code\modules\surgery\organs\autosurgeon.dm"
#include "code\modules\surgery\organs\brain.dm"
#include "code\modules\surgery\organs\ears.dm"
#include "code\modules\surgery\organs\eyes.dm"
@@ -2148,19 +1783,10 @@
#include "code\modules\underworld\underworld.dm"
#include "code\modules\unit_tests\_unit_tests.dm"
#include "code\modules\vehicles\_vehicle.dm"
-#include "code\modules\vehicles\bicycle.dm"
-#include "code\modules\vehicles\lavaboat.dm"
-#include "code\modules\vehicles\pimpin_ride.dm"
#include "code\modules\vehicles\ridden.dm"
-#include "code\modules\vehicles\scooter.dm"
#include "code\modules\vehicles\sealed.dm"
-#include "code\modules\vehicles\secway.dm"
-#include "code\modules\vehicles\speedbike.dm"
#include "code\modules\vehicles\vehicle_actions.dm"
#include "code\modules\vehicles\vehicle_key.dm"
-#include "code\modules\vehicles\wheelchair.dm"
-#include "code\modules\vehicles\cars\car.dm"
-#include "code\modules\vehicles\cars\clowncar.dm"
#include "code\modules\zombie\items.dm"
#include "code\modules\zombie\organs.dm"
#include "interface\interface.dm"
diff --git a/tools/UpdatePaths/Scripts/65504_floor_repathing.txt b/tools/UpdatePaths/Scripts/65504_floor_repathing.txt
index 6af8bd10fa..70cbcbf79d 100644
--- a/tools/UpdatePaths/Scripts/65504_floor_repathing.txt
+++ b/tools/UpdatePaths/Scripts/65504_floor_repathing.txt
@@ -1,5 +1,5 @@
/turf/open/floor/plating/dirt : /turf/open/misc/dirt{@OLD}
-/turf/open/floor/plating/dirt/dark : /turf/open/misc/dirt/dark{@OLD}
+/turf/open/floor/rogue/dirt : /turf/open/misc/dirt/dark{@OLD}
/turf/open/floor/plating/dirt/jungle : /turf/open/misc/dirt/jungle{@OLD}
/turf/open/floor/plating/dirt/jungle/dark : /turf/open/misc/dirt/jungle/dark{@OLD}
/turf/open/floor/plating/dirt/jungle/wasteland : /turf/open/misc/dirt/jungle/wasteland{@OLD}