mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-26 13:36:48 +01:00
Pol Sync
This commit is contained in:
@@ -110,7 +110,16 @@
|
||||
flashfail = 1
|
||||
|
||||
else if(issilicon(M))
|
||||
M.Weaken(rand(5,10))
|
||||
flashfail = 0
|
||||
var/mob/living/silicon/S = M
|
||||
if(isrobot(S))
|
||||
var/mob/living/silicon/robot/R = S
|
||||
if(R.has_active_type(/obj/item/borg/combat/shield))
|
||||
var/obj/item/borg/combat/shield/shield = locate() in R
|
||||
if(shield)
|
||||
if(shield.active)
|
||||
shield.adjust_flash_count(R, 1)
|
||||
flashfail = 1
|
||||
else
|
||||
flashfail = 1
|
||||
|
||||
@@ -133,6 +142,7 @@
|
||||
else
|
||||
|
||||
user.visible_message("<span class='notice'>[user] overloads [M]'s sensors with the flash!</span>")
|
||||
M.Weaken(rand(5,10))
|
||||
else
|
||||
|
||||
user.visible_message("<span class='notice'>[user] fails to blind [M] with the flash!</span>")
|
||||
|
||||
@@ -125,3 +125,6 @@
|
||||
name = "\improper ERT radio encryption key"
|
||||
icon_state = "cent_cypherkey"
|
||||
channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1)
|
||||
|
||||
/obj/item/device/encryptionkey/omni //Literally only for the admin intercoms
|
||||
channels = list("Mercenary" = 1, "Raider" = 1, "Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1)
|
||||
@@ -310,6 +310,9 @@
|
||||
// freerange = 1
|
||||
ks2type = /obj/item/device/encryptionkey/ert
|
||||
|
||||
/obj/item/device/radio/headset/omni //Only for the admin intercoms
|
||||
ks2type = /obj/item/device/encryptionkey/omni
|
||||
|
||||
/obj/item/device/radio/headset/ia
|
||||
name = "internal affair's headset"
|
||||
desc = "The headset of your worst enemy."
|
||||
@@ -317,6 +320,20 @@
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/device/radio/headset/mmi_radio
|
||||
name = "brain-integrated radio"
|
||||
desc = "MMIs and synthetic brains are often equipped with these."
|
||||
icon = 'icons/obj/robot_component.dmi'
|
||||
icon_state = "radio"
|
||||
item_state = "headset"
|
||||
var/mmiowner = null
|
||||
var/radio_enabled = 1
|
||||
|
||||
/obj/item/device/radio/headset/mmi_radio/receive_range(freq, level)
|
||||
if (!radio_enabled || istype(src.loc.loc, /mob/living/silicon) || istype(src.loc.loc, /obj/item/organ/internal))
|
||||
return -1 //Transciever Disabled.
|
||||
return ..(freq, level, 1)
|
||||
|
||||
/obj/item/device/radio/headset/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
// ..()
|
||||
user.set_machine(src)
|
||||
|
||||
@@ -353,8 +353,8 @@ REAGENT SCANNER
|
||||
|
||||
/obj/item/device/slime_scanner
|
||||
name = "slime scanner"
|
||||
icon_state = "adv_spectrometer"
|
||||
item_state = "analyzer"
|
||||
icon_state = "xenobio"
|
||||
item_state = "xenobio"
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
w_class = ITEMSIZE_SMALL
|
||||
flags = CONDUCT
|
||||
|
||||
@@ -132,4 +132,19 @@
|
||||
/obj/item/device/t_scanner/dropped(mob/user)
|
||||
set_user_client(null)
|
||||
|
||||
/obj/item/device/t_scanner/upgraded
|
||||
name = "Upgraded T-ray Scanner"
|
||||
desc = "An upgraded version of the terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 500, PHORON = 150)
|
||||
origin_tech = list(TECH_MAGNET = 4, TECH_ENGINEERING = 5)
|
||||
scan_range = 3
|
||||
|
||||
/obj/item/device/t_scanner/advanced
|
||||
name = "Advanced T-ray Scanner"
|
||||
desc = "An advanced version of the terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1500, PHORON = 200, SILVER = 250)
|
||||
origin_tech = list(TECH_MAGNET = 7, TECH_ENGINEERING = 7, TECH_MATERIAL = 6)
|
||||
scan_range = 7
|
||||
|
||||
|
||||
#undef OVERLAY_CACHE_LEN
|
||||
@@ -4,16 +4,18 @@
|
||||
desc = "This item spawns stack of 50 of a given material."
|
||||
icon = 'icons/misc/mark.dmi'
|
||||
icon_state = "x4"
|
||||
var/material = ""
|
||||
// var/material = ""
|
||||
var/obj/item/stack/type_to_spawn = null
|
||||
|
||||
/obj/fiftyspawner/New()
|
||||
//spawns the 50-stack and qdels self
|
||||
..()
|
||||
var/obj_path = text2path("/obj/item/stack/[material]")
|
||||
var/obj/item/stack/M = new obj_path(src.loc)
|
||||
// var/obj_path = text2path("/obj/item/stack/[material]")
|
||||
var/obj/item/stack/M = new type_to_spawn(src.loc)
|
||||
M.amount = M.max_amount //some stuff spawns with 60, we're still calling it fifty
|
||||
M.update_icon() // Some stacks have different sprites depending on how full they are.
|
||||
qdel(src)
|
||||
|
||||
/obj/fiftyspawner/rods
|
||||
name = "stack of rods" //this needs to be defined for cargo
|
||||
material = "rods"
|
||||
type_to_spawn = /obj/item/stack/rods
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/stack/medical
|
||||
name = "medical pack"
|
||||
singular_name = "medical pack"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/stacks.dmi'
|
||||
amount = 10
|
||||
max_amount = 10
|
||||
w_class = ITEMSIZE_SMALL
|
||||
@@ -64,6 +64,7 @@
|
||||
desc = "Some sterile gauze to wrap around bloody stumps."
|
||||
icon_state = "brutepack"
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
@@ -123,6 +124,7 @@
|
||||
icon_state = "ointment"
|
||||
heal_burn = 1
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/medical/ointment/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
@@ -279,16 +281,25 @@
|
||||
if(M == user && prob(75))
|
||||
user.visible_message("<span class='danger'>\The [user] fumbles [src].</span>", "<span class='danger'>You fumble [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
var/obj/item/stack/medical/splint/S = split(1)
|
||||
if(S)
|
||||
if(affecting.apply_splint(S))
|
||||
S.forceMove(affecting)
|
||||
if (M != user)
|
||||
if(ishuman(user))
|
||||
var/obj/item/stack/medical/splint/S = split(1)
|
||||
if(S)
|
||||
if(affecting.apply_splint(S))
|
||||
S.forceMove(affecting)
|
||||
if (M != user)
|
||||
user.visible_message("<span class='danger'>\The [user] finishes applying [src] to [M]'s [limb].</span>", "<span class='danger'>You finish applying \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
else
|
||||
user.visible_message("<span class='danger'>\The [user] successfully applies [src] to their [limb].</span>", "<span class='danger'>You successfully apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
S.dropInto(src.loc) //didn't get applied, so just drop it
|
||||
if(isrobot(user))
|
||||
var/obj/item/stack/medical/splint/B = src
|
||||
if(B)
|
||||
if(affecting.apply_splint(B))
|
||||
B.forceMove(affecting)
|
||||
user.visible_message("<span class='danger'>\The [user] finishes applying [src] to [M]'s [limb].</span>", "<span class='danger'>You finish applying \the [src] to [M]'s [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
else
|
||||
user.visible_message("<span class='danger'>\The [user] successfully applies [src] to their [limb].</span>", "<span class='danger'>You successfully apply \the [src] to your [limb].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
S.dropInto(src.loc) //didn't get applied, so just drop it
|
||||
B.use(1)
|
||||
return
|
||||
user.visible_message("<span class='danger'>\The [user] fails to apply [src].</span>", "<span class='danger'>You fail to apply [src].</span>", "<span class='danger'>You hear something being wrapped.</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -2,11 +2,12 @@
|
||||
name = "nanopaste"
|
||||
singular_name = "nanite swarm"
|
||||
desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
|
||||
icon = 'icons/obj/nanopaste.dmi'
|
||||
icon_state = "tube"
|
||||
icon = 'icons/obj/stacks.dmi'
|
||||
icon_state = "nanopaste"
|
||||
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
|
||||
amount = 10
|
||||
w_class = ITEMSIZE_SMALL
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/nanopaste/attack(mob/living/M as mob, mob/user as mob)
|
||||
if (!istype(M) || !istype(user))
|
||||
|
||||
@@ -21,6 +21,23 @@
|
||||
uses_charge = 1
|
||||
charge_costs = list(500)
|
||||
stacktype = /obj/item/stack/rods
|
||||
no_variants = TRUE
|
||||
|
||||
/obj/item/stack/rods/New()
|
||||
..()
|
||||
recipes = rods_recipes
|
||||
update_icon()
|
||||
|
||||
/obj/item/stack/rods/update_icon()
|
||||
var/amount = get_amount()
|
||||
if((amount <= 5) && (amount > 0))
|
||||
icon_state = "rods-[amount]"
|
||||
else
|
||||
icon_state = "rods"
|
||||
|
||||
var/global/list/datum/stack_recipe/rods_recipes = list( \
|
||||
new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1),
|
||||
new/datum/stack_recipe("catwalk", /obj/structure/catwalk, 2, time = 80, one_per_turf = 1, on_floor = 1))
|
||||
|
||||
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/weldingtool))
|
||||
@@ -55,7 +72,7 @@
|
||||
|
||||
..()
|
||||
|
||||
|
||||
/*
|
||||
/obj/item/stack/rods/attack_self(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
@@ -87,3 +104,4 @@
|
||||
F.add_fingerprint(usr)
|
||||
use(2)
|
||||
return
|
||||
*/
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "The by-product of human farming."
|
||||
singular_name = "human skin piece"
|
||||
icon_state = "sheet-hide"
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/animalhide/human
|
||||
amount = 50
|
||||
@@ -80,6 +81,7 @@
|
||||
desc = "This hide was stripped of it's hair, but still needs tanning."
|
||||
singular_name = "hairless hide piece"
|
||||
icon_state = "sheet-hairlesshide"
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/hairlesshide
|
||||
amount = 50
|
||||
@@ -91,6 +93,7 @@
|
||||
icon_state = "sheet-wetleather"
|
||||
var/wetness = 30 //Reduced when exposed to high temperautres
|
||||
var/drying_threshold_temperature = 500 //Kelvin to start drying
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/material/wetleather
|
||||
amount = 50
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
/obj/item/stack
|
||||
gender = PLURAL
|
||||
origin_tech = list(TECH_MATERIAL = 1)
|
||||
icon = 'icons/obj/stacks.dmi'
|
||||
var/list/datum/stack_recipe/recipes
|
||||
var/singular_name
|
||||
var/amount = 1
|
||||
@@ -21,6 +22,7 @@
|
||||
var/uses_charge = 0
|
||||
var/list/charge_costs = null
|
||||
var/list/datum/matter_synth/synths = null
|
||||
var/no_variants = TRUE // Determines whether the item should update it's sprites based on amount.
|
||||
|
||||
/obj/item/stack/New(var/loc, var/amount=null)
|
||||
..()
|
||||
@@ -28,6 +30,7 @@
|
||||
stacktype = type
|
||||
if (amount)
|
||||
src.amount = amount
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/stack/Destroy()
|
||||
@@ -37,6 +40,18 @@
|
||||
usr << browse(null, "window=stack")
|
||||
return ..()
|
||||
|
||||
/obj/item/stack/update_icon()
|
||||
if(no_variants)
|
||||
icon_state = initial(icon_state)
|
||||
else
|
||||
if(amount <= (max_amount * (1/3)))
|
||||
icon_state = initial(icon_state)
|
||||
else if (amount <= (max_amount * (2/3)))
|
||||
icon_state = "[initial(icon_state)]_2"
|
||||
else
|
||||
icon_state = "[initial(icon_state)]_3"
|
||||
item_state = initial(icon_state)
|
||||
|
||||
/obj/item/stack/examine(mob/user)
|
||||
if(..(user, 1))
|
||||
if(!uses_charge)
|
||||
@@ -189,6 +204,7 @@
|
||||
if(usr)
|
||||
usr.remove_from_mob(src)
|
||||
qdel(src) //should be safe to qdel immediately since if someone is still using this stack it will persist for a little while longer
|
||||
update_icon()
|
||||
return 1
|
||||
else
|
||||
if(get_amount() < used)
|
||||
@@ -205,6 +221,7 @@
|
||||
return 0
|
||||
else
|
||||
amount += extra
|
||||
update_icon()
|
||||
return 1
|
||||
else if(!synths || synths.len < uses_charge)
|
||||
return 0
|
||||
@@ -298,7 +315,7 @@
|
||||
|
||||
/obj/item/stack/attack_hand(mob/user as mob)
|
||||
if (user.get_inactive_hand() == src)
|
||||
var/N = input("How many stacks of [src] would you like to split off?", "Split stacks", 1) as num|null
|
||||
var/N = input("How many stacks of [src] would you like to split off? There are currently [amount].", "Split stacks", 1) as num|null
|
||||
if(N)
|
||||
var/obj/item/stack/F = src.split(N)
|
||||
if (F)
|
||||
|
||||
@@ -2,48 +2,48 @@
|
||||
|
||||
/obj/fiftyspawner/grass
|
||||
name = "stack of grass"
|
||||
material = "tile/grass"
|
||||
type_to_spawn = /obj/item/stack/tile/grass
|
||||
|
||||
/obj/fiftyspawner/wood
|
||||
name = "stack of wood"
|
||||
material = "tile/wood"
|
||||
type_to_spawn = /obj/item/stack/tile/wood
|
||||
|
||||
/obj/fiftyspawner/carpet
|
||||
name = "stack of carpet"
|
||||
material = "tile/carpet"
|
||||
type_to_spawn = /obj/item/stack/tile/carpet
|
||||
|
||||
/obj/fiftyspawner/bluecarpet
|
||||
name = "stack of blue carpet"
|
||||
material = "tile/carpet/blue"
|
||||
type_to_spawn = /obj/item/stack/tile/carpet/blue
|
||||
|
||||
/obj/fiftyspawner/floor
|
||||
name = "stack of floor tiles"
|
||||
material = "tile/floor"
|
||||
type_to_spawn = /obj/item/stack/tile/floor
|
||||
|
||||
/obj/fiftyspawner/floor_red
|
||||
name = "stack of red floor tiles"
|
||||
material = "tile/floor_red"
|
||||
type_to_spawn = /obj/item/stack/tile/floor/red
|
||||
|
||||
/obj/fiftyspawner/floor_steel
|
||||
name = "stack of steel floor tiles"
|
||||
material = "tile/floor_steel"
|
||||
type_to_spawn = /obj/item/stack/tile/floor/steel
|
||||
|
||||
/obj/fiftyspawner/floor_white
|
||||
name = "stack of white floor tiles"
|
||||
material = "tile/floor_white"
|
||||
type_to_spawn = /obj/item/stack/tile/floor/white
|
||||
|
||||
/obj/fiftyspawner/floor_yellow
|
||||
name = "stack of yellow floor tiles"
|
||||
material = "tile/floor_yellow"
|
||||
type_to_spawn = /obj/item/stack/tile/floor/yellow
|
||||
|
||||
/obj/fiftyspawner/floor_dark
|
||||
name = "stack of dark floor tiles"
|
||||
material = "tile/floor_dark"
|
||||
type_to_spawn = /obj/item/stack/tile/floor/dark
|
||||
|
||||
/obj/fiftyspawner/floor_freezer
|
||||
name = "stack of freezer tiles"
|
||||
material = "tile/floor_freezer"
|
||||
type_to_spawn = /obj/item/stack/tile/floor/freezer
|
||||
|
||||
/obj/fiftyspawner/linoleum
|
||||
name = "stack of linoleum tiles"
|
||||
material = "tile/linoleum"
|
||||
type_to_spawn = /obj/item/stack/tile/linoleum
|
||||
@@ -36,6 +36,7 @@
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/grass/fifty
|
||||
amount = 50
|
||||
@@ -52,6 +53,7 @@
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/wood/fifty
|
||||
amount = 50
|
||||
@@ -77,12 +79,14 @@
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/carpet/blue
|
||||
name = "blue carpet"
|
||||
singular_name = "blue carpet"
|
||||
desc = "A piece of blue carpet. It is the same size as a normal floor tile!"
|
||||
icon_state = "tile-bluecarpet"
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/carpet/bcarpet
|
||||
icon_state = "tile-carpet"
|
||||
@@ -110,29 +114,34 @@
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = CONDUCT
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/floor/red
|
||||
name = "red floor tile"
|
||||
singular_name = "red floor tile"
|
||||
color = COLOR_RED_GRAY
|
||||
icon_state = "tile_white"
|
||||
no_variants = FALSE
|
||||
|
||||
// VOREStation Edit
|
||||
/obj/item/stack/tile/floor/techgrey
|
||||
name = "grey techfloor tile"
|
||||
singular_name = "grey techfloor tile"
|
||||
icon_state = "techtile_grey"
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/floor/techgrid
|
||||
name = "grid techfloor tile"
|
||||
singular_name = "grid techfloor tile"
|
||||
icon_state = "techtile_grid"
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/floor/steel_dirty
|
||||
name = "steel floor tile"
|
||||
singular_name = "steel floor tile"
|
||||
icon_state = "tile_steel"
|
||||
matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
no_variants = FALSE
|
||||
// VOREStation Edit End
|
||||
|
||||
/obj/item/stack/tile/floor/steel
|
||||
@@ -140,30 +149,35 @@
|
||||
singular_name = "steel floor tile"
|
||||
icon_state = "tile_steel"
|
||||
matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/floor/white
|
||||
name = "white floor tile"
|
||||
singular_name = "white floor tile"
|
||||
icon_state = "tile_white"
|
||||
matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/floor/yellow
|
||||
name = "yellow floor tile"
|
||||
singular_name = "yellow floor tile"
|
||||
color = COLOR_BROWN
|
||||
icon_state = "tile_white"
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/floor/dark
|
||||
name = "dark floor tile"
|
||||
singular_name = "dark floor tile"
|
||||
icon_state = "fr_tile"
|
||||
icon_state = "tile_steel"
|
||||
matter = list("plasteel" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/floor/freezer
|
||||
name = "freezer floor tile"
|
||||
singular_name = "freezer floor tile"
|
||||
icon_state = "tile_freezer"
|
||||
matter = list("plastic" = SHEET_MATERIAL_AMOUNT / 4)
|
||||
no_variants = FALSE
|
||||
|
||||
/obj/item/stack/tile/floor/cyborg
|
||||
name = "floor tile synthesizer"
|
||||
@@ -185,3 +199,4 @@
|
||||
throw_speed = 5
|
||||
throw_range = 20
|
||||
flags = 0
|
||||
no_variants = FALSE
|
||||
|
||||
@@ -287,6 +287,7 @@
|
||||
desc = "Woefully underpowered in D20."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "katana"
|
||||
item_state = "katana"
|
||||
item_icons = list(
|
||||
slot_l_hand_str = 'icons/mob/items/lefthand_material.dmi',
|
||||
slot_r_hand_str = 'icons/mob/items/righthand_material.dmi',
|
||||
@@ -697,19 +698,6 @@
|
||||
desc = "A \"Space Life\" brand Emergency Response Team Commander action figure."
|
||||
icon_state = "ert"
|
||||
|
||||
/obj/item/toy/katana
|
||||
name = "replica katana"
|
||||
desc = "Woefully underpowered in D20."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon_state = "katana"
|
||||
item_state = "katana"
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT | SLOT_BACK
|
||||
force = 5
|
||||
throwforce = 5
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced")
|
||||
|
||||
/obj/item/toy/therapy_red
|
||||
name = "red therapy doll"
|
||||
desc = "A toy for therapeutic and recreational purposes. This one is red."
|
||||
|
||||
@@ -20,9 +20,9 @@ AI MODULES
|
||||
origin_tech = list(TECH_DATA = 3)
|
||||
var/datum/ai_laws/laws = null
|
||||
|
||||
/obj/item/weapon/aiModule/proc/install(var/obj/machinery/computer/C)
|
||||
if (istype(C, /obj/machinery/computer/aiupload))
|
||||
var/obj/machinery/computer/aiupload/comp = C
|
||||
/obj/item/weapon/aiModule/proc/install(var/atom/movable/AM, var/mob/living/user)
|
||||
if (istype(AM, /obj/machinery/computer/aiupload))
|
||||
var/obj/machinery/computer/aiupload/comp = AM
|
||||
if(comp.stat & NOPOWER)
|
||||
usr << "The upload computer has no power!"
|
||||
return
|
||||
@@ -33,10 +33,6 @@ AI MODULES
|
||||
usr << "You haven't selected an AI to transmit laws to!"
|
||||
return
|
||||
|
||||
if(ticker && ticker.mode && ticker.mode.name == "blob")
|
||||
usr << "Law uploads have been disabled by [using_map.company_name]!"
|
||||
return
|
||||
|
||||
if (comp.current.stat == 2 || comp.current.control_disabled == 1)
|
||||
usr << "Upload failed. No signal is being detected from the AI."
|
||||
else if (comp.current.see_in_dark == 0)
|
||||
@@ -52,8 +48,8 @@ AI MODULES
|
||||
usr << "Upload complete. The AI's laws have been modified."
|
||||
|
||||
|
||||
else if (istype(C, /obj/machinery/computer/borgupload))
|
||||
var/obj/machinery/computer/borgupload/comp = C
|
||||
else if (istype(AM, /obj/machinery/computer/borgupload))
|
||||
var/obj/machinery/computer/borgupload/comp = AM
|
||||
if(comp.stat & NOPOWER)
|
||||
usr << "The upload computer has no power!"
|
||||
return
|
||||
@@ -74,6 +70,31 @@ AI MODULES
|
||||
comp.current.show_laws()
|
||||
usr << "Upload complete. The robot's laws have been modified."
|
||||
|
||||
else if(istype(AM, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = AM
|
||||
if(R.stat == DEAD)
|
||||
to_chat(user, "<span class='warning'>Law Upload Error: Unit is nonfunctional.</span>")
|
||||
return
|
||||
if(R.emagged)
|
||||
to_chat(user, "<span class='warning'>Law Upload Error: Cannot obtain write access to laws.</span>")
|
||||
to_chat(R, "<span class='danger'>Law modification attempt detected. Blocking.</span>")
|
||||
return
|
||||
if(R.connected_ai)
|
||||
to_chat(user, "<span class='warning'>Law Upload Error: Unit is slaved to an AI.</span>")
|
||||
return
|
||||
|
||||
R.visible_message("<span class='danger'>\The [user] slides a law module into \the [R].</span>")
|
||||
to_chat(R, "<span class='danger'>Local law upload in progress.</span>")
|
||||
to_chat(user, "<span class='notice'>Uploading laws from board. This will take a moment...</span>")
|
||||
if(do_after(user, 10 SECONDS))
|
||||
transmitInstructions(R, user)
|
||||
to_chat(R, "These are your laws now:")
|
||||
R.show_laws()
|
||||
to_chat(user, "<span class='notice'>Law upload complete. Unit's laws have been modified.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Law Upload Error: Law board was removed before upload was complete. Aborting.</span>")
|
||||
to_chat(R, "<span class='notice'>Law upload aborted.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/aiModule/proc/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
|
||||
log_law_changes(target, sender)
|
||||
@@ -109,7 +130,7 @@ AI MODULES
|
||||
targetName = targName
|
||||
desc = text("A 'safeguard' AI module: 'Safeguard []. Anyone threatening or attempting to harm [] is no longer to be considered a crew member, and is a threat which must be neutralized.'", targetName, targetName)
|
||||
|
||||
/obj/item/weapon/aiModule/safeguard/install(var/obj/machinery/computer/C)
|
||||
/obj/item/weapon/aiModule/safeguard/install(var/obj/machinery/computer/C, var/mob/living/user)
|
||||
if(!targetName)
|
||||
usr << "No name detected on module, please enter one."
|
||||
return 0
|
||||
@@ -135,7 +156,7 @@ AI MODULES
|
||||
targetName = targName
|
||||
desc = text("A 'one crew member' AI module: 'Only [] is a crew member.'", targetName)
|
||||
|
||||
/obj/item/weapon/aiModule/oneHuman/install(var/obj/machinery/computer/C)
|
||||
/obj/item/weapon/aiModule/oneHuman/install(var/obj/machinery/computer/C, var/mob/living/user)
|
||||
if(!targetName)
|
||||
usr << "No name detected on module, please enter one."
|
||||
return 0
|
||||
@@ -231,7 +252,7 @@ AI MODULES
|
||||
target.add_supplied_law(lawpos, law)
|
||||
lawchanges.Add("The law was '[newFreeFormLaw]'")
|
||||
|
||||
/obj/item/weapon/aiModule/freeform/install(var/obj/machinery/computer/C)
|
||||
/obj/item/weapon/aiModule/freeform/install(var/obj/machinery/computer/C, var/mob/living/user)
|
||||
if(!newFreeFormLaw)
|
||||
usr << "No law detected on module, please create one."
|
||||
return 0
|
||||
@@ -342,7 +363,7 @@ AI MODULES
|
||||
target.add_inherent_law(law)
|
||||
lawchanges.Add("The law is '[newFreeFormLaw]'")
|
||||
|
||||
/obj/item/weapon/aiModule/freeformcore/install(var/obj/machinery/computer/C)
|
||||
/obj/item/weapon/aiModule/freeformcore/install(var/obj/machinery/computer/C, var/mob/living/user)
|
||||
if(!newFreeFormLaw)
|
||||
usr << "No law detected on module, please create one."
|
||||
return 0
|
||||
@@ -371,7 +392,7 @@ AI MODULES
|
||||
target.add_ion_law(law)
|
||||
target.show_laws()
|
||||
|
||||
/obj/item/weapon/aiModule/syndicate/install(var/obj/machinery/computer/C)
|
||||
/obj/item/weapon/aiModule/syndicate/install(var/obj/machinery/computer/C, var/mob/living/user)
|
||||
if(!newFreeFormLaw)
|
||||
usr << "No law detected on module, please create one."
|
||||
return 0
|
||||
|
||||
@@ -1,28 +1,21 @@
|
||||
var/list/syndicate_ids = list()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate
|
||||
name = "agent card"
|
||||
icon_state = "syndicate"
|
||||
assignment = "Agent"
|
||||
origin_tech = list(TECH_ILLEGAL = 3)
|
||||
var/electronic_warfare = 1
|
||||
var/registered_user = null
|
||||
var/mob/registered_user = null
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/New(mob/user as mob)
|
||||
..()
|
||||
syndicate_ids += src
|
||||
access = syndicate_access.Copy()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/Destroy()
|
||||
syndicate_ids -= src
|
||||
registered_user = null
|
||||
return ..()
|
||||
/obj/item/weapon/card/id/syndicate/station_access/New()
|
||||
..() // Same as the normal Syndicate id, only already has all station access
|
||||
access |= get_all_station_access()
|
||||
|
||||
// On mob destruction, ensure any references are cleared
|
||||
/mob/Destroy()
|
||||
for(var/obj/item/weapon/card/id/syndicate/SID in syndicate_ids)
|
||||
if(SID.registered_user == src)
|
||||
SID.registered_user = null
|
||||
/obj/item/weapon/card/id/syndicate/Destroy()
|
||||
unset_registered_user(registered_user)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/prevent_tracking()
|
||||
@@ -37,9 +30,8 @@ var/list/syndicate_ids = list()
|
||||
user << "<span class='notice'>The microscanner activates as you pass it over the ID, copying its access.</span>"
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/attack_self(mob/user as mob)
|
||||
if(!registered_user)
|
||||
registered_user = user
|
||||
user.set_id_info(src)
|
||||
// We use the fact that registered_name is not unset should the owner be vaporized, to ensure the id doesn't magically become unlocked.
|
||||
if(!registered_user && register_user(user))
|
||||
user << "<span class='notice'>The microscanner marks you as its owner, preventing others from accessing its internals.</span>"
|
||||
if(registered_user == user)
|
||||
switch(alert("Would you like edit the ID, or show it?","Show or Edit?", "Edit","Show"))
|
||||
@@ -72,6 +64,21 @@ var/list/syndicate_ids = list()
|
||||
ui.set_initial_data(data)
|
||||
ui.open()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/proc/register_user(var/mob/user)
|
||||
if(!istype(user) || user == registered_user)
|
||||
return FALSE
|
||||
unset_registered_user()
|
||||
registered_user = user
|
||||
user.set_id_info(src)
|
||||
user.register(OBSERVER_EVENT_DESTROY, src, /obj/item/weapon/card/id/syndicate/proc/unset_registered_user)
|
||||
return TRUE
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/proc/unset_registered_user(var/mob/user)
|
||||
if(!registered_user || (user && user != registered_user))
|
||||
return
|
||||
registered_user.unregister(OBSERVER_EVENT_DESTROY, src)
|
||||
registered_user = null
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/CanUseTopic(mob/user)
|
||||
if(user != registered_user)
|
||||
return STATUS_CLOSE
|
||||
@@ -172,7 +179,7 @@ var/list/syndicate_ids = list()
|
||||
icon_state = initial(icon_state)
|
||||
name = initial(name)
|
||||
registered_name = initial(registered_name)
|
||||
registered_user = null
|
||||
unset_registered_user()
|
||||
sex = initial(sex)
|
||||
user << "<span class='notice'>All information has been deleted from \the [src].</span>"
|
||||
. = 1
|
||||
|
||||
@@ -40,3 +40,22 @@
|
||||
spawner_type = /mob/living/simple_animal/hostile/carp
|
||||
deliveryamt = 5
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4)
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/spider
|
||||
name = "spider delivery grenade"
|
||||
spawner_type = /mob/living/simple_animal/hostile/giant_spider/hunter
|
||||
deliveryamt = 3
|
||||
origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4)
|
||||
|
||||
//Sometimes you just need a sudden influx of spiders.
|
||||
/obj/item/weapon/grenade/spawnergrenade/spider/briefcase
|
||||
name = "briefcase"
|
||||
desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional."
|
||||
icon_state = "briefcase"
|
||||
item_state = "briefcase"
|
||||
flags = CONDUCT
|
||||
force = 8.0
|
||||
throw_speed = 1
|
||||
throw_range = 4
|
||||
w_class = ITEMSIZE_LARGE
|
||||
deliveryamt = 6
|
||||
@@ -25,7 +25,7 @@
|
||||
return
|
||||
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
user << "<span class='warning'>Uh ... how do those things work?!</span>"
|
||||
to_chat(user, "<span class='warning'>Uh ... how do those things work?!</span>")
|
||||
place_handcuffs(user, user)
|
||||
return
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
if(can_place(C, user))
|
||||
place_handcuffs(C, user)
|
||||
else
|
||||
user << "<span class='danger'>You need to have a firm grip on [C] before you can put \the [src] on!</span>"
|
||||
to_chat(user, "<span class='danger'>You need to have a firm grip on [C] before you can put \the [src] on!</span>")
|
||||
|
||||
/obj/item/weapon/handcuffs/proc/can_place(var/mob/target, var/mob/user)
|
||||
if(user == target)
|
||||
@@ -60,11 +60,11 @@
|
||||
return 0
|
||||
|
||||
if (!H.has_organ_for_slot(slot_handcuffed))
|
||||
user << "<span class='danger'>\The [H] needs at least two wrists before you can cuff them together!</span>"
|
||||
to_chat(user, "<span class='danger'>\The [H] needs at least two wrists before you can cuff them together!</span>")
|
||||
return 0
|
||||
|
||||
if(istype(H.gloves,/obj/item/clothing/gloves/gauntlets/rig) && !elastic) // Can't cuff someone who's in a deployed hardsuit.
|
||||
user << "<span class='danger'>\The [src] won't fit around \the [H.gloves]!</span>"
|
||||
to_chat(user, "<span class='danger'>\The [src] won't fit around \the [H.gloves]!</span>")
|
||||
return 0
|
||||
|
||||
user.visible_message("<span class='danger'>\The [user] is attempting to put [cuff_type] on \the [H]!</span>")
|
||||
@@ -166,7 +166,7 @@ var/last_chew = 0
|
||||
if (R.use(1))
|
||||
var/obj/item/weapon/material/wirerod/W = new(get_turf(user))
|
||||
user.put_in_hands(W)
|
||||
user << "<span class='notice'>You wrap the cable restraint around the top of the rod.</span>"
|
||||
to_chat(user, "<span class='notice'>You wrap the cable restraint around the top of the rod.</span>")
|
||||
qdel(src)
|
||||
update_icon(user)
|
||||
|
||||
@@ -181,3 +181,84 @@ var/last_chew = 0
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
breakouttime = 200
|
||||
cuff_type = "duct tape"
|
||||
|
||||
//Legcuffs. Not /really/ handcuffs, but its close enough.
|
||||
/obj/item/weapon/handcuffs/legcuffs
|
||||
name = "legcuffs"
|
||||
desc = "Use this to keep prisoners in line."
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "legcuff"
|
||||
flags = CONDUCT
|
||||
throwforce = 0
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
origin_tech = list(TECH_MATERIAL = 1)
|
||||
breakouttime = 300 //Deciseconds = 30s = 0.5 minute
|
||||
cuff_type = "legcuffs"
|
||||
sprite_sheets = list("Teshari" = 'icons/mob/species/seromi/handcuffs.dmi')
|
||||
elastic = 0
|
||||
cuff_sound = 'sound/weapons/handcuffs.ogg' //This shold work for now.
|
||||
|
||||
/obj/item/weapon/handcuffs/legcuffs/attack(var/mob/living/carbon/C, var/mob/living/user)
|
||||
if(!user.IsAdvancedToolUser())
|
||||
return
|
||||
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
to_chat(user, "<span class='warning'>Uh ... how do those things work?!</span>")
|
||||
place_legcuffs(user, user)
|
||||
return
|
||||
|
||||
if(!C.handcuffed)
|
||||
if (C == user)
|
||||
place_legcuffs(user, user)
|
||||
return
|
||||
|
||||
//check for an aggressive grab (or robutts)
|
||||
if(can_place(C, user))
|
||||
place_legcuffs(C, user)
|
||||
else
|
||||
to_chat(user, "<span class='danger'>You need to have a firm grip on [C] before you can put \the [src] on!</span>")
|
||||
|
||||
/obj/item/weapon/handcuffs/legcuffs/proc/place_legcuffs(var/mob/living/carbon/target, var/mob/user)
|
||||
playsound(src.loc, cuff_sound, 30, 1, -2)
|
||||
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(!istype(H))
|
||||
return 0
|
||||
|
||||
if (!H.has_organ_for_slot(slot_legcuffed))
|
||||
to_chat(user, "<span class='danger'>\The [H] needs at least two ankles before you can cuff them together!</span>")
|
||||
return 0
|
||||
|
||||
if(istype(H.shoes,/obj/item/clothing/shoes/magboots/rig) && !elastic) // Can't cuff someone who's in a deployed hardsuit.
|
||||
to_chat(user, "<span class='danger'>\The [src] won't fit around \the [H.shoes]!</span>")
|
||||
return 0
|
||||
|
||||
user.visible_message("<span class='danger'>\The [user] is attempting to put [cuff_type] on \the [H]!</span>")
|
||||
|
||||
if(!do_after(user,30))
|
||||
return 0
|
||||
|
||||
if(!can_place(target, user)) //victim may have resisted out of the grab in the meantime
|
||||
return 0
|
||||
|
||||
H.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been legcuffed (attempt) by [user.name] ([user.ckey])</font>")
|
||||
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Attempted to legcuff [H.name] ([H.ckey])</font>")
|
||||
msg_admin_attack("[key_name(user)] attempted to legcuff [key_name(H)]")
|
||||
feedback_add_details("legcuffs","H")
|
||||
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.do_attack_animation(H)
|
||||
|
||||
user.visible_message("<span class='danger'>\The [user] has put [cuff_type] on \the [H]!</span>")
|
||||
|
||||
// Apply cuffs.
|
||||
var/obj/item/weapon/handcuffs/legcuffs/lcuffs = src
|
||||
if(dispenser)
|
||||
lcuffs = new(get_turf(user))
|
||||
else
|
||||
user.drop_from_inventory(lcuffs)
|
||||
lcuffs.loc = target
|
||||
target.legcuffed = lcuffs
|
||||
target.update_inv_legcuffed()
|
||||
return 1
|
||||
|
||||
@@ -69,8 +69,37 @@
|
||||
/obj/item/weapon/implant/tracking
|
||||
name = "tracking implant"
|
||||
desc = "Track with this."
|
||||
var/id = 1.0
|
||||
var/id = 1
|
||||
var/degrade_time = 10 MINUTES //How long before the implant stops working outside of a living body.
|
||||
|
||||
/obj/item/weapon/implant/tracking/weak //This is for the loadout
|
||||
degrade_time = 2.5 MINUTES
|
||||
|
||||
/obj/item/weapon/implant/tracking/New()
|
||||
id = rand(1, 1000)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/implant/tracking/implanted(var/mob/source)
|
||||
processing_objects.Add(src)
|
||||
listening_objects |= src
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/implant/tracking/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/implant/tracking/process()
|
||||
var/implant_location = src.loc
|
||||
if(ismob(implant_location))
|
||||
var/mob/living/L = implant_location
|
||||
if(L.stat == DEAD)
|
||||
if(world.time >= L.timeofdeath + degrade_time)
|
||||
name = "melted implant"
|
||||
desc = "Charred circuit in melted plastic case. Wonder what that used to be..."
|
||||
icon_state = "implant_melted"
|
||||
malfunction = MALFUNCTION_PERMANENT
|
||||
processing_objects.Remove(src)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/implant/tracking/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
|
||||
@@ -1,23 +1,34 @@
|
||||
/obj/item/weapon/implanter
|
||||
name = "implanter"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "implanter0"
|
||||
icon_state = "implanter0_1"
|
||||
item_state = "syringe_0"
|
||||
throw_speed = 1
|
||||
throw_range = 5
|
||||
w_class = ITEMSIZE_SMALL
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 1000)
|
||||
var/obj/item/weapon/implant/imp = null
|
||||
var/active = 1
|
||||
|
||||
/obj/item/weapon/implanter/attack_self(var/mob/user)
|
||||
active = !active
|
||||
to_chat(user, "<span class='notice'>You [active ? "" : "de"]activate \the [src].</span>")
|
||||
update()
|
||||
|
||||
/obj/item/weapon/implanter/verb/remove_implant(var/mob/user)
|
||||
set category = "Object"
|
||||
set name = "Remove Implant"
|
||||
set src in usr
|
||||
|
||||
if(!imp)
|
||||
return ..()
|
||||
return
|
||||
imp.loc = get_turf(src)
|
||||
user.put_in_hands(imp)
|
||||
user << "<span class='notice'>You remove \the [imp] from \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You remove \the [imp] from \the [src].</span>")
|
||||
name = "implanter"
|
||||
imp = null
|
||||
update()
|
||||
|
||||
return
|
||||
|
||||
/obj/item/weapon/implanter/proc/update()
|
||||
@@ -25,40 +36,43 @@
|
||||
src.icon_state = "implanter1"
|
||||
else
|
||||
src.icon_state = "implanter0"
|
||||
src.icon_state += "_[active]"
|
||||
return
|
||||
|
||||
/obj/item/weapon/implanter/attack(mob/M as mob, mob/user as mob)
|
||||
if (!istype(M, /mob/living/carbon))
|
||||
return
|
||||
if (user && src.imp)
|
||||
M.visible_message("<span class='warning'>[user] is attemping to implant [M].</span>")
|
||||
if(active)
|
||||
if (imp)
|
||||
M.visible_message("<span class='warning'>[user] is attemping to implant [M].</span>")
|
||||
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
|
||||
user.do_attack_animation(M)
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
|
||||
user.do_attack_animation(M)
|
||||
|
||||
var/turf/T1 = get_turf(M)
|
||||
if (T1 && ((M == user) || do_after(user, 50)))
|
||||
if(user && M && (get_turf(M) == T1) && src && src.imp)
|
||||
M.visible_message("<span class='warning'>[M] has been implanted by [user].</span>")
|
||||
var/turf/T1 = get_turf(M)
|
||||
if (T1 && ((M == user) || do_after(user, 50)))
|
||||
if(user && M && (get_turf(M) == T1) && src && src.imp)
|
||||
M.visible_message("<span class='warning'>[M] has been implanted by [user].</span>")
|
||||
|
||||
admin_attack_log(user, M, "Implanted using \the [src.name] ([src.imp.name])", "Implanted with \the [src.name] ([src.imp.name])", "used an implanter, [src.name] ([src.imp.name]), on")
|
||||
admin_attack_log(user, M, "Implanted using \the [src.name] ([src.imp.name])", "Implanted with \the [src.name] ([src.imp.name])", "used an implanter, [src.name] ([src.imp.name]), on")
|
||||
|
||||
if(src.imp.implanted(M))
|
||||
src.imp.loc = M
|
||||
src.imp.imp_in = M
|
||||
src.imp.implanted = 1
|
||||
if (ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
|
||||
affected.implants += src.imp
|
||||
imp.part = affected
|
||||
if(src.imp.implanted(M))
|
||||
src.imp.loc = M
|
||||
src.imp.imp_in = M
|
||||
src.imp.implanted = 1
|
||||
if (ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
|
||||
affected.implants += src.imp
|
||||
imp.part = affected
|
||||
|
||||
BITSET(H.hud_updateflag, IMPLOYAL_HUD)
|
||||
BITSET(H.hud_updateflag, IMPLOYAL_HUD)
|
||||
BITSET(H.hud_updateflag, BACKUP_HUD) //VOREStation Add - Backup HUD updates
|
||||
|
||||
src.imp = null
|
||||
update()
|
||||
|
||||
src.imp = null
|
||||
update()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need to activate \the [src.name] first.</span>")
|
||||
return
|
||||
|
||||
/obj/item/weapon/implanter/loyalty
|
||||
@@ -113,19 +127,26 @@
|
||||
var/obj/item/weapon/implant/compressed/c = imp
|
||||
if (!c) return
|
||||
if (c.scanned == null)
|
||||
user << "Please scan an object with the implanter first."
|
||||
to_chat(user, "Please scan an object with the implanter first.")
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/implanter/compressed/afterattack(atom/A, mob/user as mob, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(!active)
|
||||
to_chat(user, "<span class='warning'>Activate \the [src.name] first.</span>")
|
||||
return
|
||||
if(istype(A,/obj/item) && imp)
|
||||
var/obj/item/weapon/implant/compressed/c = imp
|
||||
if (c.scanned)
|
||||
user << "<span class='warning'>Something is already scanned inside the implant!</span>"
|
||||
to_chat(user, "<span class='warning'>Something is already scanned inside the implant!</span>")
|
||||
return
|
||||
c.scanned = A
|
||||
if(istype(A, /obj/item/weapon/storage))
|
||||
to_chat(user, "<span class='warning'>You can't store \the [A.name] in this!</span>")
|
||||
c.scanned = null
|
||||
return
|
||||
if(istype(A.loc,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = A.loc
|
||||
H.remove_from_mob(A)
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
if (href_list["tracking_id"])
|
||||
var/obj/item/weapon/implant/tracking/T = src.case.imp
|
||||
T.id += text2num(href_list["tracking_id"])
|
||||
T.id = min(100, T.id)
|
||||
T.id = min(1000, T.id)
|
||||
T.id = max(1, T.id)
|
||||
|
||||
if (istype(src.loc, /mob))
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
/obj/item/weapon/material/gravemarker
|
||||
name = "grave marker"
|
||||
desc = "An object used in marking graves."
|
||||
icon_state = "gravemarker"
|
||||
w_class = ITEMSIZE_LARGE
|
||||
fragile = 1
|
||||
force_divisor = 0.65
|
||||
thrown_force_divisor = 0.25
|
||||
|
||||
var/icon_changes = 1 //Does the sprite change when you put words on it?
|
||||
var/grave_name = "" //Name of the intended occupant
|
||||
var/epitaph = "" //A quick little blurb
|
||||
|
||||
/obj/item/weapon/material/gravemarker/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
var/carving_1 = sanitizeSafe(input(user, "Who is \the [src.name] for?", "Gravestone Naming", null) as text, MAX_NAME_LEN)
|
||||
if(carving_1)
|
||||
user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
|
||||
if(do_after(user, material.hardness * W.toolspeed))
|
||||
user.visible_message("[user] carves something into \the [src.name].", "You carve your message into \the [src.name].")
|
||||
grave_name += carving_1
|
||||
update_icon()
|
||||
var/carving_2 = sanitizeSafe(input(user, "What message should \the [src.name] have?", "Epitaph Carving", null) as text, MAX_NAME_LEN)
|
||||
if(carving_2)
|
||||
user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
|
||||
if(do_after(user, material.hardness * W.toolspeed))
|
||||
user.visible_message("[user] carves something into \the [src.name].", "You carve your message into \the [src.name].")
|
||||
epitaph += carving_2
|
||||
update_icon()
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
user.visible_message("[user] starts carving \the [src.name].", "You start carving \the [src.name].")
|
||||
if(do_after(user, material.hardness * W.toolspeed))
|
||||
material.place_dismantled_product(get_turf(src))
|
||||
user.visible_message("[user] dismantles down \the [src.name].", "You dismantle \the [src.name].")
|
||||
qdel(src)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/material/gravemarker/examine(mob/user)
|
||||
..()
|
||||
if(get_dist(src, user) < 4)
|
||||
if(grave_name)
|
||||
to_chat(user, "Here Lies [grave_name]")
|
||||
if(get_dist(src, user) < 2)
|
||||
if(epitaph)
|
||||
to_chat(user, epitaph)
|
||||
|
||||
/obj/item/weapon/material/gravemarker/update_icon()
|
||||
if(icon_changes)
|
||||
if(grave_name && epitaph)
|
||||
icon_state = "[initial(icon_state)]_3"
|
||||
else if(grave_name)
|
||||
icon_state = "[initial(icon_state)]_1"
|
||||
else if(epitaph)
|
||||
icon_state = "[initial(icon_state)]_2"
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
|
||||
..()
|
||||
|
||||
/obj/item/weapon/material/gravemarker/attack_self(mob/user)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
if(!isturf(user.loc))
|
||||
return 0
|
||||
|
||||
if(locate(/obj/structure/gravemarker, user.loc))
|
||||
to_chat(user, "<span class='warning'>There's already something there.</span>")
|
||||
return 0
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You begin to place \the [src.name].</span>")
|
||||
if(!do_after(usr, 10))
|
||||
return 0
|
||||
var/obj/structure/gravemarker/G = new /obj/structure/gravemarker/(user.loc, src.get_material())
|
||||
to_chat(user, "<span class='notice'>You place \the [src.name].</span>")
|
||||
G.grave_name = grave_name
|
||||
G.epitaph = epitaph
|
||||
G.add_fingerprint(usr)
|
||||
G.dir = user.dir
|
||||
qdel_null(src)
|
||||
return
|
||||
@@ -233,6 +233,10 @@ Protectiveness | Armor %
|
||||
icon_state = "bucket"
|
||||
armor = list(melee = 5, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/head/helmet/bucket/wood
|
||||
name = "wooden bucket"
|
||||
icon_state = "woodbucket"
|
||||
|
||||
/obj/item/clothing/head/helmet/bucket/attackby(var/obj/O, mob/user)
|
||||
if(istype(O, /obj/item/stack/material))
|
||||
var/obj/item/stack/material/S = O
|
||||
|
||||
@@ -85,19 +85,4 @@
|
||||
thrown_force_divisor = 0.25 // as above
|
||||
dulled_divisor = 0.75 //Still metal on a long pole
|
||||
w_class = ITEMSIZE_SMALL
|
||||
attack_verb = list("slashed", "sliced", "cut", "clawed")
|
||||
|
||||
/obj/item/weapon/material/scythe
|
||||
icon_state = "scythe0"
|
||||
name = "scythe"
|
||||
desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow."
|
||||
force_divisor = 0.275 // 16 with hardness 60 (steel)
|
||||
thrown_force_divisor = 0.25 // 5 with weight 20 (steel)
|
||||
sharp = 1
|
||||
edge = 1
|
||||
throw_speed = 1
|
||||
throw_range = 3
|
||||
w_class = ITEMSIZE_LARGE
|
||||
slot_flags = SLOT_BACK
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 2)
|
||||
attack_verb = list("chopped", "sliced", "cut", "reaped")
|
||||
attack_verb = list("slashed", "sliced", "cut", "clawed")
|
||||
@@ -123,6 +123,15 @@
|
||||
var/obj/effect/plant/P = A
|
||||
P.die_off()
|
||||
|
||||
/obj/item/weapon/material/twohanded/fireaxe/scythe
|
||||
icon_state = "scythe0"
|
||||
base_icon = "scythe"
|
||||
name = "scythe"
|
||||
desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow."
|
||||
force_divisor = 0.65
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 2)
|
||||
attack_verb = list("chopped", "sliced", "cut", "reaped")
|
||||
|
||||
//spears, bay edition
|
||||
/obj/item/weapon/material/twohanded/spear
|
||||
icon_state = "spearglass0"
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
//This'll be used for gun permits, such as for heads of staff, antags, and bartenders
|
||||
|
||||
/obj/item/weapon/permit
|
||||
name = "permit"
|
||||
desc = "A permit for something."
|
||||
icon = 'icons/obj/card.dmi'
|
||||
icon_state = "permit"
|
||||
w_class = ITEMSIZE_TINY
|
||||
var/owner = 0 //To prevent people from just renaming the thing if they steal it
|
||||
|
||||
/obj/item/weapon/permit/attack_self(mob/user as mob)
|
||||
if(isliving(user))
|
||||
if(!owner)
|
||||
set_name(user.name)
|
||||
to_chat(user, "[src] registers your name.")
|
||||
else
|
||||
to_chat(user, "[src] already has an owner!")
|
||||
|
||||
/obj/item/weapon/permit/proc/set_name(var/new_name)
|
||||
owner = 1
|
||||
if(new_name)
|
||||
src.name += " ([new_name])"
|
||||
desc += " It belongs to [new_name]."
|
||||
|
||||
/obj/item/weapon/permit/emag_act(var/remaining_charges, var/mob/user)
|
||||
to_chat(user, "You reset the naming locks on [src]!")
|
||||
owner = 0
|
||||
|
||||
/obj/item/weapon/permit/gun
|
||||
name = "weapon permit"
|
||||
desc = "A card indicating that the owner is allowed to carry a firearm."
|
||||
|
||||
/obj/item/weapon/permit/gun/bar
|
||||
name = "bar shotgun permit"
|
||||
desc = "A card indicating that the owner is allowed to carry a shotgun in the bar."
|
||||
|
||||
/obj/item/weapon/permit/drone
|
||||
name = "drone identification card"
|
||||
desc = "A card issued by the EIO, indicating that the owner is a Drone Intelligence. Drones are mandated to carry this card within SolGov space, by law."
|
||||
icon_state = "drone"
|
||||
@@ -180,6 +180,11 @@
|
||||
desc = "A large dufflebag for holding extra tools and supplies."
|
||||
icon_state = "duffle_eng"
|
||||
|
||||
/obj/item/weapon/storage/backpack/dufflebag/sci
|
||||
name = "science dufflebag"
|
||||
desc = "A large dufflebag for holding circuits and beakers."
|
||||
icon_state = "duffle_sci"
|
||||
|
||||
/*
|
||||
* Satchel Types
|
||||
*/
|
||||
|
||||
@@ -239,7 +239,51 @@
|
||||
new /obj/item/weapon/crowbar/alien(src)
|
||||
new /obj/item/weapon/wirecutters/alien(src)
|
||||
new /obj/item/device/multitool/alien(src)
|
||||
new /obj/item/stack/cable_coil(src,30,"white")
|
||||
new /obj/item/stack/cable_coil/alien(src)
|
||||
|
||||
/obj/item/weapon/storage/belt/medical/alien
|
||||
name = "alien belt"
|
||||
desc = "A belt(?) that can hold things."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "belt"
|
||||
item_state = "security"
|
||||
can_hold = list(
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/weapon/dnainjector,
|
||||
/obj/item/weapon/reagent_containers/dropper,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker,
|
||||
/obj/item/weapon/reagent_containers/glass/bottle,
|
||||
/obj/item/weapon/reagent_containers/pill,
|
||||
/obj/item/weapon/reagent_containers/syringe,
|
||||
/obj/item/weapon/flame/lighter/zippo,
|
||||
/obj/item/weapon/storage/fancy/cigarettes,
|
||||
/obj/item/weapon/storage/pill_bottle,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/device/radio/headset,
|
||||
/obj/item/device/pda,
|
||||
/obj/item/taperoll,
|
||||
/obj/item/device/megaphone,
|
||||
/obj/item/clothing/mask/surgical,
|
||||
/obj/item/clothing/head/surgery,
|
||||
/obj/item/clothing/gloves,
|
||||
/obj/item/weapon/reagent_containers/hypospray,
|
||||
/obj/item/clothing/glasses,
|
||||
/obj/item/weapon/crowbar,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/cell/device,
|
||||
/obj/item/weapon/extinguisher/mini,
|
||||
/obj/item/weapon/surgical
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/belt/medical/alien/New()
|
||||
..()
|
||||
new /obj/item/weapon/surgical/scalpel/alien(src)
|
||||
new /obj/item/weapon/surgical/hemostat/alien(src)
|
||||
new /obj/item/weapon/surgical/retractor/alien(src)
|
||||
new /obj/item/weapon/surgical/circular_saw/alien(src)
|
||||
new /obj/item/weapon/surgical/FixOVein/alien(src)
|
||||
new /obj/item/weapon/surgical/bone_clamp/alien(src)
|
||||
new /obj/item/weapon/surgical/cautery/alien(src)
|
||||
|
||||
/obj/item/weapon/storage/belt/champion
|
||||
name = "championship belt"
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
/obj/item/weapon/reagent_containers/dropper,
|
||||
/obj/item/weapon/screwdriver,
|
||||
/obj/item/weapon/stamp,
|
||||
/obj/item/weapon/permit
|
||||
/obj/item/clothing/accessory/permit
|
||||
)
|
||||
slot_flags = SLOT_ID
|
||||
|
||||
|
||||
@@ -249,4 +249,35 @@
|
||||
|
||||
results += ..()
|
||||
|
||||
return results
|
||||
return results
|
||||
|
||||
// Rare version of a baton that causes lesser lifeforms to really hate the user and attack them.
|
||||
/obj/item/weapon/melee/baton/shocker
|
||||
name = "shocker"
|
||||
desc = "A device that appears to arc electricity into a target to incapacitate or otherwise hurt them, similar to a stun baton. It looks inefficent."
|
||||
description_info = "Hitting a lesser lifeform with this while it is on will compel them to attack you above other nearby targets. Otherwise \
|
||||
it works like a regular stun baton, just less effectively."
|
||||
icon_state = "shocker"
|
||||
force = 10
|
||||
throwforce = 5
|
||||
agonyforce = 25 // Less efficent than a regular baton.
|
||||
attack_verb = list("poked")
|
||||
|
||||
/obj/item/weapon/melee/baton/shocker/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
|
||||
..(target, user, hit_zone)
|
||||
if(istype(target, /mob/living/simple_animal) && status)
|
||||
var/mob/living/simple_animal/SA = target
|
||||
SA.taunt(user)
|
||||
|
||||
// Borg version, for the lost module.
|
||||
/obj/item/weapon/melee/baton/shocker/robot
|
||||
|
||||
/obj/item/weapon/melee/baton/shocker/robot/attack_self(mob/user)
|
||||
//try to find our power cell
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if (istype(R))
|
||||
bcell = R.cell
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/melee/baton/shocker/robot/attackby(obj/item/weapon/W, mob/user)
|
||||
return
|
||||
@@ -8,10 +8,6 @@
|
||||
* Circular Saw
|
||||
*/
|
||||
|
||||
/*
|
||||
* Retractor
|
||||
*/
|
||||
|
||||
/obj/item/weapon/surgical
|
||||
name = "Surgical tool"
|
||||
desc = "This shouldn't be here, ahelp it."
|
||||
@@ -25,10 +21,13 @@
|
||||
return 0
|
||||
..()
|
||||
|
||||
/*
|
||||
* Retractor
|
||||
*/
|
||||
|
||||
/obj/item/weapon/surgical/retractor
|
||||
name = "retractor"
|
||||
desc = "Retracts stuff."
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "retractor"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 5000)
|
||||
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
|
||||
@@ -167,9 +166,82 @@
|
||||
/obj/item/weapon/surgical/bonesetter
|
||||
name = "bone setter"
|
||||
desc = "Put them in their place."
|
||||
icon_state = "bone setter"
|
||||
icon_state = "bone_setter"
|
||||
force = 8.0
|
||||
throwforce = 9.0
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
attack_verb = list("attacked", "hit", "bludgeoned")
|
||||
|
||||
/obj/item/weapon/surgical/bone_clamp
|
||||
name = "bone clamp"
|
||||
desc = "The best way to get a bone fixed fast."
|
||||
icon_state = "bone_clamp"
|
||||
force = 8
|
||||
throwforce = 9
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
attack_verb = list("attacked", "hit", "bludgeoned")
|
||||
|
||||
// Cyborg Tools
|
||||
|
||||
/obj/item/weapon/surgical/retractor/cyborg
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/hemostat/cyborg
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/cautery/cyborg
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/surgicaldrill/cyborg
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/scalpel/cyborg
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/circular_saw/cyborg
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/bonegel/cyborg
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/FixOVein/cyborg
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/weapon/surgical/bonesetter/cyborg
|
||||
toolspeed = 0.5
|
||||
|
||||
|
||||
// Alien Tools
|
||||
/obj/item/weapon/surgical/retractor/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/hemostat/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/cautery/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/surgicaldrill/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/scalpel/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/circular_saw/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/FixOVein/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.25
|
||||
|
||||
/obj/item/weapon/surgical/bone_clamp/alien
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
toolspeed = 0.75
|
||||
@@ -79,13 +79,8 @@ Frequency:
|
||||
|
||||
src.temp += "<B>Extranneous Signals:</B><BR>"
|
||||
for (var/obj/item/weapon/implant/tracking/W in world)
|
||||
if (!W.implanted || !(istype(W.loc,/obj/item/organ/external) || ismob(W.loc)))
|
||||
if (!W.implanted || !(istype(W.loc,/obj/item/organ/external) || ismob(W.loc) || W.malfunction))
|
||||
continue
|
||||
else
|
||||
var/mob/M = W.loc
|
||||
if (M.stat == 2)
|
||||
if (M.timeofdeath + 6000 < world.time)
|
||||
continue
|
||||
|
||||
var/turf/tr = get_turf(W)
|
||||
if (tr.z == sr.z && tr)
|
||||
|
||||
@@ -312,19 +312,19 @@
|
||||
/obj/item/weapon/weldingtool/examine(mob/user)
|
||||
if(..(user, 0))
|
||||
if(max_fuel)
|
||||
user << text("\icon[] [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel )
|
||||
to_chat(user, text("\icon[] The [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel ))
|
||||
|
||||
|
||||
/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/living/user as mob)
|
||||
if(istype(W,/obj/item/weapon/screwdriver))
|
||||
if(welding)
|
||||
user << "<span class='danger'>Stop welding first!</span>"
|
||||
to_chat(user, "<span class='danger'>Stop welding first!</span>")
|
||||
return
|
||||
status = !status
|
||||
if(status)
|
||||
user << "<span class='notice'>You secure the welder.</span>"
|
||||
to_chat(user, "<span class='notice'>You secure the welder.</span>")
|
||||
else
|
||||
user << "<span class='notice'>The welder can now be attached and modified.</span>"
|
||||
to_chat(user, "<span class='notice'>The welder can now be attached and modified.</span>")
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
@@ -380,16 +380,16 @@
|
||||
if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1)
|
||||
if(!welding && max_fuel)
|
||||
O.reagents.trans_to_obj(src, max_fuel)
|
||||
user << "<span class='notice'>Welder refueled</span>"
|
||||
to_chat(user, "<span class='notice'>Welder refueled</span>")
|
||||
playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
|
||||
return
|
||||
else if(!welding)
|
||||
user << "<span class='notice'>[src] doesn't use fuel.</span>"
|
||||
to_chat(user, "<span class='notice'>[src] doesn't use fuel.</span>")
|
||||
return
|
||||
else
|
||||
message_admins("[key_name_admin(user)] triggered a fueltank explosion with a welding tool.")
|
||||
log_game("[key_name(user)] triggered a fueltank explosion with a welding tool.")
|
||||
user << "<span class='danger'>You begin welding on the fueltank and with a moment of lucidity you realize, this might not have been the smartest thing you've ever done.</span>"
|
||||
to_chat(user, "<span class='danger'>You begin welding on the fueltank and with a moment of lucidity you realize, this might not have been the smartest thing you've ever done.</span>")
|
||||
var/obj/structure/reagent_dispensers/fueltank/tank = O
|
||||
tank.explode()
|
||||
return
|
||||
@@ -429,7 +429,7 @@
|
||||
return 1
|
||||
else
|
||||
if(M)
|
||||
M << "<span class='notice'>You need more welding fuel to complete this task.</span>"
|
||||
to_chat(M, "<span class='notice'>You need more welding fuel to complete this task.</span>")
|
||||
update_icon()
|
||||
return 0
|
||||
|
||||
@@ -509,7 +509,7 @@
|
||||
if(set_welding && !welding)
|
||||
if (get_fuel() > 0)
|
||||
if(M)
|
||||
M << "<span class='notice'>You switch the [src] on.</span>"
|
||||
to_chat(M, "<span class='notice'>You switch the [src] on.</span>")
|
||||
else if(T)
|
||||
T.visible_message("<span class='danger'>\The [src] turns on.</span>")
|
||||
playsound(loc, acti_sound, 50, 1)
|
||||
@@ -524,14 +524,14 @@
|
||||
else
|
||||
if(M)
|
||||
var/msg = max_fuel ? "welding fuel" : "charge"
|
||||
M << "<span class='notice'>You need more [msg] to complete this task.</span>"
|
||||
to_chat(M, "<span class='notice'>You need more [msg] to complete this task.</span>")
|
||||
return
|
||||
//Otherwise
|
||||
else if(!set_welding && welding)
|
||||
if(!always_process)
|
||||
processing_objects -= src
|
||||
if(M)
|
||||
M << "<span class='notice'>You switch \the [src] off.</span>"
|
||||
to_chat(M, "<span class='notice'>You switch \the [src] off.</span>")
|
||||
else if(T)
|
||||
T.visible_message("<span class='warning'>\The [src] turns off.</span>")
|
||||
playsound(loc, deac_sound, 50, 1)
|
||||
@@ -557,29 +557,29 @@
|
||||
if(H.nif && H.nif.flag_check(NIF_V_UVFILTER,NIF_FLAGS_VISION)) return //VOREStation Add - NIF
|
||||
switch(safety)
|
||||
if(1)
|
||||
usr << "<span class='warning'>Your eyes sting a little.</span>"
|
||||
to_chat(usr, "<span class='warning'>Your eyes sting a little.</span>")
|
||||
E.damage += rand(1, 2)
|
||||
if(E.damage > 12)
|
||||
user.eye_blurry += rand(3,6)
|
||||
if(0)
|
||||
usr << "<span class='warning'>Your eyes burn.</span>"
|
||||
to_chat(usr, "<span class='warning'>Your eyes burn.</span>")
|
||||
E.damage += rand(2, 4)
|
||||
if(E.damage > 10)
|
||||
E.damage += rand(4,10)
|
||||
if(-1)
|
||||
usr << "<span class='danger'>Your thermals intensify the welder's glow. Your eyes itch and burn severely.</span>"
|
||||
to_chat(usr, "<span class='danger'>Your thermals intensify the welder's glow. Your eyes itch and burn severely.</span>")
|
||||
user.eye_blurry += rand(12,20)
|
||||
E.damage += rand(12, 16)
|
||||
if(safety<2)
|
||||
|
||||
if(E.damage > 10)
|
||||
user << "<span class='warning'>Your eyes are really starting to hurt. This can't be good for you!</span>"
|
||||
to_chat(user, "<span class='warning'>Your eyes are really starting to hurt. This can't be good for you!</span>")
|
||||
|
||||
if (E.damage >= E.min_broken_damage)
|
||||
user << "<span class='danger'>You go blind!</span>"
|
||||
to_chat(user, "<span class='danger'>You go blind!</span>")
|
||||
user.sdisabilities |= BLIND
|
||||
else if (E.damage >= E.min_bruised_damage)
|
||||
user << "<span class='danger'>You go blind!</span>"
|
||||
to_chat(user, "<span class='danger'>You go blind!</span>")
|
||||
user.Blind(5)
|
||||
user.eye_blurry = 5
|
||||
user.disabilities |= NEARSIGHTED
|
||||
@@ -689,16 +689,19 @@
|
||||
cell_type = null
|
||||
|
||||
/obj/item/weapon/weldingtool/electric/examine(mob/user)
|
||||
..()
|
||||
if(power_supply)
|
||||
user << text("\icon[] [] has [] charge left.", src, src.name, get_fuel())
|
||||
else
|
||||
user << text("\icon[] [] has power for no power cell!", src, src.name)
|
||||
if(get_dist(src, user) > 1)
|
||||
to_chat(user, desc)
|
||||
else // The << need to stay, for some reason
|
||||
if(power_supply)
|
||||
user << text("\icon[] The [] has [] charge left.", src, src.name, get_fuel())
|
||||
else
|
||||
user << text("\icon[] The [] has no power cell!", src, src.name)
|
||||
|
||||
/obj/item/weapon/weldingtool/electric/get_fuel()
|
||||
if(use_external_power)
|
||||
var/obj/item/weapon/cell/external = get_external_power_supply()
|
||||
return external.charge
|
||||
if(external)
|
||||
return external.charge
|
||||
else if(power_supply)
|
||||
return power_supply.charge
|
||||
else
|
||||
@@ -707,11 +710,11 @@
|
||||
/obj/item/weapon/weldingtool/electric/get_max_fuel()
|
||||
if(use_external_power)
|
||||
var/obj/item/weapon/cell/external = get_external_power_supply()
|
||||
return external.maxcharge
|
||||
if(external)
|
||||
return external.maxcharge
|
||||
else if(power_supply)
|
||||
return power_supply.maxcharge
|
||||
else
|
||||
return 0
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/weldingtool/electric/remove_fuel(var/amount = 1, var/mob/M = null)
|
||||
if(!welding)
|
||||
@@ -728,7 +731,7 @@
|
||||
return 1
|
||||
else
|
||||
if(M)
|
||||
M << "<span class='notice'>You need more energy to complete this task.</span>"
|
||||
to_chat(M, "<span class='notice'>You need more energy to complete this task.</span>")
|
||||
update_icon()
|
||||
return 0
|
||||
|
||||
@@ -738,7 +741,7 @@
|
||||
power_supply.update_icon()
|
||||
user.put_in_hands(power_supply)
|
||||
power_supply = null
|
||||
user << "<span class='notice'>You remove the cell from the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You remove the cell from the [src].</span>")
|
||||
setWelding(0)
|
||||
update_icon()
|
||||
return
|
||||
@@ -753,12 +756,12 @@
|
||||
user.drop_item()
|
||||
W.loc = src
|
||||
power_supply = W
|
||||
user << "<span class='notice'>You install a cell in \the [src].</span>"
|
||||
to_chat(user, "<span class='notice'>You install a cell in \the [src].</span>")
|
||||
update_icon()
|
||||
else
|
||||
user << "<span class='notice'>\The [src] already has a cell.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] already has a cell.</span>")
|
||||
else
|
||||
user << "<span class='notice'>\The [src] cannot use that type of cell.</span>"
|
||||
to_chat(user, "<span class='notice'>\The [src] cannot use that type of cell.</span>")
|
||||
else
|
||||
..()
|
||||
|
||||
@@ -779,6 +782,8 @@
|
||||
/obj/item/weapon/weldingtool/electric/mounted
|
||||
use_external_power = 1
|
||||
|
||||
/obj/item/weapon/weldingtool/electric/mounted/cyborg
|
||||
toolspeed = 0.5
|
||||
/*
|
||||
* Crowbar
|
||||
*/
|
||||
@@ -815,7 +820,7 @@
|
||||
return ..()
|
||||
|
||||
if(!welding)
|
||||
user << "<span class='warning'>You'll need to turn [src] on to patch the damage on [H]'s [S.name]!</span>"
|
||||
to_chat(user, "<span class='warning'>You'll need to turn [src] on to patch the damage on [H]'s [S.name]!</span>")
|
||||
return 1
|
||||
|
||||
if(S.robo_repair(15, BRUTE, "some dents", src, user))
|
||||
@@ -846,7 +851,7 @@
|
||||
icon_state = "jaws_pry"
|
||||
item_state = "jawsoflife"
|
||||
matter = list(MAT_METAL=150, MAT_SILVER=50)
|
||||
origin_tech = list(TECH_MATERIALS = 2, TECH_ENGINEERING = 2)
|
||||
origin_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2)
|
||||
usesound = 'sound/items/jaws_pry.ogg'
|
||||
force = 15
|
||||
toolspeed = 0.25
|
||||
@@ -879,9 +884,9 @@
|
||||
/obj/item/weapon/combitool/examine()
|
||||
..()
|
||||
if(loc == usr && tools.len)
|
||||
usr << "It has the following fittings:"
|
||||
to_chat(usr, "It has the following fittings:")
|
||||
for(var/obj/item/tool in tools)
|
||||
usr << "\icon[tool] - [tool.name][tools[current_tool]==tool?" (selected)":""]"
|
||||
to_chat(usr, "\icon[tool] - [tool.name][tools[current_tool]==tool?" (selected)":""]")
|
||||
|
||||
/obj/item/weapon/combitool/New()
|
||||
..()
|
||||
@@ -892,9 +897,9 @@
|
||||
if(++current_tool > tools.len) current_tool = 1
|
||||
var/obj/item/tool = tools[current_tool]
|
||||
if(!tool)
|
||||
user << "You can't seem to find any fittings in \the [src]."
|
||||
to_chat(user, "You can't seem to find any fittings in \the [src].")
|
||||
else
|
||||
user << "You switch \the [src] to the [tool.name] fitting."
|
||||
to_chat(user, "You switch \the [src] to the [tool.name] fitting.")
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/combitool/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||
|
||||
Reference in New Issue
Block a user