mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-29 19:43:16 +00:00
Construction Update
This commit is contained in:
@@ -94,7 +94,7 @@
|
||||
..()
|
||||
|
||||
|
||||
on_found(mob/finder as mob)
|
||||
on_found(mob/living/finder as mob)
|
||||
if(armed)
|
||||
finder.visible_message("<span class='warning'>[finder] accidentally sets off [src], breaking their fingers.</span>", \
|
||||
"<span class='warning'>You accidentally trigger [src]!</span>")
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
var/turf/location = src.loc
|
||||
if(istype(location, /mob/))
|
||||
var/mob/living/carbon/human/M = location
|
||||
if(M.l_hand == src || M.r_hand == src || M.head == src)
|
||||
if(M.item_is_in_hands(src) || M.head == src)
|
||||
location = M.loc
|
||||
|
||||
if (istype(location, /turf))
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
say_verbs = list("mumbles", "says")
|
||||
|
||||
// Clumsy folks can't take the mask off themselves.
|
||||
/obj/item/clothing/mask/muzzle/attack_hand(mob/user as mob)
|
||||
/obj/item/clothing/mask/muzzle/attack_hand(mob/living/user as mob)
|
||||
if(user.wear_mask == src && !user.IsAdvancedToolUser())
|
||||
return 0
|
||||
..()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/weapon/rig/attackby(obj/item/W as obj, mob/user as mob)
|
||||
/obj/item/weapon/rig/attackby(obj/item/W as obj, mob/living/user as mob)
|
||||
|
||||
if(!istype(user,/mob/living)) return 0
|
||||
if(!istype(user)) return 0
|
||||
|
||||
if(electrified != 0)
|
||||
if(shock(user)) //Handles removing charge from the cell, as well. No need to do that here.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
/obj/item/clothing/suit/armor
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight)
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
item_flags = THICKMATERIAL
|
||||
|
||||
@@ -263,7 +263,7 @@
|
||||
icon_state = "kvest"
|
||||
item_state = "kvest"
|
||||
armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
|
||||
allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight)
|
||||
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
item_flags = THICKMATERIAL
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
item_state = "det_suit"
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder)
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter,/obj/item/device/taperecorder,/obj/item/device/uv_light)
|
||||
armor = list(melee = 50, bullet = 10, laser = 25, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/storage/det_trench/grey
|
||||
@@ -109,7 +109,7 @@
|
||||
desc = "A forensics technician jacket."
|
||||
item_state = "det_suit"
|
||||
body_parts_covered = UPPER_TORSO|ARMS
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/taperecorder)
|
||||
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/taperecorder,/obj/item/device/uv_light)
|
||||
armor = list(melee = 10, bullet = 10, laser = 15, energy = 10, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
/obj/item/clothing/suit/storage/forensics/red
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
var/mob/living/carbon/human/user = usr
|
||||
|
||||
if (!(user.l_hand == src || user.r_hand == src))
|
||||
if(!user.item_is_in_hands(src))
|
||||
return //bag must be in your hands to use
|
||||
|
||||
if (isturf(I.loc))
|
||||
@@ -31,10 +31,8 @@
|
||||
var/obj/item/weapon/storage/U = I.loc
|
||||
user.client.screen -= I
|
||||
U.contents.Remove(I)
|
||||
else if(user.l_hand == I) //in a hand
|
||||
user.drop_l_hand()
|
||||
else if(user.r_hand == I) //in a hand
|
||||
user.drop_r_hand()
|
||||
else if(user.item_is_in_hands(I))
|
||||
user.drop_from_inventory(I)
|
||||
else
|
||||
return
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ log transactions
|
||||
anchored = 1
|
||||
use_power = 1
|
||||
idle_power_usage = 10
|
||||
circuit = /obj/item/weapon/circuitboard/atm
|
||||
var/datum/money_account/authenticated_account
|
||||
var/number_incorrect_tries = 0
|
||||
var/previous_account_number = 0
|
||||
@@ -79,6 +80,25 @@ log transactions
|
||||
return 1
|
||||
|
||||
/obj/machinery/atm/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
|
||||
user << "<span class='notice'>You start disconnecting the monitor.</span>"
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.frame_type = "atm"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
user << "<span class='notice'>You disconnect the monitor.</span>"
|
||||
A.state = 4
|
||||
A.icon_state = "atm_4"
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
return
|
||||
if(istype(I, /obj/item/weapon/card))
|
||||
if(emagged > 0)
|
||||
//prevent inserting id into an emagged ATM
|
||||
|
||||
@@ -61,9 +61,12 @@
|
||||
/datum/event/prison_break/tick()
|
||||
if(activeFor == releaseWhen)
|
||||
if(areas && areas.len > 0)
|
||||
var/obj/machinery/power/apc/theAPC = null
|
||||
for(var/area/A in areas)
|
||||
for(var/obj/machinery/light/L in A)
|
||||
L.flicker(10)
|
||||
theAPC = A.get_apc()
|
||||
if(theAPC.operating) //If the apc's off, it's a little hard to overload the lights.
|
||||
for(var/obj/machinery/light/L in A)
|
||||
L.flicker(10)
|
||||
|
||||
|
||||
/datum/event/prison_break/end()
|
||||
|
||||
@@ -77,12 +77,8 @@
|
||||
usr << "There are no cards in the deck."
|
||||
return
|
||||
|
||||
var/obj/item/weapon/hand/H
|
||||
if(user.l_hand && istype(user.l_hand,/obj/item/weapon/hand))
|
||||
H = user.l_hand
|
||||
else if(user.r_hand && istype(user.r_hand,/obj/item/weapon/hand))
|
||||
H = user.r_hand
|
||||
else
|
||||
var/obj/item/weapon/hand/H = user.get_type_in_hands(/obj/item/weapon/hand)
|
||||
if(!H)
|
||||
H = new(get_turf(src))
|
||||
user.put_in_hands(H)
|
||||
|
||||
|
||||
@@ -172,7 +172,7 @@
|
||||
if(seed) seed.thrown_at(src,hit_atom)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/weapon/W, var/mob/user)
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(var/obj/item/weapon/W, var/mob/living/user)
|
||||
|
||||
if(seed)
|
||||
if(seed.get_trait(TRAIT_PRODUCES_POWER) && istype(W, /obj/item/stack/cable_coil))
|
||||
@@ -181,7 +181,7 @@
|
||||
//TODO: generalize this.
|
||||
user << "<span class='notice'>You add some cable to the [src.name] and slide it inside the battery casing.</span>"
|
||||
var/obj/item/weapon/cell/potato/pocell = new /obj/item/weapon/cell/potato(get_turf(user))
|
||||
if(src.loc == user && !(user.l_hand && user.r_hand) && istype(user,/mob/living/carbon/human))
|
||||
if(src.loc == user && istype(user,/mob/living/carbon/human))
|
||||
user.put_in_hands(pocell)
|
||||
pocell.maxcharge = src.potency * 10
|
||||
pocell.charge = pocell.maxcharge
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
var/body_coverage = HEAD|FACE|EYES|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
|
||||
for(var/obj/item/clothing/clothes in target)
|
||||
if(target.l_hand == clothes|| target.r_hand == clothes)
|
||||
if(target.item_is_in_hands(clothes))
|
||||
continue
|
||||
body_coverage &= ~(clothes.body_parts_covered)
|
||||
|
||||
@@ -182,7 +182,7 @@
|
||||
continue
|
||||
var/body_coverage = HEAD|FACE|EYES|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
for(var/obj/item/clothing/clothes in M)
|
||||
if(M.l_hand == clothes || M.r_hand == clothes)
|
||||
if(M.item_is_in_hands(clothes))
|
||||
continue
|
||||
body_coverage &= ~(clothes.body_parts_covered)
|
||||
if(!body_coverage)
|
||||
|
||||
@@ -94,16 +94,10 @@
|
||||
user << "You load [W] into [src]."
|
||||
return
|
||||
|
||||
if(istype(W,/obj/item/weapon/screwdriver))
|
||||
open = !open
|
||||
user << "<span class='notice'>You [open ? "open" : "close"] the maintenance panel.</span>"
|
||||
if(default_deconstruction_screwdriver(user, W))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, W))
|
||||
return
|
||||
|
||||
if(open)
|
||||
if(istype(W, /obj/item/weapon/crowbar))
|
||||
dismantle()
|
||||
return
|
||||
|
||||
if(istype(W,/obj/item/weapon/disk/botany))
|
||||
if(loaded_disk)
|
||||
user << "There is already a data disk loaded."
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src))
|
||||
P.name = "paper - [form_title]"
|
||||
P.info = "[last_data]"
|
||||
if(istype(user,/mob/living/carbon/human) && !(user.l_hand && user.r_hand))
|
||||
if(istype(user,/mob/living/carbon/human))
|
||||
user.put_in_hands(P)
|
||||
user.visible_message("\The [src] spits out a piece of paper.")
|
||||
return
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
user << "<span class='notice'>You begin dismantling \the [src].</span>"
|
||||
if(do_after(user,25))
|
||||
user << "<span class='notice'>You dismantle \the [src].</span>"
|
||||
new /obj/item/stack/material/wood(get_turf(src), amount = 3)
|
||||
new /obj/item/stack/material/wood(get_turf(src), 3)
|
||||
for(var/obj/item/weapon/book/b in contents)
|
||||
b.loc = (get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
@@ -47,9 +47,11 @@
|
||||
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0)
|
||||
recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60)
|
||||
recipes += new/datum/stack_recipe("computer frame", /obj/structure/computerframe, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
//recipes += new/datum/stack_recipe("fire axe cabinet frame", /obj/item/frame/fireaxe_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe_list("airlock assemblies", list( \
|
||||
new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
@@ -70,13 +72,17 @@
|
||||
new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
|
||||
recipes += new/datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade)
|
||||
recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2)
|
||||
recipes += new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1)
|
||||
recipes += new/datum/stack_recipe("apc frame", /obj/item/frame/apc, 2)
|
||||
recipes += new/datum/stack_recipe("air alarm frame", /obj/item/frame/air_alarm, 2)
|
||||
recipes += new/datum/stack_recipe("fire alarm frame", /obj/item/frame/fire_alarm, 2)
|
||||
recipes += new/datum/stack_recipe_list("filing cabinets", list( \
|
||||
new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1), \
|
||||
))
|
||||
|
||||
/material/plasteel/generate_recipes()
|
||||
..()
|
||||
@@ -84,6 +90,7 @@
|
||||
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1)
|
||||
recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
|
||||
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor_dark, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1)
|
||||
|
||||
/material/sandstone/generate_recipes()
|
||||
..()
|
||||
@@ -99,6 +106,10 @@
|
||||
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0) // 100u
|
||||
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor_white, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor_freezer, 1, 4, 20)
|
||||
recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("airtight plastic flaps", /obj/structure/plasticflaps/mining, 5, time = 25, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 1, one_per_turf = 1, on_floor = 1)
|
||||
|
||||
/material/wood/generate_recipes()
|
||||
..()
|
||||
@@ -110,6 +121,7 @@
|
||||
recipes += new/datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4)
|
||||
recipes += new/datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1)
|
||||
recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1)
|
||||
recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1)
|
||||
|
||||
/material/cardboard/generate_recipes()
|
||||
..()
|
||||
|
||||
@@ -128,7 +128,7 @@ var/list/name_to_material
|
||||
S.add_fingerprint(user)
|
||||
S.add_to_stacks(user)
|
||||
|
||||
/material/proc/build_wired_product(var/mob/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack)
|
||||
/material/proc/build_wired_product(var/mob/living/user, var/obj/item/stack/used_stack, var/obj/item/stack/target_stack)
|
||||
if(!wire_product)
|
||||
user << "<span class='warning'>You cannot make anything out of \the [target_stack]</span>"
|
||||
return
|
||||
@@ -140,8 +140,7 @@ var/list/name_to_material
|
||||
target_stack.use(1)
|
||||
user << "<span class='notice'>You attach wire to the [name].</span>"
|
||||
var/obj/item/product = new wire_product(get_turf(user))
|
||||
if(!(user.l_hand && user.r_hand))
|
||||
user.put_in_hands(product)
|
||||
user.put_in_hands(product)
|
||||
|
||||
// Make sure we have a display name and shard icon even if they aren't explicitly set.
|
||||
/material/New()
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
name = "mining drill head"
|
||||
desc = "An enormous drill."
|
||||
icon_state = "mining_drill"
|
||||
circuit = /obj/item/weapon/circuitboard/miningdrill
|
||||
var/braces_needed = 2
|
||||
var/list/supports = list()
|
||||
var/supported = 0
|
||||
@@ -43,7 +44,6 @@
|
||||
..()
|
||||
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/miningdrill(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
||||
|
||||
@@ -172,10 +172,9 @@ var/list/mining_overlay_cache = list()
|
||||
|
||||
if(istype(AM,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand))
|
||||
attackby(H.l_hand,H)
|
||||
else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand)
|
||||
attackby(H.r_hand,H)
|
||||
var/obj/item/weapon/pickaxe/P = H.get_inactive_hand()
|
||||
if(istype(P))
|
||||
src.attackby(P, H)
|
||||
|
||||
else if(istype(AM,/mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = AM
|
||||
|
||||
@@ -1,43 +1,3 @@
|
||||
//This proc is called whenever someone clicks an inventory ui slot.
|
||||
/mob/proc/attack_ui(slot)
|
||||
var/obj/item/W = get_active_hand()
|
||||
if(istype(W))
|
||||
equip_to_slot_if_possible(W, slot)
|
||||
|
||||
/mob/proc/put_in_any_hand_if_possible(obj/item/W as obj, del_on_fail = 0, disable_warning = 1, redraw_mob = 1)
|
||||
if(equip_to_slot_if_possible(W, slot_l_hand, del_on_fail, disable_warning, redraw_mob))
|
||||
return 1
|
||||
else if(equip_to_slot_if_possible(W, slot_r_hand, del_on_fail, disable_warning, redraw_mob))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//This is a SAFE proc. Use this instead of equip_to_slot()!
|
||||
//set del_on_fail to have it delete W if it fails to equip
|
||||
//set disable_warning to disable the 'you are unable to equip that' warning.
|
||||
//unset redraw_mob to prevent the mob from being redrawn at the end.
|
||||
/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1)
|
||||
if(!istype(W)) return 0
|
||||
|
||||
if(!W.mob_can_equip(src, slot))
|
||||
if(del_on_fail)
|
||||
qdel(W)
|
||||
else
|
||||
if(!disable_warning)
|
||||
src << "\red You are unable to equip that." //Only print if del_on_fail is false
|
||||
return 0
|
||||
|
||||
equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail.
|
||||
return 1
|
||||
|
||||
//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task.
|
||||
//In most cases you will want to use equip_to_slot_if_possible()
|
||||
/mob/proc/equip_to_slot(obj/item/W as obj, slot)
|
||||
return
|
||||
|
||||
//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such.
|
||||
/mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot)
|
||||
return equip_to_slot_if_possible(W, slot, 1, 1, 0)
|
||||
|
||||
//The list of slots by priority. equip_to_appropriate_slot() uses this list. Doesn't matter if a mob type doesn't have a slot.
|
||||
var/list/slot_equipment_priority = list( \
|
||||
slot_back,\
|
||||
@@ -58,6 +18,49 @@ var/list/slot_equipment_priority = list( \
|
||||
slot_r_store\
|
||||
)
|
||||
|
||||
/mob
|
||||
var/obj/item/weapon/storage/s_active = null // Even ghosts can/should be able to peek into boxes on the ground
|
||||
|
||||
//This proc is called whenever someone clicks an inventory ui slot.
|
||||
/mob/proc/attack_ui(var/slot)
|
||||
var/obj/item/W = get_active_hand()
|
||||
if(istype(W))
|
||||
equip_to_slot_if_possible(W, slot)
|
||||
|
||||
/* Inventory manipulation */
|
||||
|
||||
/mob/proc/put_in_any_hand_if_possible(obj/item/W as obj, del_on_fail = 0, disable_warning = 1, redraw_mob = 1)
|
||||
if(equip_to_slot_if_possible(W, slot_l_hand, del_on_fail, disable_warning, redraw_mob))
|
||||
return 1
|
||||
else if(equip_to_slot_if_possible(W, slot_r_hand, del_on_fail, disable_warning, redraw_mob))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//This is a SAFE proc. Use this instead of equip_to_slot()!
|
||||
//set del_on_fail to have it delete W if it fails to equip
|
||||
//set disable_warning to disable the 'you are unable to equip that' warning.
|
||||
//unset redraw_mob to prevent the mob from being redrawn at the end.
|
||||
/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1)
|
||||
if(!W.mob_can_equip(src, slot))
|
||||
if(del_on_fail)
|
||||
qdel(W)
|
||||
else
|
||||
if(!disable_warning)
|
||||
src << "\red You are unable to equip that." //Only print if del_on_fail is false
|
||||
return 0
|
||||
|
||||
equip_to_slot(W, slot, redraw_mob) //This proc should not ever fail.
|
||||
return 1
|
||||
|
||||
//This is an UNSAFE proc. It merely handles the actual job of equipping. All the checks on whether you can or can't eqip need to be done before! Use mob_can_equip() for that task.
|
||||
//In most cases you will want to use equip_to_slot_if_possible()
|
||||
/mob/proc/equip_to_slot(obj/item/W as obj, slot)
|
||||
return
|
||||
|
||||
//This is just a commonly used configuration for the equip_to_slot_if_possible() proc, used to equip people when the rounds tarts and when events happen and such.
|
||||
/mob/proc/equip_to_slot_or_del(obj/item/W as obj, slot)
|
||||
return equip_to_slot_if_possible(W, slot, 1, 1, 0)
|
||||
|
||||
//Checks if a given slot can be accessed at this time, either to equip or unequip I
|
||||
/mob/proc/slot_is_accessible(var/slot, var/obj/item/I, mob/user=null)
|
||||
return 1
|
||||
@@ -65,8 +68,6 @@ var/list/slot_equipment_priority = list( \
|
||||
//puts the item "W" into an appropriate slot in a human's inventory
|
||||
//returns 0 if it cannot, 1 if successful
|
||||
/mob/proc/equip_to_appropriate_slot(obj/item/W)
|
||||
if(!istype(W)) return 0
|
||||
|
||||
for(var/slot in slot_equipment_priority)
|
||||
if(equip_to_slot_if_possible(W, slot, del_on_fail=0, disable_warning=1, redraw_mob=1))
|
||||
return 1
|
||||
@@ -74,32 +75,15 @@ var/list/slot_equipment_priority = list( \
|
||||
return 0
|
||||
|
||||
/mob/proc/equip_to_storage(obj/item/newitem)
|
||||
// Try put it in their backpack
|
||||
if(istype(src.back,/obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/backpack = src.back
|
||||
if(backpack.contents.len < backpack.storage_slots)
|
||||
newitem.forceMove(src.back)
|
||||
return 1
|
||||
|
||||
// Try to place it in any item that can store stuff, on the mob.
|
||||
for(var/obj/item/weapon/storage/S in src.contents)
|
||||
if (S.contents.len < S.storage_slots)
|
||||
newitem.forceMove(S)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//These procs handle putting s tuff in your hand. It's probably best to use these rather than setting l_hand = ...etc
|
||||
//as they handle all relevant stuff like adding it to the player's screen and updating their overlays.
|
||||
/* Hands */
|
||||
|
||||
//Returns the thing in our active hand
|
||||
/mob/proc/get_active_hand()
|
||||
if(hand) return l_hand
|
||||
else return r_hand
|
||||
|
||||
//Returns the thing in our inactive hand
|
||||
/mob/proc/get_inactive_hand()
|
||||
if(hand) return r_hand
|
||||
else return l_hand
|
||||
|
||||
//Puts the item into your l_hand if possible and calls all necessary triggers/updates. returns 1 on success.
|
||||
/mob/proc/put_in_l_hand(var/obj/item/W)
|
||||
@@ -150,16 +134,15 @@ var/list/slot_equipment_priority = list( \
|
||||
|
||||
//Drops the item in our left hand
|
||||
/mob/proc/drop_l_hand(var/atom/Target)
|
||||
return drop_from_inventory(l_hand, Target)
|
||||
return 0
|
||||
|
||||
//Drops the item in our right hand
|
||||
/mob/proc/drop_r_hand(var/atom/Target)
|
||||
return drop_from_inventory(r_hand, Target)
|
||||
return 0
|
||||
|
||||
//Drops the item in our active hand. TODO: rename this to drop_active_hand or something
|
||||
/mob/proc/drop_item(var/atom/Target)
|
||||
if(hand) return drop_l_hand(Target)
|
||||
else return drop_r_hand(Target)
|
||||
return
|
||||
|
||||
/*
|
||||
Removes the object from any slots the mob might have, calling the appropriate icon update proc.
|
||||
@@ -173,19 +156,6 @@ var/list/slot_equipment_priority = list( \
|
||||
the search through all the slots, without having to duplicate the rest of the item dropping.
|
||||
*/
|
||||
/mob/proc/u_equip(obj/W as obj)
|
||||
if (W == r_hand)
|
||||
r_hand = null
|
||||
update_inv_r_hand(0)
|
||||
else if (W == l_hand)
|
||||
l_hand = null
|
||||
update_inv_l_hand(0)
|
||||
else if (W == back)
|
||||
back = null
|
||||
update_inv_back(0)
|
||||
else if (W == wear_mask)
|
||||
wear_mask = null
|
||||
update_inv_wear_mask(0)
|
||||
return
|
||||
|
||||
/mob/proc/isEquipped(obj/item/I)
|
||||
if(!I)
|
||||
@@ -229,11 +199,6 @@ var/list/slot_equipment_priority = list( \
|
||||
|
||||
//Returns the item equipped to the specified slot, if any.
|
||||
/mob/proc/get_equipped_item(var/slot)
|
||||
switch(slot)
|
||||
if(slot_l_hand) return l_hand
|
||||
if(slot_r_hand) return r_hand
|
||||
if(slot_back) return back
|
||||
if(slot_wear_mask) return wear_mask
|
||||
return null
|
||||
|
||||
//Outdated but still in use apparently. This should at least be a human proc.
|
||||
|
||||
@@ -288,7 +288,7 @@
|
||||
|
||||
/* Assembly */
|
||||
|
||||
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/floor/T, mob/user as mob)
|
||||
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/floor/T, mob/living/user as mob)
|
||||
if(!istype(T, /obj/item/stack/tile/floor))
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
var/mob/living/carbon/human/H = over_object
|
||||
if(!istype(H) || !Adjacent(H))
|
||||
return ..()
|
||||
if(H.a_intent == "grab" && hat && !(H.l_hand && H.r_hand))
|
||||
if(H.a_intent == "grab" && hat && !H.hands_are_full())
|
||||
hat.loc = get_turf(src)
|
||||
H.put_in_hands(hat)
|
||||
H.visible_message("<span class='danger'>\The [H] removes \the [src]'s [hat].</span>")
|
||||
|
||||
@@ -3,40 +3,40 @@
|
||||
set name = "Give"
|
||||
|
||||
// TODO : Change to incapacitated() on merge.
|
||||
if(usr.stat || usr.lying || usr.resting || usr.buckled)
|
||||
if(src.stat || src.lying || src.resting || src.buckled)
|
||||
return
|
||||
if(!istype(target) || target.stat || target.lying || target.resting || target.buckled || target.client == null)
|
||||
return
|
||||
|
||||
var/obj/item/I = usr.get_active_hand()
|
||||
var/obj/item/I = src.get_active_hand()
|
||||
if(!I)
|
||||
I = usr.get_inactive_hand()
|
||||
I = src.get_inactive_hand()
|
||||
if(!I)
|
||||
usr << "<span class='warning'>You don't have anything in your hands to give to \the [target].</span>"
|
||||
src << "<span class='warning'>You don't have anything in your hands to give to \the [target].</span>"
|
||||
return
|
||||
|
||||
if(alert(target,"[usr] wants to give you \a [I]. Will you accept it?",,"No","Yes") == "No")
|
||||
target.visible_message("<span class='notice'>\The [usr] tried to hand \the [I] to \the [target], \
|
||||
if(alert(target,"[src] wants to give you \a [I]. Will you accept it?",,"No","Yes") == "No")
|
||||
target.visible_message("<span class='notice'>\The [src] tried to hand \the [I] to \the [target], \
|
||||
but \the [target] didn't want it.</span>")
|
||||
return
|
||||
|
||||
if(!I) return
|
||||
|
||||
if(!Adjacent(target))
|
||||
usr << "<span class='warning'>You need to stay in reaching distance while giving an object.</span>"
|
||||
target << "<span class='warning'>\The [usr] moved too far away.</span>"
|
||||
src << "<span class='warning'>You need to stay in reaching distance while giving an object.</span>"
|
||||
target << "<span class='warning'>\The [src] moved too far away.</span>"
|
||||
return
|
||||
|
||||
if(I.loc != usr || (usr.l_hand != I && usr.r_hand != I))
|
||||
usr << "<span class='warning'>You need to keep the item in your hands.</span>"
|
||||
target << "<span class='warning'>\The [usr] seems to have given up on passing \the [I] to you.</span>"
|
||||
if(I.loc != src || !src.item_is_in_hands(I))
|
||||
src << "<span class='warning'>You need to keep the item in your hands.</span>"
|
||||
target << "<span class='warning'>\The [src] seems to have given up on passing \the [I] to you.</span>"
|
||||
return
|
||||
|
||||
if(target.r_hand != null && target.l_hand != null)
|
||||
if(target.hands_are_full())
|
||||
target << "<span class='warning'>Your hands are full.</span>"
|
||||
usr << "<span class='warning'>Their hands are full.</span>"
|
||||
src << "<span class='warning'>Their hands are full.</span>"
|
||||
return
|
||||
|
||||
if(usr.unEquip(I))
|
||||
if(src.unEquip(I))
|
||||
target.put_in_hands(I) // If this fails it will just end up on the floor, but that's fitting for things like dionaea.
|
||||
target.visible_message("<span class='notice'>\The [usr] handed \the [I] to \the [target].</span>")
|
||||
target.visible_message("<span class='notice'>\The [src] handed \the [I] to \the [target].</span>")
|
||||
|
||||
@@ -538,9 +538,9 @@
|
||||
if ("handshake")
|
||||
m_type = 1
|
||||
if (!src.restrained() && !src.r_hand)
|
||||
var/mob/M = null
|
||||
var/mob/living/M = null
|
||||
if (param)
|
||||
for (var/mob/A in view(1, null))
|
||||
for (var/mob/living/A in view(1, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
|
||||
@@ -1115,9 +1115,11 @@
|
||||
spawn(0)
|
||||
regenerate_icons()
|
||||
if(vessel.total_volume < species.blood_volume)
|
||||
vessel.maximum_volume = species.blood_volume
|
||||
vessel.add_reagent("blood", species.blood_volume - vessel.total_volume)
|
||||
else if(vessel.total_volume > species.blood_volume)
|
||||
vessel.remove_reagent("blood", vessel.total_volume - species.blood_volume)
|
||||
vessel.maximum_volume = species.blood_volume
|
||||
fixblood()
|
||||
|
||||
// Rebuild the HUD. If they aren't logged in then login() should reinstantiate it for them.
|
||||
|
||||
@@ -207,7 +207,7 @@
|
||||
|
||||
var/covered = 0 // Basic coverage can help.
|
||||
for(var/obj/item/clothing/clothes in H)
|
||||
if(H.l_hand == clothes|| H.r_hand == clothes)
|
||||
if(H.item_is_in_hands(clothes))
|
||||
continue
|
||||
if((clothes.body_parts_covered & UPPER_TORSO) && (clothes.body_parts_covered & LOWER_TORSO))
|
||||
covered = 1
|
||||
|
||||
172
code/modules/mob/living/inventory.dm
Normal file
172
code/modules/mob/living/inventory.dm
Normal file
@@ -0,0 +1,172 @@
|
||||
/mob/living
|
||||
var/hand = null
|
||||
var/obj/item/l_hand = null
|
||||
var/obj/item/r_hand = null
|
||||
var/obj/item/weapon/back = null//Human/Monkey
|
||||
var/obj/item/weapon/tank/internal = null//Human/Monkey
|
||||
var/obj/item/clothing/mask/wear_mask = null//Carbon
|
||||
|
||||
/mob/living/equip_to_storage(obj/item/newitem)
|
||||
// Try put it in their backpack
|
||||
if(istype(src.back,/obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/backpack = src.back
|
||||
if(backpack.contents.len < backpack.storage_slots)
|
||||
newitem.forceMove(src.back)
|
||||
return 1
|
||||
|
||||
// Try to place it in any item that can store stuff, on the mob.
|
||||
for(var/obj/item/weapon/storage/S in src.contents)
|
||||
if (S.contents.len < S.storage_slots)
|
||||
newitem.forceMove(S)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//Returns the thing in our active hand
|
||||
/mob/living/get_active_hand()
|
||||
if(hand) return l_hand
|
||||
else return r_hand
|
||||
|
||||
//Returns the thing in our inactive hand
|
||||
/mob/living/get_inactive_hand()
|
||||
if(hand) return r_hand
|
||||
else return l_hand
|
||||
|
||||
//Drops the item in our active hand. TODO: rename this to drop_active_hand or something
|
||||
/mob/living/drop_item(var/atom/Target)
|
||||
if(hand) return drop_l_hand(Target)
|
||||
else return drop_r_hand(Target)
|
||||
|
||||
//Drops the item in our left hand
|
||||
/mob/living/drop_l_hand(var/atom/Target)
|
||||
return drop_from_inventory(l_hand, Target)
|
||||
|
||||
//Drops the item in our right hand
|
||||
/mob/living/drop_r_hand(var/atom/Target)
|
||||
return drop_from_inventory(r_hand, Target)
|
||||
|
||||
/mob/living/proc/hands_are_full()
|
||||
return (r_hand && l_hand)
|
||||
|
||||
/mob/living/proc/item_is_in_hands(var/obj/item/I)
|
||||
return (I == r_hand || I == l_hand)
|
||||
|
||||
/mob/living/proc/update_held_icons()
|
||||
if(l_hand)
|
||||
l_hand.update_held_icon()
|
||||
if(r_hand)
|
||||
r_hand.update_held_icon()
|
||||
|
||||
/mob/living/proc/get_type_in_hands(var/T)
|
||||
if(istype(l_hand, T))
|
||||
return l_hand
|
||||
if(istype(r_hand, T))
|
||||
return r_hand
|
||||
return null
|
||||
|
||||
/mob/living/proc/get_left_hand()
|
||||
return l_hand
|
||||
|
||||
/mob/living/proc/get_right_hand()
|
||||
return r_hand
|
||||
|
||||
/mob/living/u_equip(obj/W as obj)
|
||||
if (W == r_hand)
|
||||
r_hand = null
|
||||
update_inv_r_hand(0)
|
||||
else if (W == l_hand)
|
||||
l_hand = null
|
||||
update_inv_l_hand(0)
|
||||
else if (W == back)
|
||||
back = null
|
||||
update_inv_back(0)
|
||||
else if (W == wear_mask)
|
||||
wear_mask = null
|
||||
update_inv_wear_mask(0)
|
||||
return
|
||||
|
||||
/mob/living/get_equipped_item(var/slot)
|
||||
switch(slot)
|
||||
if(slot_l_hand) return l_hand
|
||||
if(slot_r_hand) return r_hand
|
||||
if(slot_back) return back
|
||||
if(slot_wear_mask) return wear_mask
|
||||
return null
|
||||
|
||||
/mob/living/show_inv(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
var/dat = {"
|
||||
<B><HR><FONT size=3>[name]</FONT></B>
|
||||
<BR><HR>
|
||||
<BR><B>Head(Mask):</B> <A href='?src=\ref[src];item=mask'>[(wear_mask ? wear_mask : "Nothing")]</A>
|
||||
<BR><B>Left Hand:</B> <A href='?src=\ref[src];item=l_hand'>[(l_hand ? l_hand : "Nothing")]</A>
|
||||
<BR><B>Right Hand:</B> <A href='?src=\ref[src];item=r_hand'>[(r_hand ? r_hand : "Nothing")]</A>
|
||||
<BR><B>Back:</B> <A href='?src=\ref[src];item=back'>[(back ? back : "Nothing")]</A> [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" <A href='?src=\ref[];item=internal'>Set Internal</A>", src) : "")]
|
||||
<BR>[(internal ? text("<A href='?src=\ref[src];item=internal'>Remove Internal</A>") : "")]
|
||||
<BR><A href='?src=\ref[src];item=pockets'>Empty Pockets</A>
|
||||
<BR><A href='?src=\ref[user];refresh=1'>Refresh</A>
|
||||
<BR><A href='?src=\ref[user];mach_close=mob[name]'>Close</A>
|
||||
<BR>"}
|
||||
user << browse(dat, text("window=mob[];size=325x500", name))
|
||||
onclose(user, "mob[name]")
|
||||
return
|
||||
|
||||
/mob/living/ret_grab(obj/effect/list_container/mobl/L as obj, flag)
|
||||
if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) )))
|
||||
if (!( L ))
|
||||
return null
|
||||
else
|
||||
return L.container
|
||||
else
|
||||
if (!( L ))
|
||||
L = new /obj/effect/list_container/mobl( null )
|
||||
L.container += src
|
||||
L.master = src
|
||||
if (istype(l_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = l_hand
|
||||
if (!( L.container.Find(G.affecting) ))
|
||||
L.container += G.affecting
|
||||
if (G.affecting)
|
||||
G.affecting.ret_grab(L, 1)
|
||||
if (istype(r_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = r_hand
|
||||
if (!( L.container.Find(G.affecting) ))
|
||||
L.container += G.affecting
|
||||
if (G.affecting)
|
||||
G.affecting.ret_grab(L, 1)
|
||||
if (!( flag ))
|
||||
if (L.master == src)
|
||||
var/list/temp = list( )
|
||||
temp += L.container
|
||||
//L = null
|
||||
qdel(L)
|
||||
return temp
|
||||
else
|
||||
return L.container
|
||||
return
|
||||
|
||||
/mob/living/mode()
|
||||
set name = "Activate Held Object"
|
||||
set category = "Object"
|
||||
set src = usr
|
||||
|
||||
if(istype(loc,/obj/mecha)) return
|
||||
|
||||
if(hand)
|
||||
var/obj/item/W = l_hand
|
||||
if (W)
|
||||
W.attack_self(src)
|
||||
update_inv_l_hand()
|
||||
else
|
||||
var/obj/item/W = r_hand
|
||||
if (W)
|
||||
W.attack_self(src)
|
||||
update_inv_r_hand()
|
||||
return
|
||||
|
||||
/mob/living/abiotic(var/full_body = 0)
|
||||
if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask)))
|
||||
return 1
|
||||
|
||||
if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )))
|
||||
return 1
|
||||
return 0
|
||||
@@ -865,3 +865,63 @@ default behaviour is:
|
||||
sleep(350)
|
||||
lastpuke = 0
|
||||
|
||||
/mob/living/update_canmove()
|
||||
if(!resting && cannot_stand() && can_stand_overridden())
|
||||
lying = 0
|
||||
canmove = 1
|
||||
else
|
||||
if(istype(buckled, /obj/vehicle))
|
||||
var/obj/vehicle/V = buckled
|
||||
if(cannot_stand())
|
||||
lying = 0
|
||||
canmove = 1
|
||||
pixel_y = V.mob_offset_y - 5
|
||||
else
|
||||
if(buckled.buckle_lying != -1) lying = buckled.buckle_lying
|
||||
canmove = 1
|
||||
pixel_y = V.mob_offset_y
|
||||
else if(buckled)
|
||||
anchored = 1
|
||||
canmove = 0
|
||||
if(istype(buckled))
|
||||
if(buckled.buckle_lying != -1)
|
||||
lying = buckled.buckle_lying
|
||||
if(buckled.buckle_movable)
|
||||
anchored = 0
|
||||
canmove = 1
|
||||
|
||||
else if(cannot_stand())
|
||||
lying = 1
|
||||
canmove = 0
|
||||
else if(stunned)
|
||||
canmove = 0
|
||||
else if(captured)
|
||||
anchored = 1
|
||||
canmove = 0
|
||||
lying = 0
|
||||
else
|
||||
lying = 0
|
||||
canmove = 1
|
||||
|
||||
if(lying)
|
||||
density = 0
|
||||
if(l_hand) unEquip(l_hand)
|
||||
if(r_hand) unEquip(r_hand)
|
||||
else
|
||||
density = initial(density)
|
||||
|
||||
for(var/obj/item/weapon/grab/G in grabbed_by)
|
||||
if(G.state >= GRAB_AGGRESSIVE)
|
||||
canmove = 0
|
||||
break
|
||||
|
||||
//Temporarily moved here from the various life() procs
|
||||
//I'm fixing stuff incrementally so this will likely find a better home.
|
||||
//It just makes sense for now. ~Carn
|
||||
if( update_icon ) //forces a full overlay update
|
||||
update_icon = 0
|
||||
regenerate_icons()
|
||||
else if( lying != lying_prev )
|
||||
update_icons()
|
||||
return canmove
|
||||
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
//Has a list of items that it can hold.
|
||||
var/list/can_hold = list(
|
||||
/obj/item/weapon/cell,
|
||||
/obj/item/weapon/firealarm_electronics,
|
||||
/obj/item/weapon/airalarm_electronics,
|
||||
/obj/item/weapon/airlock_electronics,
|
||||
/obj/item/weapon/tracker_electronics,
|
||||
/obj/item/weapon/module/power_control,
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
//Parrots will generally sit on their pertch unless something catches their eye.
|
||||
//These vars store their preffered perch and if they dont have one, what they can use as a perch
|
||||
var/obj/parrot_perch = null
|
||||
var/obj/desired_perches = list(/obj/structure/computerframe, /obj/structure/displaycase, \
|
||||
var/obj/desired_perches = list(/obj/structure/frame, /obj/structure/displaycase, \
|
||||
/obj/structure/filingcabinet, /obj/machinery/teleport, \
|
||||
/obj/machinery/computer, /obj/machinery/clonepod, \
|
||||
/obj/machinery/dna_scannernew, /obj/machinery/telecomms, \
|
||||
|
||||
@@ -195,21 +195,6 @@
|
||||
|
||||
|
||||
/mob/proc/show_inv(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
var/dat = {"
|
||||
<B><HR><FONT size=3>[name]</FONT></B>
|
||||
<BR><HR>
|
||||
<BR><B>Head(Mask):</B> <A href='?src=\ref[src];item=mask'>[(wear_mask ? wear_mask : "Nothing")]</A>
|
||||
<BR><B>Left Hand:</B> <A href='?src=\ref[src];item=l_hand'>[(l_hand ? l_hand : "Nothing")]</A>
|
||||
<BR><B>Right Hand:</B> <A href='?src=\ref[src];item=r_hand'>[(r_hand ? r_hand : "Nothing")]</A>
|
||||
<BR><B>Back:</B> <A href='?src=\ref[src];item=back'>[(back ? back : "Nothing")]</A> [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" <A href='?src=\ref[];item=internal'>Set Internal</A>", src) : "")]
|
||||
<BR>[(internal ? text("<A href='?src=\ref[src];item=internal'>Remove Internal</A>") : "")]
|
||||
<BR><A href='?src=\ref[src];item=pockets'>Empty Pockets</A>
|
||||
<BR><A href='?src=\ref[user];refresh=1'>Refresh</A>
|
||||
<BR><A href='?src=\ref[user];mach_close=mob[name]'>Close</A>
|
||||
<BR>"}
|
||||
user << browse(dat, text("window=mob[];size=325x500", name))
|
||||
onclose(user, "mob[name]")
|
||||
return
|
||||
|
||||
//mob verbs are faster than object verbs. See http://www.byond.com/forum/?post=1326139&page=2#comment8198716 for why this isn't atom/verb/examine()
|
||||
@@ -248,37 +233,6 @@
|
||||
|
||||
|
||||
/mob/proc/ret_grab(obj/effect/list_container/mobl/L as obj, flag)
|
||||
if ((!( istype(l_hand, /obj/item/weapon/grab) ) && !( istype(r_hand, /obj/item/weapon/grab) )))
|
||||
if (!( L ))
|
||||
return null
|
||||
else
|
||||
return L.container
|
||||
else
|
||||
if (!( L ))
|
||||
L = new /obj/effect/list_container/mobl( null )
|
||||
L.container += src
|
||||
L.master = src
|
||||
if (istype(l_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = l_hand
|
||||
if (!( L.container.Find(G.affecting) ))
|
||||
L.container += G.affecting
|
||||
if (G.affecting)
|
||||
G.affecting.ret_grab(L, 1)
|
||||
if (istype(r_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = r_hand
|
||||
if (!( L.container.Find(G.affecting) ))
|
||||
L.container += G.affecting
|
||||
if (G.affecting)
|
||||
G.affecting.ret_grab(L, 1)
|
||||
if (!( flag ))
|
||||
if (L.master == src)
|
||||
var/list/temp = list( )
|
||||
temp += L.container
|
||||
//L = null
|
||||
qdel(L)
|
||||
return temp
|
||||
else
|
||||
return L.container
|
||||
return
|
||||
|
||||
/mob/verb/mode()
|
||||
@@ -286,18 +240,6 @@
|
||||
set category = "Object"
|
||||
set src = usr
|
||||
|
||||
if(istype(loc,/obj/mecha)) return
|
||||
|
||||
if(hand)
|
||||
var/obj/item/W = l_hand
|
||||
if (W)
|
||||
W.attack_self(src)
|
||||
update_inv_l_hand()
|
||||
else
|
||||
var/obj/item/W = r_hand
|
||||
if (W)
|
||||
W.attack_self(src)
|
||||
update_inv_r_hand()
|
||||
return
|
||||
|
||||
/*
|
||||
@@ -735,65 +677,6 @@
|
||||
|
||||
//Updates canmove, lying and icons. Could perhaps do with a rename but I can't think of anything to describe it.
|
||||
/mob/proc/update_canmove()
|
||||
|
||||
if(!resting && cannot_stand() && can_stand_overridden())
|
||||
lying = 0
|
||||
canmove = 1
|
||||
else
|
||||
if(istype(buckled, /obj/vehicle))
|
||||
var/obj/vehicle/V = buckled
|
||||
if(cannot_stand())
|
||||
lying = 0
|
||||
canmove = 1
|
||||
pixel_y = V.mob_offset_y - 5
|
||||
else
|
||||
if(buckled.buckle_lying != -1) lying = buckled.buckle_lying
|
||||
canmove = 1
|
||||
pixel_y = V.mob_offset_y
|
||||
else if(buckled)
|
||||
anchored = 1
|
||||
canmove = 0
|
||||
if(istype(buckled))
|
||||
if(buckled.buckle_lying != -1)
|
||||
lying = buckled.buckle_lying
|
||||
if(buckled.buckle_movable)
|
||||
anchored = 0
|
||||
canmove = 1
|
||||
|
||||
else if(cannot_stand())
|
||||
lying = 1
|
||||
canmove = 0
|
||||
else if(stunned)
|
||||
canmove = 0
|
||||
else if(captured)
|
||||
anchored = 1
|
||||
canmove = 0
|
||||
lying = 0
|
||||
else
|
||||
lying = 0
|
||||
canmove = 1
|
||||
|
||||
if(lying)
|
||||
density = 0
|
||||
if(l_hand) unEquip(l_hand)
|
||||
if(r_hand) unEquip(r_hand)
|
||||
else
|
||||
density = initial(density)
|
||||
|
||||
for(var/obj/item/weapon/grab/G in grabbed_by)
|
||||
if(G.state >= GRAB_AGGRESSIVE)
|
||||
canmove = 0
|
||||
break
|
||||
|
||||
//Temporarily moved here from the various life() procs
|
||||
//I'm fixing stuff incrementally so this will likely find a better home.
|
||||
//It just makes sense for now. ~Carn
|
||||
if( update_icon ) //forces a full overlay update
|
||||
update_icon = 0
|
||||
regenerate_icons()
|
||||
else if( lying != lying_prev )
|
||||
update_icons()
|
||||
|
||||
return canmove
|
||||
|
||||
|
||||
@@ -1007,8 +890,7 @@ mob/proc/yank_out_object()
|
||||
R.adjustFireLoss(10)
|
||||
|
||||
selection.forceMove(get_turf(src))
|
||||
if(!(U.l_hand && U.r_hand))
|
||||
U.put_in_hands(selection)
|
||||
U.put_in_hands(selection)
|
||||
|
||||
for(var/obj/item/weapon/O in pinned)
|
||||
if(O == selection)
|
||||
|
||||
@@ -60,7 +60,6 @@
|
||||
var/next_move = null
|
||||
var/transforming = null //Carbon
|
||||
var/other = 0.0
|
||||
var/hand = null
|
||||
var/eye_blind = null //Carbon
|
||||
var/eye_blurry = null //Carbon
|
||||
var/ear_deaf = null //Carbon
|
||||
@@ -119,12 +118,6 @@
|
||||
var/m_intent = "run"//Living
|
||||
var/lastKnownIP = null
|
||||
var/obj/buckled = null//Living
|
||||
var/obj/item/l_hand = null//Living
|
||||
var/obj/item/r_hand = null//Living
|
||||
var/obj/item/weapon/back = null//Human/Monkey
|
||||
var/obj/item/weapon/tank/internal = null//Human/Monkey
|
||||
var/obj/item/weapon/storage/s_active = null//Carbon
|
||||
var/obj/item/clothing/mask/wear_mask = null//Carbon
|
||||
|
||||
var/seer = 0 //for cult//Carbon, probably Human
|
||||
|
||||
|
||||
@@ -5,8 +5,10 @@
|
||||
///Called by client/Move()
|
||||
///Checks to see if you are grabbing anything and if moving will affect your grab.
|
||||
/client/proc/Process_Grab()
|
||||
for(var/obj/item/weapon/grab/G in list(mob.l_hand, mob.r_hand))
|
||||
G.reset_kill_state() //no wandering across the station/asteroid while choking someone
|
||||
if(istype(mob, /mob/living))
|
||||
var/mob/living/L = mob
|
||||
for(var/obj/item/weapon/grab/G in list(L.l_hand, L.r_hand))
|
||||
G.reset_kill_state() //no wandering across the station/asteroid while choking someone
|
||||
|
||||
/obj/item/weapon/grab
|
||||
name = "grab"
|
||||
|
||||
@@ -288,12 +288,6 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
|
||||
|
||||
|
||||
/mob/proc/abiotic(var/full_body = 0)
|
||||
if(full_body && ((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )) || (src.back || src.wear_mask)))
|
||||
return 1
|
||||
|
||||
if((src.l_hand && !( src.l_hand.abstract )) || (src.r_hand && !( src.r_hand.abstract )))
|
||||
return 1
|
||||
|
||||
return 0
|
||||
|
||||
//converts intent-strings into numbers and back
|
||||
|
||||
@@ -19,6 +19,15 @@
|
||||
/mob/proc/update_inv_back()
|
||||
return
|
||||
|
||||
/mob/proc/update_inv_active_hand()
|
||||
return
|
||||
|
||||
/mob/living/update_inv_active_hand(var/A)
|
||||
if(hand)
|
||||
update_inv_l_hand(A)
|
||||
else
|
||||
update_inv_r_hand(A)
|
||||
|
||||
/mob/proc/update_inv_l_hand()
|
||||
return
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
if (2)
|
||||
take_damage(4)
|
||||
|
||||
/obj/item/organ/external/attack_self(var/mob/user)
|
||||
/obj/item/organ/external/attack_self(var/mob/living/user)
|
||||
if(!contents.len)
|
||||
return ..()
|
||||
var/list/removable_objects = list()
|
||||
@@ -113,8 +113,7 @@
|
||||
var/obj/item/I = pick(removable_objects)
|
||||
I.loc = get_turf(user) //just in case something was embedded that is not an item
|
||||
if(istype(I))
|
||||
if(!(user.l_hand && user.r_hand))
|
||||
user.put_in_hands(I)
|
||||
user.put_in_hands(I)
|
||||
user.visible_message("<span class='danger'>\The [user] rips \the [I] out of \the [src]!</span>")
|
||||
return //no eating the limb until everything's been removed
|
||||
return ..()
|
||||
@@ -128,7 +127,7 @@
|
||||
usr << "<span class='danger'>There is \a [I] sticking out of it.</span>"
|
||||
return
|
||||
|
||||
/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/living/user as mob)
|
||||
switch(stage)
|
||||
if(0)
|
||||
if(istype(W,/obj/item/weapon/scalpel))
|
||||
@@ -145,8 +144,7 @@
|
||||
if(contents.len)
|
||||
var/obj/item/removing = pick(contents)
|
||||
removing.loc = get_turf(user.loc)
|
||||
if(!(user.l_hand && user.r_hand))
|
||||
user.put_in_hands(removing)
|
||||
user.put_in_hands(removing)
|
||||
user.visible_message("<span class='danger'><b>[user]</b> extracts [removing] from [src] with [W]!</span>")
|
||||
else
|
||||
user.visible_message("<span class='danger'><b>[user]</b> fishes around fruitlessly in [src] with [W].</span>")
|
||||
|
||||
@@ -14,6 +14,7 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
|
||||
use_power = 1
|
||||
idle_power_usage = 30
|
||||
active_power_usage = 200
|
||||
frame_type = "fax"
|
||||
|
||||
var/obj/item/weapon/card/id/scan = null // identification
|
||||
var/authenticated = 0
|
||||
|
||||
@@ -17,12 +17,10 @@
|
||||
density = 1
|
||||
anchored = 1
|
||||
|
||||
|
||||
/obj/structure/filingcabinet/chestdrawer
|
||||
name = "chest drawer"
|
||||
icon_state = "chestdrawer"
|
||||
|
||||
|
||||
/obj/structure/filingcabinet/filingcabinet //not changing the path to avoid unecessary map issues, but please don't name stuff like this in the future -Pete
|
||||
icon_state = "tallcabinet"
|
||||
|
||||
@@ -46,6 +44,16 @@
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
anchored = !anchored
|
||||
user << "<span class='notice'>You [anchored ? "wrench" : "unwrench"] \the [src].</span>"
|
||||
else if(istype(P, /obj/item/weapon/screwdriver))
|
||||
user << "<span class='notice'>You begin taking the [name] apart.</span>"
|
||||
if(do_after(user, 10))
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
user << "<span class='notice'>You take the [name] apart.</span>"
|
||||
new /obj/item/stack/material/steel( src.loc, 4 )
|
||||
for(var/obj/item/I in contents)
|
||||
I.forceMove(loc)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
user << "<span class='notice'>You can't put [P] in [src]!</span>"
|
||||
|
||||
@@ -151,7 +159,7 @@
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(src)
|
||||
P.info = "<CENTER><B>Medical Record</B></CENTER><BR>"
|
||||
P.info += "Name: [G.fields["name"]] ID: [G.fields["id"]]<BR>\nSex: [G.fields["sex"]]<BR>\nAge: [G.fields["age"]]<BR>\nFingerprint: [G.fields["fingerprint"]]<BR>\nPhysical Status: [G.fields["p_stat"]]<BR>\nMental Status: [G.fields["m_stat"]]<BR>"
|
||||
|
||||
|
||||
P.info += "<BR>\n<CENTER><B>Medical Data</B></CENTER><BR>\nBlood Type: [M.fields["b_type"]]<BR>\nDNA: [M.fields["b_dna"]]<BR>\n<BR>\nMinor Disabilities: [M.fields["mi_dis"]]<BR>\nDetails: [M.fields["mi_dis_d"]]<BR>\n<BR>\nMajor Disabilities: [M.fields["ma_dis"]]<BR>\nDetails: [M.fields["ma_dis_d"]]<BR>\n<BR>\nAllergies: [M.fields["alg"]]<BR>\nDetails: [M.fields["alg_d"]]<BR>\n<BR>\nCurrent Diseases: [M.fields["cdi"]] (per disease info placed in log/comment section)<BR>\nDetails: [M.fields["cdi_d"]]<BR>\n<BR>\nImportant Notes:<BR>\n\t[M.fields["notes"]]<BR>\n<BR>\n<CENTER><B>Comments/Log</B></CENTER><BR>"
|
||||
var/counter = 1
|
||||
while(M.fields["com_[counter]"])
|
||||
|
||||
@@ -337,8 +337,9 @@
|
||||
var/obj/item/i = usr.get_active_hand() // Check to see if he still got that darn pen, also check if he's using a crayon or pen.
|
||||
var/iscrayon = 0
|
||||
if(!istype(i, /obj/item/weapon/pen))
|
||||
if(usr.back && istype(usr.back,/obj/item/weapon/rig))
|
||||
var/obj/item/weapon/rig/r = usr.back
|
||||
var/mob/living/M = usr
|
||||
if(istype(M) && M.back && istype(M.back,/obj/item/weapon/rig))
|
||||
var/obj/item/weapon/rig/r = M.back
|
||||
var/obj/item/rig_module/device/pen/m = locate(/obj/item/rig_module/device/pen) in r.installed_modules
|
||||
if(!r.offline && m)
|
||||
i = m.device
|
||||
|
||||
@@ -9,11 +9,21 @@
|
||||
idle_power_usage = 30
|
||||
active_power_usage = 200
|
||||
power_channel = EQUIP
|
||||
circuit = /obj/item/weapon/circuitboard/photocopier
|
||||
frame_type = "photocopier"
|
||||
var/obj/item/copyitem = null //what's in the copier!
|
||||
var/copies = 1 //how many copies to print!
|
||||
var/toner = 30 //how much toner is left! woooooo~
|
||||
var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier!
|
||||
|
||||
/obj/machinery/photocopier/New()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/motor(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/photocopier/attack_ai(mob/user as mob)
|
||||
return attack_hand(user)
|
||||
|
||||
@@ -126,6 +136,12 @@
|
||||
playsound(loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
anchored = !anchored
|
||||
user << "<span class='notice'>You [anchored ? "wrench" : "unwrench"] \the [src].</span>"
|
||||
|
||||
else if(default_deconstruction_screwdriver(user, O))
|
||||
return
|
||||
else if(default_deconstruction_crowbar(user, O))
|
||||
return
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/photocopier/ex_act(severity)
|
||||
|
||||
@@ -91,7 +91,7 @@ var/global/photo_count = 0
|
||||
/obj/item/weapon/storage/photo_album/MouseDrop(obj/over_object as obj)
|
||||
|
||||
if((istype(usr, /mob/living/carbon/human)))
|
||||
var/mob/M = usr
|
||||
var/mob/living/carbon/human/M = usr
|
||||
if(!( istype(over_object, /obj/screen) ))
|
||||
return ..()
|
||||
playsound(loc, "rustle", 50, 1, -5)
|
||||
|
||||
@@ -52,6 +52,10 @@
|
||||
name = "centcomm rubber stamp"
|
||||
icon_state = "stamp-cent"
|
||||
|
||||
/obj/item/weapon/stamp/qm
|
||||
name = "quartermaster's stamp"
|
||||
icon_state = "stamp-qm"
|
||||
|
||||
// Syndicate stamp to forge documents.
|
||||
/obj/item/weapon/stamp/chameleon/attack_self(mob/user as mob)
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
input_level_max = 0
|
||||
output_level_max = 0
|
||||
icon_state = "gsmes"
|
||||
circuit = /obj/item/weapon/circuitboard/batteryrack
|
||||
var/cells_amount = 0
|
||||
var/capacitors_amount = 0
|
||||
var/global/list/br_cache = null
|
||||
@@ -22,7 +23,6 @@
|
||||
//Maybe this should be moved up to obj/machinery
|
||||
/obj/machinery/power/smes/batteryrack/proc/add_parts()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/batteryrack
|
||||
component_parts += new /obj/item/weapon/cell/high
|
||||
component_parts += new /obj/item/weapon/cell/high
|
||||
component_parts += new /obj/item/weapon/cell/high
|
||||
@@ -49,7 +49,7 @@
|
||||
/obj/machinery/power/smes/batteryrack/update_icon()
|
||||
overlays.Cut()
|
||||
if(stat & BROKEN) return
|
||||
|
||||
|
||||
if(!br_cache)
|
||||
br_cache = list()
|
||||
br_cache.len = 7
|
||||
@@ -60,7 +60,7 @@
|
||||
br_cache[5] = image('icons/obj/power.dmi', "gsmes_og2")
|
||||
br_cache[6] = image('icons/obj/power.dmi', "gsmes_og3")
|
||||
br_cache[7] = image('icons/obj/power.dmi', "gsmes_og4")
|
||||
|
||||
|
||||
if (output_attempt)
|
||||
overlays += br_cache[1]
|
||||
if(inputting)
|
||||
@@ -83,9 +83,10 @@
|
||||
if (charge < (capacity / 100))
|
||||
if (!output_attempt && !input_attempt)
|
||||
playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
|
||||
var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
|
||||
var/obj/structure/frame/M = new /obj/structure/frame(src.loc)
|
||||
M.frame_type = "machine"
|
||||
M.state = 2
|
||||
M.icon_state = "box_1"
|
||||
M.icon_state = "machine_1"
|
||||
for(var/obj/I in component_parts)
|
||||
I.loc = src.loc
|
||||
qdel(src)
|
||||
@@ -117,12 +118,12 @@
|
||||
/obj/machinery/power/smes/batteryrack/makeshift
|
||||
name = "makeshift PSU"
|
||||
desc = "A rack of batteries connected by a mess of wires posing as a PSU."
|
||||
circuit = /obj/item/weapon/circuitboard/ghettosmes
|
||||
var/overcharge_percent = 0
|
||||
|
||||
|
||||
/obj/machinery/power/smes/batteryrack/makeshift/add_parts()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/ghettosmes
|
||||
component_parts += new /obj/item/weapon/cell/high
|
||||
component_parts += new /obj/item/weapon/cell/high
|
||||
component_parts += new /obj/item/weapon/cell/high
|
||||
|
||||
@@ -287,14 +287,15 @@
|
||||
else
|
||||
user << "\blue You close the access panel."
|
||||
else if(istype(O, /obj/item/weapon/crowbar) && open)
|
||||
var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc)
|
||||
var/obj/structure/frame/new_frame = new /obj/structure/frame(src.loc)
|
||||
for(var/obj/item/I in component_parts)
|
||||
I.loc = src.loc
|
||||
while ( sheets > 0 )
|
||||
DropFuel()
|
||||
|
||||
new_frame.frame_type = "machine"
|
||||
new_frame.state = 2
|
||||
new_frame.icon_state = "box_1"
|
||||
new_frame.icon_state = "machine_1"
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/power/port_gen/pacman/attack_hand(mob/user as mob)
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
density = 1
|
||||
anchored = 1
|
||||
use_power = 0
|
||||
circuit = /obj/item/weapon/circuitboard/smes
|
||||
|
||||
var/capacity = 5e6 // maximum charge
|
||||
var/charge = 1e6 // actual charge
|
||||
|
||||
@@ -116,7 +116,6 @@
|
||||
/obj/machinery/power/smes/buildable/New(var/install_coils = 1)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/stack/cable_coil(src,30)
|
||||
component_parts += new /obj/item/weapon/circuitboard/smes(src)
|
||||
src.wires = new /datum/wires/smes(src)
|
||||
|
||||
// Allows for mapped-in SMESs with larger capacity/IO
|
||||
@@ -345,9 +344,10 @@
|
||||
return
|
||||
|
||||
usr << "\red You have disassembled the SMES cell!"
|
||||
var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
|
||||
var/obj/structure/frame/M = new /obj/structure/frame(src.loc)
|
||||
M.frame_type = "machine"
|
||||
M.state = 2
|
||||
M.icon_state = "box_1"
|
||||
M.icon_state = "machine_1"
|
||||
for(var/obj/I in component_parts)
|
||||
I.loc = src.loc
|
||||
component_parts -= I
|
||||
|
||||
@@ -407,25 +407,27 @@ var/list/solars_list = list()
|
||||
if(do_after(user, 20))
|
||||
if (src.stat & BROKEN)
|
||||
user << "\blue The broken glass falls out."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
new /obj/item/weapon/material/shard( src.loc )
|
||||
var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
A.circuit = M
|
||||
A.frame_type = "computer"
|
||||
A.state = 3
|
||||
A.icon_state = "3"
|
||||
A.icon_state = "computer_3"
|
||||
A.anchored = 1
|
||||
qdel(src)
|
||||
else
|
||||
user << "\blue You disconnect the monitor."
|
||||
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A )
|
||||
for (var/obj/C in src)
|
||||
C.loc = src.loc
|
||||
A.circuit = M
|
||||
A.frame_type = "computer"
|
||||
A.state = 4
|
||||
A.icon_state = "4"
|
||||
A.icon_state = "computer_4"
|
||||
A.anchored = 1
|
||||
qdel(src)
|
||||
else
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
if(requires_two_hands)
|
||||
var/mob/living/M = loc
|
||||
if(istype(M))
|
||||
if((M.l_hand == src && !M.r_hand) || (M.r_hand == src && !M.l_hand))
|
||||
if(M.item_is_in_hands(src) && !M.hands_are_full())
|
||||
name = "[initial(name)] (wielded)"
|
||||
item_state = wielded_icon
|
||||
else
|
||||
@@ -179,7 +179,7 @@
|
||||
var/held_acc_mod = 0
|
||||
var/held_disp_mod = 0
|
||||
if(requires_two_hands)
|
||||
if((user.l_hand == src && user.r_hand) || (user.r_hand == src && user.l_hand))
|
||||
if(user.item_is_in_hands(src) && user.hands_are_full())
|
||||
held_acc_mod = -3
|
||||
held_disp_mod = 3
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/weapon/gun/projectile/colt
|
||||
var/unique_reskin
|
||||
name = "vintage .45 pistol"
|
||||
name = ".45 pistol"
|
||||
desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds."
|
||||
magazine_type = /obj/item/ammo_magazine/c45m
|
||||
icon_state = "colt"
|
||||
@@ -171,10 +171,10 @@
|
||||
name = "holdout signal pistol"
|
||||
magazine_type = /obj/item/ammo_magazine/mc9mm/flash
|
||||
|
||||
/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/user as mob)
|
||||
/obj/item/weapon/gun/projectile/pistol/attack_hand(mob/living/user as mob)
|
||||
if(user.get_inactive_hand() == src)
|
||||
if(silenced)
|
||||
if(user.l_hand != src && user.r_hand != src)
|
||||
if(!user.item_is_in_hands(src))
|
||||
..()
|
||||
return
|
||||
user << "<span class='notice'>You unscrew [silenced] from [src].</span>"
|
||||
@@ -185,9 +185,9 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/user as mob)
|
||||
/obj/item/weapon/gun/projectile/pistol/attackby(obj/item/I as obj, mob/living/user as mob)
|
||||
if(istype(I, /obj/item/weapon/silencer))
|
||||
if(user.l_hand != src && user.r_hand != src) //if we're not in his hands
|
||||
if(!user.item_is_in_hands(src)) //if we're not in his hands
|
||||
user << "<span class='notice'>You'll need [src] in your hands to do that.</span>"
|
||||
return
|
||||
user.drop_item()
|
||||
|
||||
@@ -113,7 +113,8 @@ obj/aiming_overlay/proc/update_aiming_deferred()
|
||||
|
||||
var/cancel_aim = 1
|
||||
|
||||
if(!(aiming_with in owner) || (istype(owner, /mob/living/carbon/human) && (owner.l_hand != aiming_with && owner.r_hand != aiming_with)))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(!(aiming_with in owner) || (istype(H) && !H.item_is_in_hands(aiming_with)))
|
||||
owner << "<span class='warning'>You must keep hold of your weapon!</span>"
|
||||
else if(owner.eye_blind)
|
||||
owner << "<span class='warning'>You are blind and cannot see your target!</span>"
|
||||
|
||||
@@ -310,6 +310,7 @@
|
||||
use_power = 1
|
||||
idle_power_usage = 5
|
||||
active_power_usage = 100
|
||||
circuit = /obj/item/weapon/circuitboard/grinder
|
||||
var/inuse = 0
|
||||
var/obj/item/weapon/reagent_containers/beaker = null
|
||||
var/limit = 10
|
||||
@@ -326,6 +327,10 @@
|
||||
/obj/machinery/reagentgrinder/New()
|
||||
..()
|
||||
beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/motor(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/gear(src)
|
||||
RefreshParts()
|
||||
return
|
||||
|
||||
/obj/machinery/reagentgrinder/update_icon()
|
||||
@@ -333,6 +338,11 @@
|
||||
return
|
||||
|
||||
/obj/machinery/reagentgrinder/attackby(var/obj/item/O as obj, var/mob/user as mob)
|
||||
if(beaker)
|
||||
if(default_deconstruction_screwdriver(user, O))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, O))
|
||||
return
|
||||
|
||||
if (istype(O,/obj/item/weapon/reagent_containers/glass) || \
|
||||
istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
/obj/machinery/sleeper,
|
||||
/obj/machinery/smartfridge/,
|
||||
/obj/machinery/biogenerator,
|
||||
/obj/machinery/constructable_frame,
|
||||
/obj/structure/frame,
|
||||
/obj/machinery/radiocarbon_spectrometer
|
||||
)
|
||||
|
||||
@@ -246,6 +246,17 @@
|
||||
var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
|
||||
overlays += lid
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/cooler_bottle
|
||||
desc = "A bottle for a water-cooler."
|
||||
name = "water-cooler bottle"
|
||||
icon = 'icons/obj/vending.dmi'
|
||||
icon_state = "water_cooler_bottle"
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 200)
|
||||
w_class = 3.0
|
||||
amount_per_transfer_from_this = 20
|
||||
possible_transfer_amounts = list(10,20,30,60,120)
|
||||
volume = 120
|
||||
|
||||
/*
|
||||
/obj/item/weapon/reagent_containers/glass/blender_jug
|
||||
name = "Blender Jug"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/obj/item/weapon/reagent_containers/pill
|
||||
name = "pill"
|
||||
desc = "a pill."
|
||||
desc = "A pill."
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = null
|
||||
item_state = "pill"
|
||||
|
||||
@@ -202,10 +202,51 @@
|
||||
icon_state = "water_cooler"
|
||||
possible_transfer_amounts = null
|
||||
anchored = 1
|
||||
New()
|
||||
..()
|
||||
reagents.add_reagent("water",500)
|
||||
var/bottle = 0
|
||||
|
||||
/obj/structure/reagent_dispensers/water_cooler/New()
|
||||
if(bottle == 1)
|
||||
..()
|
||||
reagents.add_reagent("water",120)
|
||||
else
|
||||
icon_state = "water_cooler_0"
|
||||
|
||||
/obj/structure/reagent_dispensers/water_cooler/attackby(obj/item/I as obj, mob/user as mob)
|
||||
if(istype(I, /obj/item/weapon/wrench))
|
||||
if(bottle)
|
||||
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
user << "<span class='notice'>You unfasten the jug.</span>"
|
||||
var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = new /obj/item/weapon/reagent_containers/glass/cooler_bottle( src.loc )
|
||||
for(var/datum/reagent/R in reagents.reagent_list)
|
||||
var/total_reagent = reagents.get_reagent_amount(R.id)
|
||||
G.reagents.add_reagent(R.id, total_reagent)
|
||||
reagents.clear_reagents()
|
||||
bottle = 0
|
||||
icon_state = "water_cooler_0"
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
if(!bottle)
|
||||
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
|
||||
user << "<span class='notice'>You take the water-cooler apart.</span>"
|
||||
new /obj/item/stack/material/plastic( src.loc, 4 )
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/weapon/reagent_containers/glass/cooler_bottle))
|
||||
if(!bottle)
|
||||
var/obj/item/weapon/reagent_containers/glass/cooler_bottle/G = I
|
||||
user << "<span class='notice'>You start to screw the bottle onto the water-cooler.</span>"
|
||||
if(do_after(user, 20))
|
||||
bottle = 1
|
||||
icon_state = "water_cooler"
|
||||
user << "<span class='notice'>You screw the bottle onto the water-cooler but accidently spill some!</span>" //you spill some because it for somereason transfers 5 units to the bottle after it gets attached but before it's deleted...
|
||||
for(var/datum/reagent/R in G.reagents.reagent_list)
|
||||
var/total_reagent = G.reagents.get_reagent_amount(R.id)
|
||||
reagents.add_reagent(R.id, total_reagent)
|
||||
qdel(G)
|
||||
return
|
||||
|
||||
/obj/structure/reagent_dispensers/beerkeg
|
||||
name = "beer keg"
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
desc = "A conveyor belt."
|
||||
layer = 2 // so they appear under stuff
|
||||
anchored = 1
|
||||
circuit = /obj/item/weapon/circuitboard/conveyor
|
||||
frame_type = "conveyor"
|
||||
var/operating = 0 // 1 if running forward, -1 if backwards, 0 if off
|
||||
var/operable = 1 // true if can operate (no broken segments in this belt run)
|
||||
var/forwards // this is the default (forward) direction, set by the map dir
|
||||
@@ -37,6 +39,14 @@
|
||||
operating = 1
|
||||
setmove()
|
||||
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/stock_parts/gear(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/motor(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/gear(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/motor(src)
|
||||
component_parts += new /obj/item/stack/cable_coil(src,5)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/conveyor/proc/setmove()
|
||||
if(operating == 1)
|
||||
movedir = forwards
|
||||
@@ -81,6 +91,23 @@
|
||||
if(isrobot(user)) return //Carn: fix for borgs dropping their modules on conveyor belts
|
||||
if(I.loc != user) return // This should stop mounted modules ending up outside the module.
|
||||
|
||||
if(default_deconstruction_screwdriver(user, I))
|
||||
return
|
||||
if(default_deconstruction_crowbar(user, I))
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/device/multitool))
|
||||
if(panel_open)
|
||||
var/input = sanitize(input(usr, "What id would you like to give this conveyor?", "Multitool-Conveyor interface", id))
|
||||
if(!input)
|
||||
usr << "No input found please hang up and try your call again."
|
||||
return
|
||||
id = input
|
||||
for(var/obj/machinery/conveyor_switch/C in world)
|
||||
if(C.id == id)
|
||||
C.conveyors += src
|
||||
return
|
||||
|
||||
user.drop_item(get_turf(src))
|
||||
return
|
||||
|
||||
@@ -221,6 +248,36 @@
|
||||
S.position = position
|
||||
S.update()
|
||||
|
||||
/obj/machinery/conveyor_switch/attackby(var/obj/item/I, mob/user)
|
||||
if(default_deconstruction_screwdriver(user, I))
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/weapon/weldingtool))
|
||||
if(panel_open)
|
||||
var/obj/item/weapon/weldingtool/WT = I
|
||||
if(!WT.remove_fuel(0, user))
|
||||
user << "The welding tool must be on to complete this task."
|
||||
return
|
||||
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
if(do_after(user, 20))
|
||||
if(!src || !WT.isOn()) return
|
||||
user << "<span class='notice'>You deconstruct the frame.</span>"
|
||||
new /obj/item/stack/material/steel( src.loc, 2 )
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(istype(I, /obj/item/device/multitool))
|
||||
if(panel_open)
|
||||
var/input = sanitize(input(usr, "What id would you like to give this conveyor switch?", "Multitool-Conveyor interface", id))
|
||||
if(!input)
|
||||
usr << "No input found please hang up and try your call again."
|
||||
return
|
||||
id = input
|
||||
for(var/obj/machinery/conveyor/C in world)
|
||||
if(C.id == id)
|
||||
conveyors += C
|
||||
return
|
||||
|
||||
/obj/machinery/conveyor_switch/oneway
|
||||
var/convdir = 1 //Set to 1 or -1 depending on which way you want the convayor to go. (In other words keep at 1 and set the proper dir on the belts.)
|
||||
desc = "A conveyor control switch. It appears to only go in one direction."
|
||||
|
||||
@@ -8,6 +8,7 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid).
|
||||
name = "Circuit Imprinter"
|
||||
icon_state = "circuit_imprinter"
|
||||
flags = OPENCONTAINER
|
||||
circuit = /obj/item/weapon/circuitboard/circuit_imprinter
|
||||
var/list/datum/design/queue = list()
|
||||
var/progress = 0
|
||||
|
||||
@@ -24,7 +25,6 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid).
|
||||
/obj/machinery/r_n_d/circuit_imprinter/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/circuit_imprinter(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
|
||||
|
||||
@@ -11,7 +11,7 @@ Note: Must be placed within 3 tiles of the R&D Console
|
||||
icon_state = "d_analyzer"
|
||||
var/obj/item/weapon/loaded_item = null
|
||||
var/decon_mod = 0
|
||||
|
||||
circuit = /obj/item/weapon/circuitboard/destructive_analyzer
|
||||
use_power = 1
|
||||
idle_power_usage = 30
|
||||
active_power_usage = 2500
|
||||
@@ -19,7 +19,6 @@ Note: Must be placed within 3 tiles of the R&D Console
|
||||
/obj/machinery/r_n_d/destructive_analyzer/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/destructive_analyzer(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "Protolathe"
|
||||
icon_state = "protolathe"
|
||||
flags = OPENCONTAINER
|
||||
|
||||
circuit = /obj/item/weapon/circuitboard/protolathe
|
||||
use_power = 1
|
||||
idle_power_usage = 30
|
||||
active_power_usage = 5000
|
||||
@@ -20,7 +20,6 @@
|
||||
/obj/machinery/r_n_d/protolathe/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/protolathe(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
|
||||
|
||||
@@ -13,11 +13,11 @@
|
||||
idle_power_usage = 800
|
||||
var/delay = 10
|
||||
req_access = list(access_rd) //Only the R&D can change server settings.
|
||||
circuit = /obj/item/weapon/circuitboard/rdserver
|
||||
|
||||
/obj/machinery/r_n_d/server/New()
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/rdserver(src)
|
||||
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
|
||||
component_parts += new /obj/item/stack/cable_coil(src)
|
||||
component_parts += new /obj/item/stack/cable_coil(src)
|
||||
|
||||
@@ -108,10 +108,9 @@
|
||||
. = ..()
|
||||
if(istype(AM,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if((istype(H.l_hand,/obj/item/weapon/pickaxe)) && (!H.hand))
|
||||
attackby(H.l_hand,H)
|
||||
else if((istype(H.r_hand,/obj/item/weapon/pickaxe)) && H.hand)
|
||||
attackby(H.r_hand,H)
|
||||
var/obj/item/weapon/pickaxe/P = H.get_inactive_hand()
|
||||
if(istype(P))
|
||||
src.attackby(P, H)
|
||||
|
||||
else if(istype(AM,/mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = AM
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
out += " have been detected "
|
||||
|
||||
//how the artifact does it's effect
|
||||
switch(A.my_effect.effect_type)
|
||||
switch(A.my_effect.effect)
|
||||
if(1)
|
||||
out += " emitting in an ambient energy field."
|
||||
if(2)
|
||||
@@ -224,7 +224,7 @@
|
||||
out += "low level radiation"
|
||||
|
||||
//how the artifact does it's effect
|
||||
switch(A.secondary_effect.effect_type)
|
||||
switch(A.secondary_effect.effect)
|
||||
if(1)
|
||||
out += " emitting in an ambient energy field."
|
||||
if(2)
|
||||
|
||||
@@ -9,9 +9,12 @@
|
||||
#define ARTIFACTSPAWNNUM_LOWER 6
|
||||
#define ARTIFACTSPAWNNUM_UPPER 12
|
||||
|
||||
datum/controller/game_controller/proc/SetupXenoarch()
|
||||
/datum/controller/game_controller/proc/SetupXenoarch()
|
||||
//create digsites
|
||||
for(var/turf/simulated/mineral/M in block(locate(1,1,1), locate(world.maxx, world.maxy, world.maxz)))
|
||||
if(!(M.density))
|
||||
continue
|
||||
|
||||
if(isnull(M.geologic_data))
|
||||
M.geologic_data = new/datum/geosample(M)
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "This device is used to trigger station functions, which require more than one ID card to authenticate."
|
||||
icon = 'icons/obj/monitors.dmi'
|
||||
icon_state = "auth_off"
|
||||
circuit = /obj/item/weapon/circuitboard/keycard_auth
|
||||
var/active = 0 //This gets set to 1 on all devices except the one where the initial request was made.
|
||||
var/event = ""
|
||||
var/screen = 1
|
||||
@@ -40,6 +41,24 @@
|
||||
event_triggered_by = usr
|
||||
broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices
|
||||
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
user << "You remove the faceplate from the [src]"
|
||||
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
|
||||
var/obj/item/weapon/circuitboard/M = new circuit( A )
|
||||
A.frame_type = "keycard"
|
||||
A.pixel_x = pixel_x
|
||||
A.pixel_y = pixel_y
|
||||
A.set_dir(dir)
|
||||
A.circuit = M
|
||||
A.anchored = 1
|
||||
for (var/obj/C in src)
|
||||
C.forceMove(loc)
|
||||
A.state = 3
|
||||
A.icon_state = "keycard_3"
|
||||
M.deconstruct(src)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/machinery/keycard_auth/power_change()
|
||||
..()
|
||||
if(stat &NOPOWER)
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
internal_bleeding = 1
|
||||
break
|
||||
|
||||
return affected.open >= 2 && internal_bleeding
|
||||
return affected.open == (affected.encased ? 3 : 2) && internal_bleeding
|
||||
|
||||
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
var/obj/item/organ/external/affected = target.get_organ(target_zone)
|
||||
@@ -206,4 +206,4 @@
|
||||
|
||||
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
|
||||
user.visible_message("<span class='danger'>[user]'s [tool] can't quite seem to get through the metal...</span>", \
|
||||
"<span class='danger'>Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.</span>")
|
||||
"<span class='danger'>Your [tool] can't quite seem to get through the metal. It's weakening, though - try again.</span>")
|
||||
|
||||
Reference in New Issue
Block a user