Merge branch 'master' of https://github.com/PolarisSS13/Polaris into polaris-sync-2018-02-16

# Conflicts:
#	code/_onclick/hud/screen_objects.dm
#	code/game/objects/items/weapons/storage/storage.dm
#	code/game/objects/structures/crates_lockers/closets/secure/medical.dm
#	code/modules/admin/admin_verbs.dm
#	code/modules/clothing/clothing.dm
#	code/modules/clothing/gloves/color.dm
#	code/modules/lore_codex/codex.dm
#	code/modules/mob/living/simple_animal/aliens/alien.dm
#	code/modules/mob/living/simple_animal/animals/cat.dm
#	code/modules/mob/living/simple_animal/animals/goose.dm
#	code/modules/mob/living/simple_animal/simple_animal.dm
#	code/modules/mob/mob_defines.dm
#	code/modules/projectiles/projectile/special.dm
#	html/changelogs/.all_changelog.yml
#	maps/southern_cross/southern_cross-1.dmm
#	maps/southern_cross/southern_cross-7.dmm
#	vorestation.dme
This commit is contained in:
Leshana
2018-02-17 00:35:29 -05:00
255 changed files with 4854 additions and 2785 deletions
@@ -247,3 +247,9 @@ var/global/list/image/splatter_cache=list()
/obj/effect/decal/cleanable/mucus/New()
spawn(DRYING_TIME * 2)
dry=1
//This version should be used for admin spawns and pre-mapped virus vectors (e.g. in PoIs), this version does not dry
/obj/effect/decal/cleanable/mucus/mapped/New()
...()
virus2 = new /datum/disease2/disease
virus2.makerandom()
@@ -100,6 +100,7 @@
icon = 'icons/effects/blood.dmi'
icon_state = "vomit_1"
random_icon_states = list("vomit_1", "vomit_2", "vomit_3", "vomit_4")
var/list/datum/disease2/disease/virus2 = list()
/obj/effect/decal/cleanable/tomato_smudge
name = "tomato smudge"
+223 -54
View File
@@ -1,105 +1,274 @@
/obj/effect/mine
name = "Mine"
desc = "I Better stay away from that thing."
density = 1
name = "land mine" //The name and description are deliberately NOT modified, so you can't game the mines you find.
desc = "A small explosive land mine."
density = 0
anchored = 1
layer = 3
icon = 'icons/obj/weapons.dmi'
icon_state = "uglymine"
var/triggerproc = "explode" //name of the proc thats called when the mine is triggered
var/triggered = 0
var/smoke_strength = 3
var/mineitemtype = /obj/item/weapon/mine
var/panel_open = 0
var/datum/wires/mines/wires = null
/obj/effect/mine/New()
icon_state = "uglyminearmed"
wires = new(src)
/obj/effect/mine/proc/explode(var/mob/living/M)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
triggered = 1
s.set_up(3, 1, src)
s.start()
explosion(loc, 0, 2, 3, 4) //land mines are dangerous, folks.
visible_message("\The [src.name] detonates!")
qdel(s)
qdel(src)
/obj/effect/mine/bullet_act()
if(prob(50))
explode()
/obj/effect/mine/ex_act(severity)
if(severity <= 2 || prob(50))
explode()
..()
/obj/effect/mine/Crossed(AM as mob|obj)
Bumped(AM)
/obj/effect/mine/Bumped(mob/M as mob|obj)
if(triggered) return
if(triggered)
return
if(istype(M, /mob/living/carbon/human))
for(var/mob/O in viewers(world.view, src.loc))
O << "<font color='red'>[M] triggered the \icon[src] [src]</font>"
triggered = 1
call(src,triggerproc)(M)
if(istype(M, /mob/living/))
if(!M.hovering)
explode(M)
/obj/effect/mine/proc/triggerrad(obj)
/obj/effect/mine/attackby(obj/item/W as obj, mob/living/user as mob)
if(isscrewdriver(W))
panel_open = !panel_open
user.visible_message("<span class='warning'>[user] very carefully screws the mine's panel [panel_open ? "open" : "closed"].</span>",
"<span class='notice'>You very carefully screw the mine's panel [panel_open ? "open" : "closed"].</span>")
playsound(src.loc, W.usesound, 50, 1)
else if((iswirecutter(W) || ismultitool(W)) && panel_open)
interact(user)
else
..()
/obj/effect/mine/interact(mob/living/user as mob)
if(!panel_open || istype(user, /mob/living/silicon/ai))
return
user.set_machine(src)
wires.Interact(user)
/obj/effect/mine/dnascramble
mineitemtype = /obj/item/weapon/mine/dnascramble
/obj/effect/mine/dnascramble/explode(var/mob/living/M)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
triggered = 1
s.set_up(3, 1, src)
s.start()
if(M)
M.radiation += 50
randmutb(M)
domutcheck(M,null)
visible_message("\The [src.name] flashes violently before disintegrating!")
spawn(0)
qdel(s)
qdel(src)
/obj/effect/mine/stun
mineitemtype = /obj/item/weapon/mine/stun
/obj/effect/mine/stun/explode(var/mob/living/M)
triggered = 1
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(3, 1, src)
s.start()
obj:radiation += 50
randmutb(obj)
domutcheck(obj,null)
spawn(0)
qdel(src)
/obj/effect/mine/proc/triggerstun(obj)
if(ismob(obj))
var/mob/M = obj
if(M)
M.Stun(30)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(3, 1, src)
s.start()
visible_message("\The [src.name] flashes violently before disintegrating!")
spawn(0)
qdel(s)
qdel(src)
/obj/effect/mine/proc/triggern2o(obj)
//example: n2o triggerproc
//note: im lazy
/obj/effect/mine/n2o
mineitemtype = /obj/item/weapon/mine/n2o
/obj/effect/mine/n2o/explode(var/mob/living/M)
triggered = 1
for (var/turf/simulated/floor/target in range(1,src))
if(!target.blocks_air)
target.assume_gas("sleeping_agent", 30)
visible_message("\The [src.name] detonates!")
spawn(0)
qdel(src)
/obj/effect/mine/proc/triggerphoron(obj)
/obj/effect/mine/phoron
mineitemtype = /obj/item/weapon/mine/phoron
/obj/effect/mine/phoron/explode(var/mob/living/M)
triggered = 1
for (var/turf/simulated/floor/target in range(1,src))
if(!target.blocks_air)
target.assume_gas("phoron", 30)
target.hotspot_expose(1000, CELL_VOLUME)
visible_message("\The [src.name] detonates!")
spawn(0)
qdel(src)
/obj/effect/mine/proc/triggerkick(obj)
/obj/effect/mine/kick
mineitemtype = /obj/item/weapon/mine/kick
/obj/effect/mine/kick/explode(var/mob/living/M)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
triggered = 1
s.set_up(3, 1, src)
s.start()
if(M)
qdel(M.client)
spawn(0)
qdel(s)
qdel(src)
/obj/effect/mine/frag
mineitemtype = /obj/item/weapon/mine/frag
var/fragment_types = list(/obj/item/projectile/bullet/pellet/fragment)
var/num_fragments = 20 //total number of fragments produced by the grenade
//The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern
var/spread_range = 7
/obj/effect/mine/frag/explode(var/mob/living/M)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
triggered = 1
s.set_up(3, 1, src)
s.start()
var/turf/O = get_turf(src)
if(!O)
return
src.fragmentate(O, 20, 7, list(/obj/item/projectile/bullet/pellet/fragment)) //only 20 weak fragments because you're stepping directly on it
visible_message("\The [src.name] detonates!")
spawn(0)
qdel(s)
qdel(src)
/obj/effect/mine/training //Name and Desc commented out so it's possible to trick people with the training mines
// name = "training mine"
// desc = "A mine with its payload removed, for EOD training and demonstrations."
mineitemtype = /obj/item/weapon/mine/training
/obj/effect/mine/training/explode(var/mob/living/M)
triggered = 1
visible_message("\The [src.name]'s light flashes rapidly as it 'explodes'.")
new src.mineitemtype(get_turf(src))
spawn(0)
qdel(src)
/obj/effect/mine/emp
mineitemtype = /obj/item/weapon/mine/emp
/obj/effect/mine/emp/explode(var/mob/living/M)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(3, 1, src)
s.start()
qdel(obj:client)
visible_message("\The [src.name] flashes violently before disintegrating!")
empulse(loc, 2, 4, 7, 10, 1) // As strong as an EMP grenade
spawn(0)
qdel(src)
/obj/effect/mine/proc/explode(obj)
explosion(loc, 0, 1, 2, 3)
/obj/effect/mine/incendiary
mineitemtype = /obj/item/weapon/mine/incendiary
/obj/effect/mine/incendiary/explode(var/mob/living/M)
triggered = 1
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
s.set_up(3, 1, src)
s.start()
if(M)
M.adjust_fire_stacks(5)
M.fire_act()
visible_message("\The [src.name] bursts into flames!")
spawn(0)
qdel(src)
/obj/effect/mine/dnascramble
name = "Radiation Mine"
/////////////////////////////////////////////
// The held item version of the above mines
/////////////////////////////////////////////
/obj/item/weapon/mine
name = "mine"
desc = "A small explosive mine with 'HE' and a grenade symbol on the side."
icon = 'icons/obj/weapons.dmi'
icon_state = "uglymine"
triggerproc = "triggerrad"
var/countdown = 10
var/minetype = /obj/effect/mine //This MUST be an /obj/effect/mine type, or it'll runtime.
/obj/effect/mine/phoron
name = "Phoron Mine"
icon_state = "uglymine"
triggerproc = "triggerphoron"
/obj/item/weapon/mine/attack_self(mob/user as mob) // You do not want to move or throw a land mine while priming it... Explosives + Sudden Movement = Bad Times
add_fingerprint(user)
msg_admin_attack("[user.name] ([user.ckey]) primed \a [src] (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[user.x];Y=[user.y];Z=[user.z]'>JMP</a>)")
user.visible_message("[user] starts priming \the [src.name].", "You start priming \the [src.name]. Hold still!")
if(do_after(user, 10 SECONDS))
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
prime(user)
else
visible_message("[user] triggers \the [src.name]!", "You accidentally trigger \the [src.name]!")
prime(user, TRUE)
return
/obj/effect/mine/kick
name = "Kick Mine"
icon_state = "uglymine"
triggerproc = "triggerkick"
/obj/item/weapon/mine/proc/prime(mob/user as mob, var/explode_now = FALSE)
visible_message("\The [src.name] beeps as the priming sequence completes.")
var/obj/effect/mine/R = new minetype(get_turf(src))
src.transfer_fingerprints_to(R)
R.add_fingerprint(user)
if(explode_now)
R.explode(user)
spawn(0)
qdel(src)
/obj/effect/mine/n2o
name = "N2O Mine"
icon_state = "uglymine"
triggerproc = "triggern2o"
/obj/item/weapon/mine/dnascramble
name = "radiation mine"
desc = "A small explosive mine with a radiation symbol on the side."
minetype = /obj/effect/mine/dnascramble
/obj/effect/mine/stun
name = "Stun Mine"
icon_state = "uglymine"
triggerproc = "triggerstun"
/obj/item/weapon/mine/phoron
name = "incendiary mine"
desc = "A small explosive mine with a fire symbol on the side."
minetype = /obj/effect/mine/phoron
/obj/item/weapon/mine/kick
name = "kick mine"
desc = "Concentrated war crimes. Handle with care."
minetype = /obj/effect/mine/kick
/obj/item/weapon/mine/n2o
name = "nitrous oxide mine"
desc = "A small explosive mine with three Z's on the side."
minetype = /obj/effect/mine/n2o
/obj/item/weapon/mine/stun
name = "stun mine"
desc = "A small explosive mine with a lightning bolt symbol on the side."
minetype = /obj/effect/mine/stun
/obj/item/weapon/mine/frag
name = "fragmentation mine"
desc = "A small explosive mine with 'FRAG' and a grenade symbol on the side."
minetype = /obj/effect/mine/frag
/obj/item/weapon/mine/training
name = "training mine"
desc = "A mine with its payload removed, for EOD training and demonstrations."
minetype = /obj/effect/mine/training
/obj/item/weapon/mine/emp
name = "emp mine"
desc = "A small explosive mine with a lightning bolt symbol on the side."
minetype = /obj/effect/mine/emp
/obj/item/weapon/mine/incendiary
name = "incendiary mine"
desc = "A small explosive mine with a fire symbol on the side."
minetype = /obj/effect/mine/incendiary
+681 -658
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -44,7 +44,7 @@
if(paddles && paddles.loc == src) //in case paddles got destroyed somehow.
new_overlays += "[initial(icon_state)]-paddles"
if(bcell)
if(bcell && paddles)
if(bcell.check_charge(paddles.chargecost))
if(paddles.combat)
new_overlays += "[initial(icon_state)]-combat"
+75 -17
View File
@@ -80,7 +80,7 @@ var/list/GPS_list = list()
var/turf/curr = get_turf(src)
var/area/my_area = get_area(src)
dat += "Current location: [my_area.name] <b>([curr.x], [curr.y], [curr.z])</b>"
dat += "Current location: [my_area.name] <b>([curr.x], [curr.y], [using_map.get_zlevel_name(curr.z)])</b>"
dat += "[hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'. <a href='?src=\ref[src];tag=1'>\[Change Tag\]</a> \
<a href='?src=\ref[src];range=1'>\[Toggle Scan Range\]</a> \
[can_hide_signal ? "<a href='?src=\ref[src];hide=1'>\[Toggle Signal Visibility\]</a>":""]"
@@ -103,16 +103,17 @@ var/list/GPS_list = list()
var/area_name = their_area.name
if(istype(their_area, /area/submap))
area_name = "Unknown Area" // Avoid spoilers.
var/coord = "[T.x], [T.y], [T.z]"
var/degrees = round(Get_Angle(curr, T))
var/Z_name = using_map.get_zlevel_name(T.z)
var/direction = uppertext(dir2text(get_dir(curr, T)))
var/distance = get_dist(curr, T)
var/local = curr.z == T.z ? TRUE : FALSE
if(!direction)
direction = "CENTER"
degrees = "N/A"
signals += " [G.gps_tag]: [area_name] ([coord]) [local ? "Dist: [distance]m Dir: [degrees]° ([direction])":""]"
if(istype(T, /obj/item/device/gps/internal/poi))
signals += " [G.gps_tag]: [area_name] [local ? "Dist: [round(distance, 10)]m [direction])" : "in \the [Z_name]"]"
else
signals += " [G.gps_tag]: [area_name] [local ? "Dist: [round(distance, 10)]m [direction])" : "in \the [Z_name]"]"
if(signals.len)
dat += "Detected signals;"
@@ -179,15 +180,6 @@ var/list/GPS_list = list()
/obj/item/device/gps/explorer/on
tracking = TRUE
/obj/item/device/gps/syndie
icon_state = "gps-syndie"
gps_tag = "NULL"
desc = "A positioning system that has extended range and can detect other GPS device signals without revealing its own. How that works is best left a mystery. Alt+click to toggle power."
origin_tech = list(TECH_MATERIAL = 2, TECH_BLUESPACE = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
long_range = TRUE
hide_signal = TRUE
can_hide_signal = TRUE
/obj/item/device/gps/robot
icon_state = "gps-b"
gps_tag = "SYNTH0"
@@ -207,6 +199,72 @@ var/list/GPS_list = list()
gps_tag = "NT_BASE"
desc = "A homing signal from NanoTrasen's outpost."
/obj/item/device/gps/internal/alien_vessel
gps_tag = "Mysterious Signal"
desc = "A signal that seems forboding."
/obj/item/device/gps/internal/poi
gps_tag = "Unidentified Signal"
desc = "A signal that seems forboding."
/obj/item/device/gps/syndie
icon_state = "gps-syndie"
gps_tag = "NULL"
desc = "A positioning system that has extended range and can detect other GPS device signals without revealing its own. How that works is best left a mystery. Alt+click to toggle power."
origin_tech = list(TECH_MATERIAL = 2, TECH_BLUESPACE = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
long_range = TRUE
hide_signal = TRUE
can_hide_signal = TRUE
/obj/item/device/gps/syndie/display(mob/user)
if(!tracking)
to_chat(user, "The device is off. Alt-click it to turn it on.")
return
if(emped)
to_chat(user, "It's busted!")
return
var/list/dat = list()
var/turf/curr = get_turf(src)
var/area/my_area = get_area(src)
dat += "Current location: [my_area.name] <b>([curr.x], [curr.y], [using_map.get_zlevel_name(curr.z)])</b>"
dat += "[hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'. <a href='?src=\ref[src];tag=1'>\[Change Tag\]</a> \
<a href='?src=\ref[src];range=1'>\[Toggle Scan Range\]</a> \
[can_hide_signal ? "<a href='?src=\ref[src];hide=1'>\[Toggle Signal Visibility\]</a>":""]"
var/list/signals = list()
for(var/gps in GPS_list)
var/obj/item/device/gps/G = gps
if(G.emped || !G.tracking || G.hide_signal || G == src) // Their GPS isn't on or functional.
continue
var/turf/T = get_turf(G)
var/z_level_detection = using_map.get_map_levels(curr.z, long_range)
if(local_mode && T.z != curr.z) // Only care about the current z-level.
continue
else if(!(T.z in z_level_detection)) // Too far away.
continue
var/area/their_area = get_area(G)
var/area_name = their_area.name
if(istype(their_area, /area/submap))
area_name = "Unknown Area" // Avoid spoilers.
var/Z_name = using_map.get_zlevel_name(T.z)
var/coord = "[T.x], [T.y], [Z_name]"
var/degrees = round(Get_Angle(curr, T))
var/direction = uppertext(dir2text(get_dir(curr, T)))
var/distance = get_dist(curr, T)
var/local = curr.z == T.z ? TRUE : FALSE
if(!direction)
direction = "CENTER"
degrees = "N/A"
signals += " [G.gps_tag]: [area_name] ([coord]) [local ? "Dist: [distance]m Dir: [degrees]° ([direction])":""]"
if(signals.len)
dat += "Detected signals;"
for(var/line in signals)
dat += line
else
dat += "No other signals detected."
var/result = dat.Join("<br>")
to_chat(user, result)
+3 -3
View File
@@ -109,9 +109,9 @@
suit.icon_override = new_icon_override_file
S.icon_override = new_icon_override_file
to_chat(user, "You set about modifying the suit into [suit].")
var/mob/living/carbon/human/H = user
if(istype(H))
suit.species_restricted = list(H.species.get_bodytype(H))
// var/mob/living/carbon/human/H = user
// if(istype(H))
// suit.species_restricted = list(H.species.get_bodytype(H)) Does not quite make sense for something usually very pliable.
else
var/obj/item/clothing/suit/space/void/suit = I
suit.name = "[new_name] voidsuit"
@@ -54,6 +54,8 @@
/obj/item/borg/sight/material
name = "\proper material scanner vision"
sight_mode = BORGMATERIAL
icon_state = "material"
icon = 'icons/obj/clothing/glasses.dmi'
/obj/item/borg/sight/hud
name = "hud"
+5 -5
View File
@@ -36,7 +36,7 @@
icon_state = "rods"
var/global/list/datum/stack_recipe/rods_recipes = list( \
new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1),
new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 0),
new/datum/stack_recipe("catwalk", /obj/structure/catwalk, 2, time = 80, one_per_turf = 1, on_floor = 1))
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob)
@@ -44,7 +44,7 @@ var/global/list/datum/stack_recipe/rods_recipes = list( \
var/obj/item/weapon/weldingtool/WT = W
if(get_amount() < 2)
user << "<span class='warning'>You need at least two rods to do this.</span>"
to_chat(user, "<span class='warning'>You need at least two rods to do this.</span>")
return
if(WT.remove_fuel(0,user))
@@ -91,15 +91,15 @@ var/global/list/datum/stack_recipe/rods_recipes = list( \
else if(!in_use)
if(get_amount() < 2)
user << "<span class='warning'>You need at least two rods to do this.</span>"
to_chat(user, "<span class='warning'>You need at least two rods to do this.</span>")
return
usr << "<span class='notice'>Assembling grille...</span>"
to_chat(usr, "<span class='notice'>Assembling grille...</span>")
in_use = 1
if (!do_after(usr, 10))
in_use = 0
return
var/obj/structure/grille/F = new /obj/structure/grille/ ( usr.loc )
usr << "<span class='notice'>You assemble a grille</span>"
to_chat(usr, "<span class='notice'>You assemble a grille</span>")
in_use = 0
F.add_fingerprint(usr)
use(2)
+14
View File
@@ -16,6 +16,7 @@
* Action figures
* Plushies
* Toy cult sword
* Bouquets
*/
@@ -872,6 +873,19 @@
w_class = ITEMSIZE_LARGE
attack_verb = list("attacked", "slashed", "stabbed", "poked")
//Flowers fake & real
/obj/item/toy/bouquet
name = "bouquet"
desc = "A lovely bouquet of flowers. Smells nice!"
icon = 'icons/obj/items.dmi'
icon_state = "bouquet"
w_class = ITEMSIZE_SMALL
/obj/item/toy/bouquet/fake
name = "plastic bouquet"
desc = "A cheap plastic bouquet of flowers. Smells like cheap, toxic plastic."
/* NYET.
/obj/item/weapon/toddler
icon_state = "toddler"
+46
View File
@@ -0,0 +1,46 @@
//These bone objects are mostly for mapping and decoration. They have no actual medical use, so maybe don't try to put them in anybody.
/obj/item/weapon/bone
name = "bone"
desc = "A non-descript bone. It's so old and worn you can barely tell which part of the body it's from."
icon = 'icons/obj/bones.dmi'
icon_state = "bone"
force = 5
throwforce = 6
item_state = "bone"
w_class = ITEMSIZE_SMALL
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked", "bonked", "boned")
/obj/item/weapon/bone/skull
name = "skull"
desc = "A skull. Judging by the shape and size, you'd guess that it might be human."
icon_state = "skull"
throwforce = 7
/obj/item/weapon/bone/skull/tajaran
desc = "A skull. Judging by the shape and size, you'd guess that it might be tajaran."
icon_state = "tajskull"
/obj/item/weapon/bone/skull/unathi
desc = "A skull. Judging by the shape and size, you'd guess that it might be unathi."
icon_state = "unaskull"
/obj/item/weapon/bone/skull/unknown
desc = "A skull. You're not sure what species it might be, though."
icon_state = "xenoskull"
/obj/item/weapon/bone/arm
name = "arm bone"
desc = "Wielding this, you're armed and dangerous, no bones about it."
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked", "bonked", "boned", "slapped", "punched")
icon_state = "arm"
/obj/item/weapon/bone/leg
name = "leg bone"
desc = "Don't worry about getting into an argument with the owner of this. They don't have a leg to stand on."
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked", "bonked", "boned", "kicked")
icon_state = "leg"
/obj/item/weapon/bone/ribs
name = "ribcage"
desc = "If you had some mallets, you could probably use this as a makeshift xylophone."
icon_state = "ribs"
+38
View File
@@ -70,3 +70,41 @@
lit = 0
update_icon()
set_light(0)
/obj/item/weapon/flame/candle/candelabra
name = "candelabra"
desc = "a small gold candelabra. The cups that hold the candles save some of the wax from dripping off, allowing the candles to burn longer."
icon = 'icons/obj/candle.dmi'
icon_state = "candelabra"
w_class = ITEMSIZE_SMALL
wax = 20000
/obj/item/weapon/flame/candle/candelabra/update_icon()
if(wax == 0)
icon_state = "candelabra_melted"
else
icon_state = "candelabra[lit ? "_lit" : ""]"
/obj/item/weapon/flame/candle/everburn
wax = 99999
/obj/item/weapon/flame/candle/everburn/New()
if(!src.lit)
src.lit = 1
//src.damtype = "fire"
for(var/mob/O in viewers(usr, null))
O.show_message("<span class='notice'>\The [name] mysteriously lights itself!.</span>", 1)
set_light(CANDLE_LUM)
processing_objects.Add(src)
/obj/item/weapon/flame/candle/candelabra/everburn
wax = 99999
/obj/item/weapon/flame/candle/candelabra/everburn/New()
if(!src.lit)
src.lit = 1
//src.damtype = "fire"
for(var/mob/O in viewers(usr, null))
O.show_message("<span class='notice'>\The [name] mysteriously lights itself!.</span>", 1)
set_light(CANDLE_LUM)
processing_objects.Add(src)
@@ -9,6 +9,10 @@
origin_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 4)
req_components = list(/obj/item/weapon/smes_coil = 1, /obj/item/stack/cable_coil = 30)
/obj/item/weapon/circuitboard/smes/construct(var/obj/machinery/power/smes/buildable/S)
if(..(S))
S.output_attempt = 0 //built SMES default to off
/obj/item/weapon/circuitboard/batteryrack
name = T_BOARD("battery rack PSU")
build_path = /obj/machinery/power/smes/batteryrack
@@ -112,15 +112,11 @@
usr << "The fingerprint hash on the card is [fingerprint_hash]."
return
/obj/item/weapon/card/id/New()
..()
var/datum/job/jobdatum
for(var/jobtype in typesof(/datum/job))
var/datum/job/J = new jobtype
if(J.title == rank)
jobdatum = J
access = jobdatum.get_access()
return
/obj/item/weapon/card/id/initialize()
. = ..()
var/datum/job/J = job_master.GetJob(rank)
if(J)
access = J.get_access()
/obj/item/weapon/card/id/silver
name = "identification card"
@@ -163,8 +159,8 @@
item_state = "tdgreen"
assignment = "Synthetic"
/obj/item/weapon/card/id/synthetic/New()
..()
/obj/item/weapon/card/id/synthetic/initialize()
. = ..()
access = get_all_station_access() + access_synth
/obj/item/weapon/card/id/centcom
@@ -174,12 +170,12 @@
registered_name = "Central Command"
assignment = "General"
/obj/item/weapon/card/id/centcom/New()
/obj/item/weapon/card/id/centcom/initialize()
. = ..()
access = get_all_centcom_access()
..()
/obj/item/weapon/card/id/centcom/station/New()
..()
/obj/item/weapon/card/id/centcom/station/initialize()
. = ..()
access |= get_all_station_access()
/obj/item/weapon/card/id/centcom/ERT
@@ -187,8 +183,8 @@
assignment = "Emergency Response Team"
icon_state = "centcom"
/obj/item/weapon/card/id/centcom/ERT/New()
..()
/obj/item/weapon/card/id/centcom/ERT/initialize()
. = ..()
access |= get_all_station_access()
// Department-flavor IDs
@@ -6,12 +6,12 @@
var/electronic_warfare = 1
var/mob/registered_user = null
/obj/item/weapon/card/id/syndicate/New(mob/user as mob)
..()
/obj/item/weapon/card/id/syndicate/initialize()
. = ..()
access = syndicate_access.Copy()
/obj/item/weapon/card/id/syndicate/station_access/New()
..() // Same as the normal Syndicate id, only already has all station access
/obj/item/weapon/card/id/syndicate/station_access/initialize()
. = ..() // Same as the normal Syndicate id, only already has all station access
access |= get_all_station_access()
/obj/item/weapon/card/id/syndicate/Destroy()
@@ -8,17 +8,6 @@
force_divisor = 0.3 // 18 with hardness 60 (steel)
attack_verb = list("jabbed","stabbed","ripped")
/obj/item/weapon/material/knuckledusters
name = "knuckle dusters"
desc = "A pair of brass knuckles. Generally used to enhance the user's punches."
icon_state = "knuckledusters"
gender = PLURAL
w_class = ITEMSIZE_SMALL
force_divisor = 0.63
dulled_divisor = 0.75 //It's a heavy bit of metal
attack_verb = list("punched", "beaten", "struck")
applies_material_colour = 0
/obj/item/weapon/material/knife/machete/hatchet
name = "hatchet"
desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood."
@@ -29,7 +29,7 @@
/obj/item/weapon/material/twohanded/update_held_icon()
var/mob/living/M = loc
if(istype(M) && !issmall(M) && M.item_is_in_hands(src) && !M.hands_are_full())
if(istype(M) && M.can_wield_item(src) && is_held_twohanded(M))
wielded = 1
force = force_wielded
name = "[base_name] (wielded)"
@@ -10,6 +10,8 @@
* Candle Box
* Crayon Box
* Cigarette Box
* Vial Box
* Box of Chocolates
*/
/obj/item/weapon/storage/fancy/
@@ -313,3 +315,34 @@
/obj/item/weapon/storage/lockbox/vials/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
update_icon()
/*
* Box of Chocolates/Heart Box
*/
/obj/item/weapon/storage/fancy/heartbox
icon_state = "heartbox"
name = "box of chocolates"
var/startswith = 6
max_storage_space = ITEMSIZE_COST_SMALL * 6
can_hold = list(
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece,
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white,
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle
)
/obj/item/weapon/storage/fancy/heartbox/New()
..()
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece(src)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece(src)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece(src)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white(src)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white(src)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle(src)
update_icon()
return
/obj/item/weapon/storage/fancy/heartbox/update_icon(var/itemremoved = 0)
if (contents.len == 0)
icon_state = "heartbox_empty"
return
+1 -1
View File
@@ -87,7 +87,7 @@
if(!can_place)
return
if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.has_eyes() || H.glasses || (H.head && (H.head.body_parts_covered & FACE)))
if(!H || !src || !H.organs_by_name[BP_HEAD] || !H.check_has_mouth() || (H.head && (H.head.body_parts_covered & FACE)))
return
user.visible_message("<span class='danger'>\The [user] has taped up \the [H]'s mouth!</span>")
+16 -2
View File
@@ -216,7 +216,7 @@
//prob(6);/obj/item/weapon/material/butterflyhandle,
//prob(6);/obj/item/weapon/material/wirerod,
prob(2);/obj/item/weapon/material/butterfly/switchblade,
prob(2);/obj/item/weapon/material/knuckledusters,
prob(2);/obj/item/clothing/gloves/knuckledusters,
prob(1);/obj/item/weapon/material/knife/tacknife,
prob(1);/obj/item/clothing/suit/storage/vest/heavy/merc,
prob(1);/obj/item/weapon/beartrap,
@@ -1133,4 +1133,18 @@ var/list/multi_point_spawns
/obj/item/clothing/suit/space/void/mining/alt,
/obj/item/clothing/head/helmet/space/void/mining/alt
)
)
)
/obj/random/landmine
name = "Random Land Mine"
desc = "This is a random land mine."
icon = 'icons/obj/weapons.dmi'
icon_state = "uglymine"
spawn_nothing_percentage = 25
/obj/random/landmine/item_to_spawn()
return pick(prob(30);/obj/effect/mine,
prob(25);/obj/effect/mine/frag,
prob(25);/obj/effect/mine/emp,
prob(10);/obj/effect/mine/stun,
prob(10);/obj/effect/mine/incendiary,)
@@ -38,7 +38,7 @@
..()
new /obj/item/clothing/suit/bio_suit/security(src)
new /obj/item/clothing/head/bio_hood/security(src)
new /obj/item/weapon/gun/energy/taser/xeno/sec(src)
/obj/structure/closet/l3closet/janitor
icon_state = "bio_janitor"
@@ -10,7 +10,7 @@
req_access = list(access_medical)
New()
/obj/structure/closet/secure_closet/medical1/New()
..()
new /obj/item/weapon/storage/box/autoinjectors(src)
new /obj/item/weapon/storage/box/syringes(src)
@@ -38,7 +38,7 @@
req_access = list(access_surgery)
New()
/obj/structure/closet/secure_closet/medical2/New()
..()
new /obj/item/weapon/tank/anesthetic(src)
new /obj/item/weapon/tank/anesthetic(src)
@@ -60,63 +60,63 @@
icon_broken = "securemedbroken"
icon_off = "securemedoff"
New()
..()
if(prob(50))
new /obj/item/weapon/storage/backpack/medic(src)
else
new /obj/item/weapon/storage/backpack/satchel/med(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/dufflebag/med(src)
new /obj/item/clothing/under/rank/nursesuit (src)
new /obj/item/clothing/head/nursehat (src)
switch(pick("blue", "green", "purple", "black", "navyblue"))
if ("blue")
new /obj/item/clothing/under/rank/medical/scrubs(src)
new /obj/item/clothing/head/surgery/blue(src)
if ("green")
new /obj/item/clothing/under/rank/medical/scrubs/green(src)
new /obj/item/clothing/head/surgery/green(src)
if ("purple")
new /obj/item/clothing/under/rank/medical/scrubs/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
if ("black")
new /obj/item/clothing/under/rank/medical/scrubs/black(src)
new /obj/item/clothing/head/surgery/black(src)
if ("navyblue")
new /obj/item/clothing/under/rank/medical/scrubs/navyblue(src)
new /obj/item/clothing/head/surgery/navyblue(src)
switch(pick("blue", "green", "purple", "black", "navyblue"))
if ("blue")
new /obj/item/clothing/under/rank/medical/scrubs(src)
new /obj/item/clothing/head/surgery/blue(src)
if ("green")
new /obj/item/clothing/under/rank/medical/scrubs/green(src)
new /obj/item/clothing/head/surgery/green(src)
if ("purple")
new /obj/item/clothing/under/rank/medical/scrubs/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
if ("black")
new /obj/item/clothing/under/rank/medical/scrubs/black(src)
new /obj/item/clothing/head/surgery/black(src)
if ("navyblue")
new /obj/item/clothing/under/rank/medical/scrubs/navyblue(src)
new /obj/item/clothing/head/surgery/navyblue(src)
new /obj/item/clothing/under/rank/medical(src)
new /obj/item/clothing/under/rank/nurse(src)
new /obj/item/clothing/under/rank/orderly(src)
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
new /obj/item/clothing/suit/storage/toggle/fr_jacket(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/weapon/cartridge/medical(src)
new /obj/item/device/radio/headset/headset_med(src)
new /obj/item/device/radio/headset/headset_med/alt(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/medical(src)
new /obj/item/clothing/shoes/boots/winter/medical(src)
new /obj/item/weapon/storage/box/freezer(src)
new /obj/item/weapon/storage/box/freezer(src)
new /obj/item/weapon/storage/box/freezer(src)
return
/obj/structure/closet/secure_closet/medical3/New()
..()
if(prob(50))
new /obj/item/weapon/storage/backpack/medic(src)
else
new /obj/item/weapon/storage/backpack/satchel/med(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/dufflebag/med(src)
new /obj/item/clothing/under/rank/nursesuit (src)
new /obj/item/clothing/head/nursehat (src)
switch(pick("blue", "green", "purple", "black", "navyblue"))
if ("blue")
new /obj/item/clothing/under/rank/medical/scrubs(src)
new /obj/item/clothing/head/surgery/blue(src)
if ("green")
new /obj/item/clothing/under/rank/medical/scrubs/green(src)
new /obj/item/clothing/head/surgery/green(src)
if ("purple")
new /obj/item/clothing/under/rank/medical/scrubs/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
if ("black")
new /obj/item/clothing/under/rank/medical/scrubs/black(src)
new /obj/item/clothing/head/surgery/black(src)
if ("navyblue")
new /obj/item/clothing/under/rank/medical/scrubs/navyblue(src)
new /obj/item/clothing/head/surgery/navyblue(src)
switch(pick("blue", "green", "purple", "black", "navyblue"))
if ("blue")
new /obj/item/clothing/under/rank/medical/scrubs(src)
new /obj/item/clothing/head/surgery/blue(src)
if ("green")
new /obj/item/clothing/under/rank/medical/scrubs/green(src)
new /obj/item/clothing/head/surgery/green(src)
if ("purple")
new /obj/item/clothing/under/rank/medical/scrubs/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
if ("black")
new /obj/item/clothing/under/rank/medical/scrubs/black(src)
new /obj/item/clothing/head/surgery/black(src)
if ("navyblue")
new /obj/item/clothing/under/rank/medical/scrubs/navyblue(src)
new /obj/item/clothing/head/surgery/navyblue(src)
new /obj/item/clothing/under/rank/medical(src)
new /obj/item/clothing/under/rank/nurse(src)
new /obj/item/clothing/under/rank/orderly(src)
new /obj/item/clothing/suit/storage/toggle/labcoat(src)
new /obj/item/clothing/suit/storage/toggle/fr_jacket(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/weapon/cartridge/medical(src)
new /obj/item/device/radio/headset/headset_med(src)
new /obj/item/device/radio/headset/headset_med/alt(src)
new /obj/item/clothing/suit/storage/hooded/wintercoat/medical(src)
new /obj/item/clothing/shoes/boots/winter/medical(src)
new /obj/item/weapon/storage/box/freezer(src)
new /obj/item/weapon/storage/box/freezer(src)
new /obj/item/weapon/storage/box/freezer(src)
return
/obj/structure/closet/secure_closet/paramedic
name = "paramedic locker"
@@ -130,7 +130,7 @@
req_access = list(access_medical_equip)
New()
/obj/structure/closet/secure_closet/paramedic/New()
..()
new /obj/item/weapon/storage/backpack/dufflebag/emt(src)
new /obj/item/weapon/storage/box/autoinjectors(src)
@@ -167,51 +167,51 @@
icon_broken = "cmosecurebroken"
icon_off = "cmosecureoff"
New()
..()
if(prob(50))
new /obj/item/weapon/storage/backpack/medic(src)
else
new /obj/item/weapon/storage/backpack/satchel/med(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/dufflebag/med(src)
new /obj/item/clothing/suit/bio_suit/cmo(src)
new /obj/item/clothing/head/bio_hood/cmo(src)
new /obj/item/clothing/shoes/white(src)
switch(pick("blue", "green", "purple", "black", "navyblue"))
if ("blue")
new /obj/item/clothing/under/rank/medical/scrubs(src)
new /obj/item/clothing/head/surgery/blue(src)
if ("green")
new /obj/item/clothing/under/rank/medical/scrubs/green(src)
new /obj/item/clothing/head/surgery/green(src)
if ("purple")
new /obj/item/clothing/under/rank/medical/scrubs/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
if ("black")
new /obj/item/clothing/under/rank/medical/scrubs/black(src)
new /obj/item/clothing/head/surgery/black(src)
if ("navyblue")
new /obj/item/clothing/under/rank/medical/scrubs/navyblue(src)
new /obj/item/clothing/head/surgery/navyblue(src)
new /obj/item/clothing/under/rank/chief_medical_officer(src)
new /obj/item/clothing/under/rank/chief_medical_officer/skirt(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src)
new /obj/item/weapon/cartridge/cmo(src)
new /obj/item/clothing/gloves/sterile/latex(src)
new /obj/item/clothing/shoes/brown (src)
new /obj/item/device/radio/headset/heads/cmo(src)
new /obj/item/device/radio/headset/heads/cmo/alt(src)
new /obj/item/device/flash(src)
new /obj/item/weapon/reagent_containers/hypospray/vial(src)
new /obj/item/weapon/reagent_containers/glass/beaker/vial(src) //VOREStation Edit - An extra vial for the hypo
new /obj/item/clothing/suit/storage/hooded/wintercoat/medical(src)
new /obj/item/clothing/shoes/boots/winter/medical(src)
new /obj/item/weapon/storage/box/freezer(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/taperoll/medical(src)
return
/obj/structure/closet/secure_closet/CMO/New()
..()
if(prob(50))
new /obj/item/weapon/storage/backpack/medic(src)
else
new /obj/item/weapon/storage/backpack/satchel/med(src)
if(prob(50))
new /obj/item/weapon/storage/backpack/dufflebag/med(src)
new /obj/item/clothing/suit/bio_suit/cmo(src)
new /obj/item/clothing/head/bio_hood/cmo(src)
new /obj/item/clothing/shoes/white(src)
switch(pick("blue", "green", "purple", "black", "navyblue"))
if ("blue")
new /obj/item/clothing/under/rank/medical/scrubs(src)
new /obj/item/clothing/head/surgery/blue(src)
if ("green")
new /obj/item/clothing/under/rank/medical/scrubs/green(src)
new /obj/item/clothing/head/surgery/green(src)
if ("purple")
new /obj/item/clothing/under/rank/medical/scrubs/purple(src)
new /obj/item/clothing/head/surgery/purple(src)
if ("black")
new /obj/item/clothing/under/rank/medical/scrubs/black(src)
new /obj/item/clothing/head/surgery/black(src)
if ("navyblue")
new /obj/item/clothing/under/rank/medical/scrubs/navyblue(src)
new /obj/item/clothing/head/surgery/navyblue(src)
new /obj/item/clothing/under/rank/chief_medical_officer(src)
new /obj/item/clothing/under/rank/chief_medical_officer/skirt(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src)
new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src)
new /obj/item/weapon/cartridge/cmo(src)
new /obj/item/clothing/gloves/sterile/latex(src)
new /obj/item/clothing/shoes/brown (src)
new /obj/item/device/radio/headset/heads/cmo(src)
new /obj/item/device/radio/headset/heads/cmo/alt(src)
new /obj/item/device/flash(src)
new /obj/item/weapon/reagent_containers/hypospray/vial(src)
new /obj/item/weapon/reagent_containers/glass/beaker/vial(src) //VOREStation Edit - An extra vial for the hypo
new /obj/item/clothing/suit/storage/hooded/wintercoat/medical(src)
new /obj/item/clothing/shoes/boots/winter/medical(src)
new /obj/item/weapon/storage/box/freezer(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/taperoll/medical(src)
return
@@ -220,7 +220,7 @@
req_access = list(access_surgery)
New()
/obj/structure/closet/secure_closet/animal/New()
..()
new /obj/item/device/assembly/signaler(src)
new /obj/item/device/radio/electropack(src)
@@ -242,7 +242,7 @@
req_access = list(access_chemistry)
New()
/obj/structure/closet/secure_closet/chemical/New()
..()
new /obj/item/clothing/under/rank/psych(src)
new /obj/item/clothing/under/rank/psych/turtleneck(src)
@@ -285,7 +285,7 @@
req_access = list(access_psychiatrist)
New()
/obj/structure/closet/secure_closet/psych/New()
..()
new /obj/item/clothing/under/rank/psych(src)
new /obj/item/clothing/under/rank/psych/turtleneck(src)
@@ -333,9 +333,25 @@
/obj/structure/closet/secure_closet/medical_wall/pills
name = "pill cabinet"
New()
/obj/structure/closet/secure_closet/medical_wall/pills/New()
..()
new /obj/item/weapon/storage/pill_bottle/tramadol(src)
new /obj/item/weapon/storage/pill_bottle/antitox(src)
new /obj/item/weapon/storage/pill_bottle/carbon(src)
new /obj/random/medical/pillbottle(src)
new /obj/random/medical/pillbottle(src)
return
/obj/structure/closet/secure_closet/medical_wall/anesthetics
name = "anesthetics wall closet"
desc = "Used to knock people out."
req_access = list(access_surgery)
/obj/structure/closet/secure_closet/medical_wall/anesthetics/New()
..()
new /obj/item/weapon/tank/anesthetic(src)
new /obj/item/weapon/tank/anesthetic(src)
new /obj/item/weapon/tank/anesthetic(src)
new /obj/item/clothing/mask/breath/medical(src)
new /obj/item/clothing/mask/breath/medical(src)
new /obj/item/clothing/mask/breath/medical(src)
return
@@ -320,3 +320,10 @@
if(2)
name = "near finished "
name += "[glass == 1 ? "window " : ""][istext(glass) ? "[glass] airlock" : base_name] assembly ([created_name])"
// Airlock frames are indestructable, so bullets hitting them would always be stopped.
// To fix this, airlock assemblies will sometimes let bullets pass through, since generally the sprite shows them partially open.
/obj/structure/door_assembly/bullet_act(var/obj/item/projectile/P)
if(prob(40)) // Chance for the frame to let the bullet keep going.
return PROJECTILE_CONTINUE
return ..()
+10 -1
View File
@@ -47,13 +47,19 @@
animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING)
// Used when the tree gets hurt.
/obj/structure/flora/tree/proc/adjust_health(var/amount)
/obj/structure/flora/tree/proc/adjust_health(var/amount, var/is_ranged = FALSE)
if(is_stump)
return
// Bullets and lasers ruin some of the wood
if(is_ranged && product_amount > 0)
var/wood = initial(product_amount)
product_amount -= round(wood * (abs(amount)/max_health))
health = between(0, health + amount, max_health)
if(health <= 0)
die()
return
// Called when the tree loses all health, for whatever reason.
/obj/structure/flora/tree/proc/die()
@@ -81,6 +87,9 @@
/obj/structure/flora/tree/ex_act(var/severity)
adjust_health(-(max_health / severity))
/obj/structure/flora/tree/bullet_act(var/obj/item/projectile/Proj)
if(Proj.get_structure_damage())
adjust_health(-Proj.get_structure_damage(), TRUE)
/obj/structure/flora/tree/get_description_interaction()
var/list/results = list()
+1 -1
View File
@@ -104,7 +104,7 @@
playsound(src, W.usesound, 100, 1)
anchored = !anchored
user.visible_message("<span class='notice'>[user] [anchored ? "fastens" : "unfastens"] the grille.</span>", \
"<span class='notice'>You have [anchored ? "fastened the grille to" : "unfastened the grill from"] the floor.</span>")
"<span class='notice'>You have [anchored ? "fastened the grille to" : "unfastened the grille from"] the floor.</span>")
return
//window placing begin //TODO CONVERT PROPERLY TO MATERIAL DATUM
@@ -522,3 +522,50 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/clothing/suit/armor/alien/tank,
/obj/item/clothing/head/helmet/alien/tank,
)
/obj/structure/loot_pile/surface/bones
name = "bone pile"
desc = "A pile of various dusty bones. Your graverobbing instincts tell you there might be valuables here."
icon = 'icons/obj/bones.dmi'
icon_state = "bonepile"
delete_on_depletion = TRUE
common_loot = list(
/obj/item/weapon/bone,
/obj/item/weapon/bone/skull,
/obj/item/weapon/bone/skull/tajaran,
/obj/item/weapon/bone/skull/unathi,
/obj/item/weapon/bone/skull/unknown,
/obj/item/weapon/bone/leg,
/obj/item/weapon/bone/arm,
/obj/item/weapon/bone/ribs,
)
uncommon_loot = list(
/obj/item/weapon/coin/gold,
/obj/item/weapon/coin/silver,
/obj/item/weapon/deck/tarot,
/obj/item/weapon/flame/lighter/zippo/gold,
/obj/item/weapon/flame/lighter/zippo/black,
/obj/item/weapon/material/knife/tacknife/survival,
/obj/item/weapon/material/knife/tacknife/combatknife,
/obj/item/weapon/material/knife/machete/hatchet,
/obj/item/weapon/material/knife/butch,
/obj/item/weapon/storage/wallet/random,
/obj/item/clothing/accessory/bracelet/material/gold,
/obj/item/clothing/accessory/bracelet/material/silver,
/obj/item/clothing/accessory/locket,
/obj/item/clothing/accessory/poncho/blue,
/obj/item/clothing/shoes/boots/cowboy,
/obj/item/clothing/suit/storage/toggle/bomber,
/obj/item/clothing/under/frontier,
/obj/item/clothing/under/overalls,
/obj/item/clothing/under/pants/classicjeans/ripped,
/obj/item/clothing/under/sl_suit
)
rare_loot = list(
/obj/item/weapon/storage/belt/utility/alien/full,
/obj/item/weapon/gun/projectile/revolver,
/obj/item/weapon/gun/projectile/sec,
/obj/item/weapon/gun/launcher/crossbow
)
+24
View File
@@ -0,0 +1,24 @@
/obj/structure/snowman
name = "snowman"
icon = 'icons/obj/snowman.dmi'
icon_state = "snowman"
desc = "A happy little snowman smiles back at you!"
anchored = 1
/obj/structure/snowman/attack_hand(mob/user as mob)
if(user.a_intent == I_HURT)
user << "<span class='notice'>In one hit, [src] easily crumples into a pile of snow. You monster.</span>"
var/turf/simulated/floor/F = get_turf(src)
if (istype(F))
new /obj/item/stack/material/snow(F)
qdel(src)
/obj/structure/snowman/borg
name = "snowborg"
icon_state = "snowborg"
desc = "A snowy little robot. It even has a monitor for a head."
/obj/structure/snowman/spider
name = "snow spider"
icon_state = "snowspider"
desc = "An impressively crafted snow spider. Not nearly as creepy as the real thing."