New Content Update (#43)

* New Content Update

* readded shuttle autocall
This commit is contained in:
unusualcrow
2016-09-18 13:04:47 -04:00
committed by TalkingCactus
parent 8a9bbcf97d
commit 24c10b1b7f
52 changed files with 972 additions and 362 deletions
+7
View File
@@ -95,6 +95,13 @@
if(colour)
color = colour
/obj/effect/overlay/temp/kinetic_blast
name = "kinetic explosion"
icon = 'icons/obj/projectiles.dmi'
icon_state = "kinetic_blast"
layer = ABOVE_ALL_MOB_LAYER
duration = 4
/obj/effect/overlay/temp/explosion
name = "explosion"
icon = 'icons/effects/96x96.dmi'
+1 -1
View File
@@ -38,7 +38,7 @@
var/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6")
var/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED,
RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER)
var/list/graffiti_large_h = list("yiffhell", "secborg", "paint")
var/list/graffiti_large_h = list("yiffhell", "secborg", "paint", "madworld1", "madworld2")
var/list/all_drawables
@@ -0,0 +1,25 @@
/obj/item/device/boobytrap
name = "booby trap"
desc = null //Different examine for traitors
item_state = "electronic"
icon_state = "boobytrap"
w_class = 1
throw_range = 4
throw_speed = 1
flags = NOBLUDGEON
force = 3
attack_verb = list("trapped", "rused", "tricked")
materials = list(MAT_METAL=50, MAT_GLASS=30)
origin_tech = "syndicate=1;combat=3;engineering=3"
/obj/item/device/boobytrap/proc/blow()
explosion(src.loc,0,0,2,4,flame_range = 4)
qdel(src)
/obj/item/device/boobytrap/examine(mob/user)
..()
if(user.mind in ticker.mode.traitors) //No nuke ops because the device is excluded from nuclear
user << "A small device used to rig lockers and boxes with an explosive surprise. \
To use, simply attach it to a box or a locker."
else
user << "A suspicious array of delicate wires and parts."
@@ -187,6 +187,22 @@
else
return ..()
/obj/item/weapon/twohanded/attackby(obj/item/weapon/W, mob/living/user, params)
if(istype(W, /obj/item/weapon/melee/energy/sword/saber))
switch(alert(user, "You feel like the sword might be a bit more dangerous to yourself than to others if you do this.", "Combine?", "Proceed", "Abort"))
if("Abort" || !in_range(src, user) || !src || !W || user.incapacitated())
return
user << "<span class='notice'>You attach the energy sword to the double \
bladed energy sword, making a single triple-bladed weapon! \
You're a genius!</span>"
var/obj/item/weapon/trisword/newSaber = new(user.loc)
user.unEquip(W)
user.unEquip(src)
qdel(W)
qdel(src)
user.put_in_hands(newSaber)
return
/obj/item/weapon/melee/energy/sword/pirate
name = "energy cutlass"
desc = "Arrrr matey."
@@ -221,3 +237,67 @@
/obj/item/weapon/melee/energy/blade/attack_self(mob/user)
return
/* Triple Esword! [joke weapon] */
/obj/item/weapon/trisword
name = "triple-bladed energy sword"
desc = "Wow, an energy sword with THREE blades! This must be a REALLY good weapon."
force = 3
throwforce = 5
w_class = 2
icon_state = "trisaber_off"
item_state = "sword0"
var/progress = 0
var/on = 0
/obj/item/weapon/trisword/attack_self(mob/living/carbon/user)
if(on || progress > 5)
return
if(progress == 0)
user << "<span class='notice'>You extend the... Hey, wait a second, how do you turn this thing on?</span>"
progress = 1
return
if(progress == 1)
user << "<span class='notice'>No, seriously, what the fuck? Does this thing even have a button on it?</span>"
progress = 2
return
if(progress == 2)
user << "<span class='danger'>Okay, you're getting sick of this. You mash random panels on [src], trying to find a way to activate it.</span>"
progress = 3
return
if(progress == 3)
user << "<span class='danger'>God dammit, how the fuck do you turn this shit on?</span>"
progress = 4
return
if(progress == 4)
user << "<span class='notice'>You find what feels like a button on [src]! Now you just need to press it.</span>"
progress = 5
return
if(progress == 5)
user << "<span class='userdanger'>The third blade on [src] extends straight into your gut! God fucking dammit.</span>"
playsound(user, 'sound/weapons/saberon.ogg', 35, 1)
playsound(user, 'sound/weapons/blade1.ogg', 35, 1)
on = 1
icon_state = "trisaber"
if(!remove_item_from_storage(user))
user.unEquip(src)
user.adjustBruteLoss(110)
/obj/item/weapon/trisword/dropped()
..()
if(!on)
progress = 0
/obj/item/weapon/trisword/attack_hand(mob/living/carbon/user)
if(on)
user << "<span class='userdanger'>You try to pick up [src], but accidentally grab one of the blades, and quickly drop the whole thing out of pain.</span>"
user.adjustBruteLoss(15)
playsound(user, 'sound/weapons/blade1.ogg', 35, 1)
else
..()
/obj/item/weapon/trisword/attack_tk(mob/living/carbon/user)
user << "<span class='danger'>You try to comprehend \the [src].</span>"
user << "<span class='userdanger'>Your head hurts.</span>"
user.adjustBrainLoss(50)
user.confused += 15
@@ -182,7 +182,10 @@
/obj/item/weapon/reagent_containers/pill,
/obj/item/weapon/storage/pill_bottle,
/obj/item/weapon/ore,
/obj/item/weapon/reagent_containers/food/drinks
/obj/item/weapon/reagent_containers/food/drinks,
/obj/item/organ/hivelord_core,
/obj/item/device/wormhole_jaunter
)
@@ -27,7 +27,100 @@
item_state = "syringe_kit"
burn_state = FLAMMABLE
var/foldable = /obj/item/stack/sheet/cardboard
var/obj/item/device/boobytrap/trap = null
/obj/item/weapon/storage/box/examine(mob/user)
..()
if(trap && in_range(user, src))
user << "<span class='warning'>Something seems to be wired to the inside of the box!</span>"
return
/obj/item/weapon/storage/box/attackby(obj/item/C, mob/user, params)
if(!istype(C, /obj/item/device/boobytrap) && trap && !istype(C, /obj/item/weapon/wirecutters))
visible_message("<span class='warning'>[src] blows up in a spray of deadly shrapnel!</span>")
trap.loc = get_turf(src)
trap.blow()
trap = null
for(var/mob/living/carbon/human/H in orange(2,src))
H.Paralyse(8)
H.adjust_fire_stacks(1)
H.IgniteMob()
qdel(src)
if(istype(C, /obj/item/device/boobytrap))
if(trap)
user << "<span class='warning'>There's already a booby trap hooked up to this box!</span>"
return
user << "<span class='warning'>You apply [C]. Next time someone opens the box, it will explode.</span>"
C.loc = src
trap = C
qdel(C)
user.drop_item()
if(istype(C, /obj/item/weapon/wirecutters) && trap)
user << "<span class='notice'>You begin attempting to disarm the booby trap...</span>"
visible_message("<span class='warning'>[user] begins attempting to disarm the booby trap.</span>")
if(do_after(user, 80, target = src))
if(prob(75))
user << "<span class='notice'>You disarm the booby trap, destroying it in the process.</span>"
visible_message("<span class='notice'>[user] disarms the booby trap!</span>")
trap = null
else
user << "<span class='warning'>You accidentally bump the sensor and set off the booby trap!</span>"
visible_message("<span class='warning'>[user] fails to disarm the booby trap!</span>")
visible_message("<span class='warning'>[src] blows up in a spray of deadly shrapnel!</span>")
trap.loc = get_turf(src)
trap.blow()
trap = null
for(var/mob/living/carbon/human/H in orange(2,src))
H.Paralyse(8)
H.adjust_fire_stacks(1)
H.IgniteMob()
qdel(src)
else
..()
/obj/item/weapon/storage/box/MouseDrop(atom/over_object)
if(iscarbon(usr) || isdrone(usr))
var/mob/M = usr
if(!over_object)
return
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
return
if(over_object == M && Adjacent(M))
if(trap)
visible_message("<span class='warning'>[src] blows up in a spray of deadly shrapnel!</span>")
trap.loc = get_turf(src)
trap.blow()
trap = null
for(var/mob/living/carbon/human/H in orange(2,src))
H.Paralyse(8)
H.adjust_fire_stacks(1)
H.IgniteMob()
qdel(src)
..()
/obj/item/weapon/storage/box/attack_hand(mob/user)
..()
if(trap)
visible_message("<span class='warning'>[src] blows up in a spray of deadly shrapnel!</span>")
trap.loc = get_turf(src)
trap.blow()
trap = null
for(var/mob/living/carbon/human/H in orange(2,src))
H.Paralyse(8)
H.adjust_fire_stacks(1)
H.IgniteMob()
qdel(src)
return ..()
/obj/item/weapon/storage/box/attack_self(mob/user)
..()
@@ -374,8 +374,8 @@
if(!can_be_inserted(W, 0 , user))
return
handle_item_insertion(W, 0 , user)
if(!istype(W, /obj/item/device/boobytrap))
handle_item_insertion(W, 0 , user)
/obj/item/weapon/storage/attack_hand(mob/user)
@@ -283,3 +283,8 @@
for(var/i in 1 to 3)
new/obj/item/cardboard_cutout/adaptive(src)
new/obj/item/toy/crayon/rainbow(src)
/obj/item/weapon/storage/box/syndie_kit/thermite/New()
..()
new /obj/item/weapon/reagent_containers/spray/thermite(src)
new /obj/item/weapon/lighter(src)
+15 -9
View File
@@ -83,13 +83,6 @@
user.put_in_inactive_hand(O)
return
/obj/item/weapon/twohanded/mob_can_equip(mob/M, slot)
//Cannot equip wielded items.
if(wielded)
M << "<span class='warning'>Unwield the [name] first!</span>"
return 0
return ..()
/obj/item/weapon/twohanded/dropped(mob/user)
..()
//handles unwielding a twohanded weapon when dropped as well as clearing up the offhand
@@ -109,6 +102,11 @@
else //Trying to wield it
wield(user)
/obj/item/weapon/twohanded/equip_to_best_slot(mob/M)
if(..())
unwield(M)
return
///////////OFFHAND///////////////
/obj/item/weapon/twohanded/offhand
name = "offhand"
@@ -131,7 +129,7 @@
return
/obj/item/weapon/twohanded/required/mob_can_equip(mob/M, slot)
if(wielded)
if(wielded && !slot_flags)
M << "<span class='warning'>\The [src] is too cumbersome to carry with anything but your hands!</span>"
return 0
return ..()
@@ -143,9 +141,17 @@
if(H != null)
user << "<span class='notice'>\The [src] is too cumbersome to carry in one hand!</span>"
return
wield(user)
if(src.loc != user)
wield(user)
..()
/obj/item/weapon/twohanded/required/equipped(mob/user, slot)
..()
if(slot == slot_l_hand || slot == slot_r_hand)
wield(user)
else
unwield(user)
/obj/item/weapon/twohanded/
@@ -29,6 +29,7 @@
var/close_sound = 'sound/machines/click.ogg'
var/cutting_sound = 'sound/items/Welder.ogg'
var/material_drop = /obj/item/stack/sheet/metal
var/obj/item/device/boobytrap/trap = null
/obj/structure/closet/New()
..()
@@ -73,6 +74,8 @@
user << "<span class='notice'>It appears to be broken.</span>"
else if(secure && !opened)
user << "<span class='notice'>Alt-click to [locked ? "unlock" : "lock"].</span>"
if(trap && in_range(user, src))
user << "<span class='warning'>Something seems to be wired to the inside of the closet!</span>"
/obj/structure/closet/alter_health()
return get_turf(src)
@@ -130,6 +133,17 @@
climb_time *= 0.5 //it's faster to climb onto an open thing
dump_contents()
update_icon()
if(trap)
visible_message("<span class='warning'>[src] blows up in a spray of deadly shrapnel!</span>")
trap.loc = get_turf(src)
trap.blow()
trap = null
for(var/mob/living/carbon/human/H in orange(2,src))
H.Paralyse(8)
H.adjust_fire_stacks(1)
H.IgniteMob()
qdel(src)
return ..()
return 1
/obj/structure/closet/proc/insert(atom/movable/AM)
@@ -213,9 +227,20 @@
qdel(src)
/obj/structure/closet/attackby(obj/item/weapon/W, mob/user, params)
if(user in src)
return
if(opened)
if(istype(W, /obj/item/device/boobytrap))
if(trap)
user << "<span class='warning'>There's already a booby trap hooked up to this closet!</span>"
..()
user << "<span class='warning'>You apply [W]. Next time someone opens the closet, it will explode.</span>"
W.loc = src
trap = W
qdel(W)
..()
if(istype(W, cutting_tool))
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
@@ -237,6 +262,10 @@
else if(user.drop_item())
W.forceMove(loc)
return 1
if(!opened && istype(W, /obj/item/device/boobytrap))
user << "<span class='warning'>You must open the closet first!</span>"
..()
else if(istype(W, /obj/item/weapon/weldingtool) && can_weld_shut)
var/obj/item/weapon/weldingtool/WT = W
if(!WT.remove_fuel(0, user))
@@ -252,10 +281,33 @@
"<span class='notice'>You [welded ? "weld" : "unwelded"] \the [src] with \the [WT].</span>",
"<span class='italics'>You hear welding.</span>")
update_icon()
else if(istype(W, /obj/item/weapon/wirecutters) && !opened && trap)
user << "<span class='notice'>You begin attempting to disarm the booby trap...</span>"
visible_message("<span class='warning'>[user] begins attempting to disarm the booby trap.</span>")
if(do_after(user, 80, target = src))
if(prob(75))
user << "<span class='notice'>You disarm the booby trap, destroying it in the process.</span>"
visible_message("<span class='notice'>[user] disarms the booby trap!</span>")
trap = null
else
user << "<span class='warning'>You accidentally bump the sensor and set off the booby trap!</span>"
visible_message("<span class='warning'>[user] fails to disarm the booby trap!</span>")
visible_message("<span class='warning'>[src] blows up in a spray of deadly shrapnel!</span>")
trap.loc = get_turf(src)
trap.blow()
trap = null
for(var/mob/living/carbon/human/H in orange(2,src))
H.Paralyse(8)
H.adjust_fire_stacks(1)
H.IgniteMob()
qdel(src)
else if(user.a_intent != "harm" && !(W.flags & NOBLUDGEON))
if(W.GetID() || !toggle(user))
togglelock(user)
return 1
else
return ..()
+89 -4
View File
@@ -103,16 +103,19 @@
else
return ..()
/obj/structure/urinal
name = "urinal"
desc = "The HU-452, an experimental urinal."
desc = "The HU-452, an experimental urinal. Comes complete with experimental urinal cake."
icon = 'icons/obj/watercloset.dmi'
icon_state = "urinal"
density = 0
anchored = 1
var/exposed = 0 // can you currently put an item inside
var/obj/item/hiddenitem = null // what's in the urinal
/obj/structure/urinal/New()
..()
hiddenitem = new /obj/item/weapon/reagent_containers/food/urinalcake
/obj/structure/urinal/attack_hand(mob/user)
if(user.pulling && user.a_intent == "grab" && isliving(user.pulling))
@@ -126,9 +129,50 @@
GM.adjustBruteLoss(8)
else
user << "<span class='warning'>You need a tighter grip!</span>"
else if(exposed)
if(!hiddenitem)
user << "<span class='notice'>There is nothing in the drain holder.</span>"
else
if(ishuman(user))
user.put_in_hands(hiddenitem)
else
hiddenitem.forceMove(get_turf(src))
user << "<span class='notice'>You fish [hiddenitem] out of the drain enclosure.</span>"
src.hiddenitem = null
else
..()
/obj/structure/urinal/attackby(obj/item/I, mob/living/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
user << "<span class='notice'>You start to [exposed ? "screw the cap back into place" : "unscrew the cap to the drain protector"]...</span>"
playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1)
if(do_after(user, 20/I.toolspeed, target = src))
user.visible_message("[user] [exposed ? "screws the cap back into place" : "unscrew the cap to the drain protector"]!", "<span class='notice'>You [exposed ? "screw the cap back into place" : "unscrew the cap on the drain"]!</span>", "<span class='italics'>You hear metal and squishing noises.</span>")
exposed = !exposed
else if(exposed)
if (hiddenitem)
user << "<span class='warning'>There is already something in the drain enclosure.</span>"
return
if(I.w_class > 1)
user << "<span class='warning'>[I] is too large for the drain enclosure.</span>"
return
if(!user.drop_item())
user << "<span class='warning'>\[I] is stuck to your hand, you cannot put it in the drain enclosure!</span>"
return
I.forceMove(src)
hiddenitem = I
user << "<span class='notice'>You place [I] into the drain enclosure.</span>"
/obj/item/weapon/reagent_containers/food/urinalcake
name = "urinal cake"
desc = "The noble urinal cake, protecting the station's pipes from the station's pee. Do not eat."
icon = 'icons/obj/items.dmi'
icon_state = "urinalcake"
w_class = 1
list_reagents = list("chlorine" = 3, "ammonia" = 1)
/obj/machinery/shower
name = "shower"
desc = "The HS-451. Installed in the 2550s by the Nanotrasen Hygiene Division."
@@ -376,7 +420,7 @@
var/washing_face = 0
if(selected_area in list("head", "mouth", "eyes"))
washing_face = 1
user.visible_message("<span class='notice'>[user] start washing their [washing_face ? "face" : "hands"]...</span>", \
user.visible_message("<span class='notice'>[user] starts washing their [washing_face ? "face" : "hands"]...</span>", \
"<span class='notice'>You start washing your [washing_face ? "face" : "hands"]...</span>")
busy = 1
@@ -478,3 +522,44 @@
icon_state = "puddle-splash"
. = ..()
icon_state = "puddle"
//Shower Curtains//
//Defines used are pre-existing in layers.dm//
/obj/structure/curtain
name = "curtain"
desc = "Contains less than 1% mercury."
icon = 'icons/obj/watercloset.dmi'
icon_state = "open"
color = "#ACD1E9" //Default color, didn't bother hardcoding other colors, mappers can and should easily change it.
alpha = 200 //Mappers can also just set this to 255 if they want curtains that can't be seen through
layer = WALL_OBJ_LAYER
anchored = 1
opacity = 0
density = 0
var/open = TRUE
/obj/structure/curtain/proc/toggle()
open = !open
update_icon()
/obj/structure/curtain/update_icon()
if(!open)
icon_state = "closed"
layer = WALL_OBJ_LAYER
density = 1
open = FALSE
else
icon_state = "open"
layer = SIGN_LAYER
density = 0
open = TRUE
/obj/structure/curtain/attack_hand(mob/user)
playsound(loc, 'sound/effects/curtain.ogg', 50, 1)
toggle()
..()