mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-24 04:26:38 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into battery_things
This commit is contained in:
@@ -107,6 +107,18 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/effect/landmark/virtual_reality
|
||||
name = "virtual_reality"
|
||||
icon = 'icons/mob/screen1.dmi'
|
||||
icon_state = "x"
|
||||
anchored = 1.0
|
||||
|
||||
/obj/effect/landmark/virtual_reality/New()
|
||||
..()
|
||||
tag = "virtual_reality*[name]"
|
||||
invisibility = 101
|
||||
return 1
|
||||
|
||||
//Costume spawner landmarks
|
||||
/obj/effect/landmark/costume/New() //costume spawner, selects a random subclass and disappears
|
||||
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
var/list/sprite_sheets_obj = list()
|
||||
|
||||
var/toolspeed = 1.0 // This is a multipler on how 'fast' a tool works. e.g. setting this to 0.5 will make the tool work twice as fast.
|
||||
var/addblends // Icon overlay for ADD highlights when applicable.
|
||||
|
||||
/obj/item/New()
|
||||
..()
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
//..() //Doesn't need to run the parent. Since when can fucking bodybags be welded shut? -Agouri
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/wirecutters))
|
||||
user << "You cut the tag off the bodybag"
|
||||
to_chat(user, "You cut the tag off the bodybag")
|
||||
src.name = "body bag"
|
||||
src.overlays.Cut()
|
||||
return
|
||||
@@ -160,7 +160,7 @@
|
||||
O.name = "used stasis bag"
|
||||
O.icon = src.icon
|
||||
O.icon_state = "bodybag_used"
|
||||
O.desc = "Pretty useless now.."
|
||||
O.desc = "Pretty useless now..."
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/closet/body_bag/cryobag/MouseDrop(over_object, src_location, over_location)
|
||||
@@ -211,9 +211,9 @@
|
||||
/obj/structure/closet/body_bag/cryobag/examine(mob/user)
|
||||
..()
|
||||
if(Adjacent(user)) //The bag's rather thick and opaque from a distance.
|
||||
user << "<span class='info'>You peer into \the [src].</span>"
|
||||
to_chat(user, "<span class='info'>You peer into \the [src].</span>")
|
||||
if(syringe)
|
||||
user << "<span class='info'>It has a syringe added to it.</span>"
|
||||
to_chat(user, "<span class='info'>It has a syringe added to it.</span>")
|
||||
for(var/mob/living/L in contents)
|
||||
L.examine(user)
|
||||
|
||||
|
||||
@@ -374,7 +374,10 @@
|
||||
// This proc is used so that we can return out of the revive process while ensuring that busy and update_icon() are handled
|
||||
/obj/item/weapon/shockpaddles/proc/do_revive(mob/living/carbon/human/H, mob/user)
|
||||
if(!H.client && !H.teleop)
|
||||
to_chat(find_dead_player(H.ckey, 1), "Someone is attempting to resuscitate you. Re-enter your body if you want to be revived!")
|
||||
for(var/mob/observer/dead/ghost in player_list)
|
||||
if(ghost.mind == H.mind)
|
||||
to_chat(ghost, "<b><font color = #330033><font size = 3>Someone is attempting to resuscitate you. Re-enter your body if you want to be revived!</b> (Verbs -> Ghost -> Re-enter corpse)</font></font>")
|
||||
break
|
||||
|
||||
//beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
|
||||
user.visible_message("<span class='warning'>\The [user] begins to place [src] on [H]'s chest.</span>", "<span class='warning'>You begin to place [src] on [H]'s chest...</span>")
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#define RAD_LEVEL_LOW 5 //10 // Around the level at which radiation starts to become harmful
|
||||
#define RAD_LEVEL_MODERATE 15 //15
|
||||
#define RAD_LEVEL_HIGH 50 //50
|
||||
#define RAD_LEVEL_VERY_HIGH 100 //100
|
||||
#define RAD_LEVEL_LOW 0.01 // Around the level at which radiation starts to become harmful
|
||||
#define RAD_LEVEL_MODERATE 10
|
||||
#define RAD_LEVEL_HIGH 25
|
||||
#define RAD_LEVEL_VERY_HIGH 50
|
||||
|
||||
//Geiger counter
|
||||
//Rewritten version of TG's geiger counter
|
||||
@@ -19,7 +19,14 @@
|
||||
/obj/item/device/geiger/New()
|
||||
processing_objects |= src
|
||||
|
||||
/obj/item/device/geiger/Destroy()
|
||||
processing_objects -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/device/geiger/process()
|
||||
get_radiation()
|
||||
|
||||
/obj/item/device/geiger/proc/get_radiation()
|
||||
if(!scanning)
|
||||
return
|
||||
radiation_count = radiation_repository.get_rads_at_turf(get_turf(src))
|
||||
@@ -27,12 +34,29 @@
|
||||
|
||||
/obj/item/device/geiger/examine(mob/user)
|
||||
..(user)
|
||||
to_chat(user, "<span class='warning'>[scanning ? "ambient" : "stored"] radiation level: [radiation_count ? radiation_count : "0"]Bq.</span>")
|
||||
get_radiation()
|
||||
to_chat(user, "<span class='warning'>[scanning ? "Ambient" : "Stored"] radiation level: [radiation_count ? radiation_count : "0"]Bq.</span>")
|
||||
|
||||
/obj/item/device/geiger/rad_act(amount)
|
||||
if(!amount || !scanning)
|
||||
return FALSE
|
||||
|
||||
if(amount > radiation_count)
|
||||
radiation_count = amount
|
||||
|
||||
var/sound = "geiger"
|
||||
if(amount < 5)
|
||||
sound = "geiger_weak"
|
||||
playsound(src, sound, between(10, 10 + (radiation_count * 4), 100), 0)
|
||||
if(sound == "geiger_weak") // A weak geiger sound every two seconds sounds too infrequent.
|
||||
spawn(1 SECOND)
|
||||
playsound(src, sound, between(10, 10 + (radiation_count * 4), 100), 0)
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/geiger/attack_self(var/mob/user)
|
||||
scanning = !scanning
|
||||
update_icon()
|
||||
to_chat(user, "<span class='notice'>\icon[src] You switch [scanning ? "on" : "off"] [src].</span>")
|
||||
to_chat(user, "<span class='notice'>\icon[src] You switch [scanning ? "on" : "off"] \the [src].</span>")
|
||||
|
||||
/obj/item/device/geiger/update_icon()
|
||||
if(!scanning)
|
||||
@@ -40,12 +64,18 @@
|
||||
return 1
|
||||
|
||||
switch(radiation_count)
|
||||
if(null) icon_state = "geiger_on_1"
|
||||
if(-INFINITY to RAD_LEVEL_LOW) icon_state = "geiger_on_1"
|
||||
if(RAD_LEVEL_LOW + 1 to RAD_LEVEL_MODERATE) icon_state = "geiger_on_2"
|
||||
if(RAD_LEVEL_MODERATE + 1 to RAD_LEVEL_HIGH) icon_state = "geiger_on_3"
|
||||
if(RAD_LEVEL_HIGH + 1 to RAD_LEVEL_VERY_HIGH) icon_state = "geiger_on_4"
|
||||
if(RAD_LEVEL_VERY_HIGH + 1 to INFINITY) icon_state = "geiger_on_5"
|
||||
if(null)
|
||||
icon_state = "geiger_on_1"
|
||||
if(-INFINITY to RAD_LEVEL_LOW)
|
||||
icon_state = "geiger_on_1"
|
||||
if(RAD_LEVEL_LOW to RAD_LEVEL_MODERATE)
|
||||
icon_state = "geiger_on_2"
|
||||
if(RAD_LEVEL_MODERATE to RAD_LEVEL_HIGH)
|
||||
icon_state = "geiger_on_3"
|
||||
if(RAD_LEVEL_HIGH to RAD_LEVEL_VERY_HIGH)
|
||||
icon_state = "geiger_on_4"
|
||||
if(RAD_LEVEL_VERY_HIGH to INFINITY)
|
||||
icon_state = "geiger_on_5"
|
||||
|
||||
#undef RAD_LEVEL_LOW
|
||||
#undef RAD_LEVEL_MODERATE
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
var/spamcheck = 0
|
||||
var/emagged = 0
|
||||
var/insults = 0
|
||||
var/list/insultmsg = list("FUCK EVERYONE!", "I'M A TATER!", "ALL SECURITY TO SHOOT ME ON SIGHT!", "I HAVE A BOMB!", "CAPTAIN IS A COMDOM!", "FOR THE SYNDICATE!")
|
||||
var/list/insultmsg = list("FUCK EVERYONE!", "I'M A TERRORIST!", "ALL SECURITY TO SHOOT ME ON SIGHT!", "I HAVE A BOMB!", "CAPTAIN IS A COMDOM!", "GLORY TO ALMACH!")
|
||||
|
||||
/obj/item/device/megaphone/attack_self(mob/living/user as mob)
|
||||
if (user.client)
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
/obj/item/gunbox
|
||||
name = "detective's gun box"
|
||||
desc = "A secure box containing a Detective's sidearm."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "gunbox"
|
||||
w_class = ITEMSIZE_HUGE
|
||||
|
||||
/obj/item/gunbox/attack_self(mob/living/user)
|
||||
var/list/options = list()
|
||||
options[".45 Pistol"] = list(/obj/item/weapon/gun/projectile/colt/detective, /obj/item/ammo_magazine/m45/rubber, /obj/item/ammo_magazine/m45/rubber)
|
||||
options[".45 Revolver"] = list(/obj/item/weapon/gun/projectile/revolver/detective45, /obj/item/ammo_magazine/s45/rubber, /obj/item/ammo_magazine/s45/rubber)
|
||||
var/choice = input(user,"Would you prefer a pistol or a revolver?") as null|anything in options
|
||||
if(src && choice)
|
||||
var/list/things_to_spawn = options[choice]
|
||||
for(var/new_type in things_to_spawn) // Spawn all the things, the gun and the ammo.
|
||||
var/atom/movable/AM = new new_type(get_turf(src))
|
||||
if(istype(AM, /obj/item/weapon/gun))
|
||||
to_chat(user, "You have chosen \the [AM]. Say hello to your new friend.")
|
||||
qdel(src)
|
||||
@@ -75,11 +75,11 @@
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open)
|
||||
user << "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>"
|
||||
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||
return
|
||||
|
||||
if(affecting.is_bandaged())
|
||||
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>"
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
||||
@@ -93,9 +93,13 @@
|
||||
if(used == amount)
|
||||
break
|
||||
if(!do_mob(user, M, W.damage/5))
|
||||
user << "<span class='notice'>You must stand still to bandage wounds.</span>"
|
||||
to_chat(user, "<span class='notice'>You must stand still to bandage wounds.</span>")
|
||||
break
|
||||
|
||||
if(affecting.is_bandaged()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message("<span class='notice'>\The [user] bandages \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You bandage \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
@@ -111,9 +115,9 @@
|
||||
affecting.update_damages()
|
||||
if(used == amount)
|
||||
if(affecting.is_bandaged())
|
||||
user << "<span class='warning'>\The [src] is used up.</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up.</span>")
|
||||
else
|
||||
user << "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>")
|
||||
use(used)
|
||||
|
||||
/obj/item/stack/medical/ointment
|
||||
@@ -135,17 +139,20 @@
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open)
|
||||
user << "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>"
|
||||
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||
return
|
||||
|
||||
if(affecting.is_salved())
|
||||
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>"
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
||||
if(!do_mob(user, M, 10))
|
||||
user << "<span class='notice'>You must stand still to salve wounds.</span>"
|
||||
to_chat(user, "<span class='notice'>You must stand still to salve wounds.</span>")
|
||||
return 1
|
||||
if(affecting.is_salved()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||
return 1
|
||||
user.visible_message("<span class='notice'>[user] salved wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You salved wounds on [M]'s [affecting.name].</span>" )
|
||||
@@ -169,11 +176,11 @@
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open)
|
||||
user << "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>"
|
||||
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||
return
|
||||
|
||||
if(affecting.is_bandaged() && affecting.is_disinfected())
|
||||
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been treated.</span>"
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been treated.</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
|
||||
@@ -187,8 +194,11 @@
|
||||
if(used == amount)
|
||||
break
|
||||
if(!do_mob(user, M, W.damage/5))
|
||||
user << "<span class='notice'>You must stand still to bandage wounds.</span>"
|
||||
to_chat(user, "<span class='notice'>You must stand still to bandage wounds.</span>")
|
||||
break
|
||||
if(affecting.is_bandaged() && affecting.is_disinfected()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>")
|
||||
return 1
|
||||
if (W.current_stage <= W.max_bleeding_stage)
|
||||
user.visible_message("<span class='notice'>\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.</span>", \
|
||||
"<span class='notice'>You clean and seal \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
@@ -205,9 +215,9 @@
|
||||
affecting.update_damages()
|
||||
if(used == amount)
|
||||
if(affecting.is_bandaged())
|
||||
user << "<span class='warning'>\The [src] is used up.</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up.</span>")
|
||||
else
|
||||
user << "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>"
|
||||
to_chat(user, "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>")
|
||||
use(used)
|
||||
|
||||
/obj/item/stack/medical/advanced/ointment
|
||||
@@ -228,16 +238,19 @@
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(affecting.open)
|
||||
user << "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>"
|
||||
to_chat(user, "<span class='notice'>The [affecting.name] is cut open, you'll need more than a bandage!</span>")
|
||||
|
||||
if(affecting.is_salved())
|
||||
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>"
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||
return 1
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
||||
if(!do_mob(user, M, 10))
|
||||
user << "<span class='notice'>You must stand still to salve wounds.</span>"
|
||||
to_chat(user, "<span class='notice'>You must stand still to salve wounds.</span>")
|
||||
return 1
|
||||
if(affecting.is_salved()) // We do a second check after the delay, in case it was bandaged after the first check.
|
||||
to_chat(user, "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>")
|
||||
return 1
|
||||
user.visible_message( "<span class='notice'>[user] covers wounds on [M]'s [affecting.name] with regenerative membrane.</span>", \
|
||||
"<span class='notice'>You cover wounds on [M]'s [affecting.name] with regenerative membrane.</span>" )
|
||||
@@ -264,20 +277,23 @@
|
||||
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
|
||||
var/limb = affecting.name
|
||||
if(!(affecting.organ_tag in splintable_organs))
|
||||
user << "<span class='danger'>You can't use \the [src] to apply a splint there!</span>"
|
||||
to_chat(user, "<span class='danger'>You can't use \the [src] to apply a splint there!</span>")
|
||||
return
|
||||
if(affecting.splinted)
|
||||
user << "<span class='danger'>[M]'s [limb] is already splinted!</span>"
|
||||
to_chat(user, "<span class='danger'>[M]'s [limb] is already splinted!</span>")
|
||||
return
|
||||
if (M != user)
|
||||
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to [M]'s [limb].</span>", "<span class='danger'>You start to apply \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
else
|
||||
if(( !user.hand && (affecting.organ_tag in list(BP_R_ARM, BP_R_HAND)) || \
|
||||
user.hand && (affecting.organ_tag in list(BP_L_ARM, BP_L_HAND)) ))
|
||||
user << "<span class='danger'>You can't apply a splint to the arm you're using!</span>"
|
||||
to_chat(user, "<span class='danger'>You can't apply a splint to the arm you're using!</span>")
|
||||
return
|
||||
user.visible_message("<span class='danger'>[user] starts to apply \the [src] to their [limb].</span>", "<span class='danger'>You start to apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
if(do_after(user, 50, M))
|
||||
if(affecting.splinted)
|
||||
to_chat(user, "<span class='danger'>[M]'s [limb] is already splinted!</span>")
|
||||
return
|
||||
if(M == user && prob(75))
|
||||
user.visible_message("<span class='danger'>\The [user] fumbles [src].</span>", "<span class='danger'>You fumble [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
icon_state = "nanopaste"
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
|
||||
amount = 10
|
||||
toolspeed = 0.75 //Used in surgery, shouldn't be the same speed as a normal screwdriver on mechanical organ repair.
|
||||
w_class = ITEMSIZE_SMALL
|
||||
no_variants = FALSE
|
||||
|
||||
@@ -14,12 +15,13 @@
|
||||
return 0
|
||||
if (istype(M,/mob/living/silicon/robot)) //Repairing cyborgs
|
||||
var/mob/living/silicon/robot/R = M
|
||||
if (R.getBruteLoss() || R.getFireLoss() )
|
||||
R.adjustBruteLoss(-15)
|
||||
R.adjustFireLoss(-15)
|
||||
R.updatehealth()
|
||||
use(1)
|
||||
user.visible_message("<span class='notice'>\The [user] applied some [src] on [R]'s damaged areas.</span>",\
|
||||
if (R.getBruteLoss() || R.getFireLoss())
|
||||
if(do_after(user,7 * toolspeed))
|
||||
R.adjustBruteLoss(-15)
|
||||
R.adjustFireLoss(-15)
|
||||
R.updatehealth()
|
||||
use(1)
|
||||
user.visible_message("<span class='notice'>\The [user] applied some [src] on [R]'s damaged areas.</span>",\
|
||||
"<span class='notice'>You apply some [src] at [R]'s damaged areas.</span>")
|
||||
else
|
||||
user << "<span class='notice'>All [R]'s systems are nominal.</span>"
|
||||
@@ -28,14 +30,17 @@
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/S = H.get_organ(user.zone_sel.selecting)
|
||||
|
||||
if(S.open >= 2)
|
||||
if (S && (S.robotic >= ORGAN_ROBOT))
|
||||
if(!S.get_damage())
|
||||
user << "<span class='notice'>Nothing to fix here.</span>"
|
||||
else if(can_use(1))
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
S.heal_damage(15, 15, robo_repair = 1)
|
||||
H.updatehealth()
|
||||
use(1)
|
||||
user.visible_message("<span class='notice'>\The [user] applies some nanite paste on [user != M ? "[M]'s [S.name]" : "[S]"] with [src].</span>",\
|
||||
"<span class='notice'>You apply some nanite paste on [user == M ? "your" : "[M]'s"] [S.name].</span>")
|
||||
if (S && (S.robotic >= ORGAN_ROBOT))
|
||||
if(!S.get_damage())
|
||||
user << "<span class='notice'>Nothing to fix here.</span>"
|
||||
else if(can_use(1))
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
if(S.open >= 2)
|
||||
if(do_after(user,5 * toolspeed))
|
||||
S.heal_damage(20, 20, robo_repair = 1)
|
||||
else if(do_after(user,5 * toolspeed))
|
||||
S.heal_damage(10,10, robo_repair =1)
|
||||
H.updatehealth()
|
||||
use(1)
|
||||
user.visible_message("<span class='notice'>\The [user] applies some nanite paste on [user != M ? "[M]'s [S.name]" : "[S]"] with [src].</span>",\
|
||||
"<span class='notice'>You apply some nanite paste on [user == M ? "your" : "[M]'s"] [S.name].</span>")
|
||||
|
||||
@@ -699,54 +699,6 @@
|
||||
desc = "A \"Space Life\" brand Emergency Response Team Commander action figure."
|
||||
icon_state = "ert"
|
||||
|
||||
/obj/item/toy/therapy_red
|
||||
name = "red therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is red."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapyred"
|
||||
item_state = "egg4" // It's the red egg in items_left/righthand
|
||||
w_class = ITEMSIZE_TINY
|
||||
|
||||
/obj/item/toy/therapy_purple
|
||||
name = "purple therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is purple."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapypurple"
|
||||
item_state = "egg1" // It's the magenta egg in items_left/righthand
|
||||
w_class = ITEMSIZE_TINY
|
||||
|
||||
/obj/item/toy/therapy_blue
|
||||
name = "blue therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is blue."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapyblue"
|
||||
item_state = "egg2" // It's the blue egg in items_left/righthand
|
||||
w_class = ITEMSIZE_TINY
|
||||
|
||||
/obj/item/toy/therapy_yellow
|
||||
name = "yellow therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is yellow."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapyyellow"
|
||||
item_state = "egg5" // It's the yellow egg in items_left/righthand
|
||||
w_class = ITEMSIZE_TINY
|
||||
|
||||
/obj/item/toy/therapy_orange
|
||||
name = "orange therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is orange."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapyorange"
|
||||
item_state = "egg4" // It's the red one again, lacking an orange item_state and making a new one is pointless
|
||||
w_class = ITEMSIZE_TINY
|
||||
|
||||
/obj/item/toy/therapy_green
|
||||
name = "green therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is green."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapygreen"
|
||||
item_state = "egg3" // It's the green egg in items_left/righthand
|
||||
w_class = ITEMSIZE_TINY
|
||||
|
||||
/*
|
||||
* Plushies
|
||||
*/
|
||||
@@ -800,9 +752,10 @@
|
||||
//Small plushies.
|
||||
/obj/item/toy/plushie
|
||||
name = "generic small plush"
|
||||
desc = "A very generic small plushie. It seems to not want to exist."
|
||||
desc = "A small toy plushie. It's very cute."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "nymphplushie"
|
||||
w_class = ITEMSIZE_TINY
|
||||
var/last_message = 0
|
||||
|
||||
/obj/item/toy/plushie/attack_self(mob/user as mob)
|
||||
@@ -815,9 +768,24 @@
|
||||
else if (user.a_intent == I_GRAB)
|
||||
user.visible_message("<span class='warning'><b>\The [user]</b> attempts to strangle [src]!</span>","<span class='warning'>You attempt to strangle [src]!</span>")
|
||||
else
|
||||
user.visible_message("<span class='notice'><b>\The [user]</b> pokes the [src].</span>","<span class='notice'>You poke the [src].</span>")
|
||||
user.visible_message("<span class='notice'><b>\The [user]</b> pokes [src].</span>","<span class='notice'>You poke [src].</span>")
|
||||
last_message = world.time
|
||||
|
||||
obj/item/toy/plushie/verb/rename_plushie()
|
||||
set name = "Name Plushie"
|
||||
set category = "Object"
|
||||
set desc = "Give your plushie a cute name!"
|
||||
w_class = ITEMSIZE_TINY
|
||||
var/mob/M = usr
|
||||
if(!M.mind) return 0
|
||||
|
||||
var/input = sanitizeSafe(input("What do you want to name the plushie?", ,""), MAX_NAME_LEN)
|
||||
|
||||
if(src && input && !M.stat && in_range(M,src))
|
||||
name = input
|
||||
to_chat(M, "You name the plushie [input], giving it a hug for good luck.")
|
||||
return 1
|
||||
|
||||
/obj/item/toy/plushie/nymph
|
||||
name = "diona nymph plush"
|
||||
desc = "A plushie of an adorable diona nymph! While its level of self-awareness is still being debated, its level of cuteness is not."
|
||||
@@ -830,7 +798,7 @@
|
||||
|
||||
/obj/item/toy/plushie/kitten
|
||||
name = "kitten plush"
|
||||
desc = "A plushie of a cute kitten! Watch as it purrs it's way right into your heart."
|
||||
desc = "A plushie of a cute kitten! Watch as it purrs its way right into your heart."
|
||||
icon_state = "kittenplushie"
|
||||
|
||||
/obj/item/toy/plushie/lizard
|
||||
@@ -848,6 +816,49 @@
|
||||
desc = "A farwa plush doll. It's soft and comforting!"
|
||||
icon_state = "farwaplushie"
|
||||
|
||||
/obj/item/toy/plushie/therapy/red
|
||||
name = "red therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is red."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapyred"
|
||||
item_state = "egg4" // It's the red egg in items_left/righthand
|
||||
|
||||
/obj/item/toy/plushie/therapy/purple
|
||||
name = "purple therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is purple."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapypurple"
|
||||
item_state = "egg1" // It's the magenta egg in items_left/righthand
|
||||
|
||||
/obj/item/toy/plushie/therapy/blue
|
||||
name = "blue therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is blue."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapyblue"
|
||||
item_state = "egg2" // It's the blue egg in items_left/righthand
|
||||
|
||||
/obj/item/toy/plushie/therapy/yellow
|
||||
name = "yellow therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is yellow."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapyyellow"
|
||||
item_state = "egg5" // It's the yellow egg in items_left/righthand
|
||||
|
||||
/obj/item/toy/plushie/therapy/orange
|
||||
name = "orange therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is orange."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapyorange"
|
||||
item_state = "egg4" // It's the red one again, lacking an orange item_state and making a new one is pointless
|
||||
|
||||
/obj/item/toy/plushie/therapy/green
|
||||
name = "green therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is green."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "therapygreen"
|
||||
item_state = "egg3" // It's the green egg in items_left/righthand
|
||||
|
||||
|
||||
//Toy cult sword
|
||||
/obj/item/toy/cultsword
|
||||
name = "foam sword"
|
||||
|
||||
@@ -202,6 +202,15 @@
|
||||
/obj/item/weapon/reagent_containers/syringe = 3,
|
||||
/obj/item/stack/material/glass/reinforced = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/vr_sleeper
|
||||
name = T_BOARD("VR sleeper")
|
||||
build_path = /obj/machinery/vr_sleeper
|
||||
board_type = new /datum/frame/frame_types/medical_pod
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1,
|
||||
/obj/item/stack/material/glass/reinforced = 2)
|
||||
|
||||
/obj/item/weapon/circuitboard/dna_analyzer
|
||||
name = T_BOARD("dna analyzer")
|
||||
build_path = /obj/machinery/dnaforensics
|
||||
|
||||
@@ -373,8 +373,8 @@
|
||||
job_access_type = /datum/job/bartender
|
||||
|
||||
/obj/item/weapon/card/id/civilian/botanist
|
||||
assignment = "Gardener"
|
||||
rank = "Gardener"
|
||||
assignment = "Botanist"
|
||||
rank = "Botanist"
|
||||
job_access_type = /datum/job/hydro
|
||||
|
||||
/obj/item/weapon/card/id/civilian/chaplain
|
||||
|
||||
@@ -656,6 +656,61 @@
|
||||
nextrefueltick = world.time + 10
|
||||
reagents.add_reagent("fuel", 1)
|
||||
|
||||
/*
|
||||
* Backpack Welder.
|
||||
*/
|
||||
|
||||
/obj/item/weapon/weldingtool/tubefed
|
||||
name = "tube-fed welding tool"
|
||||
desc = "A bulky, cooler-burning welding tool that draws from a worn welding tank."
|
||||
icon_state = "tubewelder"
|
||||
max_fuel = 10
|
||||
w_class = ITEMSIZE_NO_CONTAINER
|
||||
matter = null
|
||||
toolspeed = 1.25
|
||||
change_icons = 0
|
||||
flame_intensity = 1
|
||||
eye_safety_modifier = 1
|
||||
always_process = TRUE
|
||||
var/obj/item/weapon/weldpack/mounted_pack = null
|
||||
|
||||
/obj/item/weapon/weldingtool/tubefed/New(location)
|
||||
..()
|
||||
if(istype(location, /obj/item/weapon/weldpack))
|
||||
var/obj/item/weapon/weldpack/holder = location
|
||||
mounted_pack = holder
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/weldingtool/tubefed/Destroy()
|
||||
mounted_pack.nozzle = null
|
||||
mounted_pack = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/weldingtool/tubefed/process()
|
||||
if(mounted_pack)
|
||||
if(!istype(mounted_pack.loc,/mob/living/carbon/human))
|
||||
mounted_pack.return_nozzle()
|
||||
else
|
||||
var/mob/living/carbon/human/H = mounted_pack.loc
|
||||
if(H.back != mounted_pack)
|
||||
mounted_pack.return_nozzle()
|
||||
|
||||
if(mounted_pack.loc != src.loc && src.loc != mounted_pack)
|
||||
mounted_pack.return_nozzle()
|
||||
visible_message("<span class='notice'>\The [src] retracts to its fueltank.</span>")
|
||||
|
||||
if(get_fuel() <= get_max_fuel())
|
||||
mounted_pack.reagents.trans_to_obj(src, 1)
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/weapon/weldingtool/tubefed/dropped(mob/user)
|
||||
..()
|
||||
if(src.loc != user)
|
||||
mounted_pack.return_nozzle()
|
||||
to_chat(user, "<span class='notice'>\The [src] retracts to its fueltank.</span>")
|
||||
|
||||
/*
|
||||
* Electric/Arc Welder
|
||||
*/
|
||||
|
||||
@@ -6,46 +6,140 @@
|
||||
icon_state = "welderpack"
|
||||
w_class = ITEMSIZE_LARGE
|
||||
var/max_fuel = 350
|
||||
var/obj/item/weapon/nozzle = null //Attached welder, or other spray device.
|
||||
var/nozzle_attached = 0
|
||||
|
||||
/obj/item/weapon/weldpack/New()
|
||||
var/datum/reagents/R = new/datum/reagents(max_fuel) //Lotsa refills
|
||||
reagents = R
|
||||
R.my_atom = src
|
||||
R.add_reagent("fuel", max_fuel)
|
||||
nozzle = new/obj/item/weapon/weldingtool/tubefed(src)
|
||||
nozzle_attached = 1
|
||||
|
||||
/obj/item/weapon/weldpack/Destroy()
|
||||
qdel(nozzle)
|
||||
nozzle = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/weldpack/dropped(mob/user)
|
||||
..()
|
||||
if(nozzle)
|
||||
user.remove_from_mob(nozzle)
|
||||
return_nozzle()
|
||||
to_chat(user, "<span class='notice'>\The [nozzle] retracts to its fueltank.</span>")
|
||||
|
||||
/obj/item/weapon/weldpack/proc/get_nozzle(var/mob/living/user)
|
||||
if(!ishuman(user))
|
||||
return 0
|
||||
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
if(H.hands_are_full()) //Make sure our hands aren't full.
|
||||
to_chat(H, "<span class='warning'>Your hands are full. Drop something first.</span>")
|
||||
return 0
|
||||
|
||||
var/obj/item/weapon/F = nozzle
|
||||
H.put_in_hands(F)
|
||||
nozzle_attached = 0
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/weldpack/proc/return_nozzle(var/mob/living/user)
|
||||
nozzle.forceMove(src)
|
||||
nozzle_attached = 1
|
||||
|
||||
/obj/item/weapon/weldpack/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
if(istype(W, /obj/item/weapon/weldingtool) && !(W == nozzle))
|
||||
var/obj/item/weapon/weldingtool/T = W
|
||||
if(T.welding & prob(50))
|
||||
message_admins("[key_name_admin(user)] triggered a fueltank explosion.")
|
||||
log_game("[key_name(user)] triggered a fueltank explosion.")
|
||||
user << "<span class='danger'>That was stupid of you.</span>"
|
||||
to_chat(user,"<span class='danger'>That was stupid of you.</span>")
|
||||
explosion(get_turf(src),-1,0,2)
|
||||
if(src)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
else if(T.status)
|
||||
if(T.welding)
|
||||
user << "<span class='danger'>That was close!</span>"
|
||||
to_chat(user,"<span class='danger'>That was close!</span>")
|
||||
src.reagents.trans_to_obj(W, T.max_fuel)
|
||||
user << "<span class='notice'>Welder refilled!</span>"
|
||||
to_chat(user, "<span class='notice'>Welder refilled!</span>")
|
||||
playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||
return
|
||||
user << "<span class='warning'>The tank scoffs at your insolence. It only provides services to welders.</span>"
|
||||
else if(nozzle)
|
||||
if(nozzle == W)
|
||||
if(!user.unEquip(W))
|
||||
to_chat(user,"<span class='notice'>\The [W] seems to be stuck to your hand.</span>")
|
||||
return
|
||||
if(!nozzle_attached)
|
||||
return_nozzle()
|
||||
to_chat(user,"<span class='notice'>You attach \the [W] to the [src].</span>")
|
||||
return
|
||||
else
|
||||
to_chat(user,"<span class='notice'>The [src] already has a nozzle!</span>")
|
||||
else
|
||||
to_chat(user,"<span class='warning'>The tank scoffs at your insolence. It only provides services to welders.</span>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/weldpack/attack_hand(mob/user as mob)
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/wearer = user
|
||||
if(wearer.back == src)
|
||||
if(nozzle && nozzle_attached)
|
||||
if(!wearer.incapacitated())
|
||||
get_nozzle(user)
|
||||
else
|
||||
to_chat(user,"<span class='notice'>\The [src] does not have a nozzle attached!</span>")
|
||||
else
|
||||
..()
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/weldpack/afterattack(obj/O as obj, mob/user as mob, proximity)
|
||||
if(!proximity) // this replaces and improves the get_dist(src,O) <= 1 checks used previously
|
||||
return
|
||||
if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume < max_fuel)
|
||||
O.reagents.trans_to_obj(src, max_fuel)
|
||||
user << "<span class='notice'>You crack the cap off the top of the pack and fill it back up again from the tank.</span>"
|
||||
to_chat(user,"<span class='notice'>You crack the cap off the top of the pack and fill it back up again from the tank.</span>")
|
||||
playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||
return
|
||||
else if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume == max_fuel)
|
||||
user << "<span class='warning'>The pack is already full!</span>"
|
||||
to_chat(user,"<span class='warning'>The pack is already full!</span>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/weldpack/MouseDrop(obj/over_object as obj) //This is terrifying.
|
||||
if(!canremove)
|
||||
return
|
||||
|
||||
if (ishuman(usr) || issmall(usr)) //so monkeys can take off their backpacks -- Urist
|
||||
|
||||
if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why?
|
||||
return
|
||||
|
||||
if (!( istype(over_object, /obj/screen) ))
|
||||
return ..()
|
||||
|
||||
//makes sure that the thing is equipped, so that we can't drag it into our hand from miles away.
|
||||
//there's got to be a better way of doing this.
|
||||
if (!(src.loc == usr) || (src.loc && src.loc.loc == usr))
|
||||
return
|
||||
|
||||
if (( usr.restrained() ) || ( usr.stat ))
|
||||
return
|
||||
|
||||
if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src))
|
||||
return
|
||||
|
||||
switch(over_object.name)
|
||||
if("r_hand")
|
||||
usr.u_equip(src)
|
||||
usr.put_in_r_hand(src)
|
||||
if("l_hand")
|
||||
usr.u_equip(src)
|
||||
usr.put_in_l_hand(src)
|
||||
src.add_fingerprint(usr)
|
||||
|
||||
/obj/item/weapon/weldpack/examine(mob/user)
|
||||
..(user)
|
||||
user << text("\icon[] [] units of fuel left!", src, src.reagents.total_volume)
|
||||
|
||||
@@ -504,12 +504,12 @@
|
||||
|
||||
/obj/random/toy/item_to_spawn()
|
||||
return pick(/obj/item/toy/bosunwhistle,
|
||||
/obj/item/toy/therapy_red,
|
||||
/obj/item/toy/therapy_purple,
|
||||
/obj/item/toy/therapy_blue,
|
||||
/obj/item/toy/therapy_yellow,
|
||||
/obj/item/toy/therapy_orange,
|
||||
/obj/item/toy/therapy_green,
|
||||
/obj/item/toy/plushie/therapy/red,
|
||||
/obj/item/toy/plushie/therapy/purple,
|
||||
/obj/item/toy/plushie/therapy/blue,
|
||||
/obj/item/toy/plushie/therapy/yellow,
|
||||
/obj/item/toy/plushie/therapy/orange,
|
||||
/obj/item/toy/plushie/therapy/green,
|
||||
/obj/item/toy/cultsword,
|
||||
/obj/item/toy/katana,
|
||||
/obj/item/toy/snappop,
|
||||
@@ -1060,4 +1060,22 @@ var/list/multi_point_spawns
|
||||
/obj/item/clothing/suit/space/void/security/riot,
|
||||
/obj/item/clothing/head/helmet/space/void/security/riot
|
||||
)
|
||||
)
|
||||
|
||||
/obj/random/multiple/voidsuit/mining
|
||||
name = "Random Mining Voidsuit"
|
||||
desc = "This is a random mining voidsuit."
|
||||
icon = 'icons/obj/clothing/suits.dmi'
|
||||
icon_state = "rig-mining"
|
||||
|
||||
/obj/random/multiple/voidsuit/mining/item_to_spawn()
|
||||
return pick(
|
||||
prob(5);list(
|
||||
/obj/item/clothing/suit/space/void/mining,
|
||||
/obj/item/clothing/head/helmet/space/void/mining
|
||||
),
|
||||
prob(1);list(
|
||||
/obj/item/clothing/suit/space/void/mining/alt,
|
||||
/obj/item/clothing/head/helmet/space/void/mining/alt
|
||||
)
|
||||
)
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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(DEFAULT_ATTACK_COOLDOWN)
|
||||
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
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -290,11 +287,9 @@
|
||||
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
|
||||
@@ -329,6 +324,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
|
||||
@@ -348,6 +346,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
|
||||
@@ -361,13 +362,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
|
||||
|
||||
@@ -406,10 +410,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
|
||||
|
||||
@@ -507,14 +511,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