diff --git a/code/controllers/subsystem/objects.dm b/code/controllers/subsystem/objects.dm
index ccd49428120..35236b38fb6 100644
--- a/code/controllers/subsystem/objects.dm
+++ b/code/controllers/subsystem/objects.dm
@@ -9,6 +9,7 @@ var/datum/subsystem/objects/SSobj
priority = 12
var/list/processing = list()
+ var/list/burning = list()
/datum/subsystem/objects/New()
NEW_SS_GLOBAL(SSobj)
@@ -37,5 +38,9 @@ var/datum/subsystem/objects/SSobj
++i
continue
SSobj.processing.Cut(i, i+1)
-
-
+ for(var/obj/burningobj in SSobj.burning)
+ if(burningobj && (burningobj.burn_state == 1))
+ if(burningobj.burn_world_time < world.time)
+ burningobj.burn()
+ else
+ SSobj.burning -= burningobj
\ No newline at end of file
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index 2275c00a0e3..278cbe162df 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -664,9 +664,10 @@ var/list/uplink_items = list()
/datum/uplink_item/implants/microbomb
name = "Microbomb Implant"
- desc = "An implant injected into the body, and later activated either manually or automatically upon death. The more implants inside of you, the higher the explosive power."
+ desc = "An implant injected into the body, and later activated either manually or automatically upon death. The more implants inside of you, the higher the explosive power. \
+ Will permanently destroy your body, however."
item = /obj/item/weapon/storage/box/syndie_kit/imp_microbomb
- cost = 1
+ cost = 2
//CYBERNETIC IMPLANTS
diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm
index 43cd9f186cf..0c781f27f9b 100644
--- a/code/game/objects/buckling.dm
+++ b/code/game/objects/buckling.dm
@@ -47,6 +47,9 @@
M.update_canmove()
post_buckle_mob(M)
M.throw_alert("buckled", new_master = src)
+ if(burn_state == 1) //Sets the mob on fire if you buckle them to a burning object
+ M.adjust_fire_stacks(1)
+ M.IgniteMob()
return 1
/obj/proc/unbuckle_mob()
diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm
index 71d209de6a6..1a205f1607a 100644
--- a/code/game/objects/effects/decals/Cleanable/misc.dm
+++ b/code/game/objects/effects/decals/Cleanable/misc.dm
@@ -19,6 +19,9 @@
/obj/effect/decal/cleanable/ash/New()
..()
reagents.add_reagent("ash", 30)
+ pixel_x = rand(-5, 5)
+ pixel_y = rand(-5, 5)
+
/obj/effect/decal/cleanable/greenglow
name = "green glow"
@@ -71,6 +74,8 @@
layer = 3
icon = 'icons/effects/effects.dmi'
icon_state = "cobweb1"
+ burn_state = 0 //Burnable
+ burntime = 1
/obj/effect/decal/cleanable/molten_item
name = "gooey grey mass"
@@ -142,4 +147,18 @@
gender = PLURAL
icon = 'icons/obj/objects.dmi'
icon_state = "ash"
- anchored = 1
\ No newline at end of file
+ anchored = 1
+
+/obj/effect/decal/cleanable/shreds
+ name = "shreds"
+ desc = "The shredded remains of what appears to be clothing."
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "shreds"
+ gender = PLURAL
+ density = 0
+ anchored = 1
+ layer = 2
+
+/obj/effect/decal/cleanable/shreds/New()
+ pixel_x = rand(-5, 5)
+ pixel_y = rand(-5, 5)
\ No newline at end of file
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index a782f6fbb51..db7cf21bcbc 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -1,3 +1,5 @@
+var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_state" = "fire")
+
/obj/item
name = "item"
icon = 'icons/obj/items.dmi'
@@ -158,6 +160,23 @@
/obj/item/attack_hand(mob/user as mob)
if (!user) return
+
+ if(burn_state == 1)
+ var/mob/living/carbon/human/H = user
+ if(istype(H))
+ if(H.gloves && (H.gloves.max_heat_protection_temperature > 360))
+ extinguish()
+ user << "You put out the fire on [src]."
+ else
+ user << "You burn your hand on [src]!"
+ var/obj/item/organ/limb/affecting = H.get_organ("[user.hand ? "l" : "r" ]_arm")
+ if(affecting.take_damage( 0, 5 )) // 5 burn damage
+ H.update_damage_overlays(0)
+ H.updatehealth()
+ return
+ else
+ extinguish()
+
if (istype(src.loc, /obj/item/weapon/storage))
//If the item is in a storage item, take it out
var/obj/item/weapon/storage/S = src.loc
diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm
index 5d63211a30d..276d614a9ad 100644
--- a/code/game/objects/items/candle.dm
+++ b/code/game/objects/items/candle.dm
@@ -6,7 +6,6 @@
icon_state = "candle1"
item_state = "candle1"
w_class = 1
-
var/wax = 200
var/lit = 0
proc
@@ -46,6 +45,10 @@
if(M.lit)
light()
+/obj/item/candle/fire_act()
+ if(!src.lit)
+ light() //honk
+ return
/obj/item/candle/light(var/flavor_text = "[usr] lights the [name].")
if(!src.lit)
diff --git a/code/game/objects/items/devices/instruments.dm b/code/game/objects/items/devices/instruments.dm
index 6ecc1a86125..dcfaceeffc3 100644
--- a/code/game/objects/items/devices/instruments.dm
+++ b/code/game/objects/items/devices/instruments.dm
@@ -1,6 +1,8 @@
//copy pasta of the space piano, don't hurt me -Pete
/obj/item/device/instrument
name = "generic instrument"
+ burn_state = 0 //Burnable
+ burntime = 20
var/datum/song/handheld/song
var/instrumentId = "generic"
var/instrumentExt = "ogg"
diff --git a/code/game/objects/items/devices/pizza_bomb.dm b/code/game/objects/items/devices/pizza_bomb.dm
index 6a1cdcd1151..a77f96f1e9b 100644
--- a/code/game/objects/items/devices/pizza_bomb.dm
+++ b/code/game/objects/items/devices/pizza_bomb.dm
@@ -3,6 +3,7 @@
desc = "A box suited for pizzas."
icon = 'icons/obj/food/containers.dmi'
icon_state = "pizzabox1"
+ burn_state = 0 //Burnable
var/timer = 10 //Adjustable timer
var/timer_set = 0
var/primed = 0
@@ -54,6 +55,10 @@
sleep(timer)
return go_boom()
+/obj/item/device/pizza_bomb/burn() //Instead of burning to ashes, it will just explode
+ go_boom()
+ return
+
/obj/item/device/pizza_bomb/proc/go_boom()
if(disarmed)
visible_message("\icon[src] Sparks briefly jump out of the [correct_wire] wire on \the [src], but it's disarmed!")
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 206e6f64739..60e0ba98c3a 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -56,6 +56,9 @@
mytape = null
update_icon()
+/obj/item/device/taperecorder/fire_act()
+ mytape.ruin() //Fires destroy the tape
+ return()
/obj/item/device/taperecorder/attack_hand(mob/user)
if(loc == user)
@@ -264,6 +267,8 @@
var/list/timestamp = list()
var/ruined = 0
+/obj/item/device/tape/fire_act()
+ ruin()
/obj/item/device/tape/attack_self(mob/user)
if(!ruined)
diff --git a/code/game/objects/items/stacks/cash.dm b/code/game/objects/items/stacks/cash.dm
index 6c391dcc3e6..eff17423b61 100644
--- a/code/game/objects/items/stacks/cash.dm
+++ b/code/game/objects/items/stacks/cash.dm
@@ -10,6 +10,7 @@
throw_speed = 2
throw_range = 2
w_class = 1.0
+ burn_state = 0 //Burnable
/obj/item/stack/spacecash/c10
icon_state = "spacecash10"
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index 55493399fad..33c7ad85fed 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -7,6 +7,8 @@
w_class = 1
throw_speed = 3
throw_range = 7
+ burn_state = 0 //Burnable
+ burntime = 5
var/heal_brute = 0
var/heal_burn = 0
var/stop_bleeding = 0
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 34c8445a8d5..28794e5bd7a 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -108,6 +108,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
icon = 'icons/obj/items.dmi'
origin_tech = "materials=1;biotech=1"
sheettype = "wood"
+ burn_state = 0 //Burnable
/obj/item/stack/sheet/mineral/wood/New(var/loc, var/amount=null)
recipes = wood_recipes
@@ -122,6 +123,7 @@ var/global/list/datum/stack_recipe/wood_recipes = list ( \
singular_name = "cloth roll"
icon_state = "sheet-cloth"
origin_tech = "materials=2"
+ burn_state = 0 //Burnable
/*
* Cardboard
@@ -143,6 +145,7 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
singular_name = "cardboard sheet"
icon_state = "sheet-card"
origin_tech = "materials=1"
+ burn_state = 0 //Burnable
/obj/item/stack/sheet/cardboard/New(var/loc, var/amount=null)
recipes = cardboard_recipes
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index 6d81c36bb2c..e498bc3ebce 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -84,6 +84,7 @@
max_amount = 60
origin_tech = "biotech=1"
turf_type = /turf/simulated/floor/fancy/grass
+ burn_state = 0 //Burnable
/*
* Wood
@@ -101,6 +102,7 @@
max_amount = 60
origin_tech = "biotech=1"
turf_type = /turf/simulated/floor/wood
+ burn_state = 0 //Burnable
/*
* Carpets
@@ -117,6 +119,7 @@
throw_range = 7
max_amount = 60
turf_type = /turf/simulated/floor/fancy/carpet
+ burn_state = 0 //Burnable
/*
* High-traction
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 515176b16a2..5bc5733aa4b 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -271,6 +271,7 @@
item_state = "arm_blade"
attack_verb = list("pricked", "absorbed", "gored")
w_class = 2
+ burn_state = 0 //Burnable
/*
@@ -527,6 +528,10 @@
icon_state = "snappop"
w_class = 1
+/obj/item/toy/snappop/fire_act()
+ throw_impact()
+ return
+
/obj/item/toy/snappop/throw_impact(atom/hit_atom)
..()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
@@ -710,6 +715,8 @@
/obj/item/toy/cards
+ burn_state = 0 //Burnable
+ burntime = 5
var/parentdeck = null
var/deckstyle = "nanotrasen"
var/card_hitsound = null
@@ -949,7 +956,8 @@
newobj.card_throw_speed = sourceobj.card_throw_speed
newobj.card_throw_range = sourceobj.card_throw_range
newobj.card_attack_verb = sourceobj.card_attack_verb
-
+ if(sourceobj.burn_state == -1)
+ newobj.burn_state = -1
/obj/item/toy/cards/singlecard
name = "card"
@@ -1065,6 +1073,7 @@
card_throw_speed = 3
card_throw_range = 7
card_attack_verb = list("attacked", "sliced", "diced", "slashed", "cut")
+ burn_state = -1 //Not Burnable
/*
* Fake nuke
@@ -1123,6 +1132,7 @@
icon_state = "carpplushie"
w_class = 2.0
attack_verb = list("bitten", "eaten", "fin slapped")
+ burn_state = 0 //Burnable
var/bitesound = 'sound/weapons/bite.ogg'
// Attack mob
diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm
index 2e22500c790..12e705d193b 100644
--- a/code/game/objects/items/trash.dm
+++ b/code/game/objects/items/trash.dm
@@ -3,6 +3,7 @@
icon = 'icons/obj/janitor.dmi'
desc = "This is rubbish."
w_class = 1.0
+ burn_state = 0 //Burnable
/obj/item/trash/raisins
name = "\improper 4no raisins"
@@ -51,6 +52,7 @@
/obj/item/trash/tray
name = "tray"
icon_state = "tray"
+ burn_state = -1 //Not Burnable
/obj/item/trash/candle
name = "candle"
@@ -60,6 +62,7 @@
/obj/item/trash/can
name = "crushed can"
icon_state = "cola"
+ burn_state = -1 //Not Burnable
/obj/item/trash/attack(mob/M, mob/living/user)
return
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/courtroom.dm b/code/game/objects/items/weapons/courtroom.dm
index c3f62193260..408cbe25a01 100644
--- a/code/game/objects/items/weapons/courtroom.dm
+++ b/code/game/objects/items/weapons/courtroom.dm
@@ -11,6 +11,7 @@
throwforce = 6.0
w_class = 2.0
attack_verb = list("bashed", "battered", "judged", "whacked")
+ burn_state = 0 //Burnable
/obj/item/weapon/gavelhammer/suicide_act(mob/user)
user.visible_message("[user] has sentenced \himself to death with the [src.name]! It looks like \he's trying to commit suicide.")
@@ -25,6 +26,7 @@
force = 2.0
throwforce = 2.0
w_class = 1.0
+ burn_state = 0 //Burnable
/obj/item/weapon/gavelblock/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/gavelhammer))
diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm
index 2dfa4b44c66..19e57dbb30b 100644
--- a/code/game/objects/items/weapons/extinguisher.dm
+++ b/code/game/objects/items/weapons/extinguisher.dm
@@ -151,6 +151,9 @@
if(isliving(atm)) //For extinguishing mobs on fire
var/mob/living/M = atm
M.ExtinguishMob()
+ if(istype(atm,/obj/item))
+ var/obj/item/Item = atm
+ Item.extinguish()
if(W.loc == my_target) break
sleep(2)
diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm
index 242abdf81f6..9f1ba40f4c1 100644
--- a/code/game/objects/items/weapons/gift_wrappaper.dm
+++ b/code/game/objects/items/weapons/gift_wrappaper.dm
@@ -13,7 +13,7 @@
icon = 'icons/obj/storage.dmi'
icon_state = "giftcrate3"
item_state = "gift1"
-
+ burn_state = 0 //Burnable
/obj/item/weapon/a_gift/New()
..()
@@ -86,6 +86,7 @@
flags = NOBLUDGEON
amount = 25
max_amount = 25
+ burn_state = 0 //Burnable
/obj/item/stack/wrapping_paper/attack_self(mob/user)
user << "You need to use it on a package that has already been wrapped!"
diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm
index 85375327940..51272bbd0a7 100644
--- a/code/game/objects/items/weapons/grenades/grenade.dm
+++ b/code/game/objects/items/weapons/grenades/grenade.dm
@@ -9,10 +9,15 @@
throw_range = 7
flags = CONDUCT
slot_flags = SLOT_BELT
+ burn_state = 0 //Burnable
+ burntime = 5
var/active = 0
var/det_time = 50
var/display_timer = 1
+/obj/item/weapon/grenade/burn()
+ prime()
+
/obj/item/weapon/grenade/proc/clown_check(var/mob/living/carbon/human/user)
if(user.disabilities & CLUMSY && prob(50))
user << "Huh? How does this thing work?"
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index be83f60bf9d..4a85d7a9d49 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -82,6 +82,10 @@
name = "microbomb implant"
desc = "And boom goes the weasel."
icon_state = "explosive"
+ var/weak = 1.6
+ var/medium = 0.8
+ var/heavy = 0.4
+ var/delay = 7
/obj/item/weapon/implant/explosive/get_data()
var/dat = {"Implant Specifications:
@@ -103,33 +107,69 @@
if(!cause || !imp_in) return 0
if(cause == "action_button" && alert(imp_in, "Are you sure you want to activate your microbomb implant? This will cause you to explode!", "Microbomb Implant Confirmation", "Yes", "No") != "Yes")
return 0
- var/light = 1
- var/medium = 0.5
- var/heavy = 0.25
for(var/obj/item/weapon/implant/explosive/E in imp_in)
- heavy += 0.25
- medium += 0.5
- light += 1
+ heavy += 0.4
+ medium += 0.8
+ weak += 1.6
+ delay += 7
if(E != src)
qdel(E)
heavy = round(heavy)
medium = round(medium)
- light = round(light)
+ weak = round(weak)
+ imp_in << "You activate your microbomb implant."
+//If the delay is short, just blow up already jeez
+ if(delay <= 7)
+ imp_in.gib()
+ explosion(src,heavy,medium,weak,weak, flame_range = weak)
+ qdel(src)
+ imp_in.visible_message("[imp_in] starts beeping ominously!")
+ playsound(loc, 'sound/items/timer.ogg', 30, 0)
+ sleep(delay/4)
+ if(imp_in.stat)
+ imp_in.visible_message("[imp_in] doubles over in pain!")
+ imp_in.Weaken(7)
+ playsound(loc, 'sound/items/timer.ogg', 30, 0)
+ sleep(delay/4)
+ playsound(loc, 'sound/items/timer.ogg', 30, 0)
+ sleep(delay/4)
+ playsound(loc, 'sound/items/timer.ogg', 30, 0)
+ sleep(delay/4)
imp_in.gib()
- explosion(src,heavy,medium,light,light, flame_range = light)
+ explosion(src,heavy,medium,weak,weak, flame_range = weak)
qdel(src)
/obj/item/weapon/implant/explosive/macro
name = "macrobomb implant"
desc = "And boom goes the weasel. And everything else nearby."
icon_state = "explosive"
+ weak = 16
+ medium = 8
+ heavy = 4
+ delay = 70
/obj/item/weapon/implant/explosive/macro/activate(var/cause)
if(!cause || !imp_in) return 0
if(cause == "action_button" && alert(imp_in, "Are you sure you want to activate your macrobomb implant? This will cause you to explode and gib!", "Macrobomb Implant Confirmation", "Yes", "No") != "Yes")
return 0
+ for(var/obj/item/weapon/implant/explosive/macro/E in imp_in)
+ if(E != src)
+ qdel(E)
+ imp_in << "You activate your macrobomb implant."
+ imp_in.visible_message("[imp_in] starts beeping ominously!")
+ playsound(loc, 'sound/items/timer.ogg', 30, 0)
+ sleep(delay/4)
+ if(imp_in.stat)
+ imp_in.visible_message("[imp_in] doubles over in pain!")
+ imp_in.Weaken(7)
+ playsound(loc, 'sound/items/timer.ogg', 30, 0)
+ sleep(delay/4)
+ playsound(loc, 'sound/items/timer.ogg', 30, 0)
+ sleep(delay/4)
+ playsound(loc, 'sound/items/timer.ogg', 30, 0)
+ sleep(delay/4)
imp_in.gib()
- explosion(src,5,10,20,20, flame_range = 20)
+ explosion(src,heavy,medium,weak,weak, flame_range = weak)
qdel(src)
/obj/item/weapon/implant/chem
diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm
index ff0a719e4bb..60b08e58e64 100644
--- a/code/game/objects/items/weapons/mop.dm
+++ b/code/game/objects/items/weapons/mop.dm
@@ -11,6 +11,7 @@
throw_range = 7
w_class = 3.0
attack_verb = list("mopped", "bashed", "bludgeoned", "whacked")
+ burn_state = 0 //Burnable
var/mopping = 0
var/mopcount = 0
var/mopcap = 5
diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm
index 48809459247..14ddda46e57 100644
--- a/code/game/objects/items/weapons/paint.dm
+++ b/code/game/objects/items/weapons/paint.dm
@@ -10,6 +10,8 @@
item_color = "FFFFFF"
item_state = "paintcan"
w_class = 3.0
+ burn_state = 0 //Burnable
+ burntime = 5
var/paintleft = 10
/obj/item/weapon/paint/red
diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm
index 521f5ab64e7..03c15e6fedb 100644
--- a/code/game/objects/items/weapons/scrolls.dm
+++ b/code/game/objects/items/weapons/scrolls.dm
@@ -9,6 +9,7 @@
throw_speed = 3
throw_range = 7
origin_tech = "bluespace=4"
+ burn_state = 0 //Burnable
/obj/item/weapon/teleportation_scroll/apprentice
name = "lesser scroll of teleportation"
diff --git a/code/game/objects/items/weapons/signs.dm b/code/game/objects/items/weapons/signs.dm
index 15451d602a8..67467ce35c1 100644
--- a/code/game/objects/items/weapons/signs.dm
+++ b/code/game/objects/items/weapons/signs.dm
@@ -5,6 +5,7 @@
force = 5
w_class = 4.0
attack_verb = list("bashed","smacked")
+ burn_state = 0 //Burnable
var/label = ""
var/last_wave = 0
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index d8aed9fdd9d..058ae6c43d8 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -18,6 +18,8 @@
slot_flags = SLOT_BACK //ERROOOOO
max_w_class = 3
max_combined_w_class = 21
+ burn_state = 0 //Burnable
+ burntime = 20
/obj/item/weapon/storage/backpack/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
playsound(src.loc, "rustle", 50, 1, -5)
@@ -34,6 +36,9 @@
icon_state = "holdingpack"
max_w_class = 5
max_combined_w_class = 35
+ burn_state = -1 // NotBurnable
+ var/pshoom = 'sound/items/PSHOOM.ogg'
+ var/alt_sound = 'sound/items/PSHOOM_2.ogg'
/obj/item/weapon/storage/backpack/holding/suicide_act(mob/user)
user.visible_message("[user] is jumping into [src]! It looks like \he's trying to commit suicide.")
@@ -50,6 +55,20 @@
return
return ..()
+/obj/item/weapon/storage/backpack/holding/content_can_dump(atom/dest_object, mob/user)
+ if(Adjacent(user))
+ if(get_dist(user, dest_object) < 8)
+ if(dest_object.storage_contents_dump_act(src, user))
+ if(alt_sound && prob(1))
+ playsound(src, alt_sound, 40, 1)
+ else
+ playsound(src, pshoom, 40, 1)
+ user.Beam(dest_object,icon_state="rped_upgrade",icon='icons/effects/effects.dmi',time=5)
+ return 1
+ user << "The [src.name] buzzes."
+ playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
+ return 0
+
/obj/item/weapon/storage/backpack/holding/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/user)
if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail)
var/safety = alert(user, "You feel this may not be the best idea.", "Put in [name]?", "Proceed", "Abort")
@@ -129,12 +148,14 @@
desc = "It's a special backpack made exclusively for Nanotrasen officers."
icon_state = "captainpack"
item_state = "captainpack"
+ burn_state = -1 //Not Burnable
/obj/item/weapon/storage/backpack/industrial
name = "industrial backpack"
desc = "It's a tough backpack for the daily grind of station life."
icon_state = "engiepack"
item_state = "engiepack"
+ burn_state = -1 //Not Burnable
/obj/item/weapon/storage/backpack/botany
name = "botany backpack"
@@ -159,6 +180,7 @@
desc = "A specially designed backpack. It's fire resistant and smells vaguely of plasma."
icon_state = "toxpack"
item_state = "toxpack"
+ burn_state = -1 //Not Burnable
/obj/item/weapon/storage/backpack/virology
name = "virology backpack"
@@ -175,6 +197,7 @@
name = "leather satchel"
desc = "It's a very fancy satchel made with fine leather."
icon_state = "satchel"
+ burn_state = -1 //Not Burnable
/obj/item/weapon/storage/backpack/satchel/withwallet/New()
..()
@@ -190,6 +213,7 @@
desc = "A tough satchel with extra pockets."
icon_state = "satchel-eng"
item_state = "engiepack"
+ burn_state = -1 //Not Burnable
/obj/item/weapon/storage/backpack/satchel_med
name = "medical satchel"
@@ -220,6 +244,7 @@
desc = "Useful for holding research materials."
icon_state = "satchel-tox"
item_state = "satchel-tox"
+ burn_state = -1 //Not Burnable
/obj/item/weapon/storage/backpack/satchel_hyd
name = "botanist satchel"
@@ -238,6 +263,7 @@
desc = "An exclusive satchel for Nanotrasen officers."
icon_state = "satchel-cap"
item_state = "captainpack"
+ burn_state = -1 //Not Burnable
/obj/item/weapon/storage/backpack/satchel_flat
name = "smuggler's satchel"
@@ -310,6 +336,7 @@
desc = "A large dufflebag for holding extra captainly goods."
icon_state = "duffle-captain"
item_state = "duffle-captain"
+ burn_state = -1 //Not Burnable
/obj/item/weapon/storage/backpack/dufflebag/med
name = "medical dufflebag"
@@ -328,6 +355,7 @@
desc = "A large dufflebag for holding extra tools and supplies."
icon_state = "duffle-eng"
item_state = "duffle-eng"
+ burn_state = -1 //Not Burnable
/obj/item/weapon/storage/backpack/dufflebag/clown
name = "clown's dufflebag"
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index 7519804b005..9790b77e206 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -103,6 +103,7 @@
max_w_class = 3
w_class = 1
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/grown,/obj/item/seeds,/obj/item/weapon/grown)
+ burn_state = 0 //Burnable
////////
@@ -280,6 +281,7 @@
max_w_class = 3
w_class = 4 //Bigger than a book because physics
can_hold = list(/obj/item/weapon/book, /obj/item/weapon/storage/book, /obj/item/weapon/spellbook)
+ burn_state = 0 //Burnable
/*
* Trays - Agouri
@@ -349,3 +351,4 @@
w_class = 1
preposition = "in"
can_hold = list(/obj/item/weapon/reagent_containers/pill, /obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle)
+ burn_state = 0 //Burnable
diff --git a/code/game/objects/items/weapons/storage/book.dm b/code/game/objects/items/weapons/storage/book.dm
index 1efe547141c..dcb45f1fe5d 100644
--- a/code/game/objects/items/weapons/storage/book.dm
+++ b/code/game/objects/items/weapons/storage/book.dm
@@ -6,6 +6,7 @@
throw_speed = 2
throw_range = 5
w_class = 3.0
+ burn_state = 0 //Burnable
var/title = "book"
/obj/item/weapon/storage/book/attack_self(mob/user)
user << "The pages of [title] have been cut out!"
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 936f6e72425..d8ea59ab5f4 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -24,6 +24,7 @@
desc = "It's just an ordinary box."
icon_state = "box"
item_state = "syringe_kit"
+ burn_state = 0 //Burnable
var/foldable = /obj/item/stack/sheet/cardboard
diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm
index 93a6fdc2679..b37091113a6 100644
--- a/code/game/objects/items/weapons/storage/briefcase.dm
+++ b/code/game/objects/items/weapons/storage/briefcase.dm
@@ -11,6 +11,8 @@
max_w_class = 3
max_combined_w_class = 21
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
+ burn_state = 0 //Burnable
+ burntime = 20
/obj/item/weapon/storage/briefcase/New()
..()
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index c7f35dc05a0..5fd3462135d 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -17,6 +17,7 @@
icon = 'icons/obj/food/containers.dmi'
icon_state = "donutbox6"
name = "donut box"
+ burn_state = 0 //Burnable
var/icon_type = "donut"
var/spawn_type = null
diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm
index 5f2e841eff0..a1b73157d55 100644
--- a/code/game/objects/items/weapons/storage/wallets.dm
+++ b/code/game/objects/items/weapons/storage/wallets.dm
@@ -4,6 +4,7 @@
storage_slots = 4
icon_state = "wallet"
w_class = 2
+ burn_state = 0 //Burnable
can_hold = list(
/obj/item/stack/spacecash,
/obj/item/weapon/card,
diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm
index d634d9a832c..d247c0134e8 100644
--- a/code/game/objects/items/weapons/tanks/watertank.dm
+++ b/code/game/objects/items/weapons/tanks/watertank.dm
@@ -362,6 +362,8 @@
V.visible_message("[V] was frozen shut!")
for(var/mob/living/L in T)
L.ExtinguishMob()
+ for(var/obj/item/Item in T)
+ Item.extinguish()
return
/datum/effect/effect/system/freezing_smoke_spread
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index bfda5735a2b..15bee3c691d 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -242,6 +242,7 @@
w_class = 2
flags = NOSHIELD
attack_verb = list("bludgeoned", "whacked", "disciplined")
+ burn_state = 0 //Burnable
/obj/item/weapon/staff/broom
name = "broom"
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index e6a76907189..51df368a08f 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -9,6 +9,10 @@
var/damtype = "brute"
var/force = 0
+ var/burn_state = -1 // -1=fireproof | 0=will burn in fires | 1=currently on fire
+ var/burntime = 10 //How long it takes to burn to ashes, in seconds
+ var/burn_world_time //What world time the object will burn up completely
+
/obj/Destroy()
if(!istype(src, /obj/machinery))
SSobj.processing.Remove(src) // TODO: Have a processing bitflag to reduce on unnecessary loops through the processing lists
@@ -155,4 +159,26 @@
/obj/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user)
var/turf/T = get_turf(src)
- return T.storage_contents_dump_act(src_object, user)
\ No newline at end of file
+ return T.storage_contents_dump_act(src_object, user)
+
+/obj/fire_act(var/global_overlay=1)
+ if(!burn_state)
+ burn_state = 1
+ SSobj.burning += src
+ burn_world_time = world.time + burntime*10
+ if(global_overlay)
+ overlays += fire_overlay
+ return 1
+
+/obj/proc/burn()
+ for(var/obj/item/Item in contents) //Empty out the contents
+ Item.loc = src.loc
+ Item.fire_act() //Set them on fire, too
+ new /obj/effect/decal/cleanable/ash(src.loc)
+ qdel(src)
+
+/obj/proc/extinguish()
+ if(burn_state == 1)
+ burn_state = 0
+ overlays -= fire_overlay
+ SSobj.burning -= src
\ No newline at end of file
diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm
index 495c7b9c394..ae56de30fb6 100644
--- a/code/game/objects/structures/artstuff.dm
+++ b/code/game/objects/structures/artstuff.dm
@@ -9,6 +9,8 @@
icon = 'icons/obj/artstuff.dmi'
icon_state = "easel"
density = 1
+ burn_state = 0 //Burnable
+ burntime = 15
var/obj/item/weapon/canvas/painting = null
@@ -50,6 +52,7 @@ var/global/list/globalBlankCanvases[AMT_OF_CANVASES]
desc = "draw out your soul on this canvas!"
icon = 'icons/obj/artstuff.dmi'
icon_state = "11x11"
+ burn_state = 0 //Burnable
var/whichGlobalBackup = 1 //List index
/obj/item/weapon/canvas/nineteenXnineteen
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index 073ae4e2e53..c27a4f0513e 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -17,6 +17,7 @@ LINEN BINS
throw_range = 2
w_class = 1.0
item_color = "white"
+ burn_state = 0 //Burnable
/obj/item/weapon/bedsheet/attack(mob/living/M, mob/user)
@@ -170,6 +171,8 @@ LINEN BINS
icon = 'icons/obj/structures.dmi'
icon_state = "linenbin-full"
anchored = 1
+ burn_state = 0 //Burnable
+ burntime = 20
var/amount = 10
var/list/sheets = list()
var/obj/item/hidden = null
@@ -191,6 +194,16 @@ LINEN BINS
if(1 to 5) icon_state = "linenbin-half"
else icon_state = "linenbin-full"
+/obj/structure/bedsheetbin/fire_act()
+ if(!amount)
+ return
+ ..()
+
+/obj/structure/bedsheetbin/burn()
+ amount = 0
+ extinguish()
+ update_icon()
+ return
/obj/structure/bedsheetbin/attackby(obj/item/I as obj, mob/user as mob, params)
if(istype(I, /obj/item/weapon/bedsheet))
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index 6ee88dda1bb..f2a83e01012 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -1,3 +1,7 @@
+/obj/structure/flora
+ burn_state = 0 //Burnable
+ burntime = 30
+
//trees
/obj/structure/flora/tree
name = "tree"
@@ -217,6 +221,7 @@
icon_state = "rock1"
icon = 'icons/obj/flora/rocks.dmi'
anchored = 1
+ burn_state = -1 //Not Burnable
/obj/structure/flora/rock/New()
..()
diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm
index a5494427e55..23be1ce7c31 100644
--- a/code/game/objects/structures/mineral_doors.dm
+++ b/code/game/objects/structures/mineral_doors.dm
@@ -242,6 +242,8 @@
hardness = 1
openSound = 'sound/effects/doorcreaky.ogg'
closeSound = 'sound/effects/doorcreaky.ogg'
+ burn_state = 0 //Burnable
+ burntime = 30
/obj/structure/mineral_door/wood/Dismantle(devastated = 0)
if(!devastated)
diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
index af9c059a8f7..1682c22403b 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm
@@ -13,6 +13,8 @@
icon_state = "bed"
can_buckle = 1
buckle_lying = 1
+ burn_state = 0 //Burnable
+ burntime = 30
/obj/structure/stool/bed/alien
name = "resting contraption"
@@ -59,6 +61,7 @@
icon = 'icons/obj/rollerbed.dmi'
icon_state = "down"
anchored = 0
+ burn_state = -1 //Not Burnable
/obj/structure/stool/bed/roller/post_buckle_mob(mob/living/M)
if(M == buckled_mob)
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index 915f56b9ac0..1dea5a15dde 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -3,6 +3,7 @@
desc = "You sit in this. Either by will or force."
icon_state = "chair"
buckle_lying = 0 //you sit in a chair, not lay
+ burn_state = -1 //Not Burnable
/obj/structure/stool/bed/chair/New()
..()
@@ -73,6 +74,10 @@
// Chair types
+/obj/structure/stool/bed/chair/wood
+ burn_state = 0 //Burnable
+ burntime = 20
+
/obj/structure/stool/bed/chair/wood/normal
icon_state = "wooden_chair"
name = "wooden chair"
@@ -96,6 +101,8 @@
desc = "It looks comfy."
icon_state = "comfychair"
color = rgb(255,255,255)
+ burn_state = 0 //Burnable
+ burntime = 30
var/image/armrest = null
/obj/structure/stool/bed/chair/comfy/New()
diff --git a/code/game/objects/structures/table_frames.dm b/code/game/objects/structures/table_frames.dm
index 5196a37fa9d..18288c5f670 100644
--- a/code/game/objects/structures/table_frames.dm
+++ b/code/game/objects/structures/table_frames.dm
@@ -75,6 +75,7 @@
icon_state = "wood_frame"
framestack = /obj/item/stack/sheet/mineral/wood
framestackamount = 2
+ burn_state = 0 //Burnable
/obj/structure/table_frame/wood/attackby(var/obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/wrench))
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index cf8b9476c2f..7258982885d 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -432,6 +432,8 @@
frame = /obj/structure/table_frame/wood
framestack = /obj/item/stack/sheet/mineral/wood
buildstack = /obj/item/stack/sheet/mineral/wood
+ burn_state = 0 //Burnable
+ burntime = 20
/obj/structure/table/wood/poker //No specialties, Just a mapping object.
name = "gambling table"
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index d62a69d769f..240f9e63517 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -229,6 +229,7 @@
//Yes, showers are super powerful as far as washing goes.
/obj/machinery/shower/proc/wash(atom/movable/O)
if(!on) return
+
if(ismob(O))
mobpresent += 1
check_heat(O)
@@ -303,6 +304,13 @@
else
O.clean_blood()
+ else
+ O.clean_blood()
+
+ if(istype(O,/obj/item))
+ var/obj/item/Item = O
+ Item.extinguish()
+
if(isturf(loc))
var/turf/tile = loc
loc.clean_blood()
@@ -310,7 +318,6 @@
if(is_cleanable(E))
qdel(E)
-
/obj/machinery/shower/process()
if(!on || !mobpresent) return
for(var/mob/living/carbon/C in loc)
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index d6ca52c46a3..14a287c31cf 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -1,38 +1,7 @@
-/client/var/adminhelptimerid = 0
+/proc/keywords_lookup(var/msg)
-/client/proc/giveadminhelpverb()
- src.verbs |= /client/verb/adminhelp
- adminhelptimerid = 0
-
-//This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE!
-var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as")
-
-
-
-/client/verb/adminhelp(msg as text)
- set category = "Admin"
- set name = "Adminhelp"
-
- if(say_disabled) //This is here to try to identify lag problems
- usr << "Speech is currently admin-disabled."
- return
-
- //handle muting and automuting
- if(prefs.muted & MUTE_ADMINHELP)
- src << "Error: Admin-PM: You cannot send adminhelps (Muted)."
- return
- if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
- return
-
- //clean the input msg
- if(!msg) return
- msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
- if(!msg) return
- var/original_msg = msg
-
- //remove out adminhelp verb temporarily to prevent spamming of admins.
- src.verbs -= /client/verb/adminhelp
- adminhelptimerid = addtimer(src,"giveadminhelpverb",1200) //2 minute cooldown of admin helps
+ //This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE!
+ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as", "i")
//explode the input msg into a list
var/list/msglist = text2list(msg, " ")
@@ -83,15 +52,50 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
mobs_found += found
if(!ai_found && isAI(found))
ai_found = 1
- msg += "[original_word] (?) (FLW) "
+ msg += "[original_word](?|F) "
continue
msg += "[original_word] "
+ return msg
+
+
+/client/var/adminhelptimerid = 0
+
+/client/proc/giveadminhelpverb()
+ src.verbs |= /client/verb/adminhelp
+ adminhelptimerid = 0
+
+/client/verb/adminhelp(msg as text)
+ set category = "Admin"
+ set name = "Adminhelp"
+
+ if(say_disabled) //This is here to try to identify lag problems
+ usr << "Speech is currently admin-disabled."
+ return
+
+ //handle muting and automuting
+ if(prefs.muted & MUTE_ADMINHELP)
+ src << "Error: Admin-PM: You cannot send adminhelps (Muted)."
+ return
+ if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
+ return
+
+ //clean the input msg
+ if(!msg) return
+ msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
+ if(!msg) return
+ var/original_msg = msg
+
+ //remove our adminhelp verb temporarily to prevent spamming of admins.
+ src.verbs -= /client/verb/adminhelp
+ adminhelptimerid = addtimer(src,"giveadminhelpverb",1200) //2 minute cooldown of admin helps
+
+ msg = keywords_lookup(msg)
if(!mob) return //this doesn't happen
var/ref_mob = "\ref[mob]"
var/ref_client = "\ref[src]"
- msg = "HELP: [key_name_admin(src)] (?) (PP) (VV) (SM) (FLW) (TP)[ai_found ? " (CL)" : ""] (REJT): [msg]"
+ msg = "HELP: [key_name(src)] (?) (PP) (VV) (SM) (FLW) (TP) (REJT): [msg]"
//send this msg to all admins
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index 944677f2350..e79649e7dc4 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -32,6 +32,26 @@
cmd_admin_pm(targets[target],null)
feedback_add_details("admin_verb","APM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+/client/proc/cmd_ahelp_reply(whom)
+ if(prefs.muted & MUTE_ADMINHELP)
+ src << "Error: Admin-PM: You are unable to use admin PM-s (muted)."
+ return
+ var/client/C
+ if(istext(whom))
+ if(cmptext(copytext(whom,1,2),"@"))
+ whom = findStealthKey(whom)
+ C = directory[whom]
+ else if(istype(whom,/client))
+ C = whom
+ if(!C)
+ if(holder) src << "Error: Admin-PM: Client not found."
+ return
+ message_admins("[key_name_admin(src)] has started replying to [key_name(C, 0, 0)]'s admin help.")
+ var/msg = input(src,"Message:", "Private message to [key_name(C, 0, 0)]") as text|null
+ if (!msg)
+ message_admins("[key_name_admin(src)] has cancelled their reply to [key_name(C, 0, 0)]'s admin help.")
+ return
+ cmd_admin_pm(whom, msg)
//takes input from cmd_admin_pm_context, cmd_admin_pm_panel or /client/Topic and sends them a PM.
//Fetching a message if needed. src is the sender and C is the target client
@@ -71,14 +91,15 @@
if(!msg) return
msg = emoji_parse(msg)
+ var/keywordparsedmsg = keywords_lookup(msg)
if(C.holder)
if(holder) //both are admins
- C << "Admin PM from-[key_name(src, C, 1)]: [msg]"
- src << "Admin PM to-[key_name(C, src, 1)]: [msg]"
+ C << "Admin PM from-[key_name(src, C, 1)]: [keywordparsedmsg]"
+ src << "Admin PM to-[key_name(C, src, 1)]: [keywordparsedmsg]"
else //recipient is an admin but sender is not
- C << "Reply PM from-[key_name(src, C, 1)]: [msg]"
+ C << "Reply PM from-[key_name(src, C, 1)]: [keywordparsedmsg]"
src << "PM to-Admins: [msg]"
//play the recieving admin the adminhelp sound (if they have them enabled)
@@ -117,4 +138,4 @@
//we don't use message_admins here because the sender/receiver might get it too
for(var/client/X in admins)
if(X.key!=key && X.key!=C.key) //check client/X is an admin and isn't the sender or recipient
- X << "PM: [key_name(src, X, 0)]->[key_name(C, X, 0)]: \blue [msg]" //inform X
+ X << "PM: [key_name(src, X, 0)]->[key_name(C, X, 0)]: \blue [keywordparsedmsg]" //inform X
diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm
index 1e077bd66e9..ff1e0cf97a3 100644
--- a/code/modules/admin/verbs/adminsay.dm
+++ b/code/modules/admin/verbs/adminsay.dm
@@ -8,7 +8,7 @@
if(!msg) return
log_admin("[key_name(src)] : [msg]")
-
+ msg = keywords_lookup(msg)
if(check_rights(R_ADMIN,0))
msg = "ADMIN: [key_name(usr, 1)] (FLW): [msg]"
admins << msg
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index a7cc46fec17..f1024432765 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -31,6 +31,9 @@
//Admin PM
if(href_list["priv_msg"])
+ if (href_list["ahelp_reply"])
+ cmd_ahelp_reply(href_list["priv_msg"])
+ return
cmd_admin_pm(href_list["priv_msg"],null)
return
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index c655ee34d45..e410f6dde59 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -1,5 +1,6 @@
/obj/item/clothing
name = "clothing"
+ burn_state = 0 //Burnable
var/flash_protect = 0 //Malk: What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS
var/tint = 0 //Malk: Sets the item's level of visual impairment tint, normally set to the same as flash_protect
var/up = 0 // but seperated to allow items to protect but not impair vision, like space helmets
@@ -23,6 +24,7 @@
w_class = 1.0
throwforce = 0
slot_flags = SLOT_EARS
+ burn_state = -1 //Not Burnable
/obj/item/clothing/ears/earmuffs
name = "earmuffs"
@@ -32,7 +34,7 @@
flags = EARBANGPROTECT
strip_delay = 15
put_on_delay = 25
-
+ burn_state = 0 //Burnable
//Glasses
/obj/item/clothing/glasses
@@ -48,7 +50,7 @@
var/list/icon/current = list() //the current hud icons
strip_delay = 20
put_on_delay = 25
-
+ burn_state = -1 //Not Burnable
/*
SEE_SELF // can see self, no matter what
SEE_MOBS // can see all mobs, no matter what
@@ -180,6 +182,7 @@ BLIND // can't see anything
strip_delay = 50
put_on_delay = 50
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
+ burn_state = -1 //Not Burnable
/obj/item/clothing/suit/space
name = "space suit"
@@ -201,6 +204,7 @@ BLIND // can't see anything
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
strip_delay = 80
put_on_delay = 80
+ burn_state = -1 //Not Burnable
//Under clothing
/obj/item/clothing/under
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index 9d7bf51d33c..18f5c7937f4 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -6,6 +6,7 @@
siemens_coefficient = 0
permeability_coefficient = 0.05
item_color="yellow"
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/gloves/color/yellow/fake
desc = "These gloves will protect the wearer from electric shock. They don't feel like rubber..."
@@ -19,6 +20,7 @@
siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
permeability_coefficient = 0.05
item_color="yellow"
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/gloves/color/fyellow/New()
siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5)
@@ -33,7 +35,7 @@
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
-
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/gloves/color/black/hos
item_color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
@@ -148,6 +150,7 @@
permeability_coefficient = 0.01
item_color="white"
transfer_prints = TRUE
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/gloves/color/latex/nitrile
name = "nitrile gloves"
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index 317ae88ac81..257394e13ce 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -21,6 +21,7 @@
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
+ burn_state = -1 //Not Burnable
/obj/item/clothing/gloves/combat
name = "combat gloves"
@@ -33,4 +34,5 @@
cold_protection = HANDS
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
heat_protection = HANDS
- max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
\ No newline at end of file
+ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
+ burn_state = -1 //Won't burn in fires
\ No newline at end of file
diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm
index 4ada082a0fa..7dad46544c3 100644
--- a/code/modules/clothing/head/collectable.dm
+++ b/code/modules/clothing/head/collectable.dm
@@ -58,6 +58,7 @@
desc = "A collectable welding helmet. Now with 80% less lead! Not for actual welding. Any welding done while wearing this helmet is done so at the owner's own risk!"
icon_state = "welding"
item_state = "welding"
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/head/collectable/slime
name = "collectable slime hat"
@@ -110,9 +111,11 @@
desc = "Go Red! I mean Green! I mean Red! No Green!"
icon_state = "thunderdome"
item_state = "thunderdome"
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/head/collectable/swat
name = "collectable SWAT helmet"
desc = "That's not real blood. That's red paint." //Reference to the actual description
icon_state = "swat"
- item_state = "swat"
\ No newline at end of file
+ item_state = "swat"
+ burn_state = -1 //Won't burn in fires
\ No newline at end of file
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index cf491f337dd..16d33da43c8 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -9,6 +9,7 @@
armor = list(melee = 15, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20)
flags_inv = 0
action_button_name = "Toggle Helmet Light"
+ burn_state = -1 //Won't burn in fires
attack_self(mob/user)
if(!isturf(user.loc))
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 8f5cc495877..945860157ea 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -11,6 +11,7 @@
heat_protection = HEAD
max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT
strip_delay = 60
+ burn_state = -1 //Won't burn in fires
var/obj/machinery/camera/portable/helmetCam = null
var/spawnWithHelmetCam = 0
var/canAttachCam = 0
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index e7fc2072172..28f5f5c3b0e 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -57,13 +57,6 @@
flags = BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
-/obj/item/clothing/head/that
- name = "sturdy top-hat"
- desc = "It's an amish looking armored top hat."
- icon_state = "tophat"
- item_state = "that"
- flags_inv = 0
-
/obj/item/clothing/head/cardborg
name = "cardborg helmet"
desc = "A helmet made out of a box."
@@ -215,6 +208,7 @@
throw_range = 5
w_class = 2.0
attack_verb = list("warned", "cautioned", "smashed")
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/head/santa
name = "santa hat"
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index fa58e31116a..080c4a50100 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -27,6 +27,7 @@
action_button_name = "Toggle Welding Helmet"
visor_flags = HEADCOVERSEYES | HEADCOVERSMOUTH
visor_flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/head/welding/attack_self()
toggle()
diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm
index a3b54c55779..ae6dd7f7d6f 100644
--- a/code/modules/clothing/masks/breath.dm
+++ b/code/modules/clothing/masks/breath.dm
@@ -12,6 +12,7 @@
action_button_name = "Adjust Breath Mask"
ignore_maskadjust = 0
flags_cover = MASKCOVERSMOUTH
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/mask/breath/attack_self(var/mob/user)
adjustmask(user)
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index f1d415357bf..0ba8381ecba 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -9,6 +9,7 @@
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH
+ burn_state = -1 //Won't burn in fires
// **** Welding gas mask ****
@@ -228,6 +229,7 @@
icon_state = "clown"
item_state = "clown_hat"
flags_cover = MASKCOVERSEYES
+ burn_state = 0 //Burnable
/obj/item/clothing/mask/gas/clown_hat/attack_self(mob/user)
@@ -252,6 +254,7 @@
icon_state = "sexyclown"
item_state = "sexyclown"
flags_cover = MASKCOVERSEYES
+ burn_state = 0 //Burnable
/obj/item/clothing/mask/gas/mime
name = "mime mask"
@@ -260,6 +263,7 @@
icon_state = "mime"
item_state = "mime"
flags_cover = MASKCOVERSEYES
+ burn_state = 0 //Burnable
/obj/item/clothing/mask/gas/monkeymask
name = "monkey mask"
@@ -268,6 +272,7 @@
icon_state = "monkeymask"
item_state = "monkeymask"
flags_cover = MASKCOVERSEYES
+ burn_state = 0 //Burnable
/obj/item/clothing/mask/gas/sexymime
name = "sexy mime mask"
@@ -276,6 +281,7 @@
icon_state = "sexymime"
item_state = "sexymime"
flags_cover = MASKCOVERSEYES
+ burn_state = 0 //Burnable
/obj/item/clothing/mask/gas/death_commando
name = "Death Commando Mask"
@@ -286,10 +292,12 @@
name = "cyborg visor"
desc = "Beep boop."
icon_state = "death"
+ burn_state = 0 //Burnable
/obj/item/clothing/mask/gas/owl_mask
name = "owl mask"
desc = "Twoooo!"
flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS
icon_state = "owl"
- flags_cover = MASKCOVERSEYES
\ No newline at end of file
+ flags_cover = MASKCOVERSEYES
+ burn_state = 0 //Burnable
\ No newline at end of file
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index 8d742f983db..843f69e25c5 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -8,7 +8,7 @@
action_button_name = "Toggle Magboots"
strip_delay = 70
put_on_delay = 70
-
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/shoes/magboots/verb/toggle()
set name = "Toggle Magboots"
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 1a0a0a4f98c..0bebe7a3ee0 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -15,6 +15,7 @@
permeability_coefficient = 0.05
flags = NOSLIP
origin_tech = "syndicate=3"
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/shoes/sneakers/mime
name = "mime shoes"
@@ -35,6 +36,7 @@
permeability_coefficient = 0.01
flags = NOSLIP
armor = list(melee = 40, bullet = 30, laser = 25, energy = 25, bomb = 50, bio = 30, rad = 30)
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/shoes/sandal
desc = "A pair of rather plain, wooden sandals."
@@ -58,6 +60,7 @@
slowdown = SHOES_SLOWDOWN+1
strip_delay = 50
put_on_delay = 50
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/shoes/clown_shoes
desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!"
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 817244af5c5..d3b65c48e3a 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -7,6 +7,7 @@
max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
strip_delay = 60
put_on_delay = 40
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/suit/armor/vest
name = "armor"
@@ -45,6 +46,7 @@
cold_protection = CHEST|GROIN|ARMS|HANDS
heat_protection = CHEST|GROIN|ARMS|HANDS
strip_delay = 70
+ burn_state = 0 //Burnable
/obj/item/clothing/suit/armor/vest/warden/alt
name = "warden's armored jacket"
@@ -112,7 +114,7 @@
desc = "An armored vest with a detective's badge on it."
icon_state = "detective-armor"
allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/lighter,/obj/item/device/detective_scanner,/obj/item/device/taperecorder)
-
+ burn_state = 0 //Burnable
//Reactive armor
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
index 1cf684ab76d..093b14d0a1f 100644
--- a/code/modules/clothing/suits/bio.dm
+++ b/code/modules/clothing/suits/bio.dm
@@ -8,6 +8,7 @@
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
unacidable = 1
+ burn_state = -1 //Not Burnable
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
/obj/item/clothing/suit/bio_suit
@@ -27,6 +28,7 @@
strip_delay = 70
put_on_delay = 70
unacidable = 1
+ burn_state = -1 //Not Burnable
//Standard biosuit, orange stripe
/obj/item/clothing/head/bio_hood/general
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 7bad9b13400..1ae33b0de80 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -100,6 +100,7 @@
item_state = "hazard"
blood_overlay_type = "armor"
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/device/t_scanner,)
+ burn_state = -1 //Won't burn in fires
//Lawyer
/obj/item/clothing/suit/toggle/lawyer
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 08d0b4047d8..015e70defc7 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -16,6 +16,7 @@
blood_overlay_type = "armor"
body_parts_covered = CHEST
allowed = list (/obj/item/weapon/gun/energy/laser/bluetag)
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/suit/redtag
name = "red laser tag armor"
@@ -25,6 +26,7 @@
blood_overlay_type = "armor"
body_parts_covered = CHEST
allowed = list (/obj/item/weapon/gun/energy/laser/redtag)
+ burn_state = -1 //Won't burn in fires
/*
* Costume
@@ -88,7 +90,7 @@
w_class = 3
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
-
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/suit/hastur
name = "\improper Hastur's robe"
@@ -236,7 +238,8 @@
desc = "Pompadour not included."
icon_state = "leatherjacket"
item_state = "hostrench"
-
+ burn_state = -1 //Not Burnable
+ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT
/obj/item/clothing/suit/jacket/leather/overcoat
name = "leather overcoat"
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index a4d69048234..2236cf7f230 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -28,6 +28,7 @@
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
strip_delay = 60
put_on_delay = 60
+ burn_state = -1 //Not Burnable
/obj/item/clothing/suit/fire/firefighter
icon_state = "firesuit"
@@ -65,7 +66,7 @@
strip_delay = 70
put_on_delay = 70
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
-
+ burn_state = -1 //Not Burnable
/obj/item/clothing/suit/bomb_suit
name = "bomb suit"
@@ -86,7 +87,7 @@
min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT
strip_delay = 70
put_on_delay = 70
-
+ burn_state = -1 //Not Burnable
/obj/item/clothing/head/bomb_hood/security
@@ -111,7 +112,7 @@
strip_delay = 60
put_on_delay = 60
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
-
+ burn_state = -1 //Not Burnable
/obj/item/clothing/suit/radiation
name = "radiation suit"
@@ -129,3 +130,4 @@
strip_delay = 60
put_on_delay = 60
flags_inv = HIDEJUMPSUIT
+ burn_state = -1 //Not Burnable
\ No newline at end of file
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index dd22a1e9f5c..299daf63152 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -8,6 +8,7 @@
strip_delay = 50
put_on_delay = 50
unacidable = 1
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/head/wizard/red
name = "red wizard hat"
@@ -63,7 +64,7 @@
strip_delay = 50
put_on_delay = 50
unacidable = 1
-
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/suit/wizrobe/red
name = "red wizard robe"
@@ -117,6 +118,7 @@
permeability_coefficient = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
unacidable = 0
+ burn_state = 0 //Burnable
/obj/item/clothing/head/wizard/marisa/fake
name = "witch hat"
@@ -126,6 +128,7 @@
permeability_coefficient = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
unacidable = 0
+ burn_state = 0 //Burnable
/obj/item/clothing/suit/wizrobe/marisa/fake
name = "witch robe"
@@ -136,3 +139,4 @@
permeability_coefficient = 1
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
unacidable = 0
+ burn_state = 0 //Burnable
\ No newline at end of file
diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm
index 20acefb09d6..f550d51edd5 100644
--- a/code/modules/clothing/under/chameleon.dm
+++ b/code/modules/clothing/under/chameleon.dm
@@ -9,6 +9,7 @@
origin_tech = "syndicate=3"
var/list/clothing_choices = list()
var/malfunctioning = 0
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/under/chameleon/New()
..()
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index 84355443233..c5bc98a2cc1 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -16,6 +16,7 @@
icon_state = "black"
item_state = "bl_suit"
item_color = "black"
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/under/color/grey
name = "grey jumpsuit"
diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm
index bdd52e6ba23..57709b5bdfe 100644
--- a/code/modules/clothing/under/jobs/engineering.dm
+++ b/code/modules/clothing/under/jobs/engineering.dm
@@ -6,6 +6,7 @@
item_state = "gy_suit"
item_color = "chief"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/under/rank/atmospheric_technician
desc = "It's a jumpsuit worn by atmospheric technicians."
@@ -13,6 +14,7 @@
icon_state = "atmos"
item_state = "atmos_suit"
item_color = "atmos"
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/under/rank/engineer
desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding."
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 42dae95f077..6d19ef1244f 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -37,6 +37,7 @@
item_state = "armor"
can_adjust = 0
strip_delay = 100
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/under/waiter
name = "waiter's outfit"
@@ -115,6 +116,7 @@
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
can_adjust = 0
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/under/acj
name = "administrative cybernetic jumpsuit"
@@ -131,6 +133,7 @@
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
can_adjust = 0
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/under/owl
name = "owl uniform"
@@ -338,6 +341,7 @@
body_parts_covered = CHEST|GROIN|ARMS
fitted = NO_FEMALE_UNIFORM
can_adjust = 0
+ burn_state = -1 //Won't burn in fires
/obj/item/clothing/under/sundress
name = "sundress"
diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm
index 1dda5f2ebd2..e828b3fe049 100644
--- a/code/modules/clothing/under/ties.dm
+++ b/code/modules/clothing/under/ties.dm
@@ -84,6 +84,7 @@
desc = "A bronze medal."
icon_state = "bronze"
item_color = "bronze"
+ burn_state = -1 //Won't burn in fires
//Pinning medals on people
/obj/item/clothing/tie/medal/attack(mob/living/carbon/human/M, mob/living/user)
diff --git a/code/modules/food&drinks/drinks/drinks.dm b/code/modules/food&drinks/drinks/drinks.dm
index 1f07766a523..21a17114618 100644
--- a/code/modules/food&drinks/drinks/drinks.dm
+++ b/code/modules/food&drinks/drinks/drinks.dm
@@ -10,6 +10,7 @@
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,25)
volume = 50
+ burn_state = -1
/obj/item/weapon/reagent_containers/food/drinks/New()
..()
diff --git a/code/modules/food&drinks/drinks/drinks/drinkingglass.dm b/code/modules/food&drinks/drinks/drinks/drinkingglass.dm
index 911362474c1..d145ef39fb3 100644
--- a/code/modules/food&drinks/drinks/drinks/drinkingglass.dm
+++ b/code/modules/food&drinks/drinks/drinks/drinkingglass.dm
@@ -6,6 +6,20 @@
icon_state = "glass_empty"
amount_per_transfer_from_this = 10
volume = 50
+ burn_state = 0 //Burnable
+ burntime = 5
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fire_act()
+ if(!reagents.total_volume)
+ return
+ ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/burn()
+ reagents.total_volume = 0 //Burns away all the alcohol :(
+ reagents.reagent_list.Cut()
+ on_reagent_change()
+ extinguish()
+ return
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/on_reagent_change()
overlays.Cut()
diff --git a/code/modules/food&drinks/food.dm b/code/modules/food&drinks/food.dm
index 20f54c684eb..5a7dbde5102 100644
--- a/code/modules/food&drinks/food.dm
+++ b/code/modules/food&drinks/food.dm
@@ -4,6 +4,7 @@
/obj/item/weapon/reagent_containers/food
possible_transfer_amounts = null
volume = 50 //Sets the default container amount for all food items.
+ burn_state = 0 //Burnable
/obj/item/weapon/reagent_containers/food/New()
..()
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 38c9be4e471..8fe33dc7e58 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -20,6 +20,7 @@
icon = 'icons/obj/hydroponics/harvest.dmi'
potency = -1
dried_type = -1 //bit different. saves us from having to define each stupid grown's dried_type as itself. If you don't want a plant to be driable (watermelons) set this to null in the time definition.
+ burn_state = 0 //Burnable
/obj/item/weapon/reagent_containers/food/snacks/grown/New(newloc, new_potency = 50)
..()
diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm
index 07ee7c17a2e..f0ca0943691 100644
--- a/code/modules/hydroponics/growninedible.dm
+++ b/code/modules/hydroponics/growninedible.dm
@@ -5,6 +5,7 @@
/obj/item/weapon/grown // Grown weapons
name = "grown_weapon"
icon = 'icons/obj/hydroponics/harvest.dmi'
+ burn_state = 0 //Burnable
var/seed = null
var/plantname = ""
var/product //a type path
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 0e491e575bf..662f76cb686 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -7,6 +7,7 @@
icon = 'icons/obj/hydroponics/seeds.dmi'
icon_state = "seed" //Unknown plant seed - these shouldn't exist in-game.
w_class = 1 //Pocketable.
+ burn_state = 0 //Burnable
var/plantname = "Plants" //Name of plant when planted.
var/product //A type path. The thing that is created when the plant is harvested.
var/species = "" //Used to update icons. Should match the name in the sprites.
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index c3e1af939be..96dc3f1b9a1 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -17,6 +17,8 @@
anchored = 0
density = 1
opacity = 0
+ burn_state = 0 //Burnable
+ burntime = 30
var/state = 0
var/list/allowed_books = list(/obj/item/weapon/book, /obj/item/weapon/spellbook, /obj/item/weapon/storage/book) //Things allowed in the bookcase
@@ -165,6 +167,7 @@
throw_range = 5
w_class = 3 //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever)
attack_verb = list("bashed", "whacked", "educated")
+ burn_state = 0 //Burnable
var/dat //Actual page content
var/due_date = 0 //Game time in 1/10th seconds
var/author //Who wrote the thing, can be changed by pen or PC. It is not automatically assigned
diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm
index e9befa30d43..a8eefeb5bfc 100644
--- a/code/modules/mining/money_bag.dm
+++ b/code/modules/mining/money_bag.dm
@@ -8,6 +8,8 @@
force = 10.0
throwforce = 0
w_class = 4.0
+ burn_state = 0 //Burnable
+ burntime = 20
/obj/item/weapon/moneybag/attack_hand(user as mob)
var/amt_gold = 0
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index ca9468d1986..b99a78d7e9e 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -116,17 +116,17 @@
gib()
return
else
+ shred_clothing(1,150)
var/atom/target = get_edge_target_turf(src, get_dir(src, get_step_away(src, src)))
throw_at(target, 200, 4)
- //return
-// var/atom/target = get_edge_target_turf(user, get_dir(src, get_step_away(user, src)))
- //user.throw_at(target, 200, 4)
if (2.0)
b_loss += 60
f_loss += 60
+ shred_clothing(1,50)
+
if (prob(getarmor(null, "bomb")))
b_loss = b_loss/1.5
f_loss = f_loss/1.5
@@ -140,6 +140,8 @@
b_loss += 30
if (prob(getarmor(null, "bomb")))
b_loss = b_loss/2
+ else
+ shred_clothing(1,10)
if (!istype(ears, /obj/item/clothing/ears/earmuffs))
adjustEarDamage(15,60)
if (prob(50))
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index b6cb6f5181b..df2c627615c 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -10,9 +10,10 @@
total_brute += O.brute_dam
total_burn += O.burn_dam
health = maxHealth - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute
- //TODO: fix husking
if( ((maxHealth - total_burn) < config.health_threshold_dead) && stat == DEAD )
ChangeToHusk()
+ if(bodytemperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
+ shred_clothing()
med_hud_set_health()
med_hud_set_status()
return
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 1a4cd41351c..a4c1a29a2aa 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -390,3 +390,83 @@
src << "You are trying to equip this item to an unsupported inventory slot. Report this to a coder!"
return
+//Cycles through all clothing slots and tests them for destruction
+/mob/living/carbon/human/proc/shred_clothing(var/bomb,var/shock)
+ var/covered_parts //The body parts that are protected by exterior clothing/armor
+ var/head_absorbed = 0 //How much of the shock the headgear absorbs when it is shredded. -1=it survives
+ var/suit_absorbed = 0 //How much of the shock the exosuit absorbs when it is shredded. -1=it survives
+
+ //Backpacks can never be protected but are annoying as fuck to lose, so they get a lower chance to be shredded
+ if(back)
+ back.shred(bomb,shock-30,src)
+
+ if(head)
+ covered_parts |= head.flags_inv
+ head_absorbed = head.shred(bomb,shock,src)
+ if(wear_mask)
+ var/absorbed = ((covered_parts & HIDEMASK) ? head_absorbed : 0) //Check if clothing covering this part absorbed any of the shock
+ if(!(absorbed < 0))
+ //Masks can be used to shield other parts, but are simplified to simply add their absorbsion to the head armor if it covers the face
+ var/mask_absorbed = wear_mask.shred(bomb,shock-absorbed,src)
+ if(wear_mask.flags_inv & HIDEFACE)
+ covered_parts |= wear_mask.flags_inv
+ if(mask_absorbed < 0) //If the mask didn't get shredded, everything else on the head is protected
+ head_absorbed = -1
+ else
+ head_absorbed += mask_absorbed
+ if(ears)
+ var/absorbed = ((covered_parts & HIDEEARS) ? head_absorbed : 0)
+ if(!(absorbed < 0))
+ ears.shred(bomb,shock-absorbed,src)
+ if(glasses)
+ var/absorbed = ((covered_parts & HIDEEYES) ? head_absorbed : 0)
+ if(!(absorbed < 0))
+ glasses.shred(bomb,shock-absorbed,src)
+
+ if(wear_suit)
+ covered_parts |= wear_suit.flags_inv
+ suit_absorbed = wear_suit.shred(bomb,shock,src)
+ if(gloves)
+ var/absorbed = ((covered_parts & HIDEGLOVES) ? suit_absorbed : 0)
+ if(!(absorbed < 0))
+ gloves.shred(bomb,shock-absorbed,src)
+ if(shoes)
+ var/absorbed = ((covered_parts & HIDESHOES) ? suit_absorbed : 0)
+ if(!(absorbed < 0))
+ shoes.shred(bomb,shock-absorbed,src)
+ if(w_uniform)
+ var/absorbed = ((covered_parts & HIDEJUMPSUIT) ? suit_absorbed : 0)
+ if(!(absorbed < 0))
+ w_uniform.shred(bomb,shock-absorbed,src)
+
+/obj/item/proc/shred(var/bomb,var/shock,var/mob/living/carbon/human/Human)
+ var/shredded
+
+ if(!bomb)
+ if(burn_state != -1)
+ shredded = 1 //No heat protection, it burns
+ else
+ shredded = -1 //Heat protection = Fireproof
+
+ else if(shock > 0)
+ if(prob(min(90,max(10,shock))))
+ shredded = armor["bomb"] + 10 //It gets shredded, but it also absorbs the shock the clothes underneath would recieve by this amount
+ else
+ shredded = -1 //It survives explosion
+
+ if(shredded > 0)
+ if(Human) //Unequip if equipped
+ Human.unEquip(src)
+
+ if(bomb)
+ for(var/obj/item/Item in contents) //Empty out the contents
+ Item.loc = src.loc
+ spawn(1) //so the shreds aren't instantly deleted by the explosion
+ var/obj/effect/decal/cleanable/shreds/Shreds = new(loc)
+ Shreds.name = "shredded [src.name]"
+ Shreds.desc = "The sad remains of what used to be a glorious [src.name]."
+ qdel(src)
+ else
+ burn()
+
+ return shredded
\ No newline at end of file
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index 8ae11c8f83c..46ddcd420fd 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -10,7 +10,7 @@
var/obj/item/weapon/pen/haspen //The stored pen.
var/obj/item/weapon/paper/toppaper //The topmost piece of paper.
slot_flags = SLOT_BELT
-
+ burn_state = 0 //Burnable
/obj/item/weapon/clipboard/New()
update_icon()
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index 6f725e04187..1e632fa976a 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -5,6 +5,7 @@
icon_state = "folder"
w_class = 2
pressure_resistance = 2
+ burn_state = 0 //Burnable
/obj/item/weapon/folder/blue
desc = "A blue folder."
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index df5d9101500..411f5de8522 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -18,6 +18,8 @@
pressure_resistance = 0
slot_flags = SLOT_HEAD
body_parts_covered = HEAD
+ burn_state = 0 //Burnable
+ burntime = 5
var/info //What's actually written on the paper.
var/info_links //A different version of the paper which includes html links at fields and EOF
@@ -26,7 +28,6 @@
var/list/stamped
var/rigged = 0
var/spam_flag = 0
- var/burning = 0 //Whether or not the paper is on fire
/obj/item/weapon/paper/New()
@@ -39,6 +40,9 @@
/obj/item/weapon/paper/update_icon()
+ if(burn_state == 1)
+ icon_state = "paper_onfire"
+ return
if(info)
icon_state = "paper_words"
return
@@ -89,15 +93,6 @@
spam_flag = 0
-/obj/item/weapon/paper/attack_hand()
- var/mob/living/carbon/M = usr
- if(burning)
- M << "Picking up a burning paper seems awfully stupid."
- return //Doesn't make any sense to pick up a burning paper
- else //Probably isn't necessary but it's safer
- ..()
-
-
/obj/item/weapon/paper/attack_ai(mob/living/silicon/ai/user)
var/dist
if(istype(user) && user.current) //is AI
@@ -278,7 +273,7 @@
/obj/item/weapon/paper/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params)
..()
- if(burning)
+ if(burn_state == 1)
return
if(is_blind(user))
@@ -325,27 +320,21 @@
user.unEquip(src)
user.visible_message("[user] lights [src] ablaze with [P]!", "You light [src] on fire!")
- burn(0, 100)
+ fire_act()
add_fingerprint(user)
/obj/item/weapon/paper/fire_act()
- burn(1, 50)
-
-/obj/item/weapon/paper/proc/burn(var/showmsg, var/burntime)
- if (burning)
- return
- if(showmsg)
- src.visible_message("[src] catches on fire.")
- burning = 1
+ ..(0)
icon_state = "paper_onfire"
info = "[stars(info)]"
- spawn(burntime) //7 seconds
- src.visible_message("[src] burns away, leaving behind a pile of ashes.")
- new /obj/effect/decal/cleanable/ash(src.loc)
- qdel(src)
+
+
+/obj/item/weapon/paper/extinguish()
+ ..()
+ update_icon()
/*
* Premade paper
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index dd672a6d11c..568680b5d45 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -8,9 +8,20 @@
throw_speed = 3
throw_range = 7
pressure_resistance = 8
+ burn_state = 0 //Burnable
var/amount = 30 //How much paper is in the bin.
var/list/papers = new/list() //List of papers put in the bin for reference.
+/obj/item/weapon/paper_bin/fire_act()
+ if(!amount)
+ return
+ ..()
+
+/obj/item/weapon/paper_bin/burn()
+ amount = 0
+ extinguish()
+ update_icon()
+ return
/obj/item/weapon/paper_bin/MouseDrop(atom/over_object)
var/mob/M = usr
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 0832ab226f3..d8312036260 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -17,7 +17,7 @@
icon_state = "film"
item_state = "electropack"
w_class = 1.0
-
+ burn_state = 0 //Burnable
/*
* Photo
@@ -28,6 +28,8 @@
icon_state = "photo"
item_state = "paper"
w_class = 1.0
+ burn_state = 0 //Burnable
+ burntime = 5
var/icon/img //Big photo image
var/scribble //Scribble on the back.
var/blueprints = 0 //Does it include the blueprints?
@@ -92,7 +94,7 @@
icon_state = "album"
item_state = "briefcase"
can_hold = list(/obj/item/weapon/photo)
-
+ burn_state = 0 //Burnable
/*
* Camera
diff --git a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm
index 270ddfdabb6..5a3f47db923 100644
--- a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm
@@ -144,6 +144,11 @@
/datum/reagent/water/reaction_obj(var/obj/O, var/volume)
src = null
+
+ if(istype(O,/obj/item))
+ var/obj/item/Item = O
+ Item.extinguish()
+
// Monkey cube
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube))
var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
@@ -151,7 +156,7 @@
cube.Expand()
// Dehydrated carp
- if(istype(O,/obj/item/toy/carpplushie/dehy_carp))
+ else if(istype(O,/obj/item/toy/carpplushie/dehy_carp))
var/obj/item/toy/carpplushie/dehy_carp/dehy = O
dehy.Swell() // Makes a carp
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index eda94a40f33..5225e5a4d48 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -117,6 +117,7 @@
flags = NOBLUDGEON
amount = 25
max_amount = 25
+ burn_state = 0 //burnable
/obj/item/stack/packageWrap/afterattack(var/obj/target as obj, mob/user as mob, proximity)
diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm
index 4f67a8aa16d..4ee8ea23b77 100644
--- a/code/modules/research/stock_parts.dm
+++ b/code/modules/research/stock_parts.dm
@@ -42,6 +42,16 @@
pshoom_or_beepboopblorpzingshadashwoosh = 'sound/items/PSHOOM.ogg'
alt_sound = 'sound/items/PSHOOM_2.ogg'
+/obj/item/weapon/storage/part_replacer/bluespace/content_can_dump(atom/dest_object, mob/user)
+ if(Adjacent(user))
+ if(get_dist(user, dest_object) < 8)
+ if(dest_object.storage_contents_dump_act(src, user))
+ play_rped_sound()
+ user.Beam(dest_object,icon_state="rped_upgrade",icon='icons/effects/effects.dmi',time=5)
+ return 1
+ user << "The [src.name] buzzes."
+ playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
+ return 0
/obj/item/weapon/storage/part_replacer/proc/play_rped_sound()
//Plays the sound for RPED exhanging or installing parts.
diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm
index 0450b8109c1..3e0a44925ea 100644
--- a/code/modules/telesci/telesci_computer.dm
+++ b/code/modules/telesci/telesci_computer.dm
@@ -1,7 +1,8 @@
/obj/machinery/computer/telescience
name = "\improper Telepad Control Console"
desc = "Used to teleport objects to and from the telescience telepad."
- icon_state = "teleport"
+ icon_screen = "teleport"
+ icon_keyboard = "teleport_key"
circuit = /obj/item/weapon/circuitboard/telesci_console
var/sending = 1
var/obj/machinery/telepad/telepad = null
diff --git a/html/changelog.html b/html/changelog.html
index 929ed44f31f..86348a07518 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -55,6 +55,32 @@
-->
+
27 June 2015
+
Ikarrus updated:
+
+ - Some objects can be burned now.
+ - Bombs will shred your clothes, with respect to their layering and armor values. Exterior clothing will shield clothing underneath. Storage items will drop their contents when bombed this way.
+
+
Laharl Montogmmery updated:
+
+ - Click and drag from a bag/stachel/Storage Object to dump his contents on a tile near you. You can do so into another storage item, a bin, or the ground/table if there's nothing else.
+ - Storage Content Transfer : Bluespace Boogaloo! You can now transfer the content of the BoH/BRPED into tiles/bins/bags out of your reach. Range is 7 tiles.
+
+
MrStonedOne updated:
+
+ - Admins will now receive a notification when one of them starts to reply to an adminhelp to cut down on multiple responses to adminhelps and let admins know when an adminhelp isn't getting replied to.
+ - The keyword finder in admin helps (adds a (?) link next to player names in the text of adminhelps) has been added for all player to admin pms, as well as admin say.
+
+
NullQuery updated:
+
+ - Introduces html_interface, a module to streamline the management of browser windows.
+ - Adds playing cards that utilize a new HTML window management system.
+
+
Vekter updated:
+
+ - Added a new military jacket to the Autodrobe and ClothesMate.
+
+
26 June 2015
Ikarrus updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index c9ad089f910..499ced648e5 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -2981,3 +2981,29 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
pudl:
- rscadd: You can now play games of mastermind to unlock abandoned crates found
throughout space.
+2015-06-27:
+ Ikarrus:
+ - rscadd: Some objects can be burned now.
+ - rscadd: Bombs will shred your clothes, with respect to their layering and armor
+ values. Exterior clothing will shield clothing underneath. Storage items will
+ drop their contents when bombed this way.
+ Laharl Montogmmery:
+ - rscadd: Click and drag from a bag/stachel/Storage Object to dump his contents
+ on a tile near you. You can do so into another storage item, a bin, or the ground/table
+ if there's nothing else.
+ - rscadd: 'Storage Content Transfer : Bluespace Boogaloo! You can now transfer the
+ content of the BoH/BRPED into tiles/bins/bags out of your reach. Range is 7
+ tiles.'
+ MrStonedOne:
+ - tweak: Admins will now receive a notification when one of them starts to reply
+ to an adminhelp to cut down on multiple responses to adminhelps and let admins
+ know when an adminhelp isn't getting replied to.
+ - rscadd: The keyword finder in admin helps (adds a (?) link next to player names
+ in the text of adminhelps) has been added for all player to admin pms, as well
+ as admin say.
+ NullQuery:
+ - wip: Introduces html_interface, a module to streamline the management of browser
+ windows.
+ - rscadd: Adds playing cards that utilize a new HTML window management system.
+ Vekter:
+ - rscadd: Added a new military jacket to the Autodrobe and ClothesMate.
diff --git a/html/changelogs/NullQuery-Nullstation.yml b/html/changelogs/NullQuery-Nullstation.yml
deleted file mode 100644
index 981bb1c1d36..00000000000
--- a/html/changelogs/NullQuery-Nullstation.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-author: NullQuery
-delete-after: True
-
-changes:
- - wip: "Introduces html_interface, a module to streamline the management of browser windows."
- - rscadd: "Adds playing cards that utilize a new HTML window management system."
diff --git a/html/changelogs/vekter-10159.yml b/html/changelogs/vekter-10159.yml
deleted file mode 100644
index f99d832a38c..00000000000
--- a/html/changelogs/vekter-10159.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-################################
-# Example Changelog File
-#
-# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
-#
-# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
-# When it is, any changes listed below will disappear.
-#
-# Valid Prefixes:
-# bugfix
-# wip (For works in progress)
-# tweak
-# soundadd
-# sounddel
-# rscadd (general adding of nice things)
-# rscdel (general deleting of nice things)
-# imageadd
-# imagedel
-# spellcheck (typo fixes)
-# experiment
-# tgs (TG-ported fixes?)
-#################################
-
-# Your name.
-author: Vekter
-
-# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
-delete-after: True
-
-# Any changes you've made. See valid prefix list above.
-# INDENT WITH TWO SPACES. NOT TABS. SPACES.
-# SCREW THIS UP AND IT WON'T WORK.
-# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
-# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
-changes:
- - rscadd: "Added a new military jacket to the Autodrobe and ClothesMate."
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 62170e230e6..5102b40d59e 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ