Merge with upstream/maser

This commit is contained in:
DZD
2015-02-09 18:22:19 -05:00
192 changed files with 1971 additions and 1376 deletions
+5 -1
View File
@@ -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>"
+54 -30
View File
@@ -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)
..()
+1 -1
View File
@@ -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 -3
View File
@@ -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.
+29
View File
@@ -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)
-467
View File
@@ -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"
+2 -2
View File
@@ -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))
+3 -3
View File
@@ -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
+1 -1
View File
@@ -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()
+5 -5
View File
@@ -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
+5 -5
View File
@@ -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
+7 -7
View File
@@ -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'
+1 -1
View File
@@ -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),
)
+5 -11
View File
@@ -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
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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)
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1
View File
@@ -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.
+1
View File
@@ -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\
)
+2 -1
View File
@@ -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()
+36 -7
View File
@@ -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
View File
@@ -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))
+3 -3
View File
@@ -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
+6 -6
View File
@@ -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
+7 -1
View File
@@ -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]."
+1 -1
View File
@@ -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'
+3 -3
View File
@@ -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
+4 -4
View File
@@ -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
+1 -1
View File
@@ -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
+3 -3
View File
@@ -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)
+10 -9
View File
@@ -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
+1 -1
View File
@@ -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
+4 -3
View File
@@ -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
+95 -2
View File
@@ -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>"
+3 -3
View File
@@ -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()
+3 -3
View File
@@ -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()
+3 -3
View File
@@ -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()
+3 -3
View File
@@ -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))