Merge branch 'master' into upstream-merge-29964
This commit is contained in:
@@ -238,7 +238,7 @@
|
||||
blueeffect.icon_state = "shieldsparkles"
|
||||
blueeffect.layer = FLASH_LAYER
|
||||
blueeffect.plane = FULLSCREEN_PLANE
|
||||
blueeffect.mouse_opacity = 0
|
||||
blueeffect.mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
M.client.screen += blueeffect
|
||||
sleep(20)
|
||||
M.client.screen -= blueeffect
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
// The poster item
|
||||
|
||||
/obj/item/weapon/poster
|
||||
/obj/item/poster
|
||||
name = "poorly coded poster"
|
||||
desc = "You probably shouldn't be holding this."
|
||||
icon = 'icons/obj/contraband.dmi'
|
||||
@@ -12,7 +12,7 @@
|
||||
var/poster_type
|
||||
var/obj/structure/sign/poster/poster_structure
|
||||
|
||||
/obj/item/weapon/poster/Initialize(mapload, obj/structure/sign/poster/new_poster_structure)
|
||||
/obj/item/poster/Initialize(mapload, obj/structure/sign/poster/new_poster_structure)
|
||||
. = ..()
|
||||
poster_structure = new_poster_structure
|
||||
if(!new_poster_structure && poster_type)
|
||||
@@ -27,17 +27,17 @@
|
||||
|
||||
name = "[name] - [poster_structure.original_name]"
|
||||
|
||||
/obj/item/weapon/poster/Destroy()
|
||||
/obj/item/poster/Destroy()
|
||||
poster_structure = null
|
||||
. = ..()
|
||||
|
||||
// These icon_states may be overriden, but are for mapper's convinence
|
||||
/obj/item/weapon/poster/random_contraband
|
||||
/obj/item/poster/random_contraband
|
||||
name = "random contraband poster"
|
||||
poster_type = /obj/structure/sign/poster/contraband/random
|
||||
icon_state = "rolled_poster"
|
||||
|
||||
/obj/item/weapon/poster/random_official
|
||||
/obj/item/poster/random_official
|
||||
name = "random official poster"
|
||||
poster_type = /obj/structure/sign/poster/official/random
|
||||
icon_state = "rolled_legit"
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
|
||||
/obj/structure/sign/poster/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/wirecutters))
|
||||
if(istype(I, /obj/item/wirecutters))
|
||||
playsound(loc, I.usesound, 100, 1)
|
||||
if(ruined)
|
||||
to_chat(user, "<span class='notice'>You remove the remnants of the poster.</span>")
|
||||
@@ -111,12 +111,12 @@
|
||||
/obj/structure/sign/poster/proc/roll_and_drop(loc)
|
||||
pixel_x = 0
|
||||
pixel_y = 0
|
||||
var/obj/item/weapon/poster/P = new(loc, src)
|
||||
var/obj/item/poster/P = new(loc, src)
|
||||
forceMove(P)
|
||||
return P
|
||||
|
||||
//separated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby()
|
||||
/turf/closed/wall/proc/place_poster(obj/item/weapon/poster/P, mob/user)
|
||||
/turf/closed/wall/proc/place_poster(obj/item/poster/P, mob/user)
|
||||
if(!P.poster_structure)
|
||||
to_chat(user, "<span class='warning'>[P] has no poster... inside it? Inform a coder!</span>")
|
||||
return
|
||||
|
||||
@@ -22,8 +22,8 @@
|
||||
if(mergeable_decal)
|
||||
qdel(C)
|
||||
|
||||
/obj/effect/decal/cleanable/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/reagent_containers/glass) || istype(W, /obj/item/weapon/reagent_containers/food/drinks))
|
||||
/obj/effect/decal/cleanable/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/reagent_containers/glass) || istype(W, /obj/item/reagent_containers/food/drinks))
|
||||
if(src.reagents && W.reagents)
|
||||
. = 1 //so the containers don't splash their content on the src while scooping.
|
||||
if(!src.reagents.total_volume)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
name = "dirt"
|
||||
desc = "Someone should clean that up."
|
||||
icon_state = "dirt"
|
||||
mouse_opacity = 0
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
|
||||
/obj/effect/decal/cleanable/flour
|
||||
name = "flour"
|
||||
|
||||
@@ -8,7 +8,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
|
||||
|
||||
/obj/effect/particle_effect
|
||||
name = "particle effect"
|
||||
mouse_opacity = 0
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
pass_flags = PASSTABLE | PASSGRILLE
|
||||
|
||||
/obj/effect/particle_effect/New()
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
icon_state = "explosion"
|
||||
opacity = 1
|
||||
anchored = TRUE
|
||||
mouse_opacity = 0
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
pixel_x = -32
|
||||
pixel_y = -32
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
layer = WALL_OBJ_LAYER
|
||||
mouse_opacity = 0
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
var/amount = 3
|
||||
animate_movement = 0
|
||||
var/metal = 0
|
||||
@@ -29,6 +29,12 @@
|
||||
metal = ALUMINUM_FOAM
|
||||
icon_state = "mfoam"
|
||||
|
||||
/obj/effect/particle_effect/foam/metal/MakeSlippery()
|
||||
return
|
||||
|
||||
/obj/effect/particle_effect/foam/metal/smart
|
||||
name = "smart foam"
|
||||
|
||||
/obj/effect/particle_effect/foam/metal/iron
|
||||
name = "iron foam"
|
||||
metal = IRON_FOAM
|
||||
@@ -38,12 +44,16 @@
|
||||
metal = RESIN_FOAM
|
||||
|
||||
|
||||
/obj/effect/particle_effect/foam/New(loc)
|
||||
..(loc)
|
||||
/obj/effect/particle_effect/foam/Initialize()
|
||||
. = ..()
|
||||
MakeSlippery()
|
||||
create_reagents(1000) //limited by the size of the reagent holder anyway.
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
playsound(src, 'sound/effects/bubbles2.ogg', 80, 1, -3)
|
||||
|
||||
/obj/effect/particle_effect/foam/proc/MakeSlippery()
|
||||
AddComponent(/datum/component/slippery, 100)
|
||||
|
||||
/obj/effect/particle_effect/foam/Destroy()
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
return ..()
|
||||
@@ -61,6 +71,20 @@
|
||||
flick("[icon_state]-disolve", src)
|
||||
QDEL_IN(src, 5)
|
||||
|
||||
/obj/effect/particle_effect/foam/smart/kill_foam() //Smart foam adheres to area borders for walls
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
if(metal)
|
||||
var/turf/T = get_turf(src)
|
||||
if(isspaceturf(T)) //Block up any exposed space
|
||||
T.ChangeTurf(/turf/open/floor/plating/foam)
|
||||
for(var/direction in GLOB.cardinals)
|
||||
var/turf/cardinal_turf = get_step(T, direction)
|
||||
if(get_area(cardinal_turf) != get_area(T)) //We're at an area boundary, so let's block off this turf!
|
||||
new/obj/structure/foamedmetal(T)
|
||||
break
|
||||
flick("[icon_state]-disolve", src)
|
||||
QDEL_IN(src, 5)
|
||||
|
||||
/obj/effect/particle_effect/foam/process()
|
||||
lifetime--
|
||||
if(lifetime < 1)
|
||||
@@ -101,15 +125,6 @@
|
||||
lifetime--
|
||||
return 1
|
||||
|
||||
/obj/effect/particle_effect/foam/Crossed(atom/movable/AM)
|
||||
if(istype(AM, /mob/living/carbon))
|
||||
var/mob/living/carbon/M = AM
|
||||
M.slip(100, src)
|
||||
|
||||
/obj/effect/particle_effect/foam/metal/Crossed(atom/movable/AM)
|
||||
return
|
||||
|
||||
|
||||
/obj/effect/particle_effect/foam/proc/spread_foam()
|
||||
var/turf/t_loc = get_turf(src)
|
||||
for(var/turf/T in t_loc.GetAtmosAdjacentTurfs())
|
||||
@@ -151,6 +166,10 @@
|
||||
effect_type = /obj/effect/particle_effect/foam/metal
|
||||
|
||||
|
||||
/datum/effect_system/foam_spread/metal/smart
|
||||
effect_type = /obj/effect/particle_effect/foam/smart
|
||||
|
||||
|
||||
/datum/effect_system/foam_spread/New()
|
||||
..()
|
||||
chemholder = new /obj()
|
||||
@@ -252,6 +271,7 @@
|
||||
. = ..()
|
||||
if(isopenturf(loc))
|
||||
var/turf/open/O = loc
|
||||
O.ClearWet()
|
||||
if(O.air)
|
||||
var/datum/gas_mixture/G = O.air
|
||||
G.temperature = 293.15
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
opacity = 0
|
||||
layer = FLY_LAYER
|
||||
anchored = TRUE
|
||||
mouse_opacity = 0
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
animate_movement = 0
|
||||
var/amount = 4
|
||||
var/lifetime = 5
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name = "water"
|
||||
icon_state = "extinguish"
|
||||
var/life = 15
|
||||
mouse_opacity = 0
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
|
||||
|
||||
/obj/effect/particle_effect/water/New()
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
var/dat = "<B>Crew Manifest</B>:<BR>"
|
||||
for(var/mob/living/carbon/human/M in GLOB.mob_list)
|
||||
dat += text(" <B>[]</B> - []<BR>", M.name, M.get_assignment())
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( src.loc )
|
||||
var/obj/item/paper/P = new /obj/item/paper( src.loc )
|
||||
P.info = dat
|
||||
P.name = "paper- 'Crew Manifest'"
|
||||
//SN src = null
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
desc = "Better stay away from that thing."
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "uglymine"
|
||||
var/triggered = 0
|
||||
|
||||
@@ -129,8 +129,8 @@
|
||||
spawn(0)
|
||||
new /datum/hallucination/delusion(victim, TRUE, "demon",duration,0)
|
||||
|
||||
var/obj/item/weapon/twohanded/required/chainsaw/doomslayer/chainsaw = new(victim.loc)
|
||||
chainsaw.flags |= NODROP
|
||||
var/obj/item/twohanded/required/chainsaw/doomslayer/chainsaw = new(victim.loc)
|
||||
chainsaw.flags_1 |= NODROP_1
|
||||
victim.drop_all_held_items()
|
||||
victim.put_in_hands(chainsaw)
|
||||
chainsaw.attack_self(victim)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/obj/effect/spresent
|
||||
name = "strange present"
|
||||
desc = "It's a ... present?"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "strangepresent"
|
||||
density = TRUE
|
||||
anchored = FALSE
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/obj/effect/portal/attackby(obj/item/weapon/W, mob/user, params)
|
||||
/obj/effect/portal/attackby(obj/item/W, mob/user, params)
|
||||
if(user && Adjacent(user))
|
||||
teleport(user)
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
/obj/effect/spawner/newbomb/Initialize()
|
||||
. = ..()
|
||||
var/obj/item/device/transfer_valve/V = new(src.loc)
|
||||
var/obj/item/weapon/tank/internals/plasma/full/PT = new(V)
|
||||
var/obj/item/weapon/tank/internals/oxygen/OT = new(V)
|
||||
var/obj/item/tank/internals/plasma/full/PT = new(V)
|
||||
var/obj/item/tank/internals/oxygen/OT = new(V)
|
||||
|
||||
PT.air_contents.temperature = btemp1 + T0C
|
||||
OT.air_contents.temperature = btemp2 + T0C
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
items = list(
|
||||
/obj/item/clothing/suit/chickensuit,
|
||||
/obj/item/clothing/head/chicken,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg)
|
||||
/obj/item/reagent_containers/food/snacks/egg)
|
||||
|
||||
/obj/effect/spawner/bundle/costume/gladiator
|
||||
name = "gladitator costume spawner"
|
||||
@@ -77,7 +77,7 @@
|
||||
/obj/item/clothing/glasses/monocle,
|
||||
/obj/effect/spawner/lootdrop/minor/bowler_or_that,
|
||||
/obj/item/clothing/shoes/sneakers/black,
|
||||
/obj/item/weapon/cane,
|
||||
/obj/item/cane,
|
||||
/obj/item/clothing/under/sl_suit,
|
||||
/obj/item/clothing/mask/fakemoustache)
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
items = list(
|
||||
/obj/item/clothing/under/sundress,
|
||||
/obj/item/clothing/head/witchwig,
|
||||
/obj/item/weapon/staff/broom)
|
||||
/obj/item/staff/broom)
|
||||
|
||||
/obj/effect/spawner/bundle/costume/wizard
|
||||
name = "wizard costume spawner"
|
||||
@@ -155,7 +155,7 @@
|
||||
/obj/item/clothing/shoes/sandal,
|
||||
/obj/item/clothing/suit/wizrobe/fake,
|
||||
/obj/item/clothing/head/wizard/fake,
|
||||
/obj/item/weapon/staff)
|
||||
/obj/item/staff)
|
||||
|
||||
/obj/effect/spawner/bundle/costume/sexyclown
|
||||
name = "sexy clown costume spawner"
|
||||
|
||||
@@ -25,28 +25,28 @@
|
||||
lootdoubles = FALSE
|
||||
|
||||
loot = list(
|
||||
/obj/item/weapon/gun/ballistic/automatic/pistol = 8,
|
||||
/obj/item/weapon/gun/ballistic/shotgun/automatic/combat = 5,
|
||||
/obj/item/weapon/gun/ballistic/revolver/mateba,
|
||||
/obj/item/weapon/gun/ballistic/automatic/pistol/deagle
|
||||
/obj/item/gun/ballistic/automatic/pistol = 8,
|
||||
/obj/item/gun/ballistic/shotgun/automatic/combat = 5,
|
||||
/obj/item/gun/ballistic/revolver/mateba,
|
||||
/obj/item/gun/ballistic/automatic/pistol/deagle
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/gambling
|
||||
name = "gambling valuables spawner"
|
||||
loot = list(
|
||||
/obj/item/weapon/gun/ballistic/revolver/russian = 5,
|
||||
/obj/item/weapon/storage/box/syndie_kit/throwing_weapons = 1,
|
||||
/obj/item/gun/ballistic/revolver/russian = 5,
|
||||
/obj/item/storage/box/syndie_kit/throwing_weapons = 1,
|
||||
/obj/item/toy/cards/deck/syndicate = 2
|
||||
)
|
||||
|
||||
/obj/effect/spawner/lootdrop/grille_or_trash
|
||||
name = "maint grille or trash spawner"
|
||||
loot = list(/obj/structure/grille = 5,
|
||||
/obj/item/weapon/cigbutt = 1,
|
||||
/obj/item/cigbutt = 1,
|
||||
/obj/item/trash/cheesie = 1,
|
||||
/obj/item/trash/candy = 1,
|
||||
/obj/item/trash/chips = 1,
|
||||
/obj/item/trash/deadmouse = 1,
|
||||
/obj/item/reagent_containers/food/snacks/deadmouse = 1,
|
||||
/obj/item/trash/pistachios = 1,
|
||||
/obj/item/trash/plate = 1,
|
||||
/obj/item/trash/popcorn = 1,
|
||||
@@ -59,25 +59,25 @@
|
||||
lootcount = 3
|
||||
lootdoubles = FALSE
|
||||
var/soups = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/soup/beet,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/soup/sweetpotato,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/soup/stew,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/soup/hotchili,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/soup/nettle,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/soup/meatball)
|
||||
/obj/item/reagent_containers/food/snacks/soup/beet,
|
||||
/obj/item/reagent_containers/food/snacks/soup/sweetpotato,
|
||||
/obj/item/reagent_containers/food/snacks/soup/stew,
|
||||
/obj/item/reagent_containers/food/snacks/soup/hotchili,
|
||||
/obj/item/reagent_containers/food/snacks/soup/nettle,
|
||||
/obj/item/reagent_containers/food/snacks/soup/meatball)
|
||||
var/salads = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/salad/herbsalad,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/salad/validsalad,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/salad/fruit,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/salad/jungle,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/salad/aesirsalad)
|
||||
/obj/item/reagent_containers/food/snacks/salad/herbsalad,
|
||||
/obj/item/reagent_containers/food/snacks/salad/validsalad,
|
||||
/obj/item/reagent_containers/food/snacks/salad/fruit,
|
||||
/obj/item/reagent_containers/food/snacks/salad/jungle,
|
||||
/obj/item/reagent_containers/food/snacks/salad/aesirsalad)
|
||||
var/mains = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/bearsteak,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/enchiladas,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/burger/bigbite,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/burger/superbite,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/burger/fivealarm)
|
||||
/obj/item/reagent_containers/food/snacks/bearsteak,
|
||||
/obj/item/reagent_containers/food/snacks/enchiladas,
|
||||
/obj/item/reagent_containers/food/snacks/stewedsoymeat,
|
||||
/obj/item/reagent_containers/food/snacks/burger/bigbite,
|
||||
/obj/item/reagent_containers/food/snacks/burger/superbite,
|
||||
/obj/item/reagent_containers/food/snacks/burger/fivealarm)
|
||||
|
||||
/obj/effect/spawner/lootdrop/three_course_meal/Initialize(mapload)
|
||||
loot = list(pick(soups) = 1,pick(salads) = 1,pick(mains) = 1)
|
||||
|
||||
@@ -15,19 +15,295 @@ again.
|
||||
new I(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
|
||||
//normal windows
|
||||
|
||||
/obj/effect/spawner/structure/window
|
||||
icon = 'icons/obj/structures.dmi'
|
||||
icon = 'icons/obj/structures_spawners.dmi'
|
||||
icon_state = "window_spawner"
|
||||
name = "window spawner"
|
||||
spawn_list = list(
|
||||
/obj/structure/grille,
|
||||
/obj/structure/window/fulltile
|
||||
)
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/fulltile)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow
|
||||
name = "hollow window spawner"
|
||||
icon_state = "hwindow_spawner_full"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/north, /obj/structure/window/spawner/east, /obj/structure/window/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/corner
|
||||
icon_state = "hwindow_spawner_corner_se"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/corner/northeast
|
||||
icon_state = "hwindow_spawner_corner_ne"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/north, /obj/structure/window/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/corner/northwest
|
||||
icon_state = "hwindow_spawner_corner_nw"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/north, /obj/structure/window/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/corner/southwest
|
||||
icon_state = "hwindow_spawner_corner_sw"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/end
|
||||
icon_state = "hwindow_spawner_end_s"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/east, /obj/structure/window/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/end/north
|
||||
icon_state = "hwindow_spawner_end_n"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/north, /obj/structure/window/spawner/east, /obj/structure/window/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/end/east
|
||||
icon_state = "hwindow_spawner_end_e"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/north, /obj/structure/window/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/end/west
|
||||
icon_state = "hwindow_spawner_end_w"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/north, /obj/structure/window/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/middle
|
||||
icon_state = "hwindow_spawner_ns"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window, /obj/structure/window/spawner/north)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/middle/vertical
|
||||
icon_state = "hwindow_spawner_ew"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/east, /obj/structure/window/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/one_side
|
||||
icon_state = "hwindow_spawner_single_s"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/one_side/north
|
||||
icon_state = "hwindow_spawner_single_n"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/north)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/one_side/east
|
||||
icon_state = "hwindow_spawner_single_e"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/one_side/west
|
||||
icon_state = "hwindow_spawner_single_w"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/spawner/west)
|
||||
|
||||
|
||||
//reinforced
|
||||
|
||||
/obj/effect/spawner/structure/window/reinforced
|
||||
name = "reinforced window spawner"
|
||||
icon_state = "rwindow_spawner"
|
||||
spawn_list = list(
|
||||
/obj/structure/grille,
|
||||
/obj/structure/window/reinforced/fulltile
|
||||
)
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/fulltile)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced
|
||||
name = "hollow reinforced window spawner"
|
||||
icon_state = "hrwindow_spawner_full"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/north, /obj/structure/window/reinforced/spawner/east, /obj/structure/window/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/corner
|
||||
icon_state = "hrwindow_spawner_corner_se"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/corner/northeast
|
||||
icon_state = "hrwindow_spawner_corner_ne"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/north, /obj/structure/window/reinforced/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/corner/northwest
|
||||
icon_state = "hrwindow_spawner_corner_nw"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/north, /obj/structure/window/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/corner/southwest
|
||||
icon_state = "hrwindow_spawner_corner_sw"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/end
|
||||
icon_state = "hrwindow_spawner_end_s"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/east, /obj/structure/window/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/end/north
|
||||
icon_state = "hrwindow_spawner_end_n"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/north, /obj/structure/window/reinforced/spawner/east, /obj/structure/window/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/end/east
|
||||
icon_state = "hrwindow_spawner_end_e"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/north, /obj/structure/window/reinforced/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/end/west
|
||||
icon_state = "hrwindow_spawner_end_w"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/north, /obj/structure/window/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/middle
|
||||
icon_state = "hrwindow_spawner_ns"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced, /obj/structure/window/reinforced/spawner/north)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/middle/vertical
|
||||
icon_state = "hrwindow_spawner_ew"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/east, /obj/structure/window/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/one_side
|
||||
icon_state = "hrwindow_spawner_single_s"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/one_side/north
|
||||
icon_state = "hrwindow_spawner_single_n"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/north)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/one_side/east
|
||||
icon_state = "hrwindow_spawner_single_e"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/reinforced/one_side/west
|
||||
icon_state = "hrwindow_spawner_single_w"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/spawner/west)
|
||||
|
||||
|
||||
//tinted
|
||||
|
||||
/obj/effect/spawner/structure/window/reinforced/tinted
|
||||
name = "tinted reinforced window spawner"
|
||||
icon_state = "twindow_spawner"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/reinforced/tinted/fulltile)
|
||||
|
||||
|
||||
//shuttle window
|
||||
|
||||
/obj/effect/spawner/structure/window/shuttle
|
||||
name = "reinforced tinted window spawner"
|
||||
icon_state = "swindow_spawner"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/shuttle)
|
||||
|
||||
|
||||
//plasma windows
|
||||
|
||||
/obj/effect/spawner/structure/window/plasma
|
||||
name = "plasma window spawner"
|
||||
icon_state = "pwindow_spawner"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/fulltile)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma
|
||||
name = "hollow plasma window spawner"
|
||||
icon_state = "phwindow_spawner_full"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/north, /obj/structure/window/plasma/spawner/east, /obj/structure/window/plasma/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/corner
|
||||
icon_state = "phwindow_spawner_corner_se"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/corner/northeast
|
||||
icon_state = "phwindow_spawner_corner_ne"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/north, /obj/structure/window/plasma/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/corner/northwest
|
||||
icon_state = "phwindow_spawner_corner_nw"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/north, /obj/structure/window/plasma/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/corner/southwest
|
||||
icon_state = "phwindow_spawner_corner_sw"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/end
|
||||
icon_state = "phwindow_spawner_end_s"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/east, /obj/structure/window/plasma/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/end/north
|
||||
icon_state = "phwindow_spawner_end_n"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/north, /obj/structure/window/plasma/spawner/east, /obj/structure/window/plasma/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/end/east
|
||||
icon_state = "phwindow_spawner_end_e"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/north, /obj/structure/window/plasma/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/end/west
|
||||
icon_state = "phwindow_spawner_end_w"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/north, /obj/structure/window/plasma/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/middle
|
||||
icon_state = "phwindow_spawner_ns"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma, /obj/structure/window/plasma/spawner/north)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/middle/vertical
|
||||
icon_state = "phwindow_spawner_ew"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/east, /obj/structure/window/plasma/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/one_side
|
||||
icon_state = "phwindow_spawner_single_s"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/one_side/north
|
||||
icon_state = "phwindow_spawner_single_n"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/north)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/one_side/east
|
||||
icon_state = "phwindow_spawner_single_e"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/one_side/west
|
||||
icon_state = "phwindow_spawner_single_w"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/spawner/west)
|
||||
|
||||
|
||||
//plasma reinforced
|
||||
|
||||
/obj/effect/spawner/structure/window/plasma/reinforced
|
||||
name = "reinforced plasma window spawner"
|
||||
icon_state = "prwindow_spawner"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/fulltile)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced
|
||||
name = "hollow reinforced plasma window spawner"
|
||||
icon_state = "phrwindow_spawner_full"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/east, /obj/structure/window/plasma/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/corner
|
||||
icon_state = "phrwindow_spawner_corner_se"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/corner/northeast
|
||||
icon_state = "phrwindow_spawner_corner_ne"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/corner/northwest
|
||||
icon_state = "phrwindow_spawner_corner_nw"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/corner/southwest
|
||||
icon_state = "phrwindow_spawner_corner_sw"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/end
|
||||
icon_state = "phrwindow_spawner_end_s"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/east, /obj/structure/window/plasma/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/end/north
|
||||
icon_state = "phrwindow_spawner_end_n"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/east, /obj/structure/window/plasma/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/end/east
|
||||
icon_state = "phrwindow_spawner_end_e"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/end/west
|
||||
icon_state = "phrwindow_spawner_end_w"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/north, /obj/structure/window/plasma/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/middle
|
||||
icon_state = "phrwindow_spawner_ns"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced, /obj/structure/window/plasma/reinforced/spawner/north)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/middle/vertical
|
||||
icon_state = "phrwindow_spawner_ew"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/east, /obj/structure/window/plasma/reinforced/spawner/west)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/one_side
|
||||
icon_state = "phrwindow_spawner_single_s"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/one_side/north
|
||||
icon_state = "phrwindow_spawner_single_n"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/north)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/one_side/east
|
||||
icon_state = "phrwindow_spawner_single_e"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/east)
|
||||
|
||||
/obj/effect/spawner/structure/window/hollow/plasma/reinforced/one_side/west
|
||||
icon_state = "phrwindow_spawner_single_w"
|
||||
spawn_list = list(/obj/structure/grille, /obj/structure/window/plasma/reinforced/spawner/west)
|
||||
|
||||
@@ -86,8 +86,8 @@
|
||||
transform = matrix()*2
|
||||
var/matrix/M = transform
|
||||
M.Turn(90)
|
||||
animate(src, alpha = 20, time = duration, easing = BOUNCE_EASING, flags = ANIMATION_PARALLEL)
|
||||
animate(src, transform = M, time = duration, flags = ANIMATION_PARALLEL)
|
||||
animate(src, alpha = 20, time = duration, easing = BOUNCE_EASING, flags_1 = ANIMATION_PARALLEL)
|
||||
animate(src, transform = M, time = duration, flags_1 = ANIMATION_PARALLEL)
|
||||
|
||||
/obj/effect/temp_visual/ratvar/ocular_warden
|
||||
name = "warden's gaze"
|
||||
|
||||
@@ -65,8 +65,8 @@
|
||||
var/matrix/M = transform
|
||||
M.Turn(turnedness)
|
||||
transform = M
|
||||
animate(src, alpha = 255, time = duration, easing = BOUNCE_EASING, flags = ANIMATION_PARALLEL)
|
||||
animate(src, transform = oldtransform, time = duration, flags = ANIMATION_PARALLEL)
|
||||
animate(src, alpha = 255, time = duration, easing = BOUNCE_EASING, flags_1 = ANIMATION_PARALLEL)
|
||||
animate(src, transform = oldtransform, time = duration, flags_1 = ANIMATION_PARALLEL)
|
||||
|
||||
/obj/effect/temp_visual/cult/rune_spawn/rune1
|
||||
icon_state = "rune1words"
|
||||
|
||||
@@ -188,12 +188,15 @@
|
||||
name = mimiced_atom.name
|
||||
appearance = mimiced_atom.appearance
|
||||
setDir(mimiced_atom.dir)
|
||||
mouse_opacity = 0
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
|
||||
/obj/effect/temp_visual/decoy/fading/Initialize(mapload, atom/mimiced_atom)
|
||||
. = ..()
|
||||
animate(src, alpha = 0, time = duration)
|
||||
|
||||
/obj/effect/temp_visual/decoy/fading/threesecond
|
||||
duration = 40
|
||||
|
||||
/obj/effect/temp_visual/decoy/fading/fivesecond
|
||||
duration = 50
|
||||
|
||||
@@ -374,7 +377,7 @@
|
||||
M = size_matrix*0.1
|
||||
else
|
||||
M = size_matrix*2
|
||||
animate(src, alpha = 20, transform = M, time = duration, flags = ANIMATION_PARALLEL)
|
||||
animate(src, alpha = 20, transform = M, time = duration, flags_1 = ANIMATION_PARALLEL)
|
||||
|
||||
/obj/effect/temp_visual/bleed/explode
|
||||
icon_state = "bleed10"
|
||||
@@ -394,7 +397,7 @@
|
||||
if(warp_color)
|
||||
color = list(warp_color, warp_color, warp_color, list(0,0,0))
|
||||
set_light(1.4, 1, warp_color)
|
||||
mouse_opacity = 0
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
var/matrix/skew = transform
|
||||
skew = skew.Turn(180)
|
||||
skew = skew.Interpolate(transform, 0.5)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
icon_state = "nothing"
|
||||
anchored = TRUE
|
||||
layer = ABOVE_MOB_LAYER
|
||||
mouse_opacity = 0
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
var/duration = 10 //in deciseconds
|
||||
var/randomdir = TRUE
|
||||
var/timerid
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/weapon/poster/wanted
|
||||
/obj/item/poster/wanted
|
||||
icon_state = "rolled_poster"
|
||||
|
||||
/obj/item/weapon/poster/wanted/Initialize(mapload, icon/person_icon, wanted_name, description)
|
||||
/obj/item/poster/wanted/Initialize(mapload, icon/person_icon, wanted_name, description)
|
||||
. = ..(mapload, new /obj/structure/sign/poster/wanted(src, person_icon, wanted_name, description))
|
||||
name = "wanted poster ([wanted_name])"
|
||||
desc = "A wanted poster for [wanted_name]."
|
||||
@@ -32,7 +32,7 @@
|
||||
icon = the_icon
|
||||
|
||||
/obj/structure/sign/poster/wanted/roll_and_drop(turf/location)
|
||||
var/obj/item/weapon/poster/P = ..(location)
|
||||
var/obj/item/poster/P = ..(location)
|
||||
P.name = "wanted poster ([wanted_name])"
|
||||
P.desc = "A wanted poster for [wanted_name]."
|
||||
return P
|
||||
|
||||
+25
-23
@@ -6,7 +6,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
|
||||
/obj/item
|
||||
name = "item"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
var/item_state = null
|
||||
var/lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
|
||||
var/righthand_file = 'icons/mob/inhands/items_righthand.dmi'
|
||||
@@ -35,10 +35,10 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
pressure_resistance = 4
|
||||
var/obj/item/master = null
|
||||
|
||||
var/heat_protection = 0 //flags which determine which body parts are protected from heat. Use the HEAD, CHEST, GROIN, etc. flags. See setup.dm
|
||||
var/cold_protection = 0 //flags which determine which body parts are protected from cold. Use the HEAD, CHEST, GROIN, etc. flags. See setup.dm
|
||||
var/max_heat_protection_temperature //Set this variable to determine up to which temperature (IN KELVIN) the item protects against heat damage. Keep at null to disable protection. Only protects areas set by heat_protection flags
|
||||
var/min_cold_protection_temperature //Set this variable to determine down to which temperature (IN KELVIN) the item protects against cold damage. 0 is NOT an acceptable number due to if(varname) tests!! Keep at null to disable protection. Only protects areas set by cold_protection flags
|
||||
var/heat_protection = 0 //flags_1 which determine which body parts are protected from heat. Use the HEAD, CHEST, GROIN, etc. flags_1. See setup.dm
|
||||
var/cold_protection = 0 //flags_1 which determine which body parts are protected from cold. Use the HEAD, CHEST, GROIN, etc. flags_1. See setup.dm
|
||||
var/max_heat_protection_temperature //Set this variable to determine up to which temperature (IN KELVIN) the item protects against heat damage. Keep at null to disable protection. Only protects areas set by heat_protection flags_1
|
||||
var/min_cold_protection_temperature //Set this variable to determine down to which temperature (IN KELVIN) the item protects against cold damage. 0 is NOT an acceptable number due to if(varname) tests!! Keep at null to disable protection. Only protects areas set by cold_protection flags_1
|
||||
|
||||
var/list/actions //list of /datum/action's that this item has.
|
||||
var/list/actions_types //list of paths of action datums to give to the item on New().
|
||||
@@ -48,7 +48,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
|
||||
var/item_color = null //this needs deprecating, soonish
|
||||
|
||||
var/body_parts_covered = 0 //see setup.dm for appropriate bit flags
|
||||
var/body_parts_covered = 0 //see setup.dm for appropriate bit flags_1
|
||||
//var/heat_transfer_coefficient = 1 //0 prevents all transfers, 1 is invisible
|
||||
var/gas_transfer_coefficient = 1 // for leaking gas from turf to mask and vice-versa (for masks right now, but at some point, i'd like to include space helmets)
|
||||
var/permeability_coefficient = 1 // for chemicals/diseases
|
||||
@@ -86,7 +86,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
var/embedded_unsafe_removal_pain_multiplier = EMBEDDED_UNSAFE_REMOVAL_PAIN_MULTIPLIER //The coefficient of multiplication for the damage removing this without surgery causes (this*w_class)
|
||||
var/embedded_unsafe_removal_time = EMBEDDED_UNSAFE_REMOVAL_TIME //A time in ticks, multiplied by the w_class.
|
||||
|
||||
var/flags_cover = 0 //for flags such as GLASSESCOVERSEYES
|
||||
var/flags_cover = 0 //for flags_1 such as GLASSESCOVERSEYES
|
||||
var/heat = 0
|
||||
var/sharpness = IS_BLUNT
|
||||
var/toolspeed = 1
|
||||
@@ -112,6 +112,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
var/tip_timer
|
||||
var/force_string_override
|
||||
|
||||
var/trigger_guard = TRIGGER_GUARD_NONE
|
||||
|
||||
/obj/item/Initialize()
|
||||
if (!materials)
|
||||
materials = list()
|
||||
@@ -127,7 +129,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
force_string_override = TRUE
|
||||
|
||||
/obj/item/Destroy()
|
||||
flags &= ~DROPDEL //prevent reqdels
|
||||
flags_1 &= ~DROPDEL_1 //prevent reqdels
|
||||
if(ismob(loc))
|
||||
var/mob/m = loc
|
||||
m.temporarilyRemoveItemFromInventory(src, TRUE)
|
||||
@@ -252,9 +254,9 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
C.update_damage_overlays()
|
||||
|
||||
|
||||
if(istype(loc, /obj/item/weapon/storage))
|
||||
if(istype(loc, /obj/item/storage))
|
||||
//If the item is in a storage item, take it out
|
||||
var/obj/item/weapon/storage/S = loc
|
||||
var/obj/item/storage/S = loc
|
||||
S.remove_from_storage(src, user.loc)
|
||||
|
||||
if(throwing)
|
||||
@@ -275,8 +277,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
if(anchored)
|
||||
return
|
||||
|
||||
if(istype(loc, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = loc
|
||||
if(istype(loc, /obj/item/storage))
|
||||
var/obj/item/storage/S = loc
|
||||
S.remove_from_storage(src, user.loc)
|
||||
|
||||
if(throwing)
|
||||
@@ -301,7 +303,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
attack_paw(A)
|
||||
|
||||
/obj/item/attack_ai(mob/user)
|
||||
if(istype(src.loc, /obj/item/weapon/robot_module))
|
||||
if(istype(src.loc, /obj/item/robot_module))
|
||||
//If the item is part of a cyborg module, equip it
|
||||
if(!iscyborg(user))
|
||||
return
|
||||
@@ -313,9 +315,9 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
// Due to storage type consolidation this should get used more now.
|
||||
// I have cleaned it up a little, but it could probably use more. -Sayu
|
||||
// The lack of ..() is intentional, do not add one
|
||||
/obj/item/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = W
|
||||
/obj/item/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/storage))
|
||||
var/obj/item/storage/S = W
|
||||
if(S.use_to_pickup)
|
||||
if(S.collection_mode) //Mode is set to collect multiple items on a tile and we clicked on a valid one.
|
||||
if(isturf(loc))
|
||||
@@ -341,7 +343,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
else if(S.can_be_inserted(src))
|
||||
S.handle_item_insertion(src)
|
||||
|
||||
/obj/item/proc/handle_mass_pickup(obj/item/weapon/storage/S, list/things, atom/thing_loc, list/rejections, datum/progressbar/progress)
|
||||
/obj/item/proc/handle_mass_pickup(obj/item/storage/S, list/things, atom/thing_loc, list/rejections, datum/progressbar/progress)
|
||||
for(var/obj/item/I in things)
|
||||
things -= I
|
||||
if(I.loc != thing_loc)
|
||||
@@ -378,7 +380,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
for(var/X in actions)
|
||||
var/datum/action/A = X
|
||||
A.Remove(user)
|
||||
if(DROPDEL & flags)
|
||||
if(DROPDEL_1 & flags_1)
|
||||
qdel(src)
|
||||
in_inventory = FALSE
|
||||
|
||||
@@ -389,11 +391,11 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
|
||||
|
||||
// called when this item is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called.
|
||||
/obj/item/proc/on_exit_storage(obj/item/weapon/storage/S)
|
||||
/obj/item/proc/on_exit_storage(obj/item/storage/S)
|
||||
return
|
||||
|
||||
// called when this item is added into a storage item, which is passed on as S. The loc variable is already set to the storage item.
|
||||
/obj/item/proc/on_enter_storage(obj/item/weapon/storage/S)
|
||||
/obj/item/proc/on_enter_storage(obj/item/storage/S)
|
||||
return
|
||||
|
||||
// called when "found" in pockets and storage items. Returns 1 if the search should end.
|
||||
@@ -566,11 +568,11 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
throw_speed = initial(throw_speed) //explosions change this.
|
||||
in_inventory = FALSE
|
||||
|
||||
/obj/item/proc/remove_item_from_storage(atom/newLoc) //please use this if you're going to snowflake an item out of a obj/item/weapon/storage
|
||||
/obj/item/proc/remove_item_from_storage(atom/newLoc) //please use this if you're going to snowflake an item out of a obj/item/storage
|
||||
if(!newLoc)
|
||||
return 0
|
||||
if(istype(loc, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = loc
|
||||
if(istype(loc, /obj/item/storage))
|
||||
var/obj/item/storage/S = loc
|
||||
S.remove_from_storage(src,newLoc)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
+566
-566
File diff suppressed because it is too large
Load Diff
@@ -8,11 +8,11 @@ RCD
|
||||
ARCD
|
||||
*/
|
||||
|
||||
obj/item/weapon/construction
|
||||
obj/item/construction
|
||||
opacity = 0
|
||||
density = FALSE
|
||||
anchored = FALSE
|
||||
flags = CONDUCT | NOBLUDGEON
|
||||
flags_1 = CONDUCT_1 | NOBLUDGEON_1
|
||||
force = 0
|
||||
throwforce = 10
|
||||
throw_speed = 3
|
||||
@@ -30,7 +30,7 @@ obj/item/weapon/construction
|
||||
var/plasteelmultiplier = 3 //Plasteel is worth 3 times more than glass or metal
|
||||
var/no_ammo_message = "<span class='warning'>The \'Low Ammo\' light on the device blinks yellow.</span>"
|
||||
|
||||
/obj/item/weapon/construction/Initialize()
|
||||
/obj/item/construction/Initialize()
|
||||
..()
|
||||
desc = "A [src]. It currently holds [matter]/[max_matter] matter-units."
|
||||
spark_system = new /datum/effect_system/spark_spread
|
||||
@@ -38,16 +38,16 @@ obj/item/weapon/construction
|
||||
spark_system.attach(src)
|
||||
|
||||
|
||||
/obj/item/weapon/construction/Destroy()
|
||||
/obj/item/construction/Destroy()
|
||||
QDEL_NULL(spark_system)
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/construction/attackby(obj/item/weapon/W, mob/user, params)
|
||||
/obj/item/construction/attackby(obj/item/W, mob/user, params)
|
||||
if(iscyborg(user))
|
||||
return
|
||||
var/loaded = 0
|
||||
if(istype(W, /obj/item/weapon/rcd_ammo))
|
||||
var/obj/item/weapon/rcd_ammo/R = W
|
||||
if(istype(W, /obj/item/rcd_ammo))
|
||||
var/obj/item/rcd_ammo/R = W
|
||||
if((matter + R.ammoamt) > max_matter)
|
||||
to_chat(user, "<span class='warning'>The [src] can't hold any more matter-units!</span>")
|
||||
return
|
||||
@@ -65,7 +65,7 @@ obj/item/weapon/construction
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/construction/proc/loadwithsheets(obj/item/stack/sheet/S, value, mob/user)
|
||||
/obj/item/construction/proc/loadwithsheets(obj/item/stack/sheet/S, value, mob/user)
|
||||
var/maxsheets = round((max_matter-matter)/value) //calculate the max number of sheets that will fit in RCD
|
||||
if(maxsheets > 0)
|
||||
var/amount_to_use = min(S.amount, maxsheets)
|
||||
@@ -77,15 +77,15 @@ obj/item/weapon/construction
|
||||
to_chat(user, "<span class='warning'>You can't insert any more [S.name] sheets into the [src]!")
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/construction/proc/activate()
|
||||
/obj/item/construction/proc/activate()
|
||||
playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
|
||||
|
||||
/obj/item/weapon/construction/attack_self(mob/user)
|
||||
/obj/item/construction/attack_self(mob/user)
|
||||
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
|
||||
if(prob(20))
|
||||
spark_system.start()
|
||||
|
||||
/obj/item/weapon/construction/proc/useResource(amount, mob/user)
|
||||
/obj/item/construction/proc/useResource(amount, mob/user)
|
||||
if(matter < amount)
|
||||
if(user)
|
||||
to_chat(user, no_ammo_message)
|
||||
@@ -95,27 +95,27 @@ obj/item/weapon/construction
|
||||
update_icon()
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/construction/proc/checkResource(amount, mob/user)
|
||||
/obj/item/construction/proc/checkResource(amount, mob/user)
|
||||
. = matter >= amount
|
||||
if(!. && user)
|
||||
to_chat(user, no_ammo_message)
|
||||
return .
|
||||
|
||||
/obj/item/weapon/construction/proc/range_check(atom/A, mob/user)
|
||||
/obj/item/construction/proc/range_check(atom/A, mob/user)
|
||||
if(!(A in view(7, get_turf(user))))
|
||||
to_chat(user, "<span class='warning'>The \'Out of Range\' light on the [src] blinks red.</span>")
|
||||
return FALSE
|
||||
else
|
||||
return TRUE
|
||||
|
||||
/obj/item/weapon/construction/proc/prox_check(proximity)
|
||||
/obj/item/construction/proc/prox_check(proximity)
|
||||
if(proximity)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
|
||||
/obj/item/weapon/construction/rcd
|
||||
/obj/item/construction/rcd
|
||||
name = "rapid-construction-device (RCD)"
|
||||
desc = "A device used to rapidly build and deconstruct walls and floors."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
@@ -135,11 +135,11 @@ obj/item/weapon/construction
|
||||
var/delay_mod = 1
|
||||
|
||||
|
||||
/obj/item/weapon/construction/rcd/suicide_act(mob/user)
|
||||
/obj/item/construction/rcd/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] sets the RCD to 'Wall' and points it down [user.p_their()] throat! It looks like [user.p_theyre()] trying to commit suicide..</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/construction/rcd/verb/toggle_window_type()
|
||||
/obj/item/construction/rcd/verb/toggle_window_type()
|
||||
set name = "Toggle Window Type"
|
||||
set category = "Object"
|
||||
set src in usr // What does this do?
|
||||
@@ -155,7 +155,7 @@ obj/item/weapon/construction
|
||||
|
||||
to_chat(usr, "<span class='notice'>You change \the [src]'s window mode to [window_type_name].</span>")
|
||||
|
||||
/obj/item/weapon/construction/rcd/verb/change_airlock_access()
|
||||
/obj/item/construction/rcd/verb/change_airlock_access()
|
||||
set name = "Change Airlock Access"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
@@ -204,7 +204,7 @@ obj/item/weapon/construction
|
||||
popup.open()
|
||||
onclose(usr, "airlock")
|
||||
|
||||
/obj/item/weapon/construction/rcd/Topic(href, href_list)
|
||||
/obj/item/construction/rcd/Topic(href, href_list)
|
||||
..()
|
||||
if (usr.stat || usr.restrained())
|
||||
return
|
||||
@@ -217,7 +217,7 @@ obj/item/weapon/construction
|
||||
|
||||
change_airlock_access()
|
||||
|
||||
/obj/item/weapon/construction/rcd/proc/toggle_access(acc)
|
||||
/obj/item/construction/rcd/proc/toggle_access(acc)
|
||||
if (acc == "all")
|
||||
conf_access = null
|
||||
else if(acc == "one")
|
||||
@@ -235,7 +235,7 @@ obj/item/weapon/construction
|
||||
if (!conf_access.len)
|
||||
conf_access = null
|
||||
|
||||
/obj/item/weapon/construction/rcd/verb/change_airlock_setting()
|
||||
/obj/item/construction/rcd/verb/change_airlock_setting()
|
||||
set name = "Change Airlock Setting"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
@@ -302,7 +302,7 @@ obj/item/weapon/construction
|
||||
airlock_glass = FALSE
|
||||
|
||||
|
||||
/obj/item/weapon/construction/rcd/proc/rcd_create(atom/A, mob/user)
|
||||
/obj/item/construction/rcd/proc/rcd_create(atom/A, mob/user)
|
||||
var/list/rcd_results = A.rcd_vals(user, src)
|
||||
if(!rcd_results)
|
||||
return FALSE
|
||||
@@ -314,15 +314,15 @@ obj/item/weapon/construction
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
return TRUE
|
||||
|
||||
/obj/item/weapon/construction/rcd/New()
|
||||
/obj/item/construction/rcd/New()
|
||||
..()
|
||||
GLOB.rcd_list += src
|
||||
|
||||
/obj/item/weapon/construction/rcd/Destroy()
|
||||
/obj/item/construction/rcd/Destroy()
|
||||
GLOB.rcd_list -= src
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/construction/rcd/attack_self(mob/user)
|
||||
/obj/item/construction/rcd/attack_self(mob/user)
|
||||
..()
|
||||
switch(mode)
|
||||
if(1)
|
||||
@@ -338,36 +338,36 @@ obj/item/weapon/construction
|
||||
mode = 1
|
||||
to_chat(user, "<span class='notice'>You change RCD's mode to 'Floor & Walls'.</span>")
|
||||
|
||||
/obj/item/weapon/construction/rcd/proc/target_check(atom/A, mob/user) // only returns true for stuff the device can actually work with
|
||||
/obj/item/construction/rcd/proc/target_check(atom/A, mob/user) // only returns true for stuff the device can actually work with
|
||||
if((isturf(A) && A.density && mode==RCD_DECONSTRUCT) || (isturf(A) && !A.density) || (istype(A, /obj/machinery/door/airlock) && mode==RCD_DECONSTRUCT) || istype(A, /obj/structure/grille) || (istype(A, /obj/structure/window) && mode==RCD_DECONSTRUCT) || istype(A, /obj/structure/girder))
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/obj/item/weapon/construction/rcd/afterattack(atom/A, mob/user, proximity)
|
||||
/obj/item/construction/rcd/afterattack(atom/A, mob/user, proximity)
|
||||
if(!prox_check(proximity))
|
||||
return
|
||||
rcd_create(A, user)
|
||||
|
||||
/obj/item/weapon/construction/rcd/proc/detonate_pulse()
|
||||
/obj/item/construction/rcd/proc/detonate_pulse()
|
||||
audible_message("<span class='danger'><b>[src] begins to vibrate and \
|
||||
buzz loudly!</b></span>","<span class='danger'><b>[src] begins \
|
||||
vibrating violently!</b></span>")
|
||||
// 5 seconds to get rid of it
|
||||
addtimer(CALLBACK(src, .proc/detonate_pulse_explode), 50)
|
||||
|
||||
/obj/item/weapon/construction/rcd/proc/detonate_pulse_explode()
|
||||
/obj/item/construction/rcd/proc/detonate_pulse_explode()
|
||||
explosion(src, 0, 0, 3, 1, flame_range = 1)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/weapon/construction/rcd/borg/New()
|
||||
/obj/item/construction/rcd/borg/New()
|
||||
..()
|
||||
no_ammo_message = "<span class='warning'>Insufficient charge.</span>"
|
||||
desc = "A device used to rapidly build walls and floors."
|
||||
canRturf = 1
|
||||
|
||||
/obj/item/weapon/construction/rcd/borg/useResource(amount, mob/user)
|
||||
/obj/item/construction/rcd/borg/useResource(amount, mob/user)
|
||||
if(!iscyborg(user))
|
||||
return 0
|
||||
var/mob/living/silicon/robot/borgy = user
|
||||
@@ -380,7 +380,7 @@ obj/item/weapon/construction
|
||||
to_chat(user, no_ammo_message)
|
||||
return .
|
||||
|
||||
/obj/item/weapon/construction/rcd/borg/checkResource(amount, mob/user)
|
||||
/obj/item/construction/rcd/borg/checkResource(amount, mob/user)
|
||||
if(!iscyborg(user))
|
||||
return 0
|
||||
var/mob/living/silicon/robot/borgy = user
|
||||
@@ -393,15 +393,15 @@ obj/item/weapon/construction
|
||||
to_chat(user, no_ammo_message)
|
||||
return .
|
||||
|
||||
/obj/item/weapon/construction/rcd/loaded
|
||||
/obj/item/construction/rcd/loaded
|
||||
matter = 160
|
||||
|
||||
/obj/item/weapon/construction/rcd/combat
|
||||
/obj/item/construction/rcd/combat
|
||||
name = "industrial RCD"
|
||||
max_matter = 500
|
||||
matter = 500
|
||||
|
||||
/obj/item/weapon/rcd_ammo
|
||||
/obj/item/rcd_ammo
|
||||
name = "compressed matter cartridge"
|
||||
desc = "Highly compressed matter for the RCD."
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
@@ -413,13 +413,13 @@ obj/item/weapon/construction
|
||||
materials = list(MAT_METAL=12000, MAT_GLASS=8000)
|
||||
var/ammoamt = 40
|
||||
|
||||
/obj/item/weapon/rcd_ammo/large
|
||||
/obj/item/rcd_ammo/large
|
||||
origin_tech = "materials=4"
|
||||
materials = list(MAT_METAL=48000, MAT_GLASS=32000)
|
||||
ammoamt = 160
|
||||
|
||||
|
||||
/obj/item/weapon/construction/rcd/admin
|
||||
/obj/item/construction/rcd/admin
|
||||
name = "admin RCD"
|
||||
max_matter = INFINITY
|
||||
matter = INFINITY
|
||||
@@ -428,7 +428,7 @@ obj/item/weapon/construction
|
||||
// Ranged RCD
|
||||
|
||||
|
||||
/obj/item/weapon/construction/rcd/arcd
|
||||
/obj/item/construction/rcd/arcd
|
||||
name = "advanced rapid-construction-device (ARCD)"
|
||||
desc = "A prototype RCD with ranged capability and extended capacity"
|
||||
max_matter = 300
|
||||
@@ -438,7 +438,7 @@ obj/item/weapon/construction
|
||||
icon_state = "arcd"
|
||||
item_state = "rcd"
|
||||
|
||||
/obj/item/weapon/construction/rcd/arcd/afterattack(atom/A, mob/user)
|
||||
/obj/item/construction/rcd/arcd/afterattack(atom/A, mob/user)
|
||||
if(!range_check(A,user))
|
||||
return
|
||||
if(target_check(A,user))
|
||||
@@ -451,7 +451,7 @@ obj/item/weapon/construction
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/construction/rld
|
||||
/obj/item/construction/rld
|
||||
name = "rapid-light-device (RLD)"
|
||||
desc = "A device used to rapidly provide lighting sources to an area."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
@@ -475,18 +475,18 @@ obj/item/weapon/construction
|
||||
var/color_choice = null
|
||||
|
||||
|
||||
/obj/item/weapon/construction/rld/ui_action_click(mob/user, var/datum/action/A)
|
||||
/obj/item/construction/rld/ui_action_click(mob/user, var/datum/action/A)
|
||||
if(istype(A, /datum/action/item_action/pick_color))
|
||||
color_choice = input(user,"Choose Color") as color
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/construction/rld/update_icon()
|
||||
/obj/item/construction/rld/update_icon()
|
||||
icon_state = "rld-[round(matter/35)]"
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/construction/rld/attack_self(mob/user)
|
||||
/obj/item/construction/rld/attack_self(mob/user)
|
||||
..()
|
||||
switch(mode)
|
||||
if(REMOVE_MODE)
|
||||
@@ -500,7 +500,7 @@ obj/item/weapon/construction
|
||||
to_chat(user, "<span class='notice'>You change RLD's mode to 'Deconstruct'.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/construction/rld/proc/checkdupes(var/target)
|
||||
/obj/item/construction/rld/proc/checkdupes(var/target)
|
||||
. = list()
|
||||
var/turf/checking = get_turf(target)
|
||||
for(var/obj/machinery/light/dupe in checking)
|
||||
@@ -508,7 +508,7 @@ obj/item/weapon/construction
|
||||
. |= dupe
|
||||
|
||||
|
||||
/obj/item/weapon/construction/rld/afterattack(atom/A, mob/user)
|
||||
/obj/item/construction/rld/afterattack(atom/A, mob/user)
|
||||
if(!range_check(A,user))
|
||||
return
|
||||
var/turf/start = get_turf(src)
|
||||
@@ -119,12 +119,12 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
"Sort Junction" = new /datum/pipe_info/disposal(DISP_SORTJUNCTION, PIPE_TRINARY),
|
||||
)
|
||||
))
|
||||
/obj/item/weapon/pipe_dispenser
|
||||
/obj/item/pipe_dispenser
|
||||
name = "Rapid Piping Device (RPD)"
|
||||
desc = "A device used to rapidly pipe things."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "rpd"
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
force = 10
|
||||
throwforce = 10
|
||||
throw_speed = 1
|
||||
@@ -153,33 +153,33 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
var/paint_color="grey"
|
||||
var/screen = CATEGORY_ATMOS //Starts on the atmos tab.
|
||||
|
||||
/obj/item/weapon/pipe_dispenser/New()
|
||||
/obj/item/pipe_dispenser/New()
|
||||
. = ..()
|
||||
spark_system = new /datum/effect_system/spark_spread
|
||||
spark_system.set_up(5, 0, src)
|
||||
spark_system.attach(src)
|
||||
|
||||
/obj/item/weapon/pipe_dispenser/Destroy()
|
||||
/obj/item/pipe_dispenser/Destroy()
|
||||
qdel(spark_system)
|
||||
spark_system = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/pipe_dispenser/attack_self(mob/user)
|
||||
/obj/item/pipe_dispenser/attack_self(mob/user)
|
||||
show_menu(user)
|
||||
|
||||
/obj/item/weapon/pipe_dispenser/suicide_act(mob/user)
|
||||
/obj/item/pipe_dispenser/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] points the end of the RPD down [user.p_their()] throat and presses a button! It looks like [user.p_theyre()] trying to commit suicide...</span>")
|
||||
playsound(get_turf(user), 'sound/machines/click.ogg', 50, 1)
|
||||
playsound(get_turf(user), 'sound/items/deconstruct.ogg', 50, 1)
|
||||
return(BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/pipe_dispenser/proc/render_dir_img(_dir,pic,title,flipped=0)
|
||||
/obj/item/pipe_dispenser/proc/render_dir_img(_dir,pic,title,flipped=0)
|
||||
var/selected=" class=\"imglink\""
|
||||
if(_dir == p_dir)
|
||||
selected=" class=\"imglink selected\""
|
||||
return "<a href=\"?src=\ref[src];setdir=[_dir];flipped=[flipped]\" title=\"[title]\"[selected]\"><img src=\"[pic]\" /></a>"
|
||||
|
||||
/obj/item/weapon/pipe_dispenser/proc/show_menu(mob/user)
|
||||
/obj/item/pipe_dispenser/proc/show_menu(mob/user)
|
||||
if(!user || !src)
|
||||
return 0
|
||||
var/dat = {"<h2>Type</h2>
|
||||
@@ -453,7 +453,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
popup.open()
|
||||
return
|
||||
|
||||
/obj/item/weapon/pipe_dispenser/Topic(href, href_list)
|
||||
/obj/item/pipe_dispenser/Topic(href, href_list)
|
||||
if(!usr.canUseTopic(src))
|
||||
usr << browse(null, "window=pipedispenser")
|
||||
return
|
||||
@@ -517,7 +517,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
show_menu(usr)
|
||||
|
||||
|
||||
/obj/item/weapon/pipe_dispenser/pre_attackby(atom/A, mob/user)
|
||||
/obj/item/pipe_dispenser/pre_attackby(atom/A, mob/user)
|
||||
if(!user.IsAdvancedToolUser() || istype(A, /turf/open/space/transit))
|
||||
return ..()
|
||||
|
||||
@@ -593,7 +593,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list(
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/pipe_dispenser/proc/activate()
|
||||
/obj/item/pipe_dispenser/proc/activate()
|
||||
playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1)
|
||||
|
||||
#undef PIPE_BINARY
|
||||
@@ -3,7 +3,7 @@ CONTAINS:
|
||||
RSF
|
||||
|
||||
*/
|
||||
/obj/item/weapon/rsf
|
||||
/obj/item/rsf
|
||||
name = "\improper Rapid-Service-Fabricator"
|
||||
desc = "A device used to rapidly deploy service items."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
@@ -13,21 +13,21 @@ RSF
|
||||
opacity = 0
|
||||
density = FALSE
|
||||
anchored = FALSE
|
||||
flags = NOBLUDGEON
|
||||
flags_1 = NOBLUDGEON_1
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
|
||||
var/matter = 0
|
||||
var/mode = 1
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/weapon/rsf/examine(mob/user)
|
||||
/obj/item/rsf/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>It currently holds [matter]/30 fabrication-units.</span>")
|
||||
|
||||
/obj/item/weapon/rsf/cyborg
|
||||
/obj/item/rsf/cyborg
|
||||
matter = 30
|
||||
|
||||
/obj/item/weapon/rsf/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/rcd_ammo))
|
||||
/obj/item/rsf/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/rcd_ammo))
|
||||
if((matter + 10) > 30)
|
||||
to_chat(user, "The RSF can't hold any more matter.")
|
||||
return
|
||||
@@ -38,7 +38,7 @@ RSF
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/rsf/attack_self(mob/user)
|
||||
/obj/item/rsf/attack_self(mob/user)
|
||||
playsound(src.loc, 'sound/effects/pop.ogg', 50, 0)
|
||||
switch(mode)
|
||||
if(1)
|
||||
@@ -61,7 +61,7 @@ RSF
|
||||
to_chat(user, "Changed dispensing mode to 'Dosh'")
|
||||
// Change mode
|
||||
|
||||
/obj/item/weapon/rsf/afterattack(atom/A, mob/user, proximity)
|
||||
/obj/item/rsf/afterattack(atom/A, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if (!(istype(A, /obj/structure/table) || isfloorturf(A)))
|
||||
@@ -85,26 +85,26 @@ RSF
|
||||
use_matter(200, user)
|
||||
if(2)
|
||||
to_chat(user, "Dispensing Drinking Glass...")
|
||||
new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(T)
|
||||
new /obj/item/reagent_containers/food/drinks/drinkingglass(T)
|
||||
use_matter(20, user)
|
||||
if(3)
|
||||
to_chat(user, "Dispensing Paper Sheet...")
|
||||
new /obj/item/weapon/paper(T)
|
||||
new /obj/item/paper(T)
|
||||
use_matter(10, user)
|
||||
if(4)
|
||||
to_chat(user, "Dispensing Pen...")
|
||||
new /obj/item/weapon/pen(T)
|
||||
new /obj/item/pen(T)
|
||||
use_matter(50, user)
|
||||
if(5)
|
||||
to_chat(user, "Dispensing Dice Pack...")
|
||||
new /obj/item/weapon/storage/pill_bottle/dice(T)
|
||||
new /obj/item/storage/pill_bottle/dice(T)
|
||||
use_matter(200, user)
|
||||
if(6)
|
||||
to_chat(user, "Dispensing Cigarette...")
|
||||
new /obj/item/clothing/mask/cigarette(T)
|
||||
use_matter(10, user)
|
||||
|
||||
/obj/item/weapon/rsf/proc/use_matter(charge, mob/user)
|
||||
/obj/item/rsf/proc/use_matter(charge, mob/user)
|
||||
if (iscyborg(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
R.cell.charge -= charge
|
||||
@@ -112,7 +112,7 @@ RSF
|
||||
matter--
|
||||
to_chat(user, "The RSF now holds [matter]/30 fabrication-units.")
|
||||
|
||||
/obj/item/weapon/cookiesynth
|
||||
/obj/item/cookiesynth
|
||||
name = "Cookie Synthesizer"
|
||||
desc = "A self-recharging device used to rapidly deploy cookies."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
@@ -126,14 +126,14 @@ RSF
|
||||
var/emagged = FALSE
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/weapon/cookiesynth/examine(mob/user)
|
||||
/obj/item/cookiesynth/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>It currently holds [matter]/10 cookie-units.</span>")
|
||||
|
||||
/obj/item/weapon/cookiesynth/attackby()
|
||||
/obj/item/cookiesynth/attackby()
|
||||
return
|
||||
|
||||
/obj/item/weapon/cookiesynth/emag_act(mob/user)
|
||||
/obj/item/cookiesynth/emag_act(mob/user)
|
||||
emagged = !emagged
|
||||
if(emagged)
|
||||
to_chat(user, "<span class='warning'>You short out the [src]'s reagent safety checker!</span>")
|
||||
@@ -141,7 +141,7 @@ RSF
|
||||
to_chat(user, "<span class='warning'>You reset the [src]'s reagent safety checker!</span>")
|
||||
toxin = 0
|
||||
|
||||
/obj/item/weapon/cookiesynth/attack_self(mob/user)
|
||||
/obj/item/cookiesynth/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot/P = null
|
||||
if(iscyborg(user))
|
||||
P = user
|
||||
@@ -155,11 +155,11 @@ RSF
|
||||
toxin = 0
|
||||
to_chat(user, "Cookie Synthesizer Reset")
|
||||
|
||||
/obj/item/weapon/cookiesynth/process()
|
||||
/obj/item/cookiesynth/process()
|
||||
if(matter < 10)
|
||||
matter++
|
||||
|
||||
/obj/item/weapon/cookiesynth/afterattack(atom/A, mob/user, proximity)
|
||||
/obj/item/cookiesynth/afterattack(atom/A, mob/user, proximity)
|
||||
if(cooldown > world.time)
|
||||
return
|
||||
if(!proximity)
|
||||
@@ -177,7 +177,7 @@ RSF
|
||||
var/turf/T = get_turf(A)
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 10, 1)
|
||||
to_chat(user, "Fabricating Cookie..")
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/cookie/S = new /obj/item/weapon/reagent_containers/food/snacks/cookie(T)
|
||||
var/obj/item/reagent_containers/food/snacks/cookie/S = new /obj/item/reagent_containers/food/snacks/cookie(T)
|
||||
if(toxin)
|
||||
S.reagents.add_reagent("chloralhydrate2", 10)
|
||||
if (iscyborg(user))
|
||||
+9
-9
@@ -1,4 +1,4 @@
|
||||
/obj/item/weapon/airlock_painter
|
||||
/obj/item/airlock_painter
|
||||
name = "airlock painter"
|
||||
desc = "An advanced autopainter preprogrammed with several paintjobs for airlocks. Use it on an airlock during or after construction to change the paintjob."
|
||||
icon = 'icons/obj/objects.dmi'
|
||||
@@ -10,18 +10,18 @@
|
||||
materials = list(MAT_METAL=50, MAT_GLASS=50)
|
||||
origin_tech = "engineering=2"
|
||||
|
||||
flags = CONDUCT | NOBLUDGEON
|
||||
flags_1 = CONDUCT_1 | NOBLUDGEON_1
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
var/obj/item/device/toner/ink = null
|
||||
|
||||
/obj/item/weapon/airlock_painter/New()
|
||||
/obj/item/airlock_painter/New()
|
||||
..()
|
||||
ink = new /obj/item/device/toner(src)
|
||||
|
||||
//This proc doesn't just check if the painter can be used, but also uses it.
|
||||
//Only call this if you are certain that the painter will be used right after this check!
|
||||
/obj/item/weapon/airlock_painter/proc/use(mob/user)
|
||||
/obj/item/airlock_painter/proc/use(mob/user)
|
||||
if(can_use(user))
|
||||
ink.charges--
|
||||
playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1)
|
||||
@@ -32,7 +32,7 @@
|
||||
//This proc only checks if the painter can be used.
|
||||
//Call this if you don't want the painter to be used right after this check, for example
|
||||
//because you're expecting user input.
|
||||
/obj/item/weapon/airlock_painter/proc/can_use(mob/user)
|
||||
/obj/item/airlock_painter/proc/can_use(mob/user)
|
||||
if(!ink)
|
||||
to_chat(user, "<span class='notice'>There is no toner cartridge installed in [src]!</span>")
|
||||
return 0
|
||||
@@ -42,7 +42,7 @@
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/airlock_painter/suicide_act(mob/user)
|
||||
/obj/item/airlock_painter/suicide_act(mob/user)
|
||||
var/obj/item/organ/lungs/L = user.getorganslot("lungs")
|
||||
|
||||
if(can_use(user) && L)
|
||||
@@ -89,7 +89,7 @@
|
||||
return SHAME
|
||||
|
||||
|
||||
/obj/item/weapon/airlock_painter/examine(mob/user)
|
||||
/obj/item/airlock_painter/examine(mob/user)
|
||||
..()
|
||||
if(!ink)
|
||||
to_chat(user, "<span class='notice'>It doesn't have a toner cartridge installed.</span>")
|
||||
@@ -104,7 +104,7 @@
|
||||
to_chat(user, "<span class='notice'>Its ink levels look [ink_level].</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/airlock_painter/attackby(obj/item/weapon/W, mob/user, params)
|
||||
/obj/item/airlock_painter/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/device/toner))
|
||||
if(ink)
|
||||
to_chat(user, "<span class='notice'>[src] already contains \a [ink].</span>")
|
||||
@@ -117,7 +117,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/airlock_painter/attack_self(mob/user)
|
||||
/obj/item/airlock_painter/attack_self(mob/user)
|
||||
if(ink)
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
ink.loc = user.loc
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/wallframe
|
||||
icon = 'icons/obj/wallframe.dmi'
|
||||
materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT*2)
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
origin_tech = "materials=1;engineering=1"
|
||||
item_state = "syringe_kit"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
@@ -59,9 +59,9 @@
|
||||
/obj/item/wallframe/proc/after_attach(var/obj/O)
|
||||
transfer_fingerprints_to(O)
|
||||
|
||||
/obj/item/wallframe/attackby(obj/item/weapon/W, mob/user, params)
|
||||
/obj/item/wallframe/attackby(obj/item/W, mob/user, params)
|
||||
..()
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
// For camera-building borgs
|
||||
var/turf/T = get_step(get_turf(user), user.dir)
|
||||
if(iswallturf(T))
|
||||
@@ -70,7 +70,7 @@
|
||||
var/metal_amt = round(materials[MAT_METAL]/MINERAL_MATERIAL_AMOUNT)
|
||||
var/glass_amt = round(materials[MAT_GLASS]/MINERAL_MATERIAL_AMOUNT)
|
||||
|
||||
if(istype(W, /obj/item/weapon/wrench) && (metal_amt || glass_amt))
|
||||
if(istype(W, /obj/item/wrench) && (metal_amt || glass_amt))
|
||||
to_chat(user, "<span class='notice'>You dismantle [src].</span>")
|
||||
if(metal_amt)
|
||||
new /obj/item/stack/sheet/metal(get_turf(src), metal_amt)
|
||||
@@ -112,14 +112,14 @@
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/item/weapon/electronics
|
||||
/obj/item/electronics
|
||||
desc = "Looks like a circuit. Probably is."
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "door_electronics"
|
||||
item_state = "electronic"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
origin_tech = "engineering=2;programming=1"
|
||||
materials = list(MAT_METAL=50, MAT_GLASS=50)
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
/obj/item/areaeditor
|
||||
name = "area modification item"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "blueprints"
|
||||
attack_verb = list("attacked", "bapped", "hit")
|
||||
var/fluffnotice = "Nobody's gonna read this stuff!"
|
||||
@@ -49,7 +49,7 @@
|
||||
/obj/item/areaeditor/blueprints
|
||||
name = "station blueprints"
|
||||
desc = "Blueprints of the station. There is a \"Classified\" stamp and several coffee stains on it."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "blueprints"
|
||||
fluffnotice = "Property of Nanotrasen. For heads of staff only. Store in high-secure storage."
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
@@ -361,6 +361,6 @@
|
||||
/obj/item/areaeditor/blueprints/cyborg
|
||||
name = "station schematics"
|
||||
desc = "A digital copy of the station blueprints stored in your memory."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "blueprints"
|
||||
fluffnotice = "Intellectual Property of Nanotrasen. For use in engineering cyborgs only. Wipe from memory upon departure from the station."
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
icon_state = "candle[i][lit ? "_lit" : ""]"
|
||||
|
||||
|
||||
/obj/item/candle/attackby(obj/item/weapon/W, mob/user, params)
|
||||
/obj/item/candle/attackby(obj/item/W, mob/user, params)
|
||||
..()
|
||||
var/msg = W.ignition_effect(src, user)
|
||||
if(msg)
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
change_appearance(I, user)
|
||||
return
|
||||
// Why yes, this does closely resemble mob and object attack code.
|
||||
if(I.flags & NOBLUDGEON)
|
||||
if(I.flags_1 & NOBLUDGEON_1)
|
||||
return
|
||||
if(!I.force)
|
||||
playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), 1, -1)
|
||||
|
||||
+355
-355
@@ -1,356 +1,356 @@
|
||||
/* Cards
|
||||
* Contains:
|
||||
* DATA CARD
|
||||
* ID CARD
|
||||
* FINGERPRINT CARD HOLDER
|
||||
* FINGERPRINT CARD
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* DATA CARDS - Used for the teleporter
|
||||
*/
|
||||
/obj/item/weapon/card
|
||||
name = "card"
|
||||
desc = "Does card things."
|
||||
icon = 'icons/obj/card.dmi'
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
var/list/files = list()
|
||||
|
||||
/obj/item/weapon/card/data
|
||||
name = "data disk"
|
||||
desc = "A disk of data."
|
||||
icon_state = "data"
|
||||
var/function = "storage"
|
||||
var/data = "null"
|
||||
var/special = null
|
||||
item_state = "card-id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
|
||||
/obj/item/weapon/card/data/verb/label(t as text)
|
||||
set name = "Label Disk"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(usr.stat || !usr.canmove || usr.restrained())
|
||||
return
|
||||
|
||||
if (t)
|
||||
src.name = "data disk- '[t]'"
|
||||
else
|
||||
src.name = "data disk"
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
|
||||
/*
|
||||
* ID CARDS
|
||||
*/
|
||||
/obj/item/weapon/card/emag
|
||||
desc = "It's a card with a magnetic strip attached to some circuitry."
|
||||
name = "cryptographic sequencer"
|
||||
icon_state = "emag"
|
||||
item_state = "card-id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
origin_tech = "magnets=2;syndicate=2"
|
||||
flags = NOBLUDGEON
|
||||
var/prox_check = TRUE //If the emag requires you to be in range
|
||||
|
||||
/obj/item/weapon/card/emag/bluespace
|
||||
name = "bluespace cryptographic sequencer"
|
||||
desc = "It's a blue card with a magnetic strip attached to some circuitry. It appears to have some sort of transmitter attached to it."
|
||||
color = rgb(40, 130, 255)
|
||||
origin_tech = "bluespace=4;magnets=4;syndicate=5"
|
||||
prox_check = FALSE
|
||||
|
||||
/obj/item/weapon/card/emag/attack()
|
||||
return
|
||||
|
||||
/obj/item/weapon/card/emag/afterattack(atom/target, mob/user, proximity)
|
||||
var/atom/A = target
|
||||
if(!proximity && prox_check)
|
||||
return
|
||||
A.emag_act(user)
|
||||
|
||||
/obj/item/weapon/card/id
|
||||
name = "identification card"
|
||||
desc = "A card used to provide ID and determine access across the station."
|
||||
icon_state = "id"
|
||||
item_state = "card-id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
slot_flags = SLOT_ID
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100)
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
var/mining_points = 0 //For redeeming at mining equipment vendors
|
||||
var/list/access = list()
|
||||
var/registered_name = null // The name registered_name on the card
|
||||
var/assignment = null
|
||||
var/access_txt // mapping aid
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/card/id/Initialize(mapload)
|
||||
. = ..()
|
||||
if(mapload && access_txt)
|
||||
access = text2access(access_txt)
|
||||
|
||||
/obj/item/weapon/card/id/vv_edit_var(var_name, var_value)
|
||||
. = ..()
|
||||
if(.)
|
||||
switch(var_name)
|
||||
if("assignment","registered_name")
|
||||
update_label()
|
||||
|
||||
/obj/item/weapon/card/id/attack_self(mob/user)
|
||||
user.visible_message("<span class='notice'>[user] shows you: [icon2html(src, viewers(user))] [src.name].</span>", \
|
||||
"<span class='notice'>You show \the [src.name].</span>")
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/card/id/examine(mob/user)
|
||||
..()
|
||||
if(mining_points)
|
||||
to_chat(user, "There's [mining_points] mining equipment redemption point\s loaded onto this card.")
|
||||
|
||||
/obj/item/weapon/card/id/GetAccess()
|
||||
return access
|
||||
|
||||
/obj/item/weapon/card/id/GetID()
|
||||
return src
|
||||
|
||||
/*
|
||||
Usage:
|
||||
update_label()
|
||||
Sets the id name to whatever registered_name and assignment is
|
||||
|
||||
update_label("John Doe", "Clowny")
|
||||
Properly formats the name and occupation and sets the id name to the arguments
|
||||
*/
|
||||
/obj/item/weapon/card/id/proc/update_label(newname, newjob)
|
||||
if(newname || newjob)
|
||||
name = "[(!newname) ? "identification card" : "[newname]'s ID Card"][(!newjob) ? "" : " ([newjob])"]"
|
||||
return
|
||||
|
||||
name = "[(!registered_name) ? "identification card" : "[registered_name]'s ID Card"][(!assignment) ? "" : " ([assignment])"]"
|
||||
|
||||
/obj/item/weapon/card/id/silver
|
||||
name = "silver identification card"
|
||||
desc = "A silver card which shows honour and dedication."
|
||||
icon_state = "silver"
|
||||
item_state = "silver_id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
|
||||
/obj/item/weapon/card/id/gold
|
||||
name = "gold identification card"
|
||||
desc = "A golden card which shows power and might."
|
||||
icon_state = "gold"
|
||||
item_state = "gold_id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
|
||||
/obj/item/weapon/card/id/syndicate
|
||||
name = "agent card"
|
||||
access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE)
|
||||
origin_tech = "syndicate=1"
|
||||
var/anyone = FALSE //Can anyone forge the ID or just syndicate?
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/Initialize()
|
||||
..()
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/weapon/card/id
|
||||
chameleon_action.chameleon_name = "ID Card"
|
||||
chameleon_action.initialize_disguises()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/afterattack(obj/item/weapon/O, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(O, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/I = O
|
||||
src.access |= I.access
|
||||
if(isliving(user) && user.mind)
|
||||
if(user.mind.special_role)
|
||||
to_chat(usr, "<span class='notice'>The card's microscanners activate as you pass it over the ID, copying its access.</span>")
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/attack_self(mob/user)
|
||||
if(isliving(user) && user.mind)
|
||||
if(user.mind.special_role || anyone)
|
||||
if(alert(user, "Action", "Agent ID", "Show", "Forge") == "Forge")
|
||||
var t = copytext(sanitize(input(user, "What name would you like to put on this card?", "Agent card name", registered_name ? registered_name : (ishuman(user) ? user.real_name : user.name))as text | null),1,26)
|
||||
if(!t || t == "Unknown" || t == "floor" || t == "wall" || t == "r-wall") //Same as mob/dead/new_player/prefrences.dm
|
||||
if (t)
|
||||
alert("Invalid name.")
|
||||
return
|
||||
registered_name = t
|
||||
|
||||
var u = copytext(sanitize(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant")as text | null),1,MAX_MESSAGE_LEN)
|
||||
if(!u)
|
||||
registered_name = ""
|
||||
return
|
||||
assignment = u
|
||||
update_label()
|
||||
to_chat(user, "<span class='notice'>You successfully forge the ID card.</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/syndicate/anyone
|
||||
anyone = TRUE
|
||||
|
||||
/obj/item/weapon/card/id/syndicate_command
|
||||
name = "syndicate ID card"
|
||||
desc = "An ID straight from the Syndicate."
|
||||
registered_name = "Syndicate"
|
||||
assignment = "Syndicate Overlord"
|
||||
access = list(ACCESS_SYNDICATE)
|
||||
|
||||
/obj/item/weapon/card/id/captains_spare
|
||||
name = "captain's spare ID"
|
||||
desc = "The spare ID of the High Lord himself."
|
||||
icon_state = "gold"
|
||||
item_state = "gold_id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
registered_name = "Captain"
|
||||
assignment = "Captain"
|
||||
|
||||
/obj/item/weapon/card/id/captains_spare/Initialize()
|
||||
var/datum/job/captain/J = new/datum/job/captain
|
||||
access = J.get_access()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/centcom
|
||||
name = "\improper CentCom ID"
|
||||
desc = "An ID straight from Cent. Com."
|
||||
icon_state = "centcom"
|
||||
registered_name = "Central Command"
|
||||
assignment = "General"
|
||||
|
||||
/obj/item/weapon/card/id/centcom/Initialize()
|
||||
access = get_all_centcom_access()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/ert
|
||||
name = "\improper CentCom ID"
|
||||
desc = "A ERT ID card"
|
||||
icon_state = "centcom"
|
||||
registered_name = "Emergency Response Team Commander"
|
||||
assignment = "Emergency Response Team Commander"
|
||||
|
||||
/obj/item/weapon/card/id/ert/Initialize()
|
||||
access = get_all_accesses()+get_ert_access("commander")-ACCESS_CHANGE_IDS
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/ert/Security
|
||||
registered_name = "Security Response Officer"
|
||||
assignment = "Security Response Officer"
|
||||
|
||||
/obj/item/weapon/card/id/ert/Security/Initialize()
|
||||
access = get_all_accesses()+get_ert_access("sec")-ACCESS_CHANGE_IDS
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/ert/Engineer
|
||||
registered_name = "Engineer Response Officer"
|
||||
assignment = "Engineer Response Officer"
|
||||
|
||||
/obj/item/weapon/card/id/ert/Engineer/Initialize()
|
||||
access = get_all_accesses()+get_ert_access("eng")-ACCESS_CHANGE_IDS
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/ert/Medical
|
||||
registered_name = "Medical Response Officer"
|
||||
assignment = "Medical Response Officer"
|
||||
|
||||
/obj/item/weapon/card/id/ert/Medical/Initialize()
|
||||
access = get_all_accesses()+get_ert_access("med")-ACCESS_CHANGE_IDS
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/prisoner
|
||||
name = "prisoner ID card"
|
||||
desc = "You are a number, you are not a free man."
|
||||
icon_state = "orange"
|
||||
item_state = "orange-id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
assignment = "Prisoner"
|
||||
registered_name = "Scum"
|
||||
var/goal = 0 //How far from freedom?
|
||||
var/points = 0
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/attack_self(mob/user)
|
||||
to_chat(usr, "<span class='notice'>You have accumulated [points] out of the [goal] points you need for freedom.</span>")
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/one
|
||||
name = "Prisoner #13-001"
|
||||
registered_name = "Prisoner #13-001"
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/two
|
||||
name = "Prisoner #13-002"
|
||||
registered_name = "Prisoner #13-002"
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/three
|
||||
name = "Prisoner #13-003"
|
||||
registered_name = "Prisoner #13-003"
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/four
|
||||
name = "Prisoner #13-004"
|
||||
registered_name = "Prisoner #13-004"
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/five
|
||||
name = "Prisoner #13-005"
|
||||
registered_name = "Prisoner #13-005"
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/six
|
||||
name = "Prisoner #13-006"
|
||||
registered_name = "Prisoner #13-006"
|
||||
|
||||
/obj/item/weapon/card/id/prisoner/seven
|
||||
name = "Prisoner #13-007"
|
||||
registered_name = "Prisoner #13-007"
|
||||
|
||||
/obj/item/weapon/card/id/mining
|
||||
name = "mining ID"
|
||||
access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
/obj/item/weapon/card/id/away
|
||||
name = "a perfectly generic identification card"
|
||||
desc = "A perfectly generic identification card. Looks like it could use some flavor."
|
||||
access = list(ACCESS_AWAY_GENERAL)
|
||||
|
||||
/obj/item/weapon/card/id/away/hotel
|
||||
name = "Staff ID"
|
||||
desc = "A staff ID used to access the hotel's doors."
|
||||
access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINT)
|
||||
|
||||
/obj/item/weapon/card/id/away/hotel/securty
|
||||
name = "Officer ID"
|
||||
access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINT, ACCESS_AWAY_SEC)
|
||||
|
||||
/obj/item/weapon/card/id/away/old
|
||||
name = "a perfectly generic identification card"
|
||||
desc = "A perfectly generic identification card. Looks like it could use some flavor."
|
||||
access = list(ACCESS_AWAY_GENERAL)
|
||||
|
||||
/obj/item/weapon/card/id/away/old/sec
|
||||
name = "Security Officer ID"
|
||||
desc = "Security officers ID card."
|
||||
icon_state = "centcom"
|
||||
|
||||
/obj/item/weapon/card/id/away/old/sci
|
||||
name = "Scientist ID"
|
||||
desc = "Scientists ID card."
|
||||
icon_state = "centcom"
|
||||
|
||||
/obj/item/weapon/card/id/away/old/eng
|
||||
name = "Engineer ID"
|
||||
desc = "Engineers ID card."
|
||||
icon_state = "centcom"
|
||||
|
||||
/obj/item/weapon/card/id/away/old/apc
|
||||
name = "APC Access ID"
|
||||
desc = "Special ID card to allow access to APCs"
|
||||
icon_state = "centcom"
|
||||
/* Cards
|
||||
* Contains:
|
||||
* DATA CARD
|
||||
* ID CARD
|
||||
* FINGERPRINT CARD HOLDER
|
||||
* FINGERPRINT CARD
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* DATA CARDS - Used for the teleporter
|
||||
*/
|
||||
/obj/item/card
|
||||
name = "card"
|
||||
desc = "Does card things."
|
||||
icon = 'icons/obj/card.dmi'
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
var/list/files = list()
|
||||
|
||||
/obj/item/card/data
|
||||
name = "data disk"
|
||||
desc = "A disk of data."
|
||||
icon_state = "data"
|
||||
var/function = "storage"
|
||||
var/data = "null"
|
||||
var/special = null
|
||||
item_state = "card-id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
|
||||
/obj/item/card/data/verb/label(t as text)
|
||||
set name = "Label Disk"
|
||||
set category = "Object"
|
||||
set src in usr
|
||||
|
||||
if(usr.stat || !usr.canmove || usr.restrained())
|
||||
return
|
||||
|
||||
if (t)
|
||||
src.name = "data disk- '[t]'"
|
||||
else
|
||||
src.name = "data disk"
|
||||
src.add_fingerprint(usr)
|
||||
return
|
||||
|
||||
/*
|
||||
* ID CARDS
|
||||
*/
|
||||
/obj/item/card/emag
|
||||
desc = "It's a card with a magnetic strip attached to some circuitry."
|
||||
name = "cryptographic sequencer"
|
||||
icon_state = "emag"
|
||||
item_state = "card-id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
origin_tech = "magnets=2;syndicate=2"
|
||||
flags_1 = NOBLUDGEON_1
|
||||
var/prox_check = TRUE //If the emag requires you to be in range
|
||||
|
||||
/obj/item/card/emag/bluespace
|
||||
name = "bluespace cryptographic sequencer"
|
||||
desc = "It's a blue card with a magnetic strip attached to some circuitry. It appears to have some sort of transmitter attached to it."
|
||||
color = rgb(40, 130, 255)
|
||||
origin_tech = "bluespace=4;magnets=4;syndicate=5"
|
||||
prox_check = FALSE
|
||||
|
||||
/obj/item/card/emag/attack()
|
||||
return
|
||||
|
||||
/obj/item/card/emag/afterattack(atom/target, mob/user, proximity)
|
||||
var/atom/A = target
|
||||
if(!proximity && prox_check)
|
||||
return
|
||||
A.emag_act(user)
|
||||
|
||||
/obj/item/card/id
|
||||
name = "identification card"
|
||||
desc = "A card used to provide ID and determine access across the station."
|
||||
icon_state = "id"
|
||||
item_state = "card-id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
slot_flags = SLOT_ID
|
||||
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100)
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
var/mining_points = 0 //For redeeming at mining equipment vendors
|
||||
var/list/access = list()
|
||||
var/registered_name = null // The name registered_name on the card
|
||||
var/assignment = null
|
||||
var/access_txt // mapping aid
|
||||
|
||||
|
||||
|
||||
/obj/item/card/id/Initialize(mapload)
|
||||
. = ..()
|
||||
if(mapload && access_txt)
|
||||
access = text2access(access_txt)
|
||||
|
||||
/obj/item/card/id/vv_edit_var(var_name, var_value)
|
||||
. = ..()
|
||||
if(.)
|
||||
switch(var_name)
|
||||
if("assignment","registered_name")
|
||||
update_label()
|
||||
|
||||
/obj/item/card/id/attack_self(mob/user)
|
||||
user.visible_message("<span class='notice'>[user] shows you: [icon2html(src, viewers(user))] [src.name].</span>", \
|
||||
"<span class='notice'>You show \the [src.name].</span>")
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/item/card/id/examine(mob/user)
|
||||
..()
|
||||
if(mining_points)
|
||||
to_chat(user, "There's [mining_points] mining equipment redemption point\s loaded onto this card.")
|
||||
|
||||
/obj/item/card/id/GetAccess()
|
||||
return access
|
||||
|
||||
/obj/item/card/id/GetID()
|
||||
return src
|
||||
|
||||
/*
|
||||
Usage:
|
||||
update_label()
|
||||
Sets the id name to whatever registered_name and assignment is
|
||||
|
||||
update_label("John Doe", "Clowny")
|
||||
Properly formats the name and occupation and sets the id name to the arguments
|
||||
*/
|
||||
/obj/item/card/id/proc/update_label(newname, newjob)
|
||||
if(newname || newjob)
|
||||
name = "[(!newname) ? "identification card" : "[newname]'s ID Card"][(!newjob) ? "" : " ([newjob])"]"
|
||||
return
|
||||
|
||||
name = "[(!registered_name) ? "identification card" : "[registered_name]'s ID Card"][(!assignment) ? "" : " ([assignment])"]"
|
||||
|
||||
/obj/item/card/id/silver
|
||||
name = "silver identification card"
|
||||
desc = "A silver card which shows honour and dedication."
|
||||
icon_state = "silver"
|
||||
item_state = "silver_id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
|
||||
/obj/item/card/id/gold
|
||||
name = "gold identification card"
|
||||
desc = "A golden card which shows power and might."
|
||||
icon_state = "gold"
|
||||
item_state = "gold_id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
|
||||
/obj/item/card/id/syndicate
|
||||
name = "agent card"
|
||||
access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE)
|
||||
origin_tech = "syndicate=1"
|
||||
var/anyone = FALSE //Can anyone forge the ID or just syndicate?
|
||||
|
||||
/obj/item/card/id/syndicate/Initialize()
|
||||
..()
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/card/id
|
||||
chameleon_action.chameleon_name = "ID Card"
|
||||
chameleon_action.initialize_disguises()
|
||||
|
||||
/obj/item/card/id/syndicate/afterattack(obj/item/O, mob/user, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(O, /obj/item/card/id))
|
||||
var/obj/item/card/id/I = O
|
||||
src.access |= I.access
|
||||
if(isliving(user) && user.mind)
|
||||
if(user.mind.special_role)
|
||||
to_chat(usr, "<span class='notice'>The card's microscanners activate as you pass it over the ID, copying its access.</span>")
|
||||
|
||||
/obj/item/card/id/syndicate/attack_self(mob/user)
|
||||
if(isliving(user) && user.mind)
|
||||
if(user.mind.special_role || anyone)
|
||||
if(alert(user, "Action", "Agent ID", "Show", "Forge") == "Forge")
|
||||
var t = copytext(sanitize(input(user, "What name would you like to put on this card?", "Agent card name", registered_name ? registered_name : (ishuman(user) ? user.real_name : user.name))as text | null),1,26)
|
||||
if(!t || t == "Unknown" || t == "floor" || t == "wall" || t == "r-wall") //Same as mob/dead/new_player/prefrences.dm
|
||||
if (t)
|
||||
alert("Invalid name.")
|
||||
return
|
||||
registered_name = t
|
||||
|
||||
var u = copytext(sanitize(input(user, "What occupation would you like to put on this card?\nNote: This will not grant any access levels other than Maintenance.", "Agent card job assignment", "Assistant")as text | null),1,MAX_MESSAGE_LEN)
|
||||
if(!u)
|
||||
registered_name = ""
|
||||
return
|
||||
assignment = u
|
||||
update_label()
|
||||
to_chat(user, "<span class='notice'>You successfully forge the ID card.</span>")
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/card/id/syndicate/anyone
|
||||
anyone = TRUE
|
||||
|
||||
/obj/item/card/id/syndicate_command
|
||||
name = "syndicate ID card"
|
||||
desc = "An ID straight from the Syndicate."
|
||||
registered_name = "Syndicate"
|
||||
assignment = "Syndicate Overlord"
|
||||
access = list(ACCESS_SYNDICATE)
|
||||
|
||||
/obj/item/card/id/captains_spare
|
||||
name = "captain's spare ID"
|
||||
desc = "The spare ID of the High Lord himself."
|
||||
icon_state = "gold"
|
||||
item_state = "gold_id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
registered_name = "Captain"
|
||||
assignment = "Captain"
|
||||
|
||||
/obj/item/card/id/captains_spare/Initialize()
|
||||
var/datum/job/captain/J = new/datum/job/captain
|
||||
access = J.get_access()
|
||||
..()
|
||||
|
||||
/obj/item/card/id/centcom
|
||||
name = "\improper CentCom ID"
|
||||
desc = "An ID straight from Cent. Com."
|
||||
icon_state = "centcom"
|
||||
registered_name = "Central Command"
|
||||
assignment = "General"
|
||||
|
||||
/obj/item/card/id/centcom/Initialize()
|
||||
access = get_all_centcom_access()
|
||||
..()
|
||||
|
||||
/obj/item/card/id/ert
|
||||
name = "\improper CentCom ID"
|
||||
desc = "A ERT ID card"
|
||||
icon_state = "centcom"
|
||||
registered_name = "Emergency Response Team Commander"
|
||||
assignment = "Emergency Response Team Commander"
|
||||
|
||||
/obj/item/card/id/ert/Initialize()
|
||||
access = get_all_accesses()+get_ert_access("commander")-ACCESS_CHANGE_IDS
|
||||
..()
|
||||
|
||||
/obj/item/card/id/ert/Security
|
||||
registered_name = "Security Response Officer"
|
||||
assignment = "Security Response Officer"
|
||||
|
||||
/obj/item/card/id/ert/Security/Initialize()
|
||||
access = get_all_accesses()+get_ert_access("sec")-ACCESS_CHANGE_IDS
|
||||
..()
|
||||
|
||||
/obj/item/card/id/ert/Engineer
|
||||
registered_name = "Engineer Response Officer"
|
||||
assignment = "Engineer Response Officer"
|
||||
|
||||
/obj/item/card/id/ert/Engineer/Initialize()
|
||||
access = get_all_accesses()+get_ert_access("eng")-ACCESS_CHANGE_IDS
|
||||
..()
|
||||
|
||||
/obj/item/card/id/ert/Medical
|
||||
registered_name = "Medical Response Officer"
|
||||
assignment = "Medical Response Officer"
|
||||
|
||||
/obj/item/card/id/ert/Medical/Initialize()
|
||||
access = get_all_accesses()+get_ert_access("med")-ACCESS_CHANGE_IDS
|
||||
..()
|
||||
|
||||
/obj/item/card/id/prisoner
|
||||
name = "prisoner ID card"
|
||||
desc = "You are a number, you are not a free man."
|
||||
icon_state = "orange"
|
||||
item_state = "orange-id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
assignment = "Prisoner"
|
||||
registered_name = "Scum"
|
||||
var/goal = 0 //How far from freedom?
|
||||
var/points = 0
|
||||
|
||||
/obj/item/card/id/prisoner/attack_self(mob/user)
|
||||
to_chat(usr, "<span class='notice'>You have accumulated [points] out of the [goal] points you need for freedom.</span>")
|
||||
|
||||
/obj/item/card/id/prisoner/one
|
||||
name = "Prisoner #13-001"
|
||||
registered_name = "Prisoner #13-001"
|
||||
|
||||
/obj/item/card/id/prisoner/two
|
||||
name = "Prisoner #13-002"
|
||||
registered_name = "Prisoner #13-002"
|
||||
|
||||
/obj/item/card/id/prisoner/three
|
||||
name = "Prisoner #13-003"
|
||||
registered_name = "Prisoner #13-003"
|
||||
|
||||
/obj/item/card/id/prisoner/four
|
||||
name = "Prisoner #13-004"
|
||||
registered_name = "Prisoner #13-004"
|
||||
|
||||
/obj/item/card/id/prisoner/five
|
||||
name = "Prisoner #13-005"
|
||||
registered_name = "Prisoner #13-005"
|
||||
|
||||
/obj/item/card/id/prisoner/six
|
||||
name = "Prisoner #13-006"
|
||||
registered_name = "Prisoner #13-006"
|
||||
|
||||
/obj/item/card/id/prisoner/seven
|
||||
name = "Prisoner #13-007"
|
||||
registered_name = "Prisoner #13-007"
|
||||
|
||||
/obj/item/card/id/mining
|
||||
name = "mining ID"
|
||||
access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
/obj/item/card/id/away
|
||||
name = "a perfectly generic identification card"
|
||||
desc = "A perfectly generic identification card. Looks like it could use some flavor."
|
||||
access = list(ACCESS_AWAY_GENERAL)
|
||||
|
||||
/obj/item/card/id/away/hotel
|
||||
name = "Staff ID"
|
||||
desc = "A staff ID used to access the hotel's doors."
|
||||
access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINT)
|
||||
|
||||
/obj/item/card/id/away/hotel/securty
|
||||
name = "Officer ID"
|
||||
access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINT, ACCESS_AWAY_SEC)
|
||||
|
||||
/obj/item/card/id/away/old
|
||||
name = "a perfectly generic identification card"
|
||||
desc = "A perfectly generic identification card. Looks like it could use some flavor."
|
||||
access = list(ACCESS_AWAY_GENERAL)
|
||||
|
||||
/obj/item/card/id/away/old/sec
|
||||
name = "Security Officer ID"
|
||||
desc = "Security officers ID card."
|
||||
icon_state = "centcom"
|
||||
|
||||
/obj/item/card/id/away/old/sci
|
||||
name = "Scientist ID"
|
||||
desc = "Scientists ID card."
|
||||
icon_state = "centcom"
|
||||
|
||||
/obj/item/card/id/away/old/eng
|
||||
name = "Engineer ID"
|
||||
desc = "Engineers ID card."
|
||||
icon_state = "centcom"
|
||||
|
||||
/obj/item/card/id/away/old/apc
|
||||
name = "APC Access ID"
|
||||
desc = "Special ID card to allow access to APCs"
|
||||
icon_state = "centcom"
|
||||
access = list(ACCESS_ENGINE_EQUIP)
|
||||
@@ -1,6 +1,6 @@
|
||||
#define STATION_RENAME_TIME_LIMIT 3000
|
||||
|
||||
/obj/item/weapon/station_charter
|
||||
/obj/item/station_charter
|
||||
name = "station charter"
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "scroll2"
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
var/static/regex/standard_station_regex
|
||||
|
||||
/obj/item/weapon/station_charter/Initialize()
|
||||
/obj/item/station_charter/Initialize()
|
||||
. = ..()
|
||||
if(!standard_station_regex)
|
||||
var/prefixes = jointext(GLOB.station_prefixes, "|")
|
||||
@@ -26,7 +26,7 @@
|
||||
var/regexstr = "^(([prefixes]) )?(([names]) ?)([suffixes]) ([numerals])$"
|
||||
standard_station_regex = new(regexstr)
|
||||
|
||||
/obj/item/weapon/station_charter/attack_self(mob/living/user)
|
||||
/obj/item/station_charter/attack_self(mob/living/user)
|
||||
if(used)
|
||||
to_chat(user, "The [name_type] has already been named.")
|
||||
return
|
||||
@@ -61,7 +61,7 @@
|
||||
response_timer_id = addtimer(CALLBACK(src, .proc/rename_station, new_name, user.name, user.real_name, key_name(user)), approval_time, TIMER_STOPPABLE)
|
||||
to_chat(GLOB.admins, "<span class='adminnotice'><b><font color=orange>CUSTOM STATION RENAME:</font></b>[ADMIN_LOOKUPFLW(user)] proposes to rename the [name_type] to [new_name] (will autoapprove in [approval_time / 10] seconds). [ADMIN_SMITE(user)] (<A HREF='?_src_=holder;reject_custom_name=\ref[src]'>REJECT</A>) [ADMIN_CENTCOM_REPLY(user)]</span>")
|
||||
|
||||
/obj/item/weapon/station_charter/proc/reject_proposed(user)
|
||||
/obj/item/station_charter/proc/reject_proposed(user)
|
||||
if(!user)
|
||||
return
|
||||
if(!response_timer_id)
|
||||
@@ -77,7 +77,7 @@
|
||||
deltimer(response_timer_id)
|
||||
response_timer_id = null
|
||||
|
||||
/obj/item/weapon/station_charter/proc/rename_station(designation, uname, ureal_name, ukey)
|
||||
/obj/item/station_charter/proc/rename_station(designation, uname, ureal_name, ukey)
|
||||
set_station_name(designation)
|
||||
minor_announce("[ureal_name] has designated your station as [station_name()]", "Captain's Charter", 0)
|
||||
log_game("[ukey] has renamed the station as [station_name()].")
|
||||
@@ -89,14 +89,14 @@
|
||||
if(!unlimited_uses)
|
||||
used = TRUE
|
||||
|
||||
/obj/item/weapon/station_charter/admin
|
||||
/obj/item/station_charter/admin
|
||||
unlimited_uses = TRUE
|
||||
ignores_timeout = TRUE
|
||||
|
||||
|
||||
/obj/item/weapon/station_charter/flag
|
||||
/obj/item/station_charter/flag
|
||||
name = "nanotrasen banner"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
name_type = "planet"
|
||||
icon_state = "banner"
|
||||
item_state = "banner"
|
||||
@@ -106,7 +106,7 @@
|
||||
w_class = 5
|
||||
force = 15
|
||||
|
||||
/obj/item/weapon/station_charter/flag/rename_station(designation, uname, ureal_name, ukey)
|
||||
/obj/item/station_charter/flag/rename_station(designation, uname, ureal_name, ukey)
|
||||
set_station_name(designation)
|
||||
minor_announce("[ureal_name] has designated the planet as [station_name()]", "Captain's Banner", 0)
|
||||
log_game("[ukey] has renamed the planet as [station_name()].")
|
||||
+23
-23
@@ -1,6 +1,6 @@
|
||||
#define CHRONO_BEAM_RANGE 3
|
||||
#define CHRONO_FRAME_COUNT 22
|
||||
/obj/item/weapon/chrono_eraser
|
||||
/obj/item/chrono_eraser
|
||||
name = "Timestream Eradication Device"
|
||||
desc = "The result of outlawed time-bluespace research, this device is capable of wiping a being from the timestream. They never are, they never were, they never will be."
|
||||
icon = 'icons/obj/chronos.dmi'
|
||||
@@ -10,22 +10,22 @@
|
||||
slot_flags = SLOT_BACK
|
||||
slowdown = 1
|
||||
actions_types = list(/datum/action/item_action/equip_unequip_TED_Gun)
|
||||
var/obj/item/weapon/gun/energy/chrono_gun/PA = null
|
||||
var/obj/item/gun/energy/chrono_gun/PA = null
|
||||
var/list/erased_minds = list() //a collection of minds from the dead
|
||||
|
||||
/obj/item/weapon/chrono_eraser/proc/pass_mind(datum/mind/M)
|
||||
/obj/item/chrono_eraser/proc/pass_mind(datum/mind/M)
|
||||
erased_minds += M
|
||||
|
||||
/obj/item/weapon/chrono_eraser/dropped()
|
||||
/obj/item/chrono_eraser/dropped()
|
||||
..()
|
||||
if(PA)
|
||||
qdel(PA)
|
||||
|
||||
/obj/item/weapon/chrono_eraser/Destroy()
|
||||
/obj/item/chrono_eraser/Destroy()
|
||||
dropped()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/chrono_eraser/ui_action_click(mob/user)
|
||||
/obj/item/chrono_eraser/ui_action_click(mob/user)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
if(C.back == src)
|
||||
@@ -35,42 +35,42 @@
|
||||
PA = new(src)
|
||||
user.put_in_hands(PA)
|
||||
|
||||
/obj/item/weapon/chrono_eraser/item_action_slot_check(slot, mob/user)
|
||||
/obj/item/chrono_eraser/item_action_slot_check(slot, mob/user)
|
||||
if(slot == slot_back)
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/gun/energy/chrono_gun
|
||||
/obj/item/gun/energy/chrono_gun
|
||||
name = "T.E.D. Projection Apparatus"
|
||||
desc = "It's as if they never existed in the first place."
|
||||
icon = 'icons/obj/chronos.dmi'
|
||||
icon_state = "chronogun"
|
||||
item_state = "chronogun"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
flags = NODROP | DROPDEL
|
||||
flags_1 = NODROP_1 | DROPDEL_1
|
||||
ammo_type = list(/obj/item/ammo_casing/energy/chrono_beam)
|
||||
can_charge = 0
|
||||
fire_delay = 50
|
||||
var/obj/item/weapon/chrono_eraser/TED = null
|
||||
var/obj/item/chrono_eraser/TED = null
|
||||
var/obj/effect/chrono_field/field = null
|
||||
var/turf/startpos = null
|
||||
|
||||
/obj/item/weapon/gun/energy/chrono_gun/Initialize()
|
||||
/obj/item/gun/energy/chrono_gun/Initialize()
|
||||
. = ..()
|
||||
if(istype(loc, /obj/item/weapon/chrono_eraser))
|
||||
if(istype(loc, /obj/item/chrono_eraser))
|
||||
TED = loc
|
||||
else //admin must have spawned it
|
||||
TED = new(src.loc)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/gun/energy/chrono_gun/update_icon()
|
||||
/obj/item/gun/energy/chrono_gun/update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/gun/energy/chrono_gun/process_fire()
|
||||
/obj/item/gun/energy/chrono_gun/process_fire()
|
||||
if(field)
|
||||
field_disconnect(field)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/gun/energy/chrono_gun/Destroy()
|
||||
/obj/item/gun/energy/chrono_gun/Destroy()
|
||||
if(TED)
|
||||
TED.PA = null
|
||||
TED = null
|
||||
@@ -78,7 +78,7 @@
|
||||
field_disconnect(field)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/gun/energy/chrono_gun/proc/field_connect(obj/effect/chrono_field/F)
|
||||
/obj/item/gun/energy/chrono_gun/proc/field_connect(obj/effect/chrono_field/F)
|
||||
var/mob/living/user = src.loc
|
||||
if(F.gun)
|
||||
if(isliving(user) && F.captured)
|
||||
@@ -92,7 +92,7 @@
|
||||
to_chat(user, "<span class='notice'>Connection established with target: <b>[F.captured]</b></span>")
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/chrono_gun/proc/field_disconnect(obj/effect/chrono_field/F)
|
||||
/obj/item/gun/energy/chrono_gun/proc/field_disconnect(obj/effect/chrono_field/F)
|
||||
if(F && field == F)
|
||||
var/mob/living/user = src.loc
|
||||
if(F.gun == src)
|
||||
@@ -102,7 +102,7 @@
|
||||
field = null
|
||||
startpos = null
|
||||
|
||||
/obj/item/weapon/gun/energy/chrono_gun/proc/field_check(obj/effect/chrono_field/F)
|
||||
/obj/item/gun/energy/chrono_gun/proc/field_check(obj/effect/chrono_field/F)
|
||||
if(F)
|
||||
if(field == F)
|
||||
var/turf/currentpos = get_turf(src)
|
||||
@@ -112,7 +112,7 @@
|
||||
field_disconnect(F)
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/gun/energy/chrono_gun/proc/pass_mind(datum/mind/M)
|
||||
/obj/item/gun/energy/chrono_gun/proc/pass_mind(datum/mind/M)
|
||||
if(TED)
|
||||
TED.pass_mind(M)
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
icon_state = "chronobolt"
|
||||
range = CHRONO_BEAM_RANGE
|
||||
nodamage = 1
|
||||
var/obj/item/weapon/gun/energy/chrono_gun/gun = null
|
||||
var/obj/item/gun/energy/chrono_gun/gun = null
|
||||
|
||||
/obj/item/projectile/energy/chrono_beam/fire()
|
||||
gun = firer.get_active_held_item()
|
||||
@@ -153,13 +153,13 @@
|
||||
anchored = TRUE
|
||||
blend_mode = BLEND_MULTIPLY
|
||||
var/mob/living/captured = null
|
||||
var/obj/item/weapon/gun/energy/chrono_gun/gun = null
|
||||
var/obj/item/gun/energy/chrono_gun/gun = null
|
||||
var/tickstokill = 15
|
||||
var/mutable_appearance/mob_underlay
|
||||
var/preloaded = 0
|
||||
var/RPpos = null
|
||||
|
||||
/obj/effect/chrono_field/New(loc, var/mob/living/target, var/obj/item/weapon/gun/energy/chrono_gun/G)
|
||||
/obj/effect/chrono_field/New(loc, var/mob/living/target, var/obj/item/gun/energy/chrono_gun/G)
|
||||
if(target && isliving(target) && G)
|
||||
target.loc = src
|
||||
src.captured = target
|
||||
@@ -227,7 +227,7 @@
|
||||
/obj/effect/chrono_field/bullet_act(obj/item/projectile/P)
|
||||
if(istype(P, /obj/item/projectile/energy/chrono_beam))
|
||||
var/obj/item/projectile/energy/chrono_beam/beam = P
|
||||
var/obj/item/weapon/gun/energy/chrono_gun/Pgun = beam.gun
|
||||
var/obj/item/gun/energy/chrono_gun/Pgun = beam.gun
|
||||
if(Pgun && istype(Pgun))
|
||||
Pgun.field_connect(src)
|
||||
else
|
||||
+790
-790
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,55 @@
|
||||
//File with the circuitboard and circuitboard/machine class definitions and procs
|
||||
|
||||
|
||||
// Circuitboard
|
||||
|
||||
/obj/item/circuitboard
|
||||
name = "circuit board"
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "id_mod"
|
||||
item_state = "electronic"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
origin_tech = "programming=2"
|
||||
materials = list(MAT_GLASS=1000)
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/build_path = null
|
||||
|
||||
/obj/item/circuitboard/proc/apply_default_parts(obj/machinery/M)
|
||||
return
|
||||
|
||||
// Circuitboard/machine
|
||||
/*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit,
|
||||
micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells.
|
||||
*/
|
||||
|
||||
/obj/item/circuitboard/machine
|
||||
var/list/req_components // Components required by the machine.
|
||||
// Example: list(/obj/item/stock_parts/matter_bin = 5)
|
||||
|
||||
var/list/def_components // Default replacements for req_components, to be used in apply_default_parts instead of req_components types
|
||||
// Example: list(/obj/item/stock_parts/matter_bin = /obj/item/stock_parts/matter_bin/super)
|
||||
|
||||
// Applies the default parts defined by the circuit board when the machine is created
|
||||
/obj/item/circuitboard/machine/apply_default_parts(obj/machinery/M)
|
||||
if(!req_components)
|
||||
return
|
||||
|
||||
M.component_parts = list(src) // List of components always contains a board
|
||||
loc = null
|
||||
|
||||
for(var/comp_path in req_components)
|
||||
var/comp_amt = req_components[comp_path]
|
||||
if(!comp_amt)
|
||||
continue
|
||||
|
||||
if(def_components && def_components[comp_path])
|
||||
comp_path = def_components[comp_path]
|
||||
|
||||
if(ispath(comp_path, /obj/item/stack))
|
||||
M.component_parts += new comp_path(null, comp_amt)
|
||||
else
|
||||
for(var/i in 1 to comp_amt)
|
||||
M.component_parts += new comp_path(null)
|
||||
|
||||
M.RefreshParts()
|
||||
@@ -0,0 +1,369 @@
|
||||
/obj/item/circuitboard/computer/turbine_computer
|
||||
name = "Turbine Computer (Computer Board)"
|
||||
build_path = /obj/machinery/computer/turbine_computer
|
||||
origin_tech = "programming=4;engineering=4;powerstorage=4"
|
||||
|
||||
/obj/item/circuitboard/computer/launchpad_console
|
||||
name = "Launchpad Control Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/launchpad
|
||||
origin_tech = "programming=3;bluespace=3;plasmatech=2"
|
||||
|
||||
/obj/item/circuitboard/computer/message_monitor
|
||||
name = "Message Monitor (Computer Board)"
|
||||
build_path = /obj/machinery/computer/message_monitor
|
||||
origin_tech = "programming=2"
|
||||
|
||||
/obj/item/circuitboard/computer/security
|
||||
name = "Security Cameras (Computer Board)"
|
||||
build_path = /obj/machinery/computer/security
|
||||
origin_tech = "programming=2;combat=2"
|
||||
|
||||
/obj/item/circuitboard/computer/xenobiology
|
||||
name = "circuit board (Xenobiology Console)"
|
||||
build_path = /obj/machinery/computer/camera_advanced/xenobio
|
||||
origin_tech = "programming=3;biotech=3"
|
||||
|
||||
/obj/item/circuitboard/computer/base_construction
|
||||
name = "circuit board (Aux Mining Base Construction Console)"
|
||||
build_path = /obj/machinery/computer/camera_advanced/base_construction
|
||||
origin_tech = "programming=3;engineering=3"
|
||||
|
||||
/obj/item/circuitboard/computer/aiupload
|
||||
name = "AI Upload (Computer Board)"
|
||||
build_path = /obj/machinery/computer/upload/ai
|
||||
origin_tech = "programming=4;engineering=4"
|
||||
|
||||
/obj/item/circuitboard/computer/borgupload
|
||||
name = "Cyborg Upload (Computer Board)"
|
||||
build_path = /obj/machinery/computer/upload/borg
|
||||
origin_tech = "programming=4;engineering=4"
|
||||
|
||||
/obj/item/circuitboard/computer/med_data
|
||||
name = "Medical Records Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/med_data
|
||||
origin_tech = "programming=2;biotech=2"
|
||||
|
||||
/obj/item/circuitboard/computer/pandemic
|
||||
name = "PanD.E.M.I.C. 2200 (Computer Board)"
|
||||
build_path = /obj/machinery/computer/pandemic
|
||||
origin_tech = "programming=2;biotech=2"
|
||||
|
||||
/obj/item/circuitboard/computer/scan_consolenew
|
||||
name = "DNA Machine (Computer Board)"
|
||||
build_path = /obj/machinery/computer/scan_consolenew
|
||||
origin_tech = "programming=2;biotech=2"
|
||||
|
||||
/obj/item/circuitboard/computer/communications
|
||||
name = "Communications (Computer Board)"
|
||||
build_path = /obj/machinery/computer/communications
|
||||
origin_tech = "programming=3;magnets=3"
|
||||
var/lastTimeUsed = 0
|
||||
|
||||
/obj/item/circuitboard/computer/card
|
||||
name = "ID Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/card
|
||||
origin_tech = "programming=3"
|
||||
|
||||
/obj/item/circuitboard/computer/card/centcom
|
||||
name = "CentCom ID Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/card/centcom
|
||||
|
||||
/obj/item/circuitboard/computer/card/minor
|
||||
name = "Department Management Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/card/minor
|
||||
var/target_dept = 1
|
||||
var/list/dept_list = list("General","Security","Medical","Science","Engineering")
|
||||
|
||||
/obj/item/circuitboard/computer/card/minor/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
target_dept = (target_dept == dept_list.len) ? 1 : (target_dept + 1)
|
||||
to_chat(user, "<span class='notice'>You set the board to \"[dept_list[target_dept]]\".</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/circuitboard/computer/card/minor/examine(user)
|
||||
..()
|
||||
to_chat(user, "Currently set to \"[dept_list[target_dept]]\".")
|
||||
|
||||
//obj/item/circuitboard/computer/shield
|
||||
// name = "Shield Control (Computer Board)"
|
||||
// build_path = /obj/machinery/computer/stationshield
|
||||
/obj/item/circuitboard/computer/teleporter
|
||||
name = "Teleporter (Computer Board)"
|
||||
build_path = /obj/machinery/computer/teleporter
|
||||
origin_tech = "programming=3;bluespace=3;plasmatech=3"
|
||||
|
||||
/obj/item/circuitboard/computer/secure_data
|
||||
name = "Security Records Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/secure_data
|
||||
origin_tech = "programming=2;combat=2"
|
||||
|
||||
/obj/item/circuitboard/computer/stationalert
|
||||
name = "Station Alerts (Computer Board)"
|
||||
build_path = /obj/machinery/computer/station_alert
|
||||
|
||||
/obj/item/circuitboard/computer/atmos_control
|
||||
name = "Atmospheric Monitor (Computer Board)"
|
||||
build_path = /obj/machinery/computer/atmos_control
|
||||
|
||||
/obj/item/circuitboard/computer/atmos_control/tank
|
||||
name = "Tank Control (Computer Board)"
|
||||
build_path = /obj/machinery/computer/atmos_control/tank
|
||||
origin_tech = "programming=2;engineering=3;materials=2"
|
||||
|
||||
/obj/item/circuitboard/computer/atmos_alert
|
||||
name = "Atmospheric Alert (Computer Board)"
|
||||
build_path = /obj/machinery/computer/atmos_alert
|
||||
|
||||
/obj/item/circuitboard/computer/pod
|
||||
name = "Massdriver control (Computer Board)"
|
||||
build_path = /obj/machinery/computer/pod
|
||||
|
||||
/obj/item/circuitboard/computer/robotics
|
||||
name = "Robotics Control (Computer Board)"
|
||||
build_path = /obj/machinery/computer/robotics
|
||||
origin_tech = "programming=3"
|
||||
|
||||
/obj/item/circuitboard/computer/cloning
|
||||
name = "Cloning (Computer Board)"
|
||||
build_path = /obj/machinery/computer/cloning
|
||||
origin_tech = "programming=2;biotech=2"
|
||||
|
||||
/obj/item/circuitboard/computer/arcade/battle
|
||||
name = "Arcade Battle (Computer Board)"
|
||||
build_path = /obj/machinery/computer/arcade/battle
|
||||
origin_tech = "programming=1"
|
||||
|
||||
/obj/item/circuitboard/computer/arcade/orion_trail
|
||||
name = "Orion Trail (Computer Board)"
|
||||
build_path = /obj/machinery/computer/arcade/orion_trail
|
||||
origin_tech = "programming=1"
|
||||
|
||||
/obj/item/circuitboard/computer/turbine_control
|
||||
name = "Turbine control (Computer Board)"
|
||||
build_path = /obj/machinery/computer/turbine_computer
|
||||
|
||||
/obj/item/circuitboard/computer/solar_control
|
||||
name = "Solar Control (Computer Board)" //name fixed 250810
|
||||
build_path = /obj/machinery/power/solar_control
|
||||
origin_tech = "programming=2;powerstorage=2"
|
||||
|
||||
/obj/item/circuitboard/computer/powermonitor
|
||||
name = "Power Monitor (Computer Board)" //name fixed 250810
|
||||
build_path = /obj/machinery/computer/monitor
|
||||
origin_tech = "programming=2;powerstorage=2"
|
||||
|
||||
/obj/item/circuitboard/computer/olddoor
|
||||
name = "DoorMex (Computer Board)"
|
||||
build_path = /obj/machinery/computer/pod/old
|
||||
|
||||
/obj/item/circuitboard/computer/syndicatedoor
|
||||
name = "ProComp Executive (Computer Board)"
|
||||
build_path = /obj/machinery/computer/pod/old/syndicate
|
||||
|
||||
/obj/item/circuitboard/computer/swfdoor
|
||||
name = "Magix (Computer Board)"
|
||||
build_path = /obj/machinery/computer/pod/old/swf
|
||||
|
||||
/obj/item/circuitboard/computer/prisoner
|
||||
name = "Prisoner Management Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/prisoner
|
||||
/obj/item/circuitboard/computer/gulag_teleporter_console
|
||||
name = "Labor Camp teleporter console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/gulag_teleporter_computer
|
||||
|
||||
/obj/item/circuitboard/computer/rdconsole
|
||||
name = "R&D Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/rdconsole/core
|
||||
|
||||
/obj/item/circuitboard/computer/rdconsole/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
if(build_path == /obj/machinery/computer/rdconsole/core)
|
||||
name = "R&D Console - Robotics (Computer Board)"
|
||||
build_path = /obj/machinery/computer/rdconsole/robotics
|
||||
to_chat(user, "<span class='notice'>Access protocols successfully updated.</span>")
|
||||
else
|
||||
name = "R&D Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/rdconsole/core
|
||||
to_chat(user, "<span class='notice'>Defaulting access protocols.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/circuitboard/computer/mecha_control
|
||||
name = "Exosuit Control Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/mecha
|
||||
|
||||
/obj/item/circuitboard/computer/rdservercontrol
|
||||
name = "R&D Server Control (Computer Board)"
|
||||
build_path = /obj/machinery/computer/rdservercontrol
|
||||
|
||||
/obj/item/circuitboard/computer/crew
|
||||
name = "Crew Monitoring Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/crew
|
||||
origin_tech = "programming=2;biotech=2"
|
||||
|
||||
/obj/item/circuitboard/computer/mech_bay_power_console
|
||||
name = "Mech Bay Power Control Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/mech_bay_power_console
|
||||
origin_tech = "programming=3;powerstorage=3"
|
||||
|
||||
/obj/item/circuitboard/computer/cargo
|
||||
name = "Supply Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/cargo
|
||||
origin_tech = "programming=3"
|
||||
var/contraband = FALSE
|
||||
var/emagged = FALSE
|
||||
|
||||
/obj/item/circuitboard/computer/cargo/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/device/multitool))
|
||||
if(!emagged)
|
||||
contraband = !contraband
|
||||
to_chat(user, "<span class='notice'>Receiver spectrum set to [contraband ? "Broad" : "Standard"].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The spectrum chip is unresponsive.</span>")
|
||||
else if(istype(I, /obj/item/card/emag))
|
||||
if(!emagged)
|
||||
contraband = TRUE
|
||||
emagged = TRUE
|
||||
to_chat(user, "<span class='notice'>You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/circuitboard/computer/cargo/request
|
||||
name = "Supply Request Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/cargo/request
|
||||
|
||||
/obj/item/circuitboard/computer/stockexchange
|
||||
name = "circuit board (Stock Exchange Console)"
|
||||
build_path = /obj/machinery/computer/stockexchange
|
||||
origin_tech = "programming=3"
|
||||
|
||||
/obj/item/circuitboard/computer/operating
|
||||
name = "Operating Computer (Computer Board)"
|
||||
build_path = /obj/machinery/computer/operating
|
||||
origin_tech = "programming=2;biotech=3"
|
||||
|
||||
/obj/item/circuitboard/computer/mining
|
||||
name = "Outpost Status Display (Computer Board)"
|
||||
build_path = /obj/machinery/computer/security/mining
|
||||
|
||||
/obj/item/circuitboard/computer/comm_monitor
|
||||
name = "Telecommunications Monitor (Computer Board)"
|
||||
build_path = /obj/machinery/computer/telecomms/monitor
|
||||
origin_tech = "programming=3;magnets=3;bluespace=2"
|
||||
|
||||
/obj/item/circuitboard/computer/comm_server
|
||||
name = "Telecommunications Server Monitor (Computer Board)"
|
||||
build_path = /obj/machinery/computer/telecomms/server
|
||||
origin_tech = "programming=3;magnets=3;bluespace=2"
|
||||
|
||||
/obj/item/circuitboard/computer/shuttle
|
||||
name = "Shuttle (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle
|
||||
var/shuttleId
|
||||
var/possible_destinations = ""
|
||||
|
||||
/obj/item/circuitboard/computer/shuttle/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/device/multitool))
|
||||
var/chosen_id = round(input(usr, "Choose an ID number (-1 for reset):", "Input an Integer", null) as num|null)
|
||||
if(chosen_id >= 0)
|
||||
shuttleId = chosen_id
|
||||
else
|
||||
shuttleId = initial(shuttleId)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/circuitboard/computer/labor_shuttle
|
||||
name = "Labor Shuttle (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/labor
|
||||
|
||||
/obj/item/circuitboard/computer/labor_shuttle/one_way
|
||||
name = "Prisoner Shuttle Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/labor/one_way
|
||||
|
||||
/obj/item/circuitboard/computer/ferry
|
||||
name = "Transport Ferry (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/ferry
|
||||
|
||||
/obj/item/circuitboard/computer/ferry/request
|
||||
name = "Transport Ferry Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/ferry/request
|
||||
|
||||
/obj/item/circuitboard/computer/mining_shuttle
|
||||
name = "Mining Shuttle (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/mining
|
||||
|
||||
/obj/item/circuitboard/computer/white_ship
|
||||
name = "White Ship (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/white_ship
|
||||
|
||||
/obj/item/circuitboard/computer/auxillary_base
|
||||
name = "Auxillary Base Management Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/auxillary_base
|
||||
|
||||
/obj/item/circuitboard/computer/holodeck// Not going to let people get this, but it's just here for future
|
||||
name = "Holodeck Control (Computer Board)"
|
||||
build_path = /obj/machinery/computer/holodeck
|
||||
origin_tech = "programming=4"
|
||||
|
||||
/obj/item/circuitboard/computer/aifixer
|
||||
name = "AI Integrity Restorer (Computer Board)"
|
||||
build_path = /obj/machinery/computer/aifixer
|
||||
origin_tech = "programming=2;biotech=2"
|
||||
|
||||
/obj/item/circuitboard/computer/slot_machine
|
||||
name = "Slot Machine (Computer Board)"
|
||||
build_path = /obj/machinery/computer/slot_machine
|
||||
origin_tech = "programming=1"
|
||||
|
||||
/obj/item/circuitboard/computer/libraryconsole
|
||||
name = "Library Visitor Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/libraryconsole
|
||||
origin_tech = "programming=1"
|
||||
|
||||
/obj/item/circuitboard/computer/libraryconsole/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
if(build_path == /obj/machinery/computer/libraryconsole/bookmanagement)
|
||||
name = "Library Visitor Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/libraryconsole
|
||||
to_chat(user, "<span class='notice'>Defaulting access protocols.</span>")
|
||||
else
|
||||
name = "Book Inventory Management Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/libraryconsole/bookmanagement
|
||||
to_chat(user, "<span class='notice'>Access protocols successfully updated.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/circuitboard/computer/apc_control
|
||||
name = "\improper Power Flow Control Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/apc_control
|
||||
origin_tech = "programming=3;engineering=3;powerstorage=2"
|
||||
|
||||
/obj/item/circuitboard/computer/shuttle/monastery_shuttle
|
||||
name = "Monastery Shuttle (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/monastery_shuttle
|
||||
|
||||
/obj/item/circuitboard/computer/syndicate_shuttle
|
||||
name = "Syndicate Shuttle (Computer Board)"
|
||||
build_path = /obj/machinery/computer/shuttle/syndicate
|
||||
var/challenge = FALSE
|
||||
var/moved = FALSE
|
||||
|
||||
/obj/item/circuitboard/computer/syndicate_shuttle/Initialize()
|
||||
. = ..()
|
||||
GLOB.syndicate_shuttle_boards += src
|
||||
|
||||
/obj/item/circuitboard/computer/syndicate_shuttle/Destroy()
|
||||
GLOB.syndicate_shuttle_boards -= src
|
||||
return ..()
|
||||
|
||||
/obj/item/circuitboard/computer/bsa_control
|
||||
name = "Bluespace Artillery Controls (Computer Board)"
|
||||
build_path = /obj/machinery/computer/bsa_control
|
||||
origin_tech = "engineering=2;combat=2;bluespace=2"
|
||||
|
||||
/obj/item/circuitboard/computer/sat_control
|
||||
name = "Satellite Network Control (Computer Board)"
|
||||
build_path = /obj/machinery/computer/sat_control
|
||||
origin_tech = "engineering=3"
|
||||
@@ -0,0 +1,723 @@
|
||||
/obj/item/circuitboard/machine/sleeper
|
||||
name = "Sleeper (Machine Board)"
|
||||
build_path = /obj/machinery/sleeper
|
||||
origin_tech = "programming=3;biotech=2;engineering=3"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/stock_parts/console_screen = 1,
|
||||
/obj/item/stack/sheet/glass = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/announcement_system
|
||||
name = "Announcement System (Machine Board)"
|
||||
build_path = /obj/machinery/announcement_system
|
||||
origin_tech = "programming=3;bluespace=3;magnets=2"
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/stock_parts/console_screen = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/autolathe
|
||||
name = "Autolathe (Machine Board)"
|
||||
build_path = /obj/machinery/autolathe
|
||||
origin_tech = "engineering=2;programming=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 3,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stock_parts/console_screen = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/clonepod
|
||||
name = "Clone Pod (Machine Board)"
|
||||
build_path = /obj/machinery/clonepod
|
||||
origin_tech = "programming=2;biotech=2"
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/stock_parts/scanning_module = 2,
|
||||
/obj/item/stock_parts/manipulator = 2,
|
||||
/obj/item/stack/sheet/glass = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/abductor
|
||||
name = "alien board (Report This)"
|
||||
icon_state = "abductor_mod"
|
||||
origin_tech = "programming=5;abductor=3"
|
||||
|
||||
/obj/item/circuitboard/machine/clockwork
|
||||
name = "clockwork board (Report This)"
|
||||
icon_state = "clock_mod"
|
||||
|
||||
/obj/item/circuitboard/machine/clonescanner
|
||||
name = "Cloning Scanner (Machine Board)"
|
||||
build_path = /obj/machinery/dna_scannernew
|
||||
origin_tech = "programming=2;biotech=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/scanning_module = 1,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stack/sheet/glass = 1,
|
||||
/obj/item/stack/cable_coil = 2)
|
||||
|
||||
/obj/item/circuitboard/machine/holopad
|
||||
name = "AI Holopad (Machine Board)"
|
||||
build_path = /obj/machinery/holopad
|
||||
origin_tech = "programming=1"
|
||||
req_components = list(/obj/item/stock_parts/capacitor = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/launchpad
|
||||
name = "Bluespace Launchpad (Machine Board)"
|
||||
build_path = /obj/machinery/launchpad
|
||||
origin_tech = "programming=3;engineering=3;plasmatech=2;bluespace=3"
|
||||
req_components = list(
|
||||
/obj/item/ore/bluespace_crystal = 1,
|
||||
/obj/item/stock_parts/manipulator = 1)
|
||||
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
|
||||
|
||||
/obj/item/circuitboard/machine/limbgrower
|
||||
name = "Limb Grower (Machine Board)"
|
||||
build_path = /obj/machinery/limbgrower
|
||||
origin_tech = "programming=2;biotech=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/reagent_containers/glass/beaker = 2,
|
||||
/obj/item/stock_parts/console_screen = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/quantumpad
|
||||
name = "Quantum Pad (Machine Board)"
|
||||
build_path = /obj/machinery/quantumpad
|
||||
origin_tech = "programming=3;engineering=3;plasmatech=3;bluespace=4"
|
||||
req_components = list(
|
||||
/obj/item/ore/bluespace_crystal = 1,
|
||||
/obj/item/stock_parts/capacitor = 1,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stack/cable_coil = 1)
|
||||
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
|
||||
|
||||
/obj/item/circuitboard/machine/recharger
|
||||
name = "Weapon Recharger (Machine Board)"
|
||||
build_path = /obj/machinery/recharger
|
||||
origin_tech = "powerstorage=4;engineering=3;materials=4"
|
||||
req_components = list(/obj/item/stock_parts/capacitor = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/cyborgrecharger
|
||||
name = "Cyborg Recharger (Machine Board)"
|
||||
build_path = /obj/machinery/recharge_station
|
||||
origin_tech = "powerstorage=3;engineering=3"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/capacitor = 2,
|
||||
/obj/item/stock_parts/cell = 1,
|
||||
/obj/item/stock_parts/manipulator = 1)
|
||||
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
|
||||
|
||||
/obj/item/circuitboard/machine/recycler
|
||||
name = "Recycler (Machine Board)"
|
||||
build_path = /obj/machinery/recycler
|
||||
origin_tech = "programming=2;engineering=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/stock_parts/manipulator = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/space_heater
|
||||
name = "Space Heater (Machine Board)"
|
||||
build_path = /obj/machinery/space_heater
|
||||
origin_tech = "programming=2;engineering=2;plasmatech=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stock_parts/capacitor = 1,
|
||||
/obj/item/stack/cable_coil = 3)
|
||||
|
||||
/obj/item/circuitboard/machine/telecomms/broadcaster
|
||||
name = "Subspace Broadcaster (Machine Board)"
|
||||
build_path = /obj/machinery/telecomms/broadcaster
|
||||
origin_tech = "programming=2;engineering=2;bluespace=1"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/manipulator = 2,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/stock_parts/subspace/filter = 1,
|
||||
/obj/item/stock_parts/subspace/crystal = 1,
|
||||
/obj/item/stock_parts/micro_laser = 2)
|
||||
|
||||
/obj/item/circuitboard/machine/telecomms/bus
|
||||
name = "Bus Mainframe (Machine Board)"
|
||||
build_path = /obj/machinery/telecomms/bus
|
||||
origin_tech = "programming=2;engineering=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/manipulator = 2,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/stock_parts/subspace/filter = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/telecomms/hub
|
||||
name = "Hub Mainframe (Machine Board)"
|
||||
build_path = /obj/machinery/telecomms/hub
|
||||
origin_tech = "programming=2;engineering=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/manipulator = 2,
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/stock_parts/subspace/filter = 2)
|
||||
|
||||
/obj/item/circuitboard/machine/telecomms/processor
|
||||
name = "Processor Unit (Machine Board)"
|
||||
build_path = /obj/machinery/telecomms/processor
|
||||
origin_tech = "programming=2;engineering=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/manipulator = 3,
|
||||
/obj/item/stock_parts/subspace/filter = 1,
|
||||
/obj/item/stock_parts/subspace/treatment = 2,
|
||||
/obj/item/stock_parts/subspace/analyzer = 1,
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/stock_parts/subspace/amplifier = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/telecomms/receiver
|
||||
name = "Subspace Receiver (Machine Board)"
|
||||
build_path = /obj/machinery/telecomms/receiver
|
||||
origin_tech = "programming=2;engineering=2;bluespace=1"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/subspace/ansible = 1,
|
||||
/obj/item/stock_parts/subspace/filter = 1,
|
||||
/obj/item/stock_parts/manipulator = 2,
|
||||
/obj/item/stock_parts/micro_laser = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/telecomms/relay
|
||||
name = "Relay Mainframe (Machine Board)"
|
||||
build_path = /obj/machinery/telecomms/relay
|
||||
origin_tech = "programming=2;engineering=2;bluespace=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/manipulator = 2,
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/stock_parts/subspace/filter = 2)
|
||||
|
||||
/obj/item/circuitboard/machine/telecomms/server
|
||||
name = "Telecommunication Server (Machine Board)"
|
||||
build_path = /obj/machinery/telecomms/server
|
||||
origin_tech = "programming=2;engineering=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/manipulator = 2,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/stock_parts/subspace/filter = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/teleporter_hub
|
||||
name = "Teleporter Hub (Machine Board)"
|
||||
build_path = /obj/machinery/teleport/hub
|
||||
origin_tech = "programming=3;engineering=4;bluespace=4;materials=4"
|
||||
req_components = list(
|
||||
/obj/item/ore/bluespace_crystal = 3,
|
||||
/obj/item/stock_parts/matter_bin = 1)
|
||||
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
|
||||
|
||||
/obj/item/circuitboard/machine/teleporter_station
|
||||
name = "Teleporter Station (Machine Board)"
|
||||
build_path = /obj/machinery/teleport/station
|
||||
origin_tech = "programming=4;engineering=4;bluespace=4;plasmatech=3"
|
||||
req_components = list(
|
||||
/obj/item/ore/bluespace_crystal = 2,
|
||||
/obj/item/stock_parts/capacitor = 2,
|
||||
/obj/item/stock_parts/console_screen = 1)
|
||||
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
|
||||
|
||||
/obj/item/circuitboard/machine/vendor
|
||||
name = "Booze-O-Mat Vendor (Machine Board)"
|
||||
build_path = /obj/machinery/vending/boozeomat
|
||||
origin_tech = "programming=1"
|
||||
req_components = list(
|
||||
/obj/item/vending_refill/boozeomat = 3)
|
||||
|
||||
var/static/list/vending_names_paths = list(/obj/machinery/vending/boozeomat = "Booze-O-Mat",
|
||||
/obj/machinery/vending/coffee = "Solar's Best Hot Drinks",
|
||||
/obj/machinery/vending/snack = "Getmore Chocolate Corp",
|
||||
/obj/machinery/vending/cola = "Robust Softdrinks",
|
||||
/obj/machinery/vending/cigarette = "ShadyCigs Deluxe",
|
||||
/obj/machinery/vending/autodrobe = "AutoDrobe",
|
||||
/obj/machinery/vending/clothing = "ClothesMate",
|
||||
/obj/machinery/vending/medical = "NanoMed Plus",
|
||||
/obj/machinery/vending/wallmed = "NanoMed")
|
||||
|
||||
/obj/item/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
var/position = vending_names_paths.Find(build_path)
|
||||
position = (position == vending_names_paths.len) ? 1 : (position + 1)
|
||||
var/typepath = vending_names_paths[position]
|
||||
|
||||
to_chat(user, "<span class='notice'>You set the board to \"[vending_names_paths[typepath]]\".</span>")
|
||||
set_type(typepath)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/circuitboard/machine/vendor/proc/set_type(obj/machinery/vending/typepath)
|
||||
build_path = typepath
|
||||
name = "[vending_names_paths[build_path]] Vendor (Machine Board)"
|
||||
req_components = list(initial(typepath.refill_canister) = initial(typepath.refill_count))
|
||||
|
||||
/obj/item/circuitboard/machine/vendor/apply_default_parts(obj/machinery/M)
|
||||
for(var/typepath in vending_names_paths)
|
||||
if(istype(M, typepath))
|
||||
set_type(typepath)
|
||||
break
|
||||
return ..()
|
||||
|
||||
/obj/item/circuitboard/machine/mech_recharger
|
||||
name = "Mechbay Recharger (Machine Board)"
|
||||
build_path = /obj/machinery/mech_bay_recharge_port
|
||||
origin_tech = "programming=3;powerstorage=3;engineering=3"
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/stock_parts/capacitor = 5)
|
||||
|
||||
/obj/item/circuitboard/machine/mechfab
|
||||
name = "Exosuit Fabricator (Machine Board)"
|
||||
build_path = /obj/machinery/mecha_part_fabricator
|
||||
origin_tech = "programming=2;engineering=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 2,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stock_parts/console_screen = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/cryo_tube
|
||||
name = "Cryotube (Machine Board)"
|
||||
build_path = /obj/machinery/atmospherics/components/unary/cryo_cell
|
||||
origin_tech = "programming=4;biotech=3;engineering=4;plasmatech=3"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/stock_parts/console_screen = 1,
|
||||
/obj/item/stack/sheet/glass = 2)
|
||||
|
||||
/obj/item/circuitboard/machine/thermomachine
|
||||
name = "Thermomachine (Machine Board)"
|
||||
desc = "You can use a screwdriver to switch between heater and freezer."
|
||||
origin_tech = "programming=3;plasmatech=3"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 2,
|
||||
/obj/item/stock_parts/micro_laser = 2,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/stock_parts/console_screen = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/thermomachine/Initialize()
|
||||
. = ..()
|
||||
if(prob(50))
|
||||
name = "Freezer (Machine Board)"
|
||||
build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer
|
||||
else
|
||||
name = "Heater (Machine Board)"
|
||||
build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater
|
||||
|
||||
#define FREEZER /obj/item/circuitboard/machine/thermomachine/freezer
|
||||
#define HEATER /obj/item/circuitboard/machine/thermomachine/heater
|
||||
|
||||
/obj/item/circuitboard/machine/thermomachine/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
var/obj/item/circuitboard/new_type
|
||||
var/new_setting
|
||||
switch(build_path)
|
||||
if(FREEZER)
|
||||
new_type = HEATER
|
||||
new_setting = "Heater"
|
||||
if(HEATER)
|
||||
new_type = FREEZER
|
||||
new_setting = "Freezer"
|
||||
name = initial(new_type.name)
|
||||
build_path = initial(new_type.build_path)
|
||||
playsound(user, I.usesound, 50, 1)
|
||||
to_chat(user, "<span class='notice'>You change the circuitboard setting to \"[new_setting]\".</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
#undef FREEZER
|
||||
#undef HEATER
|
||||
|
||||
/obj/item/circuitboard/machine/thermomachine/heater
|
||||
name = "Heater (Machine Board)"
|
||||
build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater
|
||||
|
||||
/obj/item/circuitboard/machine/thermomachine/freezer
|
||||
name = "Freezer (Machine Board)"
|
||||
build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer
|
||||
|
||||
/obj/item/circuitboard/machine/deep_fryer
|
||||
name = "circuit board (Deep Fryer)"
|
||||
build_path = /obj/machinery/deepfryer
|
||||
origin_tech = "programming=1"
|
||||
req_components = list(/obj/item/stock_parts/micro_laser = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/gibber
|
||||
name = "Gibber (Machine Board)"
|
||||
build_path = /obj/machinery/gibber
|
||||
origin_tech = "programming=2;engineering=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/stock_parts/manipulator = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/monkey_recycler
|
||||
name = "Monkey Recycler (Machine Board)"
|
||||
build_path = /obj/machinery/monkey_recycler
|
||||
origin_tech = "programming=1;biotech=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/stock_parts/manipulator = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/processor
|
||||
name = "Food Processor (Machine Board)"
|
||||
build_path = /obj/machinery/processor
|
||||
origin_tech = "programming=1"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/stock_parts/manipulator = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/processor/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
if(build_path == /obj/machinery/processor)
|
||||
name = "Slime Processor (Machine Board)"
|
||||
build_path = /obj/machinery/processor/slime
|
||||
to_chat(user, "<span class='notice'>Name protocols successfully updated.</span>")
|
||||
else
|
||||
name = "Food Processor (Machine Board)"
|
||||
build_path = /obj/machinery/processor
|
||||
to_chat(user, "<span class='notice'>Defaulting name protocols.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/circuitboard/machine/processor/slime
|
||||
name = "Slime Processor (Machine Board)"
|
||||
build_path = /obj/machinery/processor/slime
|
||||
|
||||
/obj/item/circuitboard/machine/smartfridge
|
||||
name = "Smartfridge (Machine Board)"
|
||||
build_path = /obj/machinery/smartfridge
|
||||
origin_tech = "programming=1"
|
||||
req_components = list(/obj/item/stock_parts/matter_bin = 1)
|
||||
var/static/list/fridges_name_paths = list(/obj/machinery/smartfridge = "plant produce",
|
||||
/obj/machinery/smartfridge/food = "food",
|
||||
/obj/machinery/smartfridge/drinks = "drinks",
|
||||
/obj/machinery/smartfridge/extract = "slimes",
|
||||
/obj/machinery/smartfridge/chemistry = "chems",
|
||||
/obj/machinery/smartfridge/chemistry/virology = "viruses",
|
||||
/obj/machinery/smartfridge/disks = "disks")
|
||||
|
||||
/obj/item/circuitboard/machine/smartfridge/Initialize(mapload, new_type)
|
||||
if(new_type)
|
||||
build_path = new_type
|
||||
return ..()
|
||||
|
||||
/obj/item/circuitboard/machine/smartfridge/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
var/position = fridges_name_paths.Find(build_path, fridges_name_paths)
|
||||
position = (position == fridges_name_paths.len) ? 1 : (position + 1)
|
||||
build_path = fridges_name_paths[position]
|
||||
to_chat(user, "<span class='notice'>You set the board to [fridges_name_paths[build_path]].</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/circuitboard/machine/smartfridge/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='info'>[src] is set to [fridges_name_paths[build_path]]. You can use a screwdriver to reconfigure it.</span>")
|
||||
|
||||
/obj/item/circuitboard/machine/biogenerator
|
||||
name = "Biogenerator (Machine Board)"
|
||||
build_path = /obj/machinery/biogenerator
|
||||
origin_tech = "programming=2;biotech=3;materials=3"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stack/cable_coil = 1,
|
||||
/obj/item/stock_parts/console_screen = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/plantgenes
|
||||
name = "Plant DNA Manipulator (Machine Board)"
|
||||
build_path = /obj/machinery/plantgenes
|
||||
origin_tech = "programming=3;biotech=3"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stock_parts/console_screen = 1,
|
||||
/obj/item/stock_parts/scanning_module = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/plantgenes/vault
|
||||
name = "alien board (Plant DNA Manipulator)"
|
||||
icon_state = "abductor_mod"
|
||||
origin_tech = "programming=5;biotech=5"
|
||||
// It wasn't made by actual abductors race, so no abductor tech here.
|
||||
def_components = list(
|
||||
/obj/item/stock_parts/manipulator = /obj/item/stock_parts/manipulator/femto,
|
||||
/obj/item/stock_parts/micro_laser = /obj/item/stock_parts/micro_laser/quadultra,
|
||||
/obj/item/stock_parts/scanning_module = /obj/item/stock_parts/scanning_module/triphasic)
|
||||
|
||||
|
||||
/obj/item/circuitboard/machine/hydroponics
|
||||
name = "Hydroponics Tray (Machine Board)"
|
||||
build_path = /obj/machinery/hydroponics/constructable
|
||||
origin_tech = "programming=1;biotech=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 2,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stock_parts/console_screen = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/seed_extractor
|
||||
name = "Seed Extractor (Machine Board)"
|
||||
build_path = /obj/machinery/seed_extractor
|
||||
origin_tech = "programming=1"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/stock_parts/manipulator = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/ore_redemption
|
||||
name = "Ore Redemption (Machine Board)"
|
||||
build_path = /obj/machinery/mineral/ore_redemption
|
||||
origin_tech = "programming=1;engineering=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/console_screen = 1,
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/device/assembly/igniter = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/mining_equipment_vendor
|
||||
name = "Mining Equipment Vendor (Machine Board)"
|
||||
build_path = /obj/machinery/mineral/equipment_vendor
|
||||
origin_tech = "programming=1;engineering=3"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/console_screen = 1,
|
||||
/obj/item/stock_parts/matter_bin = 3)
|
||||
|
||||
/obj/item/circuitboard/machine/mining_equipment_vendor/golem
|
||||
name = "Golem Ship Equipment Vendor (Machine Board)"
|
||||
build_path = /obj/machinery/mineral/equipment_vendor/golem
|
||||
|
||||
/obj/item/circuitboard/machine/ntnet_relay
|
||||
name = "NTNet Relay (Machine Board)"
|
||||
build_path = /obj/machinery/ntnet_relay
|
||||
origin_tech = "programming=3;bluespace=3;magnets=2"
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/stock_parts/subspace/filter = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/pacman
|
||||
name = "PACMAN-type Generator (Machine Board)"
|
||||
build_path = /obj/machinery/power/port_gen/pacman
|
||||
origin_tech = "programming=2;powerstorage=3;plasmatech=3;engineering=3"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/stock_parts/capacitor = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/pacman/super
|
||||
name = "SUPERPACMAN-type Generator (Machine Board)"
|
||||
build_path = /obj/machinery/power/port_gen/pacman/super
|
||||
origin_tech = "programming=3;powerstorage=4;engineering=4"
|
||||
|
||||
/obj/item/circuitboard/machine/pacman/mrs
|
||||
name = "MRSPACMAN-type Generator (Machine Board)"
|
||||
build_path = /obj/machinery/power/port_gen/pacman/mrs
|
||||
origin_tech = "programming=3;powerstorage=4;engineering=4;plasmatech=4"
|
||||
|
||||
/obj/item/circuitboard/machine/rtg
|
||||
name = "RTG (Machine Board)"
|
||||
build_path = /obj/machinery/power/rtg
|
||||
origin_tech = "programming=2;materials=4;powerstorage=3;engineering=2"
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/stock_parts/capacitor = 1,
|
||||
/obj/item/stack/sheet/mineral/uranium = 10) // We have no Pu-238, and this is the closest thing to it.
|
||||
|
||||
/obj/item/circuitboard/machine/rtg/advanced
|
||||
name = "Advanced RTG (Machine Board)"
|
||||
build_path = /obj/machinery/power/rtg/advanced
|
||||
origin_tech = "programming=3;materials=5;powerstorage=4;engineering=3;plasmatech=3"
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/stock_parts/capacitor = 1,
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stack/sheet/mineral/uranium = 10,
|
||||
/obj/item/stack/sheet/mineral/plasma = 5)
|
||||
|
||||
/obj/item/circuitboard/machine/abductor/core
|
||||
name = "alien board (Void Core)"
|
||||
build_path = /obj/machinery/power/rtg/abductor
|
||||
origin_tech = "programming=5;abductor=5;powerstorage=8;engineering=8"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/capacitor = 1,
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stock_parts/cell/infinite/abductor = 1)
|
||||
def_components = list(
|
||||
/obj/item/stock_parts/capacitor = /obj/item/stock_parts/capacitor/quadratic,
|
||||
/obj/item/stock_parts/micro_laser = /obj/item/stock_parts/micro_laser/quadultra)
|
||||
|
||||
/obj/item/circuitboard/machine/emitter
|
||||
name = "Emitter (Machine Board)"
|
||||
build_path = /obj/machinery/power/emitter
|
||||
origin_tech = "programming=3;powerstorage=4;engineering=4"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stock_parts/manipulator = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/smes
|
||||
name = "SMES (Machine Board)"
|
||||
build_path = /obj/machinery/power/smes
|
||||
origin_tech = "programming=3;powerstorage=3;engineering=3"
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/stock_parts/cell = 5,
|
||||
/obj/item/stock_parts/capacitor = 1)
|
||||
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high/empty)
|
||||
|
||||
/obj/item/circuitboard/machine/tesla_coil
|
||||
name = "Tesla Coil (Machine Board)"
|
||||
build_path = /obj/machinery/power/tesla_coil
|
||||
origin_tech = "programming=3;magnets=3;powerstorage=3"
|
||||
req_components = list(/obj/item/stock_parts/capacitor = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/grounding_rod
|
||||
name = "Grounding Rod (Machine Board)"
|
||||
build_path = /obj/machinery/power/grounding_rod
|
||||
origin_tech = "programming=3;powerstorage=3;magnets=3;plasmatech=2"
|
||||
req_components = list(/obj/item/stock_parts/capacitor = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/power_compressor
|
||||
name = "Power Compressor (Machine Board)"
|
||||
build_path = /obj/machinery/power/compressor
|
||||
origin_tech = "programming=4;powerstorage=4;engineering=4"
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/stock_parts/manipulator = 6)
|
||||
|
||||
/obj/item/circuitboard/machine/power_turbine
|
||||
name = "Power Turbine (Machine Board)"
|
||||
build_path = /obj/machinery/power/turbine
|
||||
origin_tech = "programming=4;powerstorage=4;engineering=4"
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 5,
|
||||
/obj/item/stock_parts/capacitor = 6)
|
||||
|
||||
/obj/item/circuitboard/machine/chem_dispenser
|
||||
name = "Portable Chem Dispenser (Machine Board)"
|
||||
build_path = /obj/machinery/chem_dispenser/constructable
|
||||
origin_tech = "materials=4;programming=4;plasmatech=4;biotech=3"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 2,
|
||||
/obj/item/stock_parts/capacitor = 1,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stock_parts/console_screen = 1,
|
||||
/obj/item/stock_parts/cell = 1)
|
||||
def_components = list(/obj/item/stock_parts/cell = /obj/item/stock_parts/cell/high)
|
||||
|
||||
/obj/item/circuitboard/machine/chem_heater
|
||||
name = "Chemical Heater (Machine Board)"
|
||||
build_path = /obj/machinery/chem_heater
|
||||
origin_tech = "programming=2;engineering=2;biotech=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stock_parts/console_screen = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/chem_master
|
||||
name = "ChemMaster 3000 (Machine Board)"
|
||||
build_path = /obj/machinery/chem_master
|
||||
origin_tech = "materials=3;programming=2;biotech=3"
|
||||
req_components = list(
|
||||
/obj/item/reagent_containers/glass/beaker = 2,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stock_parts/console_screen = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/chem_master/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
var/new_name = "ChemMaster"
|
||||
var/new_path = /obj/machinery/chem_master
|
||||
|
||||
if(build_path == /obj/machinery/chem_master)
|
||||
new_name = "CondiMaster"
|
||||
new_path = /obj/machinery/chem_master/condimaster
|
||||
|
||||
build_path = new_path
|
||||
name = "[new_name] 3000 (Machine Board)"
|
||||
to_chat(user, "<span class='notice'>You change the circuit board setting to \"[new_name]\".</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/circuitboard/machine/chem_master/condi
|
||||
name = "CondiMaster 3000 (Machine Board)"
|
||||
build_path = /obj/machinery/chem_master/condimaster
|
||||
|
||||
/obj/item/circuitboard/machine/circuit_imprinter
|
||||
name = "Circuit Imprinter (Machine Board)"
|
||||
build_path = /obj/machinery/r_n_d/circuit_imprinter
|
||||
origin_tech = "engineering=2;programming=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/reagent_containers/glass/beaker = 2)
|
||||
|
||||
/obj/item/circuitboard/machine/destructive_analyzer
|
||||
name = "Destructive Analyzer (Machine Board)"
|
||||
build_path = /obj/machinery/r_n_d/destructive_analyzer
|
||||
origin_tech = "magnets=2;engineering=2;programming=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/scanning_module = 1,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stock_parts/micro_laser = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/experimentor
|
||||
name = "E.X.P.E.R.I-MENTOR (Machine Board)"
|
||||
build_path = /obj/machinery/r_n_d/experimentor
|
||||
origin_tech = "magnets=1;engineering=1;programming=1;biotech=1;bluespace=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/scanning_module = 1,
|
||||
/obj/item/stock_parts/manipulator = 2,
|
||||
/obj/item/stock_parts/micro_laser = 2)
|
||||
|
||||
/obj/item/circuitboard/machine/protolathe
|
||||
name = "Protolathe (Machine Board)"
|
||||
build_path = /obj/machinery/r_n_d/protolathe
|
||||
origin_tech = "engineering=2;programming=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 2,
|
||||
/obj/item/stock_parts/manipulator = 2,
|
||||
/obj/item/reagent_containers/glass/beaker = 2)
|
||||
|
||||
/obj/item/circuitboard/machine/rdserver
|
||||
name = "R&D Server (Machine Board)"
|
||||
build_path = /obj/machinery/r_n_d/server
|
||||
origin_tech = "programming=3"
|
||||
req_components = list(
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/stock_parts/scanning_module = 1)
|
||||
|
||||
/obj/item/circuitboard/machine/bsa/back
|
||||
name = "Bluespace Artillery Generator (Machine Board)"
|
||||
build_path = /obj/machinery/bsa/back
|
||||
origin_tech = "engineering=2;combat=2;bluespace=2" //No freebies!
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/capacitor/quadratic = 5,
|
||||
/obj/item/stack/cable_coil = 2)
|
||||
|
||||
/obj/item/circuitboard/machine/bsa/middle
|
||||
name = "Bluespace Artillery Fusor (Machine Board)"
|
||||
build_path = /obj/machinery/bsa/middle
|
||||
origin_tech = "engineering=2;combat=2;bluespace=2"
|
||||
req_components = list(
|
||||
/obj/item/ore/bluespace_crystal = 20,
|
||||
/obj/item/stack/cable_coil = 2)
|
||||
|
||||
/obj/item/circuitboard/machine/bsa/front
|
||||
name = "Bluespace Artillery Bore (Machine Board)"
|
||||
build_path = /obj/machinery/bsa/front
|
||||
origin_tech = "engineering=2;combat=2;bluespace=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/manipulator/femto = 5,
|
||||
/obj/item/stack/cable_coil = 2)
|
||||
|
||||
/obj/item/circuitboard/machine/dna_vault
|
||||
name = "DNA Vault (Machine Board)"
|
||||
build_path = /obj/machinery/dna_vault
|
||||
origin_tech = "engineering=2;combat=2;bluespace=2" //No freebies!
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/capacitor/super = 5,
|
||||
/obj/item/stock_parts/manipulator/pico = 5,
|
||||
/obj/item/stack/cable_coil = 2)
|
||||
|
||||
/obj/item/circuitboard/machine/microwave
|
||||
name = "Microwave (Machine Board)"
|
||||
build_path = /obj/machinery/microwave
|
||||
origin_tech = "programming=2;magnets=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stock_parts/matter_bin = 1,
|
||||
/obj/item/stack/cable_coil = 2,
|
||||
/obj/item/stock_parts/console_screen = 1,
|
||||
/obj/item/stack/sheet/glass = 1)
|
||||
@@ -1,14 +1,14 @@
|
||||
|
||||
/obj/item/weapon/pie_cannon
|
||||
/obj/item/pie_cannon
|
||||
name = "pie cannon"
|
||||
desc = "Load cream pie for optimal results"
|
||||
force = 10
|
||||
icon_state = "piecannon"
|
||||
item_state = "powerfist"
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/pie/loaded = null
|
||||
var/obj/item/reagent_containers/food/snacks/pie/loaded = null
|
||||
|
||||
/obj/item/weapon/pie_cannon/attackby(obj/item/I, mob/living/L)
|
||||
if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/pie))
|
||||
/obj/item/pie_cannon/attackby(obj/item/I, mob/living/L)
|
||||
if(istype(I, /obj/item/reagent_containers/food/snacks/pie))
|
||||
if(!loaded)
|
||||
L.transferItemToLoc(I, src)
|
||||
loaded = I
|
||||
@@ -16,7 +16,7 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/pie_cannon/afterattack(atom/target, mob/living/user, flag, params)
|
||||
/obj/item/pie_cannon/afterattack(atom/target, mob/living/user, flag, params)
|
||||
if(!loaded)
|
||||
return ..()
|
||||
var/obj/item/projectile/pie/launched = new /obj/item/projectile/pie(src)
|
||||
@@ -32,7 +32,7 @@
|
||||
/obj/item/projectile/pie
|
||||
name = "pie"
|
||||
desc = "Think fast!"
|
||||
var/obj/item/weapon/reagent_containers/food/snacks/pie/P = null
|
||||
var/obj/item/reagent_containers/food/snacks/pie/P = null
|
||||
|
||||
/obj/item/projectile/pie/on_hit(atom/A)
|
||||
. = ..()
|
||||
+25
-26
@@ -9,51 +9,50 @@
|
||||
* Soap
|
||||
*/
|
||||
|
||||
/obj/item/weapon/soap
|
||||
/obj/item/soap
|
||||
name = "soap"
|
||||
desc = "A cheap bar of soap. Doesn't smell."
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "soap"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
flags = NOBLUDGEON
|
||||
flags_1 = NOBLUDGEON_1
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
var/cleanspeed = 50 //slower than mop
|
||||
force_string = "robust... against germs"
|
||||
|
||||
/obj/item/weapon/soap/nanotrasen
|
||||
/obj/item/soap/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/slippery, 80)
|
||||
|
||||
/obj/item/soap/nanotrasen
|
||||
desc = "A Nanotrasen brand bar of soap. Smells of plasma."
|
||||
icon_state = "soapnt"
|
||||
|
||||
/obj/item/weapon/soap/homemade
|
||||
/obj/item/soap/homemade
|
||||
desc = "A homemade bar of soap. Smells of... well...."
|
||||
icon_state = "soapgibs"
|
||||
cleanspeed = 45 // a little faster to reward chemists for going to the effort
|
||||
|
||||
/obj/item/weapon/soap/deluxe
|
||||
/obj/item/soap/deluxe
|
||||
desc = "A deluxe Waffle Co. brand bar of soap. Smells of high-class luxury."
|
||||
icon_state = "soapdeluxe"
|
||||
cleanspeed = 40 //same speed as mop because deluxe -- captain gets one of these
|
||||
|
||||
/obj/item/weapon/soap/syndie
|
||||
/obj/item/soap/syndie
|
||||
desc = "An untrustworthy bar of soap made of strong chemical agents that dissolve blood faster."
|
||||
icon_state = "soapsyndie"
|
||||
cleanspeed = 10 //much faster than mop so it is useful for traitors who want to clean crime scenes
|
||||
|
||||
/obj/item/weapon/soap/suicide_act(mob/user)
|
||||
/obj/item/soap/suicide_act(mob/user)
|
||||
user.say(";FFFFFFFFFFFFFFFFUUUUUUUDGE!!")
|
||||
user.visible_message("<span class='suicide'>[user] lifts [src] to their mouth and gnaws on it furiously, producing a thick froth! [user.p_they(TRUE)]'ll never get that BB gun now!")
|
||||
new /obj/effect/particle_effect/foam(loc)
|
||||
return (TOXLOSS)
|
||||
|
||||
/obj/item/weapon/soap/Crossed(AM as mob|obj)
|
||||
if (istype(AM, /mob/living/carbon))
|
||||
var/mob/living/carbon/M = AM
|
||||
M.slip(80, src)
|
||||
|
||||
/obj/item/weapon/soap/afterattack(atom/target, mob/user, proximity)
|
||||
/obj/item/soap/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity || !check_allowed_items(target))
|
||||
return
|
||||
//I couldn't feasibly fix the overlay bugs caused by cleaning items we are wearing.
|
||||
@@ -94,10 +93,10 @@
|
||||
*/
|
||||
|
||||
|
||||
/obj/item/weapon/bikehorn
|
||||
/obj/item/bikehorn
|
||||
name = "bike horn"
|
||||
desc = "A horn off of a bicycle."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "bike_horn"
|
||||
item_state = "bike_horn"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/horns_lefthand.dmi'
|
||||
@@ -112,28 +111,28 @@
|
||||
var/honksound = 'sound/items/bikehorn.ogg'
|
||||
var/cooldowntime = 20
|
||||
|
||||
/obj/item/weapon/bikehorn/suicide_act(mob/user)
|
||||
/obj/item/bikehorn/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] solemnly points the horn at [user.p_their()] temple! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
playsound(src.loc, honksound, 50, 1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
/obj/item/bikehorn/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
if(!(next_usable > world.time))
|
||||
playsound(loc, honksound, 50, 1, -1) //plays instead of tap.ogg!
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/bikehorn/attack_self(mob/user)
|
||||
/obj/item/bikehorn/attack_self(mob/user)
|
||||
if(!(next_usable > world.time))
|
||||
next_usable = world.time + cooldowntime
|
||||
playsound(src.loc, honksound, 50, 1)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
/obj/item/weapon/bikehorn/Crossed(mob/living/L)
|
||||
/obj/item/bikehorn/Crossed(mob/living/L)
|
||||
if(isliving(L))
|
||||
playsound(loc, honksound, 50, 1, -1)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/bikehorn/airhorn
|
||||
/obj/item/bikehorn/airhorn
|
||||
name = "air horn"
|
||||
desc = "Damn son, where'd you find this?"
|
||||
icon_state = "air_horn"
|
||||
@@ -141,21 +140,21 @@
|
||||
cooldowntime = 50
|
||||
origin_tech = "materials=4;engineering=4"
|
||||
|
||||
/obj/item/weapon/bikehorn/golden
|
||||
/obj/item/bikehorn/golden
|
||||
name = "golden bike horn"
|
||||
desc = "Golden? Clearly, it's made with bananium! Honk!"
|
||||
icon_state = "gold_horn"
|
||||
item_state = "gold_horn"
|
||||
|
||||
/obj/item/weapon/bikehorn/golden/attack()
|
||||
/obj/item/bikehorn/golden/attack()
|
||||
flip_mobs()
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/bikehorn/golden/attack_self(mob/user)
|
||||
/obj/item/bikehorn/golden/attack_self(mob/user)
|
||||
flip_mobs()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/bikehorn/golden/proc/flip_mobs(mob/living/carbon/M, mob/user)
|
||||
/obj/item/bikehorn/golden/proc/flip_mobs(mob/living/carbon/M, mob/user)
|
||||
if(!(next_usable > world.time))
|
||||
var/turf/T = get_turf(src)
|
||||
for(M in ohearers(7, T))
|
||||
@@ -165,7 +164,7 @@
|
||||
continue
|
||||
M.emote("flip")
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/canned_laughter
|
||||
/obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter
|
||||
name = "Canned Laughter"
|
||||
desc = "Just looking at this makes you want to giggle."
|
||||
icon_state = "laughter"
|
||||
@@ -2,7 +2,7 @@
|
||||
#define WAND_BOLT "Toggle Bolts"
|
||||
#define WAND_EMERGENCY "Toggle Emergency Access"
|
||||
|
||||
/obj/item/weapon/door_remote
|
||||
/obj/item/door_remote
|
||||
icon_state = "gangtool-white"
|
||||
item_state = "electronic"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
@@ -13,14 +13,14 @@
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/mode = WAND_OPEN
|
||||
var/region_access = 1 //See access.dm
|
||||
var/obj/item/weapon/card/id/ID
|
||||
var/obj/item/card/id/ID
|
||||
|
||||
/obj/item/weapon/door_remote/New()
|
||||
/obj/item/door_remote/New()
|
||||
..()
|
||||
ID = new /obj/item/weapon/card/id
|
||||
ID = new /obj/item/card/id
|
||||
ID.access = get_region_accesses(region_access)
|
||||
|
||||
/obj/item/weapon/door_remote/attack_self(mob/user)
|
||||
/obj/item/door_remote/attack_self(mob/user)
|
||||
switch(mode)
|
||||
if(WAND_OPEN)
|
||||
mode = WAND_BOLT
|
||||
@@ -30,7 +30,7 @@
|
||||
mode = WAND_OPEN
|
||||
to_chat(user, "Now in mode: [mode].")
|
||||
|
||||
/obj/item/weapon/door_remote/afterattack(obj/machinery/door/airlock/D, mob/user)
|
||||
/obj/item/door_remote/afterattack(obj/machinery/door/airlock/D, mob/user)
|
||||
if(!istype(D))
|
||||
return
|
||||
if(!(D.hasPower()))
|
||||
@@ -60,43 +60,43 @@
|
||||
else
|
||||
to_chat(user, "<span class='danger'>[src] does not have access to this door.</span>")
|
||||
|
||||
/obj/item/weapon/door_remote/omni
|
||||
/obj/item/door_remote/omni
|
||||
name = "omni door remote"
|
||||
desc = "This control wand can access any door on the station."
|
||||
icon_state = "gangtool-yellow"
|
||||
region_access = 0
|
||||
|
||||
/obj/item/weapon/door_remote/captain
|
||||
/obj/item/door_remote/captain
|
||||
name = "command door remote"
|
||||
icon_state = "gangtool-yellow"
|
||||
region_access = 7
|
||||
|
||||
/obj/item/weapon/door_remote/chief_engineer
|
||||
/obj/item/door_remote/chief_engineer
|
||||
name = "engineering door remote"
|
||||
icon_state = "gangtool-orange"
|
||||
region_access = 5
|
||||
|
||||
/obj/item/weapon/door_remote/research_director
|
||||
/obj/item/door_remote/research_director
|
||||
name = "research door remote"
|
||||
icon_state = "gangtool-purple"
|
||||
region_access = 4
|
||||
|
||||
/obj/item/weapon/door_remote/head_of_security
|
||||
/obj/item/door_remote/head_of_security
|
||||
name = "security door remote"
|
||||
icon_state = "gangtool-red"
|
||||
region_access = 2
|
||||
|
||||
/obj/item/weapon/door_remote/quartermaster
|
||||
/obj/item/door_remote/quartermaster
|
||||
name = "supply door remote"
|
||||
icon_state = "gangtool-green"
|
||||
region_access = 6
|
||||
|
||||
/obj/item/weapon/door_remote/chief_medical_officer
|
||||
/obj/item/door_remote/chief_medical_officer
|
||||
name = "medical door remote"
|
||||
icon_state = "gangtool-blue"
|
||||
region_access = 3
|
||||
|
||||
/obj/item/weapon/door_remote/civillian
|
||||
/obj/item/door_remote/civillian
|
||||
name = "civillian door remote"
|
||||
icon_state = "gangtool-white"
|
||||
region_access = 1
|
||||
|
||||
+185
-185
@@ -1,186 +1,186 @@
|
||||
/obj/item/weapon/lipstick
|
||||
gender = PLURAL
|
||||
name = "red lipstick"
|
||||
desc = "A generic brand of lipstick."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "lipstick"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/colour = "red"
|
||||
var/open = FALSE
|
||||
|
||||
|
||||
/obj/item/weapon/lipstick/purple
|
||||
name = "purple lipstick"
|
||||
colour = "purple"
|
||||
|
||||
/obj/item/weapon/lipstick/jade
|
||||
//It's still called Jade, but theres no HTML color for jade, so we use lime.
|
||||
name = "jade lipstick"
|
||||
colour = "lime"
|
||||
|
||||
/obj/item/weapon/lipstick/black
|
||||
name = "black lipstick"
|
||||
colour = "black"
|
||||
|
||||
|
||||
/obj/item/weapon/lipstick/random
|
||||
name = "lipstick"
|
||||
|
||||
/obj/item/weapon/lipstick/random/New()
|
||||
..()
|
||||
colour = pick("red","purple","lime","black","green","blue","white")
|
||||
name = "[colour] lipstick"
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/lipstick/attack_self(mob/user)
|
||||
cut_overlays()
|
||||
to_chat(user, "<span class='notice'>You twist \the [src] [open ? "closed" : "open"].</span>")
|
||||
open = !open
|
||||
if(open)
|
||||
var/mutable_appearance/colored_overlay = mutable_appearance(icon, "lipstick_uncap_color")
|
||||
colored_overlay.color = colour
|
||||
icon_state = "lipstick_uncap"
|
||||
add_overlay(colored_overlay)
|
||||
else
|
||||
icon_state = "lipstick"
|
||||
|
||||
/obj/item/weapon/lipstick/attack(mob/M, mob/user)
|
||||
if(!open)
|
||||
return
|
||||
|
||||
if(!ismob(M))
|
||||
return
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.is_mouth_covered())
|
||||
to_chat(user, "<span class='warning'>Remove [ H == user ? "your" : "their" ] mask!</span>")
|
||||
return
|
||||
if(H.lip_style) //if they already have lipstick on
|
||||
to_chat(user, "<span class='warning'>You need to wipe off the old lipstick first!</span>")
|
||||
return
|
||||
if(H == user)
|
||||
user.visible_message("<span class='notice'>[user] does their lips with \the [src].</span>", \
|
||||
"<span class='notice'>You take a moment to apply \the [src]. Perfect!</span>")
|
||||
H.lip_style = "lipstick"
|
||||
H.lip_color = colour
|
||||
H.update_body()
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins to do [H]'s lips with \the [src].</span>", \
|
||||
"<span class='notice'>You begin to apply \the [src] on [H]'s lips...</span>")
|
||||
if(do_after(user, 20, target = H))
|
||||
user.visible_message("[user] does [H]'s lips with \the [src].", \
|
||||
"<span class='notice'>You apply \the [src] on [H]'s lips.</span>")
|
||||
H.lip_style = "lipstick"
|
||||
H.lip_color = colour
|
||||
H.update_body()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Where are the lips on that?</span>")
|
||||
|
||||
//you can wipe off lipstick with paper!
|
||||
/obj/item/weapon/paper/attack(mob/M, mob/user)
|
||||
if(user.zone_selected == "mouth")
|
||||
if(!ismob(M))
|
||||
return
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H == user)
|
||||
to_chat(user, "<span class='notice'>You wipe off the lipstick with [src].</span>")
|
||||
H.lip_style = null
|
||||
H.update_body()
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins to wipe [H]'s lipstick off with \the [src].</span>", \
|
||||
"<span class='notice'>You begin to wipe off [H]'s lipstick...</span>")
|
||||
if(do_after(user, 10, target = H))
|
||||
user.visible_message("[user] wipes [H]'s lipstick off with \the [src].", \
|
||||
"<span class='notice'>You wipe off [H]'s lipstick.</span>")
|
||||
H.lip_style = null
|
||||
H.update_body()
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/weapon/razor
|
||||
name = "electric razor"
|
||||
desc = "The latest and greatest power razor born from the science of shaving."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "razor"
|
||||
flags = CONDUCT
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
|
||||
/obj/item/weapon/razor/proc/shave(mob/living/carbon/human/H, location = "mouth")
|
||||
if(location == "mouth")
|
||||
H.facial_hair_style = "Shaved"
|
||||
else
|
||||
H.hair_style = "Skinhead"
|
||||
|
||||
H.update_hair()
|
||||
playsound(loc, 'sound/items/welder2.ogg', 20, 1)
|
||||
|
||||
|
||||
/obj/item/weapon/razor/attack(mob/M, mob/user)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/location = user.zone_selected
|
||||
if(location == "mouth")
|
||||
if(!(FACEHAIR in H.dna.species.species_traits))
|
||||
to_chat(user, "<span class='warning'>There is no facial hair to shave!</span>")
|
||||
return
|
||||
if(!get_location_accessible(H, location))
|
||||
to_chat(user, "<span class='warning'>The mask is in the way!</span>")
|
||||
return
|
||||
if(H.facial_hair_style == "Shaved")
|
||||
to_chat(user, "<span class='warning'>Already clean-shaven!</span>")
|
||||
return
|
||||
|
||||
if(H == user) //shaving yourself
|
||||
user.visible_message("[user] starts to shave their facial hair with [src].", \
|
||||
"<span class='notice'>You take a moment to shave your facial hair with [src]...</span>")
|
||||
if(do_after(user, 50, target = H))
|
||||
user.visible_message("[user] shaves his facial hair clean with [src].", \
|
||||
"<span class='notice'>You finish shaving with [src]. Fast and clean!</span>")
|
||||
shave(H, location)
|
||||
else
|
||||
var/turf/H_loc = H.loc
|
||||
user.visible_message("<span class='warning'>[user] tries to shave [H]'s facial hair with [src].</span>", \
|
||||
"<span class='notice'>You start shaving [H]'s facial hair...</span>")
|
||||
if(do_after(user, 50, target = H))
|
||||
if(H_loc == H.loc)
|
||||
user.visible_message("<span class='warning'>[user] shaves off [H]'s facial hair with [src].</span>", \
|
||||
"<span class='notice'>You shave [H]'s facial hair clean off.</span>")
|
||||
shave(H, location)
|
||||
|
||||
else if(location == "head")
|
||||
if(!(HAIR in H.dna.species.species_traits))
|
||||
to_chat(user, "<span class='warning'>There is no hair to shave!</span>")
|
||||
return
|
||||
if(!get_location_accessible(H, location))
|
||||
to_chat(user, "<span class='warning'>The headgear is in the way!</span>")
|
||||
return
|
||||
if(H.hair_style == "Bald" || H.hair_style == "Balding Hair" || H.hair_style == "Skinhead")
|
||||
to_chat(user, "<span class='warning'>There is not enough hair left to shave!</span>")
|
||||
return
|
||||
|
||||
if(H == user) //shaving yourself
|
||||
user.visible_message("[user] starts to shave their head with [src].", \
|
||||
"<span class='notice'>You start to shave your head with [src]...</span>")
|
||||
if(do_after(user, 5, target = H))
|
||||
user.visible_message("[user] shaves his head with [src].", \
|
||||
"<span class='notice'>You finish shaving with [src].</span>")
|
||||
shave(H, location)
|
||||
else
|
||||
var/turf/H_loc = H.loc
|
||||
user.visible_message("<span class='warning'>[user] tries to shave [H]'s head with [src]!</span>", \
|
||||
"<span class='notice'>You start shaving [H]'s head...</span>")
|
||||
if(do_after(user, 50, target = H))
|
||||
if(H_loc == H.loc)
|
||||
user.visible_message("<span class='warning'>[user] shaves [H]'s head bald with [src]!</span>", \
|
||||
"<span class='notice'>You shave [H]'s head bald.</span>")
|
||||
shave(H, location)
|
||||
else
|
||||
..()
|
||||
else
|
||||
/obj/item/lipstick
|
||||
gender = PLURAL
|
||||
name = "red lipstick"
|
||||
desc = "A generic brand of lipstick."
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "lipstick"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/colour = "red"
|
||||
var/open = FALSE
|
||||
|
||||
|
||||
/obj/item/lipstick/purple
|
||||
name = "purple lipstick"
|
||||
colour = "purple"
|
||||
|
||||
/obj/item/lipstick/jade
|
||||
//It's still called Jade, but theres no HTML color for jade, so we use lime.
|
||||
name = "jade lipstick"
|
||||
colour = "lime"
|
||||
|
||||
/obj/item/lipstick/black
|
||||
name = "black lipstick"
|
||||
colour = "black"
|
||||
|
||||
|
||||
/obj/item/lipstick/random
|
||||
name = "lipstick"
|
||||
|
||||
/obj/item/lipstick/random/New()
|
||||
..()
|
||||
colour = pick("red","purple","lime","black","green","blue","white")
|
||||
name = "[colour] lipstick"
|
||||
|
||||
|
||||
|
||||
/obj/item/lipstick/attack_self(mob/user)
|
||||
cut_overlays()
|
||||
to_chat(user, "<span class='notice'>You twist \the [src] [open ? "closed" : "open"].</span>")
|
||||
open = !open
|
||||
if(open)
|
||||
var/mutable_appearance/colored_overlay = mutable_appearance(icon, "lipstick_uncap_color")
|
||||
colored_overlay.color = colour
|
||||
icon_state = "lipstick_uncap"
|
||||
add_overlay(colored_overlay)
|
||||
else
|
||||
icon_state = "lipstick"
|
||||
|
||||
/obj/item/lipstick/attack(mob/M, mob/user)
|
||||
if(!open)
|
||||
return
|
||||
|
||||
if(!ismob(M))
|
||||
return
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.is_mouth_covered())
|
||||
to_chat(user, "<span class='warning'>Remove [ H == user ? "your" : "their" ] mask!</span>")
|
||||
return
|
||||
if(H.lip_style) //if they already have lipstick on
|
||||
to_chat(user, "<span class='warning'>You need to wipe off the old lipstick first!</span>")
|
||||
return
|
||||
if(H == user)
|
||||
user.visible_message("<span class='notice'>[user] does their lips with \the [src].</span>", \
|
||||
"<span class='notice'>You take a moment to apply \the [src]. Perfect!</span>")
|
||||
H.lip_style = "lipstick"
|
||||
H.lip_color = colour
|
||||
H.update_body()
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins to do [H]'s lips with \the [src].</span>", \
|
||||
"<span class='notice'>You begin to apply \the [src] on [H]'s lips...</span>")
|
||||
if(do_after(user, 20, target = H))
|
||||
user.visible_message("[user] does [H]'s lips with \the [src].", \
|
||||
"<span class='notice'>You apply \the [src] on [H]'s lips.</span>")
|
||||
H.lip_style = "lipstick"
|
||||
H.lip_color = colour
|
||||
H.update_body()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Where are the lips on that?</span>")
|
||||
|
||||
//you can wipe off lipstick with paper!
|
||||
/obj/item/paper/attack(mob/M, mob/user)
|
||||
if(user.zone_selected == "mouth")
|
||||
if(!ismob(M))
|
||||
return
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H == user)
|
||||
to_chat(user, "<span class='notice'>You wipe off the lipstick with [src].</span>")
|
||||
H.lip_style = null
|
||||
H.update_body()
|
||||
else
|
||||
user.visible_message("<span class='warning'>[user] begins to wipe [H]'s lipstick off with \the [src].</span>", \
|
||||
"<span class='notice'>You begin to wipe off [H]'s lipstick...</span>")
|
||||
if(do_after(user, 10, target = H))
|
||||
user.visible_message("[user] wipes [H]'s lipstick off with \the [src].", \
|
||||
"<span class='notice'>You wipe off [H]'s lipstick.</span>")
|
||||
H.lip_style = null
|
||||
H.update_body()
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
/obj/item/razor
|
||||
name = "electric razor"
|
||||
desc = "The latest and greatest power razor born from the science of shaving."
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "razor"
|
||||
flags_1 = CONDUCT_1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
|
||||
|
||||
/obj/item/razor/proc/shave(mob/living/carbon/human/H, location = "mouth")
|
||||
if(location == "mouth")
|
||||
H.facial_hair_style = "Shaved"
|
||||
else
|
||||
H.hair_style = "Skinhead"
|
||||
|
||||
H.update_hair()
|
||||
playsound(loc, 'sound/items/welder2.ogg', 20, 1)
|
||||
|
||||
|
||||
/obj/item/razor/attack(mob/M, mob/user)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/location = user.zone_selected
|
||||
if(location == "mouth")
|
||||
if(!(FACEHAIR in H.dna.species.species_traits))
|
||||
to_chat(user, "<span class='warning'>There is no facial hair to shave!</span>")
|
||||
return
|
||||
if(!get_location_accessible(H, location))
|
||||
to_chat(user, "<span class='warning'>The mask is in the way!</span>")
|
||||
return
|
||||
if(H.facial_hair_style == "Shaved")
|
||||
to_chat(user, "<span class='warning'>Already clean-shaven!</span>")
|
||||
return
|
||||
|
||||
if(H == user) //shaving yourself
|
||||
user.visible_message("[user] starts to shave their facial hair with [src].", \
|
||||
"<span class='notice'>You take a moment to shave your facial hair with [src]...</span>")
|
||||
if(do_after(user, 50, target = H))
|
||||
user.visible_message("[user] shaves his facial hair clean with [src].", \
|
||||
"<span class='notice'>You finish shaving with [src]. Fast and clean!</span>")
|
||||
shave(H, location)
|
||||
else
|
||||
var/turf/H_loc = H.loc
|
||||
user.visible_message("<span class='warning'>[user] tries to shave [H]'s facial hair with [src].</span>", \
|
||||
"<span class='notice'>You start shaving [H]'s facial hair...</span>")
|
||||
if(do_after(user, 50, target = H))
|
||||
if(H_loc == H.loc)
|
||||
user.visible_message("<span class='warning'>[user] shaves off [H]'s facial hair with [src].</span>", \
|
||||
"<span class='notice'>You shave [H]'s facial hair clean off.</span>")
|
||||
shave(H, location)
|
||||
|
||||
else if(location == "head")
|
||||
if(!(HAIR in H.dna.species.species_traits))
|
||||
to_chat(user, "<span class='warning'>There is no hair to shave!</span>")
|
||||
return
|
||||
if(!get_location_accessible(H, location))
|
||||
to_chat(user, "<span class='warning'>The headgear is in the way!</span>")
|
||||
return
|
||||
if(H.hair_style == "Bald" || H.hair_style == "Balding Hair" || H.hair_style == "Skinhead")
|
||||
to_chat(user, "<span class='warning'>There is not enough hair left to shave!</span>")
|
||||
return
|
||||
|
||||
if(H == user) //shaving yourself
|
||||
user.visible_message("[user] starts to shave their head with [src].", \
|
||||
"<span class='notice'>You start to shave your head with [src]...</span>")
|
||||
if(do_after(user, 5, target = H))
|
||||
user.visible_message("[user] shaves his head with [src].", \
|
||||
"<span class='notice'>You finish shaving with [src].</span>")
|
||||
shave(H, location)
|
||||
else
|
||||
var/turf/H_loc = H.loc
|
||||
user.visible_message("<span class='warning'>[user] tries to shave [H]'s head with [src]!</span>", \
|
||||
"<span class='notice'>You start shaving [H]'s head...</span>")
|
||||
if(do_after(user, 50, target = H))
|
||||
if(H_loc == H.loc)
|
||||
user.visible_message("<span class='warning'>[user] shaves [H]'s head bald with [src]!</span>", \
|
||||
"<span class='notice'>You shave [H]'s head bald.</span>")
|
||||
shave(H, location)
|
||||
else
|
||||
..()
|
||||
else
|
||||
..()
|
||||
@@ -2,10 +2,10 @@
|
||||
// Gavel Hammer
|
||||
// Gavel Block
|
||||
|
||||
/obj/item/weapon/gavelhammer
|
||||
/obj/item/gavelhammer
|
||||
name = "gavel hammer"
|
||||
desc = "Order, order! No bombs in my courthouse."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "gavelhammer"
|
||||
force = 5
|
||||
throwforce = 6
|
||||
@@ -13,23 +13,23 @@
|
||||
attack_verb = list("bashed", "battered", "judged", "whacked")
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/weapon/gavelhammer/suicide_act(mob/user)
|
||||
/obj/item/gavelhammer/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] has sentenced [user.p_them()]self to death with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/gavelblock
|
||||
/obj/item/gavelblock
|
||||
name = "gavel block"
|
||||
desc = "Smack it with a gavel hammer when the assistants get rowdy."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "gavelblock"
|
||||
force = 2
|
||||
throwforce = 2
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/weapon/gavelblock/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/gavelhammer))
|
||||
/obj/item/gavelblock/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/gavelhammer))
|
||||
playsound(loc, 'sound/items/gavel.ogg', 100, 1)
|
||||
user.visible_message("<span class='warning'>[user] strikes [src] with [I].</span>")
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
@@ -499,7 +499,7 @@
|
||||
* Crayon Box
|
||||
*/
|
||||
|
||||
/obj/item/weapon/storage/crayons
|
||||
/obj/item/storage/crayons
|
||||
name = "box of crayons"
|
||||
desc = "A box of crayons for all your rune drawing needs."
|
||||
icon = 'icons/obj/crayons.dmi'
|
||||
@@ -510,7 +510,7 @@
|
||||
/obj/item/toy/crayon
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/crayons/New()
|
||||
/obj/item/storage/crayons/New()
|
||||
..()
|
||||
new /obj/item/toy/crayon/red(src)
|
||||
new /obj/item/toy/crayon/orange(src)
|
||||
@@ -521,12 +521,12 @@
|
||||
new /obj/item/toy/crayon/black(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/storage/crayons/update_icon()
|
||||
/obj/item/storage/crayons/update_icon()
|
||||
cut_overlays()
|
||||
for(var/obj/item/toy/crayon/crayon in contents)
|
||||
add_overlay(mutable_appearance('icons/obj/crayons.dmi', crayon.item_color))
|
||||
|
||||
/obj/item/weapon/storage/crayons/attackby(obj/item/W, mob/user, params)
|
||||
/obj/item/storage/crayons/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/toy/crayon))
|
||||
var/obj/item/toy/crayon/C = W
|
||||
switch(C.item_color)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
//backpack item
|
||||
#define HALFWAYCRITDEATH ((HEALTH_THRESHOLD_CRIT + HEALTH_THRESHOLD_DEAD) * 0.5)
|
||||
|
||||
/obj/item/weapon/defibrillator
|
||||
/obj/item/defibrillator
|
||||
name = "defibrillator"
|
||||
desc = "A device that delivers powerful shocks to detachable paddles that resuscitate incapacitated patients."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "defibunit"
|
||||
item_state = "defibunit"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
@@ -20,33 +20,33 @@
|
||||
var/on = FALSE //if the paddles are equipped (1) or on the defib (0)
|
||||
var/safety = 1 //if you can zap people with the defibs on harm mode
|
||||
var/powered = 0 //if there's a cell in the defib with enough power for a revive, blocks paddles from reviving otherwise
|
||||
var/obj/item/weapon/twohanded/shockpaddles/paddles
|
||||
var/obj/item/weapon/stock_parts/cell/high/cell
|
||||
var/obj/item/twohanded/shockpaddles/paddles
|
||||
var/obj/item/stock_parts/cell/high/cell
|
||||
var/combat = 0 //can we revive through space suits?
|
||||
var/grab_ghost = FALSE // Do we pull the ghost back into their body?
|
||||
|
||||
/obj/item/weapon/defibrillator/get_cell()
|
||||
/obj/item/defibrillator/get_cell()
|
||||
return cell
|
||||
|
||||
/obj/item/weapon/defibrillator/Initialize() //starts without a cell for rnd
|
||||
/obj/item/defibrillator/Initialize() //starts without a cell for rnd
|
||||
. = ..()
|
||||
paddles = make_paddles()
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/defibrillator/loaded/Initialize() //starts with hicap
|
||||
/obj/item/defibrillator/loaded/Initialize() //starts with hicap
|
||||
. = ..()
|
||||
paddles = make_paddles()
|
||||
cell = new(src)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/defibrillator/update_icon()
|
||||
/obj/item/defibrillator/update_icon()
|
||||
update_power()
|
||||
update_overlays()
|
||||
update_charge()
|
||||
|
||||
/obj/item/weapon/defibrillator/proc/update_power()
|
||||
/obj/item/defibrillator/proc/update_power()
|
||||
if(cell)
|
||||
if(cell.charge < paddles.revivecost)
|
||||
powered = 0
|
||||
@@ -55,7 +55,7 @@
|
||||
else
|
||||
powered = 0
|
||||
|
||||
/obj/item/weapon/defibrillator/proc/update_overlays()
|
||||
/obj/item/defibrillator/proc/update_overlays()
|
||||
cut_overlays()
|
||||
if(!on)
|
||||
add_overlay("[initial(icon_state)]-paddles")
|
||||
@@ -66,22 +66,22 @@
|
||||
if(!safety)
|
||||
add_overlay("[initial(icon_state)]-emagged")
|
||||
|
||||
/obj/item/weapon/defibrillator/proc/update_charge()
|
||||
/obj/item/defibrillator/proc/update_charge()
|
||||
if(powered) //so it doesn't show charge if it's unpowered
|
||||
if(cell)
|
||||
var/ratio = cell.charge / cell.maxcharge
|
||||
ratio = Ceiling(ratio*4) * 25
|
||||
add_overlay("[initial(icon_state)]-charge[ratio]")
|
||||
|
||||
/obj/item/weapon/defibrillator/CheckParts(list/parts_list)
|
||||
/obj/item/defibrillator/CheckParts(list/parts_list)
|
||||
..()
|
||||
cell = locate(/obj/item/weapon/stock_parts/cell) in contents
|
||||
cell = locate(/obj/item/stock_parts/cell) in contents
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/defibrillator/ui_action_click()
|
||||
/obj/item/defibrillator/ui_action_click()
|
||||
toggle_paddles()
|
||||
|
||||
/obj/item/weapon/defibrillator/attack_hand(mob/user)
|
||||
/obj/item/defibrillator/attack_hand(mob/user)
|
||||
if(loc == user)
|
||||
if(slot_flags == SLOT_BACK)
|
||||
if(user.get_item_by_slot(slot_back) == src)
|
||||
@@ -97,19 +97,19 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/defibrillator/MouseDrop(obj/over_object)
|
||||
/obj/item/defibrillator/MouseDrop(obj/over_object)
|
||||
if(ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
if(!M.incapacitated() && istype(over_object, /obj/screen/inventory/hand))
|
||||
var/obj/screen/inventory/hand/H = over_object
|
||||
M.putItemFromInventoryInHandIfPossible(src, H.held_index)
|
||||
|
||||
/obj/item/weapon/defibrillator/attackby(obj/item/weapon/W, mob/user, params)
|
||||
/obj/item/defibrillator/attackby(obj/item/W, mob/user, params)
|
||||
if(W == paddles)
|
||||
paddles.unwield()
|
||||
toggle_paddles()
|
||||
else if(istype(W, /obj/item/weapon/stock_parts/cell))
|
||||
var/obj/item/weapon/stock_parts/cell/C = W
|
||||
else if(istype(W, /obj/item/stock_parts/cell))
|
||||
var/obj/item/stock_parts/cell/C = W
|
||||
if(cell)
|
||||
to_chat(user, "<span class='notice'>[src] already has a cell.</span>")
|
||||
else
|
||||
@@ -122,7 +122,7 @@
|
||||
to_chat(user, "<span class='notice'>You install a cell in [src].</span>")
|
||||
update_icon()
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||
else if(istype(W, /obj/item/screwdriver))
|
||||
if(cell)
|
||||
cell.update_icon()
|
||||
cell.forceMove(get_turf(src))
|
||||
@@ -132,7 +132,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/defibrillator/emag_act(mob/user)
|
||||
/obj/item/defibrillator/emag_act(mob/user)
|
||||
if(safety)
|
||||
safety = 0
|
||||
to_chat(user, "<span class='warning'>You silently disable [src]'s safety protocols with the cryptographic sequencer.")
|
||||
@@ -140,7 +140,7 @@
|
||||
safety = 1
|
||||
to_chat(user, "<span class='notice'>You silently enable [src]'s safety protocols with the cryptographic sequencer.")
|
||||
|
||||
/obj/item/weapon/defibrillator/emp_act(severity)
|
||||
/obj/item/defibrillator/emp_act(severity)
|
||||
if(cell)
|
||||
deductcharge(1000 / severity)
|
||||
if(safety)
|
||||
@@ -154,7 +154,7 @@
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/defibrillator/proc/toggle_paddles()
|
||||
/obj/item/defibrillator/proc/toggle_paddles()
|
||||
set name = "Toggle Paddles"
|
||||
set category = "Object"
|
||||
on = !on
|
||||
@@ -178,33 +178,33 @@
|
||||
var/datum/action/A = X
|
||||
A.UpdateButtonIcon()
|
||||
|
||||
/obj/item/weapon/defibrillator/proc/make_paddles()
|
||||
return new /obj/item/weapon/twohanded/shockpaddles(src)
|
||||
/obj/item/defibrillator/proc/make_paddles()
|
||||
return new /obj/item/twohanded/shockpaddles(src)
|
||||
|
||||
/obj/item/weapon/defibrillator/equipped(mob/user, slot)
|
||||
/obj/item/defibrillator/equipped(mob/user, slot)
|
||||
..()
|
||||
if((slot_flags == SLOT_BACK && slot != slot_back) || (slot_flags == SLOT_BELT && slot != slot_belt))
|
||||
remove_paddles(user)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/defibrillator/item_action_slot_check(slot, mob/user)
|
||||
/obj/item/defibrillator/item_action_slot_check(slot, mob/user)
|
||||
if(slot == user.getBackSlot())
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/defibrillator/proc/remove_paddles(mob/user) //this fox the bug with the paddles when other player stole you the defib when you have the paddles equiped
|
||||
/obj/item/defibrillator/proc/remove_paddles(mob/user) //this fox the bug with the paddles when other player stole you the defib when you have the paddles equiped
|
||||
if(ismob(paddles.loc))
|
||||
var/mob/M = paddles.loc
|
||||
M.dropItemToGround(paddles, TRUE)
|
||||
return
|
||||
|
||||
/obj/item/weapon/defibrillator/Destroy()
|
||||
/obj/item/defibrillator/Destroy()
|
||||
if(on)
|
||||
var/M = get(paddles, /mob)
|
||||
remove_paddles(M)
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/defibrillator/proc/deductcharge(chrgdeductamt)
|
||||
/obj/item/defibrillator/proc/deductcharge(chrgdeductamt)
|
||||
if(cell)
|
||||
if(cell.charge < (paddles.revivecost+chrgdeductamt))
|
||||
powered = 0
|
||||
@@ -216,7 +216,7 @@
|
||||
update_icon()
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/defibrillator/proc/cooldowncheck(mob/user)
|
||||
/obj/item/defibrillator/proc/cooldowncheck(mob/user)
|
||||
spawn(50)
|
||||
if(cell)
|
||||
if(cell.charge >= paddles.revivecost)
|
||||
@@ -229,7 +229,7 @@
|
||||
paddles.update_icon()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/defibrillator/compact
|
||||
/obj/item/defibrillator/compact
|
||||
name = "compact defibrillator"
|
||||
desc = "A belt-equipped defibrillator that can be rapidly deployed."
|
||||
icon_state = "defibcompact"
|
||||
@@ -238,29 +238,29 @@
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "biotech=5"
|
||||
|
||||
/obj/item/weapon/defibrillator/compact/item_action_slot_check(slot, mob/user)
|
||||
/obj/item/defibrillator/compact/item_action_slot_check(slot, mob/user)
|
||||
if(slot == user.getBeltSlot())
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/defibrillator/compact/loaded/Initialize()
|
||||
/obj/item/defibrillator/compact/loaded/Initialize()
|
||||
. = ..()
|
||||
paddles = make_paddles()
|
||||
cell = new(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/defibrillator/compact/combat
|
||||
/obj/item/defibrillator/compact/combat
|
||||
name = "combat defibrillator"
|
||||
desc = "A belt-equipped blood-red defibrillator that can be rapidly deployed. Does not have the restrictions or safeties of conventional defibrillators and can revive through space suits."
|
||||
combat = 1
|
||||
safety = 0
|
||||
|
||||
/obj/item/weapon/defibrillator/compact/combat/loaded/Initialize()
|
||||
/obj/item/defibrillator/compact/combat/loaded/Initialize()
|
||||
. = ..()
|
||||
paddles = make_paddles()
|
||||
cell = new /obj/item/weapon/stock_parts/cell/infinite(src)
|
||||
cell = new /obj/item/stock_parts/cell/infinite(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/defibrillator/compact/combat/loaded/attackby(obj/item/weapon/W, mob/user, params)
|
||||
/obj/item/defibrillator/compact/combat/loaded/attackby(obj/item/W, mob/user, params)
|
||||
if(W == paddles)
|
||||
paddles.unwield()
|
||||
toggle_paddles()
|
||||
@@ -269,10 +269,10 @@
|
||||
|
||||
//paddles
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles
|
||||
/obj/item/twohanded/shockpaddles
|
||||
name = "defibrillator paddles"
|
||||
desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks."
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "defibpaddles"
|
||||
item_state = "defibpaddles"
|
||||
force = 0
|
||||
@@ -282,12 +282,12 @@
|
||||
var/revivecost = 1000
|
||||
var/cooldown = 0
|
||||
var/busy = FALSE
|
||||
var/obj/item/weapon/defibrillator/defib
|
||||
var/obj/item/defibrillator/defib
|
||||
var/req_defib = 1
|
||||
var/combat = 0 //If it penetrates armor and gives additional functionality
|
||||
var/grab_ghost = FALSE
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/proc/recharge(var/time)
|
||||
/obj/item/twohanded/shockpaddles/proc/recharge(var/time)
|
||||
if(req_defib || !time)
|
||||
return
|
||||
cooldown = 1
|
||||
@@ -299,7 +299,7 @@
|
||||
cooldown = 0
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/New(mainunit)
|
||||
/obj/item/twohanded/shockpaddles/New(mainunit)
|
||||
..()
|
||||
if(check_defib_exists(mainunit, src) && req_defib)
|
||||
defib = mainunit
|
||||
@@ -307,24 +307,24 @@
|
||||
busy = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/update_icon()
|
||||
/obj/item/twohanded/shockpaddles/update_icon()
|
||||
icon_state = "defibpaddles[wielded]"
|
||||
item_state = "defibpaddles[wielded]"
|
||||
if(cooldown)
|
||||
icon_state = "defibpaddles[wielded]_cooldown"
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/suicide_act(mob/user)
|
||||
/obj/item/twohanded/shockpaddles/suicide_act(mob/user)
|
||||
user.visible_message("<span class='danger'>[user] is putting the live paddles on [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
if(req_defib)
|
||||
defib.deductcharge(revivecost)
|
||||
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
|
||||
return (OXYLOSS)
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/dropped(mob/user)
|
||||
/obj/item/twohanded/shockpaddles/dropped(mob/user)
|
||||
if(!req_defib)
|
||||
return ..()
|
||||
if(user)
|
||||
var/obj/item/weapon/twohanded/offhand/O = user.get_inactive_held_item()
|
||||
var/obj/item/twohanded/offhand/O = user.get_inactive_held_item()
|
||||
if(istype(O))
|
||||
O.unwield()
|
||||
to_chat(user, "<span class='notice'>The paddles snap back into the main unit.</span>")
|
||||
@@ -333,16 +333,16 @@
|
||||
defib.update_icon()
|
||||
return unwield(user)
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/human/M, obj/O)
|
||||
/obj/item/twohanded/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/human/M, obj/O)
|
||||
if(!req_defib)
|
||||
return 1 //If it doesn't need a defib, just say it exists
|
||||
if (!mainunit || !istype(mainunit, /obj/item/weapon/defibrillator)) //To avoid weird issues from admin spawns
|
||||
if (!mainunit || !istype(mainunit, /obj/item/defibrillator)) //To avoid weird issues from admin spawns
|
||||
qdel(O)
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/attack(mob/M, mob/user)
|
||||
/obj/item/twohanded/shockpaddles/attack(mob/M, mob/user)
|
||||
|
||||
if(busy)
|
||||
return
|
||||
@@ -393,7 +393,7 @@
|
||||
do_help(H, user)
|
||||
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/proc/do_disarm(mob/living/M, mob/living/user)
|
||||
/obj/item/twohanded/shockpaddles/proc/do_disarm(mob/living/M, mob/living/user)
|
||||
if(req_defib && defib.safety)
|
||||
return
|
||||
if(!req_defib && !combat)
|
||||
@@ -417,7 +417,7 @@
|
||||
else
|
||||
recharge(60)
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/proc/do_harm(mob/living/carbon/human/H, mob/living/user)
|
||||
/obj/item/twohanded/shockpaddles/proc/do_harm(mob/living/carbon/human/H, mob/living/user)
|
||||
if(req_defib && defib.safety)
|
||||
return
|
||||
if(!req_defib && !combat)
|
||||
@@ -471,7 +471,7 @@
|
||||
busy = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/proc/do_help(mob/living/carbon/human/H, mob/living/user)
|
||||
/obj/item/twohanded/shockpaddles/proc/do_help(mob/living/carbon/human/H, mob/living/user)
|
||||
user.visible_message("<span class='warning'>[user] begins to place [src] on [H]'s chest.</span>", "<span class='warning'>You begin to place [src] on [H]'s chest...</span>")
|
||||
busy = TRUE
|
||||
update_icon()
|
||||
@@ -568,16 +568,16 @@
|
||||
busy = FALSE
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/cyborg
|
||||
/obj/item/twohanded/shockpaddles/cyborg
|
||||
name = "cyborg defibrillator paddles"
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "defibpaddles0"
|
||||
item_state = "defibpaddles0"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
req_defib = FALSE
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/cyborg/attack(mob/M, mob/user)
|
||||
/obj/item/twohanded/shockpaddles/cyborg/attack(mob/M, mob/user)
|
||||
if(iscyborg(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
if(R.emagged)
|
||||
@@ -589,11 +589,11 @@
|
||||
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/twohanded/shockpaddles/syndicate
|
||||
/obj/item/twohanded/shockpaddles/syndicate
|
||||
name = "syndicate defibrillator paddles"
|
||||
desc = "A pair of paddles used to revive deceased operatives. It possesses both the ability to penetrate armor and to deliver powerful shocks offensively."
|
||||
combat = TRUE
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "defibpaddles0"
|
||||
item_state = "defibpaddles0"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
@@ -12,7 +12,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
item_state = "electronic"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
flags = NOBLUDGEON
|
||||
flags_1 = NOBLUDGEON_1
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
slot_flags = SLOT_ID | SLOT_BELT
|
||||
origin_tech = "programming=2"
|
||||
@@ -23,7 +23,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
//Main variables
|
||||
var/owner = null // String name of owner
|
||||
var/default_cartridge = 0 // Access level defined by cartridge
|
||||
var/obj/item/weapon/cartridge/cartridge = null //current cartridge
|
||||
var/obj/item/cartridge/cartridge = null //current cartridge
|
||||
var/mode = 0 //Controls what menu the PDA will display. 0 is hub; the rest are either built in or based on cartridge.
|
||||
var/icon_alert = "pda-r" //Icon to be overlayed for message alerts. Taken from the pda icon file.
|
||||
|
||||
@@ -47,14 +47,14 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
var/hidden = 0 // Is the PDA hidden from the PDA list?
|
||||
var/emped = 0
|
||||
|
||||
var/obj/item/weapon/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both.
|
||||
var/obj/item/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both.
|
||||
var/ownjob = null //related to above
|
||||
|
||||
var/obj/item/device/paicard/pai = null // A slot for a personal AI device
|
||||
|
||||
var/icon/photo //Scanned photo
|
||||
|
||||
var/list/contained_item = list(/obj/item/weapon/pen, /obj/item/toy/crayon, /obj/item/weapon/lipstick, /obj/item/device/flashlight/pen, /obj/item/clothing/mask/cigarette)
|
||||
var/list/contained_item = list(/obj/item/pen, /obj/item/toy/crayon, /obj/item/lipstick, /obj/item/device/flashlight/pen, /obj/item/clothing/mask/cigarette)
|
||||
var/obj/item/inserted_item //Used for pen, crayon, and lipstick insertion or removal. Same as above.
|
||||
var/overlays_x_offset = 0 //x offset to use for certain overlays
|
||||
|
||||
@@ -69,7 +69,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
if(inserted_item)
|
||||
inserted_item = new inserted_item(src)
|
||||
else
|
||||
inserted_item = new /obj/item/weapon/pen(src)
|
||||
inserted_item = new /obj/item/pen(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/device/pda/proc/update_label()
|
||||
@@ -318,7 +318,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
id_check(U)
|
||||
if("UpdateInfo")
|
||||
ownjob = id.assignment
|
||||
if(istype(id, /obj/item/weapon/card/id/syndicate))
|
||||
if(istype(id, /obj/item/card/id/syndicate))
|
||||
owner = id.registered_name
|
||||
update_label()
|
||||
if("Eject")//Ejects the cart, only done from hub.
|
||||
@@ -674,13 +674,13 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
to_chat(usr, "<span class='warning'>This PDA does not have a pen in it!</span>")
|
||||
|
||||
//trying to insert or remove an id
|
||||
/obj/item/device/pda/proc/id_check(mob/user, obj/item/weapon/card/id/I)
|
||||
/obj/item/device/pda/proc/id_check(mob/user, obj/item/card/id/I)
|
||||
if(!I)
|
||||
if(id)
|
||||
remove_id()
|
||||
return 1
|
||||
else
|
||||
var/obj/item/weapon/card/id/C = user.get_active_held_item()
|
||||
var/obj/item/card/id/C = user.get_active_held_item()
|
||||
if(istype(C))
|
||||
I = C
|
||||
|
||||
@@ -696,7 +696,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
|
||||
// access to status display signals
|
||||
/obj/item/device/pda/attackby(obj/item/C, mob/user, params)
|
||||
if(istype(C, /obj/item/weapon/cartridge) && !cartridge)
|
||||
if(istype(C, /obj/item/cartridge) && !cartridge)
|
||||
if(!user.transferItemToLoc(C, src))
|
||||
return
|
||||
cartridge = C
|
||||
@@ -704,8 +704,8 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
to_chat(user, "<span class='notice'>You insert [cartridge] into [src].</span>")
|
||||
update_icon()
|
||||
|
||||
else if(istype(C, /obj/item/weapon/card/id))
|
||||
var/obj/item/weapon/card/id/idcard = C
|
||||
else if(istype(C, /obj/item/card/id))
|
||||
var/obj/item/card/id/idcard = C
|
||||
if(!idcard.registered_name)
|
||||
to_chat(user, "<span class='warning'>\The [src] rejects the ID!</span>")
|
||||
return
|
||||
@@ -739,8 +739,8 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
to_chat(user, "<span class='notice'>You slide \the [C] into \the [src].</span>")
|
||||
inserted_item = C
|
||||
update_icon()
|
||||
else if(istype(C, /obj/item/weapon/photo))
|
||||
var/obj/item/weapon/photo/P = C
|
||||
else if(istype(C, /obj/item/photo))
|
||||
var/obj/item/photo/P = C
|
||||
photo = P.img
|
||||
to_chat(user, "<span class='notice'>You scan \the [C].</span>")
|
||||
else if(hidden_uplink && hidden_uplink.active)
|
||||
@@ -786,8 +786,8 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
to_chat(user, "<span class='notice'>No significant chemical agents found in [A].</span>")
|
||||
|
||||
if(5)
|
||||
if (istype(A, /obj/item/weapon/tank))
|
||||
var/obj/item/weapon/tank/T = A
|
||||
if (istype(A, /obj/item/tank))
|
||||
var/obj/item/tank/T = A
|
||||
atmosanalyzer_scan(T.air_contents, user, T)
|
||||
else if (istype(A, /obj/machinery/portable_atmospherics))
|
||||
var/obj/machinery/portable_atmospherics/PA = A
|
||||
@@ -799,13 +799,13 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
var/obj/machinery/power/rad_collector/RC = A
|
||||
if(RC.loaded_tank)
|
||||
atmosanalyzer_scan(RC.loaded_tank.air_contents, user, RC)
|
||||
else if (istype(A, /obj/item/weapon/flamethrower))
|
||||
var/obj/item/weapon/flamethrower/F = A
|
||||
else if (istype(A, /obj/item/flamethrower))
|
||||
var/obj/item/flamethrower/F = A
|
||||
if(F.ptank)
|
||||
atmosanalyzer_scan(F.ptank.air_contents, user, F)
|
||||
|
||||
if (!scanmode && istype(A, /obj/item/weapon/paper) && owner)
|
||||
var/obj/item/weapon/paper/PP = A
|
||||
if (!scanmode && istype(A, /obj/item/paper) && owner)
|
||||
var/obj/item/paper/PP = A
|
||||
if (!PP.info)
|
||||
to_chat(user, "<span class='warning'>Unable to scan! Paper is blank.</span>")
|
||||
return
|
||||
@@ -831,7 +831,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
|
||||
if(T)
|
||||
T.hotspot_expose(700,125)
|
||||
if(istype(cartridge, /obj/item/weapon/cartridge/virus/syndicate))
|
||||
if(istype(cartridge, /obj/item/cartridge/virus/syndicate))
|
||||
explosion(T, -1, 1, 3, 4)
|
||||
else
|
||||
explosion(T, -1, -1, 2, 3)
|
||||
|
||||
@@ -1,22 +1,26 @@
|
||||
//Clown PDA is slippery.
|
||||
/obj/item/device/pda/clown
|
||||
name = "clown PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/virus/clown
|
||||
default_cartridge = /obj/item/cartridge/virus/clown
|
||||
inserted_item = /obj/item/toy/crayon/rainbow
|
||||
icon_state = "pda-clown"
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. The surface is coated with polytetrafluoroethylene and banana drippings."
|
||||
ttone = "honk"
|
||||
|
||||
/obj/item/device/pda/clown/Crossed(AM as mob|obj)
|
||||
if (istype(AM, /mob/living/carbon))
|
||||
var/mob/living/carbon/M = AM
|
||||
if(M.slip(120, src, NO_SLIP_WHEN_WALKING))
|
||||
if (ishuman(M) && (M.real_name != src.owner))
|
||||
if (istype(src.cartridge, /obj/item/weapon/cartridge/virus/clown))
|
||||
var/obj/item/weapon/cartridge/virus/cart = src.cartridge
|
||||
if(cart.charges < 5)
|
||||
cart.charges++
|
||||
/obj/item/device/pda/clown/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/slippery, 120, NO_SLIP_WHEN_WALKING)
|
||||
|
||||
/obj/item/device/pda/clown/ComponentActivated(datum/component/C)
|
||||
..()
|
||||
var/datum/component/slippery/S = C
|
||||
if(!istype(S))
|
||||
return
|
||||
var/mob/living/carbon/human/M = S.slip_victim
|
||||
if (istype(M) && (M.real_name != src.owner))
|
||||
var/obj/item/cartridge/virus/clown/cart = cartridge
|
||||
if(istype(cart) && cart.charges < 5)
|
||||
cart.charges++
|
||||
|
||||
// Special AI/pAI PDAs that cannot explode.
|
||||
/obj/item/device/pda/ai
|
||||
@@ -38,100 +42,100 @@
|
||||
|
||||
/obj/item/device/pda/medical
|
||||
name = "medical PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/medical
|
||||
default_cartridge = /obj/item/cartridge/medical
|
||||
icon_state = "pda-medical"
|
||||
|
||||
/obj/item/device/pda/viro
|
||||
name = "virology PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/medical
|
||||
default_cartridge = /obj/item/cartridge/medical
|
||||
icon_state = "pda-virology"
|
||||
|
||||
/obj/item/device/pda/engineering
|
||||
name = "engineering PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/engineering
|
||||
default_cartridge = /obj/item/cartridge/engineering
|
||||
icon_state = "pda-engineer"
|
||||
|
||||
/obj/item/device/pda/security
|
||||
name = "security PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/security
|
||||
default_cartridge = /obj/item/cartridge/security
|
||||
icon_state = "pda-security"
|
||||
|
||||
/obj/item/device/pda/detective
|
||||
name = "detective PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/detective
|
||||
default_cartridge = /obj/item/cartridge/detective
|
||||
icon_state = "pda-detective"
|
||||
|
||||
/obj/item/device/pda/warden
|
||||
name = "warden PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/security
|
||||
default_cartridge = /obj/item/cartridge/security
|
||||
icon_state = "pda-warden"
|
||||
|
||||
/obj/item/device/pda/janitor
|
||||
name = "janitor PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/janitor
|
||||
default_cartridge = /obj/item/cartridge/janitor
|
||||
icon_state = "pda-janitor"
|
||||
ttone = "slip"
|
||||
|
||||
/obj/item/device/pda/toxins
|
||||
name = "scientist PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/signal/toxins
|
||||
default_cartridge = /obj/item/cartridge/signal/toxins
|
||||
icon_state = "pda-science"
|
||||
ttone = "boom"
|
||||
|
||||
/obj/item/device/pda/mime
|
||||
name = "mime PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/virus/mime
|
||||
default_cartridge = /obj/item/cartridge/virus/mime
|
||||
inserted_item = /obj/item/toy/crayon/mime
|
||||
icon_state = "pda-mime"
|
||||
silent = 1
|
||||
ttone = "silence"
|
||||
|
||||
/obj/item/device/pda/heads
|
||||
default_cartridge = /obj/item/weapon/cartridge/head
|
||||
default_cartridge = /obj/item/cartridge/head
|
||||
icon_state = "pda-hop"
|
||||
|
||||
/obj/item/device/pda/heads/hop
|
||||
name = "head of personnel PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/hop
|
||||
default_cartridge = /obj/item/cartridge/hop
|
||||
icon_state = "pda-hop"
|
||||
|
||||
/obj/item/device/pda/heads/hos
|
||||
name = "head of security PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/hos
|
||||
default_cartridge = /obj/item/cartridge/hos
|
||||
icon_state = "pda-hos"
|
||||
|
||||
/obj/item/device/pda/heads/ce
|
||||
name = "chief engineer PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/ce
|
||||
default_cartridge = /obj/item/cartridge/ce
|
||||
icon_state = "pda-ce"
|
||||
|
||||
/obj/item/device/pda/heads/cmo
|
||||
name = "chief medical officer PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/cmo
|
||||
default_cartridge = /obj/item/cartridge/cmo
|
||||
icon_state = "pda-cmo"
|
||||
|
||||
/obj/item/device/pda/heads/rd
|
||||
name = "research director PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/rd
|
||||
inserted_item = /obj/item/weapon/pen/fountain
|
||||
default_cartridge = /obj/item/cartridge/rd
|
||||
inserted_item = /obj/item/pen/fountain
|
||||
icon_state = "pda-rd"
|
||||
|
||||
/obj/item/device/pda/captain
|
||||
name = "captain PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/captain
|
||||
inserted_item = /obj/item/weapon/pen/fountain/captain
|
||||
default_cartridge = /obj/item/cartridge/captain
|
||||
inserted_item = /obj/item/pen/fountain/captain
|
||||
icon_state = "pda-captain"
|
||||
detonatable = FALSE
|
||||
|
||||
/obj/item/device/pda/cargo
|
||||
name = "cargo technician PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/quartermaster
|
||||
default_cartridge = /obj/item/cartridge/quartermaster
|
||||
icon_state = "pda-cargo"
|
||||
|
||||
/obj/item/device/pda/quartermaster
|
||||
name = "quartermaster PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/quartermaster
|
||||
inserted_item = /obj/item/weapon/pen/fountain
|
||||
default_cartridge = /obj/item/cartridge/quartermaster
|
||||
inserted_item = /obj/item/pen/fountain
|
||||
icon_state = "pda-qm"
|
||||
|
||||
/obj/item/device/pda/shaftminer
|
||||
@@ -139,7 +143,7 @@
|
||||
icon_state = "pda-miner"
|
||||
|
||||
/obj/item/device/pda/syndicate
|
||||
default_cartridge = /obj/item/weapon/cartridge/virus/syndicate
|
||||
default_cartridge = /obj/item/cartridge/virus/syndicate
|
||||
icon_state = "pda-syndi"
|
||||
name = "military PDA"
|
||||
owner = "John Doe"
|
||||
@@ -152,27 +156,27 @@
|
||||
|
||||
/obj/item/device/pda/lawyer
|
||||
name = "lawyer PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/lawyer
|
||||
inserted_item = /obj/item/weapon/pen/fountain
|
||||
default_cartridge = /obj/item/cartridge/lawyer
|
||||
inserted_item = /obj/item/pen/fountain
|
||||
icon_state = "pda-lawyer"
|
||||
ttone = "objection"
|
||||
|
||||
/obj/item/device/pda/botanist
|
||||
name = "botanist PDA"
|
||||
//default_cartridge = /obj/item/weapon/cartridge/botanist
|
||||
//default_cartridge = /obj/item/cartridge/botanist
|
||||
icon_state = "pda-hydro"
|
||||
|
||||
/obj/item/device/pda/roboticist
|
||||
name = "roboticist PDA"
|
||||
icon_state = "pda-roboticist"
|
||||
default_cartridge = /obj/item/weapon/cartridge/roboticist
|
||||
default_cartridge = /obj/item/cartridge/roboticist
|
||||
|
||||
/obj/item/device/pda/curator
|
||||
name = "curator PDA"
|
||||
icon_state = "pda-library"
|
||||
icon_alert = "pda-r-library"
|
||||
default_cartridge = /obj/item/weapon/cartridge/curator
|
||||
inserted_item = /obj/item/weapon/pen/fountain
|
||||
default_cartridge = /obj/item/cartridge/curator
|
||||
inserted_item = /obj/item/pen/fountain
|
||||
desc = "A portable microcomputer by Thinktronic Systems, LTD. This model is a WGW-11 series e-reader."
|
||||
note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!"
|
||||
silent = 1 //Quiet in the library!
|
||||
@@ -191,19 +195,19 @@
|
||||
/obj/item/device/pda/bar
|
||||
name = "bartender PDA"
|
||||
icon_state = "pda-bartender"
|
||||
inserted_item = /obj/item/weapon/pen/fountain
|
||||
inserted_item = /obj/item/pen/fountain
|
||||
|
||||
/obj/item/device/pda/atmos
|
||||
name = "atmospherics PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/atmos
|
||||
default_cartridge = /obj/item/cartridge/atmos
|
||||
icon_state = "pda-atmos"
|
||||
|
||||
/obj/item/device/pda/chemist
|
||||
name = "chemist PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/chemistry
|
||||
default_cartridge = /obj/item/cartridge/chemistry
|
||||
icon_state = "pda-chemistry"
|
||||
|
||||
/obj/item/device/pda/geneticist
|
||||
name = "geneticist PDA"
|
||||
default_cartridge = /obj/item/weapon/cartridge/medical
|
||||
default_cartridge = /obj/item/cartridge/medical
|
||||
icon_state = "pda-genetics"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#define CART_DRONEPHONE (1<<14)
|
||||
|
||||
|
||||
/obj/item/weapon/cartridge
|
||||
/obj/item/cartridge
|
||||
name = "generic cartridge"
|
||||
desc = "A data cartridge for portable microcomputers."
|
||||
icon = 'icons/obj/pda.dmi'
|
||||
@@ -27,12 +27,12 @@
|
||||
|
||||
var/obj/item/radio/integrated/radio = null
|
||||
|
||||
var/access = 0 //Bit flags for cartridge access
|
||||
var/access = 0 //Bit flags_1 for cartridge access
|
||||
|
||||
// var/access_flora = 0
|
||||
var/remote_door_id = ""
|
||||
|
||||
var/bot_access_flags = 0 //Bit flags. Selection: SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT
|
||||
var/bot_access_flags = 0 //Bit flags_1. Selection: SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT
|
||||
var/spam_enabled = 0 //Enables "Send to All" Option
|
||||
|
||||
var/obj/item/device/pda/host_pda = null
|
||||
@@ -50,143 +50,143 @@
|
||||
var/mob/living/simple_animal/bot/active_bot
|
||||
var/list/botlist = list()
|
||||
|
||||
/obj/item/weapon/cartridge/Initialize()
|
||||
/obj/item/cartridge/Initialize()
|
||||
. = ..()
|
||||
var/obj/item/device/pda/pda = loc
|
||||
if(istype(pda))
|
||||
host_pda = pda
|
||||
|
||||
/obj/item/weapon/cartridge/engineering
|
||||
/obj/item/cartridge/engineering
|
||||
name = "\improper Power-ON cartridge"
|
||||
icon_state = "cart-e"
|
||||
access = CART_ENGINE | CART_DRONEPHONE
|
||||
bot_access_flags = FLOOR_BOT
|
||||
|
||||
/obj/item/weapon/cartridge/atmos
|
||||
/obj/item/cartridge/atmos
|
||||
name = "\improper BreatheDeep cartridge"
|
||||
icon_state = "cart-a"
|
||||
access = CART_ATMOS | CART_DRONEPHONE
|
||||
bot_access_flags = FLOOR_BOT
|
||||
|
||||
/obj/item/weapon/cartridge/medical
|
||||
/obj/item/cartridge/medical
|
||||
name = "\improper Med-U cartridge"
|
||||
icon_state = "cart-m"
|
||||
access = CART_MEDICAL
|
||||
bot_access_flags = MED_BOT
|
||||
|
||||
/obj/item/weapon/cartridge/chemistry
|
||||
/obj/item/cartridge/chemistry
|
||||
name = "\improper ChemWhiz cartridge"
|
||||
icon_state = "cart-chem"
|
||||
access = CART_REAGENT_SCANNER
|
||||
bot_access_flags = MED_BOT
|
||||
|
||||
/obj/item/weapon/cartridge/security
|
||||
/obj/item/cartridge/security
|
||||
name = "\improper R.O.B.U.S.T. cartridge"
|
||||
icon_state = "cart-s"
|
||||
access = CART_SECURITY
|
||||
bot_access_flags = SEC_BOT
|
||||
|
||||
/obj/item/weapon/cartridge/detective
|
||||
/obj/item/cartridge/detective
|
||||
name = "\improper D.E.T.E.C.T. cartridge"
|
||||
icon_state = "cart-s"
|
||||
access = CART_SECURITY | CART_MEDICAL | CART_MANIFEST
|
||||
bot_access_flags = SEC_BOT
|
||||
|
||||
/obj/item/weapon/cartridge/janitor
|
||||
/obj/item/cartridge/janitor
|
||||
name = "\improper CustodiPRO cartridge"
|
||||
desc = "The ultimate in clean-room design."
|
||||
icon_state = "cart-j"
|
||||
access = CART_JANITOR | CART_DRONEPHONE
|
||||
bot_access_flags = CLEAN_BOT
|
||||
|
||||
/obj/item/weapon/cartridge/lawyer
|
||||
/obj/item/cartridge/lawyer
|
||||
name = "\improper P.R.O.V.E. cartridge"
|
||||
icon_state = "cart-s"
|
||||
access = CART_SECURITY
|
||||
spam_enabled = 1
|
||||
|
||||
/obj/item/weapon/cartridge/curator
|
||||
/obj/item/cartridge/curator
|
||||
name = "\improper Lib-Tweet cartridge"
|
||||
icon_state = "cart-s"
|
||||
access = CART_NEWSCASTER
|
||||
|
||||
/*
|
||||
/obj/item/weapon/cartridge/botanist
|
||||
/obj/item/cartridge/botanist
|
||||
name = "\improper Green Thumb v4.20 cartridge"
|
||||
icon_state = "cart-b"
|
||||
access_flora = 1
|
||||
*/
|
||||
|
||||
/obj/item/weapon/cartridge/roboticist
|
||||
/obj/item/cartridge/roboticist
|
||||
name = "\improper B.O.O.P. Remote Control cartridge"
|
||||
desc = "Packed with heavy duty triple-bot interlink!"
|
||||
bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT
|
||||
access = CART_DRONEPHONE
|
||||
|
||||
/obj/item/weapon/cartridge/signal
|
||||
/obj/item/cartridge/signal
|
||||
name = "generic signaler cartridge"
|
||||
desc = "A data cartridge with an integrated radio signaler module."
|
||||
|
||||
/obj/item/weapon/cartridge/signal/toxins
|
||||
/obj/item/cartridge/signal/toxins
|
||||
name = "\improper Signal Ace 2 cartridge"
|
||||
desc = "Complete with integrated radio signaler!"
|
||||
icon_state = "cart-tox"
|
||||
access = CART_REAGENT_SCANNER | CART_ATMOS
|
||||
|
||||
/obj/item/weapon/cartridge/signal/Initialize()
|
||||
/obj/item/cartridge/signal/Initialize()
|
||||
..()
|
||||
radio = new /obj/item/radio/integrated/signal(src)
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/cartridge/quartermaster
|
||||
/obj/item/cartridge/quartermaster
|
||||
name = "space parts & space vendors cartridge"
|
||||
desc = "Perfect for the Quartermaster on the go!"
|
||||
icon_state = "cart-q"
|
||||
access = CART_QUARTERMASTER
|
||||
bot_access_flags = MULE_BOT
|
||||
|
||||
/obj/item/weapon/cartridge/head
|
||||
/obj/item/cartridge/head
|
||||
name = "\improper Easy-Record DELUXE cartridge"
|
||||
icon_state = "cart-h"
|
||||
access = CART_MANIFEST | CART_STATUS_DISPLAY
|
||||
|
||||
/obj/item/weapon/cartridge/hop
|
||||
/obj/item/cartridge/hop
|
||||
name = "\improper HumanResources9001 cartridge"
|
||||
icon_state = "cart-h"
|
||||
access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_JANITOR | CART_SECURITY | CART_NEWSCASTER | CART_QUARTERMASTER | CART_DRONEPHONE
|
||||
bot_access_flags = MULE_BOT | CLEAN_BOT
|
||||
|
||||
/obj/item/weapon/cartridge/hos
|
||||
/obj/item/cartridge/hos
|
||||
name = "\improper R.O.B.U.S.T. DELUXE cartridge"
|
||||
icon_state = "cart-hos"
|
||||
access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_SECURITY
|
||||
bot_access_flags = SEC_BOT
|
||||
|
||||
|
||||
/obj/item/weapon/cartridge/ce
|
||||
/obj/item/cartridge/ce
|
||||
name = "\improper Power-On DELUXE cartridge"
|
||||
icon_state = "cart-ce"
|
||||
access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_ENGINE | CART_ATMOS | CART_DRONEPHONE
|
||||
bot_access_flags = FLOOR_BOT
|
||||
|
||||
/obj/item/weapon/cartridge/cmo
|
||||
/obj/item/cartridge/cmo
|
||||
name = "\improper Med-U DELUXE cartridge"
|
||||
icon_state = "cart-cmo"
|
||||
access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_MEDICAL
|
||||
bot_access_flags = MED_BOT
|
||||
|
||||
/obj/item/weapon/cartridge/rd
|
||||
/obj/item/cartridge/rd
|
||||
name = "\improper Signal Ace DELUXE cartridge"
|
||||
icon_state = "cart-rd"
|
||||
access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_REAGENT_SCANNER | CART_ATMOS | CART_DRONEPHONE
|
||||
bot_access_flags = FLOOR_BOT | CLEAN_BOT | MED_BOT
|
||||
|
||||
/obj/item/weapon/cartridge/rd/Initialize()
|
||||
/obj/item/cartridge/rd/Initialize()
|
||||
..()
|
||||
radio = new /obj/item/radio/integrated/signal(src)
|
||||
|
||||
/obj/item/weapon/cartridge/captain
|
||||
/obj/item/cartridge/captain
|
||||
name = "\improper Value-PAK cartridge"
|
||||
desc = "Now with 350% more value!" //Give the Captain...EVERYTHING! (Except Mime and Clown)
|
||||
icon_state = "cart-c"
|
||||
@@ -194,11 +194,11 @@
|
||||
bot_access_flags = SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT
|
||||
spam_enabled = 1
|
||||
|
||||
/obj/item/weapon/cartridge/captain/New()
|
||||
/obj/item/cartridge/captain/New()
|
||||
..()
|
||||
radio = new /obj/item/radio/integrated/signal(src)
|
||||
|
||||
/obj/item/weapon/cartridge/proc/post_status(command, data1, data2)
|
||||
/obj/item/cartridge/proc/post_status(command, data1, data2)
|
||||
|
||||
var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
frequency.post_signal(src, status_signal)
|
||||
|
||||
|
||||
/obj/item/weapon/cartridge/proc/generate_menu(mob/user)
|
||||
/obj/item/cartridge/proc/generate_menu(mob/user)
|
||||
if(!host_pda)
|
||||
return
|
||||
switch(host_pda.mode)
|
||||
@@ -470,7 +470,7 @@ Code:
|
||||
menu += "<h4>Located Mops:</h4>"
|
||||
|
||||
var/ldat
|
||||
for (var/obj/item/weapon/mop/M in world)
|
||||
for (var/obj/item/mop/M in world)
|
||||
var/turf/ml = get_turf(M)
|
||||
|
||||
if(ml)
|
||||
@@ -552,7 +552,7 @@ Code:
|
||||
|
||||
return menu
|
||||
|
||||
/obj/item/weapon/cartridge/Topic(href, href_list)
|
||||
/obj/item/cartridge/Topic(href, href_list)
|
||||
..()
|
||||
|
||||
if (!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
|
||||
@@ -663,7 +663,7 @@ Code:
|
||||
host_pda.attack_self(usr)
|
||||
|
||||
|
||||
/obj/item/weapon/cartridge/proc/bot_control()
|
||||
/obj/item/cartridge/proc/bot_control()
|
||||
|
||||
|
||||
var/mob/living/simple_animal/bot/Bot
|
||||
@@ -726,12 +726,12 @@ Code:
|
||||
return menu
|
||||
|
||||
//If the cartridge adds a special line to the top of the messaging app
|
||||
/obj/item/weapon/cartridge/proc/message_header()
|
||||
/obj/item/cartridge/proc/message_header()
|
||||
return ""
|
||||
|
||||
//If the cartridge adds something to each potetial messaging target
|
||||
/obj/item/weapon/cartridge/proc/message_special(obj/item/device/pda/target)
|
||||
/obj/item/cartridge/proc/message_special(obj/item/device/pda/target)
|
||||
return ""
|
||||
|
||||
//This is called for special abilities of cartridges
|
||||
/obj/item/weapon/cartridge/proc/special(mov/living/user, list/params)
|
||||
/obj/item/cartridge/proc/special(mov/living/user, list/params)
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
/obj/item/weapon/cartridge/virus
|
||||
/obj/item/cartridge/virus
|
||||
name = "Generic Virus PDA cart"
|
||||
var/charges = 5
|
||||
|
||||
/obj/item/weapon/cartridge/virus/proc/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
/obj/item/cartridge/virus/proc/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
return
|
||||
|
||||
/obj/item/weapon/cartridge/virus/message_header()
|
||||
/obj/item/cartridge/virus/message_header()
|
||||
return "<b>[charges] viral files left.</b><HR>"
|
||||
|
||||
/obj/item/weapon/cartridge/virus/message_special(obj/item/device/pda/target)
|
||||
/obj/item/cartridge/virus/message_special(obj/item/device/pda/target)
|
||||
if (!istype(loc, /obj/item/device/pda))
|
||||
return "" //Sanity check, this shouldn't be possible.
|
||||
return " (<a href='byond://?src=\ref[loc];choice=cart;special=virus;target=\ref[target]'>*Send Virus*</a>)"
|
||||
|
||||
/obj/item/weapon/cartridge/virus/special(mob/living/user, list/params)
|
||||
/obj/item/cartridge/virus/special(mob/living/user, list/params)
|
||||
var/obj/item/device/pda/P = locate(params["target"])//Leaving it alone in case it may do something useful, I guess.
|
||||
send_virus(P,user)
|
||||
|
||||
/obj/item/weapon/cartridge/virus/clown
|
||||
/obj/item/cartridge/virus/clown
|
||||
name = "\improper Honkworks 5.0 cartridge"
|
||||
icon_state = "cart-clown"
|
||||
desc = "A data cartridge for portable microcomputers. It smells vaguely of banannas"
|
||||
access = CART_CLOWN
|
||||
|
||||
/obj/item/weapon/cartridge/virus/clown/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
/obj/item/cartridge/virus/clown/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
if(charges <= 0)
|
||||
to_chat(U, "<span class='notice'>Out of charges.</span>")
|
||||
return
|
||||
@@ -34,12 +34,12 @@
|
||||
else
|
||||
to_chat(U, "PDA not found.")
|
||||
|
||||
/obj/item/weapon/cartridge/virus/mime
|
||||
/obj/item/cartridge/virus/mime
|
||||
name = "\improper Gestur-O 1000 cartridge"
|
||||
icon_state = "cart-mi"
|
||||
access = CART_MIME
|
||||
|
||||
/obj/item/weapon/cartridge/virus/mime/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
/obj/item/cartridge/virus/mime/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
if(charges <= 0)
|
||||
to_chat(U, "<span class='notice'>Out of charges.</span>")
|
||||
return
|
||||
@@ -51,14 +51,14 @@
|
||||
else
|
||||
to_chat(U, "PDA not found.")
|
||||
|
||||
/obj/item/weapon/cartridge/virus/syndicate
|
||||
/obj/item/cartridge/virus/syndicate
|
||||
name = "\improper Detomatix cartridge"
|
||||
icon_state = "cart"
|
||||
access = CART_REMOTE_DOOR
|
||||
remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing.
|
||||
charges = 4
|
||||
|
||||
/obj/item/weapon/cartridge/virus/syndicate/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
/obj/item/cartridge/virus/syndicate/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
if(charges <= 0)
|
||||
to_chat(U, "<span class='notice'>Out of charges.</span>")
|
||||
return
|
||||
@@ -79,12 +79,12 @@
|
||||
else
|
||||
to_chat(U, "PDA not found.")
|
||||
|
||||
/obj/item/weapon/cartridge/virus/frame
|
||||
/obj/item/cartridge/virus/frame
|
||||
name = "\improper F.R.A.M.E. cartridge"
|
||||
icon_state = "cart"
|
||||
var/telecrystals = 0
|
||||
|
||||
/obj/item/weapon/cartridge/virus/frame/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
/obj/item/cartridge/virus/frame/send_virus(obj/item/device/pda/target, mob/living/U)
|
||||
if(charges <= 0)
|
||||
to_chat(U, "<span class='notice'>Out of charges.</span>")
|
||||
return
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
slot_flags = SLOT_BELT
|
||||
flags = NOBLUDGEON
|
||||
flags_1 = NOBLUDGEON_1
|
||||
var/flush = FALSE
|
||||
var/mob/living/silicon/ai/AI
|
||||
origin_tech = "programming=3;materials=3"
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
origin_tech = "syndicate=1;engineering=3"
|
||||
flags = NOBLUDGEON
|
||||
flags_1 = NOBLUDGEON_1
|
||||
|
||||
var/obj/machinery/camera/current = null
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/device/chameleon
|
||||
name = "chameleon-projector"
|
||||
icon_state = "shield0"
|
||||
flags = CONDUCT | NOBLUDGEON
|
||||
flags_1 = CONDUCT_1 | NOBLUDGEON_1
|
||||
slot_flags = SLOT_BELT
|
||||
item_state = "electronic"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
/obj/item/device/chameleon/New()
|
||||
..()
|
||||
var/obj/item/weapon/cigbutt/butt = /obj/item/weapon/cigbutt
|
||||
var/obj/item/cigbutt/butt = /obj/item/cigbutt
|
||||
saved_appearance = initial(butt.appearance)
|
||||
|
||||
/obj/item/device/chameleon/dropped()
|
||||
@@ -36,7 +36,7 @@
|
||||
if(!check_sprite(target))
|
||||
return
|
||||
if(!active_dummy)
|
||||
if(isitem(target) && !istype(target, /obj/item/weapon/disk/nuclear))
|
||||
if(isitem(target) && !istype(target, /obj/item/disk/nuclear))
|
||||
playsound(get_turf(src), 'sound/weapons/flash.ogg', 100, 1, -6)
|
||||
to_chat(user, "<span class='notice'>Scanned [target].</span>")
|
||||
var/obj/temp = new/obj()
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throw_range = 4
|
||||
throw_speed = 1
|
||||
flags = NOBLUDGEON
|
||||
flags_1 = NOBLUDGEON_1
|
||||
force = 3
|
||||
attack_verb = list("blown up", "exploded", "detonated")
|
||||
materials = list(MAT_METAL=50, MAT_GLASS=30)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = SLOT_BELT
|
||||
materials = list(MAT_METAL=50, MAT_GLASS=20)
|
||||
actions_types = list(/datum/action/item_action/toggle_light)
|
||||
@@ -162,7 +162,7 @@
|
||||
desc = "A pen-sized light, used by medical staff. It can also be used to create a hologram to alert people of incoming medical assistance."
|
||||
icon_state = "penlight"
|
||||
item_state = ""
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
brightness_on = 2
|
||||
var/holo_cooldown = 0
|
||||
|
||||
@@ -210,7 +210,7 @@
|
||||
item_state = "lamp"
|
||||
brightness_on = 5
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
materials = list()
|
||||
on = TRUE
|
||||
|
||||
@@ -524,5 +524,5 @@
|
||||
desc = "This shouldn't exist outside of someone's head, how are you seeing this?"
|
||||
brightness_on = 15
|
||||
flashlight_power = 1
|
||||
flags = CONDUCT | DROPDEL
|
||||
flags_1 = CONDUCT_1 | DROPDEL_1
|
||||
actions_types = list()
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon_state = "signmaker_engi"
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
flags = NOBLUDGEON
|
||||
flags_1 = NOBLUDGEON_1
|
||||
item_state = "electronic"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
@@ -77,7 +77,7 @@
|
||||
layer = ABOVE_ALL_MOB_LAYER
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
mouse_opacity = 2
|
||||
mouse_opacity = MOUSE_OPACITY_OPAQUE
|
||||
resistance_flags = INDESTRUCTIBLE
|
||||
CanAtmosPass = ATMOS_PASS_DENSITY
|
||||
armor = list(melee = 0, bullet = 25, laser = 50, energy = 50, bomb = 25, bio = 100, rad = 100, fire = 100, acid = 100)
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
..()
|
||||
|
||||
/obj/item/device/geiger_counter/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/screwdriver) && emagged)
|
||||
if(istype(I, /obj/item/screwdriver) && emagged)
|
||||
if(scanning)
|
||||
to_chat(user, "<span class='warning'>Turn off [src] before you perform this action!</span>")
|
||||
return 0
|
||||
|
||||
@@ -158,11 +158,11 @@ GLOBAL_LIST_EMPTY(GPS_list)
|
||||
icon_state = "gps-b"
|
||||
gpstag = "BORG0"
|
||||
desc = "A mining cyborg internal positioning system. Used as a recovery beacon for damaged cyborg assets, or a collaboration tool for mining teams."
|
||||
flags = NODROP
|
||||
flags_1 = NODROP_1
|
||||
|
||||
/obj/item/device/gps/internal
|
||||
icon_state = null
|
||||
flags = ABSTRACT
|
||||
flags_1 = ABSTRACT_1
|
||||
gpstag = "Eerie Signal"
|
||||
desc = "Report to a coder immediately."
|
||||
invisibility = INVISIBILITY_MAXIMUM
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
icon_state = "pointer"
|
||||
item_state = "pen"
|
||||
var/pointer_icon_state
|
||||
flags = CONDUCT | NOBLUDGEON
|
||||
flags_1 = CONDUCT_1 | NOBLUDGEON_1
|
||||
slot_flags = SLOT_BELT
|
||||
materials = list(MAT_METAL=500, MAT_GLASS=500)
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -16,7 +16,7 @@
|
||||
var/effectchance = 33
|
||||
var/recharging = 0
|
||||
var/recharge_locked = FALSE
|
||||
var/obj/item/weapon/stock_parts/micro_laser/diode //used for upgrading!
|
||||
var/obj/item/stock_parts/micro_laser/diode //used for upgrading!
|
||||
|
||||
|
||||
/obj/item/device/laser_pointer/red
|
||||
@@ -36,10 +36,10 @@
|
||||
|
||||
/obj/item/device/laser_pointer/upgraded/New()
|
||||
..()
|
||||
diode = new /obj/item/weapon/stock_parts/micro_laser/ultra
|
||||
diode = new /obj/item/stock_parts/micro_laser/ultra
|
||||
|
||||
/obj/item/device/laser_pointer/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/stock_parts/micro_laser))
|
||||
if(istype(W, /obj/item/stock_parts/micro_laser))
|
||||
if(!diode)
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
return
|
||||
@@ -48,7 +48,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] already has a diode installed.</span>")
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver))
|
||||
else if(istype(W, /obj/item/screwdriver))
|
||||
if(diode)
|
||||
to_chat(user, "<span class='notice'>You remove the [diode.name] from \the [src].</span>")
|
||||
diode.loc = get_turf(src.loc)
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "magnets=3;engineering=4"
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You need one sheet of glass to replace lights!</span>")
|
||||
|
||||
if(istype(W, /obj/item/weapon/shard))
|
||||
if(istype(W, /obj/item/shard))
|
||||
if(uses >= max_uses)
|
||||
to_chat(user, "<span class='warning'>[src.name] is full.</span>")
|
||||
return
|
||||
@@ -102,8 +102,8 @@
|
||||
qdel(W)
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/light))
|
||||
var/obj/item/weapon/light/L = W
|
||||
if(istype(W, /obj/item/light))
|
||||
var/obj/item/light/L = W
|
||||
if(L.status == 0) // LIGHT OKAY
|
||||
if(uses < max_uses)
|
||||
if(!user.temporarilyRemoveItemFromInventory(W))
|
||||
@@ -118,14 +118,14 @@
|
||||
qdel(L)
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/storage))
|
||||
var/obj/item/weapon/storage/S = W
|
||||
if(istype(W, /obj/item/storage))
|
||||
var/obj/item/storage/S = W
|
||||
var/found_lightbulbs = FALSE
|
||||
var/replaced_something = TRUE
|
||||
|
||||
for(var/obj/item/I in S.contents)
|
||||
if(istype(I, /obj/item/weapon/light))
|
||||
var/obj/item/weapon/light/L = I
|
||||
if(istype(I, /obj/item/light))
|
||||
var/obj/item/light/L = I
|
||||
found_lightbulbs = TRUE
|
||||
if(src.uses >= max_uses)
|
||||
break
|
||||
@@ -201,7 +201,7 @@
|
||||
target.status = LIGHT_EMPTY
|
||||
target.update()
|
||||
|
||||
var/obj/item/weapon/light/L2 = new target.light_type()
|
||||
var/obj/item/light/L2 = new target.light_type()
|
||||
|
||||
target.status = L2.status
|
||||
target.switchcount = L2.switchcount
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
icon = 'icons/obj/bureaucracy.dmi'
|
||||
icon_state = "labeler1"
|
||||
item_state = "flight"
|
||||
flags = NOBLUDGEON
|
||||
flags_1 = NOBLUDGEON_1
|
||||
var/list/modes = list(
|
||||
"grey" = rgb(255,255,255),
|
||||
"red" = rgb(255,0,0),
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
throwforce = 5
|
||||
throw_speed = 1
|
||||
throw_range = 2
|
||||
@@ -57,7 +57,7 @@
|
||||
set_light(0)
|
||||
|
||||
/obj/item/device/powersink/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
if(mode == DISCONNECTED)
|
||||
var/turf/T = loc
|
||||
if(isturf(T) && !T.intact)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
item_state = "electropack"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = SLOT_BACK
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
materials = list(MAT_METAL=10000, MAT_GLASS=2500)
|
||||
@@ -35,7 +35,7 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/device/electropack/attackby(obj/item/weapon/W, mob/user, params)
|
||||
/obj/item/device/electropack/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/clothing/head/helmet))
|
||||
var/obj/item/assembly/shock_kit/A = new /obj/item/assembly/shock_kit( user )
|
||||
A.icon = 'icons/obj/assemblies.dmi'
|
||||
@@ -52,8 +52,8 @@
|
||||
|
||||
user.put_in_hands(A)
|
||||
A.add_fingerprint(user)
|
||||
if(src.flags & NODROP)
|
||||
A.flags |= NODROP
|
||||
if(src.flags_1 & NODROP_1)
|
||||
A.flags_1 |= NODROP_1
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -45,10 +45,7 @@
|
||||
origin_tech = "syndicate=3"
|
||||
icon_state = "syndie_headset"
|
||||
item_state = "syndie_headset"
|
||||
|
||||
/obj/item/device/radio/headset/syndicate/alt/Initialize(mapload)
|
||||
. = ..()
|
||||
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
||||
flags_2 = BANG_PROTECT_2
|
||||
|
||||
/obj/item/device/radio/headset/syndicate/alt/leader
|
||||
name = "team leader headset"
|
||||
@@ -77,10 +74,7 @@
|
||||
desc = "This is used by your elite security force. Protects ears from flashbangs. \nTo access the security channel, use :s."
|
||||
icon_state = "sec_headset_alt"
|
||||
item_state = "sec_headset_alt"
|
||||
|
||||
/obj/item/device/radio/headset/headset_sec/alt/Initialize(mapload)
|
||||
. = ..()
|
||||
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
||||
flags_2 = BANG_PROTECT_2
|
||||
|
||||
/obj/item/device/radio/headset/headset_eng
|
||||
name = "engineering radio headset"
|
||||
@@ -132,10 +126,7 @@
|
||||
desc = "The headset of the boss. Protects ears from flashbangs. \nChannels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
|
||||
/obj/item/device/radio/headset/heads/captain/alt/Initialize(mapload)
|
||||
. = ..()
|
||||
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
||||
flags_2 = BANG_PROTECT_2
|
||||
|
||||
/obj/item/device/radio/headset/heads/rd
|
||||
name = "\proper the research director's headset"
|
||||
@@ -154,10 +145,7 @@
|
||||
desc = "The headset of the man in charge of keeping order and protecting the station. Protects ears from flashbangs. \nTo access the security channel, use :s. For command, use :c."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
|
||||
/obj/item/device/radio/headset/heads/hos/alt/Initialize(mapload)
|
||||
. = ..()
|
||||
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
||||
flags_2 = BANG_PROTECT_2
|
||||
|
||||
/obj/item/device/radio/headset/heads/ce
|
||||
name = "\proper the chief engineer's headset"
|
||||
@@ -211,10 +199,7 @@
|
||||
icon_state = "cent_headset_alt"
|
||||
item_state = "cent_headset_alt"
|
||||
keyslot = null
|
||||
|
||||
/obj/item/device/radio/headset/headset_cent/alt/Initialize(mapload)
|
||||
. = ..()
|
||||
SET_SECONDARY_FLAG(src, BANG_PROTECT)
|
||||
flags_2 = BANG_PROTECT_2
|
||||
|
||||
/obj/item/device/radio/headset/ai
|
||||
name = "\proper Integrated Subspace Transceiver "
|
||||
@@ -224,10 +209,10 @@
|
||||
/obj/item/device/radio/headset/ai/receive_range(freq, level)
|
||||
return ..(freq, level, 1)
|
||||
|
||||
/obj/item/device/radio/headset/attackby(obj/item/weapon/W, mob/user, params)
|
||||
/obj/item/device/radio/headset/attackby(obj/item/W, mob/user, params)
|
||||
user.set_machine(src)
|
||||
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
if(keyslot || keyslot2)
|
||||
|
||||
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
to_chat(user, "<span class='notice'>It's <i>unscrewed</i> from the wall, and can be <b>detached</b>.</span>")
|
||||
|
||||
/obj/item/device/radio/intercom/attackby(obj/item/I, mob/living/user, params)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
var/obj/item/weapon/screwdriver/S = I
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
var/obj/item/screwdriver/S = I
|
||||
if(unfastened)
|
||||
user.visible_message("<span class='notice'>[user] starts tightening [src]'s screws...</span>", "<span class='notice'>You start screwing in [src]...</span>")
|
||||
playsound(src, S.usesound, 50, 1)
|
||||
@@ -52,11 +52,11 @@
|
||||
playsound(src, 'sound/items/screwdriver2.ogg', 50, 1)
|
||||
unfastened = TRUE
|
||||
return
|
||||
else if(istype(I, /obj/item/weapon/wrench))
|
||||
else if(istype(I, /obj/item/wrench))
|
||||
if(!unfastened)
|
||||
to_chat(user, "<span class='warning'>You need to unscrew [src] from the wall first!</span>")
|
||||
return
|
||||
var/obj/item/weapon/wrench/W = I
|
||||
var/obj/item/wrench/W = I
|
||||
user.visible_message("<span class='notice'>[user] starts unsecuring [src]...</span>", "<span class='notice'>You start unsecuring [src]...</span>")
|
||||
playsound(src, W.usesound, 50, 1)
|
||||
if(!do_after(user, 80 * W.toolspeed, target = src))
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
var/freqlock = 0 //Frequency lock to stop the user from untuning specialist radios.
|
||||
var/emped = 0 //Highjacked to track the number of consecutive EMPs on the radio, allowing consecutive EMP's to stack properly.
|
||||
// "Example" = FREQ_LISTENING|FREQ_BROADCASTING
|
||||
flags = CONDUCT | HEAR
|
||||
flags_1 = CONDUCT_1 | HEAR_1
|
||||
slot_flags = SLOT_BELT
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
@@ -426,7 +426,10 @@
|
||||
signal.frequency = freqnum // Quick frequency set
|
||||
for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list)
|
||||
R.receive_signal(signal)
|
||||
|
||||
|
||||
// Allinone can act as receivers. (Unless of course whoever coded this last time forgot to put it in somewhere!)
|
||||
for(var/obj/machinery/telecomms/allinone/R in GLOB.telecomms_list)
|
||||
R.receive_signal(signal)
|
||||
|
||||
spawn(20) // wait a little...
|
||||
|
||||
@@ -510,9 +513,9 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[name] can not be modified or attached.</span>")
|
||||
|
||||
/obj/item/device/radio/attackby(obj/item/weapon/W, mob/user, params)
|
||||
/obj/item/device/radio/attackby(obj/item/W, mob/user, params)
|
||||
add_fingerprint(user)
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
b_stat = !b_stat
|
||||
if(b_stat)
|
||||
to_chat(user, "<span class='notice'>The radio can now be attached and modified!</span>")
|
||||
@@ -547,10 +550,10 @@
|
||||
name = "cyborg radio"
|
||||
subspace_switchable = 1
|
||||
dog_fashion = null
|
||||
flags_2 = NO_EMP_WIRES_2
|
||||
|
||||
/obj/item/device/radio/borg/Initialize(mapload)
|
||||
..()
|
||||
SET_SECONDARY_FLAG(src, NO_EMP_WIRES)
|
||||
|
||||
/obj/item/device/radio/borg/syndicate
|
||||
syndie = 1
|
||||
@@ -560,9 +563,9 @@
|
||||
. = ..()
|
||||
set_frequency(GLOB.SYND_FREQ)
|
||||
|
||||
/obj/item/device/radio/borg/attackby(obj/item/weapon/W, mob/user, params)
|
||||
/obj/item/device/radio/borg/attackby(obj/item/W, mob/user, params)
|
||||
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
if(keyslot)
|
||||
for(var/ch_name in channels)
|
||||
SSradio.remove_object(src, GLOB.radiochannels[ch_name])
|
||||
|
||||
@@ -63,7 +63,7 @@ MASS SPECTROMETER
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
|
||||
flags = CONDUCT | NOBLUDGEON
|
||||
flags_1 = CONDUCT_1 | NOBLUDGEON_1
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
@@ -260,7 +260,7 @@ MASS SPECTROMETER
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
flags = CONDUCT | NOBLUDGEON
|
||||
flags_1 = CONDUCT_1 | NOBLUDGEON_1
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
@@ -336,9 +336,9 @@ MASS SPECTROMETER
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = SLOT_BELT
|
||||
container_type = OPENCONTAINER
|
||||
container_type = OPENCONTAINER_1
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
@@ -400,7 +400,7 @@ MASS SPECTROMETER
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
origin_tech = "biotech=2"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
flags = HEAR
|
||||
flags_1 = HEAR_1
|
||||
slot_flags = SLOT_BELT
|
||||
materials = list(MAT_METAL=60, MAT_GLASS=30)
|
||||
force = 2
|
||||
@@ -218,7 +218,7 @@
|
||||
return
|
||||
|
||||
to_chat(usr, "<span class='notice'>Transcript printed.</span>")
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(get_turf(src))
|
||||
var/obj/item/paper/P = new /obj/item/paper(get_turf(src))
|
||||
var/t1 = "<B>Transcript:</B><BR><BR>"
|
||||
for(var/i = 1, mytape.storedinfo.len >= i, i++)
|
||||
t1 += "[mytape.storedinfo[i]]<BR>"
|
||||
@@ -278,9 +278,9 @@
|
||||
/obj/item/device/tape/attackby(obj/item/I, mob/user, params)
|
||||
if(ruined)
|
||||
var/delay = -1
|
||||
if (istype(I, /obj/item/weapon/screwdriver))
|
||||
if (istype(I, /obj/item/screwdriver))
|
||||
delay = 120*I.toolspeed
|
||||
else if(istype(I, /obj/item/weapon/pen))
|
||||
else if(istype(I, /obj/item/pen))
|
||||
delay = 120*1.5
|
||||
if (delay != -1)
|
||||
to_chat(user, "<span class='notice'>You start winding the tape back in...</span>")
|
||||
|
||||
@@ -23,7 +23,7 @@ effective or pretty fucking useless.
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
item_state = "electronic"
|
||||
lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi'
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
lefthand_file = 'icons/mob/inhands/weapons/bombs_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/bombs_righthand.dmi'
|
||||
desc = "Regulates the transfer of air between two tanks"
|
||||
var/obj/item/weapon/tank/tank_one
|
||||
var/obj/item/weapon/tank/tank_two
|
||||
var/obj/item/tank/tank_one
|
||||
var/obj/item/tank/tank_two
|
||||
var/obj/item/device/assembly/attached_device
|
||||
var/mob/attacher = null
|
||||
var/valve_open = FALSE
|
||||
@@ -18,7 +18,7 @@
|
||||
return 1
|
||||
|
||||
/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user, params)
|
||||
if(istype(item, /obj/item/weapon/tank))
|
||||
if(istype(item, /obj/item/tank))
|
||||
if(tank_one && tank_two)
|
||||
to_chat(user, "<span class='warning'>There are already two tanks attached, remove one first!</span>")
|
||||
return
|
||||
|
||||
@@ -1,36 +1,36 @@
|
||||
/obj/item/weapon/storage/pill_bottle/dice
|
||||
/obj/item/storage/pill_bottle/dice
|
||||
name = "bag of dice"
|
||||
desc = "Contains all the luck you'll ever need."
|
||||
icon = 'icons/obj/dice.dmi'
|
||||
icon_state = "dicebag"
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/dice/New()
|
||||
/obj/item/storage/pill_bottle/dice/New()
|
||||
..()
|
||||
var/special_die = pick("1","2","fudge","space","00","8bd20","4dd6","100")
|
||||
if(special_die == "1")
|
||||
new /obj/item/weapon/dice/d1(src)
|
||||
new /obj/item/dice/d1(src)
|
||||
if(special_die == "2")
|
||||
new /obj/item/weapon/dice/d2(src)
|
||||
new /obj/item/weapon/dice/d4(src)
|
||||
new /obj/item/weapon/dice/d6(src)
|
||||
new /obj/item/dice/d2(src)
|
||||
new /obj/item/dice/d4(src)
|
||||
new /obj/item/dice/d6(src)
|
||||
if(special_die == "fudge")
|
||||
new /obj/item/weapon/dice/fudge(src)
|
||||
new /obj/item/dice/fudge(src)
|
||||
if(special_die == "space")
|
||||
new /obj/item/weapon/dice/d6/space(src)
|
||||
new /obj/item/weapon/dice/d8(src)
|
||||
new /obj/item/weapon/dice/d10(src)
|
||||
new /obj/item/dice/d6/space(src)
|
||||
new /obj/item/dice/d8(src)
|
||||
new /obj/item/dice/d10(src)
|
||||
if(special_die == "00")
|
||||
new /obj/item/weapon/dice/d00(src)
|
||||
new /obj/item/weapon/dice/d12(src)
|
||||
new /obj/item/weapon/dice/d20(src)
|
||||
new /obj/item/dice/d00(src)
|
||||
new /obj/item/dice/d12(src)
|
||||
new /obj/item/dice/d20(src)
|
||||
if(special_die == "8bd20")
|
||||
new /obj/item/weapon/dice/eightbd20(src)
|
||||
new /obj/item/dice/eightbd20(src)
|
||||
if(special_die == "4dd6")
|
||||
new /obj/item/weapon/dice/fourdd6(src)
|
||||
new /obj/item/dice/fourdd6(src)
|
||||
if(special_die == "100")
|
||||
new /obj/item/weapon/dice/d100(src)
|
||||
new /obj/item/dice/d100(src)
|
||||
|
||||
/obj/item/weapon/dice //depreciated d6, use /obj/item/weapon/dice/d6 if you actually want a d6
|
||||
/obj/item/dice //depreciated d6, use /obj/item/dice/d6 if you actually want a d6
|
||||
name = "die"
|
||||
desc = "A die with six sides. Basic and servicable."
|
||||
icon = 'icons/obj/dice.dmi'
|
||||
@@ -42,117 +42,117 @@
|
||||
var/can_be_rigged = TRUE
|
||||
var/rigged = FALSE
|
||||
|
||||
/obj/item/weapon/dice/New()
|
||||
/obj/item/dice/New()
|
||||
result = rand(1, sides)
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/dice/d1
|
||||
/obj/item/dice/d1
|
||||
name = "d1"
|
||||
desc = "A die with one side. Deterministic!"
|
||||
icon_state = "d1"
|
||||
sides = 1
|
||||
|
||||
/obj/item/weapon/dice/d2
|
||||
/obj/item/dice/d2
|
||||
name = "d2"
|
||||
desc = "A die with two sides. Coins are undignified!"
|
||||
icon_state = "d2"
|
||||
sides = 2
|
||||
|
||||
/obj/item/weapon/dice/d4
|
||||
/obj/item/dice/d4
|
||||
name = "d4"
|
||||
desc = "A die with four sides. The nerd's caltrop."
|
||||
icon_state = "d4"
|
||||
sides = 4
|
||||
|
||||
/obj/item/weapon/dice/d6
|
||||
/obj/item/dice/d6
|
||||
name = "d6"
|
||||
|
||||
/obj/item/weapon/dice/d6/space
|
||||
/obj/item/dice/d6/space
|
||||
name = "space cube"
|
||||
desc = "A die with six sides. 6 TIMES 255 TIMES 255 TILE TOTAL EXISTENCE, SQUARE YOUR MIND OF EDUCATED STUPID: 2 DOES NOT EXIST."
|
||||
icon_state = "spaced6"
|
||||
|
||||
/obj/item/weapon/dice/d6/space/New()
|
||||
/obj/item/dice/d6/space/New()
|
||||
..()
|
||||
if(prob(10))
|
||||
name = "spess cube"
|
||||
|
||||
/obj/item/weapon/dice/fudge
|
||||
/obj/item/dice/fudge
|
||||
name = "fudge die"
|
||||
desc = "A die with six sides but only three results. Is this a plus or a minus? Your mind is drawing a blank..."
|
||||
sides = 3 //shhh
|
||||
icon_state = "fudge"
|
||||
special_faces = list("minus","blank","plus")
|
||||
|
||||
/obj/item/weapon/dice/d8
|
||||
/obj/item/dice/d8
|
||||
name = "d8"
|
||||
desc = "A die with eight sides. It feels... lucky."
|
||||
icon_state = "d8"
|
||||
sides = 8
|
||||
|
||||
/obj/item/weapon/dice/d10
|
||||
/obj/item/dice/d10
|
||||
name = "d10"
|
||||
desc = "A die with ten sides. Useful for percentages."
|
||||
icon_state = "d10"
|
||||
sides = 10
|
||||
|
||||
/obj/item/weapon/dice/d00
|
||||
/obj/item/dice/d00
|
||||
name = "d00"
|
||||
desc = "A die with ten sides. Works better for d100 rolls than a golfball."
|
||||
icon_state = "d00"
|
||||
sides = 10
|
||||
|
||||
/obj/item/weapon/dice/d12
|
||||
/obj/item/dice/d12
|
||||
name = "d12"
|
||||
desc = "A die with twelve sides. There's an air of neglect about it."
|
||||
icon_state = "d12"
|
||||
sides = 12
|
||||
|
||||
/obj/item/weapon/dice/d20
|
||||
/obj/item/dice/d20
|
||||
name = "d20"
|
||||
desc = "A die with twenty sides. The prefered die to throw at the GM."
|
||||
icon_state = "d20"
|
||||
sides = 20
|
||||
|
||||
/obj/item/weapon/dice/d100
|
||||
/obj/item/dice/d100
|
||||
name = "d100"
|
||||
desc = "A die with one hundred sides! Probably not fairly weighted..."
|
||||
icon_state = "d100"
|
||||
sides = 100
|
||||
|
||||
/obj/item/weapon/dice/d100/update_icon()
|
||||
/obj/item/dice/d100/update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/dice/eightbd20
|
||||
/obj/item/dice/eightbd20
|
||||
name = "strange d20"
|
||||
desc = "A weird die with raised text printed on the faces. Everything's white on white so reading it is a struggle. What poor design!"
|
||||
icon_state = "8bd20"
|
||||
sides = 20
|
||||
special_faces = list("It is certain","It is decidedly so","Without a doubt","Yes, definitely","You may rely on it","As I see it, yes","Most likely","Outlook good","Yes","Signs point to yes","Reply hazy try again","Ask again later","Better not tell you now","Cannot predict now","Concentrate and ask again","Don't count on it","My reply is no","My sources say no","Outlook not so good","Very doubtful")
|
||||
|
||||
/obj/item/weapon/dice/eightbd20/update_icon()
|
||||
/obj/item/dice/eightbd20/update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/dice/fourdd6
|
||||
/obj/item/dice/fourdd6
|
||||
name = "4d d6"
|
||||
desc = "A die that exists in four dimensional space. Properly interpreting them can only be properly done with the help of a mathematician, a physicist, and a priest."
|
||||
icon_state = "4dd6"
|
||||
sides = 48
|
||||
special_faces = list("Cube-Side: 1-1","Cube-Side: 1-2","Cube-Side: 1-3","Cube-Side: 1-4","Cube-Side: 1-5","Cube-Side: 1-6","Cube-Side: 2-1","Cube-Side: 2-2","Cube-Side: 2-3","Cube-Side: 2-4","Cube-Side: 2-5","Cube-Side: 2-6","Cube-Side: 3-1","Cube-Side: 3-2","Cube-Side: 3-3","Cube-Side: 3-4","Cube-Side: 3-5","Cube-Side: 3-6","Cube-Side: 4-1","Cube-Side: 4-2","Cube-Side: 4-3","Cube-Side: 4-4","Cube-Side: 4-5","Cube-Side: 4-6","Cube-Side: 5-1","Cube-Side: 5-2","Cube-Side: 5-3","Cube-Side: 5-4","Cube-Side: 5-5","Cube-Side: 5-6","Cube-Side: 6-1","Cube-Side: 6-2","Cube-Side: 6-3","Cube-Side: 6-4","Cube-Side: 6-5","Cube-Side: 6-6","Cube-Side: 7-1","Cube-Side: 7-2","Cube-Side: 7-3","Cube-Side: 7-4","Cube-Side: 7-5","Cube-Side: 7-6","Cube-Side: 8-1","Cube-Side: 8-2","Cube-Side: 8-3","Cube-Side: 8-4","Cube-Side: 8-5","Cube-Side: 8-6")
|
||||
|
||||
/obj/item/weapon/dice/fourdd6/update_icon()
|
||||
/obj/item/dice/fourdd6/update_icon()
|
||||
return
|
||||
|
||||
/obj/item/weapon/dice/attack_self(mob/user)
|
||||
/obj/item/dice/attack_self(mob/user)
|
||||
diceroll(user)
|
||||
|
||||
/obj/item/weapon/dice/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
|
||||
/obj/item/dice/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
|
||||
if(!..())
|
||||
return
|
||||
diceroll(thrower)
|
||||
|
||||
/obj/item/weapon/dice/proc/diceroll(mob/user)
|
||||
/obj/item/dice/proc/diceroll(mob/user)
|
||||
result = rand(1, sides)
|
||||
if(rigged && result != rigged)
|
||||
if(prob(Clamp(1/(sides - 1) * 100, 25, 80)))
|
||||
@@ -175,7 +175,7 @@
|
||||
else if(!src.throwing) //Dice was thrown and is coming to rest
|
||||
visible_message("<span class='notice'>[src] rolls to a stop, landing on [result]. [comment]</span>")
|
||||
|
||||
/obj/item/weapon/dice/d4/Crossed(mob/living/carbon/human/H)
|
||||
/obj/item/dice/d4/Crossed(mob/living/carbon/human/H)
|
||||
if(istype(H) && !H.shoes)
|
||||
if(PIERCEIMMUNE in H.dna.species.species_traits)
|
||||
return 0
|
||||
@@ -183,11 +183,11 @@
|
||||
H.apply_damage(4,BRUTE,(pick("l_leg", "r_leg")))
|
||||
H.Knockdown(60)
|
||||
|
||||
/obj/item/weapon/dice/update_icon()
|
||||
/obj/item/dice/update_icon()
|
||||
cut_overlays()
|
||||
add_overlay("[src.icon_state][src.result]")
|
||||
|
||||
/obj/item/weapon/dice/microwave_act(obj/machinery/microwave/M)
|
||||
/obj/item/dice/microwave_act(obj/machinery/microwave/M)
|
||||
if(can_be_rigged)
|
||||
rigged = result
|
||||
..(M)
|
||||
+370
-370
@@ -1,370 +1,370 @@
|
||||
/obj/item/weapon/dnainjector
|
||||
name = "\improper DNA injector"
|
||||
desc = "This injects the person with DNA."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "dnainjector"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "biotech=1"
|
||||
|
||||
var/damage_coeff = 1
|
||||
var/list/fields
|
||||
var/list/add_mutations = list()
|
||||
var/list/remove_mutations = list()
|
||||
|
||||
var/list/add_mutations_static = list()
|
||||
var/list/remove_mutations_static = list()
|
||||
|
||||
var/used = 0
|
||||
|
||||
/obj/item/weapon/dnainjector/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/item/weapon/dnainjector/proc/prepare()
|
||||
for(var/mut_key in add_mutations_static)
|
||||
add_mutations.Add(GLOB.mutations_list[mut_key])
|
||||
for(var/mut_key in remove_mutations_static)
|
||||
remove_mutations.Add(GLOB.mutations_list[mut_key])
|
||||
|
||||
/obj/item/weapon/dnainjector/proc/inject(mob/living/carbon/M, mob/user)
|
||||
prepare()
|
||||
|
||||
if(M.has_dna() && !(RADIMMUNE in M.dna.species.species_traits) && !(M.disabilities & NOCLONE))
|
||||
M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2))
|
||||
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
|
||||
for(var/datum/mutation/human/HM in remove_mutations)
|
||||
HM.force_lose(M)
|
||||
for(var/datum/mutation/human/HM in add_mutations)
|
||||
if(HM.name == RACEMUT)
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] <span class='danger'>(MONKEY)</span>")
|
||||
log_msg += " (MONKEY)"
|
||||
HM.force_give(M)
|
||||
if(fields)
|
||||
if(fields["name"] && fields["UE"] && fields["blood_type"])
|
||||
M.real_name = fields["name"]
|
||||
M.dna.unique_enzymes = fields["UE"]
|
||||
M.name = M.real_name
|
||||
M.dna.blood_type = fields["blood_type"]
|
||||
if(fields["UI"]) //UI+UE
|
||||
M.dna.uni_identity = merge_text(M.dna.uni_identity, fields["UI"])
|
||||
M.updateappearance(mutations_overlay_update=1)
|
||||
log_attack(log_msg)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/weapon/dnainjector/attack(mob/target, mob/user)
|
||||
if(!user.IsAdvancedToolUser())
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
if(used)
|
||||
to_chat(user, "<span class='warning'>This injector is used up!</span>")
|
||||
return
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/humantarget = target
|
||||
if (!humantarget.can_inject(user, 1))
|
||||
return
|
||||
add_logs(user, target, "attempted to inject", src)
|
||||
|
||||
if(target != user)
|
||||
target.visible_message("<span class='danger'>[user] is trying to inject [target] with [src]!</span>", "<span class='userdanger'>[user] is trying to inject [target] with [src]!</span>")
|
||||
if(!do_mob(user, target) || used)
|
||||
return
|
||||
target.visible_message("<span class='danger'>[user] injects [target] with the syringe with [src]!", \
|
||||
"<span class='userdanger'>[user] injects [target] with the syringe with [src]!")
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You inject yourself with [src].</span>")
|
||||
|
||||
add_logs(user, target, "injected", src)
|
||||
|
||||
if(!inject(target, user)) //Now we actually do the heavy lifting.
|
||||
to_chat(user, "<span class='notice'>It appears that [target] does not have compatible DNA.</span>")
|
||||
|
||||
used = 1
|
||||
icon_state = "dnainjector0"
|
||||
desc += " This one is used up."
|
||||
|
||||
|
||||
/obj/item/weapon/dnainjector/antihulk
|
||||
name = "\improper DNA injector (Anti-Hulk)"
|
||||
desc = "Cures green skin."
|
||||
remove_mutations_static = list(HULK)
|
||||
|
||||
/obj/item/weapon/dnainjector/hulkmut
|
||||
name = "\improper DNA injector (Hulk)"
|
||||
desc = "This will make you big and strong, but give you a bad skin condition."
|
||||
add_mutations_static = list(HULK)
|
||||
|
||||
/obj/item/weapon/dnainjector/xraymut
|
||||
name = "\improper DNA injector (Xray)"
|
||||
desc = "Finally you can see what the Captain does."
|
||||
add_mutations_static = list(XRAY)
|
||||
|
||||
/obj/item/weapon/dnainjector/antixray
|
||||
name = "\improper DNA injector (Anti-Xray)"
|
||||
desc = "It will make you see harder."
|
||||
remove_mutations_static = list(XRAY)
|
||||
|
||||
/////////////////////////////////////
|
||||
/obj/item/weapon/dnainjector/antiglasses
|
||||
name = "\improper DNA injector (Anti-Glasses)"
|
||||
desc = "Toss away those glasses!"
|
||||
remove_mutations_static = list(BADSIGHT)
|
||||
|
||||
/obj/item/weapon/dnainjector/glassesmut
|
||||
name = "\improper DNA injector (Glasses)"
|
||||
desc = "Will make you need dorkish glasses."
|
||||
add_mutations_static = list(BADSIGHT)
|
||||
|
||||
/obj/item/weapon/dnainjector/epimut
|
||||
name = "\improper DNA injector (Epi.)"
|
||||
desc = "Shake shake shake the room!"
|
||||
add_mutations_static = list(EPILEPSY)
|
||||
|
||||
/obj/item/weapon/dnainjector/antiepi
|
||||
name = "\improper DNA injector (Anti-Epi.)"
|
||||
desc = "Will fix you up from shaking the room."
|
||||
remove_mutations_static = list(EPILEPSY)
|
||||
////////////////////////////////////
|
||||
/obj/item/weapon/dnainjector/anticough
|
||||
name = "\improper DNA injector (Anti-Cough)"
|
||||
desc = "Will stop that aweful noise."
|
||||
remove_mutations_static = list(COUGH)
|
||||
|
||||
/obj/item/weapon/dnainjector/coughmut
|
||||
name = "\improper DNA injector (Cough)"
|
||||
desc = "Will bring forth a sound of horror from your throat."
|
||||
add_mutations_static = list(COUGH)
|
||||
|
||||
/obj/item/weapon/dnainjector/antidwarf
|
||||
name = "\improper DNA injector (Anti-Dwarfism)"
|
||||
desc = "Helps you grow big and strong."
|
||||
remove_mutations_static = list(DWARFISM)
|
||||
|
||||
/obj/item/weapon/dnainjector/dwarf
|
||||
name = "\improper DNA injector (Dwarfism)"
|
||||
desc = "It's a small world after all."
|
||||
add_mutations_static = list(DWARFISM)
|
||||
|
||||
/obj/item/weapon/dnainjector/clumsymut
|
||||
name = "\improper DNA injector (Clumsy)"
|
||||
desc = "Makes clown minions."
|
||||
add_mutations_static = list(CLOWNMUT)
|
||||
|
||||
/obj/item/weapon/dnainjector/anticlumsy
|
||||
name = "\improper DNA injector (Anti-Clumsy)"
|
||||
desc = "Apply this for Security Clown."
|
||||
remove_mutations_static = list(CLOWNMUT)
|
||||
|
||||
/obj/item/weapon/dnainjector/antitour
|
||||
name = "\improper DNA injector (Anti-Tour.)"
|
||||
desc = "Will cure tourrets."
|
||||
remove_mutations_static = list(TOURETTES)
|
||||
|
||||
/obj/item/weapon/dnainjector/tourmut
|
||||
name = "\improper DNA injector (Tour.)"
|
||||
desc = "Gives you a nasty case of Tourette's."
|
||||
add_mutations_static = list(TOURETTES)
|
||||
|
||||
/obj/item/weapon/dnainjector/stuttmut
|
||||
name = "\improper DNA injector (Stutt.)"
|
||||
desc = "Makes you s-s-stuttterrr"
|
||||
add_mutations_static = list(NERVOUS)
|
||||
|
||||
/obj/item/weapon/dnainjector/antistutt
|
||||
name = "\improper DNA injector (Anti-Stutt.)"
|
||||
desc = "Fixes that speaking impairment."
|
||||
remove_mutations_static = list(NERVOUS)
|
||||
|
||||
/obj/item/weapon/dnainjector/antifire
|
||||
name = "\improper DNA injector (Anti-Fire)"
|
||||
desc = "Cures fire."
|
||||
remove_mutations_static = list(COLDRES)
|
||||
|
||||
/obj/item/weapon/dnainjector/firemut
|
||||
name = "\improper DNA injector (Fire)"
|
||||
desc = "Gives you fire."
|
||||
add_mutations_static = list(COLDRES)
|
||||
|
||||
/obj/item/weapon/dnainjector/blindmut
|
||||
name = "\improper DNA injector (Blind)"
|
||||
desc = "Makes you not see anything."
|
||||
add_mutations_static = list(BLINDMUT)
|
||||
|
||||
/obj/item/weapon/dnainjector/antiblind
|
||||
name = "\improper DNA injector (Anti-Blind)"
|
||||
desc = "IT'S A MIRACLE!!!"
|
||||
remove_mutations_static = list(BLINDMUT)
|
||||
|
||||
/obj/item/weapon/dnainjector/antitele
|
||||
name = "\improper DNA injector (Anti-Tele.)"
|
||||
desc = "Will make you not able to control your mind."
|
||||
remove_mutations_static = list(TK)
|
||||
|
||||
/obj/item/weapon/dnainjector/telemut
|
||||
name = "\improper DNA injector (Tele.)"
|
||||
desc = "Super brain man!"
|
||||
add_mutations_static = list(TK)
|
||||
|
||||
/obj/item/weapon/dnainjector/telemut/darkbundle
|
||||
name = "\improper DNA injector"
|
||||
desc = "Good. Let the hate flow through you."
|
||||
|
||||
/obj/item/weapon/dnainjector/deafmut
|
||||
name = "\improper DNA injector (Deaf)"
|
||||
desc = "Sorry, what did you say?"
|
||||
add_mutations_static = list(DEAFMUT)
|
||||
|
||||
/obj/item/weapon/dnainjector/antideaf
|
||||
name = "\improper DNA injector (Anti-Deaf)"
|
||||
desc = "Will make you hear once more."
|
||||
remove_mutations_static = list(DEAFMUT)
|
||||
|
||||
/obj/item/weapon/dnainjector/h2m
|
||||
name = "\improper DNA injector (Human > Monkey)"
|
||||
desc = "Will make you a flea bag."
|
||||
add_mutations_static = list(RACEMUT)
|
||||
|
||||
/obj/item/weapon/dnainjector/m2h
|
||||
name = "\improper DNA injector (Monkey > Human)"
|
||||
desc = "Will make you...less hairy."
|
||||
remove_mutations_static = list(RACEMUT)
|
||||
|
||||
/obj/item/weapon/dnainjector/antichameleon
|
||||
name = "\improper DNA injector (Anti-Chameleon)"
|
||||
remove_mutations_static = list(CHAMELEON)
|
||||
|
||||
/obj/item/weapon/dnainjector/chameleonmut
|
||||
name = "\improper DNA injector (Chameleon)"
|
||||
add_mutations_static = list(CHAMELEON)
|
||||
|
||||
/obj/item/weapon/dnainjector/antiwacky
|
||||
name = "\improper DNA injector (Anti-Wacky)"
|
||||
remove_mutations_static = list(WACKY)
|
||||
|
||||
/obj/item/weapon/dnainjector/wackymut
|
||||
name = "\improper DNA injector (Wacky)"
|
||||
add_mutations_static = list(WACKY)
|
||||
|
||||
/obj/item/weapon/dnainjector/antimute
|
||||
name = "\improper DNA injector (Anti-Mute)"
|
||||
remove_mutations_static = list(MUT_MUTE)
|
||||
|
||||
/obj/item/weapon/dnainjector/mutemut
|
||||
name = "\improper DNA injector (Mute)"
|
||||
add_mutations_static = list(MUT_MUTE)
|
||||
|
||||
/obj/item/weapon/dnainjector/antismile
|
||||
name = "\improper DNA injector (Anti-Smile)"
|
||||
remove_mutations_static = list(SMILE)
|
||||
|
||||
/obj/item/weapon/dnainjector/smilemut
|
||||
name = "\improper DNA injector (Smile)"
|
||||
add_mutations_static = list(SMILE)
|
||||
|
||||
/obj/item/weapon/dnainjector/unintelligablemut
|
||||
name = "\improper DNA injector (Unintelligable)"
|
||||
add_mutations_static = list(UNINTELLIGABLE)
|
||||
|
||||
/obj/item/weapon/dnainjector/antiunintelligable
|
||||
name = "\improper DNA injector (Anti-Unintelligable)"
|
||||
remove_mutations_static = list(UNINTELLIGABLE)
|
||||
|
||||
/obj/item/weapon/dnainjector/swedishmut
|
||||
name = "\improper DNA injector (Swedish)"
|
||||
add_mutations_static = list(SWEDISH)
|
||||
|
||||
/obj/item/weapon/dnainjector/antiswedish
|
||||
name = "\improper DNA injector (Anti-Swedish)"
|
||||
remove_mutations_static = list(SWEDISH)
|
||||
|
||||
/obj/item/weapon/dnainjector/chavmut
|
||||
name = "\improper DNA injector (Chav)"
|
||||
add_mutations_static = list(CHAV)
|
||||
|
||||
/obj/item/weapon/dnainjector/antichav
|
||||
name = "\improper DNA injector (Anti-Chav)"
|
||||
remove_mutations_static = list(CHAV)
|
||||
|
||||
/obj/item/weapon/dnainjector/elvismut
|
||||
name = "\improper DNA injector (Elvis)"
|
||||
add_mutations_static = list(ELVIS)
|
||||
|
||||
/obj/item/weapon/dnainjector/antielvis
|
||||
name = "\improper DNA injector (Anti-Elvis)"
|
||||
remove_mutations_static = list(ELVIS)
|
||||
|
||||
/obj/item/weapon/dnainjector/lasereyesmut
|
||||
name = "\improper DNA injector (Laser Eyes)"
|
||||
add_mutations_static = list(LASEREYES)
|
||||
|
||||
/obj/item/weapon/dnainjector/antilasereyes
|
||||
name = "\improper DNA injector (Anti-Laser Eyes)"
|
||||
remove_mutations_static = list(LASEREYES)
|
||||
|
||||
/obj/item/weapon/dnainjector/timed
|
||||
var/duration = 600
|
||||
|
||||
/obj/item/weapon/dnainjector/timed/inject(mob/living/carbon/M, mob/user)
|
||||
prepare()
|
||||
if(M.stat == DEAD) //prevents dead people from having their DNA changed
|
||||
to_chat(user, "<span class='notice'>You can't modify [M]'s DNA while [M.p_theyre()] dead.</span>")
|
||||
return FALSE
|
||||
|
||||
if(M.has_dna() && !(M.disabilities & NOCLONE))
|
||||
M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2))
|
||||
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
|
||||
var/endtime = world.time+duration
|
||||
for(var/datum/mutation/human/HM in remove_mutations)
|
||||
if(HM.name == RACEMUT)
|
||||
if(ishuman(M))
|
||||
continue
|
||||
M = HM.force_lose(M)
|
||||
else
|
||||
HM.force_lose(M)
|
||||
for(var/datum/mutation/human/HM in add_mutations)
|
||||
if((HM in M.dna.mutations) && !(M.dna.temporary_mutations[HM.name]))
|
||||
continue //Skip permanent mutations we already have.
|
||||
if(HM.name == RACEMUT && ishuman(M))
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] <span class='danger'>(MONKEY)</span>")
|
||||
log_msg += " (MONKEY)"
|
||||
M = HM.force_give(M)
|
||||
else
|
||||
HM.force_give(M)
|
||||
M.dna.temporary_mutations[HM.name] = endtime
|
||||
if(fields)
|
||||
if(fields["name"] && fields["UE"] && fields["blood_type"])
|
||||
if(!M.dna.previous["name"])
|
||||
M.dna.previous["name"] = M.real_name
|
||||
if(!M.dna.previous["UE"])
|
||||
M.dna.previous["UE"] = M.dna.unique_enzymes
|
||||
if(!M.dna.previous["blood_type"])
|
||||
M.dna.previous["blood_type"] = M.dna.blood_type
|
||||
M.real_name = fields["name"]
|
||||
M.dna.unique_enzymes = fields["UE"]
|
||||
M.name = M.real_name
|
||||
M.dna.blood_type = fields["blood_type"]
|
||||
M.dna.temporary_mutations[UE_CHANGED] = endtime
|
||||
if(fields["UI"]) //UI+UE
|
||||
if(!M.dna.previous["UI"])
|
||||
M.dna.previous["UI"] = M.dna.uni_identity
|
||||
M.dna.uni_identity = merge_text(M.dna.uni_identity, fields["UI"])
|
||||
M.updateappearance(mutations_overlay_update=1)
|
||||
M.dna.temporary_mutations[UI_CHANGED] = endtime
|
||||
log_attack(log_msg)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/obj/item/weapon/dnainjector/timed/hulk
|
||||
name = "\improper DNA injector (Hulk)"
|
||||
desc = "This will make you big and strong, but give you a bad skin condition."
|
||||
add_mutations_static = list(HULK)
|
||||
|
||||
/obj/item/weapon/dnainjector/timed/h2m
|
||||
name = "\improper DNA injector (Human > Monkey)"
|
||||
desc = "Will make you a flea bag."
|
||||
add_mutations_static = list(RACEMUT)
|
||||
/obj/item/dnainjector
|
||||
name = "\improper DNA injector"
|
||||
desc = "This injects the person with DNA."
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "dnainjector"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
throw_speed = 3
|
||||
throw_range = 5
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
origin_tech = "biotech=1"
|
||||
|
||||
var/damage_coeff = 1
|
||||
var/list/fields
|
||||
var/list/add_mutations = list()
|
||||
var/list/remove_mutations = list()
|
||||
|
||||
var/list/add_mutations_static = list()
|
||||
var/list/remove_mutations_static = list()
|
||||
|
||||
var/used = 0
|
||||
|
||||
/obj/item/dnainjector/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/item/dnainjector/proc/prepare()
|
||||
for(var/mut_key in add_mutations_static)
|
||||
add_mutations.Add(GLOB.mutations_list[mut_key])
|
||||
for(var/mut_key in remove_mutations_static)
|
||||
remove_mutations.Add(GLOB.mutations_list[mut_key])
|
||||
|
||||
/obj/item/dnainjector/proc/inject(mob/living/carbon/M, mob/user)
|
||||
prepare()
|
||||
|
||||
if(M.has_dna() && !(RADIMMUNE in M.dna.species.species_traits) && !(M.disabilities & NOCLONE))
|
||||
M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2))
|
||||
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
|
||||
for(var/datum/mutation/human/HM in remove_mutations)
|
||||
HM.force_lose(M)
|
||||
for(var/datum/mutation/human/HM in add_mutations)
|
||||
if(HM.name == RACEMUT)
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] <span class='danger'>(MONKEY)</span>")
|
||||
log_msg += " (MONKEY)"
|
||||
HM.force_give(M)
|
||||
if(fields)
|
||||
if(fields["name"] && fields["UE"] && fields["blood_type"])
|
||||
M.real_name = fields["name"]
|
||||
M.dna.unique_enzymes = fields["UE"]
|
||||
M.name = M.real_name
|
||||
M.dna.blood_type = fields["blood_type"]
|
||||
if(fields["UI"]) //UI+UE
|
||||
M.dna.uni_identity = merge_text(M.dna.uni_identity, fields["UI"])
|
||||
M.updateappearance(mutations_overlay_update=1)
|
||||
log_attack(log_msg)
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/dnainjector/attack(mob/target, mob/user)
|
||||
if(!user.IsAdvancedToolUser())
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
if(used)
|
||||
to_chat(user, "<span class='warning'>This injector is used up!</span>")
|
||||
return
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/humantarget = target
|
||||
if (!humantarget.can_inject(user, 1))
|
||||
return
|
||||
add_logs(user, target, "attempted to inject", src)
|
||||
|
||||
if(target != user)
|
||||
target.visible_message("<span class='danger'>[user] is trying to inject [target] with [src]!</span>", "<span class='userdanger'>[user] is trying to inject [target] with [src]!</span>")
|
||||
if(!do_mob(user, target) || used)
|
||||
return
|
||||
target.visible_message("<span class='danger'>[user] injects [target] with the syringe with [src]!", \
|
||||
"<span class='userdanger'>[user] injects [target] with the syringe with [src]!")
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You inject yourself with [src].</span>")
|
||||
|
||||
add_logs(user, target, "injected", src)
|
||||
|
||||
if(!inject(target, user)) //Now we actually do the heavy lifting.
|
||||
to_chat(user, "<span class='notice'>It appears that [target] does not have compatible DNA.</span>")
|
||||
|
||||
used = 1
|
||||
icon_state = "dnainjector0"
|
||||
desc += " This one is used up."
|
||||
|
||||
|
||||
/obj/item/dnainjector/antihulk
|
||||
name = "\improper DNA injector (Anti-Hulk)"
|
||||
desc = "Cures green skin."
|
||||
remove_mutations_static = list(HULK)
|
||||
|
||||
/obj/item/dnainjector/hulkmut
|
||||
name = "\improper DNA injector (Hulk)"
|
||||
desc = "This will make you big and strong, but give you a bad skin condition."
|
||||
add_mutations_static = list(HULK)
|
||||
|
||||
/obj/item/dnainjector/xraymut
|
||||
name = "\improper DNA injector (Xray)"
|
||||
desc = "Finally you can see what the Captain does."
|
||||
add_mutations_static = list(XRAY)
|
||||
|
||||
/obj/item/dnainjector/antixray
|
||||
name = "\improper DNA injector (Anti-Xray)"
|
||||
desc = "It will make you see harder."
|
||||
remove_mutations_static = list(XRAY)
|
||||
|
||||
/////////////////////////////////////
|
||||
/obj/item/dnainjector/antiglasses
|
||||
name = "\improper DNA injector (Anti-Glasses)"
|
||||
desc = "Toss away those glasses!"
|
||||
remove_mutations_static = list(BADSIGHT)
|
||||
|
||||
/obj/item/dnainjector/glassesmut
|
||||
name = "\improper DNA injector (Glasses)"
|
||||
desc = "Will make you need dorkish glasses."
|
||||
add_mutations_static = list(BADSIGHT)
|
||||
|
||||
/obj/item/dnainjector/epimut
|
||||
name = "\improper DNA injector (Epi.)"
|
||||
desc = "Shake shake shake the room!"
|
||||
add_mutations_static = list(EPILEPSY)
|
||||
|
||||
/obj/item/dnainjector/antiepi
|
||||
name = "\improper DNA injector (Anti-Epi.)"
|
||||
desc = "Will fix you up from shaking the room."
|
||||
remove_mutations_static = list(EPILEPSY)
|
||||
////////////////////////////////////
|
||||
/obj/item/dnainjector/anticough
|
||||
name = "\improper DNA injector (Anti-Cough)"
|
||||
desc = "Will stop that aweful noise."
|
||||
remove_mutations_static = list(COUGH)
|
||||
|
||||
/obj/item/dnainjector/coughmut
|
||||
name = "\improper DNA injector (Cough)"
|
||||
desc = "Will bring forth a sound of horror from your throat."
|
||||
add_mutations_static = list(COUGH)
|
||||
|
||||
/obj/item/dnainjector/antidwarf
|
||||
name = "\improper DNA injector (Anti-Dwarfism)"
|
||||
desc = "Helps you grow big and strong."
|
||||
remove_mutations_static = list(DWARFISM)
|
||||
|
||||
/obj/item/dnainjector/dwarf
|
||||
name = "\improper DNA injector (Dwarfism)"
|
||||
desc = "It's a small world after all."
|
||||
add_mutations_static = list(DWARFISM)
|
||||
|
||||
/obj/item/dnainjector/clumsymut
|
||||
name = "\improper DNA injector (Clumsy)"
|
||||
desc = "Makes clown minions."
|
||||
add_mutations_static = list(CLOWNMUT)
|
||||
|
||||
/obj/item/dnainjector/anticlumsy
|
||||
name = "\improper DNA injector (Anti-Clumsy)"
|
||||
desc = "Apply this for Security Clown."
|
||||
remove_mutations_static = list(CLOWNMUT)
|
||||
|
||||
/obj/item/dnainjector/antitour
|
||||
name = "\improper DNA injector (Anti-Tour.)"
|
||||
desc = "Will cure tourrets."
|
||||
remove_mutations_static = list(TOURETTES)
|
||||
|
||||
/obj/item/dnainjector/tourmut
|
||||
name = "\improper DNA injector (Tour.)"
|
||||
desc = "Gives you a nasty case of Tourette's."
|
||||
add_mutations_static = list(TOURETTES)
|
||||
|
||||
/obj/item/dnainjector/stuttmut
|
||||
name = "\improper DNA injector (Stutt.)"
|
||||
desc = "Makes you s-s-stuttterrr"
|
||||
add_mutations_static = list(NERVOUS)
|
||||
|
||||
/obj/item/dnainjector/antistutt
|
||||
name = "\improper DNA injector (Anti-Stutt.)"
|
||||
desc = "Fixes that speaking impairment."
|
||||
remove_mutations_static = list(NERVOUS)
|
||||
|
||||
/obj/item/dnainjector/antifire
|
||||
name = "\improper DNA injector (Anti-Fire)"
|
||||
desc = "Cures fire."
|
||||
remove_mutations_static = list(COLDRES)
|
||||
|
||||
/obj/item/dnainjector/firemut
|
||||
name = "\improper DNA injector (Fire)"
|
||||
desc = "Gives you fire."
|
||||
add_mutations_static = list(COLDRES)
|
||||
|
||||
/obj/item/dnainjector/blindmut
|
||||
name = "\improper DNA injector (Blind)"
|
||||
desc = "Makes you not see anything."
|
||||
add_mutations_static = list(BLINDMUT)
|
||||
|
||||
/obj/item/dnainjector/antiblind
|
||||
name = "\improper DNA injector (Anti-Blind)"
|
||||
desc = "IT'S A MIRACLE!!!"
|
||||
remove_mutations_static = list(BLINDMUT)
|
||||
|
||||
/obj/item/dnainjector/antitele
|
||||
name = "\improper DNA injector (Anti-Tele.)"
|
||||
desc = "Will make you not able to control your mind."
|
||||
remove_mutations_static = list(TK)
|
||||
|
||||
/obj/item/dnainjector/telemut
|
||||
name = "\improper DNA injector (Tele.)"
|
||||
desc = "Super brain man!"
|
||||
add_mutations_static = list(TK)
|
||||
|
||||
/obj/item/dnainjector/telemut/darkbundle
|
||||
name = "\improper DNA injector"
|
||||
desc = "Good. Let the hate flow through you."
|
||||
|
||||
/obj/item/dnainjector/deafmut
|
||||
name = "\improper DNA injector (Deaf)"
|
||||
desc = "Sorry, what did you say?"
|
||||
add_mutations_static = list(DEAFMUT)
|
||||
|
||||
/obj/item/dnainjector/antideaf
|
||||
name = "\improper DNA injector (Anti-Deaf)"
|
||||
desc = "Will make you hear once more."
|
||||
remove_mutations_static = list(DEAFMUT)
|
||||
|
||||
/obj/item/dnainjector/h2m
|
||||
name = "\improper DNA injector (Human > Monkey)"
|
||||
desc = "Will make you a flea bag."
|
||||
add_mutations_static = list(RACEMUT)
|
||||
|
||||
/obj/item/dnainjector/m2h
|
||||
name = "\improper DNA injector (Monkey > Human)"
|
||||
desc = "Will make you...less hairy."
|
||||
remove_mutations_static = list(RACEMUT)
|
||||
|
||||
/obj/item/dnainjector/antichameleon
|
||||
name = "\improper DNA injector (Anti-Chameleon)"
|
||||
remove_mutations_static = list(CHAMELEON)
|
||||
|
||||
/obj/item/dnainjector/chameleonmut
|
||||
name = "\improper DNA injector (Chameleon)"
|
||||
add_mutations_static = list(CHAMELEON)
|
||||
|
||||
/obj/item/dnainjector/antiwacky
|
||||
name = "\improper DNA injector (Anti-Wacky)"
|
||||
remove_mutations_static = list(WACKY)
|
||||
|
||||
/obj/item/dnainjector/wackymut
|
||||
name = "\improper DNA injector (Wacky)"
|
||||
add_mutations_static = list(WACKY)
|
||||
|
||||
/obj/item/dnainjector/antimute
|
||||
name = "\improper DNA injector (Anti-Mute)"
|
||||
remove_mutations_static = list(MUT_MUTE)
|
||||
|
||||
/obj/item/dnainjector/mutemut
|
||||
name = "\improper DNA injector (Mute)"
|
||||
add_mutations_static = list(MUT_MUTE)
|
||||
|
||||
/obj/item/dnainjector/antismile
|
||||
name = "\improper DNA injector (Anti-Smile)"
|
||||
remove_mutations_static = list(SMILE)
|
||||
|
||||
/obj/item/dnainjector/smilemut
|
||||
name = "\improper DNA injector (Smile)"
|
||||
add_mutations_static = list(SMILE)
|
||||
|
||||
/obj/item/dnainjector/unintelligablemut
|
||||
name = "\improper DNA injector (Unintelligable)"
|
||||
add_mutations_static = list(UNINTELLIGABLE)
|
||||
|
||||
/obj/item/dnainjector/antiunintelligable
|
||||
name = "\improper DNA injector (Anti-Unintelligable)"
|
||||
remove_mutations_static = list(UNINTELLIGABLE)
|
||||
|
||||
/obj/item/dnainjector/swedishmut
|
||||
name = "\improper DNA injector (Swedish)"
|
||||
add_mutations_static = list(SWEDISH)
|
||||
|
||||
/obj/item/dnainjector/antiswedish
|
||||
name = "\improper DNA injector (Anti-Swedish)"
|
||||
remove_mutations_static = list(SWEDISH)
|
||||
|
||||
/obj/item/dnainjector/chavmut
|
||||
name = "\improper DNA injector (Chav)"
|
||||
add_mutations_static = list(CHAV)
|
||||
|
||||
/obj/item/dnainjector/antichav
|
||||
name = "\improper DNA injector (Anti-Chav)"
|
||||
remove_mutations_static = list(CHAV)
|
||||
|
||||
/obj/item/dnainjector/elvismut
|
||||
name = "\improper DNA injector (Elvis)"
|
||||
add_mutations_static = list(ELVIS)
|
||||
|
||||
/obj/item/dnainjector/antielvis
|
||||
name = "\improper DNA injector (Anti-Elvis)"
|
||||
remove_mutations_static = list(ELVIS)
|
||||
|
||||
/obj/item/dnainjector/lasereyesmut
|
||||
name = "\improper DNA injector (Laser Eyes)"
|
||||
add_mutations_static = list(LASEREYES)
|
||||
|
||||
/obj/item/dnainjector/antilasereyes
|
||||
name = "\improper DNA injector (Anti-Laser Eyes)"
|
||||
remove_mutations_static = list(LASEREYES)
|
||||
|
||||
/obj/item/dnainjector/timed
|
||||
var/duration = 600
|
||||
|
||||
/obj/item/dnainjector/timed/inject(mob/living/carbon/M, mob/user)
|
||||
prepare()
|
||||
if(M.stat == DEAD) //prevents dead people from having their DNA changed
|
||||
to_chat(user, "<span class='notice'>You can't modify [M]'s DNA while [M.p_theyre()] dead.</span>")
|
||||
return FALSE
|
||||
|
||||
if(M.has_dna() && !(M.disabilities & NOCLONE))
|
||||
M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2))
|
||||
var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]"
|
||||
var/endtime = world.time+duration
|
||||
for(var/datum/mutation/human/HM in remove_mutations)
|
||||
if(HM.name == RACEMUT)
|
||||
if(ishuman(M))
|
||||
continue
|
||||
M = HM.force_lose(M)
|
||||
else
|
||||
HM.force_lose(M)
|
||||
for(var/datum/mutation/human/HM in add_mutations)
|
||||
if((HM in M.dna.mutations) && !(M.dna.temporary_mutations[HM.name]))
|
||||
continue //Skip permanent mutations we already have.
|
||||
if(HM.name == RACEMUT && ishuman(M))
|
||||
message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] <span class='danger'>(MONKEY)</span>")
|
||||
log_msg += " (MONKEY)"
|
||||
M = HM.force_give(M)
|
||||
else
|
||||
HM.force_give(M)
|
||||
M.dna.temporary_mutations[HM.name] = endtime
|
||||
if(fields)
|
||||
if(fields["name"] && fields["UE"] && fields["blood_type"])
|
||||
if(!M.dna.previous["name"])
|
||||
M.dna.previous["name"] = M.real_name
|
||||
if(!M.dna.previous["UE"])
|
||||
M.dna.previous["UE"] = M.dna.unique_enzymes
|
||||
if(!M.dna.previous["blood_type"])
|
||||
M.dna.previous["blood_type"] = M.dna.blood_type
|
||||
M.real_name = fields["name"]
|
||||
M.dna.unique_enzymes = fields["UE"]
|
||||
M.name = M.real_name
|
||||
M.dna.blood_type = fields["blood_type"]
|
||||
M.dna.temporary_mutations[UE_CHANGED] = endtime
|
||||
if(fields["UI"]) //UI+UE
|
||||
if(!M.dna.previous["UI"])
|
||||
M.dna.previous["UI"] = M.dna.uni_identity
|
||||
M.dna.uni_identity = merge_text(M.dna.uni_identity, fields["UI"])
|
||||
M.updateappearance(mutations_overlay_update=1)
|
||||
M.dna.temporary_mutations[UI_CHANGED] = endtime
|
||||
log_attack(log_msg)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/obj/item/dnainjector/timed/hulk
|
||||
name = "\improper DNA injector (Hulk)"
|
||||
desc = "This will make you big and strong, but give you a bad skin condition."
|
||||
add_mutations_static = list(HULK)
|
||||
|
||||
/obj/item/dnainjector/timed/h2m
|
||||
name = "\improper DNA injector (Human > Monkey)"
|
||||
desc = "Will make you a flea bag."
|
||||
add_mutations_static = list(RACEMUT)
|
||||
@@ -91,7 +91,7 @@
|
||||
// except it actually ASKS THE DEAD (wooooo)
|
||||
|
||||
/obj/item/toy/eightball/haunted
|
||||
flags = HEAR
|
||||
flags_1 = HEAR_1
|
||||
var/last_message
|
||||
var/selected_message
|
||||
var/list/votes
|
||||
|
||||
+14
-14
@@ -1,11 +1,11 @@
|
||||
/obj/item/weapon/extinguisher
|
||||
/obj/item/extinguisher
|
||||
name = "fire extinguisher"
|
||||
desc = "A traditional red fire extinguisher."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "fire_extinguisher0"
|
||||
item_state = "fire_extinguisher"
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
throwforce = 10
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
throw_speed = 2
|
||||
@@ -24,13 +24,13 @@
|
||||
var/precision = 0 //By default, turfs picked from a spray are random, set to 1 to make it always have at least one water effect per row
|
||||
var/cooling_power = 2 //Sets the cooling_temperature of the water reagent datum inside of the extinguisher when it is refilled
|
||||
|
||||
/obj/item/weapon/extinguisher/mini
|
||||
/obj/item/extinguisher/mini
|
||||
name = "pocket fire extinguisher"
|
||||
desc = "A light and compact fibreglass-framed model fire extinguisher."
|
||||
icon_state = "miniFE0"
|
||||
item_state = "miniFE"
|
||||
hitsound = null //it is much lighter, after all.
|
||||
flags = null //doesn't CONDUCT
|
||||
flags_1 = null //doesn't CONDUCT_1
|
||||
throwforce = 2
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
force = 3
|
||||
@@ -39,39 +39,39 @@
|
||||
sprite_name = "miniFE"
|
||||
dog_fashion = null
|
||||
|
||||
/obj/item/weapon/extinguisher/New()
|
||||
/obj/item/extinguisher/New()
|
||||
..()
|
||||
create_reagents(max_water)
|
||||
reagents.add_reagent("water", max_water)
|
||||
|
||||
/obj/item/weapon/extinguisher/attack_self(mob/user)
|
||||
/obj/item/extinguisher/attack_self(mob/user)
|
||||
safety = !safety
|
||||
src.icon_state = "[sprite_name][!safety]"
|
||||
src.desc = "The safety is [safety ? "on" : "off"]."
|
||||
to_chat(user, "The safety is [safety ? "on" : "off"].")
|
||||
return
|
||||
|
||||
/obj/item/weapon/extinguisher/attack(mob/M, mob/user)
|
||||
/obj/item/extinguisher/attack(mob/M, mob/user)
|
||||
if(user.a_intent == INTENT_HELP && !safety) //If we're on help intent and going to spray people, don't bash them.
|
||||
return FALSE
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/extinguisher/attack_obj(obj/O, mob/living/user)
|
||||
/obj/item/extinguisher/attack_obj(obj/O, mob/living/user)
|
||||
if(AttemptRefill(O, user))
|
||||
refilling = TRUE
|
||||
return FALSE
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/extinguisher/examine(mob/user)
|
||||
/obj/item/extinguisher/examine(mob/user)
|
||||
..()
|
||||
if(reagents.total_volume)
|
||||
to_chat(user, "It contains [round(reagents.total_volume)] units.")
|
||||
else
|
||||
to_chat(user, "It is empty.")
|
||||
|
||||
/obj/item/weapon/extinguisher/proc/AttemptRefill(atom/target, mob/user)
|
||||
/obj/item/extinguisher/proc/AttemptRefill(atom/target, mob/user)
|
||||
if(istype(target, /obj/structure/reagent_dispensers/watertank) && target.Adjacent(user))
|
||||
var/safety_save = safety
|
||||
safety = TRUE
|
||||
@@ -93,7 +93,7 @@
|
||||
else
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/extinguisher/afterattack(atom/target, mob/user , flag)
|
||||
/obj/item/extinguisher/afterattack(atom/target, mob/user , flag)
|
||||
// Make it so the extinguisher doesn't spray yourself when you click your inventory items
|
||||
if (target.loc == user)
|
||||
return
|
||||
@@ -173,10 +173,10 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/extinguisher/AltClick(mob/user)
|
||||
/obj/item/extinguisher/AltClick(mob/user)
|
||||
EmptyExtinguisher(user)
|
||||
|
||||
/obj/item/weapon/extinguisher/proc/EmptyExtinguisher(var/mob/user)
|
||||
/obj/item/extinguisher/proc/EmptyExtinguisher(var/mob/user)
|
||||
if(loc == user && reagents.total_volume)
|
||||
reagents.clear_reagents()
|
||||
|
||||
Executable → Regular
+27
-27
@@ -1,4 +1,4 @@
|
||||
/obj/item/weapon/flamethrower
|
||||
/obj/item/flamethrower
|
||||
name = "flamethrower"
|
||||
desc = "You are a firestarter!"
|
||||
icon = 'icons/obj/flamethrower.dmi'
|
||||
@@ -6,7 +6,7 @@
|
||||
item_state = "flamethrower_0"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/flamethrower_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/flamethrower_righthand.dmi'
|
||||
flags = CONDUCT
|
||||
flags_1 = CONDUCT_1
|
||||
force = 3
|
||||
throwforce = 10
|
||||
throw_speed = 1
|
||||
@@ -18,9 +18,9 @@
|
||||
var/status = FALSE
|
||||
var/lit = FALSE //on or off
|
||||
var/operating = FALSE//cooldown
|
||||
var/obj/item/weapon/weldingtool/weldtool = null
|
||||
var/obj/item/weldingtool/weldtool = null
|
||||
var/obj/item/device/assembly/igniter/igniter = null
|
||||
var/obj/item/weapon/tank/internals/plasma/ptank = null
|
||||
var/obj/item/tank/internals/plasma/ptank = null
|
||||
var/warned_admins = FALSE //for the message_admins() when lit
|
||||
//variables for prebuilt flamethrowers
|
||||
var/create_full = FALSE
|
||||
@@ -28,7 +28,7 @@
|
||||
var/igniter_type = /obj/item/device/assembly/igniter
|
||||
trigger_guard = TRIGGER_GUARD_NORMAL
|
||||
|
||||
/obj/item/weapon/flamethrower/Destroy()
|
||||
/obj/item/flamethrower/Destroy()
|
||||
if(weldtool)
|
||||
qdel(weldtool)
|
||||
if(igniter)
|
||||
@@ -37,7 +37,7 @@
|
||||
qdel(ptank)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/flamethrower/process()
|
||||
/obj/item/flamethrower/process()
|
||||
if(!lit || !igniter)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return null
|
||||
@@ -50,7 +50,7 @@
|
||||
igniter.flamethrower_process(location)
|
||||
|
||||
|
||||
/obj/item/weapon/flamethrower/update_icon()
|
||||
/obj/item/flamethrower/update_icon()
|
||||
cut_overlays()
|
||||
if(igniter)
|
||||
add_overlay("+igniter[status]")
|
||||
@@ -66,7 +66,7 @@
|
||||
M.update_inv_hands()
|
||||
return
|
||||
|
||||
/obj/item/weapon/flamethrower/afterattack(atom/target, mob/user, flag)
|
||||
/obj/item/flamethrower/afterattack(atom/target, mob/user, flag)
|
||||
if(flag)
|
||||
return // too close
|
||||
if(ishuman(user))
|
||||
@@ -79,8 +79,8 @@
|
||||
add_logs(user, target, "flamethrowered", src)
|
||||
flame_turf(turflist)
|
||||
|
||||
/obj/item/weapon/flamethrower/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/wrench) && !status)//Taking this apart
|
||||
/obj/item/flamethrower/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/wrench) && !status)//Taking this apart
|
||||
var/turf/T = get_turf(src)
|
||||
if(weldtool)
|
||||
weldtool.forceMove(T)
|
||||
@@ -95,7 +95,7 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/screwdriver) && igniter && !lit)
|
||||
else if(istype(W, /obj/item/screwdriver) && igniter && !lit)
|
||||
status = !status
|
||||
to_chat(user, "<span class='notice'>[igniter] is now [status ? "secured" : "unsecured"]!</span>")
|
||||
update_icon()
|
||||
@@ -113,7 +113,7 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/weapon/tank/internals/plasma))
|
||||
else if(istype(W, /obj/item/tank/internals/plasma))
|
||||
if(ptank)
|
||||
if(user.transferItemToLoc(W,src))
|
||||
ptank.forceMove(get_turf(src))
|
||||
@@ -132,21 +132,21 @@
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/flamethrower/attack_self(mob/user)
|
||||
/obj/item/flamethrower/attack_self(mob/user)
|
||||
toggle_igniter(user)
|
||||
|
||||
/obj/item/weapon/flamethrower/AltClick(mob/user)
|
||||
/obj/item/flamethrower/AltClick(mob/user)
|
||||
if(ptank && isliving(user) && !user.incapacitated() && Adjacent(user))
|
||||
user.put_in_hands(ptank)
|
||||
ptank = null
|
||||
to_chat(user, "<span class='notice'>You remove the plasma tank from [src]!</span>")
|
||||
|
||||
/obj/item/weapon/flamethrower/examine(mob/user)
|
||||
/obj/item/flamethrower/examine(mob/user)
|
||||
..()
|
||||
if(ptank)
|
||||
to_chat(user, "<span class='notice'>\The [src] has \the [ptank] attached. Alt-click to remove it.</span>")
|
||||
|
||||
/obj/item/weapon/flamethrower/proc/toggle_igniter(mob/user)
|
||||
/obj/item/flamethrower/proc/toggle_igniter(mob/user)
|
||||
if(!ptank)
|
||||
to_chat(user, "<span class='notice'>Attach a plasma tank first!</span>")
|
||||
return
|
||||
@@ -164,9 +164,9 @@
|
||||
STOP_PROCESSING(SSobj,src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/flamethrower/CheckParts(list/parts_list)
|
||||
/obj/item/flamethrower/CheckParts(list/parts_list)
|
||||
..()
|
||||
weldtool = locate(/obj/item/weapon/weldingtool) in contents
|
||||
weldtool = locate(/obj/item/weldingtool) in contents
|
||||
igniter = locate(/obj/item/device/assembly/igniter) in contents
|
||||
weldtool.status = FALSE
|
||||
igniter.secured = FALSE
|
||||
@@ -174,7 +174,7 @@
|
||||
update_icon()
|
||||
|
||||
//Called from turf.dm turf/dblclick
|
||||
/obj/item/weapon/flamethrower/proc/flame_turf(turflist)
|
||||
/obj/item/flamethrower/proc/flame_turf(turflist)
|
||||
if(!lit || operating)
|
||||
return
|
||||
operating = TRUE
|
||||
@@ -197,7 +197,7 @@
|
||||
attack_self(M)
|
||||
|
||||
|
||||
/obj/item/weapon/flamethrower/proc/default_ignite(turf/target, release_amount = 0.05)
|
||||
/obj/item/flamethrower/proc/default_ignite(turf/target, release_amount = 0.05)
|
||||
//TODO: DEFERRED Consider checking to make sure tank pressure is high enough before doing this...
|
||||
//Transfer 5% of current tank air contents to turf
|
||||
var/datum/gas_mixture/air_transfer = ptank.air_contents.remove_ratio(release_amount)
|
||||
@@ -210,27 +210,27 @@
|
||||
SSair.add_to_active(target, 0)
|
||||
|
||||
|
||||
/obj/item/weapon/flamethrower/Initialize(mapload)
|
||||
/obj/item/flamethrower/Initialize(mapload)
|
||||
. = ..()
|
||||
if(create_full)
|
||||
if(!weldtool)
|
||||
weldtool = new /obj/item/weapon/weldingtool(src)
|
||||
weldtool = new /obj/item/weldingtool(src)
|
||||
weldtool.status = FALSE
|
||||
if(!igniter)
|
||||
igniter = new igniter_type(src)
|
||||
igniter.secured = FALSE
|
||||
status = TRUE
|
||||
if(create_with_tank)
|
||||
ptank = new /obj/item/weapon/tank/internals/plasma/full(src)
|
||||
ptank = new /obj/item/tank/internals/plasma/full(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/flamethrower/full/tank
|
||||
/obj/item/flamethrower/full/tank
|
||||
create_full = TRUE
|
||||
|
||||
/obj/item/weapon/flamethrower/full/tank
|
||||
/obj/item/flamethrower/full/tank
|
||||
create_with_tank = TRUE
|
||||
|
||||
/obj/item/weapon/flamethrower/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
/obj/item/flamethrower/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
var/obj/item/projectile/P = hitby
|
||||
if(damage && attack_type == PROJECTILE_ATTACK && P.damage_type != STAMINA && prob(15))
|
||||
owner.visible_message("<span class='danger'>[attack_text] hits the fueltank on [owner]'s [src], rupturing it! What a shot!</span>")
|
||||
@@ -246,5 +246,5 @@
|
||||
/obj/item/device/assembly/igniter/cold/flamethrower_process(turf/open/location)
|
||||
return
|
||||
|
||||
/obj/item/device/assembly/igniter/proc/ignite_turf(obj/item/weapon/flamethrower/F,turf/open/location,release_amount = 0.05)
|
||||
/obj/item/device/assembly/igniter/proc/ignite_turf(obj/item/flamethrower/F,turf/open/location,release_amount = 0.05)
|
||||
F.default_ignite(location,release_amount)
|
||||
@@ -7,7 +7,7 @@
|
||||
/*
|
||||
* Gifts
|
||||
*/
|
||||
/obj/item/weapon/a_gift
|
||||
/obj/item/a_gift
|
||||
name = "gift"
|
||||
desc = "PRESENTS!!!! eek!"
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
@@ -15,48 +15,48 @@
|
||||
item_state = "gift1"
|
||||
resistance_flags = FLAMMABLE
|
||||
|
||||
/obj/item/weapon/a_gift/New()
|
||||
/obj/item/a_gift/New()
|
||||
..()
|
||||
pixel_x = rand(-10,10)
|
||||
pixel_y = rand(-10,10)
|
||||
icon_state = "giftdeliverypackage[rand(1,5)]"
|
||||
|
||||
/obj/item/weapon/a_gift/suicide_act(mob/user)
|
||||
/obj/item/a_gift/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] peeks inside [src] and cries [user.p_them()]self to death! It looks like [user.p_they()] [user.p_were()] on the naughty list...</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/a_gift/attack_self(mob/M)
|
||||
/obj/item/a_gift/attack_self(mob/M)
|
||||
if(M && M.mind && M.mind.special_role == "Santa")
|
||||
to_chat(M, "<span class='warning'>You're supposed to be spreading gifts, not opening them yourself!</span>")
|
||||
return
|
||||
|
||||
var/gift_type_list = list(/obj/item/weapon/sord,
|
||||
/obj/item/weapon/storage/wallet,
|
||||
/obj/item/weapon/storage/photo_album,
|
||||
/obj/item/weapon/storage/box/snappops,
|
||||
/obj/item/weapon/storage/crayons,
|
||||
/obj/item/weapon/storage/backpack/holding,
|
||||
/obj/item/weapon/storage/belt/champion,
|
||||
/obj/item/weapon/soap/deluxe,
|
||||
/obj/item/weapon/pickaxe/diamond,
|
||||
/obj/item/weapon/pen/invisible,
|
||||
/obj/item/weapon/lipstick/random,
|
||||
/obj/item/weapon/grenade/smokebomb,
|
||||
/obj/item/weapon/grown/corncob,
|
||||
/obj/item/weapon/poster/random_contraband,
|
||||
/obj/item/weapon/poster/random_official,
|
||||
/obj/item/weapon/book/manual/barman_recipes,
|
||||
/obj/item/weapon/book/manual/chef_recipes,
|
||||
/obj/item/weapon/bikehorn,
|
||||
var/gift_type_list = list(/obj/item/sord,
|
||||
/obj/item/storage/wallet,
|
||||
/obj/item/storage/photo_album,
|
||||
/obj/item/storage/box/snappops,
|
||||
/obj/item/storage/crayons,
|
||||
/obj/item/storage/backpack/holding,
|
||||
/obj/item/storage/belt/champion,
|
||||
/obj/item/soap/deluxe,
|
||||
/obj/item/pickaxe/diamond,
|
||||
/obj/item/pen/invisible,
|
||||
/obj/item/lipstick/random,
|
||||
/obj/item/grenade/smokebomb,
|
||||
/obj/item/grown/corncob,
|
||||
/obj/item/poster/random_contraband,
|
||||
/obj/item/poster/random_official,
|
||||
/obj/item/book/manual/barman_recipes,
|
||||
/obj/item/book/manual/chef_recipes,
|
||||
/obj/item/bikehorn,
|
||||
/obj/item/toy/beach_ball,
|
||||
/obj/item/toy/beach_ball/holoball,
|
||||
/obj/item/weapon/banhammer,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/deus,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
|
||||
/obj/item/banhammer,
|
||||
/obj/item/reagent_containers/food/snacks/grown/ambrosia/deus,
|
||||
/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris,
|
||||
/obj/item/device/paicard,
|
||||
/obj/item/device/instrument/violin,
|
||||
/obj/item/device/instrument/guitar,
|
||||
/obj/item/weapon/storage/belt/utility/full,
|
||||
/obj/item/storage/belt/utility/full,
|
||||
/obj/item/clothing/neck/tie/horrible,
|
||||
/obj/item/clothing/suit/jacket/leather,
|
||||
/obj/item/clothing/suit/jacket/leather/overcoat,
|
||||
+549
-553
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,135 @@
|
||||
////////////////////
|
||||
//Clusterbang
|
||||
////////////////////
|
||||
/obj/item/grenade/clusterbuster
|
||||
desc = "Use of this weapon may constiute a war crime in your area, consult your local captain."
|
||||
name = "clusterbang"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "clusterbang"
|
||||
var/payload = /obj/item/grenade/flashbang/cluster
|
||||
|
||||
/obj/item/grenade/clusterbuster/prime()
|
||||
update_mob()
|
||||
var/numspawned = rand(4,8)
|
||||
var/again = 0
|
||||
|
||||
for(var/more = numspawned,more > 0,more--)
|
||||
if(prob(35))
|
||||
again++
|
||||
numspawned--
|
||||
|
||||
for(var/loop = again ,loop > 0, loop--)
|
||||
new /obj/item/grenade/clusterbuster/segment(loc, payload)//Creates 'segments' that launches a few more payloads
|
||||
|
||||
new /obj/effect/payload_spawner(loc, payload, numspawned)//Launches payload
|
||||
|
||||
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
|
||||
qdel(src)
|
||||
|
||||
|
||||
//////////////////////
|
||||
//Clusterbang segment
|
||||
//////////////////////
|
||||
/obj/item/grenade/clusterbuster/segment
|
||||
desc = "A smaller segment of a clusterbang. Better run."
|
||||
name = "clusterbang segment"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "clusterbang_segment"
|
||||
|
||||
/obj/item/grenade/clusterbuster/segment/New(var/loc, var/payload_type = /obj/item/grenade/flashbang/cluster)
|
||||
..()
|
||||
icon_state = "clusterbang_segment_active"
|
||||
payload = payload_type
|
||||
active = 1
|
||||
walk_away(src,loc,rand(1,4))
|
||||
addtimer(CALLBACK(src, .proc/prime), rand(15,60))
|
||||
|
||||
/obj/item/grenade/clusterbuster/segment/prime()
|
||||
|
||||
new /obj/effect/payload_spawner(loc, payload, rand(4,8))
|
||||
|
||||
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
|
||||
qdel(src)
|
||||
|
||||
//////////////////////////////////
|
||||
//The payload spawner effect
|
||||
/////////////////////////////////
|
||||
/obj/effect/payload_spawner/New(var/turf/newloc,var/type, var/numspawned as num)
|
||||
|
||||
for(var/loop = numspawned ,loop > 0, loop--)
|
||||
var/obj/item/grenade/P = new type(loc)
|
||||
P.active = 1
|
||||
walk_away(P,loc,rand(1,4))
|
||||
|
||||
spawn(rand(15,60))
|
||||
if(P && !QDELETED(P))
|
||||
P.prime()
|
||||
qdel(src)
|
||||
|
||||
|
||||
//////////////////////////////////
|
||||
//Custom payload clusterbusters
|
||||
/////////////////////////////////
|
||||
/obj/item/grenade/flashbang/cluster
|
||||
icon_state = "flashbang_active"
|
||||
|
||||
/obj/item/grenade/clusterbuster/emp
|
||||
name = "Electromagnetic Storm"
|
||||
payload = /obj/item/grenade/empgrenade
|
||||
|
||||
/obj/item/grenade/clusterbuster/smoke
|
||||
name = "Ninja Vanish"
|
||||
payload = /obj/item/grenade/smokebomb
|
||||
|
||||
/obj/item/grenade/clusterbuster/metalfoam
|
||||
name = "Instant Concrete"
|
||||
payload = /obj/item/grenade/chem_grenade/metalfoam
|
||||
|
||||
/obj/item/grenade/clusterbuster/inferno
|
||||
name = "Inferno"
|
||||
payload = /obj/item/grenade/chem_grenade/incendiary
|
||||
|
||||
/obj/item/grenade/clusterbuster/antiweed
|
||||
name = "RoundDown"
|
||||
payload = /obj/item/grenade/chem_grenade/antiweed
|
||||
|
||||
/obj/item/grenade/clusterbuster/cleaner
|
||||
name = "Mr. Proper"
|
||||
payload = /obj/item/grenade/chem_grenade/cleaner
|
||||
|
||||
/obj/item/grenade/clusterbuster/teargas
|
||||
name = "Oignon Grenade"
|
||||
payload = /obj/item/grenade/chem_grenade/teargas
|
||||
|
||||
/obj/item/grenade/clusterbuster/facid
|
||||
name = "Aciding Rain"
|
||||
payload = /obj/item/grenade/chem_grenade/facid
|
||||
|
||||
/obj/item/grenade/clusterbuster/syndieminibomb
|
||||
name = "SyndiWrath"
|
||||
payload = /obj/item/grenade/syndieminibomb
|
||||
|
||||
/obj/item/grenade/clusterbuster/spawner_manhacks
|
||||
name = "iViscerator"
|
||||
payload = /obj/item/grenade/spawnergrenade/manhacks
|
||||
|
||||
/obj/item/grenade/clusterbuster/spawner_spesscarp
|
||||
name = "Invasion of the Space Carps"
|
||||
payload = /obj/item/grenade/spawnergrenade/spesscarp
|
||||
|
||||
/obj/item/grenade/clusterbuster/soap
|
||||
name = "Slipocalypse"
|
||||
payload = /obj/item/grenade/spawnergrenade/syndiesoap
|
||||
|
||||
/obj/item/grenade/clusterbuster/clf3
|
||||
name = "WELCOME TO HELL"
|
||||
payload = /obj/item/grenade/chem_grenade/clf3
|
||||
|
||||
|
||||
//random clusterbuster spawner
|
||||
/obj/item/grenade/clusterbuster/random/New()
|
||||
var/real_type = pick(subtypesof(/obj/item/grenade/clusterbuster))
|
||||
new real_type(loc)
|
||||
qdel(src)
|
||||
+2
-2
@@ -1,11 +1,11 @@
|
||||
/obj/item/weapon/grenade/empgrenade
|
||||
/obj/item/grenade/empgrenade
|
||||
name = "classic EMP grenade"
|
||||
desc = "It is designed to wreak havoc on electronic systems."
|
||||
icon_state = "emp"
|
||||
item_state = "emp"
|
||||
origin_tech = "magnets=3;combat=2"
|
||||
|
||||
/obj/item/weapon/grenade/empgrenade/prime()
|
||||
/obj/item/grenade/empgrenade/prime()
|
||||
update_mob()
|
||||
empulse(src, 4, 10)
|
||||
qdel(src)
|
||||
+7
-7
@@ -1,12 +1,12 @@
|
||||
/obj/item/weapon/grenade/flashbang
|
||||
/obj/item/grenade/flashbang
|
||||
name = "flashbang"
|
||||
icon_state = "flashbang"
|
||||
item_state = "flashbang"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
origin_tech = "materials=2;combat=3"
|
||||
|
||||
/obj/item/weapon/grenade/flashbang/prime()
|
||||
/obj/item/grenade/flashbang/prime()
|
||||
update_mob()
|
||||
var/flashbang_turf = get_turf(src)
|
||||
if(!flashbang_turf)
|
||||
@@ -20,7 +20,7 @@
|
||||
B.take_damage(damage, BURN, "energy")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/flashbang/proc/bang(turf/T , mob/living/M)
|
||||
/obj/item/grenade/flashbang/proc/bang(turf/T , mob/living/M)
|
||||
if(M.stat == DEAD) //They're dead!
|
||||
return
|
||||
M.show_message("<span class='warning'>BANG</span>", 2)
|
||||
@@ -29,11 +29,11 @@
|
||||
|
||||
//Flash
|
||||
if(M.flash_act(affect_silicon = 1))
|
||||
M.Knockdown(max(200/max(1,distance), 60))
|
||||
M.Knockdown(max(200/max(1,distance), 60))
|
||||
//Bang
|
||||
if(!distance || loc == M || loc == M.loc) //Stop allahu akbarring rooms with this.
|
||||
M.Knockdown(200)
|
||||
M.soundbang_act(1, 200, 10, 15)
|
||||
|
||||
else
|
||||
M.soundbang_act(1, max(200/max(1,distance), 60), rand(0, 5))
|
||||
M.soundbang_act(1, max(200/max(1,distance), 60), rand(0, 5))
|
||||
+71
-71
@@ -1,71 +1,71 @@
|
||||
//improvised explosives//
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing
|
||||
name = "improvised firebomb"
|
||||
desc = "A weak, improvised incendiary device."
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "improvised_grenade"
|
||||
item_state = "flashbang"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
active = 0
|
||||
det_time = 50
|
||||
display_timer = 0
|
||||
var/range = 3
|
||||
var/list/times
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/Initialize()
|
||||
. = ..()
|
||||
add_overlay("improvised_grenade_filled")
|
||||
add_overlay("improvised_grenade_wired")
|
||||
times = list("5" = 10, "-1" = 20, "[rand(30,80)]" = 50, "[rand(65,180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value]
|
||||
det_time = text2num(pickweight(times))
|
||||
if(det_time < 0) //checking for 'duds'
|
||||
range = 1
|
||||
det_time = rand(30,80)
|
||||
else
|
||||
range = pick(2,2,2,3,3,3,4)
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/CheckParts(list/parts_list)
|
||||
..()
|
||||
var/obj/item/weapon/reagent_containers/food/drinks/soda_cans/can = locate() in contents
|
||||
if(can)
|
||||
can.pixel_x = 0 //Reset the sprite's position to make it consistent with the rest of the IED
|
||||
can.pixel_y = 0
|
||||
var/mutable_appearance/can_underlay = new(can)
|
||||
can_underlay.layer = FLOAT_LAYER
|
||||
can_underlay.plane = FLOAT_PLANE
|
||||
underlays += can_underlay
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/attack_self(mob/user) //
|
||||
if(!active)
|
||||
if(clown_check(user))
|
||||
to_chat(user, "<span class='warning'>You light the [name]!</span>")
|
||||
active = TRUE
|
||||
cut_overlay("improvised_grenade_filled")
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
add_fingerprint(user)
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)].")
|
||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].")
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.throw_mode_on()
|
||||
addtimer(CALLBACK(src, .proc/prime), det_time)
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/prime() //Blowing that can up
|
||||
update_mob()
|
||||
explosion(src.loc,-1,-1,2, flame_range = 4) // small explosion, plus a very large fireball.
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/iedcasing/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "You can't tell when it will explode!")
|
||||
//improvised explosives//
|
||||
|
||||
/obj/item/grenade/iedcasing
|
||||
name = "improvised firebomb"
|
||||
desc = "A weak, improvised incendiary device."
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "improvised_grenade"
|
||||
item_state = "flashbang"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = SLOT_BELT
|
||||
active = 0
|
||||
det_time = 50
|
||||
display_timer = 0
|
||||
var/range = 3
|
||||
var/list/times
|
||||
|
||||
/obj/item/grenade/iedcasing/Initialize()
|
||||
. = ..()
|
||||
add_overlay("improvised_grenade_filled")
|
||||
add_overlay("improvised_grenade_wired")
|
||||
times = list("5" = 10, "-1" = 20, "[rand(30,80)]" = 50, "[rand(65,180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value]
|
||||
det_time = text2num(pickweight(times))
|
||||
if(det_time < 0) //checking for 'duds'
|
||||
range = 1
|
||||
det_time = rand(30,80)
|
||||
else
|
||||
range = pick(2,2,2,3,3,3,4)
|
||||
|
||||
/obj/item/grenade/iedcasing/CheckParts(list/parts_list)
|
||||
..()
|
||||
var/obj/item/reagent_containers/food/drinks/soda_cans/can = locate() in contents
|
||||
if(can)
|
||||
can.pixel_x = 0 //Reset the sprite's position to make it consistent with the rest of the IED
|
||||
can.pixel_y = 0
|
||||
var/mutable_appearance/can_underlay = new(can)
|
||||
can_underlay.layer = FLOAT_LAYER
|
||||
can_underlay.plane = FLOAT_PLANE
|
||||
underlays += can_underlay
|
||||
|
||||
|
||||
/obj/item/grenade/iedcasing/attack_self(mob/user) //
|
||||
if(!active)
|
||||
if(clown_check(user))
|
||||
to_chat(user, "<span class='warning'>You light the [name]!</span>")
|
||||
active = TRUE
|
||||
cut_overlay("improvised_grenade_filled")
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
add_fingerprint(user)
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)].")
|
||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].")
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.throw_mode_on()
|
||||
addtimer(CALLBACK(src, .proc/prime), det_time)
|
||||
|
||||
/obj/item/grenade/iedcasing/prime() //Blowing that can up
|
||||
update_mob()
|
||||
explosion(src.loc,-1,-1,2, flame_range = 4) // small explosion, plus a very large fireball.
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/iedcasing/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "You can't tell when it will explode!")
|
||||
+113
-113
@@ -1,113 +1,113 @@
|
||||
/obj/item/weapon/grenade
|
||||
name = "grenade"
|
||||
desc = "It has an adjustable timer."
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "grenade"
|
||||
item_state = "flashbang"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 40
|
||||
var/active = 0
|
||||
var/det_time = 50
|
||||
var/display_timer = 1
|
||||
|
||||
/obj/item/weapon/grenade/deconstruct(disassembled = TRUE)
|
||||
if(!disassembled)
|
||||
prime()
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/proc/clown_check(mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
to_chat(user, "<span class='warning'>Huh? How does this thing work?</span>")
|
||||
active = 1
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
spawn(5)
|
||||
if(user)
|
||||
user.drop_item()
|
||||
prime()
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/examine(mob/user)
|
||||
..()
|
||||
if(display_timer)
|
||||
if(det_time > 1)
|
||||
to_chat(user, "The timer is set to [det_time/10] second\s.")
|
||||
else
|
||||
to_chat(user, "\The [src] is set for instant detonation.")
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/attack_self(mob/user)
|
||||
if(!active)
|
||||
if(clown_check(user))
|
||||
preprime(user)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.throw_mode_on()
|
||||
|
||||
/obj/item/weapon/grenade/proc/preprime(mob/user)
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>You prime the [name]! [det_time/10] seconds!</span>")
|
||||
playsound(loc, 'sound/weapons/armbomb.ogg', 60, 1)
|
||||
active = TRUE
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
add_fingerprint(user)
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
if(user)
|
||||
var/message = "[ADMIN_LOOKUPFLW(user)]) has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]"
|
||||
GLOB.bombers += message
|
||||
message_admins(message)
|
||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].")
|
||||
|
||||
addtimer(CALLBACK(src, .proc/prime), det_time)
|
||||
|
||||
/obj/item/weapon/grenade/proc/prime()
|
||||
|
||||
/obj/item/weapon/grenade/proc/update_mob()
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.dropItemToGround(src)
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/screwdriver))
|
||||
switch(det_time)
|
||||
if ("1")
|
||||
det_time = 10
|
||||
to_chat(user, "<span class='notice'>You set the [name] for 1 second detonation time.</span>")
|
||||
if ("10")
|
||||
det_time = 30
|
||||
to_chat(user, "<span class='notice'>You set the [name] for 3 second detonation time.</span>")
|
||||
if ("30")
|
||||
det_time = 50
|
||||
to_chat(user, "<span class='notice'>You set the [name] for 5 second detonation time.</span>")
|
||||
if ("50")
|
||||
det_time = 1
|
||||
to_chat(user, "<span class='notice'>You set the [name] for instant detonation.</span>")
|
||||
add_fingerprint(user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/grenade/attack_hand()
|
||||
walk(src, null, null)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/grenade/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/item/weapon/grenade/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
var/obj/item/projectile/P = hitby
|
||||
if(damage && attack_type == PROJECTILE_ATTACK && P.damage_type != STAMINA && prob(15))
|
||||
owner.visible_message("<span class='danger'>[attack_text] hits [owner]'s [src], setting it off! What a shot!</span>")
|
||||
prime()
|
||||
return 1 //It hit the grenade, not them
|
||||
/obj/item/grenade
|
||||
name = "grenade"
|
||||
desc = "It has an adjustable timer."
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "grenade"
|
||||
item_state = "flashbang"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = SLOT_BELT
|
||||
resistance_flags = FLAMMABLE
|
||||
max_integrity = 40
|
||||
var/active = 0
|
||||
var/det_time = 50
|
||||
var/display_timer = 1
|
||||
|
||||
/obj/item/grenade/deconstruct(disassembled = TRUE)
|
||||
if(!disassembled)
|
||||
prime()
|
||||
if(!QDELETED(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/proc/clown_check(mob/living/carbon/human/user)
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
to_chat(user, "<span class='warning'>Huh? How does this thing work?</span>")
|
||||
active = 1
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
playsound(loc, 'sound/weapons/armbomb.ogg', 75, 1, -3)
|
||||
spawn(5)
|
||||
if(user)
|
||||
user.drop_item()
|
||||
prime()
|
||||
return 0
|
||||
return 1
|
||||
|
||||
|
||||
/obj/item/grenade/examine(mob/user)
|
||||
..()
|
||||
if(display_timer)
|
||||
if(det_time > 1)
|
||||
to_chat(user, "The timer is set to [det_time/10] second\s.")
|
||||
else
|
||||
to_chat(user, "\The [src] is set for instant detonation.")
|
||||
|
||||
|
||||
/obj/item/grenade/attack_self(mob/user)
|
||||
if(!active)
|
||||
if(clown_check(user))
|
||||
preprime(user)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
C.throw_mode_on()
|
||||
|
||||
/obj/item/grenade/proc/preprime(mob/user)
|
||||
if(user)
|
||||
to_chat(user, "<span class='warning'>You prime the [name]! [det_time/10] seconds!</span>")
|
||||
playsound(loc, 'sound/weapons/armbomb.ogg', 60, 1)
|
||||
active = TRUE
|
||||
icon_state = initial(icon_state) + "_active"
|
||||
add_fingerprint(user)
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
if(user)
|
||||
var/message = "[ADMIN_LOOKUPFLW(user)]) has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]"
|
||||
GLOB.bombers += message
|
||||
message_admins(message)
|
||||
log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].")
|
||||
|
||||
addtimer(CALLBACK(src, .proc/prime), det_time)
|
||||
|
||||
/obj/item/grenade/proc/prime()
|
||||
|
||||
/obj/item/grenade/proc/update_mob()
|
||||
if(ismob(loc))
|
||||
var/mob/M = loc
|
||||
M.dropItemToGround(src)
|
||||
|
||||
|
||||
/obj/item/grenade/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
switch(det_time)
|
||||
if ("1")
|
||||
det_time = 10
|
||||
to_chat(user, "<span class='notice'>You set the [name] for 1 second detonation time.</span>")
|
||||
if ("10")
|
||||
det_time = 30
|
||||
to_chat(user, "<span class='notice'>You set the [name] for 3 second detonation time.</span>")
|
||||
if ("30")
|
||||
det_time = 50
|
||||
to_chat(user, "<span class='notice'>You set the [name] for 5 second detonation time.</span>")
|
||||
if ("50")
|
||||
det_time = 1
|
||||
to_chat(user, "<span class='notice'>You set the [name] for instant detonation.</span>")
|
||||
add_fingerprint(user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/grenade/attack_hand()
|
||||
walk(src, null, null)
|
||||
..()
|
||||
|
||||
/obj/item/grenade/attack_paw(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/item/grenade/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
var/obj/item/projectile/P = hitby
|
||||
if(damage && attack_type == PROJECTILE_ATTACK && P.damage_type != STAMINA && prob(15))
|
||||
owner.visible_message("<span class='danger'>[attack_text] hits [owner]'s [src], setting it off! What a shot!</span>")
|
||||
prime()
|
||||
return 1 //It hit the grenade, not them
|
||||
+30
-33
@@ -1,9 +1,10 @@
|
||||
/obj/item/weapon/grenade/plastic
|
||||
/obj/item/grenade/plastic
|
||||
name = "plastic explosive"
|
||||
desc = "Used to put holes in specific areas without too much extra hole."
|
||||
icon_state = "plastic-explosive0"
|
||||
item_state = "plastic-explosive"
|
||||
flags = NOBLUDGEON
|
||||
flags_1 = NOBLUDGEON_1
|
||||
flags_2 = NO_EMP_WIRES_2
|
||||
det_time = 10
|
||||
display_timer = 0
|
||||
var/atom/target = null
|
||||
@@ -14,21 +15,17 @@
|
||||
var/aim_dir = NORTH
|
||||
var/boom_sizes = list(0, 0, 3)
|
||||
|
||||
/obj/item/weapon/grenade/plastic/New()
|
||||
/obj/item/grenade/plastic/New()
|
||||
plastic_overlay = mutable_appearance(icon, "[item_state]2")
|
||||
..()
|
||||
|
||||
/obj/item/weapon/grenade/plastic/Initialize(mapload)
|
||||
. = ..()
|
||||
SET_SECONDARY_FLAG(src, NO_EMP_WIRES)
|
||||
|
||||
/obj/item/weapon/grenade/plastic/Destroy()
|
||||
/obj/item/grenade/plastic/Destroy()
|
||||
qdel(nadeassembly)
|
||||
nadeassembly = null
|
||||
target = null
|
||||
..()
|
||||
|
||||
/obj/item/weapon/grenade/plastic/attackby(obj/item/I, mob/user, params)
|
||||
/obj/item/grenade/plastic/attackby(obj/item/I, mob/user, params)
|
||||
if(!nadeassembly && istype(I, /obj/item/device/assembly_holder))
|
||||
var/obj/item/device/assembly_holder/A = I
|
||||
if(!user.transferItemToLoc(I, src))
|
||||
@@ -40,7 +37,7 @@
|
||||
playsound(src, 'sound/weapons/tap.ogg', 20, 1)
|
||||
update_icon()
|
||||
return
|
||||
if(nadeassembly && istype(I, /obj/item/weapon/wirecutters))
|
||||
if(nadeassembly && istype(I, /obj/item/wirecutters))
|
||||
playsound(src, I.usesound, 20, 1)
|
||||
nadeassembly.forceMove(get_turf(src))
|
||||
nadeassembly.master = null
|
||||
@@ -49,7 +46,7 @@
|
||||
return
|
||||
..()
|
||||
|
||||
/obj/item/weapon/grenade/plastic/prime()
|
||||
/obj/item/grenade/plastic/prime()
|
||||
var/turf/location
|
||||
if(target)
|
||||
if(!QDELETED(target))
|
||||
@@ -70,18 +67,18 @@
|
||||
qdel(src)
|
||||
|
||||
//assembly stuff
|
||||
/obj/item/weapon/grenade/plastic/receive_signal()
|
||||
/obj/item/grenade/plastic/receive_signal()
|
||||
prime()
|
||||
|
||||
/obj/item/weapon/grenade/plastic/Crossed(atom/movable/AM)
|
||||
/obj/item/grenade/plastic/Crossed(atom/movable/AM)
|
||||
if(nadeassembly)
|
||||
nadeassembly.Crossed(AM)
|
||||
|
||||
/obj/item/weapon/grenade/plastic/on_found(mob/finder)
|
||||
/obj/item/grenade/plastic/on_found(mob/finder)
|
||||
if(nadeassembly)
|
||||
nadeassembly.on_found(finder)
|
||||
|
||||
/obj/item/weapon/grenade/plastic/attack_self(mob/user)
|
||||
/obj/item/grenade/plastic/attack_self(mob/user)
|
||||
if(nadeassembly)
|
||||
nadeassembly.attack_self(user)
|
||||
return
|
||||
@@ -91,7 +88,7 @@
|
||||
det_time = newtime
|
||||
to_chat(user, "Timer set for [det_time] seconds.")
|
||||
|
||||
/obj/item/weapon/grenade/plastic/afterattack(atom/movable/AM, mob/user, flag)
|
||||
/obj/item/grenade/plastic/afterattack(atom/movable/AM, mob/user, flag)
|
||||
aim_dir = get_dir(user,AM)
|
||||
if(!flag)
|
||||
return
|
||||
@@ -122,7 +119,7 @@
|
||||
else
|
||||
qdel(src) //How?
|
||||
|
||||
/obj/item/weapon/grenade/plastic/suicide_act(mob/user)
|
||||
/obj/item/grenade/plastic/suicide_act(mob/user)
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [src] at [ADMIN_COORDJMP(user)]",0,1)
|
||||
log_game("[key_name(user)] suicided with [src] at [COORD(user)]")
|
||||
user.visible_message("<span class='suicide'>[user] activates the [src] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!</span>")
|
||||
@@ -145,7 +142,7 @@
|
||||
user.gib(1, 1)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/plastic/update_icon()
|
||||
/obj/item/grenade/plastic/update_icon()
|
||||
if(nadeassembly)
|
||||
icon_state = "[item_state]1"
|
||||
else
|
||||
@@ -155,7 +152,7 @@
|
||||
///// The Explosives /////
|
||||
//////////////////////////
|
||||
|
||||
/obj/item/weapon/grenade/plastic/c4
|
||||
/obj/item/grenade/plastic/c4
|
||||
name = "C4"
|
||||
desc = "Used to put holes in specific areas without too much extra hole. A saboteur's favorite."
|
||||
gender = PLURAL
|
||||
@@ -164,24 +161,24 @@
|
||||
item_state = "plasticx"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/bombs_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/bombs_righthand.dmi'
|
||||
flags = NOBLUDGEON
|
||||
flags_1 = NOBLUDGEON_1
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
origin_tech = "syndicate=1"
|
||||
var/timer = 10
|
||||
var/open_panel = 0
|
||||
|
||||
/obj/item/weapon/grenade/plastic/c4/New()
|
||||
/obj/item/grenade/plastic/c4/New()
|
||||
wires = new /datum/wires/explosive/c4(src)
|
||||
..()
|
||||
plastic_overlay = mutable_appearance(icon, "plastic-explosive2")
|
||||
|
||||
/obj/item/weapon/grenade/plastic/c4/Destroy()
|
||||
/obj/item/grenade/plastic/c4/Destroy()
|
||||
qdel(wires)
|
||||
wires = null
|
||||
target = null
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/grenade/plastic/c4/suicide_act(mob/user)
|
||||
/obj/item/grenade/plastic/c4/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] activates the [src.name] and holds it above [user.p_their()] head! It looks like [user.p_theyre()] going out with a bang!</span>")
|
||||
var/message_say = "FOR NO RAISIN!"
|
||||
if(user.mind)
|
||||
@@ -205,8 +202,8 @@
|
||||
explode(get_turf(user))
|
||||
user.gib(1, 1)
|
||||
|
||||
/obj/item/weapon/grenade/plastic/c4/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/weapon/screwdriver))
|
||||
/obj/item/grenade/plastic/c4/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/screwdriver))
|
||||
open_panel = !open_panel
|
||||
to_chat(user, "<span class='notice'>You [open_panel ? "open" : "close"] the wire panel.</span>")
|
||||
else if(is_wire_tool(I))
|
||||
@@ -214,24 +211,24 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/grenade/plastic/c4/attack_self(mob/user)
|
||||
/obj/item/grenade/plastic/c4/attack_self(mob/user)
|
||||
var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num
|
||||
if(user.get_active_held_item() == src)
|
||||
newtime = Clamp(newtime, 10, 60000)
|
||||
timer = newtime
|
||||
to_chat(user, "Timer set for [timer] seconds.")
|
||||
|
||||
/obj/item/weapon/grenade/plastic/c4/afterattack(atom/movable/AM, mob/user, flag)
|
||||
/obj/item/grenade/plastic/c4/afterattack(atom/movable/AM, mob/user, flag)
|
||||
if (!flag)
|
||||
return
|
||||
if (ismob(AM))
|
||||
return
|
||||
if(loc == AM)
|
||||
return
|
||||
if((istype(AM, /obj/item/weapon/storage/)) && !((istype(AM, /obj/item/weapon/storage/secure)) || (istype(AM, /obj/item/weapon/storage/lockbox)))) //If its storage but not secure storage OR a lockbox, then place it inside.
|
||||
if((istype(AM, /obj/item/storage/)) && !((istype(AM, /obj/item/storage/secure)) || (istype(AM, /obj/item/storage/lockbox)))) //If its storage but not secure storage OR a lockbox, then place it inside.
|
||||
return
|
||||
if((istype(AM, /obj/item/weapon/storage/secure)) || (istype(AM, /obj/item/weapon/storage/lockbox)))
|
||||
var/obj/item/weapon/storage/secure/S = AM
|
||||
if((istype(AM, /obj/item/storage/secure)) || (istype(AM, /obj/item/storage/lockbox)))
|
||||
var/obj/item/storage/secure/S = AM
|
||||
if(!S.locked) //Literal hacks, this works for lockboxes despite incorrect type casting, because they both share the locked var. But if its unlocked, place it inside, otherwise PLANTING C4!
|
||||
return
|
||||
|
||||
@@ -252,7 +249,7 @@
|
||||
to_chat(user, "<span class='notice'>You plant the bomb. Timer counting down from [timer].</span>")
|
||||
addtimer(CALLBACK(src, .proc/explode), timer * 10)
|
||||
|
||||
/obj/item/weapon/grenade/plastic/c4/proc/explode()
|
||||
/obj/item/grenade/plastic/c4/proc/explode()
|
||||
if(QDELETED(src))
|
||||
return
|
||||
var/turf/location
|
||||
@@ -267,14 +264,14 @@
|
||||
explosion(location,0,0,3)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/plastic/c4/attack(mob/M, mob/user, def_zone)
|
||||
/obj/item/grenade/plastic/c4/attack(mob/M, mob/user, def_zone)
|
||||
return
|
||||
|
||||
// X4 is an upgraded directional variant of c4 which is relatively safe to be standing next to. And much less safe to be standing on the other side of.
|
||||
// C4 is intended to be used for infiltration, and destroying tech. X4 is intended to be used for heavy breaching and tight spaces.
|
||||
// Intended to replace C4 for nukeops, and to be a randomdrop in surplus/random traitor purchases.
|
||||
|
||||
/obj/item/weapon/grenade/plastic/x4
|
||||
/obj/item/grenade/plastic/x4
|
||||
name = "X4"
|
||||
desc = "A shaped high-explosive breaching charge. Designed to ensure user safety and wall nonsafety."
|
||||
icon_state = "plasticx40"
|
||||
+4
-4
@@ -1,4 +1,4 @@
|
||||
/obj/item/weapon/grenade/smokebomb
|
||||
/obj/item/grenade/smokebomb
|
||||
name = "smoke grenade"
|
||||
desc = "The word 'Dank' is scribbled on it in crayon."
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
@@ -8,16 +8,16 @@
|
||||
slot_flags = SLOT_BELT
|
||||
var/datum/effect_system/smoke_spread/bad/smoke
|
||||
|
||||
/obj/item/weapon/grenade/smokebomb/New()
|
||||
/obj/item/grenade/smokebomb/New()
|
||||
..()
|
||||
src.smoke = new /datum/effect_system/smoke_spread/bad
|
||||
src.smoke.attach(src)
|
||||
|
||||
/obj/item/weapon/grenade/smokebomb/Destroy()
|
||||
/obj/item/grenade/smokebomb/Destroy()
|
||||
qdel(smoke)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/grenade/smokebomb/prime()
|
||||
/obj/item/grenade/smokebomb/prime()
|
||||
update_mob()
|
||||
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
smoke.set_up(4, src)
|
||||
+39
-39
@@ -1,39 +1,39 @@
|
||||
/obj/item/weapon/grenade/spawnergrenade
|
||||
desc = "It will unleash an unspecified anomaly into the vicinity."
|
||||
name = "delivery grenade"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "delivery"
|
||||
item_state = "flashbang"
|
||||
origin_tech = "materials=3;magnets=4"
|
||||
var/spawner_type = null // must be an object path
|
||||
var/deliveryamt = 1 // amount of type to deliver
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/prime() // Prime now just handles the two loops that query for people in lockers and people who can see it.
|
||||
update_mob()
|
||||
if(spawner_type && deliveryamt)
|
||||
// Make a quick flash
|
||||
var/turf/T = get_turf(src)
|
||||
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
|
||||
for(var/mob/living/carbon/C in viewers(T, null))
|
||||
C.flash_act()
|
||||
|
||||
// Spawn some hostile syndicate critters and spread them out
|
||||
spawn_and_random_walk(spawner_type, T, deliveryamt, walk_chance=50, admin_spawn=admin_spawned)
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/manhacks
|
||||
name = "viscerator delivery grenade"
|
||||
spawner_type = /mob/living/simple_animal/hostile/viscerator
|
||||
deliveryamt = 10
|
||||
origin_tech = "materials=3;magnets=4;syndicate=3"
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/spesscarp
|
||||
name = "carp delivery grenade"
|
||||
spawner_type = /mob/living/simple_animal/hostile/carp
|
||||
deliveryamt = 5
|
||||
origin_tech = "materials=3;magnets=4;syndicate=3"
|
||||
|
||||
/obj/item/weapon/grenade/spawnergrenade/syndiesoap
|
||||
name = "Mister Scrubby"
|
||||
spawner_type = /obj/item/weapon/soap/syndie
|
||||
/obj/item/grenade/spawnergrenade
|
||||
desc = "It will unleash an unspecified anomaly into the vicinity."
|
||||
name = "delivery grenade"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "delivery"
|
||||
item_state = "flashbang"
|
||||
origin_tech = "materials=3;magnets=4"
|
||||
var/spawner_type = null // must be an object path
|
||||
var/deliveryamt = 1 // amount of type to deliver
|
||||
|
||||
/obj/item/grenade/spawnergrenade/prime() // Prime now just handles the two loops that query for people in lockers and people who can see it.
|
||||
update_mob()
|
||||
if(spawner_type && deliveryamt)
|
||||
// Make a quick flash
|
||||
var/turf/T = get_turf(src)
|
||||
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
|
||||
for(var/mob/living/carbon/C in viewers(T, null))
|
||||
C.flash_act()
|
||||
|
||||
// Spawn some hostile syndicate critters and spread them out
|
||||
spawn_and_random_walk(spawner_type, T, deliveryamt, walk_chance=50, admin_spawn=admin_spawned)
|
||||
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/spawnergrenade/manhacks
|
||||
name = "viscerator delivery grenade"
|
||||
spawner_type = /mob/living/simple_animal/hostile/viscerator
|
||||
deliveryamt = 10
|
||||
origin_tech = "materials=3;magnets=4;syndicate=3"
|
||||
|
||||
/obj/item/grenade/spawnergrenade/spesscarp
|
||||
name = "carp delivery grenade"
|
||||
spawner_type = /mob/living/simple_animal/hostile/carp
|
||||
deliveryamt = 5
|
||||
origin_tech = "materials=3;magnets=4;syndicate=3"
|
||||
|
||||
/obj/item/grenade/spawnergrenade/syndiesoap
|
||||
name = "Mister Scrubby"
|
||||
spawner_type = /obj/item/soap/syndie
|
||||
+53
-53
@@ -1,53 +1,53 @@
|
||||
/obj/item/weapon/grenade/syndieminibomb
|
||||
desc = "A syndicate manufactured explosive used to sow destruction and chaos"
|
||||
name = "syndicate minibomb"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "syndicate"
|
||||
item_state = "flashbang"
|
||||
origin_tech = "materials=3;magnets=4;syndicate=3"
|
||||
|
||||
|
||||
/obj/item/weapon/grenade/syndieminibomb/prime()
|
||||
update_mob()
|
||||
explosion(src.loc,1,2,4,flame_range = 2)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/syndieminibomb/concussion
|
||||
name = "HE Grenade"
|
||||
desc = "A compact shrapnel grenade meant to devestate nearby organisms and cause some damage in the process. Pull pin and throw opposite direction."
|
||||
icon_state = "concussion"
|
||||
origin_tech = "materials=3;magnets=4;syndicate=2"
|
||||
|
||||
/obj/item/weapon/grenade/syndieminibomb/concussion/prime()
|
||||
update_mob()
|
||||
explosion(src.loc,0,2,3,flame_range = 3)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/grenade/syndieminibomb/concussion/frag
|
||||
name = "frag grenade"
|
||||
desc = "Fire in the hole."
|
||||
icon_state = "frag"
|
||||
|
||||
/obj/item/weapon/grenade/gluon
|
||||
desc = "An advanced grenade that releases a harmful stream of gluons inducing radiation in those nearby. These gluon streams will also make victims feel exhausted, and induce shivering. This extreme coldness will also likely wet any nearby floors."
|
||||
name = "gluon frag grenade"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "bluefrag"
|
||||
item_state = "flashbang"
|
||||
var/freeze_range = 4
|
||||
var/rad_damage = 35
|
||||
var/stamina_damage = 30
|
||||
|
||||
/obj/item/weapon/grenade/gluon/prime()
|
||||
update_mob()
|
||||
playsound(loc, 'sound/effects/empulse.ogg', 50, 1)
|
||||
radiation_pulse(loc,freeze_range,freeze_range+1,rad_damage)
|
||||
for(var/turf/T in view(freeze_range,loc))
|
||||
if(isfloorturf(T))
|
||||
var/turf/open/floor/F = T
|
||||
F.wet = TURF_WET_PERMAFROST
|
||||
addtimer(CALLBACK(F, /turf/open/floor.proc/MakeDry, TURF_WET_PERMAFROST), rand(3000, 3100))
|
||||
for(var/mob/living/carbon/L in T)
|
||||
L.adjustStaminaLoss(stamina_damage)
|
||||
L.bodytemperature -= 230
|
||||
qdel(src)
|
||||
/obj/item/grenade/syndieminibomb
|
||||
desc = "A syndicate manufactured explosive used to sow destruction and chaos"
|
||||
name = "syndicate minibomb"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "syndicate"
|
||||
item_state = "flashbang"
|
||||
origin_tech = "materials=3;magnets=4;syndicate=3"
|
||||
|
||||
|
||||
/obj/item/grenade/syndieminibomb/prime()
|
||||
update_mob()
|
||||
explosion(src.loc,1,2,4,flame_range = 2)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/syndieminibomb/concussion
|
||||
name = "HE Grenade"
|
||||
desc = "A compact shrapnel grenade meant to devestate nearby organisms and cause some damage in the process. Pull pin and throw opposite direction."
|
||||
icon_state = "concussion"
|
||||
origin_tech = "materials=3;magnets=4;syndicate=2"
|
||||
|
||||
/obj/item/grenade/syndieminibomb/concussion/prime()
|
||||
update_mob()
|
||||
explosion(src.loc,0,2,3,flame_range = 3)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/grenade/syndieminibomb/concussion/frag
|
||||
name = "frag grenade"
|
||||
desc = "Fire in the hole."
|
||||
icon_state = "frag"
|
||||
|
||||
/obj/item/grenade/gluon
|
||||
desc = "An advanced grenade that releases a harmful stream of gluons inducing radiation in those nearby. These gluon streams will also make victims feel exhausted, and induce shivering. This extreme coldness will also likely wet any nearby floors."
|
||||
name = "gluon frag grenade"
|
||||
icon = 'icons/obj/grenade.dmi'
|
||||
icon_state = "bluefrag"
|
||||
item_state = "flashbang"
|
||||
var/freeze_range = 4
|
||||
var/rad_damage = 35
|
||||
var/stamina_damage = 30
|
||||
|
||||
/obj/item/grenade/gluon/prime()
|
||||
update_mob()
|
||||
playsound(loc, 'sound/effects/empulse.ogg', 50, 1)
|
||||
radiation_pulse(loc,freeze_range,freeze_range+1,rad_damage)
|
||||
for(var/turf/T in view(freeze_range,loc))
|
||||
if(isfloorturf(T))
|
||||
var/turf/open/floor/F = T
|
||||
F.wet = TURF_WET_PERMAFROST
|
||||
addtimer(CALLBACK(F, /turf/open/floor.proc/MakeDry, TURF_WET_PERMAFROST), rand(3000, 3100))
|
||||
for(var/mob/living/carbon/L in T)
|
||||
L.adjustStaminaLoss(stamina_damage)
|
||||
L.bodytemperature -= 230
|
||||
qdel(src)
|
||||
+62
-62
@@ -1,17 +1,17 @@
|
||||
/obj/item/weapon/restraints
|
||||
/obj/item/restraints
|
||||
breakouttime = 600
|
||||
|
||||
//Handcuffs
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs
|
||||
/obj/item/restraints/handcuffs
|
||||
name = "handcuffs"
|
||||
desc = "Use this to keep prisoners in line."
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "handcuff"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
flags = CONDUCT
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
@@ -24,7 +24,7 @@
|
||||
var/cuffsound = 'sound/weapons/handcuffs.ogg'
|
||||
var/trashtype = null //for disposable cuffs
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/carbon/human/user)
|
||||
/obj/item/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/carbon/human/user)
|
||||
if(!istype(C))
|
||||
return
|
||||
if(user.disabilities & CLUMSY && prob(50))
|
||||
@@ -55,14 +55,14 @@
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[C] doesn't have two hands...</span>")
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/proc/apply_cuffs(mob/living/carbon/target, mob/user, var/dispense = 0)
|
||||
/obj/item/restraints/handcuffs/proc/apply_cuffs(mob/living/carbon/target, mob/user, var/dispense = 0)
|
||||
if(target.handcuffed)
|
||||
return
|
||||
|
||||
if(!user.drop_item() && !dispense)
|
||||
return
|
||||
|
||||
var/obj/item/weapon/restraints/handcuffs/cuffs = src
|
||||
var/obj/item/restraints/handcuffs/cuffs = src
|
||||
if(trashtype)
|
||||
cuffs = new trashtype()
|
||||
else if(dispense)
|
||||
@@ -76,7 +76,7 @@
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/sinew
|
||||
/obj/item/restraints/handcuffs/sinew
|
||||
name = "sinew restraints"
|
||||
desc = "A pair of restraints fashioned from long strands of flesh."
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
@@ -85,20 +85,20 @@
|
||||
breakouttime = 300 //Deciseconds = 30s
|
||||
cuffsound = 'sound/weapons/cablecuff.ogg'
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable
|
||||
/obj/item/restraints/handcuffs/cable
|
||||
name = "cable restraints"
|
||||
desc = "Looks like some cables tied together. Could be used to tie something up."
|
||||
icon_state = "cuff_red"
|
||||
item_state = "coil_red"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
materials = list(MAT_METAL=150, MAT_GLASS=75)
|
||||
origin_tech = "engineering=2"
|
||||
breakouttime = 300 //Deciseconds = 30s
|
||||
cuffsound = 'sound/weapons/cablecuff.ogg'
|
||||
var/datum/robot_energy_storage/wirestorage = null
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/attack(mob/living/carbon/C, mob/living/carbon/human/user)
|
||||
/obj/item/restraints/handcuffs/cable/attack(mob/living/carbon/C, mob/living/carbon/human/user)
|
||||
if(!istype(C))
|
||||
return
|
||||
if(wirestorage && wirestorage.energy < 15)
|
||||
@@ -106,7 +106,7 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/apply_cuffs(mob/living/carbon/target, mob/user, var/dispense = 0)
|
||||
/obj/item/restraints/handcuffs/cable/apply_cuffs(mob/living/carbon/target, mob/user, var/dispense = 0)
|
||||
if(wirestorage)
|
||||
if(!wirestorage.use_charge(15))
|
||||
to_chat(user, "<span class='warning'>You need at least 15 wire to restrain [target]!</span>")
|
||||
@@ -115,57 +115,57 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/red
|
||||
/obj/item/restraints/handcuffs/cable/red
|
||||
icon_state = "cuff_red"
|
||||
item_state = "coil_red"
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/yellow
|
||||
/obj/item/restraints/handcuffs/cable/yellow
|
||||
icon_state = "cuff_yellow"
|
||||
item_state = "coil_yellow"
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/blue
|
||||
/obj/item/restraints/handcuffs/cable/blue
|
||||
icon_state = "cuff_blue"
|
||||
item_state = "coil_blue"
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/green
|
||||
/obj/item/restraints/handcuffs/cable/green
|
||||
icon_state = "cuff_green"
|
||||
item_state = "coil_green"
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/pink
|
||||
/obj/item/restraints/handcuffs/cable/pink
|
||||
icon_state = "cuff_pink"
|
||||
item_state = "coil_pink"
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/orange
|
||||
/obj/item/restraints/handcuffs/cable/orange
|
||||
icon_state = "cuff_orange"
|
||||
item_state = "coil_orange"
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/cyan
|
||||
/obj/item/restraints/handcuffs/cable/cyan
|
||||
icon_state = "cuff_cyan"
|
||||
item_state = "coil_cyan"
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/white
|
||||
/obj/item/restraints/handcuffs/cable/white
|
||||
icon_state = "cuff_white"
|
||||
item_state = "coil_white"
|
||||
item_state = "coil_white"
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/alien
|
||||
/obj/item/restraints/handcuffs/alien
|
||||
icon_state = "handcuffAlien"
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/fake
|
||||
/obj/item/restraints/handcuffs/fake
|
||||
name = "fake handcuffs"
|
||||
desc = "Fake handcuffs meant for gag purposes."
|
||||
breakouttime = 10 //Deciseconds = 1s
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/fake/kinky
|
||||
/obj/item/restraints/handcuffs/fake/kinky
|
||||
name = "kinky handcuffs"
|
||||
desc = "Fake handcuffs meant for erotic roleplay."
|
||||
icon_state = "handcuffGag"
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params)
|
||||
/obj/item/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params)
|
||||
..()
|
||||
if(istype(I, /obj/item/stack/rods))
|
||||
var/obj/item/stack/rods/R = I
|
||||
if (R.use(1))
|
||||
var/obj/item/weapon/wirerod/W = new /obj/item/weapon/wirerod
|
||||
var/obj/item/wirerod/W = new /obj/item/wirerod
|
||||
remove_item_from_storage(user)
|
||||
user.put_in_hands(W)
|
||||
to_chat(user, "<span class='notice'>You wrap the cable restraint around the top of the rod.</span>")
|
||||
@@ -182,7 +182,7 @@
|
||||
if(do_after(user, 35, target = src))
|
||||
if(M.get_amount() < 6 || !M)
|
||||
return
|
||||
var/obj/item/weapon/restraints/legcuffs/bola/S = new /obj/item/weapon/restraints/legcuffs/bola
|
||||
var/obj/item/restraints/legcuffs/bola/S = new /obj/item/restraints/legcuffs/bola
|
||||
M.use(6)
|
||||
user.put_in_hands(S)
|
||||
to_chat(user, "<span class='notice'>You make some weights out of [I] and tie them to [src].</span>")
|
||||
@@ -191,7 +191,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg/attack(mob/living/carbon/C, mob/user)
|
||||
/obj/item/restraints/handcuffs/cable/zipties/cyborg/attack(mob/living/carbon/C, mob/user)
|
||||
if(iscyborg(user))
|
||||
if(!C.handcuffed)
|
||||
playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
|
||||
@@ -199,50 +199,50 @@
|
||||
"<span class='userdanger'>[user] is trying to put zipties on [C]!</span>")
|
||||
if(do_mob(user, C, 30))
|
||||
if(!C.handcuffed)
|
||||
C.handcuffed = new /obj/item/weapon/restraints/handcuffs/cable/zipties/used(C)
|
||||
C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C)
|
||||
C.update_handcuffed()
|
||||
to_chat(user, "<span class='notice'>You handcuff [C].</span>")
|
||||
add_logs(user, C, "handcuffed")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You fail to handcuff [C]!</span>")
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/zipties
|
||||
/obj/item/restraints/handcuffs/cable/zipties
|
||||
name = "zipties"
|
||||
desc = "Plastic, disposable zipties that can be used to restrain temporarily but are destroyed after use."
|
||||
icon_state = "cuff_white"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
materials = list()
|
||||
breakouttime = 450 //Deciseconds = 45s
|
||||
trashtype = /obj/item/weapon/restraints/handcuffs/cable/zipties/used
|
||||
trashtype = /obj/item/restraints/handcuffs/cable/zipties/used
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/zipties/used
|
||||
/obj/item/restraints/handcuffs/cable/zipties/used
|
||||
desc = "A pair of broken zipties."
|
||||
icon_state = "cuff_white_used"
|
||||
item_state = "cuff_white"
|
||||
item_state = "cuff_white"
|
||||
|
||||
/obj/item/weapon/restraints/handcuffs/cable/zipties/used/attack()
|
||||
/obj/item/restraints/handcuffs/cable/zipties/used/attack()
|
||||
return
|
||||
|
||||
|
||||
//Legcuffs
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs
|
||||
/obj/item/restraints/legcuffs
|
||||
name = "leg cuffs"
|
||||
desc = "Use this to keep prisoners in line."
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "handcuff"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
flags = CONDUCT
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
throwforce = 0
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
origin_tech = "engineering=3;combat=3"
|
||||
slowdown = 7
|
||||
breakouttime = 300 //Deciseconds = 30s = 0.5 minute
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap
|
||||
/obj/item/restraints/legcuffs/beartrap
|
||||
name = "bear trap"
|
||||
throw_speed = 1
|
||||
throw_range = 1
|
||||
@@ -252,23 +252,23 @@
|
||||
var/armed = 0
|
||||
var/trap_damage = 20
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/Initialize()
|
||||
/obj/item/restraints/legcuffs/beartrap/Initialize()
|
||||
..()
|
||||
icon_state = "[initial(icon_state)][armed]"
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/suicide_act(mob/user)
|
||||
/obj/item/restraints/legcuffs/beartrap/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is sticking [user.p_their()] head in the [src.name]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/attack_self(mob/user)
|
||||
/obj/item/restraints/legcuffs/beartrap/attack_self(mob/user)
|
||||
..()
|
||||
if(ishuman(user) && !user.stat && !user.restrained())
|
||||
armed = !armed
|
||||
icon_state = "[initial(icon_state)][armed]"
|
||||
to_chat(user, "<span class='notice'>[src] is now [armed ? "armed" : "disarmed"]</span>")
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/Crossed(AM as mob|obj)
|
||||
/obj/item/restraints/legcuffs/beartrap/Crossed(AM as mob|obj)
|
||||
if(armed && isturf(src.loc))
|
||||
if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
@@ -299,29 +299,29 @@
|
||||
L.apply_damage(trap_damage,BRUTE, def_zone)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/energy
|
||||
/obj/item/restraints/legcuffs/beartrap/energy
|
||||
name = "energy snare"
|
||||
armed = 1
|
||||
icon_state = "e_snare"
|
||||
trap_damage = 0
|
||||
flags = DROPDEL
|
||||
flags_1 = DROPDEL_1
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/energy/New()
|
||||
/obj/item/restraints/legcuffs/beartrap/energy/New()
|
||||
..()
|
||||
addtimer(CALLBACK(src, .proc/dissipate), 100)
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/energy/proc/dissipate()
|
||||
/obj/item/restraints/legcuffs/beartrap/energy/proc/dissipate()
|
||||
if(!ismob(loc))
|
||||
do_sparks(1, TRUE, src)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/energy/attack_hand(mob/user)
|
||||
/obj/item/restraints/legcuffs/beartrap/energy/attack_hand(mob/user)
|
||||
Crossed(user) //honk
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/beartrap/energy/cyborg
|
||||
/obj/item/restraints/legcuffs/beartrap/energy/cyborg
|
||||
breakouttime = 20 // Cyborgs shouldn't have a strong restraint
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/bola
|
||||
/obj/item/restraints/legcuffs/bola
|
||||
name = "bola"
|
||||
desc = "A restraining device designed to be thrown at the target. Upon connecting with said target, it will wrap around their legs, making it difficult for them to move quickly."
|
||||
icon_state = "bola"
|
||||
@@ -330,12 +330,12 @@
|
||||
origin_tech = "engineering=3;combat=1"
|
||||
var/knockdown = 0
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/bola/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
|
||||
/obj/item/restraints/legcuffs/bola/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
|
||||
if(!..())
|
||||
return
|
||||
playsound(src.loc,'sound/weapons/bolathrow.ogg', 75, 1)
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/bola/throw_impact(atom/hit_atom)
|
||||
/obj/item/restraints/legcuffs/bola/throw_impact(atom/hit_atom)
|
||||
if(..() || !iscarbon(hit_atom))//if it gets caught or the target can't be cuffed,
|
||||
return//abort
|
||||
var/mob/living/carbon/C = hit_atom
|
||||
@@ -348,7 +348,7 @@
|
||||
to_chat(C, "<span class='userdanger'>\The [src] ensnares you!</span>")
|
||||
C.Knockdown(knockdown)
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/bola/tactical//traitor variant
|
||||
/obj/item/restraints/legcuffs/bola/tactical//traitor variant
|
||||
name = "reinforced bola"
|
||||
desc = "A strong bola, made with a long steel chain. It looks heavy, enough so that it could trip somebody."
|
||||
icon_state = "bola_r"
|
||||
@@ -356,7 +356,7 @@
|
||||
origin_tech = "engineering=4;combat=3"
|
||||
knockdown = 20
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/bola/energy //For Security
|
||||
/obj/item/restraints/legcuffs/bola/energy //For Security
|
||||
name = "energy bola"
|
||||
desc = "A specialized hard-light bola designed to ensnare fleeing criminals and aid in arrests."
|
||||
icon_state = "ebola"
|
||||
@@ -364,9 +364,9 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
breakouttime = 60
|
||||
|
||||
/obj/item/weapon/restraints/legcuffs/bola/energy/throw_impact(atom/hit_atom)
|
||||
/obj/item/restraints/legcuffs/bola/energy/throw_impact(atom/hit_atom)
|
||||
if(iscarbon(hit_atom))
|
||||
var/obj/item/weapon/restraints/legcuffs/beartrap/B = new /obj/item/weapon/restraints/legcuffs/beartrap/energy/cyborg(get_turf(hit_atom))
|
||||
var/obj/item/restraints/legcuffs/beartrap/B = new /obj/item/restraints/legcuffs/beartrap/energy/cyborg(get_turf(hit_atom))
|
||||
B.Crossed(hit_atom)
|
||||
qdel(src)
|
||||
..()
|
||||
+19
-19
@@ -4,12 +4,12 @@
|
||||
//If the wielder fails to feed His Grace in time, He will devour them and become incredibly aggressive.
|
||||
//Leaving His Grace alone for some time will reset His thirst and put Him to sleep.
|
||||
//Using His Grace effectively requires extreme speed and care.
|
||||
/obj/item/weapon/his_grace
|
||||
/obj/item/his_grace
|
||||
name = "artistic toolbox"
|
||||
desc = "A toolbox painted bright green. Looking at it makes you feel uneasy."
|
||||
icon_state = "his_grace"
|
||||
item_state = "artistic_toolbox"
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
w_class = WEIGHT_CLASS_GIGANTIC
|
||||
origin_tech = "combat=4;engineering=4;syndicate=2"
|
||||
force = 12
|
||||
@@ -20,32 +20,32 @@
|
||||
var/prev_bloodthirst = HIS_GRACE_SATIATED
|
||||
var/force_bonus = 0
|
||||
|
||||
/obj/item/weapon/his_grace/Initialize()
|
||||
/obj/item/his_grace/Initialize()
|
||||
. = ..()
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
GLOB.poi_list += src
|
||||
|
||||
/obj/item/weapon/his_grace/Destroy()
|
||||
/obj/item/his_grace/Destroy()
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
GLOB.poi_list -= src
|
||||
for(var/mob/living/L in src)
|
||||
L.forceMove(get_turf(src))
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/his_grace/attack_self(mob/living/user)
|
||||
/obj/item/his_grace/attack_self(mob/living/user)
|
||||
if(!awakened)
|
||||
INVOKE_ASYNC(src, .proc/awaken, user)
|
||||
|
||||
/obj/item/weapon/his_grace/attack(mob/living/M, mob/user)
|
||||
/obj/item/his_grace/attack(mob/living/M, mob/user)
|
||||
if(awakened && M.stat)
|
||||
consume(M)
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/weapon/his_grace/CtrlClick(mob/user) //you can't pull his grace
|
||||
/obj/item/his_grace/CtrlClick(mob/user) //you can't pull his grace
|
||||
return
|
||||
|
||||
/obj/item/weapon/his_grace/examine(mob/user)
|
||||
/obj/item/his_grace/examine(mob/user)
|
||||
..()
|
||||
if(awakened)
|
||||
switch(bloodthirst)
|
||||
@@ -64,12 +64,12 @@
|
||||
else
|
||||
to_chat(user, "<span class='his_grace'>[src] is latched closed.</span>")
|
||||
|
||||
/obj/item/weapon/his_grace/relaymove(mob/living/user) //Allows changelings, etc. to climb out of Him after they revive, provided He isn't active
|
||||
/obj/item/his_grace/relaymove(mob/living/user) //Allows changelings, etc. to climb out of Him after they revive, provided He isn't active
|
||||
if(!awakened)
|
||||
user.forceMove(get_turf(src))
|
||||
user.visible_message("<span class='warning'>[user] scrambles out of [src]!</span>", "<span class='notice'>You climb out of [src]!</span>")
|
||||
|
||||
/obj/item/weapon/his_grace/process()
|
||||
/obj/item/his_grace/process()
|
||||
if(!bloodthirst)
|
||||
drowse()
|
||||
return
|
||||
@@ -85,7 +85,7 @@
|
||||
do_attack_animation(master, null, src)
|
||||
master.emote("scream")
|
||||
master.remove_status_effect(STATUS_EFFECT_HISGRACE)
|
||||
flags &= ~NODROP
|
||||
flags_1 &= ~NODROP_1
|
||||
master.Knockdown(60)
|
||||
master.adjustBruteLoss(master.maxHealth)
|
||||
playsound(master, 'sound/effects/splat.ogg', 100, 0)
|
||||
@@ -116,7 +116,7 @@
|
||||
else
|
||||
consume(L)
|
||||
|
||||
/obj/item/weapon/his_grace/proc/awaken(mob/user) //Good morning, Mr. Grace.
|
||||
/obj/item/his_grace/proc/awaken(mob/user) //Good morning, Mr. Grace.
|
||||
if(awakened)
|
||||
return
|
||||
awakened = TRUE
|
||||
@@ -129,7 +129,7 @@
|
||||
playsound(user, 'sound/effects/pope_entry.ogg', 100)
|
||||
icon_state = "his_grace_awakened"
|
||||
|
||||
/obj/item/weapon/his_grace/proc/drowse() //Good night, Mr. Grace.
|
||||
/obj/item/his_grace/proc/drowse() //Good night, Mr. Grace.
|
||||
if(!awakened)
|
||||
return
|
||||
var/turf/T = get_turf(src)
|
||||
@@ -144,7 +144,7 @@
|
||||
awakened = FALSE
|
||||
bloodthirst = 0
|
||||
|
||||
/obj/item/weapon/his_grace/proc/consume(mob/living/meal) //Here's your dinner, Mr. Grace.
|
||||
/obj/item/his_grace/proc/consume(mob/living/meal) //Here's your dinner, Mr. Grace.
|
||||
if(!meal)
|
||||
return
|
||||
meal.visible_message("<span class='warning'>[src] swings open and devours [meal]!</span>", "<span class='his_grace big bold'>[src] consumes you!</span>")
|
||||
@@ -160,7 +160,7 @@
|
||||
bloodthirst = HIS_GRACE_CONSUME_OWNER
|
||||
update_stats()
|
||||
|
||||
/obj/item/weapon/his_grace/proc/adjust_bloodthirst(amt)
|
||||
/obj/item/his_grace/proc/adjust_bloodthirst(amt)
|
||||
prev_bloodthirst = bloodthirst
|
||||
if(prev_bloodthirst < HIS_GRACE_CONSUME_OWNER)
|
||||
bloodthirst = Clamp(bloodthirst + amt, HIS_GRACE_SATIATED, HIS_GRACE_CONSUME_OWNER)
|
||||
@@ -168,21 +168,21 @@
|
||||
bloodthirst = Clamp(bloodthirst + amt, HIS_GRACE_CONSUME_OWNER, HIS_GRACE_FALL_ASLEEP)
|
||||
update_stats()
|
||||
|
||||
/obj/item/weapon/his_grace/proc/update_stats()
|
||||
flags &= ~NODROP
|
||||
/obj/item/his_grace/proc/update_stats()
|
||||
flags_1 &= ~NODROP_1
|
||||
var/mob/living/master = get_atom_on_turf(src, /mob/living)
|
||||
switch(bloodthirst)
|
||||
if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP)
|
||||
if(HIS_GRACE_CONSUME_OWNER > prev_bloodthirst)
|
||||
master.visible_message("<span class='userdanger'>[src] enters a frenzy!</span>")
|
||||
if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER)
|
||||
flags |= NODROP
|
||||
flags_1 |= NODROP_1
|
||||
if(HIS_GRACE_STARVING > prev_bloodthirst)
|
||||
master.visible_message("<span class='boldwarning'>[src] is starving!</span>", "<span class='his_grace big'>[src]'s bloodlust overcomes you. [src] must be fed, or you will become His meal.\
|
||||
[force_bonus < 15 ? " And still, His power grows.":""]</span>")
|
||||
force_bonus = max(force_bonus, 15)
|
||||
if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING)
|
||||
flags |= NODROP
|
||||
flags_1 |= NODROP_1
|
||||
if(HIS_GRACE_FAMISHED > prev_bloodthirst)
|
||||
master.visible_message("<span class='warning'>[src] is very hungry!</span>", "<span class='his_grace big'>Spines sink into your hand. [src] must feed immediately.\
|
||||
[force_bonus < 10 ? " His power grows.":""]</span>")
|
||||
+10
-10
@@ -1,4 +1,4 @@
|
||||
/obj/item/weapon/holosign_creator
|
||||
/obj/item/holosign_creator
|
||||
name = "holographic sign projector"
|
||||
desc = "A handy-dandy holographic projector that displays a janitorial sign."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
@@ -12,14 +12,14 @@
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
origin_tech = "magnets=1;programming=3"
|
||||
flags = NOBLUDGEON
|
||||
flags_1 = NOBLUDGEON_1
|
||||
var/list/signs = list()
|
||||
var/max_signs = 10
|
||||
var/creation_time = 0 //time to create a holosign in deciseconds.
|
||||
var/holosign_type = /obj/structure/holosign/wetsign
|
||||
var/holocreator_busy = FALSE //to prevent placing multiple holo barriers at once
|
||||
|
||||
/obj/item/weapon/holosign_creator/afterattack(atom/target, mob/user, flag)
|
||||
/obj/item/holosign_creator/afterattack(atom/target, mob/user, flag)
|
||||
if(flag)
|
||||
if(!check_allowed_items(target, 1))
|
||||
return
|
||||
@@ -50,17 +50,17 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>[src] is projecting at max capacity!</span>")
|
||||
|
||||
/obj/item/weapon/holosign_creator/attack(mob/living/carbon/human/M, mob/user)
|
||||
/obj/item/holosign_creator/attack(mob/living/carbon/human/M, mob/user)
|
||||
return
|
||||
|
||||
/obj/item/weapon/holosign_creator/attack_self(mob/user)
|
||||
/obj/item/holosign_creator/attack_self(mob/user)
|
||||
if(signs.len)
|
||||
for(var/H in signs)
|
||||
qdel(H)
|
||||
to_chat(user, "<span class='notice'>You clear all active holograms.</span>")
|
||||
|
||||
|
||||
/obj/item/weapon/holosign_creator/security
|
||||
/obj/item/holosign_creator/security
|
||||
name = "security holobarrier projector"
|
||||
desc = "A holographic projector that creates holographic security barriers."
|
||||
icon_state = "signmaker_sec"
|
||||
@@ -68,7 +68,7 @@
|
||||
creation_time = 30
|
||||
max_signs = 6
|
||||
|
||||
/obj/item/weapon/holosign_creator/engineering
|
||||
/obj/item/holosign_creator/engineering
|
||||
name = "engineering holobarrier projector"
|
||||
desc = "A holographic projector that creates holographic engineering barriers."
|
||||
icon_state = "signmaker_engi"
|
||||
@@ -76,7 +76,7 @@
|
||||
creation_time = 30
|
||||
max_signs = 6
|
||||
|
||||
/obj/item/weapon/holosign_creator/atmos
|
||||
/obj/item/holosign_creator/atmos
|
||||
name = "ATMOS holofan projector"
|
||||
desc = "A holographic projector that creates holographic barriers that prevent changes in atmosphere conditions."
|
||||
icon_state = "signmaker_engi"
|
||||
@@ -84,7 +84,7 @@
|
||||
creation_time = 0
|
||||
max_signs = 3
|
||||
|
||||
/obj/item/weapon/holosign_creator/cyborg
|
||||
/obj/item/holosign_creator/cyborg
|
||||
name = "Energy Barrier Projector"
|
||||
desc = "A holographic projector that creates fragile energy fields"
|
||||
creation_time = 15
|
||||
@@ -92,7 +92,7 @@
|
||||
holosign_type = /obj/structure/holosign/barrier/cyborg
|
||||
var/shock = 0
|
||||
|
||||
/obj/item/weapon/holosign_creator/cyborg/attack_self(mob/user)
|
||||
/obj/item/holosign_creator/cyborg/attack_self(mob/user)
|
||||
if(iscyborg(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
|
||||
+48
-48
@@ -1,4 +1,4 @@
|
||||
/obj/item/weapon/nullrod
|
||||
/obj/item/nullrod
|
||||
name = "null rod"
|
||||
desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of Nar-Sie's followers."
|
||||
icon_state = "nullrod"
|
||||
@@ -12,19 +12,19 @@
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/reskinned = FALSE
|
||||
|
||||
/obj/item/weapon/nullrod/suicide_act(mob/user)
|
||||
/obj/item/nullrod/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is killing [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to get closer to god!</span>")
|
||||
return (BRUTELOSS|FIRELOSS)
|
||||
|
||||
/obj/item/weapon/nullrod/attack_self(mob/user)
|
||||
/obj/item/nullrod/attack_self(mob/user)
|
||||
if(user.mind && (user.mind.isholy) && !reskinned)
|
||||
reskin_holy_weapon(user)
|
||||
|
||||
/obj/item/weapon/nullrod/proc/reskin_holy_weapon(mob/M)
|
||||
/obj/item/nullrod/proc/reskin_holy_weapon(mob/M)
|
||||
if(SSreligion.holy_weapon_type)
|
||||
return
|
||||
var/obj/item/weapon/nullrod/holy_weapon
|
||||
var/list/holy_weapons_list = typesof(/obj/item/weapon/nullrod)
|
||||
var/obj/item/nullrod/holy_weapon
|
||||
var/list/holy_weapons_list = typesof(/obj/item/nullrod)
|
||||
var/list/display_names = list()
|
||||
for(var/V in holy_weapons_list)
|
||||
var/atom/A = V
|
||||
@@ -48,18 +48,18 @@
|
||||
qdel(src)
|
||||
M.put_in_active_hand(holy_weapon)
|
||||
|
||||
/obj/item/weapon/nullrod/godhand
|
||||
/obj/item/nullrod/godhand
|
||||
icon_state = "disintegrate"
|
||||
item_state = "disintegrate"
|
||||
name = "god hand"
|
||||
desc = "This hand of yours glows with an awesome power!"
|
||||
flags = ABSTRACT | NODROP | DROPDEL
|
||||
flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
damtype = BURN
|
||||
attack_verb = list("punched", "cross countered", "pummeled")
|
||||
|
||||
/obj/item/weapon/nullrod/staff
|
||||
/obj/item/nullrod/staff
|
||||
icon_state = "godstaff-red"
|
||||
item_state = "godstaff-red"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
||||
@@ -72,18 +72,18 @@
|
||||
block_chance = 50
|
||||
var/shield_icon = "shield-red"
|
||||
|
||||
/obj/item/weapon/nullrod/staff/worn_overlays(isinhands)
|
||||
/obj/item/nullrod/staff/worn_overlays(isinhands)
|
||||
. = list()
|
||||
if(isinhands)
|
||||
. += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_LAYER + 0.01)
|
||||
|
||||
/obj/item/weapon/nullrod/staff/blue
|
||||
/obj/item/nullrod/staff/blue
|
||||
name = "blue holy staff"
|
||||
icon_state = "godstaff-blue"
|
||||
item_state = "godstaff-blue"
|
||||
shield_icon = "shield-old"
|
||||
|
||||
/obj/item/weapon/nullrod/claymore
|
||||
/obj/item/nullrod/claymore
|
||||
icon_state = "claymore"
|
||||
item_state = "claymore"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
@@ -97,12 +97,12 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
/obj/item/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
|
||||
if(attack_type == PROJECTILE_ATTACK)
|
||||
final_block_chance = 0 //Don't bring a sword to a gunfight
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/darkblade
|
||||
/obj/item/nullrod/claymore/darkblade
|
||||
icon_state = "cultblade"
|
||||
item_state = "cultblade"
|
||||
name = "dark blade"
|
||||
@@ -110,7 +110,7 @@
|
||||
slot_flags = SLOT_BELT
|
||||
hitsound = 'sound/hallucinations/growl1.ogg'
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/chainsaw_sword
|
||||
/obj/item/nullrod/claymore/chainsaw_sword
|
||||
icon_state = "chainswordon"
|
||||
item_state = "chainswordon"
|
||||
name = "sacred chainsaw sword"
|
||||
@@ -119,32 +119,32 @@
|
||||
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
|
||||
hitsound = 'sound/weapons/chainsawhit.ogg'
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/glowing
|
||||
/obj/item/nullrod/claymore/glowing
|
||||
icon_state = "swordon"
|
||||
item_state = "swordon"
|
||||
name = "force weapon"
|
||||
desc = "The blade glows with the power of faith. Or possibly a battery."
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/katana
|
||||
/obj/item/nullrod/claymore/katana
|
||||
name = "hanzo steel"
|
||||
desc = "Capable of cutting clean through a holy claymore."
|
||||
icon_state = "katana"
|
||||
item_state = "katana"
|
||||
slot_flags = SLOT_BELT | SLOT_BACK
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/multiverse
|
||||
/obj/item/nullrod/claymore/multiverse
|
||||
name = "extradimensional blade"
|
||||
desc = "Once the harbinger of an interdimensional war, its sharpness fluctuates wildly."
|
||||
icon_state = "multiverse"
|
||||
item_state = "multiverse"
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/multiverse/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
/obj/item/nullrod/claymore/multiverse/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
force = rand(1, 30)
|
||||
..()
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/saber
|
||||
/obj/item/nullrod/claymore/saber
|
||||
name = "light energy sword"
|
||||
hitsound = 'sound/weapons/blade1.ogg'
|
||||
icon_state = "swordblue"
|
||||
@@ -152,19 +152,19 @@
|
||||
desc = "If you strike me down, I shall become more robust than you can possibly imagine."
|
||||
slot_flags = SLOT_BELT
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/saber/red
|
||||
/obj/item/nullrod/claymore/saber/red
|
||||
name = "dark energy sword"
|
||||
icon_state = "swordred"
|
||||
item_state = "swordred"
|
||||
desc = "Woefully ineffective when used on steep terrain."
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/saber/pirate
|
||||
/obj/item/nullrod/claymore/saber/pirate
|
||||
name = "nautical energy sword"
|
||||
icon_state = "cutlass1"
|
||||
item_state = "cutlass1"
|
||||
desc = "Convincing HR that your religion involved piracy was no mean feat."
|
||||
|
||||
/obj/item/weapon/nullrod/sord
|
||||
/obj/item/nullrod/sord
|
||||
name = "\improper UNREAL SORD"
|
||||
desc = "This thing is so unspeakably HOLY you are having a hard time even holding it."
|
||||
icon_state = "sord"
|
||||
@@ -177,7 +177,7 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
/obj/item/weapon/nullrod/scythe
|
||||
/obj/item/nullrod/scythe
|
||||
icon_state = "scythe1"
|
||||
item_state = "scythe1"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
|
||||
@@ -190,7 +190,7 @@
|
||||
sharpness = IS_SHARP
|
||||
attack_verb = list("chopped", "sliced", "cut", "reaped")
|
||||
|
||||
/obj/item/weapon/nullrod/scythe/vibro
|
||||
/obj/item/nullrod/scythe/vibro
|
||||
icon_state = "hfrequency0"
|
||||
item_state = "hfrequency1"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
@@ -201,7 +201,7 @@
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
|
||||
|
||||
/obj/item/weapon/nullrod/scythe/spellblade
|
||||
/obj/item/nullrod/scythe/spellblade
|
||||
icon_state = "spellblade"
|
||||
item_state = "spellblade"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
@@ -211,7 +211,7 @@
|
||||
desc = "The blade grants the wielder nearly limitless power...if they can figure out how to turn it on, that is."
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
|
||||
/obj/item/weapon/nullrod/scythe/talking
|
||||
/obj/item/nullrod/scythe/talking
|
||||
icon_state = "talking_sword"
|
||||
item_state = "talking_sword"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
@@ -222,7 +222,7 @@
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
var/possessed = FALSE
|
||||
|
||||
/obj/item/weapon/nullrod/scythe/talking/attack_self(mob/living/user)
|
||||
/obj/item/nullrod/scythe/talking/attack_self(mob/living/user)
|
||||
if(possessed)
|
||||
return
|
||||
|
||||
@@ -250,13 +250,13 @@
|
||||
to_chat(user, "The blade is dormant. Maybe you can try again later.")
|
||||
possessed = FALSE
|
||||
|
||||
/obj/item/weapon/nullrod/scythe/talking/Destroy()
|
||||
/obj/item/nullrod/scythe/talking/Destroy()
|
||||
for(var/mob/living/simple_animal/shade/S in contents)
|
||||
to_chat(S, "You were destroyed!")
|
||||
qdel(S)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/nullrod/hammmer
|
||||
/obj/item/nullrod/hammmer
|
||||
icon_state = "hammeron"
|
||||
item_state = "hammeron"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi'
|
||||
@@ -267,7 +267,7 @@
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
attack_verb = list("smashed", "bashed", "hammered", "crunched")
|
||||
|
||||
/obj/item/weapon/nullrod/chainsaw
|
||||
/obj/item/nullrod/chainsaw
|
||||
name = "chainsaw hand"
|
||||
desc = "Good? Bad? You're the guy with the chainsaw hand."
|
||||
icon_state = "chainsaw_on"
|
||||
@@ -275,12 +275,12 @@
|
||||
lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
flags = NODROP | ABSTRACT
|
||||
flags_1 = NODROP_1 | ABSTRACT_1
|
||||
sharpness = IS_SHARP
|
||||
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
|
||||
hitsound = 'sound/weapons/chainsawhit.ogg'
|
||||
|
||||
/obj/item/weapon/nullrod/clown
|
||||
/obj/item/nullrod/clown
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
icon_state = "clownrender"
|
||||
item_state = "render"
|
||||
@@ -290,7 +290,7 @@
|
||||
sharpness = IS_SHARP
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
|
||||
/obj/item/weapon/nullrod/whip
|
||||
/obj/item/nullrod/whip
|
||||
name = "holy whip"
|
||||
desc = "What a terrible night to be on Space Station 13."
|
||||
icon_state = "chain"
|
||||
@@ -301,7 +301,7 @@
|
||||
attack_verb = list("whipped", "lashed")
|
||||
hitsound = 'sound/weapons/chainhit.ogg'
|
||||
|
||||
/obj/item/weapon/nullrod/fedora
|
||||
/obj/item/nullrod/fedora
|
||||
name = "atheist's fedora"
|
||||
desc = "The brim of the hat is as sharp as your wit. The edge would hurt almost as much as disproving the existence of God."
|
||||
icon_state = "fedora"
|
||||
@@ -315,18 +315,18 @@
|
||||
sharpness = IS_SHARP
|
||||
attack_verb = list("enlightened", "redpilled")
|
||||
|
||||
/obj/item/weapon/nullrod/armblade
|
||||
/obj/item/nullrod/armblade
|
||||
name = "dark blessing"
|
||||
desc = "Particularly twisted dieties grant gifts of dubious value."
|
||||
icon_state = "arm_blade"
|
||||
item_state = "arm_blade"
|
||||
lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi'
|
||||
flags = ABSTRACT | NODROP
|
||||
flags_1 = ABSTRACT_1 | NODROP_1
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
sharpness = IS_SHARP
|
||||
|
||||
/obj/item/weapon/nullrod/carp
|
||||
/obj/item/nullrod/carp
|
||||
name = "carp-sie plushie"
|
||||
desc = "An adorable stuffed toy that resembles the god of all carp. The teeth look pretty sharp. Activate it to receive the blessing of Carp-Sie."
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
@@ -337,14 +337,14 @@
|
||||
hitsound = 'sound/weapons/bite.ogg'
|
||||
var/used_blessing = FALSE
|
||||
|
||||
/obj/item/weapon/nullrod/carp/attack_self(mob/living/user)
|
||||
/obj/item/nullrod/carp/attack_self(mob/living/user)
|
||||
if(used_blessing)
|
||||
else if(user.mind && (user.mind.isholy))
|
||||
to_chat(user, "You are blessed by Carp-Sie. Wild space carp will no longer attack you.")
|
||||
user.faction |= "carp"
|
||||
used_blessing = TRUE
|
||||
|
||||
/obj/item/weapon/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking
|
||||
/obj/item/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking
|
||||
name = "monk's staff"
|
||||
desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, it is now used to harass the clown."
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
@@ -354,13 +354,13 @@
|
||||
sharpness = IS_BLUNT
|
||||
hitsound = "swing_hit"
|
||||
attack_verb = list("smashed", "slammed", "whacked", "thwacked")
|
||||
icon = 'icons/obj/weapons.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "bostaff0"
|
||||
item_state = "bostaff0"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
|
||||
|
||||
/obj/item/weapon/nullrod/tribal_knife
|
||||
/obj/item/nullrod/tribal_knife
|
||||
icon_state = "crysknife"
|
||||
item_state = "crysknife"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi'
|
||||
@@ -372,24 +372,24 @@
|
||||
slot_flags = null
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
flags_2 = SLOWS_WHILE_IN_HAND_2
|
||||
|
||||
/obj/item/weapon/nullrod/tribal_knife/Initialize(mapload)
|
||||
/obj/item/nullrod/tribal_knife/Initialize(mapload)
|
||||
..()
|
||||
SET_SECONDARY_FLAG(src, SLOWS_WHILE_IN_HAND)
|
||||
|
||||
/obj/item/weapon/nullrod/tribal_knife/New()
|
||||
/obj/item/nullrod/tribal_knife/New()
|
||||
..()
|
||||
START_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/nullrod/tribal_knife/Destroy()
|
||||
/obj/item/nullrod/tribal_knife/Destroy()
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
. = ..()
|
||||
|
||||
/obj/item/weapon/nullrod/tribal_knife/process()
|
||||
/obj/item/nullrod/tribal_knife/process()
|
||||
slowdown = rand(-2, 2)
|
||||
|
||||
|
||||
/obj/item/weapon/nullrod/pitchfork
|
||||
/obj/item/nullrod/pitchfork
|
||||
icon_state = "pitchfork0"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi'
|
||||
+12
-12
@@ -1,4 +1,4 @@
|
||||
/obj/item/weapon/implant
|
||||
/obj/item/implant
|
||||
name = "implant"
|
||||
icon = 'icons/obj/implants.dmi'
|
||||
icon_state = "generic" //Shows up as the action button icon
|
||||
@@ -9,19 +9,19 @@
|
||||
item_color = "b"
|
||||
var/allow_multiple = FALSE
|
||||
var/uses = -1
|
||||
flags = DROPDEL
|
||||
flags_1 = DROPDEL_1
|
||||
|
||||
|
||||
/obj/item/weapon/implant/proc/trigger(emote, mob/living/carbon/source)
|
||||
/obj/item/implant/proc/trigger(emote, mob/living/carbon/source)
|
||||
return
|
||||
|
||||
/obj/item/weapon/implant/proc/activate()
|
||||
/obj/item/implant/proc/activate()
|
||||
return
|
||||
|
||||
/obj/item/weapon/implant/ui_action_click()
|
||||
/obj/item/implant/ui_action_click()
|
||||
activate("action_button")
|
||||
|
||||
/obj/item/weapon/implant/proc/can_be_implanted_in(mob/living/target) // for human-only and other special requirements
|
||||
/obj/item/implant/proc/can_be_implanted_in(mob/living/target) // for human-only and other special requirements
|
||||
return TRUE
|
||||
|
||||
/mob/living/proc/can_be_implanted()
|
||||
@@ -38,13 +38,13 @@
|
||||
//What does the implant do upon injection?
|
||||
//return 1 if the implant injects
|
||||
//return 0 if there is no room for implant / it fails
|
||||
/obj/item/weapon/implant/proc/implant(mob/living/target, mob/user, silent = 0)
|
||||
/obj/item/implant/proc/implant(mob/living/target, mob/user, silent = 0)
|
||||
LAZYINITLIST(target.implants)
|
||||
if(!target.can_be_implanted() || !can_be_implanted_in(target))
|
||||
return 0
|
||||
for(var/X in target.implants)
|
||||
if(istype(X, type))
|
||||
var/obj/item/weapon/implant/imp_e = X
|
||||
var/obj/item/implant/imp_e = X
|
||||
if(!allow_multiple)
|
||||
if(imp_e.uses < initial(imp_e.uses)*2)
|
||||
if(uses == -1)
|
||||
@@ -72,7 +72,7 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/implant/proc/removed(mob/living/source, silent = 0, special = 0)
|
||||
/obj/item/implant/proc/removed(mob/living/source, silent = 0, special = 0)
|
||||
src.loc = null
|
||||
imp_in = null
|
||||
source.implants -= src
|
||||
@@ -85,14 +85,14 @@
|
||||
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/implant/Destroy()
|
||||
/obj/item/implant/Destroy()
|
||||
if(imp_in)
|
||||
removed(imp_in)
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/implant/proc/get_data()
|
||||
/obj/item/implant/proc/get_data()
|
||||
return "No information available"
|
||||
|
||||
/obj/item/weapon/implant/dropped(mob/user)
|
||||
/obj/item/implant/dropped(mob/user)
|
||||
. = 1
|
||||
..()
|
||||
+5
-5
@@ -1,4 +1,4 @@
|
||||
/obj/item/weapon/implant/abductor
|
||||
/obj/item/implant/abductor
|
||||
name = "recall implant"
|
||||
desc = "Returns you to the mothership."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
@@ -8,7 +8,7 @@
|
||||
var/obj/machinery/abductor/pad/home
|
||||
var/cooldown = 30
|
||||
|
||||
/obj/item/weapon/implant/abductor/activate()
|
||||
/obj/item/implant/abductor/activate()
|
||||
if(cooldown == initial(cooldown))
|
||||
home.Retrieve(imp_in,1)
|
||||
cooldown = 0
|
||||
@@ -16,13 +16,13 @@
|
||||
else
|
||||
to_chat(imp_in, "<span class='warning'>You must wait [30 - cooldown] seconds to use [src] again!</span>")
|
||||
|
||||
/obj/item/weapon/implant/abductor/process()
|
||||
/obj/item/implant/abductor/process()
|
||||
if(cooldown < initial(cooldown))
|
||||
cooldown++
|
||||
if(cooldown == initial(cooldown))
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/weapon/implant/abductor/implant(mob/living/target, mob/user)
|
||||
/obj/item/implant/abductor/implant(mob/living/target, mob/user)
|
||||
if(..())
|
||||
var/obj/machinery/abductor/console/console
|
||||
if(ishuman(target))
|
||||
@@ -37,7 +37,7 @@
|
||||
home = console.pad
|
||||
return 1
|
||||
|
||||
/obj/item/weapon/implant/abductor/proc/get_team_console(var/team)
|
||||
/obj/item/implant/abductor/proc/get_team_console(var/team)
|
||||
var/obj/machinery/abductor/console/console
|
||||
for(var/obj/machinery/abductor/console/c in GLOB.machines)
|
||||
if(c.team == team)
|
||||
+11
-11
@@ -1,11 +1,11 @@
|
||||
/obj/item/weapon/implant/chem
|
||||
/obj/item/implant/chem
|
||||
name = "chem implant"
|
||||
desc = "Injects things."
|
||||
icon_state = "reagents"
|
||||
origin_tech = "materials=3;biotech=4"
|
||||
container_type = OPENCONTAINER
|
||||
container_type = OPENCONTAINER_1
|
||||
|
||||
/obj/item/weapon/implant/chem/get_data()
|
||||
/obj/item/implant/chem/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Robust Corp MJ-420 Prisoner Management Implant<BR>
|
||||
<b>Life:</b> Deactivates upon death but remains within the body.<BR>
|
||||
@@ -21,20 +21,20 @@
|
||||
<b>Integrity:</b> Implant will last so long as the subject is alive."}
|
||||
return dat
|
||||
|
||||
/obj/item/weapon/implant/chem/New()
|
||||
/obj/item/implant/chem/New()
|
||||
..()
|
||||
create_reagents(50)
|
||||
GLOB.tracked_chem_implants += src
|
||||
|
||||
/obj/item/weapon/implant/chem/Destroy()
|
||||
/obj/item/implant/chem/Destroy()
|
||||
. = ..()
|
||||
GLOB.tracked_chem_implants -= src
|
||||
|
||||
/obj/item/weapon/implant/chem/trigger(emote, mob/source)
|
||||
/obj/item/implant/chem/trigger(emote, mob/source)
|
||||
if(emote == "deathgasp")
|
||||
activate(reagents.total_volume)
|
||||
|
||||
/obj/item/weapon/implant/chem/activate(cause)
|
||||
/obj/item/implant/chem/activate(cause)
|
||||
if(!cause || !imp_in)
|
||||
return 0
|
||||
var/mob/living/carbon/R = imp_in
|
||||
@@ -50,13 +50,13 @@
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/weapon/implantcase/chem
|
||||
/obj/item/implantcase/chem
|
||||
name = "implant case - 'Remote Chemical'"
|
||||
desc = "A glass case containing a remote chemical implant."
|
||||
imp_type = /obj/item/weapon/implant/chem
|
||||
imp_type = /obj/item/implant/chem
|
||||
|
||||
/obj/item/weapon/implantcase/chem/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/reagent_containers/syringe) && imp)
|
||||
/obj/item/implantcase/chem/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/reagent_containers/syringe) && imp)
|
||||
W.afterattack(imp, user, TRUE, params)
|
||||
return TRUE
|
||||
else
|
||||
+7
-7
@@ -1,23 +1,23 @@
|
||||
/obj/item/weapon/implant/sad_trombone
|
||||
/obj/item/implant/sad_trombone
|
||||
name = "sad trombone implant"
|
||||
activated = 0
|
||||
|
||||
/obj/item/weapon/implant/sad_trombone/get_data()
|
||||
/obj/item/implant/sad_trombone/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Honk Co. Sad Trombone Implant<BR>
|
||||
<b>Life:</b> Activates upon death.<BR>
|
||||
"}
|
||||
return dat
|
||||
|
||||
/obj/item/weapon/implant/sad_trombone/trigger(emote, mob/source)
|
||||
/obj/item/implant/sad_trombone/trigger(emote, mob/source)
|
||||
if(emote == "deathgasp")
|
||||
playsound(loc, 'sound/misc/sadtrombone.ogg', 50, 0)
|
||||
|
||||
/obj/item/weapon/implanter/sad_trombone
|
||||
/obj/item/implanter/sad_trombone
|
||||
name = "implanter (sad_trombone)"
|
||||
imp_type = /obj/item/weapon/implant/sad_trombone
|
||||
imp_type = /obj/item/implant/sad_trombone
|
||||
|
||||
/obj/item/weapon/implantcase/sad_trombone
|
||||
/obj/item/implantcase/sad_trombone
|
||||
name = "implant case - 'Sad Trombone'"
|
||||
desc = "A glass case containing a sad trombone implant."
|
||||
imp_type = /obj/item/weapon/implant/sad_trombone
|
||||
imp_type = /obj/item/implant/sad_trombone
|
||||
+6
-6
@@ -1,23 +1,23 @@
|
||||
//Exile implants will allow you to use the station gate, but not return home.
|
||||
//This will allow security to exile badguys/for badguys to exile their kill targets
|
||||
|
||||
/obj/item/weapon/implant/exile
|
||||
/obj/item/implant/exile
|
||||
name = "exile implant"
|
||||
desc = "Prevents you from returning from away missions"
|
||||
origin_tech = "materials=2;biotech=3;magnets=2;bluespace=3"
|
||||
activated = 0
|
||||
|
||||
/obj/item/weapon/implant/exile/get_data()
|
||||
/obj/item/implant/exile/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Nanotrasen Employee Exile Implant<BR>
|
||||
<b>Implant Details:</b> The onboard gateway system has been modified to reject entry by individuals containing this implant<BR>"}
|
||||
return dat
|
||||
|
||||
/obj/item/weapon/implanter/exile
|
||||
/obj/item/implanter/exile
|
||||
name = "implanter (exile)"
|
||||
imp_type = /obj/item/weapon/implant/exile
|
||||
imp_type = /obj/item/implant/exile
|
||||
|
||||
/obj/item/weapon/implantcase/exile
|
||||
/obj/item/implantcase/exile
|
||||
name = "implant case - 'Exile'"
|
||||
desc = "A glass case containing an exile implant."
|
||||
imp_type = /obj/item/weapon/implant/exile
|
||||
imp_type = /obj/item/implant/exile
|
||||
+16
-16
@@ -1,4 +1,4 @@
|
||||
/obj/item/weapon/implant/explosive
|
||||
/obj/item/implant/explosive
|
||||
name = "microbomb implant"
|
||||
desc = "And boom goes the weasel."
|
||||
icon_state = "explosive"
|
||||
@@ -12,7 +12,7 @@
|
||||
var/popup = FALSE // is the DOUWANNABLOWUP window open?
|
||||
var/active = FALSE
|
||||
|
||||
/obj/item/weapon/implant/explosive/get_data()
|
||||
/obj/item/implant/explosive/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Robust Corp RX-78 Employee Management Implant<BR>
|
||||
<b>Life:</b> Activates upon death.<BR>
|
||||
@@ -24,11 +24,11 @@
|
||||
"}
|
||||
return dat
|
||||
|
||||
/obj/item/weapon/implant/explosive/trigger(emote, mob/source)
|
||||
/obj/item/implant/explosive/trigger(emote, mob/source)
|
||||
if(emote == "deathgasp")
|
||||
activate("death")
|
||||
|
||||
/obj/item/weapon/implant/explosive/activate(cause)
|
||||
/obj/item/implant/explosive/activate(cause)
|
||||
if(!cause || !imp_in || active)
|
||||
return 0
|
||||
if(cause == "action_button" && !popup)
|
||||
@@ -44,7 +44,7 @@
|
||||
active = TRUE
|
||||
var/turf/boomturf = get_turf(imp_in)
|
||||
var/area/A = get_area(boomturf)
|
||||
message_admins("[ADMIN_LOOKUPFLW(imp_in)] has activated their [name] at [A.name] [ADMIN_JMP(boomturf)].")
|
||||
message_admins("[ADMIN_LOOKUPFLW(imp_in)] has activated their [name] at [A.name] [ADMIN_JMP(boomturf)], with cause of [cause].")
|
||||
//If the delay is short, just blow up already jeez
|
||||
if(delay <= 7)
|
||||
explosion(src,heavy,medium,weak,weak, flame_range = weak)
|
||||
@@ -54,10 +54,10 @@
|
||||
return
|
||||
timed_explosion()
|
||||
|
||||
/obj/item/weapon/implant/explosive/implant(mob/living/target)
|
||||
/obj/item/implant/explosive/implant(mob/living/target)
|
||||
for(var/X in target.implants)
|
||||
if(istype(X, type))
|
||||
var/obj/item/weapon/implant/explosive/imp_e = X
|
||||
var/obj/item/implant/explosive/imp_e = X
|
||||
imp_e.heavy += heavy
|
||||
imp_e.medium += medium
|
||||
imp_e.weak += weak
|
||||
@@ -67,7 +67,7 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/implant/explosive/proc/timed_explosion()
|
||||
/obj/item/implant/explosive/proc/timed_explosion()
|
||||
imp_in.visible_message("<span class='warning'>[imp_in] starts beeping ominously!</span>")
|
||||
playsound(loc, 'sound/items/timer.ogg', 30, 0)
|
||||
sleep(delay*0.25)
|
||||
@@ -85,7 +85,7 @@
|
||||
imp_in.gib(1)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/weapon/implant/explosive/macro
|
||||
/obj/item/implant/explosive/macro
|
||||
name = "macrobomb implant"
|
||||
desc = "And boom goes the weasel. And everything else nearby."
|
||||
icon_state = "explosive"
|
||||
@@ -95,14 +95,14 @@
|
||||
heavy = 4
|
||||
delay = 70
|
||||
|
||||
/obj/item/weapon/implant/explosive/macro/implant(mob/living/target)
|
||||
/obj/item/implant/explosive/macro/implant(mob/living/target)
|
||||
for(var/X in target.implants)
|
||||
if(istype(X, type))
|
||||
return 0
|
||||
|
||||
for(var/Y in target.implants)
|
||||
if(istype(Y, /obj/item/weapon/implant/explosive))
|
||||
var/obj/item/weapon/implant/explosive/imp_e = Y
|
||||
if(istype(Y, /obj/item/implant/explosive))
|
||||
var/obj/item/implant/explosive/imp_e = Y
|
||||
heavy += imp_e.heavy
|
||||
medium += imp_e.medium
|
||||
weak += imp_e.weak
|
||||
@@ -113,11 +113,11 @@
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/weapon/implanter/explosive
|
||||
/obj/item/implanter/explosive
|
||||
name = "implanter (explosive)"
|
||||
imp_type = /obj/item/weapon/implant/explosive
|
||||
imp_type = /obj/item/implant/explosive
|
||||
|
||||
/obj/item/weapon/implantcase/explosive
|
||||
/obj/item/implantcase/explosive
|
||||
name = "implant case - 'Explosive'"
|
||||
desc = "A glass case containing an explosive implant."
|
||||
imp_type = /obj/item/weapon/implant/explosive
|
||||
imp_type = /obj/item/implant/explosive
|
||||
+7
-7
@@ -1,4 +1,4 @@
|
||||
/obj/item/weapon/implant/freedom
|
||||
/obj/item/implant/freedom
|
||||
name = "freedom implant"
|
||||
desc = "Use this to escape from those evil Red Shirts."
|
||||
icon_state = "freedom"
|
||||
@@ -7,7 +7,7 @@
|
||||
uses = 4
|
||||
|
||||
|
||||
/obj/item/weapon/implant/freedom/activate()
|
||||
/obj/item/implant/freedom/activate()
|
||||
uses--
|
||||
to_chat(imp_in, "You feel a faint click.")
|
||||
if(iscarbon(imp_in))
|
||||
@@ -17,7 +17,7 @@
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/item/weapon/implant/freedom/get_data()
|
||||
/obj/item/implant/freedom/get_data()
|
||||
var/dat = {"
|
||||
<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Freedom Beacon<BR>
|
||||
@@ -34,11 +34,11 @@ No Implant Specifics"}
|
||||
return dat
|
||||
|
||||
|
||||
/obj/item/weapon/implanter/freedom
|
||||
/obj/item/implanter/freedom
|
||||
name = "implanter (freedom)"
|
||||
imp_type = /obj/item/weapon/implant/freedom
|
||||
imp_type = /obj/item/implant/freedom
|
||||
|
||||
/obj/item/weapon/implantcase/freedom
|
||||
/obj/item/implantcase/freedom
|
||||
name = "implant case - 'Freedom'"
|
||||
desc = "A glass case containing a freedom implant."
|
||||
imp_type = /obj/item/weapon/implant/freedom
|
||||
imp_type = /obj/item/implant/freedom
|
||||
+8
-8
@@ -1,15 +1,15 @@
|
||||
/obj/item/weapon/implant/gang
|
||||
/obj/item/implant/gang
|
||||
name = "gang implant"
|
||||
desc = "Makes you a gangster or such."
|
||||
activated = 0
|
||||
origin_tech = "materials=2;biotech=4;programming=4;syndicate=3"
|
||||
var/datum/gang/gang
|
||||
|
||||
/obj/item/weapon/implant/gang/New(loc,var/setgang)
|
||||
/obj/item/implant/gang/New(loc,var/setgang)
|
||||
..()
|
||||
gang = setgang
|
||||
|
||||
/obj/item/weapon/implant/gang/get_data()
|
||||
/obj/item/implant/gang/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Criminal brainwash implant<BR>
|
||||
<b>Life:</b> A few seconds after injection.<BR>
|
||||
@@ -21,9 +21,9 @@
|
||||
<b>Integrity:</b> Implant's EMP function will destroy itself in the process."}
|
||||
return dat
|
||||
|
||||
/obj/item/weapon/implant/gang/implant(mob/living/target, mob/user, silent = 0)
|
||||
/obj/item/implant/gang/implant(mob/living/target, mob/user, silent = 0)
|
||||
if(..())
|
||||
for(var/obj/item/weapon/implant/I in target.implants)
|
||||
for(var/obj/item/implant/I in target.implants)
|
||||
if(I != src)
|
||||
qdel(I)
|
||||
|
||||
@@ -44,12 +44,12 @@
|
||||
qdel(src)
|
||||
return 0
|
||||
|
||||
/obj/item/weapon/implanter/gang
|
||||
/obj/item/implanter/gang
|
||||
name = "implanter (gang)"
|
||||
|
||||
/obj/item/weapon/implanter/gang/New(loc, gang)
|
||||
/obj/item/implanter/gang/New(loc, gang)
|
||||
if(!gang)
|
||||
qdel(src)
|
||||
return
|
||||
imp = new /obj/item/weapon/implant/gang(src,gang)
|
||||
imp = new /obj/item/implant/gang(src,gang)
|
||||
..()
|
||||
+7
-7
@@ -1,4 +1,4 @@
|
||||
/obj/item/weapon/implant/krav_maga
|
||||
/obj/item/implant/krav_maga
|
||||
name = "krav maga implant"
|
||||
desc = "Teaches you the arts of Krav Maga in 5 short instructional videos beamed directly into your eyeballs."
|
||||
icon = 'icons/obj/wizard.dmi'
|
||||
@@ -7,7 +7,7 @@
|
||||
origin_tech = "materials=2;biotech=4;combat=5;syndicate=4"
|
||||
var/datum/martial_art/krav_maga/style = new
|
||||
|
||||
/obj/item/weapon/implant/krav_maga/get_data()
|
||||
/obj/item/implant/krav_maga/get_data()
|
||||
var/dat = {"<b>Implant Specifications:</b><BR>
|
||||
<b>Name:</b> Krav Maga Implant<BR>
|
||||
<b>Life:</b> 4 hours after death of host<BR>
|
||||
@@ -15,7 +15,7 @@
|
||||
<b>Function:</b> Teaches even the clumsiest host the arts of Krav Maga."}
|
||||
return dat
|
||||
|
||||
/obj/item/weapon/implant/krav_maga/activate()
|
||||
/obj/item/implant/krav_maga/activate()
|
||||
var/mob/living/carbon/human/H = imp_in
|
||||
if(!ishuman(H))
|
||||
return
|
||||
@@ -26,12 +26,12 @@
|
||||
else
|
||||
style.teach(H,1)
|
||||
|
||||
/obj/item/weapon/implanter/krav_maga
|
||||
/obj/item/implanter/krav_maga
|
||||
name = "implanter (krav maga)"
|
||||
imp_type = /obj/item/weapon/implant/krav_maga
|
||||
imp_type = /obj/item/implant/krav_maga
|
||||
|
||||
/obj/item/weapon/implantcase/krav_maga
|
||||
/obj/item/implantcase/krav_maga
|
||||
name = "implant case - 'Krav Maga'"
|
||||
desc = "A glass case containing an implant that can teach the user the arts of Krav Maga."
|
||||
imp_type = /obj/item/weapon/implant/krav_maga
|
||||
imp_type = /obj/item/implant/krav_maga
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user