mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-29 06:58:30 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into 10/28/2017_new_blob
# Conflicts: # code/game/atoms_movable.dm
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
// These contain structures to make certain 'alien' (as in the ayyy ones, not xenomorphs) submaps more filled, and don't really do anything.
|
||||
|
||||
/obj/structure/prop/alien
|
||||
name = "some alien thing"
|
||||
desc = "My description is broken, bug a developer."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
density = TRUE
|
||||
anchored = TRUE
|
||||
var/interaction_message = null
|
||||
|
||||
/obj/structure/prop/alien/attack_hand(mob/living/user) // Used to tell the player that this isn't useful for anything.
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(!interaction_message)
|
||||
return ..()
|
||||
else
|
||||
to_chat(user, interaction_message)
|
||||
|
||||
/obj/structure/prop/alien/computer
|
||||
name = "alien console"
|
||||
desc = "The console flashes what appear to be symbols you've never seen before."
|
||||
icon_state = "console-c"
|
||||
interaction_message = "<span class='warning'>The console flashes a series of unknown symbols as you press a button on what is presumably a keyboard. It probably some sort of \
|
||||
authentication error. Since you're not an alien, you should probably leave it alone.</span>"
|
||||
|
||||
/obj/structure/prop/alien/computer/camera
|
||||
desc = "This console is briefly flashing video feeds of various locations close by."
|
||||
icon_state = "camera"
|
||||
|
||||
/obj/structure/prop/alien/computer/camera/flipped
|
||||
icon_state = "camera_flipped"
|
||||
|
||||
/obj/structure/prop/alien/dispenser
|
||||
name = "alien dispenser"
|
||||
desc = "This looks like it dispenses... something?"
|
||||
icon_state = "dispenser"
|
||||
interaction_message = "<span class='warning'>You don't see any mechanism to operate this. Probably for the best.</span>"
|
||||
|
||||
/obj/structure/prop/alien/pod
|
||||
name = "alien pod"
|
||||
desc = "This seems to be a container for something."
|
||||
icon_state = "experiment"
|
||||
interaction_message = "<span class='warning'>You don't see any mechanism to open this thing. Probably for the best.</span>"
|
||||
|
||||
/obj/structure/prop/alien/pod/open
|
||||
name = "opened alien pod"
|
||||
desc = "At one point, this probably contained something interesting..."
|
||||
icon_state = "experiment-open"
|
||||
interaction_message = "<span class='warning'>You don't see any mechanism to close this thing.</span>"
|
||||
|
||||
/obj/structure/prop/alien/power
|
||||
name = "void core"
|
||||
icon_state = "core"
|
||||
desc = "An alien machine that seems to be producing energy seemingly out of nowhere."
|
||||
interaction_message = "<span class='warning'>Messing with something that makes energy out of nowhere seems very unwise.</span>"
|
||||
|
||||
/obj/item/prop/alien
|
||||
name = "some alien item"
|
||||
desc = "My description is broken, bug a developer."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
|
||||
// Mostly useless. Research might like it, however.
|
||||
/obj/item/prop/alien/junk
|
||||
name = "alien object"
|
||||
desc = "You have no idea what this thing does."
|
||||
icon_state = "health"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
var/static/list/possible_states = list("health", "spider", "slime", "emp", "species", "egg", "vent", "mindshock", "viral", "gland")
|
||||
var/static/list/possible_tech = list(TECH_MATERIAL, TECH_ENGINEERING, TECH_PHORON, TECH_POWER, TECH_BIO, TECH_COMBAT, TECH_MAGNET, TECH_DATA)
|
||||
|
||||
/obj/item/prop/alien/junk/initialize()
|
||||
..()
|
||||
icon_state = pick(possible_states)
|
||||
var/list/techs = possible_tech.Copy()
|
||||
origin_tech = list()
|
||||
for(var/i = 1 to rand(1, 4))
|
||||
var/new_tech = pick(techs)
|
||||
techs -= new_tech
|
||||
origin_tech[new_tech] = rand(5, 9)
|
||||
@@ -81,7 +81,7 @@
|
||||
health = maxhealth
|
||||
else
|
||||
take_damage(C.force)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.setClickCooldown(user.get_attack_speed(C))
|
||||
return ..()
|
||||
|
||||
/obj/structure/catwalk/Crossed()
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
playsound(user, 'sound/machines/lockreset.ogg', 50, 1)
|
||||
if(do_after(user, 20 * O.toolspeed))
|
||||
src.locked = 0
|
||||
user << "<span class = 'caution'> You disable the locking modules.</span>"
|
||||
to_chat(user, "<span class = 'caution'> You disable the locking modules.</span>")
|
||||
update_icon()
|
||||
return
|
||||
else if(istype(O, /obj/item/weapon))
|
||||
@@ -50,7 +50,7 @@
|
||||
else
|
||||
playsound(user, 'sound/effects/Glasshit.ogg', 100, 1) //We don't want this playing every time
|
||||
if(W.force < 15)
|
||||
user << "<span class='notice'>The cabinet's protective glass glances off the hit.</span>"
|
||||
to_chat(user, "<span class='notice'>The cabinet's protective glass glances off the hit.</span>")
|
||||
else
|
||||
src.hitstaken++
|
||||
if(src.hitstaken == 4)
|
||||
@@ -63,12 +63,14 @@
|
||||
if (istype(O, /obj/item/weapon/material/twohanded/fireaxe) && src.localopened)
|
||||
if(!fireaxe)
|
||||
if(O:wielded)
|
||||
user << "<span class='warning'>Unwield the axe first.</span>"
|
||||
return
|
||||
O:wielded = 0
|
||||
O.update_icon()
|
||||
//to_chat(user, "<span class='warning'>Unwield the axe first.</span>")
|
||||
//return
|
||||
fireaxe = O
|
||||
user.remove_from_mob(O)
|
||||
src.contents += O
|
||||
user << "<span class='notice'>You place the fire axe back in the [src.name].</span>"
|
||||
to_chat(user, "<span class='notice'>You place the fire axe back in the [src.name].</span>")
|
||||
update_icon()
|
||||
else
|
||||
if(src.smashed)
|
||||
@@ -91,11 +93,11 @@
|
||||
spawn(10) update_icon()
|
||||
return
|
||||
else
|
||||
user << "<span class='warning'>Resetting circuitry...</span>"
|
||||
to_chat(user, "<span class='warning'>Resetting circuitry...</span>")
|
||||
playsound(user, 'sound/machines/lockenable.ogg', 50, 1)
|
||||
if(do_after(user,20 * O.toolspeed))
|
||||
src.locked = 1
|
||||
user << "<span class = 'caution'> You re-enable the locking modules.</span>"
|
||||
to_chat(user, "<span class = 'caution'> You re-enable the locking modules.</span>")
|
||||
return
|
||||
else
|
||||
localopened = !localopened
|
||||
@@ -116,13 +118,13 @@
|
||||
hasaxe = 1
|
||||
|
||||
if(src.locked)
|
||||
user <<"<span class='warning'>The cabinet won't budge!</span>"
|
||||
to_chat(user, "<span class='warning'>The cabinet won't budge!</span>")
|
||||
return
|
||||
if(localopened)
|
||||
if(fireaxe)
|
||||
user.put_in_hands(fireaxe)
|
||||
fireaxe = null
|
||||
user << "<span class='notice'>You take the fire axe from the [name].</span>"
|
||||
to_chat (user, "<span class='notice'>You take the fire axe from the [name].</span>")
|
||||
src.add_fingerprint(user)
|
||||
update_icon()
|
||||
else
|
||||
@@ -149,7 +151,7 @@
|
||||
attack_tk(mob/user as mob)
|
||||
if(localopened && fireaxe)
|
||||
fireaxe.forceMove(loc)
|
||||
user << "<span class='notice'>You telekinetically remove the fire axe.</span>"
|
||||
to_chat(user, "<span class='notice'>You telekinetically remove the fire axe.</span>")
|
||||
fireaxe = null
|
||||
update_icon()
|
||||
return
|
||||
@@ -161,9 +163,9 @@
|
||||
|
||||
if (isrobot(usr) || src.locked || src.smashed)
|
||||
if(src.locked)
|
||||
usr << "<span class='warning'>The cabinet won't budge!</span>"
|
||||
to_chat(usr, "<span class='warning'>The cabinet won't budge!</span>")
|
||||
else if(src.smashed)
|
||||
usr << "<span class='notice'>The protective glass is broken!</span>"
|
||||
to_chat(usr, "<span class='notice'>The protective glass is broken!</span>")
|
||||
return
|
||||
|
||||
localopened = !localopened
|
||||
@@ -180,23 +182,23 @@
|
||||
if(fireaxe)
|
||||
usr.put_in_hands(fireaxe)
|
||||
fireaxe = null
|
||||
usr << "<span class='notice'>You take the Fire axe from the [name].</span>"
|
||||
to_chat(usr, "<span class='notice'>You take the Fire axe from the [name].</span>")
|
||||
else
|
||||
usr << "<span class='notice'>The [src.name] is empty.</span>"
|
||||
to_chat(usr, "<span class='notice'>The [src.name] is empty.</span>")
|
||||
else
|
||||
usr << "<span class='notice'>The [src.name] is closed.</span>"
|
||||
to_chat(usr, "<span class='notice'>The [src.name] is closed.</span>")
|
||||
update_icon()
|
||||
|
||||
attack_ai(mob/user as mob)
|
||||
if(src.smashed)
|
||||
user << "<span class='warning'>The security of the cabinet is compromised.</span>"
|
||||
to_chat(user, "<span class='warning'>The security of the cabinet is compromised.</span>")
|
||||
return
|
||||
else
|
||||
locked = !locked
|
||||
if(locked)
|
||||
user << "<span class='warning'>Cabinet locked.</span>"
|
||||
to_chat(user, "<span class='warning'>Cabinet locked.</span>")
|
||||
else
|
||||
user << "<span class='notice'>Cabinet unlocked.</span>"
|
||||
to_chat(user, "<span class='notice'>Cabinet unlocked.</span>")
|
||||
return
|
||||
|
||||
update_icon() //Template: fireaxe[has fireaxe][is opened][hits taken][is smashed]. If you want the opening or closing animations, add "opening" or "closing" right after the numbers
|
||||
|
||||
@@ -134,3 +134,12 @@
|
||||
new /obj/item/clothing/head/helmet/thunderdome(src)
|
||||
new /obj/item/clothing/head/helmet/thunderdome(src)
|
||||
new /obj/item/clothing/head/helmet/thunderdome(src)
|
||||
|
||||
/obj/structure/closet/alien
|
||||
name = "alien container"
|
||||
desc = "Contains secrets of the universe."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "alien_locker"
|
||||
icon_closed = "alien_locker"
|
||||
icon_opened = "alien_locker_open"
|
||||
anchored = TRUE
|
||||
@@ -204,7 +204,7 @@
|
||||
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(src)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/vial(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)
|
||||
@@ -243,21 +243,17 @@
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/clothing/under/rank/psych(src)
|
||||
new /obj/item/clothing/under/rank/psych/turtleneck(src)
|
||||
new /obj/item/clothing/suit/straight_jacket(src)
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/stoxin(src)
|
||||
new /obj/item/weapon/reagent_containers/syringe(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/citalopram(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/methylphenidate(src)
|
||||
new /obj/item/weapon/clipboard(src)
|
||||
new /obj/item/weapon/folder/white(src)
|
||||
new /obj/item/device/taperecorder(src)
|
||||
new /obj/item/device/tape/random(src)
|
||||
new /obj/item/device/tape/random(src)
|
||||
new /obj/item/device/tape/random(src)
|
||||
new /obj/item/device/camera(src)
|
||||
new /obj/item/toy/therapy_blue(src)
|
||||
new /obj/item/weapon/storage/box/pillbottles(src)
|
||||
new /obj/item/weapon/storage/box/pillbottles(src)
|
||||
new /obj/item/weapon/storage/box/beakers(src)
|
||||
new /obj/item/weapon/storage/box/autoinjectors(src)
|
||||
new /obj/item/weapon/storage/box/syringes(src)
|
||||
new /obj/item/weapon/reagent_containers/dropper(src)
|
||||
new /obj/item/weapon/reagent_containers/dropper(src)
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline(src)
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/inaprovaline(src)
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/antitoxin(src)
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/antitoxin(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/psych
|
||||
@@ -274,8 +270,21 @@
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/weapon/storage/box/pillbottles(src)
|
||||
new /obj/item/weapon/storage/box/pillbottles(src)
|
||||
new /obj/item/clothing/under/rank/psych(src)
|
||||
new /obj/item/clothing/under/rank/psych/turtleneck(src)
|
||||
new /obj/item/clothing/suit/straight_jacket(src)
|
||||
new /obj/item/weapon/reagent_containers/glass/bottle/stoxin(src)
|
||||
new /obj/item/weapon/reagent_containers/syringe(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/citalopram(src)
|
||||
new /obj/item/weapon/reagent_containers/pill/methylphenidate(src)
|
||||
new /obj/item/weapon/clipboard(src)
|
||||
new /obj/item/weapon/folder/white(src)
|
||||
new /obj/item/device/taperecorder(src)
|
||||
new /obj/item/device/tape/random(src)
|
||||
new /obj/item/device/tape/random(src)
|
||||
new /obj/item/device/tape/random(src)
|
||||
new /obj/item/device/camera(src)
|
||||
new /obj/item/toy/plushie/therapy/blue(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/secure_closet/medical_wall
|
||||
|
||||
@@ -276,15 +276,13 @@
|
||||
..()
|
||||
new /obj/item/clothing/accessory/badge/holo/detective(src)
|
||||
new /obj/item/clothing/gloves/black(src)
|
||||
new /obj/item/gunbox(src)
|
||||
new /obj/item/weapon/storage/belt/detective(src)
|
||||
new /obj/item/weapon/storage/box/evidence(src)
|
||||
new /obj/item/device/radio/headset/headset_sec(src)
|
||||
new /obj/item/device/radio/headset/headset_sec/alt(src)
|
||||
new /obj/item/clothing/suit/storage/vest/detective(src)
|
||||
new /obj/item/ammo_magazine/m45/rubber(src)
|
||||
new /obj/item/ammo_magazine/m45/rubber(src)
|
||||
new /obj/item/taperoll/police(src)
|
||||
new /obj/item/weapon/gun/projectile/colt/detective(src)
|
||||
new /obj/item/clothing/accessory/holster/armpit(src)
|
||||
new /obj/item/device/flashlight/maglight(src)
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/flask/detflask(src)
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
|
||||
/obj/structure/displaycase/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.setClickCooldown(user.get_attack_speed(W))
|
||||
user.do_attack_animation(src)
|
||||
playsound(loc, 'sound/effects/Glasshit.ogg', 50, 1)
|
||||
src.health -= W.force
|
||||
|
||||
@@ -117,6 +117,12 @@
|
||||
base_icon_state = "voidcraft_vertical"
|
||||
airlock_type = "/voidcraft/vertical"
|
||||
|
||||
/obj/structure/door_assembly/door_assembly_alien
|
||||
base_icon_state = "alien"
|
||||
base_name = "alien airlock"
|
||||
airlock_type = "/alien"
|
||||
glass = -1
|
||||
|
||||
/obj/structure/door_assembly/multi_tile
|
||||
icon = 'icons/obj/doors/door_assembly2x1.dmi'
|
||||
dir = EAST
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
/obj/structure/fitness
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
anchored = 1
|
||||
var/being_used = 0
|
||||
|
||||
/obj/structure/fitness/punchingbag
|
||||
name = "punching bag"
|
||||
desc = "A punching bag."
|
||||
icon_state = "punchingbag"
|
||||
density = 1
|
||||
var/list/hit_message = list("hit", "punch", "kick", "robust")
|
||||
|
||||
/obj/structure/fitness/punchingbag/attack_hand(var/mob/living/carbon/human/user)
|
||||
if(!istype(user))
|
||||
..()
|
||||
return
|
||||
if(user.nutrition < 20)
|
||||
to_chat(user, "<span class='warning'>You need more energy to use the punching bag. Go eat something.</span>")
|
||||
else
|
||||
if(user.a_intent == I_HURT)
|
||||
user.setClickCooldown(user.get_attack_speed())
|
||||
flick("[icon_state]_hit", src)
|
||||
playsound(src.loc, 'sound/effects/woodhit.ogg', 25, 1, -1)
|
||||
user.do_attack_animation(src)
|
||||
user.nutrition = user.nutrition - 5
|
||||
to_chat(user, "<span class='warning'>You [pick(hit_message)] \the [src].</span>")
|
||||
|
||||
/obj/structure/fitness/weightlifter
|
||||
name = "weightlifting machine"
|
||||
desc = "A machine used to lift weights."
|
||||
icon_state = "weightlifter"
|
||||
var/weight = 1
|
||||
var/list/qualifiers = list("with ease", "without any trouble", "with great effort")
|
||||
|
||||
/obj/structure/fitness/weightlifter/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1)
|
||||
weight = ((weight) % qualifiers.len) + 1
|
||||
to_chat(user, "You set the machine's weight level to [weight].")
|
||||
|
||||
/obj/structure/fitness/weightlifter/attack_hand(var/mob/living/carbon/human/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
if(user.loc != src.loc)
|
||||
to_chat(user, "<span class='warning'>You must be on the weight machine to use it.</span>")
|
||||
return
|
||||
if(user.nutrition < 50)
|
||||
to_chat(user, "<span class='warning'>You need more energy to lift weights. Go eat something.</span>")
|
||||
return
|
||||
if(being_used)
|
||||
to_chat(user, "<span class='warning'>The weight machine is already in use by somebody else.</span>")
|
||||
return
|
||||
else
|
||||
being_used = 1
|
||||
playsound(src.loc, 'sound/effects/weightlifter.ogg', 50, 1)
|
||||
user.set_dir(SOUTH)
|
||||
flick("[icon_state]_[weight]", src)
|
||||
if(do_after(user, 20 + (weight * 10)))
|
||||
playsound(src.loc, 'sound/effects/weightdrop.ogg', 25, 1)
|
||||
user.nutrition -= weight * 10
|
||||
to_chat(user, "<span class='notice'>You lift the weights [qualifiers[weight]].</span>")
|
||||
being_used = 0
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Against your previous judgement, perhaps working out is not for you.</span>")
|
||||
being_used = 0
|
||||
@@ -36,7 +36,7 @@
|
||||
to_chat(user, "<span class='warning'>\The [W] is ineffective at harming \the [src].</span>")
|
||||
|
||||
hit_animation()
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.setClickCooldown(user.get_attack_speed(W))
|
||||
user.do_attack_animation(src)
|
||||
|
||||
// Shakes the tree slightly, more or less stolen from lockers.
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
if(winner.len)
|
||||
var/mob/observer/dead/D = winner[1]
|
||||
create_occupant(D)
|
||||
new /obj/machinery/recharge_station/ghost_pod_recharger(src.loc)
|
||||
del(src)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
@@ -29,7 +31,6 @@
|
||||
// Override this to create whatever mob you need. Be sure to call ..() if you don't want it to make infinite mobs.
|
||||
/obj/structure/ghost_pod/proc/create_occupant(var/mob/M)
|
||||
used = TRUE
|
||||
icon_state = icon_state_opened
|
||||
return TRUE
|
||||
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
|
||||
/obj/structure/grille/attack_hand(mob/user as mob)
|
||||
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.setClickCooldown(user.get_attack_speed())
|
||||
playsound(loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
user.do_attack_animation(src)
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
//window placing end
|
||||
|
||||
else if(!(W.flags & CONDUCT) || !shock(user, 70))
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.setClickCooldown(user.get_attack_speed(W))
|
||||
user.do_attack_animation(src)
|
||||
playsound(loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
switch(W.damtype)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//////Kitchen Spike
|
||||
|
||||
/obj/structure/kitchenspike
|
||||
name = "a meat spike"
|
||||
name = "meat spike"
|
||||
icon = 'icons/obj/kitchen.dmi'
|
||||
icon_state = "spike"
|
||||
desc = "A spike for collecting meat from animals."
|
||||
@@ -16,16 +16,16 @@
|
||||
if(!istype(G, /obj/item/weapon/grab) || !ismob(G.affecting))
|
||||
return
|
||||
if(occupied)
|
||||
user << "<span class = 'danger'>The spike already has something on it, finish collecting its meat first!</span>"
|
||||
to_chat(user, "<span class = 'danger'>The spike already has something on it, finish collecting its meat first!</span>")
|
||||
else
|
||||
if(spike(G.affecting))
|
||||
visible_message("<span class = 'danger'>[user] has forced [G.affecting] onto the spike, killing them instantly!</span>")
|
||||
visible_message("<span class = 'danger'>[user] has forced [G.affecting] onto the spike, killing \him instantly!</span>")
|
||||
var/mob/M = G.affecting
|
||||
M.forceMove(src)
|
||||
qdel(G)
|
||||
qdel(M)
|
||||
else
|
||||
user << "<span class='danger'>They are too big for the spike, try something smaller!</span>"
|
||||
to_chat(user, "<span class='danger'>They are too big for the spike, try something smaller!</span>")
|
||||
|
||||
/obj/structure/kitchenspike/proc/spike(var/mob/living/victim)
|
||||
if(!istype(victim))
|
||||
@@ -33,10 +33,11 @@
|
||||
|
||||
if(istype(victim, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = victim
|
||||
if(!issmall(H))
|
||||
if(istype(H.species, /datum/species/monkey))
|
||||
meat_type = H.species.meat_type
|
||||
icon_state = "spikebloody"
|
||||
else
|
||||
return 0
|
||||
meat_type = H.species.meat_type
|
||||
icon_state = "spikebloody"
|
||||
else if(istype(victim, /mob/living/carbon/alien))
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
|
||||
icon_state = "spikebloodygreen"
|
||||
@@ -54,8 +55,8 @@
|
||||
meat--
|
||||
new meat_type(get_turf(src))
|
||||
if(meat > 1)
|
||||
user << "You remove some meat from \the [victim_name]."
|
||||
to_chat(user, "You cut some meat from \the [victim_name]'s body.")
|
||||
else if(meat == 1)
|
||||
user << "You remove the last piece of meat from \the [victim_name]!"
|
||||
to_chat(user, "You remove the last piece of meat from \the [victim_name]!")
|
||||
icon_state = "spike"
|
||||
occupied = 0
|
||||
|
||||
@@ -435,3 +435,89 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
|
||||
loot_depletion = TRUE
|
||||
loot_left = 5 // This is to prevent people from asking the whole station to go down to some alien ruin to get massive amounts of phat lewt.
|
||||
|
||||
// Base type for alien piles.
|
||||
/obj/structure/loot_pile/surface/alien
|
||||
name = "alien pod"
|
||||
desc = "A pod which looks bigger on the inside. Something quiet shiny might be inside?"
|
||||
icon_state = "alien_pile1"
|
||||
|
||||
/obj/structure/loot_pile/surface/alien
|
||||
common_loot = list(
|
||||
/obj/item/prop/alien/junk
|
||||
)
|
||||
|
||||
// May contain alien tools.
|
||||
/obj/structure/loot_pile/surface/alien/engineering
|
||||
uncommon_loot = list(
|
||||
/obj/item/device/multitool/alien,
|
||||
/obj/item/stack/cable_coil/alien,
|
||||
/obj/item/weapon/crowbar/alien,
|
||||
/obj/item/weapon/screwdriver/alien,
|
||||
/obj/item/weapon/weldingtool/alien,
|
||||
/obj/item/weapon/wirecutters/alien,
|
||||
/obj/item/weapon/wrench/alien
|
||||
)
|
||||
rare_loot = list(
|
||||
/obj/item/weapon/storage/belt/utility/alien/full
|
||||
)
|
||||
|
||||
// May contain alien surgery equipment or powerful medication.
|
||||
/obj/structure/loot_pile/surface/alien/medical
|
||||
uncommon_loot = list(
|
||||
/obj/item/weapon/surgical/FixOVein/alien,
|
||||
/obj/item/weapon/surgical/bone_clamp/alien,
|
||||
/obj/item/weapon/surgical/cautery/alien,
|
||||
/obj/item/weapon/surgical/circular_saw/alien,
|
||||
/obj/item/weapon/surgical/hemostat/alien,
|
||||
/obj/item/weapon/surgical/retractor/alien,
|
||||
/obj/item/weapon/surgical/scalpel/alien,
|
||||
/obj/item/weapon/surgical/surgicaldrill/alien
|
||||
)
|
||||
rare_loot = list(
|
||||
/obj/item/weapon/storage/belt/medical/alien
|
||||
)
|
||||
|
||||
// May contain powercells or alien weaponry.
|
||||
/obj/structure/loot_pile/surface/alien/security
|
||||
uncommon_loot = list(
|
||||
/obj/item/weapon/cell/device/weapon/recharge/alien,
|
||||
/obj/item/clothing/suit/armor/alien,
|
||||
/obj/item/clothing/head/helmet/alien
|
||||
)
|
||||
rare_loot = list(
|
||||
/obj/item/clothing/suit/armor/alien/tank,
|
||||
/obj/item/weapon/gun/energy/alien
|
||||
)
|
||||
|
||||
// The pile found at the very end, and as such has the best loot.
|
||||
/obj/structure/loot_pile/surface/alien/end
|
||||
chance_uncommon = 30
|
||||
chance_rare = 10
|
||||
|
||||
common_loot = list(
|
||||
/obj/item/device/multitool/alien,
|
||||
/obj/item/stack/cable_coil/alien,
|
||||
/obj/item/weapon/crowbar/alien,
|
||||
/obj/item/weapon/screwdriver/alien,
|
||||
/obj/item/weapon/weldingtool/alien,
|
||||
/obj/item/weapon/wirecutters/alien,
|
||||
/obj/item/weapon/wrench/alien,
|
||||
/obj/item/weapon/surgical/FixOVein/alien,
|
||||
/obj/item/weapon/surgical/bone_clamp/alien,
|
||||
/obj/item/weapon/surgical/cautery/alien,
|
||||
/obj/item/weapon/surgical/circular_saw/alien,
|
||||
/obj/item/weapon/surgical/hemostat/alien,
|
||||
/obj/item/weapon/surgical/retractor/alien,
|
||||
/obj/item/weapon/surgical/scalpel/alien,
|
||||
/obj/item/weapon/surgical/surgicaldrill/alien,
|
||||
/obj/item/weapon/cell/device/weapon/recharge/alien,
|
||||
/obj/item/clothing/suit/armor/alien,
|
||||
/obj/item/clothing/head/helmet/alien,
|
||||
/obj/item/weapon/gun/energy/alien
|
||||
)
|
||||
uncommon_loot = list(
|
||||
/obj/item/weapon/storage/belt/medical/alien,
|
||||
/obj/item/weapon/storage/belt/utility/alien/full,
|
||||
/obj/item/clothing/suit/armor/alien/tank,
|
||||
/obj/item/clothing/head/helmet/alien/tank,
|
||||
)
|
||||
|
||||
@@ -77,6 +77,9 @@
|
||||
return
|
||||
return
|
||||
|
||||
/obj/structure/morgue/attack_robot(mob/user)
|
||||
if(Adjacent(user))
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/morgue/attack_hand(mob/user as mob)
|
||||
if (src.connected)
|
||||
@@ -156,6 +159,10 @@
|
||||
connected = null
|
||||
return ..()
|
||||
|
||||
/obj/structure/m_tray/attack_robot(mob/user)
|
||||
if(Adjacent(user))
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/m_tray/attack_hand(mob/user as mob)
|
||||
if (src.connected)
|
||||
for(var/atom/movable/A as mob|obj in src.loc)
|
||||
@@ -181,7 +188,7 @@
|
||||
if (user != O)
|
||||
for(var/mob/B in viewers(user, 3))
|
||||
if ((B.client && !( B.blinded )))
|
||||
B << "<span class='warning'>\The [user] stuffs [O] into [src]!</span>"
|
||||
to_chat(B, "<span class='warning'>\The [user] stuffs [O] into [src]!</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -189,25 +196,16 @@
|
||||
* Crematorium
|
||||
*/
|
||||
|
||||
/obj/structure/crematorium
|
||||
/obj/structure/morgue/crematorium
|
||||
name = "crematorium"
|
||||
desc = "A human incinerator. Works well on barbeque nights."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "crema1"
|
||||
density = 1
|
||||
var/obj/structure/c_tray/connected = null
|
||||
anchored = 1.0
|
||||
var/cremating = 0
|
||||
var/id = 1
|
||||
var/locked = 0
|
||||
|
||||
/obj/structure/crematorium/Destroy()
|
||||
if(connected)
|
||||
qdel(connected)
|
||||
connected = null
|
||||
return ..()
|
||||
|
||||
/obj/structure/crematorium/proc/update()
|
||||
/obj/structure/morgue/crematorium/update()
|
||||
if (src.connected)
|
||||
src.icon_state = "crema0"
|
||||
else
|
||||
@@ -217,37 +215,7 @@
|
||||
src.icon_state = "crema1"
|
||||
return
|
||||
|
||||
/obj/structure/crematorium/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
for(var/atom/movable/A as mob|obj in src)
|
||||
A.forceMove(src.loc)
|
||||
ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
if(2.0)
|
||||
if (prob(50))
|
||||
for(var/atom/movable/A as mob|obj in src)
|
||||
A.forceMove(src.loc)
|
||||
ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(5))
|
||||
for(var/atom/movable/A as mob|obj in src)
|
||||
A.forceMove(src.loc)
|
||||
ex_act(severity)
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/structure/crematorium/attack_hand(mob/user as mob)
|
||||
// if (cremating) AWW MAN! THIS WOULD BE SO MUCH MORE FUN ... TO WATCH
|
||||
// user.show_message("<span class='warning'>Uh-oh, that was a bad idea.</span>", 1)
|
||||
// //usr << "Uh-oh, that was a bad idea."
|
||||
// src:loc:poison += 20000000
|
||||
// src:loc:firelevel = src:loc:poison
|
||||
// return
|
||||
/obj/structure/morgue/crematorium/attack_hand(mob/user as mob)
|
||||
if (cremating)
|
||||
usr << "<span class='warning'>It's locked.</span>"
|
||||
return
|
||||
@@ -260,10 +228,10 @@
|
||||
qdel(src.connected)
|
||||
else if (src.locked == 0)
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
src.connected = new /obj/structure/c_tray( src.loc )
|
||||
step(src.connected, SOUTH)
|
||||
src.connected = new /obj/structure/m_tray/c_tray( src.loc )
|
||||
step(src.connected, EAST)
|
||||
src.connected.layer = OBJ_LAYER
|
||||
var/turf/T = get_step(src, SOUTH)
|
||||
var/turf/T = get_step(src, EAST)
|
||||
if (T.contents.Find(src.connected))
|
||||
src.connected.connected = src
|
||||
src.icon_state = "crema0"
|
||||
@@ -276,7 +244,7 @@
|
||||
src.add_fingerprint(user)
|
||||
update()
|
||||
|
||||
/obj/structure/crematorium/attackby(P as obj, mob/user as mob)
|
||||
/obj/structure/morgue/crematorium/attackby(P as obj, mob/user as mob)
|
||||
if (istype(P, /obj/item/weapon/pen))
|
||||
var/t = input(user, "What would you like the label to be?", text("[]", src.name), null) as text
|
||||
if (user.get_active_hand() != P)
|
||||
@@ -291,13 +259,13 @@
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/structure/crematorium/relaymove(mob/user as mob)
|
||||
/obj/structure/morgue/crematorium/relaymove(mob/user as mob)
|
||||
if (user.stat || locked)
|
||||
return
|
||||
src.connected = new /obj/structure/c_tray( src.loc )
|
||||
step(src.connected, SOUTH)
|
||||
src.connected = new /obj/structure/m_tray/c_tray( src.loc )
|
||||
step(src.connected, EAST)
|
||||
src.connected.layer = OBJ_LAYER
|
||||
var/turf/T = get_step(src, SOUTH)
|
||||
var/turf/T = get_step(src, EAST)
|
||||
if (T.contents.Find(src.connected))
|
||||
src.connected.connected = src
|
||||
src.icon_state = "crema0"
|
||||
@@ -309,25 +277,22 @@
|
||||
src.connected = null
|
||||
return
|
||||
|
||||
/obj/structure/crematorium/proc/cremate(atom/A, mob/user as mob)
|
||||
// for(var/obj/machinery/crema_switch/O in src) //trying to figure a way to call the switch, too drunk to sort it out atm
|
||||
// if(var/on == 1)
|
||||
// return
|
||||
/obj/structure/morgue/crematorium/proc/cremate(atom/A, mob/user as mob)
|
||||
if(cremating)
|
||||
return //don't let you cremate something twice or w/e
|
||||
|
||||
if(contents.len <= 0)
|
||||
for (var/mob/M in viewers(src))
|
||||
M.show_message("<span class='warning'>You hear a hollow crackle.</span>", 1)
|
||||
to_chat(M,"<span class='warning'>You hear a hollow crackle.</span>")
|
||||
return
|
||||
|
||||
else
|
||||
if(!isemptylist(src.search_contents_for(/obj/item/weapon/disk/nuclear)))
|
||||
usr << "You get the feeling that you shouldn't cremate one of the items in the cremator."
|
||||
to_chat(user,"You get the feeling that you shouldn't cremate one of the items in the cremator.")
|
||||
return
|
||||
|
||||
for (var/mob/M in viewers(src))
|
||||
M.show_message("<span class='warning'>You hear a roar as the crematorium activates.</span>", 1)
|
||||
to_chat(M,"<span class='warning'>You hear a roar as the crematorium activates.</span>")
|
||||
|
||||
cremating = 1
|
||||
locked = 1
|
||||
@@ -363,51 +328,11 @@
|
||||
/*
|
||||
* Crematorium tray
|
||||
*/
|
||||
/obj/structure/c_tray
|
||||
/obj/structure/m_tray/c_tray
|
||||
name = "crematorium tray"
|
||||
desc = "Apply body before burning."
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
icon_state = "cremat"
|
||||
density = 1
|
||||
layer = 2.0
|
||||
var/obj/structure/crematorium/connected = null
|
||||
anchored = 1
|
||||
throwpass = 1
|
||||
|
||||
/obj/structure/c_tray/Destroy()
|
||||
if(connected && connected.connected == src)
|
||||
connected.connected = null
|
||||
connected = null
|
||||
return ..()
|
||||
|
||||
/obj/structure/c_tray/attack_hand(mob/user as mob)
|
||||
if (src.connected)
|
||||
for(var/atom/movable/A as mob|obj in src.loc)
|
||||
if (!( A.anchored ))
|
||||
A.forceMove(src.connected)
|
||||
//Foreach goto(26)
|
||||
src.connected.connected = null
|
||||
src.connected.update()
|
||||
add_fingerprint(user)
|
||||
//SN src = null
|
||||
qdel(src)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/structure/c_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
|
||||
if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src) || user.contents.Find(O)))
|
||||
return
|
||||
if (!ismob(O) && !istype(O, /obj/structure/closet/body_bag))
|
||||
return
|
||||
if (!ismob(user) || user.stat || user.lying || user.stunned)
|
||||
return
|
||||
O.forceMove(src.loc)
|
||||
if (user != O)
|
||||
for(var/mob/B in viewers(user, 3))
|
||||
if ((B.client && !( B.blinded )))
|
||||
B << text("<span class='warning'>[] stuffs [] into []!</span>", user, O, src)
|
||||
//Foreach goto(99)
|
||||
return
|
||||
|
||||
/obj/machinery/button/crematorium
|
||||
name = "crematorium igniter"
|
||||
@@ -421,9 +346,9 @@
|
||||
if(..())
|
||||
return
|
||||
if(src.allowed(user))
|
||||
for (var/obj/structure/crematorium/C in world)
|
||||
for (var/obj/structure/morgue/crematorium/C in world)
|
||||
if (C.id == id)
|
||||
if (!C.cremating)
|
||||
C.cremate(user)
|
||||
else
|
||||
usr << "<span class='warning'>Access denied.</span>"
|
||||
to_chat(user,"<span class='warning'>Access denied.</span>")
|
||||
|
||||
@@ -27,6 +27,23 @@
|
||||
desc = "This is a space piano, like a regular piano, but always in tune! Even if the musician isn't."
|
||||
icon_state = "piano"
|
||||
|
||||
/obj/structure/device/piano/verb/rotate()
|
||||
set name = "Rotate Piano"
|
||||
set category = "Object"
|
||||
set src in oview(1)
|
||||
|
||||
if(istype(usr,/mob/living/simple_animal/mouse))
|
||||
return
|
||||
else if(!usr || !isturf(usr.loc))
|
||||
return
|
||||
else if(usr.stat || usr.restrained())
|
||||
return
|
||||
else if (istype(usr,/mob/observer/ghost) && !config.ghost_interaction)
|
||||
return
|
||||
else
|
||||
src.set_dir(turn(src.dir, 90))
|
||||
return
|
||||
|
||||
/obj/structure/device/piano/proc/playnote(var/note as text)
|
||||
//world << "Note: [note]"
|
||||
var/soundfile
|
||||
|
||||
@@ -199,7 +199,7 @@
|
||||
/obj/structure/railing/attackby(obj/item/W as obj, mob/user as mob)
|
||||
// Dismantle
|
||||
if(istype(W, /obj/item/weapon/wrench) && !anchored)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
playsound(src.loc, W.usesound, 50, 1)
|
||||
if(do_after(user, 20, src))
|
||||
user.visible_message("<span class='notice'>\The [user] dismantles \the [src].</span>", "<span class='notice'>You dismantle \the [src].</span>")
|
||||
new /obj/item/stack/material/steel(get_turf(usr), 2)
|
||||
@@ -210,7 +210,7 @@
|
||||
if(health < maxhealth && istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/F = W
|
||||
if(F.welding)
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
playsound(src.loc, F.usesound, 50, 1)
|
||||
if(do_after(user, 20, src))
|
||||
user.visible_message("<span class='notice'>\The [user] repairs some damage to \the [src].</span>", "<span class='notice'>You repair some damage to \the [src].</span>")
|
||||
health = min(health+(maxhealth/5), maxhealth) // 20% repair per application
|
||||
@@ -219,7 +219,7 @@
|
||||
// Install
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
user.visible_message(anchored ? "<span class='notice'>\The [user] begins unscrewing \the [src].</span>" : "<span class='notice'>\The [user] begins fasten \the [src].</span>" )
|
||||
playsound(loc, 'sound/items/Screwdriver.ogg', 75, 1)
|
||||
playsound(loc, W.usesound, 75, 1)
|
||||
if(do_after(user, 10, src))
|
||||
to_chat(user, (anchored ? "<span class='notice'>You have unfastened \the [src] from the floor.</span>" : "<span class='notice'>You have fastened \the [src] to the floor.</span>"))
|
||||
anchored = !anchored
|
||||
@@ -258,7 +258,7 @@
|
||||
else
|
||||
playsound(loc, 'sound/effects/grillehit.ogg', 50, 1)
|
||||
take_damage(W.force)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.setClickCooldown(user.get_attack_speed(W))
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -156,9 +156,11 @@
|
||||
|
||||
/obj/structure/sign/warning/docking_area
|
||||
name = "\improper KEEP CLEAR: DOCKING AREA"
|
||||
icon_state = "evac"
|
||||
|
||||
/obj/structure/sign/warning/engineering_access
|
||||
name = "\improper ENGINEERING ACCESS"
|
||||
icon_state = "engine"
|
||||
|
||||
/obj/structure/sign/warning/fire
|
||||
name = "\improper DANGER: FIRE"
|
||||
@@ -185,9 +187,11 @@
|
||||
|
||||
/obj/structure/sign/warning/mail_delivery
|
||||
name = "\improper MAIL DELIVERY"
|
||||
icon_state = "mail"
|
||||
|
||||
/obj/structure/sign/warning/moving_parts
|
||||
name = "\improper MOVING PARTS"
|
||||
icon_state = "movingparts"
|
||||
|
||||
/obj/structure/sign/warning/nosmoking_1
|
||||
name = "\improper NO SMOKING"
|
||||
@@ -207,12 +211,15 @@
|
||||
|
||||
/obj/structure/sign/warning/secure_area
|
||||
name = "\improper SECURE AREA"
|
||||
icon_state = "securearea2"
|
||||
|
||||
/obj/structure/sign/warning/secure_area/armory
|
||||
name = "\improper ARMORY"
|
||||
icon_state = "armory"
|
||||
|
||||
/obj/structure/sign/warning/server_room
|
||||
name = "\improper SERVER ROOM"
|
||||
icon_state = "server"
|
||||
|
||||
/obj/structure/sign/warning/siphon_valve
|
||||
name = "\improper SIPHON VALVE"
|
||||
@@ -224,16 +231,19 @@
|
||||
/obj/structure/sign/warning/vent_port
|
||||
name = "\improper EJECTION/VENTING PORT"
|
||||
|
||||
/obj/structure/sign/warning/emergence
|
||||
name = "\improper EMERGENT INTELLIGENCE DETAILS"
|
||||
icon_state = "rogueai"
|
||||
|
||||
/obj/structure/sign/redcross
|
||||
name = "medbay"
|
||||
desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here."
|
||||
icon_state = "redcross"
|
||||
icon_state = "bluecross"
|
||||
|
||||
/obj/structure/sign/greencross
|
||||
name = "medbay"
|
||||
desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here."
|
||||
icon_state = "greencross"
|
||||
icon_state = "bluecross2"
|
||||
|
||||
/obj/structure/sign/goldenplaque
|
||||
name = "The Most Robust Men Award for Robustness"
|
||||
@@ -250,6 +260,11 @@
|
||||
desc = "This plaque commemorates the fall of the Atmos FEA division. For all the charred, dizzy, and brittle men who have died in its hands."
|
||||
icon_state = "atmosplaque"
|
||||
|
||||
/obj/structure/sign/periodic
|
||||
name = "periodic table"
|
||||
desc = "A sign reminding those visiting of the elements of the periodic table- though, they should have memorized them by now."
|
||||
icon_state = "periodic"
|
||||
|
||||
/obj/structure/sign/double/maltesefalcon //The sign is 64x32, so it needs two tiles. ;3
|
||||
name = "The Maltese Falcon"
|
||||
desc = "The Maltese Falcon, Space Bar and Grill."
|
||||
@@ -262,7 +277,7 @@
|
||||
|
||||
/obj/structure/sign/science //These 3 have multiple types, just var-edit the icon_state to whatever one you want on the map
|
||||
name = "\improper SCIENCE!"
|
||||
desc = "A warning sign which reads 'SCIENCE!'."
|
||||
desc = "A warning sign which reads 'SCIENCE'."
|
||||
icon_state = "science1"
|
||||
|
||||
/obj/structure/sign/chemistry
|
||||
@@ -278,13 +293,18 @@
|
||||
/obj/structure/sign/hydro
|
||||
name = "\improper HYDROPONICS"
|
||||
desc = "A sign labelling an area as a place where plants are grown."
|
||||
icon_state = "hydro1"
|
||||
icon_state = "hydro2"
|
||||
|
||||
/obj/structure/sign/hydrostorage
|
||||
name = "\improper HYDROPONICS STORAGE"
|
||||
desc = "A sign labelling an area as a place where plant growing supplies are kept."
|
||||
icon_state = "hydro3"
|
||||
|
||||
/obj/structure/sign/xenobio
|
||||
name = "\improper XENOBIOLOGY"
|
||||
desc = "A warning sign which reads XENOBIOLOGY."
|
||||
icon_state = "xenobio3"
|
||||
|
||||
/obj/structure/sign/directions
|
||||
name = "direction sign"
|
||||
desc = "A direction sign, claiming to know the way."
|
||||
@@ -328,6 +348,11 @@
|
||||
desc = "A direction sign, pointing out which way the Cargo department is."
|
||||
icon_state = "direction_crg"
|
||||
|
||||
/obj/structure/sign/directions/roomnum
|
||||
name = "room number"
|
||||
desc = "A sign detailing the number of the room beside it."
|
||||
icon_state = "roomnum"
|
||||
|
||||
/obj/structure/sign/christmas/lights
|
||||
name = "Christmas lights"
|
||||
desc = "Flashy and pretty."
|
||||
@@ -366,4 +391,32 @@
|
||||
|
||||
/obj/structure/sign/hangar/three
|
||||
name = "\improper Hangar Three"
|
||||
icon_state = "hangar-3"
|
||||
icon_state = "hangar-3"
|
||||
|
||||
/obj/structure/sign/atmos
|
||||
name = "\improper WASTE"
|
||||
icon_state = "atmos_waste"
|
||||
|
||||
/obj/structure/sign/atmos/o2
|
||||
name = "\improper OXYGEN"
|
||||
icon_state = "atmos_o2"
|
||||
|
||||
/obj/structure/sign/atmos/co2
|
||||
name = "\improper CARBON DIOXIDE"
|
||||
icon_state = "atmos_co2"
|
||||
|
||||
/obj/structure/sign/atmos/phoron
|
||||
name = "\improper PHORON"
|
||||
icon_state = "atmos_phoron"
|
||||
|
||||
/obj/structure/sign/atmos/n2o
|
||||
name = "\improper NITROUS OXIDE"
|
||||
icon_state = "atmos_n2o"
|
||||
|
||||
/obj/structure/sign/atmos/n2
|
||||
name = "\improper NITROGEN"
|
||||
icon_state = "atmos_n2"
|
||||
|
||||
/obj/structure/sign/atmos/air
|
||||
name = "\improper AIR"
|
||||
icon_state = "atmos_air"
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
var/material/material
|
||||
var/material/padding_material
|
||||
var/base_icon = "bed"
|
||||
var/applies_material_colour = 1
|
||||
|
||||
/obj/structure/bed/New(var/newloc, var/new_material, var/new_padding_material)
|
||||
..(newloc)
|
||||
@@ -46,7 +47,8 @@
|
||||
var/cache_key = "[base_icon]-[material.name]"
|
||||
if(isnull(stool_cache[cache_key]))
|
||||
var/image/I = image('icons/obj/furniture.dmi', base_icon)
|
||||
I.color = material.icon_colour
|
||||
if(applies_material_colour) //VOREStation Add - Goes with added var
|
||||
I.color = material.icon_colour
|
||||
stool_cache[cache_key] = I
|
||||
overlays |= stool_cache[cache_key]
|
||||
// Padding overlay.
|
||||
@@ -172,13 +174,6 @@
|
||||
/obj/structure/bed/padded/New(var/newloc)
|
||||
..(newloc,"plastic","cotton")
|
||||
|
||||
/obj/structure/bed/alien
|
||||
name = "resting contraption"
|
||||
desc = "This looks similar to contraptions from earth. Could aliens be stealing our technology?"
|
||||
|
||||
/obj/structure/bed/alien/New(var/newloc)
|
||||
..(newloc,"resin")
|
||||
|
||||
/obj/structure/bed/double
|
||||
name = "double bed"
|
||||
icon_state = "doublebed"
|
||||
@@ -200,13 +195,22 @@
|
||||
*/
|
||||
/obj/structure/bed/roller
|
||||
name = "roller bed"
|
||||
desc = "A portable bed-on-wheels made for transporting medical patients."
|
||||
icon = 'icons/obj/rollerbed.dmi'
|
||||
icon_state = "down"
|
||||
icon_state = "rollerbed"
|
||||
anchored = 0
|
||||
surgery_odds = 75
|
||||
var/bedtype = /obj/structure/bed/roller
|
||||
var/rollertype = /obj/item/roller
|
||||
|
||||
/obj/structure/bed/roller/adv
|
||||
name = "advanced roller bed"
|
||||
icon_state = "rollerbedadv"
|
||||
bedtype = /obj/structure/bed/roller/adv
|
||||
rollertype = /obj/item/roller/adv
|
||||
|
||||
/obj/structure/bed/roller/update_icon()
|
||||
return // Doesn't care about material or anything else.
|
||||
return
|
||||
|
||||
/obj/structure/bed/roller/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/wrench) || istype(W,/obj/item/stack) || istype(W, /obj/item/weapon/wirecutters))
|
||||
@@ -216,7 +220,7 @@
|
||||
user_unbuckle_mob(user)
|
||||
else
|
||||
visible_message("[user] collapses \the [src.name].")
|
||||
new/obj/item/roller(get_turf(src))
|
||||
new bedtype(get_turf(src))
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
return
|
||||
@@ -226,14 +230,16 @@
|
||||
name = "roller bed"
|
||||
desc = "A collapsed roller bed that can be carried around."
|
||||
icon = 'icons/obj/rollerbed.dmi'
|
||||
icon_state = "folded"
|
||||
icon_state = "folded_rollerbed"
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = ITEMSIZE_LARGE // Can't be put in backpacks. Oh well.
|
||||
w_class = ITEMSIZE_LARGE
|
||||
var/rollertype = /obj/item/roller
|
||||
var/bedtype = /obj/structure/bed/roller
|
||||
|
||||
/obj/item/roller/attack_self(mob/user)
|
||||
var/obj/structure/bed/roller/R = new /obj/structure/bed/roller(user.loc)
|
||||
R.add_fingerprint(user)
|
||||
qdel(src)
|
||||
var/obj/structure/bed/roller/R = new bedtype(user.loc)
|
||||
R.add_fingerprint(user)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/roller/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
|
||||
@@ -247,11 +253,19 @@
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/roller/adv
|
||||
name = "advanced roller bed"
|
||||
desc = "A high-tech, compact version of the regular roller bed."
|
||||
icon_state = "folded_rollerbedadv"
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
rollertype = /obj/item/roller/adv
|
||||
bedtype = /obj/structure/bed/roller/adv
|
||||
|
||||
/obj/item/roller_holder
|
||||
name = "roller bed rack"
|
||||
desc = "A rack for carrying a collapsed roller bed."
|
||||
icon = 'icons/obj/rollerbed.dmi'
|
||||
icon_state = "folded"
|
||||
icon_state = "rollerbed"
|
||||
var/obj/item/roller/held
|
||||
|
||||
/obj/item/roller_holder/New()
|
||||
@@ -284,13 +298,13 @@
|
||||
M.pixel_y = 6
|
||||
M.old_y = 6
|
||||
density = 1
|
||||
icon_state = "up"
|
||||
icon_state = "[initial(icon_state)]_up"
|
||||
else
|
||||
M.pixel_y = 0
|
||||
M.old_y = 0
|
||||
density = 0
|
||||
icon_state = "down"
|
||||
|
||||
icon_state = "[initial(icon_state)]"
|
||||
update_icon()
|
||||
return ..()
|
||||
|
||||
/obj/structure/bed/roller/MouseDrop(over_object, src_location, over_location)
|
||||
@@ -299,7 +313,19 @@
|
||||
if(!ishuman(usr)) return
|
||||
if(buckled_mob) return 0
|
||||
visible_message("[usr] collapses \the [src.name].")
|
||||
new/obj/item/roller(get_turf(src))
|
||||
new rollertype(get_turf(src))
|
||||
spawn(0)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/structure/bed/alien
|
||||
name = "resting contraption"
|
||||
desc = "Whatever species designed this must've enjoyed relaxation as well. Looks vaguely comfy."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "bed"
|
||||
|
||||
/obj/structure/bed/alien/update_icon()
|
||||
return // Doesn't care about material or anything else.
|
||||
|
||||
/obj/structure/bed/alien/attackby(obj/item/weapon/W, mob/user)
|
||||
return // No deconning.
|
||||
@@ -82,6 +82,14 @@
|
||||
src.set_dir(turn(src.dir, 90))
|
||||
return
|
||||
|
||||
/obj/structure/bed/chair/shuttle
|
||||
name = "chair"
|
||||
desc = "You sit in this. Either by will or force."
|
||||
icon_state = "shuttle_chair"
|
||||
color = null
|
||||
base_icon = "shuttle_chair"
|
||||
applies_material_colour = 0
|
||||
|
||||
// Leaving this in for the sake of compilation.
|
||||
/obj/structure/bed/chair/comfy
|
||||
desc = "It's a chair. It looks comfy."
|
||||
|
||||
@@ -72,7 +72,7 @@ var/global/list/stool_cache = list() //haha stool
|
||||
/obj/item/weapon/stool/attack(mob/M as mob, mob/user as mob)
|
||||
if (prob(5) && istype(M,/mob/living))
|
||||
user.visible_message("<span class='danger'>[user] breaks [src] over [M]'s back!</span>")
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.setClickCooldown(user.get_attack_speed())
|
||||
user.do_attack_animation(M)
|
||||
|
||||
user.drop_from_inventory(src)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
/obj/structure/toilet/attack_hand(mob/living/user as mob)
|
||||
if(swirlie)
|
||||
usr.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
usr.setClickCooldown(user.get_attack_speed())
|
||||
usr.visible_message("<span class='danger'>[user] slams the toilet seat onto [swirlie.name]'s head!</span>", "<span class='notice'>You slam the toilet seat onto [swirlie.name]'s head!</span>", "You hear reverberating porcelain.")
|
||||
swirlie.adjustBruteLoss(5)
|
||||
return
|
||||
@@ -54,7 +54,7 @@
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/weapon/grab))
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.setClickCooldown(user.get_attack_speed(I))
|
||||
var/obj/item/weapon/grab/G = I
|
||||
|
||||
if(isliving(G.affecting))
|
||||
|
||||
@@ -91,16 +91,13 @@
|
||||
playsound(src, "shatter", 70, 1)
|
||||
if(display_message)
|
||||
visible_message("[src] shatters!")
|
||||
if(dir == SOUTHWEST)
|
||||
var/index = null
|
||||
index = 0
|
||||
while(index < 2)
|
||||
new shardtype(loc) //todo pooling?
|
||||
if(reinf) new /obj/item/stack/rods(loc)
|
||||
index++
|
||||
else
|
||||
new shardtype(loc)
|
||||
if(reinf)
|
||||
new /obj/item/stack/rods(loc)
|
||||
if(is_fulltile())
|
||||
new shardtype(loc) //todo pooling?
|
||||
if(reinf) new /obj/item/stack/rods(loc)
|
||||
if(reinf)
|
||||
new /obj/item/stack/rods(loc)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -178,7 +175,7 @@
|
||||
playsound(loc, 'sound/effects/Glasshit.ogg', 50, 1)
|
||||
|
||||
/obj/structure/window/attack_hand(mob/user as mob)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.setClickCooldown(user.get_attack_speed())
|
||||
if(HULK in user.mutations)
|
||||
user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!"))
|
||||
user.visible_message("<span class='danger'>[user] smashes through [src]!</span>")
|
||||
@@ -206,7 +203,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/window/attack_generic(var/mob/user, var/damage)
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.setClickCooldown(user.get_attack_speed())
|
||||
if(!damage)
|
||||
return
|
||||
if(damage >= 10)
|
||||
@@ -293,17 +290,15 @@
|
||||
else
|
||||
playsound(src, W.usesound, 75, 1)
|
||||
visible_message("<span class='notice'>[user] dismantles \the [src].</span>")
|
||||
if(dir == SOUTHWEST)
|
||||
var/obj/item/stack/material/mats = new glasstype(loc)
|
||||
mats.amount = is_fulltile() ? 4 : 2
|
||||
else
|
||||
new glasstype(loc)
|
||||
var/obj/item/stack/material/mats = new glasstype(loc)
|
||||
if(is_fulltile())
|
||||
mats.amount = 4
|
||||
qdel(src)
|
||||
else if(istype(W,/obj/item/frame) && anchored)
|
||||
var/obj/item/frame/F = W
|
||||
F.try_build(src)
|
||||
else
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.setClickCooldown(user.get_attack_speed(W))
|
||||
if(W.damtype == BRUTE || W.damtype == BURN)
|
||||
user.do_attack_animation(src)
|
||||
hit(W.force)
|
||||
@@ -332,6 +327,9 @@
|
||||
if(usr.incapacitated())
|
||||
return 0
|
||||
|
||||
if(is_fulltile())
|
||||
return 0
|
||||
|
||||
if(anchored)
|
||||
usr << "It is fastened to the floor therefore you can't rotate it!"
|
||||
return 0
|
||||
@@ -351,6 +349,9 @@
|
||||
if(usr.incapacitated())
|
||||
return 0
|
||||
|
||||
if(is_fulltile())
|
||||
return 0
|
||||
|
||||
if(anchored)
|
||||
usr << "It is fastened to the floor therefore you can't rotate it!"
|
||||
return 0
|
||||
@@ -364,13 +365,16 @@
|
||||
/obj/structure/window/New(Loc, start_dir=null, constructed=0)
|
||||
..()
|
||||
|
||||
if (start_dir)
|
||||
set_dir(start_dir)
|
||||
|
||||
//player-constructed windows
|
||||
if (constructed)
|
||||
anchored = 0
|
||||
state = 0
|
||||
update_verbs()
|
||||
|
||||
if (start_dir)
|
||||
set_dir(start_dir)
|
||||
if(is_fulltile())
|
||||
maxhealth *= 2
|
||||
|
||||
health = maxhealth
|
||||
|
||||
@@ -409,10 +413,10 @@
|
||||
|
||||
//Updates the availabiliy of the rotation verbs
|
||||
/obj/structure/window/proc/update_verbs()
|
||||
if(anchored)
|
||||
if(anchored || is_fulltile())
|
||||
verbs -= /obj/structure/window/proc/rotate
|
||||
verbs -= /obj/structure/window/proc/revrotate
|
||||
else
|
||||
else if(!is_fulltile())
|
||||
verbs += /obj/structure/window/proc/rotate
|
||||
verbs += /obj/structure/window/proc/revrotate
|
||||
|
||||
@@ -427,7 +431,7 @@
|
||||
var/list/dirs = list()
|
||||
if(anchored)
|
||||
for(var/obj/structure/window/W in orange(src,1))
|
||||
if(W.anchored && W.density && W.type == src.type && W.is_fulltile()) //Only counts anchored, not-destroyed fill-tile windows.
|
||||
if(W.anchored && W.density && W.glasstype == src.glasstype && W.is_fulltile()) //Only counts anchored, not-destroyed fill-tile windows.
|
||||
dirs += get_dir(src, W)
|
||||
|
||||
var/list/connections = dirs_to_corner_states(dirs)
|
||||
@@ -510,14 +514,6 @@
|
||||
glasstype = /obj/item/stack/material/glass/reinforced
|
||||
force_threshold = 6
|
||||
|
||||
|
||||
/obj/structure/window/New(Loc, constructed=0)
|
||||
..()
|
||||
|
||||
//player-constructed windows
|
||||
if (constructed)
|
||||
state = 0
|
||||
|
||||
/obj/structure/window/reinforced/full
|
||||
dir = SOUTHWEST
|
||||
icon_state = "fwindow"
|
||||
|
||||
Reference in New Issue
Block a user