mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-29 15:08:02 +01:00
Merge with upstream/maser
This commit is contained in:
@@ -307,7 +307,11 @@ datum/admins/proc/DB_ban_unban_by_id(var/id)
|
||||
output += "<option value='[j]'>[j]</option>"
|
||||
for(var/j in nonhuman_positions)
|
||||
output += "<option value='[j]'>[j]</option>"
|
||||
for(var/j in list("traitor","changeling","operative","revolutionary","cultist","wizard"))
|
||||
for(var/j in list("Dionaea","NPC","AntagHUD","Emergency Response Team"))
|
||||
output += "<option value='[j]'>[j]</option>"
|
||||
for(var/j in list("commanddept","securitydept","engineeringdept","medicaldept","sciencedept","supportdept","nonhumandept"))
|
||||
output += "<option value='[j]'>[j]</option>"
|
||||
for(var/j in list("Syndicate","traitor","changeling","operative","revolutionary","cultist","wizard","alien","ninja","raider","mutineer","blob"))
|
||||
output += "<option value='[j]'>[j]</option>"
|
||||
output += "</select></td></tr></table>"
|
||||
output += "<b>Reason:<br></b><textarea name='dbbanreason' cols='50'></textarea><br>"
|
||||
|
||||
@@ -331,31 +331,49 @@ BLIND // can't see anything
|
||||
2 = Report detailed damages
|
||||
3 = Report location
|
||||
*/
|
||||
var/obj/item/clothing/tie/hastie = null
|
||||
var/list/accessories = list()
|
||||
var/displays_id = 1
|
||||
var/rolled_down = 0
|
||||
var/basecolor
|
||||
|
||||
/obj/item/clothing/under/proc/can_attach_accessory(obj/item/clothing/accessory/A)
|
||||
if(istype(A))
|
||||
.=1
|
||||
else
|
||||
return 0
|
||||
if(accessories.len && (A.slot in list("utility","armband")))
|
||||
for(var/obj/item/clothing/accessory/AC in accessories)
|
||||
if (AC.slot == A.slot)
|
||||
return 0
|
||||
|
||||
/obj/item/clothing/under/attackby(obj/item/I, mob/user)
|
||||
if(!hastie && istype(I, /obj/item/clothing/tie))
|
||||
user.drop_item()
|
||||
hastie = I
|
||||
I.loc = src
|
||||
user << "<span class='notice'>You attach [I] to [src].</span>"
|
||||
if(istype(I, /obj/item/clothing/accessory))
|
||||
var/obj/item/clothing/accessory/A = I
|
||||
if(can_attach_accessory(A))
|
||||
user.drop_item()
|
||||
accessories += A
|
||||
A.on_attached(src, user)
|
||||
|
||||
if(istype(loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
H.update_inv_w_uniform()
|
||||
if(istype(loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
H.update_inv_w_uniform()
|
||||
|
||||
return
|
||||
else
|
||||
user << "<span class='notice'>You cannot attach more accessories of this type to [src].</span>"
|
||||
|
||||
if(accessories.len)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
A.attackby(I, user)
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/clothing/under/attack_hand(mob/user as mob)
|
||||
//only forward to the attached accessory if the clothing is equipped (not in a storage)
|
||||
if(hastie && src.loc == user)
|
||||
removetie()
|
||||
if(accessories.len && src.loc == user)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
A.attack_hand(user)
|
||||
return
|
||||
|
||||
if ((ishuman(usr) || ismonkey(usr)) && src.loc == user) //make it harder to accidentally undress yourself
|
||||
@@ -369,7 +387,7 @@ BLIND // can't see anything
|
||||
if (!(src.loc == usr))
|
||||
return
|
||||
|
||||
if (!( usr.restrained() ) && !( usr.stat ))
|
||||
if (!( usr.restrained() ) && !( usr.stat ) && ( over_object ))
|
||||
switch(over_object.name)
|
||||
if("r_hand")
|
||||
usr.u_equip(src)
|
||||
@@ -393,8 +411,9 @@ BLIND // can't see anything
|
||||
usr << "Its vital tracker appears to be enabled."
|
||||
if(3)
|
||||
usr << "Its vital tracker and tracking beacon appear to be enabled."
|
||||
if(hastie)
|
||||
usr << "\A [hastie] is clipped to it."
|
||||
if(accessories.len)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
usr << "\A [A] is attached to it."
|
||||
|
||||
/obj/item/clothing/under/verb/toggle()
|
||||
set name = "Toggle Suit Sensors"
|
||||
@@ -439,30 +458,35 @@ BLIND // can't see anything
|
||||
else
|
||||
usr << "<span class='notice'>You cannot roll down the uniform!</span>"
|
||||
|
||||
/obj/item/clothing/under/proc/removetie()
|
||||
/obj/item/clothing/under/proc/remove_accessory(mob/user, obj/item/clothing/accessory/A)
|
||||
if(!(A in accessories))
|
||||
return
|
||||
|
||||
A.on_removed(user)
|
||||
accessories -= A
|
||||
usr.update_inv_w_uniform()
|
||||
|
||||
/obj/item/clothing/under/verb/removetie()
|
||||
set name = "Remove Accessory"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(!istype(usr, /mob/living)) return
|
||||
if(usr.stat) return
|
||||
|
||||
if(hastie)
|
||||
usr.put_in_hands(hastie)
|
||||
hastie = null
|
||||
|
||||
if (istype(hastie,/obj/item/clothing/tie/storage))
|
||||
var/obj/item/clothing/tie/storage/W = hastie
|
||||
if (W.hold)
|
||||
W.hold.loc = hastie
|
||||
|
||||
if(istype(loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = loc
|
||||
H.update_inv_w_uniform()
|
||||
if(!accessories.len) return
|
||||
var/obj/item/clothing/accessory/A
|
||||
if(accessories.len > 1)
|
||||
A = input("Select an accessory to remove from [src]") as null|anything in accessories
|
||||
else
|
||||
A = accessories[1]
|
||||
src.remove_accessory(usr,A)
|
||||
|
||||
/obj/item/clothing/under/rank/New()
|
||||
sensor_mode = pick(0,1,2,3)
|
||||
..()
|
||||
|
||||
/obj/item/clothing/under/emp_act(severity)
|
||||
if (hastie)
|
||||
hastie.emp_act(severity)
|
||||
if(accessories.len)
|
||||
for(var/obj/item/clothing/accessory/A in accessories)
|
||||
A.emp_act(severity)
|
||||
..()
|
||||
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
drain("MECHA",A,suit)
|
||||
return 1
|
||||
/*
|
||||
if(istype(A,/obj/item/weapon/cell))
|
||||
if(istype(A,/obj/item/weapon/stock_parts/cell))
|
||||
A.add_fingerprint(H)
|
||||
drain("CELL",A,suit)
|
||||
return 1
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
name = "ninja hood"
|
||||
icon_state = "s-ninja"
|
||||
item_state = "s-ninja_hood"
|
||||
allowed = list(/obj/item/weapon/cell)
|
||||
allowed = list(/obj/item/weapon/stock_parts/cell)
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 25)
|
||||
unacidable = 1
|
||||
siemens_coefficient = 0.2
|
||||
@@ -14,7 +14,7 @@
|
||||
desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
|
||||
icon_state = "s-ninja"
|
||||
item_state = "s-ninja_suit"
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/weapon/cell,/obj/item/device/suit_cooling_unit)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/weapon/stock_parts/cell,/obj/item/device/suit_cooling_unit)
|
||||
slowdown = 0
|
||||
unacidable = 1
|
||||
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
//Important parts of the suit.
|
||||
var/mob/living/carbon/affecting = null//The wearer.
|
||||
var/obj/item/weapon/cell/cell//Starts out with a high-capacity cell using New().
|
||||
var/obj/item/weapon/stock_parts/cell/cell//Starts out with a high-capacity cell using New().
|
||||
var/datum/effect/effect/system/spark_spread/spark_system//To create sparks.
|
||||
var/reagent_list[] = list("tricordrazine","dexalinp","spaceacillin","anti_toxin","nutriment","uranium","hyronalin")//The reagents ids which are added to the suit at New().
|
||||
var/stored_research[]//For stealing station research.
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/obj/item/clothing/suit/storage
|
||||
var/obj/item/weapon/storage/internal/pockets
|
||||
|
||||
/obj/item/clothing/suit/storage/New()
|
||||
..()
|
||||
pockets = new/obj/item/weapon/storage/internal(src)
|
||||
pockets.storage_slots = 2 //two slots
|
||||
pockets.max_w_class = 2 //fit only pocket sized items
|
||||
pockets.max_combined_w_class = 4
|
||||
|
||||
/obj/item/clothing/suit/storage/attack_hand(mob/user as mob)
|
||||
if (pockets.handle_attack_hand(user))
|
||||
..(user)
|
||||
|
||||
/obj/item/clothing/suit/storage/MouseDrop(obj/over_object as obj)
|
||||
if (pockets.handle_mousedrop(usr, over_object))
|
||||
..(over_object)
|
||||
|
||||
/obj/item/clothing/suit/storage/attackby(obj/item/W as obj, mob/user as mob)
|
||||
..()
|
||||
pockets.attackby(W, user)
|
||||
|
||||
/obj/item/clothing/suit/storage/emp_act(severity)
|
||||
pockets.emp_act(severity)
|
||||
..()
|
||||
|
||||
/obj/item/clothing/suit/storage/hear_talk(mob/M, var/msg)
|
||||
pockets.hear_talk(M, msg)
|
||||
..()
|
||||
@@ -0,0 +1,320 @@
|
||||
/obj/item/clothing/accessory
|
||||
name = "tie"
|
||||
desc = "A neosilk clip-on tie."
|
||||
icon = 'icons/obj/clothing/ties.dmi'
|
||||
icon_state = "bluetie"
|
||||
item_state = "" //no inhands
|
||||
_color = "bluetie"
|
||||
slot_flags = SLOT_TIE
|
||||
w_class = 2.0
|
||||
var/slot = "decor"
|
||||
var/obj/item/clothing/under/has_suit = null //the suit the tie may be attached to
|
||||
var/image/inv_overlay = null //overlay used when attached to clothing.
|
||||
|
||||
/obj/item/clothing/accessory/New()
|
||||
..()
|
||||
inv_overlay = image("icon" = 'icons/obj/clothing/ties_overlay.dmi', "icon_state" = "[_color? "[_color]" : "[icon_state]"]")
|
||||
|
||||
//when user attached an accessory to S
|
||||
/obj/item/clothing/accessory/proc/on_attached(obj/item/clothing/under/S, mob/user as mob)
|
||||
if(!istype(S))
|
||||
return
|
||||
has_suit = S
|
||||
loc = has_suit
|
||||
has_suit.overlays += inv_overlay
|
||||
|
||||
user << "<span class='notice'>You attach [src] to [has_suit].</span>"
|
||||
src.add_fingerprint(user)
|
||||
|
||||
/obj/item/clothing/accessory/proc/on_removed(mob/user as mob)
|
||||
if(!has_suit)
|
||||
return
|
||||
has_suit.overlays -= inv_overlay
|
||||
has_suit = null
|
||||
usr.put_in_hands(src)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
//default attackby behaviour
|
||||
/obj/item/clothing/accessory/attackby(obj/item/I, mob/user)
|
||||
..()
|
||||
|
||||
//default attack_hand behaviour
|
||||
/obj/item/clothing/accessory/attack_hand(mob/user as mob)
|
||||
if(has_suit)
|
||||
return //we aren't an object on the ground so don't call parent
|
||||
..()
|
||||
|
||||
/obj/item/clothing/accessory/blue
|
||||
name = "blue tie"
|
||||
icon_state = "bluetie"
|
||||
_color = "bluetie"
|
||||
|
||||
/obj/item/clothing/accessory/red
|
||||
name = "red tie"
|
||||
icon_state = "redtie"
|
||||
_color = "redtie"
|
||||
|
||||
/obj/item/clothing/accessory/black
|
||||
name = "black tie"
|
||||
icon_state = "blacktie"
|
||||
_color = "blacktie"
|
||||
|
||||
/obj/item/clothing/accessory/horrible
|
||||
name = "horrible tie"
|
||||
desc = "A neosilk clip-on tie. This one is disgusting."
|
||||
icon_state = "horribletie"
|
||||
_color = "horribletie"
|
||||
|
||||
/obj/item/clothing/accessory/waistcoat // No overlay
|
||||
name = "waistcoat"
|
||||
desc = "For some classy, murderous fun."
|
||||
icon_state = "waistcoat"
|
||||
item_state = "waistcoat"
|
||||
_color = "waistcoat"
|
||||
|
||||
/obj/item/clothing/accessory/stethoscope
|
||||
name = "stethoscope"
|
||||
desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
|
||||
icon_state = "stethoscope"
|
||||
_color = "stethoscope"
|
||||
|
||||
/obj/item/clothing/accessory/stethoscope/attack(mob/living/carbon/human/M, mob/living/user)
|
||||
if(ishuman(M) && isliving(user))
|
||||
if(user.a_intent == "help")
|
||||
var/body_part = parse_zone(user.zone_sel.selecting)
|
||||
if(body_part)
|
||||
var/their = "their"
|
||||
switch(M.gender)
|
||||
if(MALE) their = "his"
|
||||
if(FEMALE) their = "her"
|
||||
|
||||
var/sound = "pulse"
|
||||
var/sound_strength
|
||||
|
||||
if(M.stat == DEAD || (M.status_flags&FAKEDEATH))
|
||||
sound_strength = "cannot hear"
|
||||
sound = "anything"
|
||||
else
|
||||
sound_strength = "hear a weak"
|
||||
switch(body_part)
|
||||
if("chest")
|
||||
if(M.oxyloss < 50)
|
||||
sound_strength = "hear a healthy"
|
||||
sound = "pulse and respiration"
|
||||
if("eyes","mouth")
|
||||
sound_strength = "cannot hear"
|
||||
sound = "anything"
|
||||
else
|
||||
sound_strength = "hear a weak"
|
||||
|
||||
user.visible_message("[user] places [src] against [M]'s [body_part] and listens attentively.", "You place [src] against [their] [body_part]. You [sound_strength] [sound].")
|
||||
return
|
||||
return ..(M,user)
|
||||
|
||||
|
||||
//Medals
|
||||
/obj/item/clothing/accessory/medal
|
||||
name = "bronze medal"
|
||||
desc = "A bronze medal."
|
||||
icon_state = "bronze"
|
||||
_color = "bronze"
|
||||
|
||||
/obj/item/clothing/accessory/medal/conduct
|
||||
name = "distinguished conduct medal"
|
||||
desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew."
|
||||
|
||||
/obj/item/clothing/accessory/medal/bronze_heart
|
||||
name = "bronze heart medal"
|
||||
desc = "A bronze heart-shaped medal awarded for sacrifice. It is often awarded posthumously or for severe injury in the line of duty."
|
||||
icon_state = "bronze_heart"
|
||||
|
||||
/obj/item/clothing/accessory/medal/nobel_science
|
||||
name = "nobel sciences award"
|
||||
desc = "A bronze medal which represents significant contributions to the field of science or engineering."
|
||||
|
||||
/obj/item/clothing/accessory/medal/silver
|
||||
name = "silver medal"
|
||||
desc = "A silver medal."
|
||||
icon_state = "silver"
|
||||
_color = "silver"
|
||||
|
||||
/obj/item/clothing/accessory/medal/silver/valor
|
||||
name = "medal of valor"
|
||||
desc = "A silver medal awarded for acts of exceptional valor."
|
||||
|
||||
/obj/item/clothing/accessory/medal/silver/security
|
||||
name = "robust security award"
|
||||
desc = "An award for distinguished combat and sacrifice in defence of Nanotrasen's commercial interests. Often awarded to security staff."
|
||||
|
||||
/obj/item/clothing/accessory/medal/gold
|
||||
name = "gold medal"
|
||||
desc = "A prestigious golden medal."
|
||||
icon_state = "gold"
|
||||
_color = "gold"
|
||||
|
||||
/obj/item/clothing/accessory/medal/gold/captain
|
||||
name = "medal of captaincy"
|
||||
desc = "A golden medal awarded exclusively to those promoted to the rank of captain. It signifies the codified responsibilities of a captain to Nanotrasen, and their undisputable authority over their crew."
|
||||
|
||||
/obj/item/clothing/accessory/medal/gold/heroism
|
||||
name = "medal of exceptional heroism"
|
||||
desc = "An extremely rare golden medal awarded only by CentComm. To recieve such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders."
|
||||
|
||||
/*
|
||||
Holobadges are worn on the belt or neck, and can be used to show that the holder is an authorized
|
||||
Security agent - the user details can be imprinted on the badge with a Security-access ID card,
|
||||
or they can be emagged to accept any ID for use in disguises.
|
||||
*/
|
||||
|
||||
/obj/item/clothing/accessory/holobadge
|
||||
name = "holobadge"
|
||||
desc = "This glowing blue badge marks the holder as THE LAW."
|
||||
icon_state = "holobadge"
|
||||
_color = "holobadge"
|
||||
slot_flags = SLOT_BELT | SLOT_TIE
|
||||
|
||||
var/emagged = 0 //Emagging removes Sec check.
|
||||
var/stored_name = null
|
||||
|
||||
/obj/item/clothing/accessory/holobadge/cord
|
||||
icon_state = "holobadge-cord"
|
||||
_color = "holobadge-cord"
|
||||
slot_flags = SLOT_MASK | SLOT_TIE
|
||||
|
||||
/obj/item/clothing/accessory/holobadge/attack_self(mob/user as mob)
|
||||
if(!stored_name)
|
||||
user << "Waving around a badge before swiping an ID would be pretty pointless."
|
||||
return
|
||||
if(isliving(user))
|
||||
user.visible_message("\red [user] displays their NanoTrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.","\red You display your NanoTrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.")
|
||||
|
||||
/obj/item/clothing/accessory/holobadge/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
|
||||
if (istype(O, /obj/item/weapon/card/emag))
|
||||
if (emagged)
|
||||
user << "\red [src] is already cracked."
|
||||
return
|
||||
else
|
||||
emagged = 1
|
||||
user << "\red You swipe [O] and crack the holobadge security checks."
|
||||
return
|
||||
|
||||
else if(istype(O, /obj/item/weapon/card/id) || istype(O, /obj/item/device/pda))
|
||||
|
||||
var/obj/item/weapon/card/id/id_card = null
|
||||
|
||||
if(istype(O, /obj/item/weapon/card/id))
|
||||
id_card = O
|
||||
else
|
||||
var/obj/item/device/pda/pda = O
|
||||
id_card = pda.id
|
||||
|
||||
if(access_security in id_card.access || emagged)
|
||||
user << "You imprint your ID details onto the badge."
|
||||
stored_name = id_card.registered_name
|
||||
name = "holobadge ([stored_name])"
|
||||
desc = "This glowing blue badge marks [stored_name] as THE LAW."
|
||||
else
|
||||
user << "[src] rejects your insufficient access rights."
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/clothing/accessory/holobadge/attack(mob/living/carbon/human/M, mob/living/user)
|
||||
if(isliving(user))
|
||||
user.visible_message("\red [user] invades [M]'s personal space, thrusting [src] into their face insistently.","\red You invade [M]'s personal space, thrusting [src] into their face insistently. You are the law.")
|
||||
|
||||
/obj/item/weapon/storage/box/holobadge
|
||||
name = "holobadge box"
|
||||
desc = "A box claiming to contain holobadges."
|
||||
New()
|
||||
new /obj/item/clothing/accessory/holobadge(src)
|
||||
new /obj/item/clothing/accessory/holobadge(src)
|
||||
new /obj/item/clothing/accessory/holobadge(src)
|
||||
new /obj/item/clothing/accessory/holobadge(src)
|
||||
new /obj/item/clothing/accessory/holobadge/cord(src)
|
||||
new /obj/item/clothing/accessory/holobadge/cord(src)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
///////////
|
||||
//SCARVES//
|
||||
///////////
|
||||
|
||||
/obj/item/clothing/accessory/scarf // No overlay
|
||||
name = "scarf"
|
||||
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
|
||||
|
||||
/obj/item/clothing/accessory/scarf/red
|
||||
name = "red scarf"
|
||||
icon_state = "redscarf"
|
||||
_color = "redscarf"
|
||||
|
||||
/obj/item/clothing/accessory/scarf/green
|
||||
name = "green scarf"
|
||||
icon_state = "greenscarf"
|
||||
_color = "greenscarf"
|
||||
|
||||
/obj/item/clothing/accessory/scarf/darkblue
|
||||
name = "dark blue scarf"
|
||||
icon_state = "darkbluescarf"
|
||||
_color = "darkbluescarf"
|
||||
|
||||
/obj/item/clothing/accessory/scarf/purple
|
||||
name = "purple scarf"
|
||||
icon_state = "purplescarf"
|
||||
_color = "purplescarf"
|
||||
|
||||
/obj/item/clothing/accessory/scarf/yellow
|
||||
name = "yellow scarf"
|
||||
icon_state = "yellowscarf"
|
||||
_color = "yellowscarf"
|
||||
|
||||
/obj/item/clothing/accessory/scarf/orange
|
||||
name = "orange scarf"
|
||||
icon_state = "orangescarf"
|
||||
_color = "orangescarf"
|
||||
|
||||
/obj/item/clothing/accessory/scarf/lightblue
|
||||
name = "light blue scarf"
|
||||
icon_state = "lightbluescarf"
|
||||
_color = "lightbluescarf"
|
||||
|
||||
/obj/item/clothing/accessory/scarf/white
|
||||
name = "white scarf"
|
||||
icon_state = "whitescarf"
|
||||
_color = "whitescarf"
|
||||
|
||||
/obj/item/clothing/accessory/scarf/black
|
||||
name = "black scarf"
|
||||
icon_state = "blackscarf"
|
||||
_color = "blackscarf"
|
||||
|
||||
/obj/item/clothing/accessory/scarf/zebra
|
||||
name = "zebra scarf"
|
||||
icon_state = "zebrascarf"
|
||||
_color = "zebrascarf"
|
||||
|
||||
/obj/item/clothing/accessory/scarf/christmas
|
||||
name = "christmas scarf"
|
||||
icon_state = "christmasscarf"
|
||||
_color = "christmasscarf"
|
||||
|
||||
//The three following scarves don't have the scarf subtype
|
||||
//This is because Ian can equip anything from that subtype
|
||||
//However, these 3 don't have corgi versions of their sprites
|
||||
/obj/item/clothing/accessory/stripedredscarf
|
||||
name = "striped red scarf"
|
||||
icon_state = "stripedredscarf"
|
||||
_color = "stripedredscarf"
|
||||
|
||||
/obj/item/clothing/accessory/stripedgreenscarf
|
||||
name = "striped green scarf"
|
||||
icon_state = "stripedgreenscarf"
|
||||
_color = "stripedgreenscarf"
|
||||
|
||||
/obj/item/clothing/accessory/stripedbluescarf
|
||||
name = "striped blue scarf"
|
||||
icon_state = "stripedbluescarf"
|
||||
_color = "stripedbluescarf"
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/obj/item/clothing/accessory/armband
|
||||
name = "red armband"
|
||||
desc = "A fancy red armband!"
|
||||
icon_state = "red"
|
||||
_color = "red"
|
||||
slot = "armband"
|
||||
|
||||
/obj/item/clothing/accessory/armband/cargo
|
||||
name = "cargo armband"
|
||||
desc = "An armband, worn by the crew to display which department they're assigned to. This one is brown."
|
||||
icon_state = "cargo"
|
||||
_color = "cargo"
|
||||
|
||||
/obj/item/clothing/accessory/armband/engine
|
||||
name = "engineering armband"
|
||||
desc = "An armband, worn by the crew to display which department they're assigned to. This one is orange with a reflective strip!"
|
||||
icon_state = "engie"
|
||||
_color = "engie"
|
||||
|
||||
/obj/item/clothing/accessory/armband/science
|
||||
name = "science armband"
|
||||
desc = "An armband, worn by the crew to display which department they're assigned to. This one is purple."
|
||||
icon_state = "rnd"
|
||||
_color = "rnd"
|
||||
|
||||
/obj/item/clothing/accessory/armband/hydro
|
||||
name = "hydroponics armband"
|
||||
desc = "An armband, worn by the crew to display which department they're assigned to. This one is green and blue."
|
||||
icon_state = "hydro"
|
||||
_color = "hydro"
|
||||
|
||||
/obj/item/clothing/accessory/armband/med
|
||||
name = "medical armband"
|
||||
desc = "An armband, worn by the crew to display which department they're assigned to. This one is white."
|
||||
icon_state = "med"
|
||||
_color = "med"
|
||||
|
||||
/obj/item/clothing/accessory/armband/medgreen
|
||||
name = "EMT armband"
|
||||
desc = "An armband, worn by the crew to display which department they're assigned to. This one is white and green."
|
||||
icon_state = "medgreen"
|
||||
_color = "medgreen"
|
||||
@@ -0,0 +1,135 @@
|
||||
/obj/item/clothing/accessory/holster
|
||||
name = "shoulder holster"
|
||||
desc = "A handgun holster."
|
||||
icon_state = "holster"
|
||||
_color = "holster"
|
||||
slot = "utility"
|
||||
var/holster_allow = /obj/item/weapon/gun
|
||||
var/obj/item/weapon/gun/holstered = null
|
||||
icon_action_button = "action_holster"
|
||||
w_class = 3.0 // so it doesn't fit in pockets
|
||||
|
||||
//subtypes can override this to specify what can be holstered
|
||||
/obj/item/clothing/accessory/holster/proc/can_holster(obj/item/weapon/gun/W)
|
||||
if(!W.isHandgun())
|
||||
return 0
|
||||
else if(!istype(W,holster_allow))
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/clothing/accessory/holster/attack_self()
|
||||
var/holsteritem = usr.get_active_hand()
|
||||
if(!holstered)
|
||||
holster(holsteritem, usr)
|
||||
else
|
||||
unholster(usr)
|
||||
|
||||
/obj/item/clothing/accessory/holster/proc/holster(obj/item/I, mob/user as mob)
|
||||
if(holstered)
|
||||
user << "<span class='warning'>There is already a [holstered] holstered here!</span>"
|
||||
return
|
||||
|
||||
if (!istype(I, /obj/item/weapon/gun))
|
||||
user << "<span class='warning'>Only guns can be holstered!</span>"
|
||||
return
|
||||
|
||||
var/obj/item/weapon/gun/W = I
|
||||
if (!can_holster(W))
|
||||
user << "<span class='warning'>This [W] won't fit in the [src]!</span>"
|
||||
return
|
||||
|
||||
holstered = W
|
||||
user.drop_from_inventory(holstered)
|
||||
holstered.loc = src
|
||||
holstered.add_fingerprint(user)
|
||||
user.visible_message("<span class='notice'>[user] holsters the [holstered].</span>", "<span class='notice'>You holster the [holstered].</span>")
|
||||
|
||||
/obj/item/clothing/accessory/holster/proc/unholster(mob/user as mob)
|
||||
if(!holstered)
|
||||
return
|
||||
|
||||
if(istype(user.get_active_hand(),/obj) && istype(user.get_inactive_hand(),/obj))
|
||||
user << "<span class='warning'>You need an empty hand to draw the [holstered]!</span>"
|
||||
else
|
||||
if(user.a_intent == "hurt")
|
||||
usr.visible_message("\red [user] draws the [holstered], ready to shoot!</span>", \
|
||||
"<span class='warning'>You draw the [holstered], ready to shoot!</span>")
|
||||
else
|
||||
user.visible_message("<span class='notice'>[user] draws the [holstered], pointing it at the ground.</span>", \
|
||||
"<span class='notice'>You draw the [holstered], pointing it at the ground.</span>")
|
||||
user.put_in_hands(holstered)
|
||||
holstered.add_fingerprint(user)
|
||||
holstered = null
|
||||
|
||||
/obj/item/clothing/accessory/holster/attack_hand(mob/user as mob)
|
||||
if (has_suit) //if we are part of a suit
|
||||
if (holstered)
|
||||
unholster(user)
|
||||
return
|
||||
|
||||
..(user)
|
||||
|
||||
/obj/item/clothing/accessory/holster/attackby(obj/item/W as obj, mob/user as mob)
|
||||
holster(W, user)
|
||||
|
||||
/obj/item/clothing/accessory/holster/emp_act(severity)
|
||||
if (holstered)
|
||||
holstered.emp_act(severity)
|
||||
..()
|
||||
|
||||
/obj/item/clothing/accessory/holster/examine(mob/user)
|
||||
..(user)
|
||||
if (holstered)
|
||||
user << "A [holstered] is holstered here."
|
||||
else
|
||||
user << "It is empty."
|
||||
|
||||
/obj/item/clothing/accessory/holster/on_attached(obj/item/clothing/under/S, mob/user as mob)
|
||||
..()
|
||||
has_suit.verbs += /obj/item/clothing/accessory/holster/verb/holster_verb
|
||||
|
||||
/obj/item/clothing/accessory/holster/on_removed(mob/user as mob)
|
||||
has_suit.verbs -= /obj/item/clothing/accessory/holster/verb/holster_verb
|
||||
..()
|
||||
|
||||
//For the holster hotkey
|
||||
/obj/item/clothing/accessory/holster/verb/holster_verb()
|
||||
set name = "Holster"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
if(!istype(usr, /mob/living)) return
|
||||
if(usr.stat) return
|
||||
|
||||
var/obj/item/clothing/accessory/holster/H = null
|
||||
if (istype(src, /obj/item/clothing/accessory/holster))
|
||||
H = src
|
||||
else if (istype(src, /obj/item/clothing/under))
|
||||
var/obj/item/clothing/under/S = src
|
||||
if (S.accessories.len)
|
||||
H = locate() in S.accessories
|
||||
|
||||
if (!H)
|
||||
usr << "<span class='warning'>Something is very wrong.</span>"
|
||||
|
||||
if(!H.holstered)
|
||||
if(!istype(usr.get_active_hand(), /obj/item/weapon/gun))
|
||||
usr << "<span class='warning'>You need your gun equiped to holster it.</span>"
|
||||
return
|
||||
var/obj/item/weapon/gun/W = usr.get_active_hand()
|
||||
H.holster(W, usr)
|
||||
else
|
||||
H.unholster(usr)
|
||||
|
||||
/obj/item/clothing/accessory/holster/armpit
|
||||
name = "shoulder holster"
|
||||
desc = "A worn-out handgun holster. Perfect for concealed carry"
|
||||
icon_state = "holster"
|
||||
_color = "holster"
|
||||
holster_allow = /obj/item/weapon/gun/projectile
|
||||
|
||||
/obj/item/clothing/accessory/holster/waist
|
||||
name = "shoulder holster"
|
||||
desc = "A handgun holster. Made of expensive leather."
|
||||
icon_state = "holster"
|
||||
_color = "holster_low"
|
||||
@@ -0,0 +1,91 @@
|
||||
/obj/item/clothing/accessory/storage
|
||||
name = "load bearing equipment"
|
||||
desc = "Used to hold things when you don't have enough hands."
|
||||
icon_state = "webbing"
|
||||
_color = "webbing"
|
||||
slot = "utility"
|
||||
var/slots = 3
|
||||
var/obj/item/weapon/storage/internal/hold
|
||||
icon_action_button = "action_storage"
|
||||
w_class = 3.0 // so it doesn't fit in pockets
|
||||
|
||||
/obj/item/clothing/accessory/storage/New()
|
||||
..()
|
||||
hold = new/obj/item/weapon/storage/internal(src)
|
||||
hold.storage_slots = slots
|
||||
|
||||
/obj/item/clothing/accessory/storage/attack_hand(mob/user as mob)
|
||||
if (has_suit) //if we are part of a suit
|
||||
hold.open(user)
|
||||
return
|
||||
|
||||
if (hold.handle_attack_hand(user)) //otherwise interact as a regular storage item
|
||||
..(user)
|
||||
|
||||
/obj/item/clothing/accessory/storage/MouseDrop(obj/over_object as obj)
|
||||
if (has_suit)
|
||||
return
|
||||
|
||||
if (hold.handle_mousedrop(usr, over_object))
|
||||
..(over_object)
|
||||
|
||||
/obj/item/clothing/accessory/storage/attackby(obj/item/W as obj, mob/user as mob)
|
||||
return hold.attackby(W, user)
|
||||
|
||||
/obj/item/clothing/accessory/storage/emp_act(severity)
|
||||
hold.emp_act(severity)
|
||||
..()
|
||||
|
||||
/obj/item/clothing/accessory/storage/hear_talk(mob/M, var/msg, verb, datum/language/speaking)
|
||||
hold.hear_talk(M, msg, verb, speaking)
|
||||
..()
|
||||
|
||||
/obj/item/clothing/accessory/storage/attack_self(mob/user as mob)
|
||||
if (has_suit) //if we are part of a suit
|
||||
hold.open(user)
|
||||
else
|
||||
user << "<span class='notice'>You empty [src].</span>"
|
||||
var/turf/T = get_turf(src)
|
||||
hold.hide_from(usr)
|
||||
for(var/obj/item/I in hold.contents)
|
||||
hold.remove_from_storage(I, T)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
/obj/item/clothing/accessory/storage/webbing
|
||||
name = "webbing"
|
||||
desc = "Sturdy mess of synthcotton belts and buckles, ready to share your burden."
|
||||
icon_state = "webbing"
|
||||
_color = "webbing"
|
||||
|
||||
/obj/item/clothing/accessory/storage/black_vest
|
||||
name = "black webbing vest"
|
||||
desc = "Robust black synthcotton vest with lots of pockets to hold whatever you need, but cannot hold in hands."
|
||||
icon_state = "vest_black"
|
||||
_color = "vest_black"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/brown_vest
|
||||
name = "brown webbing vest"
|
||||
desc = "Worn brownish synthcotton vest with lots of pockets to unload your hands."
|
||||
icon_state = "vest_brown"
|
||||
_color = "vest_brown"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/accessory/storage/knifeharness
|
||||
name = "decorated harness"
|
||||
desc = "A heavily decorated harness of sinew and leather with two knife-loops."
|
||||
icon_state = "unathiharness2"
|
||||
_color = "unathiharness2"
|
||||
slots = 2
|
||||
|
||||
/obj/item/clothing/accessory/storage/knifeharness/New()
|
||||
..()
|
||||
hold.max_combined_w_class = 4
|
||||
hold.can_hold = list("/obj/item/weapon/hatchet/unathiknife",\
|
||||
"/obj/item/weapon/kitchen/utensil/knife",\
|
||||
"/obj/item/weapon/kitchen/utensil/pknife",\
|
||||
"/obj/item/weapon/kitchenknife",\
|
||||
"/obj/item/weapon/kitchenknife/ritual")
|
||||
|
||||
new /obj/item/weapon/hatchet/unathiknife(hold)
|
||||
new /obj/item/weapon/hatchet/unathiknife(hold)
|
||||
@@ -1,467 +0,0 @@
|
||||
/obj/item/clothing/tie
|
||||
name = "tie"
|
||||
desc = "A neosilk clip-on tie."
|
||||
icon = 'icons/obj/clothing/ties.dmi'
|
||||
icon_state = "bluetie"
|
||||
item_state = "" //no inhands
|
||||
_color = "bluetie"
|
||||
flags = FPRINT | TABLEPASS
|
||||
slot_flags = 0
|
||||
w_class = 2.0
|
||||
|
||||
/obj/item/clothing/tie/blue
|
||||
name = "blue tie"
|
||||
icon_state = "bluetie"
|
||||
_color = "bluetie"
|
||||
|
||||
/obj/item/clothing/tie/red
|
||||
name = "red tie"
|
||||
icon_state = "redtie"
|
||||
_color = "redtie"
|
||||
|
||||
/obj/item/clothing/tie/black
|
||||
name = "black tie"
|
||||
icon_state = "blacktie"
|
||||
_color = "blacktie"
|
||||
|
||||
/obj/item/clothing/tie/horrible
|
||||
name = "horrible tie"
|
||||
desc = "A neosilk clip-on tie. This one is disgusting."
|
||||
icon_state = "horribletie"
|
||||
_color = "horribletie"
|
||||
|
||||
/obj/item/clothing/tie/waistcoat
|
||||
name = "waistcoat"
|
||||
desc = "For some classy, murderous fun."
|
||||
icon_state = "waistcoat"
|
||||
item_state = "waistcoat"
|
||||
_color = "waistcoat"
|
||||
|
||||
/obj/item/clothing/tie/stethoscope
|
||||
name = "stethoscope"
|
||||
desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
|
||||
icon_state = "stethoscope"
|
||||
_color = "stethoscope"
|
||||
|
||||
/obj/item/clothing/tie/stethoscope/attack(mob/living/carbon/human/M, mob/living/user)
|
||||
if(ishuman(M) && isliving(user))
|
||||
if(user.a_intent == "help")
|
||||
var/body_part = parse_zone(user.zone_sel.selecting)
|
||||
if(body_part)
|
||||
var/their = "their"
|
||||
switch(M.gender)
|
||||
if(MALE) their = "his"
|
||||
if(FEMALE) their = "her"
|
||||
|
||||
var/sound = "pulse"
|
||||
var/sound_strength
|
||||
|
||||
if(M.stat == DEAD || (M.status_flags&FAKEDEATH))
|
||||
sound_strength = "cannot hear"
|
||||
sound = "anything"
|
||||
else
|
||||
sound_strength = "hear a weak"
|
||||
switch(body_part)
|
||||
if("chest")
|
||||
if(M.oxyloss < 50)
|
||||
sound_strength = "hear a healthy"
|
||||
sound = "pulse and respiration"
|
||||
if("eyes","mouth")
|
||||
sound_strength = "cannot hear"
|
||||
sound = "anything"
|
||||
else
|
||||
sound_strength = "hear a weak"
|
||||
|
||||
user.visible_message("[user] places [src] against [M]'s [body_part] and listens attentively.", "You place [src] against [their] [body_part]. You [sound_strength] [sound].")
|
||||
return
|
||||
return ..(M,user)
|
||||
|
||||
|
||||
//Medals
|
||||
/obj/item/clothing/tie/medal
|
||||
name = "bronze medal"
|
||||
desc = "A bronze medal."
|
||||
icon_state = "bronze"
|
||||
_color = "bronze"
|
||||
|
||||
/obj/item/clothing/tie/medal/conduct
|
||||
name = "distinguished conduct medal"
|
||||
desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew."
|
||||
|
||||
/obj/item/clothing/tie/medal/bronze_heart
|
||||
name = "bronze heart medal"
|
||||
desc = "A bronze heart-shaped medal awarded for sacrifice. It is often awarded posthumously or for severe injury in the line of duty."
|
||||
icon_state = "bronze_heart"
|
||||
|
||||
/obj/item/clothing/tie/medal/nobel_science
|
||||
name = "nobel sciences award"
|
||||
desc = "A bronze medal which represents significant contributions to the field of science or engineering."
|
||||
|
||||
/obj/item/clothing/tie/medal/silver
|
||||
name = "silver medal"
|
||||
desc = "A silver medal."
|
||||
icon_state = "silver"
|
||||
_color = "silver"
|
||||
|
||||
/obj/item/clothing/tie/medal/silver/valor
|
||||
name = "medal of valor"
|
||||
desc = "A silver medal awarded for acts of exceptional valor."
|
||||
|
||||
/obj/item/clothing/tie/medal/silver/security
|
||||
name = "robust security award"
|
||||
desc = "An award for distinguished combat and sacrifice in defence of Nanotrasen's commercial interests. Often awarded to security staff."
|
||||
|
||||
/obj/item/clothing/tie/medal/gold
|
||||
name = "gold medal"
|
||||
desc = "A prestigious golden medal."
|
||||
icon_state = "gold"
|
||||
_color = "gold"
|
||||
|
||||
/obj/item/clothing/tie/medal/gold/captain
|
||||
name = "medal of captaincy"
|
||||
desc = "A golden medal awarded exclusively to those promoted to the rank of captain. It signifies the codified responsibilities of a captain to Nanotrasen, and their undisputable authority over their crew."
|
||||
|
||||
/obj/item/clothing/tie/medal/gold/heroism
|
||||
name = "medal of exceptional heroism"
|
||||
desc = "An extremely rare golden medal awarded only by CentComm. To recieve such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders."
|
||||
|
||||
/obj/item/clothing/tie/medal/gold/ion
|
||||
name = "Ion Chef Medal"
|
||||
desc = "A medal awarded to the winner of the Ion Chef contest"
|
||||
icon_state = "ion"
|
||||
_color = "ion"
|
||||
|
||||
|
||||
//Armbands
|
||||
/obj/item/clothing/tie/armband
|
||||
name = "red armband"
|
||||
desc = "An fancy red armband!"
|
||||
icon_state = "red"
|
||||
_color = "red"
|
||||
|
||||
/obj/item/clothing/tie/armband/cargo
|
||||
name = "cargo bay guard armband"
|
||||
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is brown."
|
||||
icon_state = "cargo"
|
||||
_color = "cargo"
|
||||
|
||||
/obj/item/clothing/tie/armband/engine
|
||||
name = "engineering guard armband"
|
||||
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is orange with a reflective strip!"
|
||||
icon_state = "engie"
|
||||
_color = "engie"
|
||||
|
||||
/obj/item/clothing/tie/armband/science
|
||||
name = "science guard armband"
|
||||
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is purple."
|
||||
icon_state = "rnd"
|
||||
_color = "rnd"
|
||||
|
||||
/obj/item/clothing/tie/armband/hydro
|
||||
name = "hydroponics guard armband"
|
||||
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is green and blue."
|
||||
icon_state = "hydro"
|
||||
_color = "hydro"
|
||||
|
||||
/obj/item/clothing/tie/armband/med
|
||||
name = "medical guard armband"
|
||||
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white."
|
||||
icon_state = "med"
|
||||
_color = "med"
|
||||
|
||||
/obj/item/clothing/tie/armband/medgreen
|
||||
name = "medical guard armband"
|
||||
desc = "An armband, worn by the station's security forces to display which department they're assigned to. This one is white and green."
|
||||
icon_state = "medgreen"
|
||||
_color = "medgreen"
|
||||
|
||||
/obj/item/clothing/tie/holster
|
||||
name = "large shoulder holster"
|
||||
desc = "A handgun holster."
|
||||
icon_state = "holster"
|
||||
_color = "holster"
|
||||
var/obj/item/weapon/gun/holstered = null
|
||||
var/holster_allow = /obj/item/weapon/gun
|
||||
icon_action_button = "action_holster"
|
||||
|
||||
/obj/item/clothing/tie/holster/attack_self()
|
||||
holster()
|
||||
|
||||
/obj/item/clothing/tie/holster/proc/holster()
|
||||
if(!istype(usr, /mob/living)) return
|
||||
if(usr.stat) return
|
||||
|
||||
if(!holstered)
|
||||
if(!istype(usr.get_active_hand(), holster_allow))
|
||||
usr << "<span class='notice'>You can't fit that in the holster.</span>"
|
||||
return
|
||||
var/obj/item/weapon/gun/W = usr.get_active_hand()
|
||||
if (!W.isHandgun())
|
||||
usr << "<span class='warning'>This gun won't fit in \the [src]!</span>"
|
||||
return
|
||||
holstered = usr.get_active_hand()
|
||||
usr.drop_item()
|
||||
holstered.loc = src
|
||||
usr.visible_message("<span class='notice'>\The [usr] holsters \the [holstered].", "<span class='notice'>You holster \the [holstered].</span>")
|
||||
else
|
||||
if(istype(usr.get_active_hand(),/obj) && istype(usr.get_inactive_hand(),/obj))
|
||||
usr << "<span class='warning'>You need an empty hand to draw the gun!</span>"
|
||||
else
|
||||
if(usr.a_intent == "harm")
|
||||
usr.visible_message("<span class='warning'>\The [usr] draws \the [holstered], ready to shoot!</span>", \
|
||||
"<span class='warning'>You draw \the [holstered], ready to shoot!</span>")
|
||||
else
|
||||
usr.visible_message("<span class='notice'>\The [usr] draws \the [holstered], pointing it at the ground.</span>", \
|
||||
"<span class='notice'>You draw \the [holstered], pointing it at the ground.</span>")
|
||||
usr.put_in_hands(holstered)
|
||||
holstered = null
|
||||
|
||||
/obj/item/clothing/tie/holster/armpit
|
||||
name = "shoulder holster"
|
||||
desc = "A worn-out handgun holster. Perfect for concealed carry"
|
||||
icon_state = "holster"
|
||||
_color = "holster"
|
||||
holster_allow = /obj/item/weapon/gun/projectile
|
||||
|
||||
/obj/item/clothing/tie/storage
|
||||
name = "load bearing equipment"
|
||||
desc = "Used to hold things when you don't have enough hands for that."
|
||||
icon_state = "webbing"
|
||||
_color = "webbing"
|
||||
var/slots = 3
|
||||
var/obj/item/weapon/storage/pockets/hold
|
||||
icon_action_button = "action_storage"
|
||||
|
||||
/obj/item/clothing/tie/storage/New()
|
||||
hold = new /obj/item/weapon/storage/pockets(src)
|
||||
hold.master_item = src
|
||||
hold.storage_slots = slots
|
||||
|
||||
|
||||
/obj/item/clothing/tie/storage/attack_self(mob/user as mob)
|
||||
if (!istype(hold))
|
||||
return
|
||||
|
||||
hold.loc = user
|
||||
hold.attack_hand(user)
|
||||
|
||||
/obj/item/clothing/tie/storage/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
hold.attackby(W,user)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
/obj/item/weapon/storage/pockets
|
||||
name = "storage"
|
||||
var/master_item //item it belongs to
|
||||
|
||||
/obj/item/weapon/storage/pockets/close(mob/user as mob)
|
||||
..()
|
||||
loc = master_item
|
||||
|
||||
/obj/item/clothing/tie/storage/webbing
|
||||
name = "webbing"
|
||||
desc = "Strudy mess of synthcotton belts and buckles, ready to share your burden."
|
||||
icon_state = "webbing"
|
||||
_color = "webbing"
|
||||
|
||||
/obj/item/clothing/tie/storage/black_vest
|
||||
name = "black webbing vest"
|
||||
desc = "Robust black synthcotton vest with lots of pockets to hold whatever you need, but cannot hold in hands."
|
||||
icon_state = "vest_black"
|
||||
_color = "vest_black"
|
||||
slots = 5
|
||||
|
||||
/obj/item/clothing/tie/storage/brown_vest
|
||||
name = "brown webbing vest"
|
||||
desc = "Worn brownish synthcotton vest with lots of pockets to unload your hands."
|
||||
icon_state = "vest_brown"
|
||||
_color = "vest_brown"
|
||||
slots = 5
|
||||
/*
|
||||
Holobadges are worn on the belt or neck, and can be used to show that the holder is an authorized
|
||||
Security agent - the user details can be imprinted on the badge with a Security-access ID card,
|
||||
or they can be emagged to accept any ID for use in disguises.
|
||||
*/
|
||||
|
||||
/obj/item/clothing/tie/holobadge
|
||||
|
||||
name = "holobadge"
|
||||
desc = "This glowing blue badge marks the holder as THE LAW."
|
||||
icon_state = "holobadge"
|
||||
_color = "holobadge"
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
var/emagged = 0 //Emagging removes Sec check.
|
||||
var/stored_name = null
|
||||
|
||||
/obj/item/clothing/tie/holobadge/cord
|
||||
icon_state = "holobadge-cord"
|
||||
_color = "holobadge-cord"
|
||||
slot_flags = SLOT_MASK
|
||||
|
||||
/obj/item/clothing/tie/holobadge/attack_self(mob/user as mob)
|
||||
if(!stored_name)
|
||||
user << "Waving around a badge before swiping an ID would be pretty pointless."
|
||||
return
|
||||
if(isliving(user))
|
||||
user.visible_message("\red [user] displays their Nanotrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.","\red You display your Nanotrasen Internal Security Legal Authorization Badge.\nIt reads: [stored_name], NT Security.")
|
||||
|
||||
/obj/item/clothing/tie/holobadge/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
|
||||
if (istype(O, /obj/item/weapon/card/emag))
|
||||
if (emagged)
|
||||
user << "\red [src] is already cracked."
|
||||
return
|
||||
else
|
||||
emagged = 1
|
||||
user << "\red You swipe [O] and crack the holobadge security checks."
|
||||
return
|
||||
|
||||
else if(istype(O, /obj/item/weapon/card/id) || istype(O, /obj/item/device/pda))
|
||||
|
||||
var/obj/item/weapon/card/id/id_card = null
|
||||
|
||||
if(istype(O, /obj/item/weapon/card/id))
|
||||
id_card = O
|
||||
else
|
||||
var/obj/item/device/pda/pda = O
|
||||
id_card = pda.id
|
||||
|
||||
if(access_security in id_card.access || emagged)
|
||||
user << "You imprint your ID details onto the badge."
|
||||
stored_name = id_card.registered_name
|
||||
name = "holobadge ([stored_name])"
|
||||
desc = "This glowing blue badge marks [stored_name] as THE LAW."
|
||||
else
|
||||
user << "[src] rejects your insufficient access rights."
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/clothing/tie/holobadge/attack(mob/living/carbon/human/M, mob/living/user)
|
||||
if(isliving(user))
|
||||
user.visible_message("\red [user] invades [M]'s personal space, thrusting [src] into their face insistently.","\red You invade [M]'s personal space, thrusting [src] into their face insistently. You are the law.")
|
||||
|
||||
/obj/item/weapon/storage/box/holobadge
|
||||
name = "holobadge box"
|
||||
desc = "A box claiming to contain holobadges."
|
||||
New()
|
||||
new /obj/item/clothing/tie/holobadge(src)
|
||||
new /obj/item/clothing/tie/holobadge(src)
|
||||
new /obj/item/clothing/tie/holobadge(src)
|
||||
new /obj/item/clothing/tie/holobadge(src)
|
||||
new /obj/item/clothing/tie/holobadge/cord(src)
|
||||
new /obj/item/clothing/tie/holobadge/cord(src)
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/clothing/tie/storage/knifeharness
|
||||
name = "decorated harness"
|
||||
desc = "A heavily decorated harness of sinew and leather with two knife-loops."
|
||||
icon_state = "unathiharness2"
|
||||
_color = "unathiharness2"
|
||||
slots = 2
|
||||
|
||||
/obj/item/clothing/tie/storage/knifeharness/attackby(var/obj/item/O as obj, mob/user as mob)
|
||||
..()
|
||||
update()
|
||||
|
||||
/obj/item/clothing/tie/storage/knifeharness/proc/update()
|
||||
var/count = 0
|
||||
for(var/obj/item/I in hold)
|
||||
if(istype(I,/obj/item/weapon/hatchet/unathiknife))
|
||||
count++
|
||||
if(count>2) count = 2
|
||||
item_state = "unathiharness[count]"
|
||||
icon_state = item_state
|
||||
_color = item_state
|
||||
|
||||
if(istype(loc, /obj/item/clothing))
|
||||
var/obj/item/clothing/U = loc
|
||||
if(istype(U.loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = U.loc
|
||||
H.update_inv_w_uniform()
|
||||
|
||||
/obj/item/clothing/tie/storage/knifeharness/New()
|
||||
..()
|
||||
new /obj/item/weapon/hatchet/unathiknife(hold)
|
||||
new /obj/item/weapon/hatchet/unathiknife(hold)
|
||||
|
||||
///////////
|
||||
//SCARVES//
|
||||
///////////
|
||||
|
||||
/obj/item/clothing/tie/scarf
|
||||
name = "scarf"
|
||||
desc = "A stylish scarf. The perfect winter accessory for those with a keen fashion sense, and those who just can't handle a cold breeze on their necks."
|
||||
|
||||
/obj/item/clothing/tie/scarf/red
|
||||
name = "red scarf"
|
||||
icon_state = "redscarf"
|
||||
_color = "redscarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/green
|
||||
name = "green scarf"
|
||||
icon_state = "greenscarf"
|
||||
_color = "greenscarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/darkblue
|
||||
name = "dark blue scarf"
|
||||
icon_state = "darkbluescarf"
|
||||
_color = "darkbluescarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/purple
|
||||
name = "purple scarf"
|
||||
icon_state = "purplescarf"
|
||||
_color = "purplescarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/yellow
|
||||
name = "yellow scarf"
|
||||
icon_state = "yellowscarf"
|
||||
_color = "yellowscarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/orange
|
||||
name = "orange scarf"
|
||||
icon_state = "orangescarf"
|
||||
_color = "orangescarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/lightblue
|
||||
name = "light blue scarf"
|
||||
icon_state = "lightbluescarf"
|
||||
_color = "lightbluescarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/white
|
||||
name = "white scarf"
|
||||
icon_state = "whitescarf"
|
||||
_color = "whitescarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/black
|
||||
name = "black scarf"
|
||||
icon_state = "blackscarf"
|
||||
_color = "blackscarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/zebra
|
||||
name = "zebra scarf"
|
||||
icon_state = "zebrascarf"
|
||||
_color = "zebrascarf"
|
||||
|
||||
/obj/item/clothing/tie/scarf/christmas
|
||||
name = "christmas scarf"
|
||||
icon_state = "christmasscarf"
|
||||
_color = "christmasscarf"
|
||||
|
||||
//The three following scarves don't have the scarf subtype
|
||||
//This is because Ian can equip anything from that subtype
|
||||
//However, these 3 don't have corgi versions of their sprites
|
||||
/obj/item/clothing/tie/stripedredscarf
|
||||
name = "striped red scarf"
|
||||
icon_state = "stripedredscarf"
|
||||
_color = "stripedredscarf"
|
||||
|
||||
/obj/item/clothing/tie/stripedgreenscarf
|
||||
name = "striped green scarf"
|
||||
icon_state = "stripedgreenscarf"
|
||||
_color = "stripedgreenscarf"
|
||||
|
||||
/obj/item/clothing/tie/stripedbluescarf
|
||||
name = "striped blue scarf"
|
||||
icon_state = "stripedbluescarf"
|
||||
_color = "stripedbluescarf"
|
||||
@@ -61,7 +61,7 @@
|
||||
// Battery must be installed BEFORE wiring the computer.
|
||||
// if installing it in an existing computer, you will have to
|
||||
// get back to this state first.
|
||||
var/obj/item/weapon/cell/battery = null
|
||||
var/obj/item/weapon/stock_parts/cell/battery = null
|
||||
|
||||
/obj/structure/computer3frame/server
|
||||
name = "server frame"
|
||||
@@ -143,7 +143,7 @@
|
||||
else
|
||||
user << "\red There's no battery to remove!"
|
||||
|
||||
if(istype(P, /obj/item/weapon/cell))
|
||||
if(istype(P, /obj/item/weapon/stock_parts/cell))
|
||||
if(!battery)
|
||||
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
|
||||
if(do_after(5))
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
// the comms computer, solar trackers, etc, that should function when all else is off.
|
||||
// Laptops will require batteries and have no mains power.
|
||||
|
||||
var/obj/item/weapon/cell/battery = null // uninterruptible power supply aka battery
|
||||
var/obj/item/weapon/stock_parts/cell/battery = null // uninterruptible power supply aka battery
|
||||
|
||||
|
||||
verb/ResetComputer()
|
||||
@@ -185,7 +185,7 @@
|
||||
toybox.init(src)
|
||||
continue
|
||||
|
||||
if(ispath(typekey,/obj/item/weapon/cell))
|
||||
if(ispath(typekey,/obj/item/weapon/stock_parts/cell))
|
||||
if(battery) continue
|
||||
battery = new typekey(src)
|
||||
continue
|
||||
@@ -452,7 +452,7 @@
|
||||
//Returns percentage of battery charge remaining. Returns -1 if no battery is installed.
|
||||
proc/check_battery_status()
|
||||
if (battery)
|
||||
var/obj/item/weapon/cell/B = battery
|
||||
var/obj/item/weapon/stock_parts/cell/B = battery
|
||||
return round(B.charge / (B.maxcharge / 100))
|
||||
else
|
||||
return -1
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
|
||||
New(var/L, var/built = 0)
|
||||
if(!built && !battery)
|
||||
battery = new /obj/item/weapon/cell(src)
|
||||
battery = new /obj/item/weapon/stock_parts/cell(src)
|
||||
..(L,built)
|
||||
|
||||
verb/close_computer()
|
||||
|
||||
@@ -202,10 +202,10 @@
|
||||
newlap.spawn_parts += (/obj/item/part/computer/networking/cable)
|
||||
if (power == 1)
|
||||
del(newlap.battery)
|
||||
newlap.battery = new /obj/item/weapon/cell/high(newlap)
|
||||
newlap.battery = new /obj/item/weapon/stock_parts/cell/high(newlap)
|
||||
if (power == 2)
|
||||
del(newlap.battery)
|
||||
newlap.battery = new /obj/item/weapon/cell/super(newlap)
|
||||
newlap.battery = new /obj/item/weapon/stock_parts/cell/super(newlap)
|
||||
|
||||
newlap.spawn_parts()
|
||||
|
||||
@@ -293,7 +293,7 @@
|
||||
return total
|
||||
|
||||
/obj/machinery/lapvend/proc/choose_progs(var/obj/item/weapon/card/id/C)
|
||||
if(access_security in C.access || access_forensics_lockers in C.access)
|
||||
if((access_security in C.access) || (access_forensics_lockers in C.access))
|
||||
newlap.spawn_files += (/datum/file/program/secure_data)
|
||||
newlap.spawn_files += (/datum/file/camnet_key)
|
||||
newlap.spawn_files += (/datum/file/camnet_key/researchoutpost)
|
||||
@@ -349,9 +349,9 @@
|
||||
network = 2
|
||||
if(istype(L.stored_computer.net,/obj/item/part/computer/networking/cable))
|
||||
network = 3
|
||||
if(istype(L.stored_computer.battery, /obj/item/weapon/cell/high))
|
||||
if(istype(L.stored_computer.battery, /obj/item/weapon/stock_parts/cell/high))
|
||||
power = 1
|
||||
if(istype(L.stored_computer.battery, /obj/item/weapon/cell/super))
|
||||
if(istype(L.stored_computer.battery, /obj/item/weapon/stock_parts/cell/super))
|
||||
power = 2
|
||||
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
/obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area)
|
||||
New(var/L,var/built=0)
|
||||
if(!built && !battery)
|
||||
battery = new /obj/item/weapon/cell(src)
|
||||
battery = new /obj/item/weapon/stock_parts/cell(src)
|
||||
..(L,built)
|
||||
|
||||
/obj/machinery/computer3/laptop/testing
|
||||
@@ -28,7 +28,7 @@
|
||||
/obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area)
|
||||
New(var/L,var/built=0)
|
||||
if(!built && !battery)
|
||||
battery = new /obj/item/weapon/cell/super(src)
|
||||
battery = new /obj/item/weapon/stock_parts/cell/super(src)
|
||||
..(L,built)
|
||||
|
||||
/obj/machinery/computer3/wall_comp/testing
|
||||
@@ -44,7 +44,7 @@
|
||||
/obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area)
|
||||
New(var/L,var/built=0)
|
||||
if(!built && !battery)
|
||||
battery = new /obj/item/weapon/cell(src)
|
||||
battery = new /obj/item/weapon/stock_parts/cell(src)
|
||||
..(L,built)
|
||||
|
||||
/obj/machinery/computer3/server/testing
|
||||
@@ -60,7 +60,7 @@
|
||||
/obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area)
|
||||
New(var/L,var/built=0)
|
||||
if(!built && !battery)
|
||||
battery = new /obj/item/weapon/cell(src)
|
||||
battery = new /obj/item/weapon/stock_parts/cell(src)
|
||||
..(L,built)
|
||||
|
||||
/obj/machinery/computer3/server/rack/testing
|
||||
@@ -76,7 +76,7 @@
|
||||
/obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area)
|
||||
New(var/L,var/built=0)
|
||||
if(!built && !battery)
|
||||
battery = new /obj/item/weapon/cell(src)
|
||||
battery = new /obj/item/weapon/stock_parts/cell(src)
|
||||
..(L,built)
|
||||
|
||||
/obj/item/weapon/storage/box/testing_disks
|
||||
|
||||
@@ -738,7 +738,7 @@
|
||||
|
||||
/obj/item/clothing/under/rank/bartender/fluff/classy //searif: Ara Al-Jazari
|
||||
name = "classy bartender uniform"
|
||||
desc = "A prim and proper uniform that looks very similar to a bartender's, the only differences being a red tie, waistcoat and a rag hanging out of the back pocket."
|
||||
desc = "A prim and proper uniform that looks very similar to a bartender's, the only differences being a red accessory, waistcoat and a rag hanging out of the back pocket."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
icon_state = "ara_bar_uniform"
|
||||
item_state = "ara_bar_uniform"
|
||||
@@ -833,7 +833,7 @@
|
||||
|
||||
////// Small locket - Altair An-Nasaqan - Serithi
|
||||
|
||||
/obj/item/clothing/tie/fluff/altair_locket
|
||||
/obj/item/clothing/accessory/fluff/altair_locket
|
||||
name = "small locket"
|
||||
desc = "A small golden locket attached to an Ii'rka-reed string. Inside the locket is a holo-picture of a female Tajaran, and an inscription writtin in Siik'mas."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
@@ -847,7 +847,7 @@
|
||||
|
||||
////// Silver locket - Konaa Hirano - Konaa_Hirano
|
||||
|
||||
/obj/item/clothing/tie/fluff/konaa_hirano
|
||||
/obj/item/clothing/accessory/fluff/konaa_hirano
|
||||
name = "silver locket"
|
||||
desc = "This oval shaped, argentium sterling silver locket hangs on an incredibly fine, refractive string, almost thin as hair and microweaved from links to a deceptive strength, of similar material. The edges are engraved very delicately with an elegant curving design, but overall the main is unmarked and smooth to the touch, leaving room for either remaining as a stolid piece or future alterations. There is an obvious internal place for a picture or lock of some sort, but even behind that is a very thin compartment unhinged with the pinch of a thumb and forefinger."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
@@ -860,13 +860,13 @@
|
||||
slot_flags = SLOT_MASK
|
||||
var/obj/item/held //Item inside locket.
|
||||
|
||||
/obj/item/clothing/tie/fluff/konaa_hirano/attack_self(mob/user as mob)
|
||||
/obj/item/clothing/accessory/fluff/konaa_hirano/attack_self(mob/user as mob)
|
||||
if(held)
|
||||
user << "You open [src] and [held] falls out."
|
||||
held.loc = get_turf(user)
|
||||
src.held = null
|
||||
|
||||
/obj/item/clothing/tie/fluff/konaa_hirano/attackby(var/obj/item/O as obj, mob/user as mob)
|
||||
/obj/item/clothing/accessory/fluff/konaa_hirano/attackby(var/obj/item/O as obj, mob/user as mob)
|
||||
if(istype(O,/obj/item/weapon/paper))
|
||||
if(held)
|
||||
usr << "[src] already has something inside it."
|
||||
@@ -880,7 +880,7 @@
|
||||
|
||||
////// Medallion - Nasir Khayyam - Jamini
|
||||
|
||||
/obj/item/clothing/tie/fluff/nasir_khayyam_1
|
||||
/obj/item/clothing/accessory/fluff/nasir_khayyam_1
|
||||
name = "medallion"
|
||||
desc = "This silvered medallion bears the symbol of the Hadii Clan of the Tajaran."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
@@ -892,7 +892,7 @@
|
||||
|
||||
////// Medallion - Lin Chang - Roland410
|
||||
|
||||
/obj/item/clothing/tie/fluff/lin_chang_1
|
||||
/obj/item/clothing/accessory/fluff/lin_chang_1
|
||||
name = "shining black medallion"
|
||||
desc = "A shiny black medallion made of something that looks like the Earth's obsidian, but it is harder than anything ever seen yet. On the front there seems to be a standing unathi chiseled in it, on the back the name of Lin Chang with the title of the Assassin Archmage."
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
|
||||
@@ -176,7 +176,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 1320),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 3), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 0, list(ASSIGNMENT_ENGINEER = 60), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 0, list(ASSIGNMENT_ENGINEER = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 3), 1),
|
||||
)
|
||||
|
||||
|
||||
@@ -1,20 +1,13 @@
|
||||
/turf/simulated/wall
|
||||
|
||||
|
||||
datum/event/wallrot
|
||||
severity = 1
|
||||
|
||||
datum/event/wallrot/setup()
|
||||
announceWhen = rand(0, 300)
|
||||
endWhen = announceWhen + 1
|
||||
severity = rand(5, 10)
|
||||
|
||||
datum/event/wallrot/announce()
|
||||
command_alert("Harmful fungi detected on station. Station structures may be contaminated.", "Biohazard Alert")
|
||||
|
||||
datum/event/wallrot/start()
|
||||
spawn()
|
||||
var/turf/center = null
|
||||
var/turf/simulated/wall/center = null
|
||||
|
||||
// 100 attempts
|
||||
for(var/i=0, i<100, i++)
|
||||
@@ -24,14 +17,15 @@ datum/event/wallrot/start()
|
||||
|
||||
if(center)
|
||||
// Make sure at least one piece of wall rots!
|
||||
center:rot()
|
||||
center.rot()
|
||||
|
||||
// Have a chance to rot lots of other walls.
|
||||
var/rotcount = 0
|
||||
var/actual_severity = severity * rand(5, 10)
|
||||
for(var/turf/simulated/wall/W in range(5, center)) if(prob(50))
|
||||
W:rot()
|
||||
W.rot()
|
||||
rotcount++
|
||||
|
||||
// Only rot up to severity walls
|
||||
if(rotcount >= severity)
|
||||
if(rotcount >= actual_severity)
|
||||
break
|
||||
@@ -249,7 +249,7 @@
|
||||
new /obj/item/weapon/storage/toolbox/electrical(C)
|
||||
|
||||
if(prob(25))
|
||||
new /obj/item/weapon/cell(C)
|
||||
new /obj/item/weapon/stock_parts/cell(C)
|
||||
|
||||
if("coffin")
|
||||
new /obj/structure/closet/coffin(src.loc)
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
if(15)
|
||||
new/obj/item/clothing/under/chameleon(src)
|
||||
for(var/i = 0, i < 7, i++)
|
||||
new/obj/item/clothing/tie/horrible(src)
|
||||
new/obj/item/clothing/accessory/horrible(src)
|
||||
if(16)
|
||||
new/obj/item/clothing/under/shorts(src)
|
||||
new/obj/item/clothing/under/shorts/red(src)
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
var/obj/item/weapon/stock_parts/matter_bin/storage
|
||||
var/obj/item/weapon/stock_parts/micro_laser/cutter
|
||||
var/obj/item/weapon/stock_parts/capacitor/cellmount
|
||||
var/obj/item/weapon/cell/cell
|
||||
var/obj/item/weapon/stock_parts/cell/cell
|
||||
|
||||
//Flags
|
||||
var/need_update_field = 0
|
||||
@@ -195,7 +195,7 @@
|
||||
cellmount = W
|
||||
user << "You install \the [W]."
|
||||
return
|
||||
else if(istype(W,/obj/item/weapon/cell))
|
||||
else if(istype(W,/obj/item/weapon/stock_parts/cell))
|
||||
if(cell)
|
||||
user << "The drill already has a cell installed."
|
||||
else
|
||||
|
||||
@@ -814,7 +814,7 @@
|
||||
|
||||
/datum/manufacture/powercell
|
||||
name = "Power Cell"
|
||||
item = /obj/item/weapon/cell
|
||||
item = /obj/item/weapon/stock_parts/cell
|
||||
cost1 = /obj/item/weapon/ore/iron
|
||||
cname1 = "Iron"
|
||||
amount1 = 4
|
||||
|
||||
@@ -130,7 +130,7 @@
|
||||
spawntypes = list(
|
||||
/obj/item/weapon/pickaxe/plasmacutter=1,
|
||||
/obj/machinery/shieldgen=1,
|
||||
/obj/item/weapon/cell/hyper=1
|
||||
/obj/item/weapon/stock_parts/cell/hyper=1
|
||||
)
|
||||
fluffitems = list(
|
||||
/obj/structure/table/reinforced=2,
|
||||
|
||||
@@ -231,6 +231,9 @@ var/const/MAX_ACTIVE_TIME = 400
|
||||
return
|
||||
|
||||
/proc/CanHug(var/mob/M)
|
||||
if(!M || !ismob(M))
|
||||
return 0
|
||||
|
||||
if(M.stat == DEAD)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -67,8 +67,8 @@
|
||||
var/tie_msg
|
||||
if(istype(w_uniform,/obj/item/clothing/under))
|
||||
var/obj/item/clothing/under/U = w_uniform
|
||||
if(U.hastie)
|
||||
tie_msg += " with \icon[U.hastie] \a [U.hastie]"
|
||||
if(U.accessories.len)
|
||||
tie_msg += " with [lowertext(english_list(U.accessories))]"
|
||||
|
||||
if(w_uniform.blood_DNA)
|
||||
msg += "<span class='warning'>[t_He] [t_is] wearing \icon[w_uniform] [w_uniform.gender==PLURAL?"some":"a"] blood-stained [w_uniform.name][tie_msg]!</span>\n"
|
||||
|
||||
@@ -517,7 +517,7 @@
|
||||
<BR><A href='?src=\ref[src];item=pockets'>Empty Both Pockets</A>
|
||||
<BR><BR>[(handcuffed ? text("<A href='?src=\ref[src];item=handcuff'>Handcuffed</A>") : text("<A href='?src=\ref[src];item=handcuff'>Not Handcuffed</A>"))]
|
||||
<BR>[(legcuffed ? text("<A href='?src=\ref[src];item=legcuff'>Legcuffed</A>") : text(""))]
|
||||
[(suit) ? ((suit.hastie) ? text("<BR><A href='?src=\ref[];item=tie'>Remove Accessory</A>", src) : "") :]
|
||||
[(suit) ? ((suit.accessories.len) ? text("<BR><A href='?src=\ref[];item=tie'>Remove Accessory</A>", src) : "") :]
|
||||
[(internal ? text("<BR><A href='?src=\ref[src];item=internal'>Remove Internal</A>") : "")]
|
||||
<BR><A href='?src=\ref[src];item=splints'>Remove Splints</A>
|
||||
<BR><A href='?src=\ref[user];refresh=1'>Refresh</A>
|
||||
@@ -1159,11 +1159,16 @@
|
||||
|
||||
/mob/living/carbon/human/proc/is_lung_ruptured()
|
||||
var/datum/organ/internal/lungs/L = internal_organs_by_name["lungs"]
|
||||
if(!L)
|
||||
return 0
|
||||
|
||||
return L.is_bruised()
|
||||
|
||||
/mob/living/carbon/human/proc/rupture_lung()
|
||||
var/datum/organ/internal/lungs/L = internal_organs_by_name["lungs"]
|
||||
|
||||
if(!L)
|
||||
return 0
|
||||
|
||||
if(!L.is_bruised())
|
||||
src.custom_pain("You feel a stabbing pain in your chest!", 1)
|
||||
L.damage = L.min_bruised_damage
|
||||
|
||||
@@ -101,6 +101,8 @@
|
||||
return has_organ("chest")
|
||||
if(slot_in_backpack)
|
||||
return 1
|
||||
if(slot_tie)
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/u_equip(obj/item/W as obj)
|
||||
if(!W) return 0
|
||||
@@ -337,6 +339,9 @@
|
||||
if(src.get_active_hand() == W)
|
||||
src.u_equip(W)
|
||||
W.loc = src.back
|
||||
if(slot_tie)
|
||||
var/obj/item/clothing/under/uniform = src.w_uniform
|
||||
uniform.attackby(W,src)
|
||||
else
|
||||
src << "<span class='warning'>You are trying to equip this item to an unsupported inventory slot. Report this to a coder!</span>"
|
||||
return
|
||||
@@ -552,15 +557,17 @@
|
||||
message = "\red <B>[source] is trying to take off \a [target.w_uniform] from [target]'s body!</B>"
|
||||
if("tie")
|
||||
var/obj/item/clothing/under/suit = target.w_uniform
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their accessory ([suit.hastie]) removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) accessory ([suit.hastie])</font>")
|
||||
if(istype(suit.hastie, /obj/item/clothing/tie/holobadge) || istype(suit.hastie, /obj/item/clothing/tie/medal))
|
||||
for(var/mob/M in viewers(target, null))
|
||||
M.show_message("\red <B>[source] tears off \the [suit.hastie] from [target]'s suit!</B>" , 1)
|
||||
done()
|
||||
return
|
||||
else
|
||||
message = "\red <B>[source] is trying to take off \a [suit.hastie] from [target]'s suit!</B>"
|
||||
if(suit.accessories.len)
|
||||
var/obj/item/clothing/accessory/A = suit.accessories[1]
|
||||
target.attack_log += "\[[time_stamp()]\] <font color='orange'>Has had their accessory ([A]) removed by [source.name] ([source.ckey])</font>"
|
||||
source.attack_log += "\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) accessory ([A])</font>"
|
||||
if(istype(A, /obj/item/clothing/accessory/holobadge) || istype(A, /obj/item/clothing/accessory/medal))
|
||||
for(var/mob/M in viewers(target, null))
|
||||
M.show_message("\red <B>[source] tears off \the [A] from [target]'s [suit]!</B>" , 1)
|
||||
done()
|
||||
return
|
||||
else
|
||||
message = "\red <B>[source] is trying to take off \a [A] from [target]'s [suit]!</B>"
|
||||
if("s_store")
|
||||
target.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has had their suit storage item ([target.s_store]) removed by [source.name] ([source.ckey])</font>")
|
||||
source.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to remove [target.name]'s ([target.ckey]) suit storage item ([target.s_store])</font>")
|
||||
@@ -701,15 +708,19 @@ It can still be worn/put on as normal.
|
||||
strip_item = target.wear_suit
|
||||
if("tie")
|
||||
var/obj/item/clothing/under/suit = target.w_uniform
|
||||
var/obj/item/clothing/tie/tie = suit.hastie
|
||||
if(tie)
|
||||
if (istype(tie,/obj/item/clothing/tie/storage))
|
||||
var/obj/item/clothing/tie/storage/W = tie
|
||||
//var/obj/item/clothing/accessory/tie = suit.hastie
|
||||
/*if(tie)
|
||||
if (istype(tie,/obj/item/clothing/accessory/storage))
|
||||
var/obj/item/clothing/accessory/storage/W = tie
|
||||
if (W.hold)
|
||||
W.hold.close(usr)
|
||||
usr.put_in_hands(tie)
|
||||
suit.hastie = null
|
||||
target.update_inv_w_uniform()
|
||||
suit.hastie = null*/
|
||||
if(suit && suit.accessories.len)
|
||||
var/obj/item/clothing/accessory/A = suit.accessories[1]
|
||||
A.on_removed(usr)
|
||||
suit.accessories -= A
|
||||
target.update_inv_w_uniform()
|
||||
if("id")
|
||||
slot_to_process = slot_wear_id
|
||||
if (target.wear_id)
|
||||
@@ -832,8 +843,8 @@ It can still be worn/put on as normal.
|
||||
if(slot_r_hand)
|
||||
return r_hand
|
||||
return null
|
||||
|
||||
/mob/living/carbon/human/get_item_by_slot(slot_id)
|
||||
|
||||
/mob/living/carbon/get_item_by_slot(slot_id)
|
||||
switch(slot_id)
|
||||
if(slot_back)
|
||||
return back
|
||||
@@ -849,4 +860,45 @@ It can still be worn/put on as normal.
|
||||
return r_hand
|
||||
return null
|
||||
|
||||
|
||||
// Return the item currently in the slot ID
|
||||
/mob/living/carbon/human/get_item_by_slot(slot_id)
|
||||
switch(slot_id)
|
||||
if(slot_back)
|
||||
return back
|
||||
if(slot_wear_mask)
|
||||
return wear_mask
|
||||
if(slot_handcuffed)
|
||||
return handcuffed
|
||||
if(slot_legcuffed)
|
||||
return legcuffed
|
||||
if(slot_l_hand)
|
||||
return l_hand
|
||||
if(slot_r_hand)
|
||||
return r_hand
|
||||
if(slot_belt)
|
||||
return belt
|
||||
if(slot_wear_id)
|
||||
return wear_id
|
||||
if(slot_l_ear)
|
||||
return l_ear
|
||||
if(slot_r_ear)
|
||||
return r_ear
|
||||
if(slot_glasses)
|
||||
return glasses
|
||||
if(slot_gloves)
|
||||
return gloves
|
||||
if(slot_head)
|
||||
return head
|
||||
if(slot_shoes)
|
||||
return shoes
|
||||
if(slot_wear_suit)
|
||||
return wear_suit
|
||||
if(slot_w_uniform)
|
||||
return w_uniform
|
||||
if(slot_l_store)
|
||||
return l_store
|
||||
if(slot_r_store)
|
||||
return r_store
|
||||
if(slot_s_store)
|
||||
return s_store
|
||||
return null
|
||||
|
||||
@@ -614,10 +614,11 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
else
|
||||
standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "uniformblood")
|
||||
|
||||
if(w_uniform:hastie) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE.
|
||||
var/tie_color = w_uniform:hastie._color
|
||||
if(!tie_color) tie_color = w_uniform:hastie.icon_state
|
||||
standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]")
|
||||
if(w_uniform:accessories.len) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE.
|
||||
for(var/obj/item/clothing/accessory/A in w_uniform:accessories)
|
||||
var/tie_color = A._color
|
||||
if(!tie_color) tie_color = A.icon_state
|
||||
standing.overlays += image("icon" = 'icons/mob/ties.dmi', "icon_state" = "[tie_color]")
|
||||
|
||||
overlays_standing[UNIFORM_LAYER] = standing
|
||||
else
|
||||
@@ -867,7 +868,7 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
if(update_icons) update_icons()
|
||||
|
||||
/mob/living/carbon/human/update_inv_wear_mask(var/update_icons=1)
|
||||
if( wear_mask && ( istype(wear_mask, /obj/item/clothing/mask) || istype(wear_mask, /obj/item/clothing/tie) ) )
|
||||
if( wear_mask && ( istype(wear_mask, /obj/item/clothing/mask) || istype(wear_mask, /obj/item/clothing/accessory) ) )
|
||||
wear_mask.screen_loc = ui_mask //TODO
|
||||
|
||||
var/image/standing
|
||||
|
||||
@@ -216,7 +216,7 @@
|
||||
L += get_contents(S)
|
||||
for(var/obj/item/clothing/suit/storage/S in src.contents)//Check for labcoats and jackets
|
||||
L += get_contents(S)
|
||||
for(var/obj/item/clothing/tie/storage/S in src.contents)//Check for holsters
|
||||
for(var/obj/item/clothing/accessory/storage/S in src.contents)//Check for holsters
|
||||
L += get_contents(S)
|
||||
for(var/obj/item/weapon/gift/G in src.contents) //Check for gift-wrapped items
|
||||
L += G.gift
|
||||
|
||||
@@ -52,6 +52,7 @@ var/list/ai_list = list()
|
||||
|
||||
var/mob/living/silicon/ai/parent = null
|
||||
|
||||
var/apc_override = 0 //hack for letting the AI use its APC even when visionless
|
||||
var/camera_light_on = 0 //Defines if the AI toggled the light on the camera it's looking through.
|
||||
var/datum/trackable/track = null
|
||||
var/can_shunt = 1
|
||||
|
||||
@@ -166,7 +166,9 @@
|
||||
src << "Receiving control information from APC."
|
||||
sleep(2)
|
||||
//bring up APC dialog
|
||||
apc_override = 1
|
||||
theAPC.attack_ai(src)
|
||||
apc_override = 0
|
||||
src:aiRestorePowerRoutine = 3
|
||||
src << "Here are your current laws:"
|
||||
src.show_laws()
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
if (src.client)
|
||||
src.client.screen -= src.contents
|
||||
for(var/obj/I in src.contents)
|
||||
//if(I && !(istype(I,/obj/item/weapon/cell) || istype(I,/obj/item/device/radio) || istype(I,/obj/machinery/camera) || istype(I,/obj/item/device/mmi)))
|
||||
//if(I && !(istype(I,/obj/item/weapon/stock_parts/cell) || istype(I,/obj/item/device/radio) || istype(I,/obj/machinery/camera) || istype(I,/obj/item/device/mmi)))
|
||||
if(I)
|
||||
// Make sure we're not showing any of our internal components, as that would be lewd.
|
||||
// This way of doing it ensures that shit we pick up will be visible, wheras shit inside of us isn't.
|
||||
|
||||
@@ -40,7 +40,7 @@ They can only use one tool at a time, they can't choose modules, and they have 1
|
||||
updateicon()
|
||||
|
||||
if(!cell)
|
||||
cell = new /obj/item/weapon/cell(src)
|
||||
cell = new /obj/item/weapon/stock_parts/cell(src)
|
||||
cell.maxcharge = 7500
|
||||
cell.charge = 7500
|
||||
..()
|
||||
@@ -190,7 +190,7 @@ They can only use one tool at a time, they can't choose modules, and they have 1
|
||||
opened = 1
|
||||
updateicon()
|
||||
|
||||
else if (istype(W, /obj/item/weapon/cell) && opened) // trying to put a cell inside
|
||||
else if (istype(W, /obj/item/weapon/stock_parts/cell) && opened) // trying to put a cell inside
|
||||
if(wiresexposed)
|
||||
user << "Close the panel first."
|
||||
else if(cell)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
//Has a list of items that it can hold.
|
||||
var/list/can_hold = list(
|
||||
/obj/item/weapon/cell,
|
||||
/obj/item/weapon/stock_parts/cell,
|
||||
/obj/item/weapon/firealarm_electronics,
|
||||
/obj/item/weapon/airalarm_electronics,
|
||||
/obj/item/weapon/airlock_electronics,
|
||||
|
||||
@@ -309,7 +309,7 @@
|
||||
if (src.client)
|
||||
src.client.screen -= src.contents
|
||||
for(var/obj/I in src.contents)
|
||||
if(I && !(istype(I,/obj/item/weapon/cell) || istype(I,/obj/item/device/radio) || istype(I,/obj/machinery/camera) || istype(I,/obj/item/device/mmi)))
|
||||
if(I && !(istype(I,/obj/item/weapon/stock_parts/cell) || istype(I,/obj/item/device/radio) || istype(I,/obj/machinery/camera) || istype(I,/obj/item/device/mmi)))
|
||||
src.client.screen += I
|
||||
if(src.module_state_1)
|
||||
src.module_state_1:screen_loc = ui_inv1
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
var/obj/item/device/radio/borg/radio = null
|
||||
var/mob/living/silicon/ai/connected_ai = null
|
||||
var/obj/item/weapon/cell/cell = null
|
||||
var/obj/item/weapon/stock_parts/cell/cell = null
|
||||
var/obj/machinery/camera/camera = null
|
||||
|
||||
// Components are basically robot organs.
|
||||
@@ -95,7 +95,7 @@
|
||||
mmi.icon_state="posibrain-occupied"
|
||||
if(syndie)
|
||||
if(!cell)
|
||||
cell = new /obj/item/weapon/cell(src)
|
||||
cell = new /obj/item/weapon/stock_parts/cell(src)
|
||||
laws = new /datum/ai_laws/antimov()
|
||||
lawupdate = 0
|
||||
scrambledcodes = 1
|
||||
@@ -124,7 +124,7 @@
|
||||
C.wrapped = new C.external_type
|
||||
|
||||
if(!cell)
|
||||
cell = new /obj/item/weapon/cell(src)
|
||||
cell = new /obj/item/weapon/stock_parts/cell(src)
|
||||
cell.maxcharge = 7500
|
||||
cell.charge = 7500
|
||||
|
||||
@@ -752,7 +752,7 @@
|
||||
opened = 1
|
||||
updateicon()
|
||||
|
||||
else if (istype(W, /obj/item/weapon/cell) && opened) // trying to put a cell inside
|
||||
else if (istype(W, /obj/item/weapon/stock_parts/cell) && opened) // trying to put a cell inside
|
||||
var/datum/robot_component/C = components["power cell"]
|
||||
if(wiresexposed)
|
||||
user << "Close the panel first."
|
||||
|
||||
@@ -222,7 +222,7 @@
|
||||
src.modules += new /obj/item/device/flash/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/melee/baton/robot(src)
|
||||
src.modules += new /obj/item/weapon/gun/energy/taser/cyborg(src)
|
||||
src.modules += new /obj/item/weapon/gun/energy/disabler/cyborg(src)
|
||||
src.modules += new /obj/item/taperoll/police(src)
|
||||
src.modules += new /obj/item/device/taperecorder(src)
|
||||
src.emag = new /obj/item/weapon/gun/energy/laser/cyborg(src)
|
||||
@@ -343,7 +343,7 @@
|
||||
src.modules += new /obj/item/weapon/card/emag(src)
|
||||
src.modules += new /obj/item/weapon/tank/jetpack/carbondioxide(src)
|
||||
src.modules += new /obj/item/weapon/crowbar(src)
|
||||
src.modules += new /obj/item/weapon/pinpointer/operative(src)
|
||||
src.modules += new /obj/item/weapon/pinpointer/operative(src)
|
||||
src.emag = null
|
||||
return
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
var/obj/item/device/radio/borg/radio = null
|
||||
var/mob/living/silicon/ai/connected_ai = null
|
||||
var/obj/item/weapon/cell/cell = null
|
||||
var/obj/item/weapon/stock_parts/cell/cell = null
|
||||
var/obj/machinery/camera/camera = null
|
||||
var/obj/item/device/mmi/mmi = null
|
||||
var/list/req_access = list(access_robotics) //Access needed to pop out the brain.
|
||||
|
||||
@@ -193,6 +193,7 @@ var/list/slot_equipment_priority = list( \
|
||||
slot_glasses,\
|
||||
slot_belt,\
|
||||
slot_s_store,\
|
||||
slot_tie,\
|
||||
slot_l_store,\
|
||||
slot_r_store\
|
||||
)
|
||||
|
||||
@@ -529,7 +529,8 @@
|
||||
if(client.prefs.disabilities & DISABILITY_FLAG_DEAF)
|
||||
new_character.dna.SetSEState(DEAFBLOCK,1,1)
|
||||
new_character.sdisabilities |= DEAF
|
||||
|
||||
|
||||
domutcheck(new_character)
|
||||
new_character.dna.UpdateSE()
|
||||
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
var/spooky=0
|
||||
var/area/area
|
||||
var/areastring = null
|
||||
var/obj/item/weapon/cell/cell
|
||||
var/obj/item/weapon/stock_parts/cell/cell
|
||||
var/start_charge = 90 // initial cell charge %
|
||||
var/cell_type = 2500 // 0=no cell, 1=regular, 2=high-cap (x5) <- old, now it's just 0=no cell, otherwise dictate cellcapacity by changing this value. 1 used to be 1000, 2 was 2500
|
||||
var/opened = 0 //0=closed, 1=opened, 2=cover removed
|
||||
@@ -142,7 +142,7 @@
|
||||
has_electronics = 2 //installed and secured
|
||||
// is starting with a power cell installed, create it and set its charge level
|
||||
if(cell_type)
|
||||
src.cell = new/obj/item/weapon/cell(src)
|
||||
src.cell = new/obj/item/weapon/stock_parts/cell(src)
|
||||
cell.maxcharge = cell_type // cell_type is maximum charge (old default was 1000 or 2500 (values one and two respectively)
|
||||
cell.charge = start_charge * cell.maxcharge / 100.0 // (convert percentage to actual value)
|
||||
|
||||
@@ -399,7 +399,7 @@
|
||||
else
|
||||
opened = 1
|
||||
update_icon()
|
||||
else if (istype(W, /obj/item/weapon/cell) && opened) // trying to put a cell inside
|
||||
else if (istype(W, /obj/item/weapon/stock_parts/cell) && opened) // trying to put a cell inside
|
||||
if(cell)
|
||||
user << "There is a power cell already installed."
|
||||
return
|
||||
@@ -805,6 +805,8 @@
|
||||
if (user.stat && !isobserver(user))
|
||||
user << "\red You must be conscious to use this [src]!"
|
||||
return 0
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return 0
|
||||
if(!user.client)
|
||||
return 0
|
||||
if ( ! (istype(user, /mob/living/carbon/human) || \
|
||||
@@ -849,36 +851,63 @@
|
||||
user << "\red You momentarily forget how to use [src]."
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/obj/machinery/power/apc/proc/is_authenticated(mob/user as mob)
|
||||
if(isAI(user) || isrobot(user))
|
||||
return 1
|
||||
else
|
||||
return !locked
|
||||
|
||||
/obj/machinery/power/apc/Topic(href, href_list, var/usingUI = 1)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(!can_use(usr, 1))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
if (href_list["lock"])
|
||||
if(!is_authenticated(usr))
|
||||
return
|
||||
|
||||
coverlocked = !coverlocked
|
||||
|
||||
else if (href_list["breaker"])
|
||||
if(!is_authenticated(usr))
|
||||
return
|
||||
|
||||
toggle_breaker()
|
||||
|
||||
else if (href_list["cmode"])
|
||||
if(!is_authenticated(usr))
|
||||
return
|
||||
|
||||
chargemode = !chargemode
|
||||
if(!chargemode)
|
||||
charging = 0
|
||||
update_icon()
|
||||
|
||||
else if (href_list["eqp"])
|
||||
if(!is_authenticated(usr))
|
||||
return
|
||||
|
||||
var/val = text2num(href_list["eqp"])
|
||||
equipment = setsubsystem(val)
|
||||
update_icon()
|
||||
update()
|
||||
|
||||
else if (href_list["lgt"])
|
||||
if(!is_authenticated(usr))
|
||||
return
|
||||
|
||||
var/val = text2num(href_list["lgt"])
|
||||
lighting = setsubsystem(val)
|
||||
update_icon()
|
||||
update()
|
||||
|
||||
else if (href_list["env"])
|
||||
if(!is_authenticated(usr))
|
||||
return
|
||||
|
||||
var/val = text2num(href_list["env"])
|
||||
environ = setsubsystem(val)
|
||||
update_icon()
|
||||
@@ -893,7 +922,7 @@
|
||||
return 0
|
||||
|
||||
else if (href_list["overload"])
|
||||
if(istype(usr, /mob/living/silicon))
|
||||
if(istype(usr, /mob/living/silicon) && !aidisabled)
|
||||
src.overload_lighting()
|
||||
|
||||
else if (href_list["malfhack"])
|
||||
@@ -931,13 +960,13 @@
|
||||
|
||||
else if (href_list["toggleaccess"])
|
||||
if(istype(usr, /mob/living/silicon))
|
||||
if(emagged || (stat & (BROKEN|MAINT)))
|
||||
if(emagged || aidisabled || (stat & (BROKEN|MAINT)))
|
||||
usr << "The APC does not respond to the command."
|
||||
else
|
||||
locked = !locked
|
||||
update_icon()
|
||||
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/power/apc/proc/toggle_breaker()
|
||||
operating = !operating
|
||||
|
||||
+15
-15
@@ -1,16 +1,16 @@
|
||||
// the power cell
|
||||
// charge from 0 to 100%
|
||||
// fits in APC to provide backup power
|
||||
/obj/item/weapon/cell/var/image/overlay_image
|
||||
/obj/item/weapon/stock_parts/cell/var/image/overlay_image
|
||||
|
||||
/obj/item/weapon/cell/New()
|
||||
/obj/item/weapon/stock_parts/cell/New()
|
||||
..()
|
||||
charge = maxcharge
|
||||
|
||||
spawn(5)
|
||||
updateicon()
|
||||
|
||||
/obj/item/weapon/cell/proc/updateicon()
|
||||
/obj/item/weapon/stock_parts/cell/proc/updateicon()
|
||||
if(isnull(src.overlay_image))
|
||||
src.overlay_image = image('icons/obj/power.dmi')
|
||||
overlays.Cut()
|
||||
@@ -24,11 +24,11 @@
|
||||
src.overlay_image.icon_state = "cell-o1"
|
||||
overlays += src.overlay_image
|
||||
|
||||
/obj/item/weapon/cell/proc/percent() // return % charge of cell
|
||||
/obj/item/weapon/stock_parts/cell/proc/percent() // return % charge of cell
|
||||
return 100.0*charge/maxcharge
|
||||
|
||||
// use power from a cell
|
||||
/obj/item/weapon/cell/proc/use(var/amount)
|
||||
/obj/item/weapon/stock_parts/cell/proc/use(var/amount)
|
||||
if(rigged && amount > 0)
|
||||
explode()
|
||||
return 0
|
||||
@@ -38,7 +38,7 @@
|
||||
return 1
|
||||
|
||||
// recharge the cell
|
||||
/obj/item/weapon/cell/proc/give(var/amount)
|
||||
/obj/item/weapon/stock_parts/cell/proc/give(var/amount)
|
||||
if(rigged && amount > 0)
|
||||
explode()
|
||||
return 0
|
||||
@@ -55,7 +55,7 @@
|
||||
return power_used
|
||||
|
||||
|
||||
/obj/item/weapon/cell/examine()
|
||||
/obj/item/weapon/stock_parts/cell/examine()
|
||||
set src in view(1)
|
||||
if(usr /*&& !usr.stat*/)
|
||||
if(maxcharge <= 2500)
|
||||
@@ -65,7 +65,7 @@
|
||||
if(crit_fail)
|
||||
usr << "\red This power cell seems to be faulty."
|
||||
|
||||
/obj/item/weapon/cell/attack_self(mob/user as mob)
|
||||
/obj/item/weapon/stock_parts/cell/attack_self(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
if(ishuman(user))
|
||||
@@ -76,7 +76,7 @@
|
||||
SNG.drain("CELL",src,H.wear_suit)
|
||||
return
|
||||
|
||||
/obj/item/weapon/cell/attackby(obj/item/W, mob/user)
|
||||
/obj/item/weapon/stock_parts/cell/attackby(obj/item/W, mob/user)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/reagent_containers/syringe))
|
||||
var/obj/item/weapon/reagent_containers/syringe/S = W
|
||||
@@ -93,7 +93,7 @@
|
||||
S.reagents.clear_reagents()
|
||||
|
||||
|
||||
/obj/item/weapon/cell/proc/explode()
|
||||
/obj/item/weapon/stock_parts/cell/proc/explode()
|
||||
var/turf/T = get_turf(src.loc)
|
||||
/*
|
||||
* 1000-cell explosion(T, -1, 0, 1, 1)
|
||||
@@ -121,13 +121,13 @@
|
||||
spawn(1)
|
||||
del(src)
|
||||
|
||||
/obj/item/weapon/cell/proc/corrupt()
|
||||
/obj/item/weapon/stock_parts/cell/proc/corrupt()
|
||||
charge /= 2
|
||||
maxcharge /= 2
|
||||
if (prob(10))
|
||||
rigged = 1 //broken batterys are dangerous
|
||||
|
||||
/obj/item/weapon/cell/emp_act(severity)
|
||||
/obj/item/weapon/stock_parts/cell/emp_act(severity)
|
||||
charge -= 1000 / severity
|
||||
if (charge < 0)
|
||||
charge = 0
|
||||
@@ -135,7 +135,7 @@
|
||||
reliability -= 10 / severity
|
||||
..()
|
||||
|
||||
/obj/item/weapon/cell/ex_act(severity)
|
||||
/obj/item/weapon/stock_parts/cell/ex_act(severity)
|
||||
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
@@ -155,10 +155,10 @@
|
||||
corrupt()
|
||||
return
|
||||
|
||||
/obj/item/weapon/cell/blob_act()
|
||||
/obj/item/weapon/stock_parts/cell/blob_act()
|
||||
ex_act(1)
|
||||
|
||||
/obj/item/weapon/cell/proc/get_electrocute_damage()
|
||||
/obj/item/weapon/stock_parts/cell/proc/get_electrocute_damage()
|
||||
switch (charge)
|
||||
/* if (9000 to INFINITY)
|
||||
return min(rand(90,150),rand(90,150))
|
||||
|
||||
@@ -475,11 +475,11 @@
|
||||
power_source = Cable.powernet
|
||||
|
||||
var/datum/powernet/PN
|
||||
var/obj/item/weapon/cell/cell
|
||||
var/obj/item/weapon/stock_parts/cell/cell
|
||||
|
||||
if(istype(power_source,/datum/powernet))
|
||||
PN = power_source
|
||||
else if(istype(power_source,/obj/item/weapon/cell))
|
||||
else if(istype(power_source,/obj/item/weapon/stock_parts/cell))
|
||||
cell = power_source
|
||||
else if(istype(power_source,/obj/machinery/power/apc))
|
||||
var/obj/machinery/power/apc/apc = power_source
|
||||
@@ -514,7 +514,7 @@
|
||||
else if (istype(power_source,/datum/powernet))
|
||||
var/drained_power = drained_energy/CELLRATE //convert from "joules" to "watts"
|
||||
PN.newload+=drained_power
|
||||
else if (istype(power_source, /obj/item/weapon/cell))
|
||||
else if (istype(power_source, /obj/item/weapon/stock_parts/cell))
|
||||
cell.use(drained_energy)
|
||||
return drained_energy
|
||||
|
||||
|
||||
@@ -33,11 +33,11 @@
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/smes(null)
|
||||
component_parts += new /obj/item/weapon/cell/high(null)
|
||||
component_parts += new /obj/item/weapon/cell/high(null)
|
||||
component_parts += new /obj/item/weapon/cell/high(null)
|
||||
component_parts += new /obj/item/weapon/cell/high(null)
|
||||
component_parts += new /obj/item/weapon/cell/high(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/cell/high(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/cell/high(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/cell/high(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/cell/high(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/cell/high(null)
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(null)
|
||||
component_parts += new /obj/item/stack/cable_coil(null, 5)
|
||||
RefreshParts()
|
||||
@@ -68,7 +68,7 @@
|
||||
IO += CP.rating
|
||||
input_level_max = 200000 * IO
|
||||
output_level_max = 200000 * IO
|
||||
for(var/obj/item/weapon/cell/PC in component_parts)
|
||||
for(var/obj/item/weapon/stock_parts/cell/PC in component_parts)
|
||||
C += PC.maxcharge
|
||||
capacity = C / (15000) * 1e6
|
||||
|
||||
|
||||
@@ -292,6 +292,7 @@
|
||||
A.loc = src
|
||||
update_icon()
|
||||
update_gunlight(user)
|
||||
verbs += /obj/item/weapon/gun/proc/toggle_gunlight
|
||||
if(istype(A, /obj/item/weapon/screwdriver))
|
||||
if(F)
|
||||
if(user.l_hand != src && user.r_hand != src)
|
||||
@@ -304,13 +305,18 @@
|
||||
update_gunlight(user)
|
||||
S.update_brightness(user)
|
||||
update_icon()
|
||||
verbs -= /obj/item/weapon/gun/proc/toggle_gunlight
|
||||
..()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/verb/toggle_gunlight()
|
||||
/obj/item/weapon/gun/proc/toggle_gunlight()
|
||||
set name = "Toggle Gunlight"
|
||||
set category = "Object"
|
||||
set desc = "Click to toggle your weapon's attached flashlight."
|
||||
|
||||
if(!F)
|
||||
return
|
||||
|
||||
var/mob/living/carbon/human/user = usr
|
||||
if(!isturf(user.loc))
|
||||
user << "You cannot turn the light on while in this [user.loc]."
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
|
||||
force = 10
|
||||
projectile_type = "/obj/item/projectile/energy/sonic"
|
||||
cell_type = "/obj/item/weapon/cell/super"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/super"
|
||||
fire_delay = 40
|
||||
fire_sound = 'sound/effects/basscannon.ogg'
|
||||
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
desc = "A basic energy-based gun."
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
|
||||
var/obj/item/weapon/cell/power_supply //What type of power cell this uses
|
||||
var/obj/item/weapon/stock_parts/cell/power_supply //What type of power cell this uses
|
||||
var/charge_cost = 1000 //How much energy is needed to fire.
|
||||
var/cell_type = "/obj/item/weapon/cell"
|
||||
var/cell_type = "/obj/item/weapon/stock_parts/cell"
|
||||
var/projectile_type = "/obj/item/projectile/beam"
|
||||
var/modifystate
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
/*
|
||||
attackby(obj/item/weapon/W, mob/user)
|
||||
if(istype(W, /obj/item/weapon/cell))
|
||||
if(istype(W, /obj/item/weapon/stock_parts/cell))
|
||||
if(!power_supply)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "advtaser"
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
icon_override = 'icons/mob/in-hand/guns.dmi'
|
||||
cell_type = "/obj/item/weapon/cell"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell"
|
||||
origin_tech = null
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
projectile_type = "/obj/item/projectile/energy/electrode"
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
fire_sound = 'sound/weapons/pulse.ogg'
|
||||
charge_cost = 200
|
||||
projectile_type = "/obj/item/projectile/beam/pulse"
|
||||
cell_type = "/obj/item/weapon/cell/super"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/super"
|
||||
var/mode = 2
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = 4.0
|
||||
@@ -52,7 +52,7 @@
|
||||
/obj/item/weapon/gun/energy/pulse_rifle/destroyer
|
||||
name = "pulse destroyer"
|
||||
desc = "A heavy-duty, pulse-based energy weapon."
|
||||
cell_type = "/obj/item/weapon/cell/infinite"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/infinite"
|
||||
|
||||
attack_self(mob/living/user as mob)
|
||||
user << "\red [src.name] has three settings, and they are all DESTROY."
|
||||
@@ -63,7 +63,7 @@
|
||||
name = "m1911-P"
|
||||
desc = "It's not the size of the gun, it's the size of the hole it puts through people."
|
||||
icon_state = "m1911-p"
|
||||
cell_type = "/obj/item/weapon/cell/infinite"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/infinite"
|
||||
w_class = 3.0
|
||||
slot_flags = SLOT_BELT
|
||||
isHandgun()
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
item_state = "c20r"
|
||||
w_class = 4
|
||||
projectile_type = "/obj/item/projectile/meteor"
|
||||
cell_type = "/obj/item/weapon/cell/potato"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/potato"
|
||||
clumsy_check = 0 //Admin spawn only, might as well let clowns use it.
|
||||
var/charge_tick = 0
|
||||
var/recharge_time = 5 //Time it takes for shots to recharge (in ticks)
|
||||
@@ -229,7 +229,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
projectile_type = "/obj/item/projectile/kinetic"
|
||||
fire_sound = 'sound/weapons/Kenetic_accel.ogg'
|
||||
charge_cost = 5000
|
||||
cell_type = "/obj/item/weapon/cell/crap"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/crap"
|
||||
var/overheat = 0
|
||||
var/recent_reload = 1
|
||||
|
||||
@@ -281,9 +281,41 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
icon_state = "disabler"
|
||||
item_state = null
|
||||
projectile_type = "/obj/item/projectile/beam/disabler"
|
||||
cell_type = "/obj/item/weapon/cell"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell"
|
||||
charge_cost = 500
|
||||
|
||||
/obj/item/weapon/gun/energy/disabler/cyborg
|
||||
name = "cyborg disabler"
|
||||
desc = "An integrated disabler that draws from a cyborg's power cell. This weapon contains a limiter to prevent the cyborg's power cell from overheating."
|
||||
var/charge_tick = 0
|
||||
var/recharge_time = 2.5
|
||||
|
||||
/obj/item/weapon/gun/energy/disabler/cyborg/New()
|
||||
..()
|
||||
processing_objects.Add(src)
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/disabler/cyborg/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/energy/disabler/cyborg/process() //Every [recharge_time] ticks, recharge a shot for the cyborg
|
||||
if(power_supply.charge == power_supply.maxcharge)
|
||||
return 0
|
||||
charge_tick++
|
||||
if(charge_tick < recharge_time)
|
||||
return 0
|
||||
charge_tick = 0
|
||||
|
||||
if(!power_supply) return 0 //sanity
|
||||
if(isrobot(src.loc))
|
||||
var/mob/living/silicon/robot/R = src.loc
|
||||
if(R && R.cell)
|
||||
if(R.cell.use(charge_cost)) //Take power from the borg...
|
||||
power_supply.give(charge_cost) //... to recharge the shot
|
||||
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
|
||||
/* 3d printer 'pseudo guns' for borgs */
|
||||
@@ -294,7 +326,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
|
||||
icon_state = "l6closed0"
|
||||
icon = 'icons/obj/gun.dmi'
|
||||
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
|
||||
cell_type = "/obj/item/weapon/cell/secborg"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/secborg"
|
||||
projectile_type = "/obj/item/projectile/bullet/midbullet3"
|
||||
charge_cost = 300 //Yeah, let's NOT give them a 300 round clip that recharges, 20 is more reasonable and will actually hurt the borg's battery for overuse.
|
||||
var/charge_tick = 0
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
item_state = null //so the human update icon uses the icon_state instead.
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
projectile_type = "/obj/item/projectile/energy/electrode"
|
||||
cell_type = "/obj/item/weapon/cell/crap"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/crap"
|
||||
|
||||
/obj/item/weapon/gun/energy/taser/cyborg
|
||||
name = "taser gun"
|
||||
@@ -14,7 +14,7 @@
|
||||
icon_state = "taser"
|
||||
fire_sound = 'sound/weapons/Taser.ogg'
|
||||
projectile_type = "/obj/item/projectile/energy/electrode"
|
||||
cell_type = "/obj/item/weapon/cell/secborg"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/secborg"
|
||||
var/charge_tick = 0
|
||||
var/recharge_time = 10 //Time it takes for shots to recharge (in ticks)
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
fire_sound = "sound/weapons/gunshot.ogg"
|
||||
origin_tech = "combat=3;materials=3;powerstorage=2"
|
||||
projectile_type = "/obj/item/projectile/energy/electrode"
|
||||
cell_type = "/obj/item/weapon/cell"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell"
|
||||
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
silenced = 1
|
||||
fire_sound = 'sound/weapons/Genhit.ogg'
|
||||
projectile_type = "/obj/item/projectile/energy/bolt"
|
||||
cell_type = "/obj/item/weapon/cell/crap"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/crap"
|
||||
var/charge_tick = 0
|
||||
|
||||
/obj/item/weapon/gun/energy/crossbow/New()
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
origin_tech = "combat=3;materials=4;powerstorage=3;magnets=2"
|
||||
|
||||
projectile_type = "/obj/item/projectile/temp"
|
||||
cell_type = "/obj/item/weapon/cell/crap"
|
||||
cell_type = "/obj/item/weapon/stock_parts/cell/crap"
|
||||
|
||||
|
||||
New()
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
var/tension = 0 // Current draw on the bow.
|
||||
var/max_tension = 5 // Highest possible tension.
|
||||
var/release_speed = 5 // Speed per unit of tension.
|
||||
var/obj/item/weapon/cell/cell = null // Used for firing superheated rods.
|
||||
var/obj/item/weapon/stock_parts/cell/cell = null // Used for firing superheated rods.
|
||||
var/current_user // Used to check if the crossbow has changed hands since being drawn.
|
||||
|
||||
/obj/item/weapon/gun/launcher/crossbow/emp_act(severity)
|
||||
@@ -158,7 +158,7 @@
|
||||
superheat_rod(user)
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/cell))
|
||||
if(istype(W, /obj/item/weapon/stock_parts/cell))
|
||||
if(!cell)
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
@@ -213,7 +213,7 @@
|
||||
user.visible_message("\The [src] only takes baguettes.")
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/cell))
|
||||
if(istype(W, /obj/item/weapon/stock_parts/cell))
|
||||
user.visible_message("The [src] is too simple be adapted with a cell.")
|
||||
return
|
||||
|
||||
|
||||
@@ -398,7 +398,7 @@ datum
|
||||
return 1
|
||||
|
||||
check_gofast(var/mob/M)
|
||||
if(istype(M, /mob))
|
||||
if(M && istype(M, /mob))
|
||||
if(M.reagents.has_reagent("hyperzine")||M.reagents.has_reagent("nuka_cola"))
|
||||
return 1
|
||||
else
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
options[/obj/item/weapon/stock_parts/console_screen] = "Replace the console screen to fix it."
|
||||
options[/obj/item/weapon/stock_parts/manipulator/pico] = "Upgrade to a pico manipulator to fix it."
|
||||
options[/obj/item/weapon/stock_parts/matter_bin/super] = "Give it a super matter bin to fix it."
|
||||
options[/obj/item/weapon/cell/super] = "Replace the reagent synthesizer with a super capacity cell to fix it."
|
||||
options[/obj/item/weapon/stock_parts/cell/super] = "Replace the reagent synthesizer with a super capacity cell to fix it."
|
||||
options[/obj/item/device/mass_spectrometer/adv] = "Replace the reagent scanner with an advanced mass spectrometer to fix it"
|
||||
options[/obj/item/weapon/stock_parts/micro_laser/high] = "Repair the reagent synthesizer with an high-power micro-laser to fix it"
|
||||
options[/obj/item/device/reagent_scanner/adv] = "Replace the reagent scanner with an advanced reagent scanner to fix it"
|
||||
@@ -290,7 +290,7 @@
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
|
||||
component_parts += new /obj/item/weapon/cell/super(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/cell/super(src)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/chem_dispenser/constructable/RefreshParts()
|
||||
@@ -303,7 +303,7 @@
|
||||
max_energy = temp_energy * 5 //max energy = (bin1.rating + bin2.rating - 1) * 5, 5 on lowest 25 on highest
|
||||
for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
|
||||
time += C.rating
|
||||
for(var/obj/item/weapon/cell/P in component_parts)
|
||||
for(var/obj/item/weapon/stock_parts/cell/P in component_parts)
|
||||
time += round(P.maxcharge, 10000) / 10000
|
||||
recharge_delay /= time/2 //delay between recharges, double the usual time on lowest 50% less than usual on highest
|
||||
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
|
||||
|
||||
@@ -2562,15 +2562,16 @@ datum
|
||||
return
|
||||
|
||||
Del()
|
||||
if (istype(holder.my_atom,/mob/living))
|
||||
var/mob/living/M as mob
|
||||
var/to_remove = 0
|
||||
if (holder.has_reagent("anti_toxin"))
|
||||
to_remove = min(holder.get_reagent_amount("anti_toxin"),data)
|
||||
holder.remove_reagent("anti_toxin", to_remove, 0)
|
||||
data -= to_remove
|
||||
if(M)
|
||||
M.adjustToxLoss((data-1)*rand(2,4))
|
||||
if(holder)
|
||||
if (istype(holder.my_atom,/mob/living))
|
||||
var/mob/living/M as mob
|
||||
var/to_remove = 0
|
||||
if (holder.has_reagent("anti_toxin"))
|
||||
to_remove = min(holder.get_reagent_amount("anti_toxin"),data)
|
||||
holder.remove_reagent("anti_toxin", to_remove, 0)
|
||||
data -= to_remove
|
||||
if(M)
|
||||
M.adjustToxLoss((data-1)*rand(2,4))
|
||||
..()
|
||||
|
||||
psilocybin
|
||||
|
||||
@@ -1347,7 +1347,7 @@ datum
|
||||
required_container = /obj/item/slime_extract/yellow
|
||||
required_other = 1
|
||||
on_reaction(var/datum/reagents/holder, var/created_volume)
|
||||
var/obj/item/weapon/cell/slime/P = new /obj/item/weapon/cell/slime
|
||||
var/obj/item/weapon/stock_parts/cell/slime/P = new /obj/item/weapon/stock_parts/cell/slime
|
||||
P.loc = get_turf_loc(holder.my_atom)
|
||||
|
||||
slimeglow
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
W:amount -= 5
|
||||
if(!W:amount) del(W)
|
||||
user << "<span class='notice'>You add some cable to the potato and slide it inside the battery encasing.</span>"
|
||||
var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(user.loc)
|
||||
var/obj/item/weapon/stock_parts/cell/potato/pocell = new /obj/item/weapon/stock_parts/cell/potato(user.loc)
|
||||
pocell.maxcharge = src.potency * 10
|
||||
pocell.charge = pocell.maxcharge
|
||||
del(src)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
category = list("initial","Tools")
|
||||
|
||||
/datum/design/crowbar
|
||||
name = "Pocket crowbar"
|
||||
name = "Pocket Crowbar"
|
||||
id = "crowbar"
|
||||
build_type = AUTOLATHE
|
||||
materials = list("$metal" = 50)
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
construction_time = 200
|
||||
category = list("Cyborg")
|
||||
|
||||
//Robot repair
|
||||
//Robot repair
|
||||
/datum/design/borg_binary_communication
|
||||
name = "Cyborg Binary Communication Device"
|
||||
id = "borg_binary_communication"
|
||||
@@ -74,7 +74,7 @@
|
||||
materials = list("$metal"=2500, "$glass"=1000)
|
||||
construction_time = 200
|
||||
category = list("Cyborg Repair")
|
||||
|
||||
|
||||
/datum/design/borg_radio
|
||||
name = "Cyborg Radio"
|
||||
id = "borg_radio"
|
||||
@@ -83,7 +83,7 @@
|
||||
materials = list("$metal"=2500, "$glass"=1000)
|
||||
construction_time = 200
|
||||
category = list("Cyborg Repair")
|
||||
|
||||
|
||||
/datum/design/borg_actuator
|
||||
name = "Cyborg Actuator"
|
||||
id = "borg_actuator"
|
||||
@@ -92,7 +92,7 @@
|
||||
materials = list("$metal"=3500)
|
||||
construction_time = 200
|
||||
category = list("Cyborg Repair")
|
||||
|
||||
|
||||
/datum/design/borg_diagnosis_unit
|
||||
name = "Cyborg Diagnosis Unit"
|
||||
id = "borg_diagnosis_unit"
|
||||
@@ -101,7 +101,7 @@
|
||||
materials = list("$metal"=3500)
|
||||
construction_time = 200
|
||||
category = list("Cyborg Repair")
|
||||
|
||||
|
||||
/datum/design/borg_camera
|
||||
name = "Cyborg Camera"
|
||||
id = "borg_camera"
|
||||
@@ -110,7 +110,7 @@
|
||||
materials = list("$metal"=2500, "$glass"=1000)
|
||||
construction_time = 200
|
||||
category = list("Cyborg Repair")
|
||||
|
||||
|
||||
/datum/design/borg_armor
|
||||
name = "Cyborg Armor"
|
||||
id = "borg_armor"
|
||||
@@ -541,7 +541,7 @@
|
||||
materials = list("$metal"=10000)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_drill
|
||||
name = "Exosuit Engineering Equipment (Drill)"
|
||||
id = "mech_drill"
|
||||
@@ -559,7 +559,7 @@
|
||||
materials = list("$metal"=10000)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_hydraulic_clamp
|
||||
name = "Exosuit Engineering Equipment (Hydraulic Clamp)"
|
||||
id = "mech_hydraulic_clamp"
|
||||
@@ -622,7 +622,7 @@
|
||||
materials = list("$metal"=20000,"$bananium"=5000)
|
||||
construction_time = 300
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_honker
|
||||
name = "HoNkER BlAsT 5000"
|
||||
id = "mech_honker"
|
||||
@@ -631,7 +631,7 @@
|
||||
materials = list("$metal"=20000,"$bananium"=10000)
|
||||
construction_time = 500
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_mousetrap_mortar
|
||||
name = "H.O.N.K Mousetrap Mortar"
|
||||
id = "mech_mousetrap_mortar"
|
||||
@@ -640,7 +640,7 @@
|
||||
materials = list("$metal"=20000,"$bananium"=5000)
|
||||
construction_time = 300
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
// Exosuit Modules
|
||||
/datum/design/mech_diamond_drill
|
||||
name = "Exosuit Module (Diamond Mining Drill)"
|
||||
@@ -652,7 +652,7 @@
|
||||
materials = list("$metal"=10000,"$diamond"=6500)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_generator_nuclear
|
||||
name = "Exosuit Module (ExoNuclear Reactor)"
|
||||
desc = "Compact nuclear reactor module."
|
||||
@@ -663,7 +663,7 @@
|
||||
materials = list("$metal"=10000,"$glass"=1000,"$silver"=500)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_gravcatapult
|
||||
name = "Exosuit Module (Gravitational Catapult Module)"
|
||||
desc = "An exosuit mounted Gravitational Catapult."
|
||||
@@ -685,7 +685,7 @@
|
||||
materials = list("$metal"=10000)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_rcd
|
||||
name = "Exosuit Module (RCD Module)"
|
||||
desc = "An exosuit-mounted Rapid Construction Device."
|
||||
@@ -696,7 +696,7 @@
|
||||
materials = list("$metal"=30000,"$gold"=20000,"$plasma"=25000,"$silver"=20000)
|
||||
construction_time = 1200
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_ccw_armor
|
||||
name = "Exosuit Module (Reactive Armor Booster Module)"
|
||||
desc = "Exosuit-mounted armor booster."
|
||||
@@ -707,7 +707,7 @@
|
||||
materials = list("$metal"=20000,"$silver"=5000)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_proj_armor
|
||||
name = "Exosuit Module (Reflective Armor Booster Module)"
|
||||
desc = "Exosuit-mounted armor booster."
|
||||
@@ -718,7 +718,7 @@
|
||||
materials = list("$metal"=20000,"$gold"=5000)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_repair_droid
|
||||
name = "Exosuit Module (Repair Droid Module)"
|
||||
desc = "Automated Repair Droid. BEEP BOOP"
|
||||
@@ -729,7 +729,7 @@
|
||||
materials = list("$metal"=10000,"$glass"=5000,"$gold"=1000,"$silver"=2000)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/clusterbang_launcher
|
||||
name = "Exosuit Module (SOB-3 Clusterbang Launcher)"
|
||||
desc = "A weapon that violates the Geneva Convention at 3 rounds per minute"
|
||||
@@ -740,7 +740,7 @@
|
||||
materials = list("$metal"=20000,"$gold"=10000,"$uranium"=10000)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_teleporter
|
||||
name = "Exosuit Module (Teleporter Module)"
|
||||
desc = "An exosuit module that allows exosuits to teleport to any position in view."
|
||||
@@ -751,7 +751,7 @@
|
||||
materials = list("$metal"=10000)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_energy_relay
|
||||
name = "Exosuit Module (Tesla Energy Relay)"
|
||||
desc = "Tesla Energy Relay"
|
||||
@@ -761,8 +761,8 @@
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
|
||||
materials = list("$metal"=10000,"$glass"=2000,"$gold"=2000,"$silver"=3000)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
// Exosuit Weapons
|
||||
/datum/design/mech_laser_heavy
|
||||
name = "Exosuit Weapon (CH-LC \"Solaris\" Laser Cannon)"
|
||||
@@ -774,7 +774,7 @@
|
||||
materials = list("$metal"=10000)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_laser
|
||||
name = "Exosuit Weapon (CH-PS \"Immolator\" Laser)"
|
||||
desc = "Allows for the construction of CH-PS Laser."
|
||||
@@ -785,7 +785,7 @@
|
||||
materials = list("$metal"=10000)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_carbine
|
||||
name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)"
|
||||
desc = "Allows for the construction of FNX-99 \"Hades\" Carbine."
|
||||
@@ -796,7 +796,7 @@
|
||||
materials = list("$metal"=10000)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_scattershot
|
||||
name = "Exosuit Weapon (LBX AC 10 \"Scattershot\")"
|
||||
desc = "Allows for the construction of LBX AC 10."
|
||||
@@ -807,7 +807,7 @@
|
||||
materials = list("$metal"=10000)
|
||||
construction_time = 100
|
||||
category = list("Exosuit Equipment")
|
||||
|
||||
|
||||
/datum/design/mech_ion
|
||||
name = "Exosuit Weapon (MKIV Ion Heavy Cannon)"
|
||||
desc = "Allows for the construction of MKIV Ion Heavy Cannon."
|
||||
@@ -850,7 +850,7 @@
|
||||
req_tech = list("combat" = 4, "syndicate" = 3)
|
||||
build_path = /obj/item/borg/upgrade/syndicate
|
||||
category = "Cyborg Upgrade Modules"
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_jetpack
|
||||
name = "Cyborg Upgrade Module (Mining Jetpack)"
|
||||
@@ -860,16 +860,16 @@
|
||||
materials = list("$metal"=10000,"$plasma"=15000,"$uranium" = 20000)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
/datum/design/borg_upgrade_tasercooler
|
||||
name = "Cyborg Upgrade Module (Rapid Taser Cooling Module)"
|
||||
id = "borg_upgrade_tasercooler"
|
||||
|
||||
/datum/design/borg_upgrade_disablercooler
|
||||
name = "Cyborg Upgrade Module (Rapid Disabler Cooling Module)"
|
||||
id = "borg_upgrade_disablercooler"
|
||||
build_type = MECHFAB
|
||||
build_path = /obj/item/borg/upgrade/tasercooler
|
||||
build_path = /obj/item/borg/upgrade/disablercooler
|
||||
materials = list("$metal"=80000 , "$glass"=6000 , "$gold"= 2000, "$diamond" = 500)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
|
||||
/datum/design/borg_upgrade_rename
|
||||
name = "Cyborg Upgrade Module (Rename Module)"
|
||||
id = "borg_upgrade_rename"
|
||||
@@ -878,7 +878,7 @@
|
||||
materials = list("$metal"=35000)
|
||||
construction_time = 120
|
||||
category = list("Cyborg Upgrade Modules")
|
||||
|
||||
|
||||
/datum/design/borg_upgrade_reset
|
||||
name = "Cyborg Upgrade Module (Reset Module)"
|
||||
id = "borg_upgrade_reset"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
req_tech = list("powerstorage" = 1)
|
||||
build_type = PROTOLATHE | AUTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 700, "$glass" = 50)
|
||||
build_path = /obj/item/weapon/cell
|
||||
build_path = /obj/item/weapon/stock_parts/cell
|
||||
category = list("Misc","Power")
|
||||
|
||||
/datum/design/high_cell
|
||||
@@ -19,7 +19,7 @@
|
||||
req_tech = list("powerstorage" = 2)
|
||||
build_type = PROTOLATHE | AUTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 700, "$glass" = 60)
|
||||
build_path = /obj/item/weapon/cell/high
|
||||
build_path = /obj/item/weapon/stock_parts/cell/high
|
||||
category = list("Misc","Power")
|
||||
|
||||
/datum/design/hyper_cell
|
||||
@@ -30,7 +30,7 @@
|
||||
reliability_base = 70
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70)
|
||||
build_path = /obj/item/weapon/cell/hyper
|
||||
build_path = /obj/item/weapon/stock_parts/cell/hyper
|
||||
category = list("Misc","Power")
|
||||
|
||||
/datum/design/super_cell
|
||||
@@ -41,7 +41,7 @@
|
||||
reliability_base = 75
|
||||
build_type = PROTOLATHE | MECHFAB
|
||||
materials = list("$metal" = 700, "$glass" = 70)
|
||||
build_path = /obj/item/weapon/cell/super
|
||||
build_path = /obj/item/weapon/stock_parts/cell/super
|
||||
category = list("Misc","Power")
|
||||
|
||||
/datum/design/pacman
|
||||
|
||||
@@ -199,8 +199,9 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
busy = 0
|
||||
src.updateUsrDialog()
|
||||
|
||||
src.overlays += "protolathe_[stack.name]"
|
||||
sleep(10)
|
||||
src.overlays -= "protolathe_[stack.name]"
|
||||
if(stack)
|
||||
src.overlays += "protolathe_[stack.name]"
|
||||
sleep(10)
|
||||
src.overlays -= "protolathe_[stack.name]"
|
||||
|
||||
return
|
||||
|
||||
@@ -50,7 +50,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
req_access = list(access_research) //Data and setting manipulation requires scientist access.
|
||||
|
||||
var/selected_category
|
||||
|
||||
var/list/datum/design/matching_designs = list() //for the search function
|
||||
|
||||
/obj/machinery/computer/rdconsole/proc/CallTechName(var/ID) //A simple helper proc to find the name of a tech with a given ID.
|
||||
var/datum/tech/check_tech
|
||||
@@ -135,6 +135,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
/obj/machinery/computer/rdconsole/New()
|
||||
..()
|
||||
files = new /datum/research(src) //Setup the research data holder.
|
||||
matching_designs = list()
|
||||
if(!id)
|
||||
for(var/obj/machinery/r_n_d/server/centcom/S in world)
|
||||
S.initialize()
|
||||
@@ -589,6 +590,25 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
spawn(20)
|
||||
screen = 1.6
|
||||
updateUsrDialog()
|
||||
|
||||
else if(href_list["search"]) //Search for designs with name matching pattern
|
||||
var/compare
|
||||
|
||||
matching_designs.Cut()
|
||||
|
||||
if(href_list["type"] == "proto")
|
||||
compare = PROTOLATHE
|
||||
screen = 3.17
|
||||
else
|
||||
compare = IMPRINTER
|
||||
screen = 4.17
|
||||
|
||||
for(var/datum/design/D in files.known_designs)
|
||||
if(!(D.build_type & compare))
|
||||
continue
|
||||
if(findtext(D.name,href_list["to_search"]))
|
||||
matching_designs.Add(D)
|
||||
|
||||
updateUsrDialog()
|
||||
return
|
||||
|
||||
@@ -801,7 +821,15 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
dat += "<A href='?src=\ref[src];menu=3.3'>Chemical Storage</A><div class='statusDisplay'>"
|
||||
dat += "<h3>Protolathe Menu:</h3><BR>"
|
||||
dat += "<B>Material Amount:</B> [linked_lathe.TotalMaterials()] / [linked_lathe.max_material_storage]<BR>"
|
||||
dat += "<B>Chemical Volume:</B> [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]<HR>"
|
||||
dat += "<B>Chemical Volume:</B> [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]<BR>"
|
||||
|
||||
dat += "<form name='search' action='?src=\ref[src]'> \
|
||||
<input type='hidden' name='src' value='\ref[src]'> \
|
||||
<input type='hidden' name='search' value='to_search'> \
|
||||
<input type='hidden' name='type' value='proto'> \
|
||||
<input type='text' name='to_search'> \
|
||||
<input type='submit' value='Search'> \
|
||||
</form><HR>"
|
||||
|
||||
dat += list_categories(linked_lathe.categories, 3.15)
|
||||
|
||||
@@ -842,6 +870,39 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
dat += " | <span class='bad'>LOCKED</span>"
|
||||
dat += "<BR>"
|
||||
dat += "</div>"
|
||||
|
||||
if(3.17) //Display search result
|
||||
dat += "<A href='?src=\ref[src];menu=1.0'>Main Menu</A>"
|
||||
dat += "<A href='?src=\ref[src];menu=3.1'>Protolathe Menu</A>"
|
||||
dat += "<div class='statusDisplay'><h3>Search results:</h3><BR>"
|
||||
dat += "<B>Material Amount:</B> [linked_lathe.TotalMaterials()] / [linked_lathe.max_material_storage]<BR>"
|
||||
dat += "<B>Chemical Volume:</B> [linked_lathe.reagents.total_volume] / [linked_lathe.reagents.maximum_volume]<HR>"
|
||||
|
||||
var/coeff = linked_lathe.efficiency_coeff
|
||||
for(var/datum/design/D in matching_designs)
|
||||
var/temp_material
|
||||
var/c = 50
|
||||
var/t
|
||||
for(var/M in D.materials)
|
||||
t = linked_lathe.check_mat(D, M)
|
||||
temp_material += " | "
|
||||
if (!t)
|
||||
temp_material += "<span class='bad'>[D.materials[M]/coeff] [CallMaterialName(M)]</span>"
|
||||
else
|
||||
temp_material += " [D.materials[M]/coeff] [CallMaterialName(M)]"
|
||||
c = min(c,t)
|
||||
|
||||
if (c)
|
||||
dat += "<A href='?src=\ref[src];build=[D.id];amount=1'>[D.name]</A>"
|
||||
if(c >= 5.0)
|
||||
dat += "<A href='?src=\ref[src];build=[D.id];amount=5'>x5</A>"
|
||||
if(c >= 10.0)
|
||||
dat += "<A href='?src=\ref[src];build=[D.id];amount=10'>x10</A>"
|
||||
dat += "[temp_material]"
|
||||
else
|
||||
dat += "<span class='linkOff'>[D.name]</span>[temp_material]"
|
||||
dat += "<BR>"
|
||||
dat += "</div>"
|
||||
|
||||
if(3.2) //Protolathe Material Storage Sub-menu
|
||||
dat += "<A href='?src=\ref[src];menu=1.0'>Main Menu</A>"
|
||||
@@ -917,6 +978,14 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
dat += "<h3>Circuit Imprinter Menu:</h3><BR>"
|
||||
dat += "Material Amount: [linked_imprinter.TotalMaterials()]<BR>"
|
||||
dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]<HR>"
|
||||
|
||||
dat += "<form name='search' action='?src=\ref[src]'> \
|
||||
<input type='hidden' name='src' value='\ref[src]'> \
|
||||
<input type='hidden' name='search' value='to_search'> \
|
||||
<input type='hidden' name='type' value='imprint'> \
|
||||
<input type='text' name='to_search'> \
|
||||
<input type='submit' value='Search'> \
|
||||
</form><HR>"
|
||||
|
||||
dat += list_categories(linked_imprinter.categories, 4.15)
|
||||
|
||||
@@ -947,6 +1016,30 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if(D.locked)
|
||||
dat += " | <span class='bad'>LOCKED</span>"
|
||||
dat += "</div>"
|
||||
|
||||
if(4.17)
|
||||
dat += "<A href='?src=\ref[src];menu=1.0'>Main Menu</A>"
|
||||
dat += "<A href='?src=\ref[src];menu=4.1'>Circuit Imprinter Menu</A>"
|
||||
dat += "<div class='statusDisplay'><h3>Search results:</h3><BR>"
|
||||
dat += "Material Amount: [linked_imprinter.TotalMaterials()]<BR>"
|
||||
dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]<HR>"
|
||||
|
||||
var/coeff = linked_imprinter.efficiency_coeff
|
||||
for(var/datum/design/D in matching_designs)
|
||||
var/temp_materials
|
||||
var/check_materials = 1
|
||||
for(var/M in D.materials)
|
||||
temp_materials += " | "
|
||||
if (!linked_imprinter.check_mat(D, M))
|
||||
check_materials = 0
|
||||
temp_materials += " <span class='bad'>[D.materials[M]/coeff] [CallMaterialName(M)]</span>"
|
||||
else
|
||||
temp_materials += " [D.materials[M]/coeff] [CallMaterialName(M)]"
|
||||
if (check_materials)
|
||||
dat += "<A href='?src=\ref[src];imprint=[D.id]'>[D.name]</A>[temp_materials]<BR>"
|
||||
else
|
||||
dat += "<span class='linkOff'>[D.name]</span>[temp_materials]<BR>"
|
||||
dat += "</div>"
|
||||
|
||||
if(4.2)
|
||||
dat += "<A href='?src=\ref[src];menu=1.0'>Main Menu</A>"
|
||||
|
||||
@@ -66,8 +66,9 @@
|
||||
|
||||
/obj/structure/boulder/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/device/core_sampler))
|
||||
src.geological_data.artifact_distance = rand(-100,100) / 100
|
||||
src.geological_data.artifact_id = artifact_find.artifact_id
|
||||
if(geological_data)
|
||||
src.geological_data.artifact_distance = rand(-100,100) / 100
|
||||
src.geological_data.artifact_id = artifact_find.artifact_id
|
||||
|
||||
var/obj/item/device/core_sampler/C = W
|
||||
C.sample_item(src, user)
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
/obj/item/weapon/caution/cone,\
|
||||
/obj/item/weapon/crowbar,\
|
||||
/obj/item/weapon/clipboard,\
|
||||
/obj/item/weapon/cell,\
|
||||
/obj/item/weapon/stock_parts/cell,\
|
||||
/obj/item/weapon/circular_saw,\
|
||||
/obj/item/weapon/hatchet,\
|
||||
/obj/item/weapon/handcuffs,\
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
if(user)
|
||||
if(istype(user, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
for (var/obj/item/weapon/cell/D in R.contents)
|
||||
for (var/obj/item/weapon/stock_parts/cell/D in R.contents)
|
||||
D.charge += rand() * 100 + 50
|
||||
R << "\blue SYSTEM ALERT: Large energy boost detected!"
|
||||
return 1
|
||||
@@ -17,12 +17,12 @@
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/obj/machinery/power/apc/C in range(200, T))
|
||||
for (var/obj/item/weapon/cell/B in C.contents)
|
||||
for (var/obj/item/weapon/stock_parts/cell/B in C.contents)
|
||||
B.charge += 25
|
||||
for (var/obj/machinery/power/smes/S in range (src.effectrange,src))
|
||||
S.charge += 25
|
||||
for (var/mob/living/silicon/robot/M in mob_list)
|
||||
for (var/obj/item/weapon/cell/D in M.contents)
|
||||
for (var/obj/item/weapon/stock_parts/cell/D in M.contents)
|
||||
D.charge += 25
|
||||
M << "\blue SYSTEM ALERT: Energy boost detected!"
|
||||
return 1
|
||||
@@ -31,12 +31,12 @@
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/obj/machinery/power/apc/C in range(200, T))
|
||||
for (var/obj/item/weapon/cell/B in C.contents)
|
||||
for (var/obj/item/weapon/stock_parts/cell/B in C.contents)
|
||||
B.charge += rand() * 100
|
||||
for (var/obj/machinery/power/smes/S in range (src.effectrange,src))
|
||||
S.charge += 250
|
||||
for (var/mob/living/silicon/robot/M in mob_list)
|
||||
for (var/obj/item/weapon/cell/D in M.contents)
|
||||
for (var/obj/item/weapon/stock_parts/cell/D in M.contents)
|
||||
D.charge += rand() * 100
|
||||
M << "\blue SYSTEM ALERT: Energy boost detected!"
|
||||
return 1
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
if(user)
|
||||
if(istype(user, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
for (var/obj/item/weapon/cell/D in R.contents)
|
||||
for (var/obj/item/weapon/stock_parts/cell/D in R.contents)
|
||||
D.charge = max(D.charge - rand() * 100, 0)
|
||||
R << "\blue SYSTEM ALERT: Energy drain detected!"
|
||||
return 1
|
||||
@@ -19,12 +19,12 @@
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/obj/machinery/power/apc/C in range(200, T))
|
||||
for (var/obj/item/weapon/cell/B in C.contents)
|
||||
for (var/obj/item/weapon/stock_parts/cell/B in C.contents)
|
||||
B.charge = max(B.charge - 50,0)
|
||||
for (var/obj/machinery/power/smes/S in range (src.effectrange,src))
|
||||
S.charge = max(S.charge - 100,0)
|
||||
for (var/mob/living/silicon/robot/M in mob_list)
|
||||
for (var/obj/item/weapon/cell/D in M.contents)
|
||||
for (var/obj/item/weapon/stock_parts/cell/D in M.contents)
|
||||
D.charge = max(D.charge - 50,0)
|
||||
M << "\red SYSTEM ALERT: Energy drain detected!"
|
||||
return 1
|
||||
@@ -33,12 +33,12 @@
|
||||
if(holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
for (var/obj/machinery/power/apc/C in range(200, T))
|
||||
for (var/obj/item/weapon/cell/B in C.contents)
|
||||
for (var/obj/item/weapon/stock_parts/cell/B in C.contents)
|
||||
B.charge = max(B.charge - rand() * 150,0)
|
||||
for (var/obj/machinery/power/smes/S in range (src.effectrange,src))
|
||||
S.charge = max(S.charge - 250,0)
|
||||
for (var/mob/living/silicon/robot/M in mob_list)
|
||||
for (var/obj/item/weapon/cell/D in M.contents)
|
||||
for (var/obj/item/weapon/stock_parts/cell/D in M.contents)
|
||||
D.charge = max(D.charge - rand() * 150,0)
|
||||
M << "\red SYSTEM ALERT: Energy drain detected!"
|
||||
return 1
|
||||
|
||||
@@ -544,12 +544,14 @@
|
||||
|
||||
if(talkative)
|
||||
new_item.talking_atom = new()
|
||||
talking_atom.holder_atom = new_item
|
||||
talking_atom.init()
|
||||
if(talking_atom)
|
||||
talking_atom.holder_atom = new_item
|
||||
talking_atom.init()
|
||||
|
||||
del(src)
|
||||
|
||||
else if(talkative)
|
||||
src.talking_atom = new()
|
||||
talking_atom.holder_atom = src
|
||||
talking_atom.init()
|
||||
if(talking_atom)
|
||||
talking_atom.holder_atom = src
|
||||
talking_atom.init()
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "suspension2"
|
||||
density = 1
|
||||
req_access = list(access_research)
|
||||
var/obj/item/weapon/cell/cell
|
||||
var/obj/item/weapon/stock_parts/cell/cell
|
||||
var/obj/item/weapon/card/id/auth_card
|
||||
var/locked = 1
|
||||
var/open = 0
|
||||
@@ -16,7 +16,7 @@
|
||||
var/list/secured_mobs = list()
|
||||
|
||||
/obj/machinery/suspension_gen/New()
|
||||
src.cell = new/obj/item/weapon/cell/high(src)
|
||||
src.cell = new/obj/item/weapon/stock_parts/cell/high(src)
|
||||
..()
|
||||
|
||||
/obj/machinery/suspension_gen/process()
|
||||
@@ -205,7 +205,7 @@
|
||||
desc = "It has stubby legs bolted up against it's body for stabilising."
|
||||
else
|
||||
user << "<span class='warning'>You are unable to secure [src] while it is active!</span>"
|
||||
else if (istype(W, /obj/item/weapon/cell))
|
||||
else if (istype(W, /obj/item/weapon/stock_parts/cell))
|
||||
if(open)
|
||||
if(cell)
|
||||
user << "<span class='warning'>There is a power cell already installed.</span>"
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
//-------------------------------------------
|
||||
/obj/vehicle/train/ambulance/engine/New()
|
||||
..()
|
||||
cell = new /obj/item/weapon/cell/high
|
||||
cell = new /obj/item/weapon/stock_parts/cell/high
|
||||
verbs -= /atom/movable/verb/pull
|
||||
key = new()
|
||||
|
||||
@@ -86,10 +86,10 @@
|
||||
..()
|
||||
flick("mulebot-emagged", src)
|
||||
|
||||
/obj/vehicle/train/ambulance/trolley/insert_cell(var/obj/item/weapon/cell/C, var/mob/living/carbon/human/H)
|
||||
/obj/vehicle/train/ambulance/trolley/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H)
|
||||
return
|
||||
|
||||
/obj/vehicle/train/ambulance/engine/insert_cell(var/obj/item/weapon/cell/C, var/mob/living/carbon/human/H)
|
||||
/obj/vehicle/train/ambulance/engine/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H)
|
||||
..()
|
||||
update_stats()
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
//-------------------------------------------
|
||||
/obj/vehicle/train/cargo/engine/New()
|
||||
..()
|
||||
cell = new /obj/item/weapon/cell/high
|
||||
cell = new /obj/item/weapon/stock_parts/cell/high
|
||||
verbs -= /atom/movable/verb/pull
|
||||
key = new()
|
||||
var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs
|
||||
@@ -82,10 +82,10 @@
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
/obj/vehicle/train/cargo/trolley/insert_cell(var/obj/item/weapon/cell/C, var/mob/living/carbon/human/H)
|
||||
/obj/vehicle/train/cargo/trolley/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H)
|
||||
return
|
||||
|
||||
/obj/vehicle/train/cargo/engine/insert_cell(var/obj/item/weapon/cell/C, var/mob/living/carbon/human/H)
|
||||
/obj/vehicle/train/cargo/engine/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H)
|
||||
..()
|
||||
update_stats()
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
//-------------------------------------------
|
||||
/obj/vehicle/train/janitor/engine/New()
|
||||
..()
|
||||
cell = new /obj/item/weapon/cell/high
|
||||
cell = new /obj/item/weapon/stock_parts/cell/high
|
||||
verbs -= /atom/movable/verb/pull
|
||||
key = new()
|
||||
var/datum/reagents/R = new/datum/reagents(100)
|
||||
@@ -136,10 +136,10 @@
|
||||
..()
|
||||
flick("mulebot-emagged", src)
|
||||
|
||||
/obj/vehicle/train/janitor/trolley/insert_cell(var/obj/item/weapon/cell/C, var/mob/living/carbon/human/H)
|
||||
/obj/vehicle/train/janitor/trolley/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H)
|
||||
return
|
||||
|
||||
/obj/vehicle/train/janitor/engine/insert_cell(var/obj/item/weapon/cell/C, var/mob/living/carbon/human/H)
|
||||
/obj/vehicle/train/janitor/engine/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H)
|
||||
..()
|
||||
update_stats()
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
var/move_delay = 1 //set this to limit the speed of the vehicle
|
||||
var/movable = 1
|
||||
|
||||
var/obj/item/weapon/cell/cell
|
||||
var/obj/item/weapon/stock_parts/cell/cell
|
||||
var/charge_use = 5 //set this to adjust the amount of power the vehicle uses per move
|
||||
|
||||
var/atom/movable/load //all vehicles can take a load, since they should all be a least drivable
|
||||
@@ -72,7 +72,7 @@
|
||||
else if(istype(W, /obj/item/weapon/crowbar) && cell && open)
|
||||
remove_cell(user)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/cell) && !cell && open)
|
||||
else if(istype(W, /obj/item/weapon/stock_parts/cell) && !cell && open)
|
||||
insert_cell(W, user)
|
||||
else if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/T = W
|
||||
@@ -236,7 +236,7 @@
|
||||
turn_on()
|
||||
return
|
||||
|
||||
/obj/vehicle/proc/insert_cell(var/obj/item/weapon/cell/C, var/mob/living/carbon/human/H)
|
||||
/obj/vehicle/proc/insert_cell(var/obj/item/weapon/stock_parts/cell/C, var/mob/living/carbon/human/H)
|
||||
if(cell)
|
||||
return
|
||||
if(!istype(C))
|
||||
|
||||
Reference in New Issue
Block a user