Merge branch 'master' of https://github.com/PolarisSS13/Polaris into battery_things

This commit is contained in:
Anewbe
2017-11-19 02:38:42 -06:00
295 changed files with 17587 additions and 15507 deletions
+4 -4
View File
@@ -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)
+4 -1
View File
@@ -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>")
+42 -12
View File
@@ -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
+1 -1
View File
@@ -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)
+19
View File
@@ -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)
+35 -19
View File
@@ -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
+22 -17
View File
@@ -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>")
+62 -51
View File
@@ -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
+55
View File
@@ -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
*/
+102 -8
View File
@@ -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)