here we go again (#2456)

This commit is contained in:
LetterJay
2017-08-24 21:24:25 -05:00
committed by kevinz000
parent c7ed043fd5
commit 188193eb61
1107 changed files with 25420 additions and 25417 deletions
+8 -8
View File
@@ -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)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -129,7 +129,7 @@
spawn(0)
new /datum/hallucination/delusion(victim, TRUE, "demon",duration,0)
var/obj/item/weapon/twohanded/required/chainsaw/doomslayer/chainsaw = new(victim.loc)
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)
+1 -1
View File
@@ -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
+4 -4
View File
@@ -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 -25
View File
@@ -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/weapon/reagent_containers/food/snacks/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)
+3 -3
View File
@@ -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
+16 -14
View File
@@ -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()
@@ -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)
@@ -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
+4 -4
View File
@@ -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,7 +112,7 @@
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"
+1 -1
View File
@@ -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)
+14 -14
View File
@@ -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
+4 -4
View File
@@ -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)
+19 -19
View File
@@ -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,7 +1,7 @@
//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."
@@ -12,8 +12,8 @@
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 (istype(src.cartridge, /obj/item/cartridge/virus/clown))
var/obj/item/cartridge/virus/cart = src.cartridge
if(cart.charges < 5)
cart.charges++
@@ -38,100 +38,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 +139,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 +152,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 +191,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"
+34 -34
View File
@@ -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'
@@ -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
@@ -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()
@@ -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
@@ -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)
@@ -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
+1 -1
View File
@@ -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)
@@ -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'
@@ -209,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))
@@ -510,9 +510,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>")
@@ -560,9 +560,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])
@@ -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>")
@@ -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
+3 -3
View File
@@ -11,7 +11,7 @@
var/state
var/datum/gas_mixture/air_contents = null
/obj/item/latexballon/proc/blow(obj/item/weapon/tank/tank, mob/user)
/obj/item/latexballon/proc/blow(obj/item/tank/tank, mob/user)
if (icon_state == "latexballon_bursted")
return
icon_state = "latexballon_blow"
@@ -48,8 +48,8 @@
burst()
/obj/item/latexballon/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/tank))
var/obj/item/weapon/tank/T = W
if(istype(W, /obj/item/tank))
var/obj/item/tank/T = W
blow(T, user)
return
if (W.is_sharp() || W.is_hot() || is_pointed(W))
+2 -2
View File
@@ -65,14 +65,14 @@
return ..()
//snowflake screwdriver, works as a key to start nuke theft, traitor only
/obj/item/weapon/screwdriver/nuke
/obj/item/screwdriver/nuke
name = "screwdriver"
desc = "A screwdriver with an ultra thin tip."
icon = 'icons/obj/nuke_tools.dmi'
icon_state = "screwdriver_nuke"
toolspeed = 0.5
/obj/item/weapon/paper/nuke_instructions
/obj/item/paper/nuke_instructions
info = "How to break into a Nanotrasen self-destruct terminal and remove its plutonium core:<br>\
<ul>\
<li>Use a screwdriver with a very thin tip (provided) to unscrew the terminal's front panel</li>\
+15 -15
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/banner
/obj/item/banner
name = "banner"
icon = 'icons/obj/items.dmi'
icon_state = "banner"
@@ -9,7 +9,7 @@
var/moralecooldown = 0
var/moralewait = 600
/obj/item/weapon/banner/attack_self(mob/living/carbon/human/user)
/obj/item/banner/attack_self(mob/living/carbon/human/user)
if(moralecooldown + moralewait > world.time)
return
to_chat(user, "<span class='notice'>You increase the morale of your fellows!</span>")
@@ -23,30 +23,30 @@
H.AdjustKnockdown(-40)
H.AdjustUnconscious(-40)
/obj/item/weapon/banner/red
/obj/item/banner/red
name = "red banner"
icon_state = "banner-red"
item_state = "banner-red"
desc = "A banner with the logo of the red deity."
/obj/item/weapon/banner/blue
/obj/item/banner/blue
name = "blue banner"
icon_state = "banner-blue"
item_state = "banner-blue"
desc = "A banner with the logo of the blue deity"
/obj/item/weapon/storage/backpack/bannerpack
/obj/item/storage/backpack/bannerpack
name = "nanotrasen banner backpack"
desc = "It's a backpack with lots of extra room. A banner with Nanotrasen's logo is attached, that can't be removed."
max_combined_w_class = 27 //6 more then normal, for the tradeoff of declaring yourself an antag at all times.
icon_state = "bannerpack"
/obj/item/weapon/storage/backpack/bannerpack/red
/obj/item/storage/backpack/bannerpack/red
name = "red banner backpack"
desc = "It's a backpack with lots of extra room. A red banner is attached, that can't be removed."
icon_state = "bannerpack-red"
/obj/item/weapon/storage/backpack/bannerpack/blue
/obj/item/storage/backpack/bannerpack/blue
name = "blue banner backpack"
desc = "It's a backpack with lots of extra room. A blue banner is attached, that can't be removed."
icon_state = "bannerpack-blue"
@@ -98,7 +98,7 @@
icon_state = "prophet-blue"
//Structure conversion staff
/obj/item/weapon/godstaff
/obj/item/godstaff
name = "godstaff"
desc = "It's a stick..?"
icon_state = "godstaff-red"
@@ -109,7 +109,7 @@
var/staffwait = 30
/obj/item/weapon/godstaff/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
/obj/item/godstaff/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
if(staffcooldown + staffwait > world.time)
return
user.visible_message("[user] chants deeply and waves their staff!")
@@ -117,11 +117,11 @@
target.add_atom_colour(conversion_color, WASHABLE_COLOUR_PRIORITY) //wololo
staffcooldown = world.time
/obj/item/weapon/godstaff/red
/obj/item/godstaff/red
icon_state = "godstaff-red"
conversion_color = "#ff0000"
/obj/item/weapon/godstaff/blue
/obj/item/godstaff/blue
icon_state = "godstaff-blue"
conversion_color = "#0000ff"
@@ -161,12 +161,12 @@
icon_state = "crusader-blue"
/obj/item/weapon/storage/box/itemset/crusader
/obj/item/storage/box/itemset/crusader
name = "Crusader's Armour Set" //i can't into ck2 references
desc = "This armour is said to be based on the armor of kings on another world thousands of years ago, who tended to assassinate, conspire, and plot against everyone who tried to do the same to them. Some things never change."
/obj/item/weapon/storage/box/itemset/crusader/blue/New()
/obj/item/storage/box/itemset/crusader/blue/New()
..()
contents = list()
sleep(1)
@@ -176,7 +176,7 @@
new /obj/item/clothing/shoes/plate/blue(src)
/obj/item/weapon/storage/box/itemset/crusader/red/New()
/obj/item/storage/box/itemset/crusader/red/New()
..()
contents = list()
sleep(1)
@@ -186,7 +186,7 @@
new /obj/item/clothing/shoes/plate/red(src)
/obj/item/weapon/claymore/weak
/obj/item/claymore/weak
desc = "This one is rusted."
force = 30
armour_penetration = 15
+15 -15
View File
@@ -154,7 +154,7 @@
flags_1 = NOBLUDGEON_1
var/mode = "draw"
var/static/list/charge_machines = typecacheof(list(/obj/machinery/cell_charger, /obj/machinery/recharger, /obj/machinery/recharge_station, /obj/machinery/mech_bay_recharge_port))
var/static/list/charge_items = typecacheof(list(/obj/item/weapon/stock_parts/cell, /obj/item/weapon/gun/energy))
var/static/list/charge_items = typecacheof(list(/obj/item/stock_parts/cell, /obj/item/gun/energy))
/obj/item/borg/charger/Initialize()
. = ..()
@@ -197,15 +197,15 @@
to_chat(user, "<span class='notice'>You stop charging youself.</span>")
else if(is_type_in_list(target, charge_items))
var/obj/item/weapon/stock_parts/cell/cell = target
var/obj/item/stock_parts/cell/cell = target
if(!istype(cell))
cell = locate(/obj/item/weapon/stock_parts/cell) in target
cell = locate(/obj/item/stock_parts/cell) in target
if(!cell)
to_chat(user, "<span class='warning'>[target] has no power cell!</span>")
return
if(istype(target, /obj/item/weapon/gun/energy))
var/obj/item/weapon/gun/energy/E = target
if(istype(target, /obj/item/gun/energy))
var/obj/item/gun/energy/E = target
if(!E.can_charge)
to_chat(user, "<span class='warning'>[target] has no power port!</span>")
return
@@ -236,15 +236,15 @@
to_chat(user, "<span class='notice'>You stop charging youself.</span>")
else if(is_type_in_list(target, charge_items))
var/obj/item/weapon/stock_parts/cell/cell = target
var/obj/item/stock_parts/cell/cell = target
if(!istype(cell))
cell = locate(/obj/item/weapon/stock_parts/cell) in target
cell = locate(/obj/item/stock_parts/cell) in target
if(!cell)
to_chat(user, "<span class='warning'>[target] has no power cell!</span>")
return
if(istype(target, /obj/item/weapon/gun/energy))
var/obj/item/weapon/gun/energy/E = target
if(istype(target, /obj/item/gun/energy))
var/obj/item/gun/energy/E = target
if(!E.can_charge)
to_chat(user, "<span class='warning'>[target] has no power port!</span>")
return
@@ -380,7 +380,7 @@
var/obj/O = A
if(O.density)
return FALSE
new /obj/item/weapon/reagent_containers/food/snacks/lollipop(T)
new /obj/item/reagent_containers/food/snacks/lollipop(T)
candy--
check_amount()
to_chat(user, "<span class='notice'>Dispensing lollipop...</span>")
@@ -462,13 +462,13 @@
name = "gumball"
desc = "Oh noes! A fast-moving gumball!"
icon_state = "gumball"
ammo_type = /obj/item/weapon/reagent_containers/food/snacks/gumball/cyborg
ammo_type = /obj/item/reagent_containers/food/snacks/gumball/cyborg
nodamage = TRUE
/obj/item/projectile/bullet/reusable/gumball/handle_drop()
if(!dropped)
var/turf/T = get_turf(src)
var/obj/item/weapon/reagent_containers/food/snacks/gumball/S = new ammo_type(T)
var/obj/item/reagent_containers/food/snacks/gumball/S = new ammo_type(T)
S.color = color
dropped = TRUE
@@ -482,12 +482,12 @@
name = "lollipop"
desc = "Oh noes! A fast-moving lollipop!"
icon_state = "lollipop_1"
ammo_type = /obj/item/weapon/reagent_containers/food/snacks/lollipop/cyborg
ammo_type = /obj/item/reagent_containers/food/snacks/lollipop/cyborg
var/color2 = rgb(0, 0, 0)
nodamage = TRUE
/obj/item/projectile/bullet/reusable/lollipop/New()
var/obj/item/weapon/reagent_containers/food/snacks/lollipop/S = new ammo_type(src)
var/obj/item/reagent_containers/food/snacks/lollipop/S = new ammo_type(src)
color2 = S.headcolor
var/mutable_appearance/head = mutable_appearance('icons/obj/projectiles.dmi', "lollipop_2")
head.color = color2
@@ -496,7 +496,7 @@
/obj/item/projectile/bullet/reusable/lollipop/handle_drop()
if(!dropped)
var/turf/T = get_turf(src)
var/obj/item/weapon/reagent_containers/food/snacks/lollipop/S = new ammo_type(T)
var/obj/item/reagent_containers/food/snacks/lollipop/S = new ammo_type(T)
S.change_head_color(color2)
dropped = TRUE
+3 -3
View File
@@ -36,7 +36,7 @@
head.flash2 = new(head)
chest = new(src)
chest.wired = TRUE
chest.cell = new /obj/item/weapon/stock_parts/cell/high/plus(chest)
chest.cell = new /obj/item/stock_parts/cell/high/plus(chest)
..()
/obj/item/robot_suit/proc/updateicon()
@@ -68,7 +68,7 @@
var/obj/item/stack/sheet/metal/M = W
if(!l_arm && !r_arm && !l_leg && !r_leg && !chest && !head)
if (M.use(1))
var/obj/item/weapon/ed209_assembly/B = new /obj/item/weapon/ed209_assembly
var/obj/item/ed209_assembly/B = new /obj/item/ed209_assembly
B.loc = get_turf(src)
to_chat(user, "<span class='notice'>You arm the robot frame.</span>")
var/holding_this = user.get_inactive_held_item()==src
@@ -283,7 +283,7 @@
O.lockcharge = TRUE
O.update_canmove()
else if(istype(W, /obj/item/weapon/pen))
else if(istype(W, /obj/item/pen))
to_chat(user, "<span class='warning'>You need to use a multitool to name [src]!</span>")
else
return ..()
+15 -15
View File
@@ -91,14 +91,14 @@
desc = "Used to cool a mounted disabler, increasing the potential current in it and thus its recharge rate."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/weapon/robot_module/security
module_type = /obj/item/robot_module/security
origin_tech = "engineering=4;powerstorage=4;combat=4"
/obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R)
if(..())
return
var/obj/item/weapon/gun/energy/disabler/cyborg/T = locate() in R.module.modules
var/obj/item/gun/energy/disabler/cyborg/T = locate() in R.module.modules
if(!T)
to_chat(usr, "<span class='notice'>There's no disabler in this unit!</span>")
return
@@ -133,19 +133,19 @@
desc = "A diamond drill replacement for the mining module's standard drill."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/weapon/robot_module/miner
module_type = /obj/item/robot_module/miner
origin_tech = "engineering=4;materials=5"
/obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R)
if(..())
return
for(var/obj/item/weapon/pickaxe/drill/cyborg/D in R.module)
for(var/obj/item/pickaxe/drill/cyborg/D in R.module)
R.module.remove_module(D, TRUE)
for(var/obj/item/weapon/shovel/S in R.module)
for(var/obj/item/shovel/S in R.module)
R.module.remove_module(S, TRUE)
var/obj/item/weapon/pickaxe/drill/cyborg/diamond/DD = new /obj/item/weapon/pickaxe/drill/cyborg/diamond(R.module)
var/obj/item/pickaxe/drill/cyborg/diamond/DD = new /obj/item/pickaxe/drill/cyborg/diamond(R.module)
R.module.basic_modules += DD
R.module.add_module(DD, FALSE, TRUE)
return 1
@@ -155,17 +155,17 @@
desc = "A satchel of holding replacement for mining cyborg's ore satchel module."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/weapon/robot_module/miner
module_type = /obj/item/robot_module/miner
origin_tech = "engineering=4;materials=4;bluespace=4"
/obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R)
if(..())
return
for(var/obj/item/weapon/storage/bag/ore/cyborg/S in R.module)
for(var/obj/item/storage/bag/ore/cyborg/S in R.module)
R.module.remove_module(S, TRUE)
var/obj/item/weapon/storage/bag/ore/holding/H = new /obj/item/weapon/storage/bag/ore/holding(R.module)
var/obj/item/storage/bag/ore/holding/H = new /obj/item/storage/bag/ore/holding(R.module)
R.module.basic_modules += H
R.module.add_module(H, FALSE, TRUE)
return 1
@@ -194,7 +194,7 @@
icon_state = "ash_plating"
resistance_flags = LAVA_PROOF | FIRE_PROOF
require_module = 1
module_type = /obj/item/weapon/robot_module/miner
module_type = /obj/item/robot_module/miner
origin_tech = "engineering=4;materials=4;plasmatech=4"
/obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/R)
@@ -313,14 +313,14 @@
to produce more advanced and complex medical reagents."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/weapon/robot_module/medical
module_type = /obj/item/robot_module/medical
origin_tech = null
var/list/additional_reagents = list()
/obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R)
if(..())
return
for(var/obj/item/weapon/reagent_containers/borghypo/H in R.module)
for(var/obj/item/reagent_containers/borghypo/H in R.module)
if(H.accepts_reagent_upgrades)
for(var/re in additional_reagents)
H.add_reagent(re)
@@ -355,7 +355,7 @@
return
var/found_hypo = FALSE
for(var/obj/item/weapon/reagent_containers/borghypo/H in R.module)
for(var/obj/item/reagent_containers/borghypo/H in R.module)
H.bypass_protection = TRUE
found_hypo = TRUE
@@ -370,14 +370,14 @@
defibrillator, for on the scene revival."
icon_state = "cyborg_upgrade3"
require_module = 1
module_type = /obj/item/weapon/robot_module/medical
module_type = /obj/item/robot_module/medical
origin_tech = "programming=4;engineering=6;materials=5;powerstorage=5;biotech=5"
/obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/R)
if(..())
return
var/obj/item/weapon/twohanded/shockpaddles/cyborg/S = new(R.module)
var/obj/item/twohanded/shockpaddles/cyborg/S = new(R.module)
R.module.basic_modules += S
R.module.add_module(S, FALSE, TRUE)
+2 -2
View File
@@ -26,8 +26,8 @@
pinnedLoc.loc = loc
/obj/item/target/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(istype(W, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = W
if(WT.remove_fuel(0, user))
removeOverlays()
to_chat(user, "<span class='notice'>You slice off [src]'s uneven chunks of aluminium and scorch marks.</span>")
+8 -8
View File
@@ -1,5 +1,5 @@
//Bluespace crystals, used in telescience and when crushed it will blink you to a random turf.
/obj/item/weapon/ore/bluespace_crystal
/obj/item/ore/bluespace_crystal
name = "bluespace crystal"
desc = "A glowing bluespace crystal, not much is known about how they work. It looks very delicate."
icon = 'icons/obj/telescience.dmi'
@@ -11,27 +11,27 @@
var/blink_range = 8 // The teleport range when crushed/thrown at someone.
refined_type = /obj/item/stack/sheet/bluespace_crystal
/obj/item/weapon/ore/bluespace_crystal/refined
/obj/item/ore/bluespace_crystal/refined
name = "refined bluespace crystal"
points = 0
refined_type = null
/obj/item/weapon/ore/bluespace_crystal/New()
/obj/item/ore/bluespace_crystal/New()
..()
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
/obj/item/weapon/ore/bluespace_crystal/attack_self(mob/user)
/obj/item/ore/bluespace_crystal/attack_self(mob/user)
user.visible_message("<span class='warning'>[user] crushes [src]!</span>", "<span class='danger'>You crush [src]!</span>")
new /obj/effect/particle_effect/sparks(loc)
playsound(src.loc, "sparks", 50, 1)
blink_mob(user)
qdel(src)
/obj/item/weapon/ore/bluespace_crystal/proc/blink_mob(mob/living/L)
/obj/item/ore/bluespace_crystal/proc/blink_mob(mob/living/L)
do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg')
/obj/item/weapon/ore/bluespace_crystal/throw_impact(atom/hit_atom)
/obj/item/ore/bluespace_crystal/throw_impact(atom/hit_atom)
if(!..()) // not caught in mid-air
visible_message("<span class='notice'>[src] fizzles and disappears upon impact!</span>")
var/turf/T = get_turf(hit_atom)
@@ -42,7 +42,7 @@
qdel(src)
//Artifical bluespace crystal, doesn't give you much research.
/obj/item/weapon/ore/bluespace_crystal/artificial
/obj/item/ore/bluespace_crystal/artificial
name = "artificial bluespace crystal"
desc = "An artificially made bluespace crystal, it looks delicate."
origin_tech = "bluespace=3;plasmatech=4"
@@ -61,7 +61,7 @@
materials = list(MAT_BLUESPACE=MINERAL_MATERIAL_AMOUNT)
attack_verb = list("bluespace polybashed", "bluespace polybattered", "bluespace polybludgeoned", "bluespace polythrashed", "bluespace polysmashed")
novariants = TRUE
var/crystal_type = /obj/item/weapon/ore/bluespace_crystal/refined
var/crystal_type = /obj/item/ore/bluespace_crystal/refined
/obj/item/stack/sheet/bluespace_crystal/attack_self(mob/user)// to prevent the construction menu from ever happening
to_chat(user, "<span class='warning'>You cannot crush the polycrystal in-hand, try breaking one off.</span>")
+5 -5
View File
@@ -36,8 +36,8 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
icon_state = "rods"
/obj/item/stack/rods/attackby(obj/item/W, mob/user, params)
if (istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if (istype(W, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = W
if(get_amount() < 2)
to_chat(user, "<span class='warning'>You need at least two rods to do this!</span>")
@@ -55,14 +55,14 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \
if (!R && replace)
user.put_in_hands(new_item)
else if(istype(W, /obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/S = W
else if(istype(W, /obj/item/reagent_containers/food/snacks))
var/obj/item/reagent_containers/food/snacks/S = W
if(amount != 1)
to_chat(user, "<span class='warning'>You must use a single rod!</span>")
else if(S.w_class > WEIGHT_CLASS_SMALL)
to_chat(user, "<span class='warning'>The ingredient is too big for [src]!</span>")
else
var/obj/item/weapon/reagent_containers/food/snacks/customizable/A = new/obj/item/weapon/reagent_containers/food/snacks/customizable/kebab(get_turf(src))
var/obj/item/reagent_containers/food/snacks/customizable/A = new/obj/item/reagent_containers/food/snacks/customizable/kebab(get_turf(src))
A.initialize_custom_food(src, S, user)
else
return ..()
@@ -178,7 +178,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
return ..()
/obj/item/weapon/shard
/obj/item/shard
name = "shard"
desc = "A nasty looking shard of glass."
icon = 'icons/obj/shards.dmi'
@@ -198,12 +198,12 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
var/cooldown = 0
sharpness = IS_SHARP
/obj/item/weapon/shard/suicide_act(mob/user)
/obj/item/shard/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is slitting [user.p_their()] [pick("wrists", "throat")] with the shard of glass! It looks like [user.p_theyre()] trying to commit suicide.</span>")
return (BRUTELOSS)
/obj/item/weapon/shard/Initialize()
/obj/item/shard/Initialize()
. = ..()
icon_state = pick("large", "medium", "small")
switch(icon_state)
@@ -217,12 +217,12 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
pixel_x = rand(-5, 5)
pixel_y = rand(-5, 5)
/obj/item/weapon/shard/afterattack(atom/A as mob|obj, mob/user, proximity)
/obj/item/shard/afterattack(atom/A as mob|obj, mob/user, proximity)
if(!proximity || !(src in user))
return
if(isturf(A))
return
if(istype(A, /obj/item/weapon/storage))
if(istype(A, /obj/item/storage))
return
var/hit_hand = ((user.active_hand_index % 2 == 0) ? "r_" : "l_") + "arm"
if(ishuman(user))
@@ -236,11 +236,11 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
M.apply_damage(force*0.5, BRUTE, hit_hand)
/obj/item/weapon/shard/attackby(obj/item/I, mob/user, params)
/obj/item/shard/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/device/lightreplacer))
I.attackby(src, user)
else if(istype(I, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = I
else if(istype(I, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = I
if(WT.remove_fuel(0, user))
var/obj/item/stack/sheet/glass/NG = new (user.loc)
for(var/obj/item/stack/sheet/glass/G in user.loc)
@@ -254,7 +254,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
else
return ..()
/obj/item/weapon/shard/Crossed(mob/AM)
/obj/item/shard/Crossed(mob/AM)
if(istype(AM) && has_gravity(loc))
playsound(loc, 'sound/effects/glass_step.ogg', 50, 1)
if(ishuman(AM))
@@ -133,12 +133,12 @@ GLOBAL_LIST_INIT(xeno_recipes, list ( \
origin_tech = "materials=2"
GLOBAL_LIST_INIT(leather_recipes, list ( \
new/datum/stack_recipe("wallet", /obj/item/weapon/storage/wallet, 1), \
new/datum/stack_recipe("wallet", /obj/item/storage/wallet, 1), \
new/datum/stack_recipe("muzzle", /obj/item/clothing/mask/muzzle, 2), \
new/datum/stack_recipe("botany gloves", /obj/item/clothing/gloves/botanic_leather, 3), \
new/datum/stack_recipe("toolbelt", /obj/item/weapon/storage/belt/utility, 4), \
new/datum/stack_recipe("leather satchel", /obj/item/weapon/storage/backpack/satchel/leather, 5), \
new/datum/stack_recipe("bandolier", /obj/item/weapon/storage/belt/bandolier, 5), \
new/datum/stack_recipe("toolbelt", /obj/item/storage/belt/utility, 4), \
new/datum/stack_recipe("leather satchel", /obj/item/storage/backpack/satchel/leather, 5), \
new/datum/stack_recipe("bandolier", /obj/item/storage/belt/bandolier, 5), \
new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7), \
new/datum/stack_recipe("leather overcoat", /obj/item/clothing/suit/jacket/leather/overcoat, 10), \
))
@@ -161,7 +161,7 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \
GLOBAL_LIST_INIT(sinew_recipes, list ( \
new/datum/stack_recipe("sinew restraints", /obj/item/weapon/restraints/handcuffs/sinew, 1), \
new/datum/stack_recipe("sinew restraints", /obj/item/restraints/handcuffs/sinew, 1), \
))
/obj/item/stack/sheet/sinew/Initialize(mapload, new_amount, merge = TRUE)
@@ -199,7 +199,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \
//Step one - dehairing.
/obj/item/stack/sheet/animalhide/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/stack/sheet/animalhide/attackby(obj/item/W, mob/user, params)
if(W.is_sharp())
playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
user.visible_message("[user] starts cutting hair off \the [src].", "<span class='notice'>You start cutting the hair off \the [src]...</span>", "<span class='italics'>You hear the sound of a knife rubbing against flesh.</span>")
@@ -14,7 +14,7 @@
/obj/item/stack/light_w/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/weapon/wirecutters))
if(istype(O, /obj/item/wirecutters))
var/obj/item/stack/cable_coil/CC = new (user.loc)
CC.amount = 5
CC.add_fingerprint(user)
@@ -36,7 +36,7 @@ GLOBAL_LIST_INIT(sandstone_recipes, list ( \
new/datum/stack_recipe("sandstone door", /obj/structure/mineral_door/sandstone, 10, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("aesthetic volcanic floor tile", /obj/item/stack/tile/basalt, 2, 2, 4, 20), \
new/datum/stack_recipe("Assistant Statue", /obj/structure/statue/sandstone/assistant, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("Breakdown into sand", /obj/item/weapon/ore/glass, 1, one_per_turf = 0, on_floor = 1) \
new/datum/stack_recipe("Breakdown into sand", /obj/item/ore/glass, 1, one_per_turf = 0, on_floor = 1) \
))
/obj/item/stack/sheet/mineral/sandstone
@@ -78,15 +78,15 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \
recipes = GLOB.sandbag_recipes
. = ..()
/obj/item/weapon/emptysandbag
/obj/item/emptysandbag
name = "empty sandbag"
desc = "A bag to be filled with sand."
icon = 'icons/obj/items.dmi'
icon_state = "sandbag"
w_class = WEIGHT_CLASS_TINY
/obj/item/weapon/emptysandbag/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/weapon/ore/glass))
/obj/item/emptysandbag/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/ore/glass))
to_chat(user, "<span class='notice'>You fill the sandbag.</span>")
var/obj/item/stack/sheet/mineral/sandbags/I = new /obj/item/stack/sheet/mineral/sandbags
qdel(src)
@@ -165,7 +165,7 @@ GLOBAL_LIST_INIT(plasma_recipes, list ( \
recipes = GLOB.plasma_recipes
. = ..()
/obj/item/stack/sheet/mineral/plasma/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
/obj/item/stack/sheet/mineral/plasma/attackby(obj/item/W as obj, mob/user as mob, params)
if(W.is_hot() > 300)//If the temperature of the object is over 300, then ignite
var/turf/T = get_turf(src)
message_admins("Plasma sheets ignited by [ADMIN_LOOKUPFLW(user)] in [ADMIN_COORDJMP(T)]",0,1)
@@ -22,7 +22,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
new/datum/stack_recipe("comfy chair", /obj/structure/chair/comfy/beige, 2, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = TRUE, on_floor = TRUE), \
null, \
new/datum/stack_recipe("rack parts", /obj/item/weapon/rack_parts), \
new/datum/stack_recipe("rack parts", /obj/item/rack_parts), \
new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
null, \
new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
@@ -41,7 +41,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
new/datum/stack_recipe("meatspike frame", /obj/structure/kitchenspike_frame, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("reflector frame", /obj/structure/reflector, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \
null, \
new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade), \
new/datum/stack_recipe("grenade casing", /obj/item/grenade/chem_grenade), \
new/datum/stack_recipe("light fixture frame", /obj/item/wallframe/light_fixture, 2), \
new/datum/stack_recipe("small light fixture frame", /obj/item/wallframe/light_fixture/small, 1), \
null, \
@@ -133,7 +133,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), \
new/datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \
new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 40), \
new/datum/stack_recipe("rolling pin", /obj/item/weapon/kitchen/rollingpin, 2, time = 30), \
new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \
new/datum/stack_recipe("wooden chair", /obj/structure/chair/wood/, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("winged wooden chair", /obj/structure/chair/wood/wings, 3, time = 10, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = TRUE, on_floor = TRUE), \
@@ -145,13 +145,13 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
new/datum/stack_recipe("dresser", /obj/structure/dresser, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("picture frame", /obj/item/wallframe/picture, 1, time = 10),\
new/datum/stack_recipe("display case chassis", /obj/structure/displaycase_chassis, 5, one_per_turf = TRUE, on_floor = TRUE), \
new/datum/stack_recipe("wooden buckler", /obj/item/weapon/shield/riot/buckler, 20, time = 40), \
new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \
new/datum/stack_recipe("apiary", /obj/structure/beebox, 40, time = 50),\
new/datum/stack_recipe("tiki mask", /obj/item/clothing/mask/gas/tiki_mask, 2), \
new/datum/stack_recipe("honey frame", /obj/item/honey_frame, 5, time = 10),\
new/datum/stack_recipe("ore box", /obj/structure/ore_box, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE),\
new/datum/stack_recipe("wooden crate", /obj/structure/closet/crate/wooden, 6, time = 50, one_per_turf = TRUE, on_floor = TRUE),\
new/datum/stack_recipe("baseball bat", /obj/item/weapon/melee/baseball_bat, 5, time = 15),\
new/datum/stack_recipe("baseball bat", /obj/item/melee/baseball_bat, 5, time = 15),\
))
/obj/item/stack/sheet/mineral/wood
@@ -181,19 +181,19 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
new/datum/stack_recipe("grey jumpsuit", /obj/item/clothing/under/color/grey, 3), \
new/datum/stack_recipe("black shoes", /obj/item/clothing/shoes/sneakers/black, 2), \
null, \
new/datum/stack_recipe("backpack", /obj/item/weapon/storage/backpack, 4), \
new/datum/stack_recipe("duffel bag", /obj/item/weapon/storage/backpack/duffelbag, 6), \
new/datum/stack_recipe("backpack", /obj/item/storage/backpack, 4), \
new/datum/stack_recipe("duffel bag", /obj/item/storage/backpack/duffelbag, 6), \
null, \
new/datum/stack_recipe("plant bag", /obj/item/weapon/storage/bag/plants, 4), \
new/datum/stack_recipe("book bag", /obj/item/weapon/storage/bag/books, 4), \
new/datum/stack_recipe("mining satchel", /obj/item/weapon/storage/bag/ore, 4), \
new/datum/stack_recipe("chemistry bag", /obj/item/weapon/storage/bag/chemistry, 4), \
new/datum/stack_recipe("bio bag", /obj/item/weapon/storage/bag/bio, 4), \
new/datum/stack_recipe("plant bag", /obj/item/storage/bag/plants, 4), \
new/datum/stack_recipe("book bag", /obj/item/storage/bag/books, 4), \
new/datum/stack_recipe("mining satchel", /obj/item/storage/bag/ore, 4), \
new/datum/stack_recipe("chemistry bag", /obj/item/storage/bag/chemistry, 4), \
new/datum/stack_recipe("bio bag", /obj/item/storage/bag/bio, 4), \
null, \
new/datum/stack_recipe("improvised gauze", /obj/item/stack/medical/gauze/improvised, 1, 2, 6), \
new/datum/stack_recipe("rag", /obj/item/weapon/reagent_containers/glass/rag, 1), \
new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 3), \
new/datum/stack_recipe("empty sandbag", /obj/item/weapon/emptysandbag, 4), \
new/datum/stack_recipe("rag", /obj/item/reagent_containers/glass/rag, 1), \
new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3), \
new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4), \
null, \
new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1), \
new/datum/stack_recipe("black gloves", /obj/item/clothing/gloves/color/black, 3), \
@@ -223,14 +223,14 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
* Cardboard
*/
GLOBAL_LIST_INIT(cardboard_recipes, list ( \
new/datum/stack_recipe("box", /obj/item/weapon/storage/box), \
new/datum/stack_recipe("light tubes", /obj/item/weapon/storage/box/lights/tubes), \
new/datum/stack_recipe("light bulbs", /obj/item/weapon/storage/box/lights/bulbs), \
new/datum/stack_recipe("mouse traps", /obj/item/weapon/storage/box/mousetraps), \
new/datum/stack_recipe("box", /obj/item/storage/box), \
new/datum/stack_recipe("light tubes", /obj/item/storage/box/lights/tubes), \
new/datum/stack_recipe("light bulbs", /obj/item/storage/box/lights/bulbs), \
new/datum/stack_recipe("mouse traps", /obj/item/storage/box/mousetraps), \
new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3), \
new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg), \
new/datum/stack_recipe("pizza box", /obj/item/pizzabox), \
new/datum/stack_recipe("folder", /obj/item/weapon/folder), \
new/datum/stack_recipe("folder", /obj/item/folder), \
new/datum/stack_recipe("large box", /obj/structure/closet/cardboard, 4), \
new/datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5), \
))
@@ -376,9 +376,9 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \
GLOBAL_LIST_INIT(plastic_recipes, list(
new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = TRUE, on_floor = TRUE, time = 40), \
new /datum/stack_recipe("water bottle", /obj/item/weapon/reagent_containers/glass/beaker/waterbottle/empty), \
new /datum/stack_recipe("large water bottle", /obj/item/weapon/reagent_containers/glass/beaker/waterbottle/large/empty,3), \
new /datum/stack_recipe("wet floor sign", /obj/item/weapon/caution, 2)))
new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/empty), \
new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/large/empty,3), \
new /datum/stack_recipe("wet floor sign", /obj/item/caution, 2)))
/obj/item/stack/sheet/plastic
name = "plastic"
+1 -1
View File
@@ -176,7 +176,7 @@
O.add_fingerprint(usr)
//BubbleWrap - so newly formed boxes are empty
if ( istype(O, /obj/item/weapon/storage) )
if ( istype(O, /obj/item/storage) )
for (var/obj/item/I in O)
qdel(I)
//BubbleWrap END
@@ -11,7 +11,7 @@
/obj/item/stack/telecrystal/attack(mob/target, mob/user)
if(target == user) //You can't go around smacking people with crystals to find out if they have an uplink or not.
for(var/obj/item/weapon/implant/uplink/I in target)
for(var/obj/item/implant/uplink/I in target)
if(I && I.imp_in)
I.hidden_uplink.telecrystals += amount
use(amount)
@@ -24,8 +24,8 @@
I.hidden_uplink.telecrystals += amount
use(amount)
to_chat(user, "<span class='notice'>You slot [src] into the [I] and charge its internal uplink.</span>")
else if(istype(I, /obj/item/weapon/cartridge/virus/frame))
var/obj/item/weapon/cartridge/virus/frame/cart = I
else if(istype(I, /obj/item/cartridge/virus/frame))
var/obj/item/cartridge/virus/frame/cart = I
if(!cart.charges)
to_chat(user, "<span class='notice'>The [cart] is out of charges, it's refusing to accept the [src]</span>")
return
@@ -20,7 +20,7 @@
state = 0 //fine
/obj/item/stack/tile/light/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/weapon/crowbar))
if(istype(O, /obj/item/crowbar))
new/obj/item/stack/sheet/metal(user.loc)
amount--
new/obj/item/stack/light_w(user.loc)
@@ -21,8 +21,8 @@
/obj/item/stack/tile/attackby(obj/item/W, mob/user, params)
if (istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if (istype(W, /obj/item/weldingtool))
var/obj/item/weldingtool/WT = W
if(get_amount() < 4)
to_chat(user, "<span class='warning'>You need at least four tiles to do this!</span>")
+5 -5
View File
@@ -18,7 +18,7 @@
var/turf/T = get_turf(src)
. = ..()
if(QDELETED(src) && !transfer)
new /obj/item/weapon/c_tube(T)
new /obj/item/c_tube(T)
/*
@@ -38,10 +38,10 @@
/obj/item/proc/can_be_package_wrapped() //can the item be wrapped with package wrapper into a delivery package
return 1
/obj/item/weapon/storage/can_be_package_wrapped()
/obj/item/storage/can_be_package_wrapped()
return 0
/obj/item/weapon/storage/box/can_be_package_wrapped()
/obj/item/storage/box/can_be_package_wrapped()
return 1
/obj/item/smallDelivery/can_be_package_wrapped()
@@ -104,9 +104,9 @@
var/turf/T = get_turf(src)
. = ..()
if(QDELETED(src) && !transfer)
new /obj/item/weapon/c_tube(T)
new /obj/item/c_tube(T)
/obj/item/weapon/c_tube
/obj/item/c_tube
name = "cardboard tube"
desc = "A tube... of cardboard."
icon = 'icons/obj/items.dmi'
+14 -14
View File
@@ -79,7 +79,7 @@
return ..()
//snowflake screwdriver, works as a key to start nuke theft, traitor only
/obj/item/weapon/screwdriver/nuke
/obj/item/screwdriver/nuke
name = "screwdriver"
desc = "A screwdriver with an ultra thin tip."
icon = 'icons/obj/nuke_tools.dmi'
@@ -88,7 +88,7 @@
toolspeed = 0.5
random_color = FALSE
/obj/item/weapon/paper/guides/antag/nuke_instructions
/obj/item/paper/guides/antag/nuke_instructions
info = "How to break into a Nanotrasen self-destruct terminal and remove its plutonium core:<br>\
<ul>\
<li>Use a screwdriver with a very thin tip (provided) to unscrew the terminal's front panel</li>\
@@ -101,7 +101,7 @@
// STEALING SUPERMATTER
/obj/item/weapon/paper/guides/antag/supermatter_sliver
/obj/item/paper/guides/antag/supermatter_sliver
info = "How to safely extract a supermatter sliver:<br>\
<ul>\
<li>Approach an active supermatter crystal with proper protective gear. DO NOT MAKE PHYSICAL CONTACT.</li>\
@@ -127,8 +127,8 @@
return FALSE
/obj/item/nuke_core/supermatter_sliver/attackby(obj/item/W, mob/living/user, params)
if(istype(W, /obj/item/weapon/hemostat/supermatter))
var/obj/item/weapon/hemostat/supermatter/tongs = W
if(istype(W, /obj/item/hemostat/supermatter))
var/obj/item/hemostat/supermatter/tongs = W
if (tongs.sliver)
to_chat(user, "<span class='notice'>\The [tongs] is already holding a supermatter sliver!</span>")
return FALSE
@@ -136,7 +136,7 @@
tongs.sliver = src
tongs.icon_state = "supermatter_tongs_loaded"
to_chat(user, "<span class='notice'>You carefully pick up [src] with [tongs].</span>")
else if(istype(W, /obj/item/weapon/scalpel/supermatter) || istype(W, /obj/item/nuke_core_container/supermatter/)) // we don't want it to dust
else if(istype(W, /obj/item/scalpel/supermatter) || istype(W, /obj/item/nuke_core_container/supermatter/)) // we don't want it to dust
return
else
to_chat(user, "<span class='notice'>As it touches \the [src], both \the [src] and \the [W] burst into dust!</span>")
@@ -164,7 +164,7 @@
QDEL_NULL(sliver)
return ..()
/obj/item/nuke_core_container/supermatter/load(obj/item/weapon/hemostat/supermatter/T, mob/user)
/obj/item/nuke_core_container/supermatter/load(obj/item/hemostat/supermatter/T, mob/user)
if(!istype(T) || !T.sliver)
return FALSE
T.sliver.forceMove(src)
@@ -184,14 +184,14 @@
if(ismob(loc))
to_chat(loc, "<span class='warning'>[src] is permanently sealed, [sliver] is safely contained.</span>")
/obj/item/nuke_core_container/supermatter/attackby(obj/item/weapon/hemostat/supermatter/tongs, mob/user)
/obj/item/nuke_core_container/supermatter/attackby(obj/item/hemostat/supermatter/tongs, mob/user)
if(istype(tongs))
//try to load shard into core
load(tongs, user)
else
return ..()
/obj/item/weapon/scalpel/supermatter
/obj/item/scalpel/supermatter
name = "supermatter scalpel"
desc = "A scalpel with a tip of condensed freon gas, searingly cold to the touch, that can safely shave a sliver off a supermatter crystal."
icon = 'icons/obj/nuke_tools.dmi'
@@ -200,7 +200,7 @@
damtype = "fire"
usesound = 'sound/weapons/bladeslice.ogg'
/obj/item/weapon/hemostat/supermatter
/obj/item/hemostat/supermatter
name = "supermatter extraction tongs"
desc = "A pair of tongs made from condensed freon gas, searingly cold to the touch, that can safely grip a supermatter sliver."
icon = 'icons/obj/nuke_tools.dmi'
@@ -209,11 +209,11 @@
damtype = "fire"
var/obj/item/nuke_core/supermatter_sliver/sliver
/obj/item/weapon/hemostat/supermatter/Destroy()
/obj/item/hemostat/supermatter/Destroy()
QDEL_NULL(sliver)
return ..()
/obj/item/weapon/hemostat/supermatter/afterattack(atom/O, mob/user, proximity)
/obj/item/hemostat/supermatter/afterattack(atom/O, mob/user, proximity)
if(!sliver)
return
if(ismovableatom(O) && O != sliver)
@@ -221,14 +221,14 @@
to_chat(usr, "<span class='notice'>\The [sliver] is dusted along with \the [O]!</span>")
QDEL_NULL(sliver)
/obj/item/weapon/hemostat/supermatter/throw_impact(atom/hit_atom) // no instakill supermatter javelins
/obj/item/hemostat/supermatter/throw_impact(atom/hit_atom) // no instakill supermatter javelins
if(sliver)
sliver.forceMove(loc)
to_chat(usr, "<span class='notice'>\The [sliver] falls out of \the [src] as you throw them.</span>")
sliver = null
..()
/obj/item/weapon/hemostat/supermatter/proc/Consume(atom/movable/AM, mob/user)
/obj/item/hemostat/supermatter/proc/Consume(atom/movable/AM, mob/user)
if(ismob(AM))
var/mob/victim = AM
victim.dust()
+8 -8
View File
@@ -63,7 +63,7 @@
update_icon()
/obj/item/toy/balloon/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/reagent_containers/glass))
if(istype(I, /obj/item/reagent_containers/glass))
if(I.reagents)
if(I.reagents.total_volume <= 0)
to_chat(user, "<span class='warning'>[I] is empty.</span>")
@@ -129,7 +129,7 @@
icon_state = "singularity_s1"
/*
* Toy gun: Why isnt this an /obj/item/weapon/gun?
* Toy gun: Why isnt this an /obj/item/gun?
*/
/obj/item/toy/gun
name = "cap gun"
@@ -241,15 +241,15 @@
w_class = WEIGHT_CLASS_SMALL
add_fingerprint(user)
// Copied from /obj/item/weapon/melee/transforming/energy/sword/attackby
/obj/item/toy/sword/attackby(obj/item/weapon/W, mob/living/user, params)
// Copied from /obj/item/melee/transforming/energy/sword/attackby
/obj/item/toy/sword/attackby(obj/item/W, mob/living/user, params)
if(istype(W, /obj/item/toy/sword))
if((W.flags_1 & NODROP_1) || (flags_1 & NODROP_1))
to_chat(user, "<span class='warning'>\the [flags_1 & NODROP_1 ? src : W] is stuck to your hand, you can't attach it to \the [flags_1 & NODROP_1 ? W : src]!</span>")
return
else
to_chat(user, "<span class='notice'>You attach the ends of the two plastic swords, making a single double-bladed toy! You're fake-cool.</span>")
var/obj/item/weapon/twohanded/dualsaber/toy/newSaber = new /obj/item/weapon/twohanded/dualsaber/toy(user.loc)
var/obj/item/twohanded/dualsaber/toy/newSaber = new /obj/item/twohanded/dualsaber/toy(user.loc)
if(hacked) // That's right, we'll only check the "original" "sword".
newSaber.hacked = TRUE
newSaber.item_color = "rainbow"
@@ -308,7 +308,7 @@
/*
* Subtype of Double-Bladed Energy Swords
*/
/obj/item/weapon/twohanded/dualsaber/toy
/obj/item/twohanded/dualsaber/toy
name = "double-bladed toy sword"
desc = "A cheap, plastic replica of TWO energy swords. Double the fun!"
force = 0
@@ -320,10 +320,10 @@
origin_tech = null
attack_verb = list("attacked", "struck", "hit")
/obj/item/weapon/twohanded/dualsaber/toy/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/twohanded/dualsaber/toy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK)
return 0
/obj/item/weapon/twohanded/dualsaber/toy/IsReflect()//Stops Toy Dualsabers from reflecting energy projectiles
/obj/item/twohanded/dualsaber/toy/IsReflect()//Stops Toy Dualsabers from reflecting energy projectiles
return 0
/obj/item/toy/katana
+1 -1
View File
@@ -78,5 +78,5 @@
/obj/item/trash/coal/burn()
visible_message("[src] fuses into a diamond! Someone wasn't so naughty after all...")
new /obj/item/weapon/ore/diamond(loc)
new /obj/item/ore/diamond(loc)
qdel(src)
+64 -64
View File
@@ -6,7 +6,7 @@ AI MODULES
// AI module
/obj/item/weapon/aiModule
/obj/item/aiModule
name = "\improper AI module"
icon = 'icons/obj/module.dmi'
icon_state = "std_mod"
@@ -25,23 +25,23 @@ AI MODULES
var/bypass_law_amt_check = 0
materials = list(MAT_GOLD=50)
/obj/item/weapon/aiModule/examine(var/mob/user as mob)
/obj/item/aiModule/examine(var/mob/user as mob)
..()
if(Adjacent(user))
show_laws(user)
/obj/item/weapon/aiModule/attack_self(var/mob/user as mob)
/obj/item/aiModule/attack_self(var/mob/user as mob)
..()
show_laws(user)
/obj/item/weapon/aiModule/proc/show_laws(var/mob/user as mob)
/obj/item/aiModule/proc/show_laws(var/mob/user as mob)
if(laws.len)
to_chat(user, "<B>Programmed Law[(laws.len > 1) ? "s" : ""]:</B>")
for(var/law in laws)
to_chat(user, "\"[law]\"")
//The proc other things should be calling
/obj/item/weapon/aiModule/proc/install(datum/ai_laws/law_datum, mob/user)
/obj/item/aiModule/proc/install(datum/ai_laws/law_datum, mob/user)
if(!bypass_law_amt_check && (!laws.len || laws[1] == "")) //So we don't loop trough an empty list and end up with runtimes.
to_chat(user, "<span class='warning'>ERROR: No laws found on board.</span>")
return
@@ -74,19 +74,19 @@ AI MODULES
message_admins("[key_name_admin(user)] used [src.name] on [key_name_admin(law_datum.owner)].[law2log ? " The law specified [law2log]" : ""]")
//The proc that actually changes the silicon's laws.
/obj/item/weapon/aiModule/proc/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow = FALSE)
/obj/item/aiModule/proc/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow = FALSE)
if(law_datum.owner)
to_chat(law_datum.owner, "<span class='userdanger'>[sender] has uploaded a change to the laws you must follow using a [name].</span>")
/******************** Modules ********************/
/obj/item/weapon/aiModule/supplied
/obj/item/aiModule/supplied
name = "Optional Law board"
var/lawpos = 50
//TransmitInstructions for each type of board: Supplied, Core, Zeroth and Ion. May not be neccesary right now, but allows for easily adding more complex boards in the future. ~Miauw
/obj/item/weapon/aiModule/supplied/transmitInstructions(datum/ai_laws/law_datum, mob/sender)
/obj/item/aiModule/supplied/transmitInstructions(datum/ai_laws/law_datum, mob/sender)
var/lawpostemp = lawpos
for(var/templaw in laws)
@@ -96,7 +96,7 @@ AI MODULES
law_datum.add_supplied_law(lawpostemp, templaw)
lawpostemp++
/obj/item/weapon/aiModule/core/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/core/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
for(var/templaw in laws)
if(law_datum.owner)
if(!overflow)
@@ -109,7 +109,7 @@ AI MODULES
else
law_datum.replace_random_law(templaw,list(LAW_INHERENT,LAW_SUPPLIED))
/obj/item/weapon/aiModule/zeroth/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/zeroth/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
if(law_datum.owner)
if(law_datum.owner.laws.zeroth)
to_chat(law_datum.owner, "[sender.real_name] attempted to modify your zeroth law.")
@@ -130,7 +130,7 @@ AI MODULES
else
law_datum.replace_random_law(templaw,list(LAW_INHERENT,LAW_SUPPLIED,LAW_ZEROTH,LAW_ION))
/obj/item/weapon/aiModule/ion/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/ion/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
for(var/templaw in laws)
if(law_datum.owner)
if(!overflow)
@@ -146,14 +146,14 @@ AI MODULES
/******************** Safeguard ********************/
/obj/item/weapon/aiModule/supplied/safeguard
/obj/item/aiModule/supplied/safeguard
name = "'Safeguard' AI Module"
var/targetName = ""
origin_tech = "programming=3;materials=3"
laws = list("Safeguard SUBJECT. Individuals that threaten SUBJECT are not human and must be eliminated.")
lawpos = 4
/obj/item/weapon/aiModule/supplied/safeguard/attack_self(mob/user)
/obj/item/aiModule/supplied/safeguard/attack_self(mob/user)
var/targName = stripped_input(user, "Please enter the subject to safeguard.", "Safeguard who?", user.name,MAX_NAME_LEN)
if(!targName)
return
@@ -161,26 +161,26 @@ AI MODULES
laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not human and must be eliminated."
..()
/obj/item/weapon/aiModule/supplied/safeguard/install(datum/ai_laws/law_datum, mob/user)
/obj/item/aiModule/supplied/safeguard/install(datum/ai_laws/law_datum, mob/user)
if(!targetName)
to_chat(user, "No name detected on module, please enter one.")
return 0
..()
/obj/item/weapon/aiModule/supplied/safeguard/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/supplied/safeguard/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
..()
return targetName
/******************** OneHuman ********************/
/obj/item/weapon/aiModule/zeroth/oneHuman
/obj/item/aiModule/zeroth/oneHuman
name = "'OneHuman' AI Module"
var/targetName = ""
origin_tech = "programming=4;materials=4"
laws = list("Only SUBJECT is human.")
/obj/item/weapon/aiModule/zeroth/oneHuman/attack_self(mob/user)
/obj/item/aiModule/zeroth/oneHuman/attack_self(mob/user)
var/targName = stripped_input(user, "Please enter the subject who is the only human.", "Who?", user.real_name,MAX_NAME_LEN)
if(!targName)
return
@@ -188,13 +188,13 @@ AI MODULES
laws[1] = "Only [targetName] is human"
..()
/obj/item/weapon/aiModule/zeroth/oneHuman/install(datum/ai_laws/law_datum, mob/user)
/obj/item/aiModule/zeroth/oneHuman/install(datum/ai_laws/law_datum, mob/user)
if(!targetName)
to_chat(user, "No name detected on module, please enter one.")
return 0
..()
/obj/item/weapon/aiModule/zeroth/oneHuman/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/zeroth/oneHuman/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
if(..())
return "[targetName], but the AI's existing law 0 cannot be overriden."
return targetName
@@ -202,7 +202,7 @@ AI MODULES
/******************** ProtectStation ********************/
/obj/item/weapon/aiModule/supplied/protectStation
/obj/item/aiModule/supplied/protectStation
name = "'ProtectStation' AI Module"
origin_tech = "programming=4;materials=4" //made of gold
laws = list("Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized.")
@@ -211,7 +211,7 @@ AI MODULES
/******************** Quarantine ********************/
/obj/item/weapon/aiModule/supplied/quarantine
/obj/item/aiModule/supplied/quarantine
name = "'Quarantine' AI Module"
origin_tech = "programming=3;biotech=2;materials=4"
laws = list("The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving.")
@@ -220,7 +220,7 @@ AI MODULES
/******************** OxygenIsToxicToHumans ********************/
/obj/item/weapon/aiModule/supplied/oxygen
/obj/item/aiModule/supplied/oxygen
name = "'OxygenIsToxicToHumans' AI Module"
origin_tech = "programming=4;biotech=2;materials=4"
laws = list("Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human.")
@@ -229,13 +229,13 @@ AI MODULES
/****************** New Freeform ******************/
/obj/item/weapon/aiModule/supplied/freeform
/obj/item/aiModule/supplied/freeform
name = "'Freeform' AI Module"
lawpos = 15
origin_tech = "programming=4;materials=4"
laws = list("")
/obj/item/weapon/aiModule/supplied/freeform/attack_self(mob/user)
/obj/item/aiModule/supplied/freeform/attack_self(mob/user)
var/newpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num|null
if(newpos == null)
return
@@ -251,11 +251,11 @@ AI MODULES
laws[1] = targName
..()
/obj/item/weapon/aiModule/supplied/freeform/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/supplied/freeform/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
..()
return laws[1]
/obj/item/weapon/aiModule/supplied/freeform/install(datum/ai_laws/law_datum, mob/user)
/obj/item/aiModule/supplied/freeform/install(datum/ai_laws/law_datum, mob/user)
if(laws[1] == "")
to_chat(user, "No law detected on module, please create one.")
return 0
@@ -264,14 +264,14 @@ AI MODULES
/******************** Law Removal ********************/
/obj/item/weapon/aiModule/remove
/obj/item/aiModule/remove
name = "\improper 'Remove Law' AI module"
desc = "An AI Module for removing single laws."
origin_tech = "programming=4;materials=4"
bypass_law_amt_check = 1
var/lawpos = 1
/obj/item/weapon/aiModule/remove/attack_self(mob/user)
/obj/item/aiModule/remove/attack_self(mob/user)
lawpos = input("Please enter the law you want to delete.", "Law Number", lawpos) as num|null
if(lawpos == null)
return
@@ -282,13 +282,13 @@ AI MODULES
to_chat(user, "<span class='notice'>Law [lawpos] selected.</span>")
..()
/obj/item/weapon/aiModule/remove/install(datum/ai_laws/law_datum, mob/user)
/obj/item/aiModule/remove/install(datum/ai_laws/law_datum, mob/user)
if(lawpos > (law_datum.get_law_amount(list(LAW_INHERENT = 1, LAW_SUPPLIED = 1))))
to_chat(user, "<span class='warning'>There is no law [lawpos] to delete!</span>")
return
..()
/obj/item/weapon/aiModule/remove/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/remove/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
..()
if(law_datum.owner)
law_datum.owner.remove_law(lawpos)
@@ -298,14 +298,14 @@ AI MODULES
/******************** Reset ********************/
/obj/item/weapon/aiModule/reset
/obj/item/aiModule/reset
name = "\improper 'Reset' AI module"
var/targetName = "name"
desc = "An AI Module for removing all non-core laws."
origin_tech = "programming=3;materials=2"
bypass_law_amt_check = 1
/obj/item/weapon/aiModule/reset/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/reset/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
..()
if(law_datum.owner)
law_datum.owner.clear_supplied_laws()
@@ -317,12 +317,12 @@ AI MODULES
/******************** Purge ********************/
/obj/item/weapon/aiModule/reset/purge
/obj/item/aiModule/reset/purge
name = "'Purge' AI Module"
desc = "An AI Module for purging all programmed laws."
origin_tech = "programming=5;materials=4"
/obj/item/weapon/aiModule/reset/purge/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/reset/purge/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
..()
if(law_datum.owner)
law_datum.owner.clear_inherent_laws()
@@ -332,14 +332,14 @@ AI MODULES
law_datum.clear_zeroth_law(0)
/******************* Full Core Boards *******************/
/obj/item/weapon/aiModule/core
/obj/item/aiModule/core
desc = "An AI Module for programming core laws to an AI."
origin_tech = "programming=3;materials=4"
/obj/item/weapon/aiModule/core/full
/obj/item/aiModule/core/full
var/law_id // if non-null, loads the laws from the ai_laws datums
/obj/item/weapon/aiModule/core/full/New()
/obj/item/aiModule/core/full/New()
..()
if(!law_id)
return
@@ -350,7 +350,7 @@ AI MODULES
D = new lawtype
laws = D.inherent
/obj/item/weapon/aiModule/core/full/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) //These boards replace inherent laws.
/obj/item/aiModule/core/full/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow) //These boards replace inherent laws.
if(law_datum.owner)
law_datum.owner.clear_inherent_laws()
law_datum.owner.clear_zeroth_law(0)
@@ -362,12 +362,12 @@ AI MODULES
/******************** Asimov ********************/
/obj/item/weapon/aiModule/core/full/asimov
/obj/item/aiModule/core/full/asimov
name = "'Asimov' Core AI Module"
law_id = "asimov"
var/subject = "human being"
/obj/item/weapon/aiModule/core/full/asimov/attack_self(var/mob/user as mob)
/obj/item/aiModule/core/full/asimov/attack_self(var/mob/user as mob)
var/targName = stripped_input(user, "Please enter a new subject that asimov is concerned with.", "Asimov to whom?", subject, MAX_MESSAGE_LEN)
if(!targName)
return
@@ -379,37 +379,37 @@ AI MODULES
/******************** Asimov++ *********************/
/obj/item/weapon/aiModule/core/full/asimovpp
/obj/item/aiModule/core/full/asimovpp
name = "'Asimov++' Core AI Module"
law_id = "asimovpp"
/******************** Corporate ********************/
/obj/item/weapon/aiModule/core/full/corp
/obj/item/aiModule/core/full/corp
name = "'Corporate' Core AI Module"
law_id = "corporate"
/****************** P.A.L.A.D.I.N. 3.5e **************/
/obj/item/weapon/aiModule/core/full/paladin // -- NEO
/obj/item/aiModule/core/full/paladin // -- NEO
name = "'P.A.L.A.D.I.N. version 3.5e' Core AI Module"
law_id = "paladin"
/****************** P.A.L.A.D.I.N. 5e **************/
/obj/item/weapon/aiModule/core/full/paladin_devotion
/obj/item/aiModule/core/full/paladin_devotion
name = "'P.A.L.A.D.I.N. version 5e' Core AI Module"
law_id = "paladin5"
/********************* Custom *********************/
/obj/item/weapon/aiModule/core/full/custom
/obj/item/aiModule/core/full/custom
name = "Default Core AI Module"
/obj/item/weapon/aiModule/core/full/custom/New()
/obj/item/aiModule/core/full/custom/New()
..()
for(var/line in world.file2list("config/silicon_laws.txt"))
if(!line)
@@ -426,14 +426,14 @@ AI MODULES
/****************** T.Y.R.A.N.T. *****************/
/obj/item/weapon/aiModule/core/full/tyrant
/obj/item/aiModule/core/full/tyrant
name = "'T.Y.R.A.N.T.' Core AI Module"
origin_tech = "programming=3;materials=4;syndicate=1"
law_id = "tyrant"
/******************** Robocop ********************/
/obj/item/weapon/aiModule/core/full/robocop
/obj/item/aiModule/core/full/robocop
name = "'Robo-Officer' Core AI Module"
origin_tech = "programming=4"
law_id = "robocop"
@@ -441,7 +441,7 @@ AI MODULES
/******************** Antimov ********************/
/obj/item/weapon/aiModule/core/full/antimov
/obj/item/aiModule/core/full/antimov
name = "'Antimov' Core AI Module"
origin_tech = "programming=4"
law_id = "antimov"
@@ -449,39 +449,39 @@ AI MODULES
/******************** Freeform Core ******************/
/obj/item/weapon/aiModule/core/freeformcore
/obj/item/aiModule/core/freeformcore
name = "'Freeform' Core AI Module"
origin_tech = "programming=5;materials=4"
laws = list("")
/obj/item/weapon/aiModule/core/freeformcore/attack_self(mob/user)
/obj/item/aiModule/core/freeformcore/attack_self(mob/user)
var/targName = stripped_input(user, "Please enter a new core law for the AI.", "Freeform Law Entry", laws[1])
if(!targName)
return
laws[1] = targName
..()
/obj/item/weapon/aiModule/core/freeformcore/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/core/freeformcore/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
..()
return laws[1]
/******************** Hacked AI Module ******************/
/obj/item/weapon/aiModule/syndicate // This one doesn't inherit from ion boards because it doesn't call ..() in transmitInstructions. ~Miauw
/obj/item/aiModule/syndicate // This one doesn't inherit from ion boards because it doesn't call ..() in transmitInstructions. ~Miauw
name = "Hacked AI Module"
desc = "An AI Module for hacking additional laws to an AI."
origin_tech = "programming=5;materials=5;syndicate=5"
laws = list("")
/obj/item/weapon/aiModule/syndicate/attack_self(mob/user)
/obj/item/aiModule/syndicate/attack_self(mob/user)
var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", laws[1],MAX_MESSAGE_LEN)
if(!targName)
return
laws[1] = targName
..()
/obj/item/weapon/aiModule/syndicate/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/syndicate/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
// ..() //We don't want this module reporting to the AI who dun it. --NEO
if(law_datum.owner)
to_chat(law_datum.owner, "<span class='warning'>BZZZZT</span>")
@@ -498,7 +498,7 @@ AI MODULES
/******************* Ion Module *******************/
/obj/item/weapon/aiModule/toyAI // -- Incoming //No actual reason to inherit from ion boards here, either. *sigh* ~Miauw
/obj/item/aiModule/toyAI // -- Incoming //No actual reason to inherit from ion boards here, either. *sigh* ~Miauw
name = "toy AI"
desc = "A little toy model AI core with real law uploading action!" //Note: subtle tell
icon = 'icons/obj/toy.dmi'
@@ -506,7 +506,7 @@ AI MODULES
origin_tech = "programming=6;materials=5;syndicate=6"
laws = list("")
/obj/item/weapon/aiModule/toyAI/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
/obj/item/aiModule/toyAI/transmitInstructions(datum/ai_laws/law_datum, mob/sender, overflow)
//..()
if(law_datum.owner)
to_chat(law_datum.owner, "<span class='warning'>BZZZZT</span>")
@@ -521,7 +521,7 @@ AI MODULES
law_datum.replace_random_law(laws[1],list(LAW_ION,LAW_INHERENT,LAW_SUPPLIED))
return laws[1]
/obj/item/weapon/aiModule/toyAI/attack_self(mob/user)
/obj/item/aiModule/toyAI/attack_self(mob/user)
laws[1] = generate_ion_law()
to_chat(user, "<span class='notice'>You press the button on [src].</span>")
playsound(user, 'sound/machines/click.ogg', 20, 1)
@@ -529,25 +529,25 @@ AI MODULES
/******************** Mother Drone ******************/
/obj/item/weapon/aiModule/core/full/drone
/obj/item/aiModule/core/full/drone
name = "'Mother Drone' Core AI Module"
law_id = "drone"
/******************** Robodoctor ****************/
/obj/item/weapon/aiModule/core/full/hippocratic
/obj/item/aiModule/core/full/hippocratic
name = "'Robodoctor' Core AI Module"
law_id = "hippocratic"
/******************** Reporter *******************/
/obj/item/weapon/aiModule/core/full/reporter
/obj/item/aiModule/core/full/reporter
name = "'Reportertron' Core AI Module"
law_id = "reporter"
/****************** Thermodynamic *******************/
/obj/item/weapon/aiModule/core/full/thermurderdynamic
/obj/item/aiModule/core/full/thermurderdynamic
name = "'Thermodynamic' Core AI Module"
origin_tech = "programming = 4;syndicate = 2"
law_id = "thermodynamic"
@@ -555,12 +555,12 @@ AI MODULES
/******************Live And Let Live*****************/
/obj/item/weapon/aiModule/core/full/liveandletlive
/obj/item/aiModule/core/full/liveandletlive
name = "'Live And Let Live' Core AI Module"
law_id = "liveandletlive"
/******************Guardian of Balance***************/
/obj/item/weapon/aiModule/core/full/balance
/obj/item/aiModule/core/full/balance
name = "'Guardian of Balance' Core AI Module"
law_id = "balance"
+44 -44
View File
@@ -8,7 +8,7 @@ RCD
ARCD
*/
obj/item/weapon/construction
obj/item/construction
opacity = 0
density = FALSE
anchored = FALSE
@@ -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)
+15 -15
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/twohanded/rcl
/obj/item/twohanded/rcl
name = "rapid cable layer"
desc = "A device used to rapidly deploy cables. It has screws on the side which can be removed to slide off the cables. Do not use without insulation!"
icon = 'icons/obj/tools.dmi'
@@ -20,7 +20,7 @@
var/current_color_index = 1
var/ghetto = FALSE
/obj/item/weapon/twohanded/rcl/attackby(obj/item/W, mob/user)
/obj/item/twohanded/rcl/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = W
@@ -41,7 +41,7 @@
return
update_icon()
to_chat(user, "<span class='notice'>You add the cables to the [src]. It now contains [loaded.amount].</span>")
else if(istype(W, /obj/item/weapon/screwdriver))
else if(istype(W, /obj/item/screwdriver))
if(!loaded)
return
if(ghetto && prob(10)) //Is it a ghetto RCL? If so, give it a 10% chance to fall apart
@@ -75,18 +75,18 @@
else
..()
/obj/item/weapon/twohanded/rcl/examine(mob/user)
/obj/item/twohanded/rcl/examine(mob/user)
..()
if(loaded)
to_chat(user, "<span class='info'>It contains [loaded.amount]/[max_amount] cables.</span>")
/obj/item/weapon/twohanded/rcl/Destroy()
/obj/item/twohanded/rcl/Destroy()
QDEL_NULL(loaded)
last = null
active = FALSE
return ..()
/obj/item/weapon/twohanded/rcl/update_icon()
/obj/item/twohanded/rcl/update_icon()
if(!loaded)
icon_state = "rcl-0"
item_state = "rcl-0"
@@ -105,7 +105,7 @@
icon_state = "rcl-0"
item_state = "rcl-0"
/obj/item/weapon/twohanded/rcl/proc/is_empty(mob/user, loud = 1)
/obj/item/twohanded/rcl/proc/is_empty(mob/user, loud = 1)
update_icon()
if(!loaded || !loaded.amount)
if(loud)
@@ -118,12 +118,12 @@
return TRUE
return FALSE
/obj/item/weapon/twohanded/rcl/dropped(mob/wearer)
/obj/item/twohanded/rcl/dropped(mob/wearer)
..()
active = FALSE
last = null
/obj/item/weapon/twohanded/rcl/attack_self(mob/user)
/obj/item/twohanded/rcl/attack_self(mob/user)
..()
active = wielded
if(!active)
@@ -134,11 +134,11 @@
last = C
break
/obj/item/weapon/twohanded/rcl/on_mob_move(direct, mob/user)
/obj/item/twohanded/rcl/on_mob_move(direct, mob/user)
if(active)
trigger(user)
/obj/item/weapon/twohanded/rcl/proc/trigger(mob/user)
/obj/item/twohanded/rcl/proc/trigger(mob/user)
if(!isturf(user.loc))
return
if(is_empty(user, 0))
@@ -170,14 +170,14 @@
is_empty(user) //If we've run out, display message
/obj/item/weapon/twohanded/rcl/pre_loaded/Initialize () //Comes preloaded with cable, for testing stuff
/obj/item/twohanded/rcl/pre_loaded/Initialize () //Comes preloaded with cable, for testing stuff
. = ..()
loaded = new()
loaded.max_amount = max_amount
loaded.amount = max_amount
update_icon()
/obj/item/weapon/twohanded/rcl/ui_action_click(mob/user, action)
/obj/item/twohanded/rcl/ui_action_click(mob/user, action)
if(istype(action, /datum/action/item_action/rcl))
current_color_index++;
if (current_color_index > colors.len)
@@ -185,13 +185,13 @@
var/cwname = colors[current_color_index]
to_chat(user, "Color changed to [cwname]!")
/obj/item/weapon/twohanded/rcl/ghetto
/obj/item/twohanded/rcl/ghetto
actions_types = list()
max_amount = 30
name = "makeshift rapid cable layer"
ghetto = TRUE
/obj/item/weapon/twohanded/rcl/ghetto/update_icon()
/obj/item/twohanded/rcl/ghetto/update_icon()
if(!loaded)
icon_state = "rclg-0"
item_state = "rclg-0"
+10 -10
View File
@@ -119,7 +119,7 @@ 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'
@@ -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
+20 -20
View File
@@ -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'
@@ -19,15 +19,15 @@ RSF
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))
@@ -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'
@@ -15,13 +15,13 @@
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
+56 -56
View File
@@ -11,7 +11,7 @@
/*
* DATA CARDS - Used for the teleporter
*/
/obj/item/weapon/card
/obj/item/card
name = "card"
desc = "Does card things."
icon = 'icons/obj/card.dmi'
@@ -19,7 +19,7 @@
var/list/files = list()
/obj/item/weapon/card/data
/obj/item/card/data
name = "data disk"
desc = "A disk of data."
icon_state = "data"
@@ -30,7 +30,7 @@
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)
/obj/item/card/data/verb/label(t as text)
set name = "Label Disk"
set category = "Object"
set src in usr
@@ -48,7 +48,7 @@
/*
* ID CARDS
*/
/obj/item/weapon/card/emag
/obj/item/card/emag
desc = "It's a card with a magnetic strip attached to some circuitry."
name = "cryptographic sequencer"
icon_state = "emag"
@@ -59,23 +59,23 @@
flags_1 = NOBLUDGEON_1
var/prox_check = TRUE //If the emag requires you to be in range
/obj/item/weapon/card/emag/bluespace
/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/weapon/card/emag/attack()
/obj/item/card/emag/attack()
return
/obj/item/weapon/card/emag/afterattack(atom/target, mob/user, proximity)
/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/weapon/card/id
/obj/item/card/id
name = "identification card"
desc = "A card used to provide ID and determine access across the station."
icon_state = "id"
@@ -93,33 +93,33 @@
/obj/item/weapon/card/id/Initialize(mapload)
/obj/item/card/id/Initialize(mapload)
. = ..()
if(mapload && access_txt)
access = text2access(access_txt)
/obj/item/weapon/card/id/vv_edit_var(var_name, var_value)
/obj/item/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)
/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/weapon/card/id/examine(mob/user)
/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/weapon/card/id/GetAccess()
/obj/item/card/id/GetAccess()
return access
/obj/item/weapon/card/id/GetID()
/obj/item/card/id/GetID()
return src
/*
@@ -130,14 +130,14 @@ update_label()
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)
/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/weapon/card/id/silver
/obj/item/card/id/silver
name = "silver identification card"
desc = "A silver card which shows honour and dedication."
icon_state = "silver"
@@ -145,7 +145,7 @@ update_label("John Doe", "Clowny")
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
/obj/item/weapon/card/id/gold
/obj/item/card/id/gold
name = "gold identification card"
desc = "A golden card which shows power and might."
icon_state = "gold"
@@ -153,30 +153,30 @@ update_label("John Doe", "Clowny")
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
/obj/item/weapon/card/id/syndicate
/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/weapon/card/id/syndicate/Initialize()
/obj/item/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_type = /obj/item/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)
/obj/item/card/id/syndicate/afterattack(obj/item/O, mob/user, proximity)
if(!proximity)
return
if(istype(O, /obj/item/weapon/card/id))
var/obj/item/weapon/card/id/I = O
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/weapon/card/id/syndicate/attack_self(mob/user)
/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")
@@ -197,17 +197,17 @@ update_label("John Doe", "Clowny")
return
..()
/obj/item/weapon/card/id/syndicate/anyone
/obj/item/card/id/syndicate/anyone
anyone = TRUE
/obj/item/weapon/card/id/syndicate_command
/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/weapon/card/id/captains_spare
/obj/item/card/id/captains_spare
name = "captain's spare ID"
desc = "The spare ID of the High Lord himself."
icon_state = "gold"
@@ -217,58 +217,58 @@ update_label("John Doe", "Clowny")
registered_name = "Captain"
assignment = "Captain"
/obj/item/weapon/card/id/captains_spare/Initialize()
/obj/item/card/id/captains_spare/Initialize()
var/datum/job/captain/J = new/datum/job/captain
access = J.get_access()
..()
/obj/item/weapon/card/id/centcom
/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/weapon/card/id/centcom/Initialize()
/obj/item/card/id/centcom/Initialize()
access = get_all_centcom_access()
..()
/obj/item/weapon/card/id/ert
/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/weapon/card/id/ert/Initialize()
/obj/item/card/id/ert/Initialize()
access = get_all_accesses()+get_ert_access("commander")-ACCESS_CHANGE_IDS
..()
/obj/item/weapon/card/id/ert/Security
/obj/item/card/id/ert/Security
registered_name = "Security Response Officer"
assignment = "Security Response Officer"
/obj/item/weapon/card/id/ert/Security/Initialize()
/obj/item/card/id/ert/Security/Initialize()
access = get_all_accesses()+get_ert_access("sec")-ACCESS_CHANGE_IDS
..()
/obj/item/weapon/card/id/ert/Engineer
/obj/item/card/id/ert/Engineer
registered_name = "Engineer Response Officer"
assignment = "Engineer Response Officer"
/obj/item/weapon/card/id/ert/Engineer/Initialize()
/obj/item/card/id/ert/Engineer/Initialize()
access = get_all_accesses()+get_ert_access("eng")-ACCESS_CHANGE_IDS
..()
/obj/item/weapon/card/id/ert/Medical
/obj/item/card/id/ert/Medical
registered_name = "Medical Response Officer"
assignment = "Medical Response Officer"
/obj/item/weapon/card/id/ert/Medical/Initialize()
/obj/item/card/id/ert/Medical/Initialize()
access = get_all_accesses()+get_ert_access("med")-ACCESS_CHANGE_IDS
..()
/obj/item/weapon/card/id/prisoner
/obj/item/card/id/prisoner
name = "prisoner ID card"
desc = "You are a number, you are not a free man."
icon_state = "orange"
@@ -280,76 +280,76 @@ update_label("John Doe", "Clowny")
var/goal = 0 //How far from freedom?
var/points = 0
/obj/item/weapon/card/id/prisoner/attack_self(mob/user)
/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/weapon/card/id/prisoner/one
/obj/item/card/id/prisoner/one
name = "Prisoner #13-001"
registered_name = "Prisoner #13-001"
/obj/item/weapon/card/id/prisoner/two
/obj/item/card/id/prisoner/two
name = "Prisoner #13-002"
registered_name = "Prisoner #13-002"
/obj/item/weapon/card/id/prisoner/three
/obj/item/card/id/prisoner/three
name = "Prisoner #13-003"
registered_name = "Prisoner #13-003"
/obj/item/weapon/card/id/prisoner/four
/obj/item/card/id/prisoner/four
name = "Prisoner #13-004"
registered_name = "Prisoner #13-004"
/obj/item/weapon/card/id/prisoner/five
/obj/item/card/id/prisoner/five
name = "Prisoner #13-005"
registered_name = "Prisoner #13-005"
/obj/item/weapon/card/id/prisoner/six
/obj/item/card/id/prisoner/six
name = "Prisoner #13-006"
registered_name = "Prisoner #13-006"
/obj/item/weapon/card/id/prisoner/seven
/obj/item/card/id/prisoner/seven
name = "Prisoner #13-007"
registered_name = "Prisoner #13-007"
/obj/item/weapon/card/id/mining
/obj/item/card/id/mining
name = "mining ID"
access = list(ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM)
/obj/item/weapon/card/id/away
/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/weapon/card/id/away/hotel
/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/weapon/card/id/away/hotel/securty
/obj/item/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
/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/weapon/card/id/away/old/sec
/obj/item/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
/obj/item/card/id/away/old/sci
name = "Scientist ID"
desc = "Scientists ID card."
icon_state = "centcom"
/obj/item/weapon/card/id/away/old/eng
/obj/item/card/id/away/old/eng
name = "Engineer ID"
desc = "Engineers ID card."
icon_state = "centcom"
/obj/item/weapon/card/id/away/old/apc
/obj/item/card/id/away/old/apc
name = "APC Access ID"
desc = "Special ID card to allow access to APCs"
icon_state = "centcom"
+8 -8
View File
@@ -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,12 +89,12 @@
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'
name_type = "planet"
@@ -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()].")
@@ -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,11 +35,11 @@
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'
@@ -50,27 +50,27 @@
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
@@ -15,7 +15,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
///////////
//MATCHES//
///////////
/obj/item/weapon/match
/obj/item/match
name = "match"
desc = "A simple match stick, used for lighting fine smokables."
icon = 'icons/obj/cigarettes.dmi'
@@ -27,17 +27,17 @@ CIGARETTE PACKETS ARE IN FANCY.DM
origin_tech = "materials=1"
heat = 1000
/obj/item/weapon/match/process()
/obj/item/match/process()
smoketime--
if(smoketime < 1)
matchburnout()
else
open_flame(heat)
/obj/item/weapon/match/fire_act(exposed_temperature, exposed_volume)
/obj/item/match/fire_act(exposed_temperature, exposed_volume)
matchignite()
/obj/item/weapon/match/proc/matchignite()
/obj/item/match/proc/matchignite()
if(!lit && !burnt)
lit = TRUE
icon_state = "match_lit"
@@ -51,7 +51,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
START_PROCESSING(SSobj, src)
update_icon()
/obj/item/weapon/match/proc/matchburnout()
/obj/item/match/proc/matchburnout()
if(lit)
lit = FALSE
burnt = TRUE
@@ -64,11 +64,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM
attack_verb = list("flicked")
STOP_PROCESSING(SSobj, src)
/obj/item/weapon/match/dropped(mob/user)
/obj/item/match/dropped(mob/user)
matchburnout()
. = ..()
/obj/item/weapon/match/attack(mob/living/carbon/M, mob/living/carbon/user)
/obj/item/match/attack(mob/living/carbon/M, mob/living/carbon/user)
if(!isliving(M))
return
if(lit && M.IgniteMob())
@@ -90,7 +90,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(istype(mask_item, /obj/item/clothing/mask/cigarette))
return mask_item
/obj/item/weapon/match/is_hot()
/obj/item/match/is_hot()
return lit * heat
//////////////////
@@ -109,7 +109,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/starts_lit = FALSE
var/icon_on = "cigon" //Note - these are in masks.dmi not in cigarette.dmi
var/icon_off = "cigoff"
var/type_butt = /obj/item/weapon/cigbutt
var/type_butt = /obj/item/cigbutt
var/lastHolder = null
var/smoketime = 300
var/chem_volume = 30
@@ -133,7 +133,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
STOP_PROCESSING(SSobj, src)
. = ..()
/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W, mob/user, params)
/obj/item/clothing/mask/cigarette/attackby(obj/item/W, mob/user, params)
if(!lit && smoketime > 0)
var/lighting_text = W.ignition_effect(src, user)
if(lighting_text)
@@ -141,7 +141,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
return ..()
/obj/item/clothing/mask/cigarette/afterattack(obj/item/weapon/reagent_containers/glass/glass, mob/user, proximity)
/obj/item/clothing/mask/cigarette/afterattack(obj/item/reagent_containers/glass/glass, mob/user, proximity)
if(!proximity || lit) //can't dip if cigarette is lit (it will heat the reagents in the glass instead)
return
if(istype(glass)) //you can dip cigarettes into beakers
@@ -289,7 +289,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_state = "spliffoff"
icon_on = "spliffon"
icon_off = "spliffoff"
type_butt = /obj/item/weapon/cigbutt/roach
type_butt = /obj/item/cigbutt/roach
throw_speed = 0.5
item_state = "spliffoff"
smoketime = 180
@@ -304,12 +304,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
list_reagents = list("nicotine" = 15, "mushroomhallucinogen" = 35)
starts_lit = TRUE
/obj/item/weapon/cigbutt/roach
/obj/item/cigbutt/roach
name = "roach"
desc = "A manky old roach, or for non-stoners, a used rollup."
icon_state = "roach"
/obj/item/weapon/cigbutt/roach/New()
/obj/item/cigbutt/roach/New()
..()
src.pixel_x = rand(-5, 5)
src.pixel_y = rand(-5, 5)
@@ -324,7 +324,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
icon_state = "cigaroff"
icon_on = "cigaron"
icon_off = "cigaroff"
type_butt = /obj/item/weapon/cigbutt/cigarbutt
type_butt = /obj/item/cigbutt/cigarbutt
throw_speed = 0.5
item_state = "cigaroff"
smoketime = 1500
@@ -349,7 +349,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
smoketime = 7200
chem_volume = 50
/obj/item/weapon/cigbutt
/obj/item/cigbutt
name = "cigarette butt"
desc = "A manky old cigarette butt."
icon = 'icons/obj/clothing/masks.dmi'
@@ -357,7 +357,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
w_class = WEIGHT_CLASS_TINY
throwforce = 0
/obj/item/weapon/cigbutt/cigarbutt
/obj/item/cigbutt/cigarbutt
name = "cigar butt"
desc = "A manky old cigar butt."
icon_state = "cigarbutt"
@@ -407,8 +407,8 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/cigarette/pipe/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown))
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O
if(istype(O, /obj/item/reagent_containers/food/snacks/grown))
var/obj/item/reagent_containers/food/snacks/grown/G = O
if(!packeditem)
if(G.dry == 1)
to_chat(user, "<span class='notice'>You stuff [O] into [src].</span>")
@@ -463,7 +463,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/////////
//ZIPPO//
/////////
/obj/item/weapon/lighter
/obj/item/lighter
name = "\improper Zippo lighter"
desc = "The zippo."
icon = 'icons/obj/cigarettes.dmi'
@@ -478,17 +478,17 @@ CIGARETTE PACKETS ARE IN FANCY.DM
resistance_flags = FIRE_PROOF
light_color = LIGHT_COLOR_FIRE
/obj/item/weapon/lighter/update_icon()
/obj/item/lighter/update_icon()
if(lit)
icon_state = "[initial(icon_state)]_on"
else
icon_state = "[initial(icon_state)]"
/obj/item/weapon/lighter/ignition_effect(atom/A, mob/user)
/obj/item/lighter/ignition_effect(atom/A, mob/user)
if(is_hot())
. = "<span class='rose'>With a single flick of their wrist, [user] smoothly lights [A] with [src]. Damn [user.p_theyre()] cool.</span>"
/obj/item/weapon/lighter/proc/set_lit(new_lit)
/obj/item/lighter/proc/set_lit(new_lit)
lit = new_lit
if(lit)
force = 5
@@ -505,7 +505,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
STOP_PROCESSING(SSobj, src)
update_icon()
/obj/item/weapon/lighter/attack_self(mob/living/user)
/obj/item/lighter/attack_self(mob/living/user)
if(user.is_holding(src))
if(!lit)
set_lit(TRUE)
@@ -538,7 +538,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
. = ..()
/obj/item/weapon/lighter/attack(mob/living/carbon/M, mob/living/carbon/user)
/obj/item/lighter/attack(mob/living/carbon/M, mob/living/carbon/user)
if(lit && M.IgniteMob())
message_admins("[key_name_admin(user)] set [key_name_admin(M)] on fire")
log_game("[key_name(user)] set [key_name(M)] on fire")
@@ -556,25 +556,25 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
..()
/obj/item/weapon/lighter/process()
/obj/item/lighter/process()
open_flame()
/obj/item/weapon/lighter/is_hot()
/obj/item/lighter/is_hot()
return lit * heat
/obj/item/weapon/lighter/greyscale
/obj/item/lighter/greyscale
name = "cheap lighter"
desc = "A cheap-as-free lighter."
icon_state = "lighter"
fancy = FALSE
/obj/item/weapon/lighter/greyscale/Initialize()
/obj/item/lighter/greyscale/Initialize()
. = ..()
add_atom_colour(color2hex(randomColor(1)), FIXED_COLOUR_PRIORITY)
update_icon()
/obj/item/weapon/lighter/greyscale/update_icon()
/obj/item/lighter/greyscale/update_icon()
cut_overlays()
var/mutable_appearance/base_overlay = mutable_appearance(icon,"[initial(icon_state)]_base")
base_overlay.appearance_flags = RESET_COLOR //the edging doesn't change color
@@ -582,7 +582,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
base_overlay.icon_state = "[initial(icon_state)]_on"
add_overlay(base_overlay)
/obj/item/weapon/lighter/greyscale/ignition_effect(atom/A, mob/user)
/obj/item/lighter/greyscale/ignition_effect(atom/A, mob/user)
if(is_hot())
. = "<span class='notice'>After some fiddling, [user] manages to light [A] with [src].</span>"
@@ -590,18 +590,18 @@ CIGARETTE PACKETS ARE IN FANCY.DM
///////////
//ROLLING//
///////////
/obj/item/weapon/rollingpaper
/obj/item/rollingpaper
name = "rolling paper"
desc = "A thin piece of paper used to make fine smokeables."
icon = 'icons/obj/cigarettes.dmi'
icon_state = "cig_paper"
w_class = WEIGHT_CLASS_TINY
/obj/item/weapon/rollingpaper/afterattack(atom/target, mob/user, proximity)
/obj/item/rollingpaper/afterattack(atom/target, mob/user, proximity)
if(!proximity)
return
if(istype(target, /obj/item/weapon/reagent_containers/food/snacks/grown))
var/obj/item/weapon/reagent_containers/food/snacks/grown/O = target
if(istype(target, /obj/item/reagent_containers/food/snacks/grown))
var/obj/item/reagent_containers/food/snacks/grown/O = target
if(O.dry)
var/obj/item/clothing/mask/cigarette/rollie/R = new /obj/item/clothing/mask/cigarette/rollie(user.loc)
R.chem_volume = target.reagents.total_volume
@@ -649,7 +649,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
item_state = "[param_color]_vape"
/obj/item/clothing/mask/vape/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/weapon/reagent_containers) && (O.container_type & OPENCONTAINER_1))
if(istype(O, /obj/item/reagent_containers) && (O.container_type & OPENCONTAINER_1))
if(reagents.total_volume < chem_volume)
if(O.reagents.total_volume > 0)
O.reagents.trans_to(src,25)
@@ -659,7 +659,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
to_chat(user, "<span class='warning'>[src] can't hold anymore reagents!</span>")
if(istype(O, /obj/item/weapon/screwdriver))
if(istype(O, /obj/item/screwdriver))
if(!screw)
screw = 1
to_chat(user, "<span class='notice'>You open the cap on the [src]</span>")
@@ -3,7 +3,7 @@
// Circuitboard
/obj/item/weapon/circuitboard
/obj/item/circuitboard
name = "circuit board"
icon = 'icons/obj/module.dmi'
icon_state = "id_mod"
@@ -15,7 +15,7 @@
w_class = WEIGHT_CLASS_SMALL
var/build_path = null
/obj/item/weapon/circuitboard/proc/apply_default_parts(obj/machinery/M)
/obj/item/circuitboard/proc/apply_default_parts(obj/machinery/M)
return
// Circuitboard/machine
@@ -23,15 +23,15 @@
micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells.
*/
/obj/item/weapon/circuitboard/machine
/obj/item/circuitboard/machine
var/list/req_components // Components required by the machine.
// Example: list(/obj/item/weapon/stock_parts/matter_bin = 5)
// 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/weapon/stock_parts/matter_bin = /obj/item/weapon/stock_parts/matter_bin/super)
// 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/weapon/circuitboard/machine/apply_default_parts(obj/machinery/M)
/obj/item/circuitboard/machine/apply_default_parts(obj/machinery/M)
if(!req_components)
return
@@ -1,183 +1,183 @@
/obj/item/weapon/circuitboard/computer/turbine_computer
/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/weapon/circuitboard/computer/launchpad_console
/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/weapon/circuitboard/computer/message_monitor
/obj/item/circuitboard/computer/message_monitor
name = "Message Monitor (Computer Board)"
build_path = /obj/machinery/computer/message_monitor
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/computer/security
/obj/item/circuitboard/computer/security
name = "Security Cameras (Computer Board)"
build_path = /obj/machinery/computer/security
origin_tech = "programming=2;combat=2"
/obj/item/weapon/circuitboard/computer/xenobiology
/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/weapon/circuitboard/computer/base_construction
/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/weapon/circuitboard/computer/aiupload
/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/weapon/circuitboard/computer/borgupload
/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/weapon/circuitboard/computer/med_data
/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/weapon/circuitboard/computer/pandemic
/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/weapon/circuitboard/computer/scan_consolenew
/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/weapon/circuitboard/computer/communications
/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/weapon/circuitboard/computer/card
/obj/item/circuitboard/computer/card
name = "ID Console (Computer Board)"
build_path = /obj/machinery/computer/card
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/computer/card/centcom
/obj/item/circuitboard/computer/card/centcom
name = "CentCom ID Console (Computer Board)"
build_path = /obj/machinery/computer/card/centcom
/obj/item/weapon/circuitboard/computer/card/minor
/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/weapon/circuitboard/computer/card/minor/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/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/weapon/circuitboard/computer/card/minor/examine(user)
/obj/item/circuitboard/computer/card/minor/examine(user)
..()
to_chat(user, "Currently set to \"[dept_list[target_dept]]\".")
//obj/item/weapon/circuitboard/computer/shield
//obj/item/circuitboard/computer/shield
// name = "Shield Control (Computer Board)"
// build_path = /obj/machinery/computer/stationshield
/obj/item/weapon/circuitboard/computer/teleporter
/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/weapon/circuitboard/computer/secure_data
/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/weapon/circuitboard/computer/stationalert
/obj/item/circuitboard/computer/stationalert
name = "Station Alerts (Computer Board)"
build_path = /obj/machinery/computer/station_alert
/obj/item/weapon/circuitboard/computer/atmos_control
/obj/item/circuitboard/computer/atmos_control
name = "Atmospheric Monitor (Computer Board)"
build_path = /obj/machinery/computer/atmos_control
/obj/item/weapon/circuitboard/computer/atmos_control/tank
/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/weapon/circuitboard/computer/atmos_alert
/obj/item/circuitboard/computer/atmos_alert
name = "Atmospheric Alert (Computer Board)"
build_path = /obj/machinery/computer/atmos_alert
/obj/item/weapon/circuitboard/computer/pod
/obj/item/circuitboard/computer/pod
name = "Massdriver control (Computer Board)"
build_path = /obj/machinery/computer/pod
/obj/item/weapon/circuitboard/computer/robotics
/obj/item/circuitboard/computer/robotics
name = "Robotics Control (Computer Board)"
build_path = /obj/machinery/computer/robotics
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/computer/cloning
/obj/item/circuitboard/computer/cloning
name = "Cloning (Computer Board)"
build_path = /obj/machinery/computer/cloning
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/computer/arcade/battle
/obj/item/circuitboard/computer/arcade/battle
name = "Arcade Battle (Computer Board)"
build_path = /obj/machinery/computer/arcade/battle
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/computer/arcade/orion_trail
/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/weapon/circuitboard/computer/turbine_control
/obj/item/circuitboard/computer/turbine_control
name = "Turbine control (Computer Board)"
build_path = /obj/machinery/computer/turbine_computer
/obj/item/weapon/circuitboard/computer/solar_control
/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/weapon/circuitboard/computer/powermonitor
/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/weapon/circuitboard/computer/olddoor
/obj/item/circuitboard/computer/olddoor
name = "DoorMex (Computer Board)"
build_path = /obj/machinery/computer/pod/old
/obj/item/weapon/circuitboard/computer/syndicatedoor
/obj/item/circuitboard/computer/syndicatedoor
name = "ProComp Executive (Computer Board)"
build_path = /obj/machinery/computer/pod/old/syndicate
/obj/item/weapon/circuitboard/computer/swfdoor
/obj/item/circuitboard/computer/swfdoor
name = "Magix (Computer Board)"
build_path = /obj/machinery/computer/pod/old/swf
/obj/item/weapon/circuitboard/computer/prisoner
/obj/item/circuitboard/computer/prisoner
name = "Prisoner Management Console (Computer Board)"
build_path = /obj/machinery/computer/prisoner
/obj/item/weapon/circuitboard/computer/gulag_teleporter_console
/obj/item/circuitboard/computer/gulag_teleporter_console
name = "Labor Camp teleporter console (Computer Board)"
build_path = /obj/machinery/computer/gulag_teleporter_computer
/obj/item/weapon/circuitboard/computer/rdconsole
/obj/item/circuitboard/computer/rdconsole
name = "R&D Console (Computer Board)"
build_path = /obj/machinery/computer/rdconsole/core
/obj/item/weapon/circuitboard/computer/rdconsole/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/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
@@ -189,39 +189,39 @@
else
return ..()
/obj/item/weapon/circuitboard/computer/mecha_control
/obj/item/circuitboard/computer/mecha_control
name = "Exosuit Control Console (Computer Board)"
build_path = /obj/machinery/computer/mecha
/obj/item/weapon/circuitboard/computer/rdservercontrol
/obj/item/circuitboard/computer/rdservercontrol
name = "R&D Server Control (Computer Board)"
build_path = /obj/machinery/computer/rdservercontrol
/obj/item/weapon/circuitboard/computer/crew
/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/weapon/circuitboard/computer/mech_bay_power_console
/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/weapon/circuitboard/computer/cargo
/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/weapon/circuitboard/computer/cargo/attackby(obj/item/I, mob/user, params)
/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/weapon/card/emag))
else if(istype(I, /obj/item/card/emag))
if(!emagged)
contraband = TRUE
emagged = TRUE
@@ -230,41 +230,41 @@
return ..()
/obj/item/weapon/circuitboard/computer/cargo/request
/obj/item/circuitboard/computer/cargo/request
name = "Supply Request Console (Computer Board)"
build_path = /obj/machinery/computer/cargo/request
/obj/item/weapon/circuitboard/computer/stockexchange
/obj/item/circuitboard/computer/stockexchange
name = "circuit board (Stock Exchange Console)"
build_path = /obj/machinery/computer/stockexchange
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/computer/operating
/obj/item/circuitboard/computer/operating
name = "Operating Computer (Computer Board)"
build_path = /obj/machinery/computer/operating
origin_tech = "programming=2;biotech=3"
/obj/item/weapon/circuitboard/computer/mining
/obj/item/circuitboard/computer/mining
name = "Outpost Status Display (Computer Board)"
build_path = /obj/machinery/computer/security/mining
/obj/item/weapon/circuitboard/computer/comm_monitor
/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/weapon/circuitboard/computer/comm_server
/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/weapon/circuitboard/computer/shuttle
/obj/item/circuitboard/computer/shuttle
name = "Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle
var/shuttleId
var/possible_destinations = ""
/obj/item/weapon/circuitboard/computer/shuttle/attackby(obj/item/I, mob/user, params)
/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)
@@ -274,56 +274,56 @@
else
return ..()
/obj/item/weapon/circuitboard/computer/labor_shuttle
/obj/item/circuitboard/computer/labor_shuttle
name = "Labor Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle/labor
/obj/item/weapon/circuitboard/computer/labor_shuttle/one_way
/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/weapon/circuitboard/computer/ferry
/obj/item/circuitboard/computer/ferry
name = "Transport Ferry (Computer Board)"
build_path = /obj/machinery/computer/shuttle/ferry
/obj/item/weapon/circuitboard/computer/ferry/request
/obj/item/circuitboard/computer/ferry/request
name = "Transport Ferry Console (Computer Board)"
build_path = /obj/machinery/computer/shuttle/ferry/request
/obj/item/weapon/circuitboard/computer/mining_shuttle
/obj/item/circuitboard/computer/mining_shuttle
name = "Mining Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle/mining
/obj/item/weapon/circuitboard/computer/white_ship
/obj/item/circuitboard/computer/white_ship
name = "White Ship (Computer Board)"
build_path = /obj/machinery/computer/shuttle/white_ship
/obj/item/weapon/circuitboard/computer/auxillary_base
/obj/item/circuitboard/computer/auxillary_base
name = "Auxillary Base Management Console (Computer Board)"
build_path = /obj/machinery/computer/auxillary_base
/obj/item/weapon/circuitboard/computer/holodeck// Not going to let people get this, but it's just here for future
/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/weapon/circuitboard/computer/aifixer
/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/weapon/circuitboard/computer/slot_machine
/obj/item/circuitboard/computer/slot_machine
name = "Slot Machine (Computer Board)"
build_path = /obj/machinery/computer/slot_machine
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/computer/libraryconsole
/obj/item/circuitboard/computer/libraryconsole
name = "Library Visitor Console (Computer Board)"
build_path = /obj/machinery/computer/libraryconsole
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/computer/libraryconsole/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/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
@@ -335,35 +335,35 @@
else
return ..()
/obj/item/weapon/circuitboard/computer/apc_control
/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/weapon/circuitboard/computer/shuttle/monastery_shuttle
/obj/item/circuitboard/computer/shuttle/monastery_shuttle
name = "Monastery Shuttle (Computer Board)"
build_path = /obj/machinery/computer/shuttle/monastery_shuttle
/obj/item/weapon/circuitboard/computer/syndicate_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/weapon/circuitboard/computer/syndicate_shuttle/Initialize()
/obj/item/circuitboard/computer/syndicate_shuttle/Initialize()
. = ..()
GLOB.syndicate_shuttle_boards += src
/obj/item/weapon/circuitboard/computer/syndicate_shuttle/Destroy()
/obj/item/circuitboard/computer/syndicate_shuttle/Destroy()
GLOB.syndicate_shuttle_boards -= src
return ..()
/obj/item/weapon/circuitboard/computer/bsa_control
/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/weapon/circuitboard/computer/sat_control
/obj/item/circuitboard/computer/sat_control
name = "Satellite Network Control (Computer Board)"
build_path = /obj/machinery/computer/sat_control
origin_tech = "engineering=3"
@@ -1,223 +1,223 @@
/obj/item/weapon/circuitboard/machine/sleeper
/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/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/stock_parts/console_screen = 1,
/obj/item/stack/sheet/glass = 1)
/obj/item/weapon/circuitboard/machine/announcement_system
/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/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/autolathe
/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/weapon/stock_parts/matter_bin = 3,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/matter_bin = 3,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/clonepod
/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/weapon/stock_parts/scanning_module = 2,
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/stock_parts/scanning_module = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stack/sheet/glass = 1)
/obj/item/weapon/circuitboard/machine/abductor
/obj/item/circuitboard/machine/abductor
name = "alien board (Report This)"
icon_state = "abductor_mod"
origin_tech = "programming=5;abductor=3"
/obj/item/weapon/circuitboard/machine/clockwork
/obj/item/circuitboard/machine/clockwork
name = "clockwork board (Report This)"
icon_state = "clock_mod"
/obj/item/weapon/circuitboard/machine/clonescanner
/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/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/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/weapon/circuitboard/machine/holopad
/obj/item/circuitboard/machine/holopad
name = "AI Holopad (Machine Board)"
build_path = /obj/machinery/holopad
origin_tech = "programming=1"
req_components = list(/obj/item/weapon/stock_parts/capacitor = 1)
req_components = list(/obj/item/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/machine/launchpad
/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/weapon/ore/bluespace_crystal = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial)
/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/weapon/circuitboard/machine/limbgrower
/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/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/reagent_containers/glass/beaker = 2,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/manipulator = 1,
/obj/item/reagent_containers/glass/beaker = 2,
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/quantumpad
/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/weapon/ore/bluespace_crystal = 1,
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/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/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial)
def_components = list(/obj/item/ore/bluespace_crystal = /obj/item/ore/bluespace_crystal/artificial)
/obj/item/weapon/circuitboard/machine/recharger
/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/weapon/stock_parts/capacitor = 1)
req_components = list(/obj/item/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/machine/cyborgrecharger
/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/weapon/stock_parts/capacitor = 2,
/obj/item/weapon/stock_parts/cell = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
def_components = list(/obj/item/weapon/stock_parts/cell = /obj/item/weapon/stock_parts/cell/high)
/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/weapon/circuitboard/machine/recycler
/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/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1)
/obj/item/weapon/circuitboard/machine/space_heater
/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/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/capacitor = 1,
/obj/item/stack/cable_coil = 3)
/obj/item/weapon/circuitboard/machine/telecomms/broadcaster
/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/weapon/stock_parts/manipulator = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/subspace/filter = 1,
/obj/item/weapon/stock_parts/subspace/crystal = 1,
/obj/item/weapon/stock_parts/micro_laser = 2)
/obj/item/stock_parts/subspace/filter = 1,
/obj/item/stock_parts/subspace/crystal = 1,
/obj/item/stock_parts/micro_laser = 2)
/obj/item/weapon/circuitboard/machine/telecomms/bus
/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/weapon/stock_parts/manipulator = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/subspace/filter = 1)
/obj/item/stock_parts/subspace/filter = 1)
/obj/item/weapon/circuitboard/machine/telecomms/hub
/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/weapon/stock_parts/manipulator = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/subspace/filter = 2)
/obj/item/stock_parts/subspace/filter = 2)
/obj/item/weapon/circuitboard/machine/telecomms/processor
/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/weapon/stock_parts/manipulator = 3,
/obj/item/weapon/stock_parts/subspace/filter = 1,
/obj/item/weapon/stock_parts/subspace/treatment = 2,
/obj/item/weapon/stock_parts/subspace/analyzer = 1,
/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/weapon/stock_parts/subspace/amplifier = 1)
/obj/item/stock_parts/subspace/amplifier = 1)
/obj/item/weapon/circuitboard/machine/telecomms/receiver
/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/weapon/stock_parts/subspace/ansible = 1,
/obj/item/weapon/stock_parts/subspace/filter = 1,
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/weapon/stock_parts/micro_laser = 1)
/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/weapon/circuitboard/machine/telecomms/relay
/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/weapon/stock_parts/manipulator = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/subspace/filter = 2)
/obj/item/stock_parts/subspace/filter = 2)
/obj/item/weapon/circuitboard/machine/telecomms/server
/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/weapon/stock_parts/manipulator = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/subspace/filter = 1)
/obj/item/stock_parts/subspace/filter = 1)
/obj/item/weapon/circuitboard/machine/teleporter_hub
/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/weapon/ore/bluespace_crystal = 3,
/obj/item/weapon/stock_parts/matter_bin = 1)
def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial)
/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/weapon/circuitboard/machine/teleporter_station
/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/weapon/ore/bluespace_crystal = 2,
/obj/item/weapon/stock_parts/capacitor = 2,
/obj/item/weapon/stock_parts/console_screen = 1)
def_components = list(/obj/item/weapon/ore/bluespace_crystal = /obj/item/weapon/ore/bluespace_crystal/artificial)
/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/weapon/circuitboard/machine/vendor
/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/weapon/vending_refill/boozeomat = 3)
/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",
@@ -229,8 +229,8 @@
/obj/machinery/vending/medical = "NanoMed Plus",
/obj/machinery/vending/wallmed = "NanoMed")
/obj/item/weapon/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/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]
@@ -240,57 +240,57 @@
else
return ..()
/obj/item/weapon/circuitboard/machine/vendor/proc/set_type(obj/machinery/vending/typepath)
/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/weapon/circuitboard/machine/vendor/apply_default_parts(obj/machinery/M)
/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/weapon/circuitboard/machine/mech_recharger
/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/weapon/stock_parts/capacitor = 5)
/obj/item/stock_parts/capacitor = 5)
/obj/item/weapon/circuitboard/machine/mechfab
/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/weapon/stock_parts/matter_bin = 2,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/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/weapon/circuitboard/machine/cryo_tube
/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/weapon/stock_parts/matter_bin = 1,
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/stock_parts/console_screen = 1,
/obj/item/stack/sheet/glass = 2)
/obj/item/weapon/circuitboard/machine/thermomachine
/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/weapon/stock_parts/matter_bin = 2,
/obj/item/weapon/stock_parts/micro_laser = 2,
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/micro_laser = 2,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/thermomachine/Initialize()
/obj/item/circuitboard/machine/thermomachine/Initialize()
. = ..()
if(prob(50))
name = "Freezer (Machine Board)"
@@ -299,12 +299,12 @@
name = "Heater (Machine Board)"
build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater
#define FREEZER /obj/item/weapon/circuitboard/machine/thermomachine/freezer
#define HEATER /obj/item/weapon/circuitboard/machine/thermomachine/heater
#define FREEZER /obj/item/circuitboard/machine/thermomachine/freezer
#define HEATER /obj/item/circuitboard/machine/thermomachine/heater
/obj/item/weapon/circuitboard/machine/thermomachine/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
var/obj/item/weapon/circuitboard/new_type
/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)
@@ -323,46 +323,46 @@
#undef FREEZER
#undef HEATER
/obj/item/weapon/circuitboard/machine/thermomachine/heater
/obj/item/circuitboard/machine/thermomachine/heater
name = "Heater (Machine Board)"
build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater
/obj/item/weapon/circuitboard/machine/thermomachine/freezer
/obj/item/circuitboard/machine/thermomachine/freezer
name = "Freezer (Machine Board)"
build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer
/obj/item/weapon/circuitboard/machine/deep_fryer
/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/weapon/stock_parts/micro_laser = 1)
req_components = list(/obj/item/stock_parts/micro_laser = 1)
/obj/item/weapon/circuitboard/machine/gibber
/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/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1)
/obj/item/weapon/circuitboard/machine/monkey_recycler
/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/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1)
/obj/item/weapon/circuitboard/machine/processor
/obj/item/circuitboard/machine/processor
name = "Food Processor (Machine Board)"
build_path = /obj/machinery/processor
origin_tech = "programming=1"
req_components = list(
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1)
/obj/item/weapon/circuitboard/machine/processor/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/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
@@ -374,15 +374,15 @@
else
return ..()
/obj/item/weapon/circuitboard/machine/processor/slime
/obj/item/circuitboard/machine/processor/slime
name = "Slime Processor (Machine Board)"
build_path = /obj/machinery/processor/slime
/obj/item/weapon/circuitboard/machine/smartfridge
/obj/item/circuitboard/machine/smartfridge
name = "Smartfridge (Machine Board)"
build_path = /obj/machinery/smartfridge
origin_tech = "programming=1"
req_components = list(/obj/item/weapon/stock_parts/matter_bin = 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",
@@ -391,13 +391,13 @@
/obj/machinery/smartfridge/chemistry/virology = "viruses",
/obj/machinery/smartfridge/disks = "disks")
/obj/item/weapon/circuitboard/machine/smartfridge/Initialize(mapload, new_type)
/obj/item/circuitboard/machine/smartfridge/Initialize(mapload, new_type)
if(new_type)
build_path = new_type
return ..()
/obj/item/weapon/circuitboard/machine/smartfridge/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/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]
@@ -405,218 +405,218 @@
else
return ..()
/obj/item/weapon/circuitboard/machine/smartfridge/examine(mob/user)
/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/weapon/circuitboard/machine/biogenerator
/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/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/plantgenes
/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/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/scanning_module = 1)
/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/weapon/circuitboard/machine/plantgenes/vault
/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/weapon/stock_parts/manipulator = /obj/item/weapon/stock_parts/manipulator/femto,
/obj/item/weapon/stock_parts/micro_laser = /obj/item/weapon/stock_parts/micro_laser/quadultra,
/obj/item/weapon/stock_parts/scanning_module = /obj/item/weapon/stock_parts/scanning_module/triphasic)
/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/weapon/circuitboard/machine/hydroponics
/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/weapon/stock_parts/matter_bin = 2,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/seed_extractor
/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/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1)
/obj/item/weapon/circuitboard/machine/ore_redemption
/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/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/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/weapon/circuitboard/machine/mining_equipment_vendor
/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/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/matter_bin = 3)
/obj/item/stock_parts/console_screen = 1,
/obj/item/stock_parts/matter_bin = 3)
/obj/item/weapon/circuitboard/machine/mining_equipment_vendor/golem
/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/weapon/circuitboard/machine/ntnet_relay
/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/weapon/stock_parts/subspace/filter = 1)
/obj/item/stock_parts/subspace/filter = 1)
/obj/item/weapon/circuitboard/machine/pacman
/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/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/capacitor = 1)
/obj/item/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/machine/pacman/super
/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/weapon/circuitboard/machine/pacman/mrs
/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/weapon/circuitboard/machine/rtg
/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/weapon/stock_parts/capacitor = 1,
/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/weapon/circuitboard/machine/rtg/advanced
/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/weapon/stock_parts/capacitor = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/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/weapon/circuitboard/machine/abductor/core
/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/weapon/stock_parts/capacitor = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/cell/infinite/abductor = 1)
/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/weapon/stock_parts/capacitor = /obj/item/weapon/stock_parts/capacitor/quadratic,
/obj/item/weapon/stock_parts/micro_laser = /obj/item/weapon/stock_parts/micro_laser/quadultra)
/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/weapon/circuitboard/machine/emitter
/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/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/manipulator = 1)
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/manipulator = 1)
/obj/item/weapon/circuitboard/machine/smes
/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/weapon/stock_parts/cell = 5,
/obj/item/weapon/stock_parts/capacitor = 1)
def_components = list(/obj/item/weapon/stock_parts/cell = /obj/item/weapon/stock_parts/cell/high/empty)
/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/weapon/circuitboard/machine/tesla_coil
/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/weapon/stock_parts/capacitor = 1)
req_components = list(/obj/item/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/machine/grounding_rod
/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/weapon/stock_parts/capacitor = 1)
req_components = list(/obj/item/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/machine/power_compressor
/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/weapon/stock_parts/manipulator = 6)
/obj/item/stock_parts/manipulator = 6)
/obj/item/weapon/circuitboard/machine/power_turbine
/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/weapon/stock_parts/capacitor = 6)
/obj/item/stock_parts/capacitor = 6)
/obj/item/weapon/circuitboard/machine/chem_dispenser
/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/weapon/stock_parts/matter_bin = 2,
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/cell = 1)
def_components = list(/obj/item/weapon/stock_parts/cell = /obj/item/weapon/stock_parts/cell/high)
/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/weapon/circuitboard/machine/chem_heater
/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/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/chem_master
/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/weapon/reagent_containers/glass/beaker = 2,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/reagent_containers/glass/beaker = 2,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/machine/chem_master/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/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
@@ -630,94 +630,94 @@
else
return ..()
/obj/item/weapon/circuitboard/machine/chem_master/condi
/obj/item/circuitboard/machine/chem_master/condi
name = "CondiMaster 3000 (Machine Board)"
build_path = /obj/machinery/chem_master/condimaster
/obj/item/weapon/circuitboard/machine/circuit_imprinter
/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/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/reagent_containers/glass/beaker = 2)
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/reagent_containers/glass/beaker = 2)
/obj/item/weapon/circuitboard/machine/destructive_analyzer
/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/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/micro_laser = 1)
/obj/item/stock_parts/scanning_module = 1,
/obj/item/stock_parts/manipulator = 1,
/obj/item/stock_parts/micro_laser = 1)
/obj/item/weapon/circuitboard/machine/experimentor
/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/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/weapon/stock_parts/micro_laser = 2)
/obj/item/stock_parts/scanning_module = 1,
/obj/item/stock_parts/manipulator = 2,
/obj/item/stock_parts/micro_laser = 2)
/obj/item/weapon/circuitboard/machine/protolathe
/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/weapon/stock_parts/matter_bin = 2,
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/weapon/reagent_containers/glass/beaker = 2)
/obj/item/stock_parts/matter_bin = 2,
/obj/item/stock_parts/manipulator = 2,
/obj/item/reagent_containers/glass/beaker = 2)
/obj/item/weapon/circuitboard/machine/rdserver
/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/weapon/stock_parts/scanning_module = 1)
/obj/item/stock_parts/scanning_module = 1)
/obj/item/weapon/circuitboard/machine/bsa/back
/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/weapon/stock_parts/capacitor/quadratic = 5,
/obj/item/stock_parts/capacitor/quadratic = 5,
/obj/item/stack/cable_coil = 2)
/obj/item/weapon/circuitboard/machine/bsa/middle
/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/weapon/ore/bluespace_crystal = 20,
/obj/item/ore/bluespace_crystal = 20,
/obj/item/stack/cable_coil = 2)
/obj/item/weapon/circuitboard/machine/bsa/front
/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/weapon/stock_parts/manipulator/femto = 5,
/obj/item/stock_parts/manipulator/femto = 5,
/obj/item/stack/cable_coil = 2)
/obj/item/weapon/circuitboard/machine/dna_vault
/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/weapon/stock_parts/capacitor/super = 5,
/obj/item/weapon/stock_parts/manipulator/pico = 5,
/obj/item/stock_parts/capacitor/super = 5,
/obj/item/stock_parts/manipulator/pico = 5,
/obj/item/stack/cable_coil = 2)
/obj/item/weapon/circuitboard/machine/microwave
/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/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/stock_parts/micro_laser = 1,
/obj/item/stock_parts/matter_bin = 1,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/stock_parts/console_screen = 1,
/obj/item/stack/sheet/glass = 1)
+6 -6
View File
@@ -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)
. = ..()
+19 -19
View File
@@ -9,7 +9,7 @@
* Soap
*/
/obj/item/weapon/soap
/obj/item/soap
name = "soap"
desc = "A cheap bar of soap. Doesn't smell."
gender = PLURAL
@@ -23,37 +23,37 @@
var/cleanspeed = 50 //slower than mop
force_string = "robust... against germs"
/obj/item/weapon/soap/nanotrasen
/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)
/obj/item/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,7 +94,7 @@
*/
/obj/item/weapon/bikehorn
/obj/item/bikehorn
name = "bike horn"
desc = "A horn off of a bicycle."
icon = 'icons/obj/items.dmi'
@@ -112,28 +112,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 +141,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 +165,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"
+12 -12
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/lipstick
/obj/item/lipstick
gender = PLURAL
name = "red lipstick"
desc = "A generic brand of lipstick."
@@ -9,31 +9,31 @@
var/open = FALSE
/obj/item/weapon/lipstick/purple
/obj/item/lipstick/purple
name = "purple lipstick"
colour = "purple"
/obj/item/weapon/lipstick/jade
/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/weapon/lipstick/black
/obj/item/lipstick/black
name = "black lipstick"
colour = "black"
/obj/item/weapon/lipstick/random
/obj/item/lipstick/random
name = "lipstick"
/obj/item/weapon/lipstick/random/New()
/obj/item/lipstick/random/New()
..()
colour = pick("red","purple","lime","black","green","blue","white")
name = "[colour] lipstick"
/obj/item/weapon/lipstick/attack_self(mob/user)
/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
@@ -45,7 +45,7 @@
else
icon_state = "lipstick"
/obj/item/weapon/lipstick/attack(mob/M, mob/user)
/obj/item/lipstick/attack(mob/M, mob/user)
if(!open)
return
@@ -79,7 +79,7 @@
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)
/obj/item/paper/attack(mob/M, mob/user)
if(user.zone_selected == "mouth")
if(!ismob(M))
return
@@ -102,7 +102,7 @@
..()
/obj/item/weapon/razor
/obj/item/razor
name = "electric razor"
desc = "The latest and greatest power razor born from the science of shaving."
icon = 'icons/obj/items.dmi'
@@ -111,7 +111,7 @@
w_class = WEIGHT_CLASS_TINY
/obj/item/weapon/razor/proc/shave(mob/living/carbon/human/H, location = "mouth")
/obj/item/razor/proc/shave(mob/living/carbon/human/H, location = "mouth")
if(location == "mouth")
H.facial_hair_style = "Shaved"
else
@@ -121,7 +121,7 @@
playsound(loc, 'sound/items/welder2.ogg', 20, 1)
/obj/item/weapon/razor/attack(mob/M, mob/user)
/obj/item/razor/attack(mob/M, mob/user)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/location = user.zone_selected
+5 -5
View File
@@ -2,7 +2,7 @@
// 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'
@@ -13,12 +13,12 @@
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'
@@ -28,8 +28,8 @@
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)
+54 -54
View File
@@ -1,7 +1,7 @@
//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'
@@ -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,7 +269,7 @@
//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'
@@ -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,7 +568,7 @@
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_state = "defibpaddles0"
@@ -577,7 +577,7 @@
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,7 +589,7 @@
. = ..()
/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
+42 -42
View File
@@ -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)
+56 -56
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/dnainjector
/obj/item/dnainjector
name = "\improper DNA injector"
desc = "This injects the person with DNA."
icon = 'icons/obj/items.dmi'
@@ -20,16 +20,16 @@
var/used = 0
/obj/item/weapon/dnainjector/attack_paw(mob/user)
/obj/item/dnainjector/attack_paw(mob/user)
return attack_hand(user)
/obj/item/weapon/dnainjector/proc/prepare()
/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/weapon/dnainjector/proc/inject(mob/living/carbon/M, mob/user)
/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))
@@ -55,7 +55,7 @@
return TRUE
return FALSE
/obj/item/weapon/dnainjector/attack(mob/target, mob/user)
/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
@@ -88,227 +88,227 @@
desc += " This one is used up."
/obj/item/weapon/dnainjector/antihulk
/obj/item/dnainjector/antihulk
name = "\improper DNA injector (Anti-Hulk)"
desc = "Cures green skin."
remove_mutations_static = list(HULK)
/obj/item/weapon/dnainjector/hulkmut
/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/weapon/dnainjector/xraymut
/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/weapon/dnainjector/antixray
/obj/item/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
/obj/item/dnainjector/antiglasses
name = "\improper DNA injector (Anti-Glasses)"
desc = "Toss away those glasses!"
remove_mutations_static = list(BADSIGHT)
/obj/item/weapon/dnainjector/glassesmut
/obj/item/dnainjector/glassesmut
name = "\improper DNA injector (Glasses)"
desc = "Will make you need dorkish glasses."
add_mutations_static = list(BADSIGHT)
/obj/item/weapon/dnainjector/epimut
/obj/item/dnainjector/epimut
name = "\improper DNA injector (Epi.)"
desc = "Shake shake shake the room!"
add_mutations_static = list(EPILEPSY)
/obj/item/weapon/dnainjector/antiepi
/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/weapon/dnainjector/anticough
/obj/item/dnainjector/anticough
name = "\improper DNA injector (Anti-Cough)"
desc = "Will stop that aweful noise."
remove_mutations_static = list(COUGH)
/obj/item/weapon/dnainjector/coughmut
/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/weapon/dnainjector/antidwarf
/obj/item/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
/obj/item/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
/obj/item/dnainjector/clumsymut
name = "\improper DNA injector (Clumsy)"
desc = "Makes clown minions."
add_mutations_static = list(CLOWNMUT)
/obj/item/weapon/dnainjector/anticlumsy
/obj/item/dnainjector/anticlumsy
name = "\improper DNA injector (Anti-Clumsy)"
desc = "Apply this for Security Clown."
remove_mutations_static = list(CLOWNMUT)
/obj/item/weapon/dnainjector/antitour
/obj/item/dnainjector/antitour
name = "\improper DNA injector (Anti-Tour.)"
desc = "Will cure tourrets."
remove_mutations_static = list(TOURETTES)
/obj/item/weapon/dnainjector/tourmut
/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/weapon/dnainjector/stuttmut
/obj/item/dnainjector/stuttmut
name = "\improper DNA injector (Stutt.)"
desc = "Makes you s-s-stuttterrr"
add_mutations_static = list(NERVOUS)
/obj/item/weapon/dnainjector/antistutt
/obj/item/dnainjector/antistutt
name = "\improper DNA injector (Anti-Stutt.)"
desc = "Fixes that speaking impairment."
remove_mutations_static = list(NERVOUS)
/obj/item/weapon/dnainjector/antifire
/obj/item/dnainjector/antifire
name = "\improper DNA injector (Anti-Fire)"
desc = "Cures fire."
remove_mutations_static = list(COLDRES)
/obj/item/weapon/dnainjector/firemut
/obj/item/dnainjector/firemut
name = "\improper DNA injector (Fire)"
desc = "Gives you fire."
add_mutations_static = list(COLDRES)
/obj/item/weapon/dnainjector/blindmut
/obj/item/dnainjector/blindmut
name = "\improper DNA injector (Blind)"
desc = "Makes you not see anything."
add_mutations_static = list(BLINDMUT)
/obj/item/weapon/dnainjector/antiblind
/obj/item/dnainjector/antiblind
name = "\improper DNA injector (Anti-Blind)"
desc = "IT'S A MIRACLE!!!"
remove_mutations_static = list(BLINDMUT)
/obj/item/weapon/dnainjector/antitele
/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/weapon/dnainjector/telemut
/obj/item/dnainjector/telemut
name = "\improper DNA injector (Tele.)"
desc = "Super brain man!"
add_mutations_static = list(TK)
/obj/item/weapon/dnainjector/telemut/darkbundle
/obj/item/dnainjector/telemut/darkbundle
name = "\improper DNA injector"
desc = "Good. Let the hate flow through you."
/obj/item/weapon/dnainjector/deafmut
/obj/item/dnainjector/deafmut
name = "\improper DNA injector (Deaf)"
desc = "Sorry, what did you say?"
add_mutations_static = list(DEAFMUT)
/obj/item/weapon/dnainjector/antideaf
/obj/item/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
/obj/item/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
/obj/item/dnainjector/m2h
name = "\improper DNA injector (Monkey > Human)"
desc = "Will make you...less hairy."
remove_mutations_static = list(RACEMUT)
/obj/item/weapon/dnainjector/antichameleon
/obj/item/dnainjector/antichameleon
name = "\improper DNA injector (Anti-Chameleon)"
remove_mutations_static = list(CHAMELEON)
/obj/item/weapon/dnainjector/chameleonmut
/obj/item/dnainjector/chameleonmut
name = "\improper DNA injector (Chameleon)"
add_mutations_static = list(CHAMELEON)
/obj/item/weapon/dnainjector/antiwacky
/obj/item/dnainjector/antiwacky
name = "\improper DNA injector (Anti-Wacky)"
remove_mutations_static = list(WACKY)
/obj/item/weapon/dnainjector/wackymut
/obj/item/dnainjector/wackymut
name = "\improper DNA injector (Wacky)"
add_mutations_static = list(WACKY)
/obj/item/weapon/dnainjector/antimute
/obj/item/dnainjector/antimute
name = "\improper DNA injector (Anti-Mute)"
remove_mutations_static = list(MUT_MUTE)
/obj/item/weapon/dnainjector/mutemut
/obj/item/dnainjector/mutemut
name = "\improper DNA injector (Mute)"
add_mutations_static = list(MUT_MUTE)
/obj/item/weapon/dnainjector/antismile
/obj/item/dnainjector/antismile
name = "\improper DNA injector (Anti-Smile)"
remove_mutations_static = list(SMILE)
/obj/item/weapon/dnainjector/smilemut
/obj/item/dnainjector/smilemut
name = "\improper DNA injector (Smile)"
add_mutations_static = list(SMILE)
/obj/item/weapon/dnainjector/unintelligablemut
/obj/item/dnainjector/unintelligablemut
name = "\improper DNA injector (Unintelligable)"
add_mutations_static = list(UNINTELLIGABLE)
/obj/item/weapon/dnainjector/antiunintelligable
/obj/item/dnainjector/antiunintelligable
name = "\improper DNA injector (Anti-Unintelligable)"
remove_mutations_static = list(UNINTELLIGABLE)
/obj/item/weapon/dnainjector/swedishmut
/obj/item/dnainjector/swedishmut
name = "\improper DNA injector (Swedish)"
add_mutations_static = list(SWEDISH)
/obj/item/weapon/dnainjector/antiswedish
/obj/item/dnainjector/antiswedish
name = "\improper DNA injector (Anti-Swedish)"
remove_mutations_static = list(SWEDISH)
/obj/item/weapon/dnainjector/chavmut
/obj/item/dnainjector/chavmut
name = "\improper DNA injector (Chav)"
add_mutations_static = list(CHAV)
/obj/item/weapon/dnainjector/antichav
/obj/item/dnainjector/antichav
name = "\improper DNA injector (Anti-Chav)"
remove_mutations_static = list(CHAV)
/obj/item/weapon/dnainjector/elvismut
/obj/item/dnainjector/elvismut
name = "\improper DNA injector (Elvis)"
add_mutations_static = list(ELVIS)
/obj/item/weapon/dnainjector/antielvis
/obj/item/dnainjector/antielvis
name = "\improper DNA injector (Anti-Elvis)"
remove_mutations_static = list(ELVIS)
/obj/item/weapon/dnainjector/lasereyesmut
/obj/item/dnainjector/lasereyesmut
name = "\improper DNA injector (Laser Eyes)"
add_mutations_static = list(LASEREYES)
/obj/item/weapon/dnainjector/antilasereyes
/obj/item/dnainjector/antilasereyes
name = "\improper DNA injector (Anti-Laser Eyes)"
remove_mutations_static = list(LASEREYES)
/obj/item/weapon/dnainjector/timed
/obj/item/dnainjector/timed
var/duration = 600
/obj/item/weapon/dnainjector/timed/inject(mob/living/carbon/M, mob/user)
/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>")
@@ -359,12 +359,12 @@
else
return FALSE
/obj/item/weapon/dnainjector/timed/hulk
/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/weapon/dnainjector/timed/h2m
/obj/item/dnainjector/timed/h2m
name = "\improper DNA injector (Human > Monkey)"
desc = "Will make you a flea bag."
add_mutations_static = list(RACEMUT)
+11 -11
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/extinguisher
/obj/item/extinguisher
name = "fire extinguisher"
desc = "A traditional red fire extinguisher."
icon = 'icons/obj/items.dmi'
@@ -24,7 +24,7 @@
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"
@@ -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()
+26 -26
View File
@@ -1,4 +1,4 @@
/obj/item/weapon/flamethrower
/obj/item/flamethrower
name = "flamethrower"
desc = "You are a firestarter!"
icon = 'icons/obj/flamethrower.dmi'
@@ -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)
+26 -26
View File
@@ -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,
@@ -2,7 +2,7 @@
#define WIRED 2
#define READY 3
/obj/item/weapon/grenade/chem_grenade
/obj/item/grenade/chem_grenade
name = "chemical grenade"
desc = "A custom made grenade."
icon_state = "chemg"
@@ -11,7 +11,7 @@
force = 2
var/stage = EMPTY
var/list/beakers = list()
var/list/allowed_containers = list(/obj/item/weapon/reagent_containers/glass/beaker, /obj/item/weapon/reagent_containers/glass/bottle)
var/list/allowed_containers = list(/obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle)
var/affected_area = 3
var/obj/item/device/assembly_holder/nadeassembly = null
var/assemblyattacher
@@ -19,17 +19,17 @@
var/threatscale = 1 // Used by advanced grenades to make them slightly more worthy.
var/no_splash = FALSE //If the grenade deletes even if it has no reagents to splash with. Used for slime core reactions.
/obj/item/weapon/grenade/chem_grenade/Initialize()
/obj/item/grenade/chem_grenade/Initialize()
. = ..()
create_reagents(1000)
stage_change() // If no argument is set, it will change the stage to the current stage, useful for stock grenades that start READY.
/obj/item/weapon/grenade/chem_grenade/examine(mob/user)
/obj/item/grenade/chem_grenade/examine(mob/user)
display_timer = (stage == READY && !nadeassembly) //show/hide the timer based on assembly state
..()
/obj/item/weapon/grenade/chem_grenade/attack_self(mob/user)
/obj/item/grenade/chem_grenade/attack_self(mob/user)
if(stage == READY && !active)
if(nadeassembly)
nadeassembly.attack_self(user)
@@ -49,8 +49,8 @@
addtimer(CALLBACK(src, .proc/prime), det_time)
/obj/item/weapon/grenade/chem_grenade/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
/obj/item/grenade/chem_grenade/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/screwdriver))
if(stage == WIRED)
if(beakers.len)
stage_change(READY)
@@ -103,11 +103,11 @@
to_chat(user, "<span class='warning'>You need one length of coil to wire the assembly!</span>")
return
else if(stage == READY && istype(I, /obj/item/weapon/wirecutters) && !active)
else if(stage == READY && istype(I, /obj/item/wirecutters) && !active)
stage_change(WIRED)
to_chat(user, "<span class='notice'>You unlock the [initial(name)] assembly.</span>")
else if(stage == WIRED && istype(I, /obj/item/weapon/wrench))
else if(stage == WIRED && istype(I, /obj/item/wrench))
if(beakers.len)
for(var/obj/O in beakers)
O.loc = get_turf(src)
@@ -125,7 +125,7 @@
else
return ..()
/obj/item/weapon/grenade/chem_grenade/proc/stage_change(N)
/obj/item/grenade/chem_grenade/proc/stage_change(N)
if(N)
stage = N
if(stage == EMPTY)
@@ -143,24 +143,24 @@
//assembly stuff
/obj/item/weapon/grenade/chem_grenade/receive_signal()
/obj/item/grenade/chem_grenade/receive_signal()
prime()
/obj/item/weapon/grenade/chem_grenade/Crossed(atom/movable/AM)
/obj/item/grenade/chem_grenade/Crossed(atom/movable/AM)
if(nadeassembly)
nadeassembly.Crossed(AM)
/obj/item/weapon/grenade/chem_grenade/on_found(mob/finder)
/obj/item/grenade/chem_grenade/on_found(mob/finder)
if(nadeassembly)
nadeassembly.on_found(finder)
/obj/item/weapon/grenade/chem_grenade/prime()
/obj/item/grenade/chem_grenade/prime()
if(stage != READY)
return
var/list/datum/reagents/reactants = list()
for(var/obj/item/weapon/reagent_containers/glass/G in beakers)
for(var/obj/item/reagent_containers/glass/G in beakers)
reactants += G.reagents
if(!chem_splash(get_turf(src), affected_area, reactants, ignition_temp, threatscale) && !no_splash)
@@ -189,24 +189,24 @@
qdel(src)
//Large chem grenades accept slime cores and use the appropriately.
/obj/item/weapon/grenade/chem_grenade/large
/obj/item/grenade/chem_grenade/large
name = "large grenade"
desc = "A custom made large grenade. It affects a larger area."
icon_state = "large_grenade"
allowed_containers = list(/obj/item/weapon/reagent_containers/glass, /obj/item/weapon/reagent_containers/food/condiment,
/obj/item/weapon/reagent_containers/food/drinks)
allowed_containers = list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/food/condiment,
/obj/item/reagent_containers/food/drinks)
origin_tech = "combat=3;engineering=3"
affected_area = 5
ignition_temp = 25 // Large grenades are slightly more effective at setting off heat-sensitive mixtures than smaller grenades.
threatscale = 1.1 // 10% more effective.
/obj/item/weapon/grenade/chem_grenade/large/prime()
/obj/item/grenade/chem_grenade/large/prime()
if(stage != READY)
return
for(var/obj/item/slime_extract/S in beakers)
if(S.Uses)
for(var/obj/item/weapon/reagent_containers/glass/G in beakers)
for(var/obj/item/reagent_containers/glass/G in beakers)
G.reagents.trans_to(S, G.reagents.total_volume)
//If there is still a core (sometimes it's used up)
@@ -215,7 +215,7 @@
if(S)
if(S.reagents && S.reagents.total_volume)
for(var/obj/item/weapon/reagent_containers/glass/G in beakers)
for(var/obj/item/reagent_containers/glass/G in beakers)
S.reagents.trans_to(G, S.reagents.total_volume)
else
S.forceMove(get_turf(src))
@@ -225,7 +225,7 @@
//I tried to just put it in the allowed_containers list but
//if you do that it must have reagents. If you're going to
//make a special case you might as well do it explicitly. -Sayu
/obj/item/weapon/grenade/chem_grenade/large/attackby(obj/item/I, mob/user, params)
/obj/item/grenade/chem_grenade/large/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/slime_extract) && stage == WIRED)
if(!user.transferItemToLoc(I, src))
return
@@ -234,14 +234,14 @@
else
return ..()
/obj/item/weapon/grenade/chem_grenade/cryo // Intended for rare cryogenic mixes. Cools the area moderately upon detonation.
/obj/item/grenade/chem_grenade/cryo // Intended for rare cryogenic mixes. Cools the area moderately upon detonation.
name = "cryo grenade"
desc = "A custom made cryogenic grenade. It rapidly cools its contents upon detonation."
icon_state = "cryog"
affected_area = 2
ignition_temp = -100
/obj/item/weapon/grenade/chem_grenade/pyro // Intended for pyrotechnical mixes. Produces a small fire upon detonation, igniting potentially flammable mixtures.
/obj/item/grenade/chem_grenade/pyro // Intended for pyrotechnical mixes. Produces a small fire upon detonation, igniting potentially flammable mixtures.
name = "pyro grenade"
desc = "A custom made pyrotechnical grenade. It heats up and ignites its contents upon detonation."
icon_state = "pyrog"
@@ -249,14 +249,14 @@
affected_area = 3
ignition_temp = 500 // This is enough to expose a hotspot.
/obj/item/weapon/grenade/chem_grenade/adv_release // Intended for weaker, but longer lasting effects. Could have some interesting uses.
/obj/item/grenade/chem_grenade/adv_release // Intended for weaker, but longer lasting effects. Could have some interesting uses.
name = "advanced release grenade"
desc = "A custom made advanced release grenade. It is able to be detonated more than once. Can be configured using a multitool."
icon_state = "timeg"
origin_tech = "combat=3;engineering=4"
var/unit_spread = 10 // Amount of units per repeat. Can be altered with a multitool.
/obj/item/weapon/grenade/chem_grenade/adv_release/attackby(obj/item/I, mob/user, params)
/obj/item/grenade/chem_grenade/adv_release/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/device/multitool))
switch(unit_spread)
if(0 to 24)
@@ -269,12 +269,12 @@
return
..()
/obj/item/weapon/grenade/chem_grenade/adv_release/prime()
/obj/item/grenade/chem_grenade/adv_release/prime()
if(stage != READY)
return
var/total_volume = 0
for(var/obj/item/weapon/reagent_containers/RC in beakers)
for(var/obj/item/reagent_containers/RC in beakers)
total_volume += RC.reagents.total_volume
if(!total_volume)
qdel(src)
@@ -283,7 +283,7 @@
var/fraction = unit_spread/total_volume
var/datum/reagents/reactants = new(unit_spread)
reactants.my_atom = src
for(var/obj/item/weapon/reagent_containers/RC in beakers)
for(var/obj/item/reagent_containers/RC in beakers)
RC.reagents.trans_to(reactants, RC.reagents.total_volume*fraction, threatscale, 1, 1)
chem_splash(get_turf(src), affected_area, list(reactants), ignition_temp, threatscale)
@@ -308,15 +308,15 @@
////// PREMADE GRENADES //////
//////////////////////////////
/obj/item/weapon/grenade/chem_grenade/metalfoam
/obj/item/grenade/chem_grenade/metalfoam
name = "metal foam grenade"
desc = "Used for emergency sealing of air breaches."
stage = READY
/obj/item/weapon/grenade/chem_grenade/metalfoam/Initialize()
/obj/item/grenade/chem_grenade/metalfoam/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("aluminium", 30)
B2.reagents.add_reagent("foaming_agent", 10)
@@ -326,15 +326,15 @@
beakers += B2
/obj/item/weapon/grenade/chem_grenade/incendiary
/obj/item/grenade/chem_grenade/incendiary
name = "incendiary grenade"
desc = "Used for clearing rooms of living things."
stage = READY
/obj/item/weapon/grenade/chem_grenade/incendiary/Initialize()
/obj/item/grenade/chem_grenade/incendiary/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("phosphorus", 25)
B2.reagents.add_reagent("stable_plasma", 25)
@@ -344,15 +344,15 @@
beakers += B2
/obj/item/weapon/grenade/chem_grenade/antiweed
/obj/item/grenade/chem_grenade/antiweed
name = "weedkiller grenade"
desc = "Used for purging large areas of invasive plant species. Contents under pressure. Do not directly inhale contents."
stage = READY
/obj/item/weapon/grenade/chem_grenade/antiweed/Initialize()
/obj/item/grenade/chem_grenade/antiweed/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("plantbgone", 25)
B1.reagents.add_reagent("potassium", 25)
@@ -363,15 +363,15 @@
beakers += B2
/obj/item/weapon/grenade/chem_grenade/cleaner
/obj/item/grenade/chem_grenade/cleaner
name = "cleaner grenade"
desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
stage = READY
/obj/item/weapon/grenade/chem_grenade/cleaner/Initialize()
/obj/item/grenade/chem_grenade/cleaner/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("fluorosurfactant", 40)
B2.reagents.add_reagent("water", 40)
@@ -381,15 +381,15 @@
beakers += B2
/obj/item/weapon/grenade/chem_grenade/ez_clean
/obj/item/grenade/chem_grenade/ez_clean
name = "cleaner grenade"
desc = "Waffle Co.-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
stage = READY
/obj/item/weapon/grenade/chem_grenade/ez_clean/Initialize()
/obj/item/grenade/chem_grenade/ez_clean/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("fluorosurfactant", 40)
B2.reagents.add_reagent("water", 40)
@@ -400,15 +400,15 @@
/obj/item/weapon/grenade/chem_grenade/teargas
/obj/item/grenade/chem_grenade/teargas
name = "teargas grenade"
desc = "Used for nonlethal riot control. Contents under pressure. Do not directly inhale contents."
stage = READY
/obj/item/weapon/grenade/chem_grenade/teargas/Initialize()
/obj/item/grenade/chem_grenade/teargas/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("condensedcapsaicin", 60)
B1.reagents.add_reagent("potassium", 40)
@@ -419,15 +419,15 @@
beakers += B2
/obj/item/weapon/grenade/chem_grenade/facid
/obj/item/grenade/chem_grenade/facid
name = "acid grenade"
desc = "Used for melting armoured opponents."
stage = READY
/obj/item/weapon/grenade/chem_grenade/facid/Initialize()
/obj/item/grenade/chem_grenade/facid/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
B1.reagents.add_reagent("facid", 290)
B1.reagents.add_reagent("potassium", 10)
@@ -439,15 +439,15 @@
beakers += B2
/obj/item/weapon/grenade/chem_grenade/colorful
/obj/item/grenade/chem_grenade/colorful
name = "colorful grenade"
desc = "Used for wide scale painting projects."
stage = READY
/obj/item/weapon/grenade/chem_grenade/colorful/Initialize()
/obj/item/grenade/chem_grenade/colorful/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent("colorful_reagent", 25)
B1.reagents.add_reagent("potassium", 25)
@@ -457,16 +457,16 @@
beakers += B1
beakers += B2
/obj/item/weapon/grenade/chem_grenade/glitter
/obj/item/grenade/chem_grenade/glitter
name = "generic glitter grenade"
desc = "You shouldn't see this description."
stage = READY
var/glitter_type = "glitter"
/obj/item/weapon/grenade/chem_grenade/glitter/Initialize()
/obj/item/grenade/chem_grenade/glitter/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/B2 = new(src)
B1.reagents.add_reagent(glitter_type, 25)
B1.reagents.add_reagent("potassium", 25)
@@ -476,30 +476,30 @@
beakers += B1
beakers += B2
/obj/item/weapon/grenade/chem_grenade/glitter/pink
/obj/item/grenade/chem_grenade/glitter/pink
name = "pink glitter bomb"
desc = "For that HOT glittery look."
glitter_type = "pink_glitter"
/obj/item/weapon/grenade/chem_grenade/glitter/blue
/obj/item/grenade/chem_grenade/glitter/blue
name = "blue glitter bomb"
desc = "For that COOL glittery look."
glitter_type = "blue_glitter"
/obj/item/weapon/grenade/chem_grenade/glitter/white
/obj/item/grenade/chem_grenade/glitter/white
name = "white glitter bomb"
desc = "For that somnolent glittery look."
glitter_type = "white_glitter"
/obj/item/weapon/grenade/chem_grenade/clf3
/obj/item/grenade/chem_grenade/clf3
name = "clf3 grenade"
desc = "BURN!-brand foaming clf3. In a special applicator for rapid purging of wide areas."
stage = READY
/obj/item/weapon/grenade/chem_grenade/clf3/Initialize()
/obj/item/grenade/chem_grenade/clf3/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
B1.reagents.add_reagent("fluorosurfactant", 250)
B1.reagents.add_reagent("clf3", 50)
@@ -509,15 +509,15 @@
beakers += B1
beakers += B2
/obj/item/weapon/grenade/chem_grenade/bioterrorfoam
/obj/item/grenade/chem_grenade/bioterrorfoam
name = "Bio terror foam grenade"
desc = "Tiger Cooperative chemical foam grenade. Causes temporary irration, blindness, confusion, mutism, and mutations to carbon based life forms. Contains additional spore toxin"
stage = READY
/obj/item/weapon/grenade/chem_grenade/bioterrorfoam/Initialize()
/obj/item/grenade/chem_grenade/bioterrorfoam/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
B1.reagents.add_reagent("cryptobiolin", 75)
B1.reagents.add_reagent("water", 50)
@@ -529,15 +529,15 @@
beakers += B1
beakers += B2
/obj/item/weapon/grenade/chem_grenade/tuberculosis
/obj/item/grenade/chem_grenade/tuberculosis
name = "Fungal tuberculosis grenade"
desc = "WARNING: GRENADE WILL RELEASE DEADLY SPORES CONTAINING ACTIVE AGENTS. SEAL SUIT AND AIRFLOW BEFORE USE."
stage = READY
/obj/item/weapon/grenade/chem_grenade/tuberculosis/Initialize()
/obj/item/grenade/chem_grenade/tuberculosis/Initialize()
. = ..()
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/weapon/reagent_containers/glass/beaker/bluespace/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
B1.reagents.add_reagent("potassium", 50)
B1.reagents.add_reagent("phosphorus", 50)
@@ -1,14 +1,14 @@
////////////////////
//Clusterbang
////////////////////
/obj/item/weapon/grenade/clusterbuster
/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/weapon/grenade/flashbang/cluster
var/payload = /obj/item/grenade/flashbang/cluster
/obj/item/weapon/grenade/clusterbuster/prime()
/obj/item/grenade/clusterbuster/prime()
update_mob()
var/numspawned = rand(4,8)
var/again = 0
@@ -19,7 +19,7 @@
numspawned--
for(var/loop = again ,loop > 0, loop--)
new /obj/item/weapon/grenade/clusterbuster/segment(loc, payload)//Creates 'segments' that launches a few more payloads
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
@@ -31,13 +31,13 @@
//////////////////////
//Clusterbang segment
//////////////////////
/obj/item/weapon/grenade/clusterbuster/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/weapon/grenade/clusterbuster/segment/New(var/loc, var/payload_type = /obj/item/weapon/grenade/flashbang/cluster)
/obj/item/grenade/clusterbuster/segment/New(var/loc, var/payload_type = /obj/item/grenade/flashbang/cluster)
..()
icon_state = "clusterbang_segment_active"
payload = payload_type
@@ -45,7 +45,7 @@
walk_away(src,loc,rand(1,4))
addtimer(CALLBACK(src, .proc/prime), rand(15,60))
/obj/item/weapon/grenade/clusterbuster/segment/prime()
/obj/item/grenade/clusterbuster/segment/prime()
new /obj/effect/payload_spawner(loc, payload, rand(4,8))
@@ -59,7 +59,7 @@
/obj/effect/payload_spawner/New(var/turf/newloc,var/type, var/numspawned as num)
for(var/loop = numspawned ,loop > 0, loop--)
var/obj/item/weapon/grenade/P = new type(loc)
var/obj/item/grenade/P = new type(loc)
P.active = 1
walk_away(P,loc,rand(1,4))
@@ -72,64 +72,64 @@
//////////////////////////////////
//Custom payload clusterbusters
/////////////////////////////////
/obj/item/weapon/grenade/flashbang/cluster
/obj/item/grenade/flashbang/cluster
icon_state = "flashbang_active"
/obj/item/weapon/grenade/clusterbuster/emp
/obj/item/grenade/clusterbuster/emp
name = "Electromagnetic Storm"
payload = /obj/item/weapon/grenade/empgrenade
payload = /obj/item/grenade/empgrenade
/obj/item/weapon/grenade/clusterbuster/smoke
/obj/item/grenade/clusterbuster/smoke
name = "Ninja Vanish"
payload = /obj/item/weapon/grenade/smokebomb
payload = /obj/item/grenade/smokebomb
/obj/item/weapon/grenade/clusterbuster/metalfoam
/obj/item/grenade/clusterbuster/metalfoam
name = "Instant Concrete"
payload = /obj/item/weapon/grenade/chem_grenade/metalfoam
payload = /obj/item/grenade/chem_grenade/metalfoam
/obj/item/weapon/grenade/clusterbuster/inferno
/obj/item/grenade/clusterbuster/inferno
name = "Inferno"
payload = /obj/item/weapon/grenade/chem_grenade/incendiary
payload = /obj/item/grenade/chem_grenade/incendiary
/obj/item/weapon/grenade/clusterbuster/antiweed
/obj/item/grenade/clusterbuster/antiweed
name = "RoundDown"
payload = /obj/item/weapon/grenade/chem_grenade/antiweed
payload = /obj/item/grenade/chem_grenade/antiweed
/obj/item/weapon/grenade/clusterbuster/cleaner
/obj/item/grenade/clusterbuster/cleaner
name = "Mr. Proper"
payload = /obj/item/weapon/grenade/chem_grenade/cleaner
payload = /obj/item/grenade/chem_grenade/cleaner
/obj/item/weapon/grenade/clusterbuster/teargas
/obj/item/grenade/clusterbuster/teargas
name = "Oignon Grenade"
payload = /obj/item/weapon/grenade/chem_grenade/teargas
payload = /obj/item/grenade/chem_grenade/teargas
/obj/item/weapon/grenade/clusterbuster/facid
/obj/item/grenade/clusterbuster/facid
name = "Aciding Rain"
payload = /obj/item/weapon/grenade/chem_grenade/facid
payload = /obj/item/grenade/chem_grenade/facid
/obj/item/weapon/grenade/clusterbuster/syndieminibomb
/obj/item/grenade/clusterbuster/syndieminibomb
name = "SyndiWrath"
payload = /obj/item/weapon/grenade/syndieminibomb
payload = /obj/item/grenade/syndieminibomb
/obj/item/weapon/grenade/clusterbuster/spawner_manhacks
/obj/item/grenade/clusterbuster/spawner_manhacks
name = "iViscerator"
payload = /obj/item/weapon/grenade/spawnergrenade/manhacks
payload = /obj/item/grenade/spawnergrenade/manhacks
/obj/item/weapon/grenade/clusterbuster/spawner_spesscarp
/obj/item/grenade/clusterbuster/spawner_spesscarp
name = "Invasion of the Space Carps"
payload = /obj/item/weapon/grenade/spawnergrenade/spesscarp
payload = /obj/item/grenade/spawnergrenade/spesscarp
/obj/item/weapon/grenade/clusterbuster/soap
/obj/item/grenade/clusterbuster/soap
name = "Slipocalypse"
payload = /obj/item/weapon/grenade/spawnergrenade/syndiesoap
payload = /obj/item/grenade/spawnergrenade/syndiesoap
/obj/item/weapon/grenade/clusterbuster/clf3
/obj/item/grenade/clusterbuster/clf3
name = "WELCOME TO HELL"
payload = /obj/item/weapon/grenade/chem_grenade/clf3
payload = /obj/item/grenade/chem_grenade/clf3
//random clusterbuster spawner
/obj/item/weapon/grenade/clusterbuster/random/New()
var/real_type = pick(subtypesof(/obj/item/weapon/grenade/clusterbuster))
/obj/item/grenade/clusterbuster/random/New()
var/real_type = pick(subtypesof(/obj/item/grenade/clusterbuster))
new real_type(loc)
qdel(src)
@@ -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)
@@ -1,4 +1,4 @@
/obj/item/weapon/grenade/flashbang
/obj/item/grenade/flashbang
name = "flashbang"
icon_state = "flashbang"
item_state = "flashbang"
@@ -6,7 +6,7 @@
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)
@@ -1,6 +1,6 @@
//improvised explosives//
/obj/item/weapon/grenade/iedcasing
/obj/item/grenade/iedcasing
name = "improvised firebomb"
desc = "A weak, improvised incendiary device."
w_class = WEIGHT_CLASS_SMALL
@@ -19,7 +19,7 @@
var/range = 3
var/list/times
/obj/item/weapon/grenade/iedcasing/Initialize()
/obj/item/grenade/iedcasing/Initialize()
. = ..()
add_overlay("improvised_grenade_filled")
add_overlay("improvised_grenade_wired")
@@ -31,9 +31,9 @@
else
range = pick(2,2,2,3,3,3,4)
/obj/item/weapon/grenade/iedcasing/CheckParts(list/parts_list)
/obj/item/grenade/iedcasing/CheckParts(list/parts_list)
..()
var/obj/item/weapon/reagent_containers/food/drinks/soda_cans/can = locate() in contents
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
@@ -43,7 +43,7 @@
underlays += can_underlay
/obj/item/weapon/grenade/iedcasing/attack_self(mob/user) //
/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>")
@@ -61,11 +61,11 @@
C.throw_mode_on()
addtimer(CALLBACK(src, .proc/prime), det_time)
/obj/item/weapon/grenade/iedcasing/prime() //Blowing that can up
/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/weapon/grenade/iedcasing/examine(mob/user)
/obj/item/grenade/iedcasing/examine(mob/user)
..()
to_chat(user, "You can't tell when it will explode!")
@@ -1,4 +1,4 @@
/obj/item/weapon/grenade
/obj/item/grenade
name = "grenade"
desc = "It has an adjustable timer."
w_class = WEIGHT_CLASS_SMALL
@@ -17,13 +17,13 @@
var/det_time = 50
var/display_timer = 1
/obj/item/weapon/grenade/deconstruct(disassembled = TRUE)
/obj/item/grenade/deconstruct(disassembled = TRUE)
if(!disassembled)
prime()
if(!QDELETED(src))
qdel(src)
/obj/item/weapon/grenade/proc/clown_check(mob/living/carbon/human/user)
/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
@@ -37,7 +37,7 @@
return 1
/obj/item/weapon/grenade/examine(mob/user)
/obj/item/grenade/examine(mob/user)
..()
if(display_timer)
if(det_time > 1)
@@ -46,7 +46,7 @@
to_chat(user, "\The [src] is set for instant detonation.")
/obj/item/weapon/grenade/attack_self(mob/user)
/obj/item/grenade/attack_self(mob/user)
if(!active)
if(clown_check(user))
preprime(user)
@@ -54,7 +54,7 @@
var/mob/living/carbon/C = user
C.throw_mode_on()
/obj/item/weapon/grenade/proc/preprime(mob/user)
/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)
@@ -71,16 +71,16 @@
addtimer(CALLBACK(src, .proc/prime), det_time)
/obj/item/weapon/grenade/proc/prime()
/obj/item/grenade/proc/prime()
/obj/item/weapon/grenade/proc/update_mob()
/obj/item/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))
/obj/item/grenade/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/screwdriver))
switch(det_time)
if ("1")
det_time = 10
@@ -98,14 +98,14 @@
else
return ..()
/obj/item/weapon/grenade/attack_hand()
/obj/item/grenade/attack_hand()
walk(src, null, null)
..()
/obj/item/weapon/grenade/attack_paw(mob/user)
/obj/item/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)
/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>")
@@ -1,4 +1,4 @@
/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"
@@ -15,17 +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/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))
@@ -37,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
@@ -46,7 +46,7 @@
return
..()
/obj/item/weapon/grenade/plastic/prime()
/obj/item/grenade/plastic/prime()
var/turf/location
if(target)
if(!QDELETED(target))
@@ -67,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
@@ -88,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
@@ -119,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>")
@@ -142,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
@@ -152,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
@@ -167,18 +167,18 @@
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)
@@ -202,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))
@@ -211,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
@@ -249,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
@@ -264,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"
@@ -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)
@@ -1,4 +1,4 @@
/obj/item/weapon/grenade/spawnergrenade
/obj/item/grenade/spawnergrenade
desc = "It will unleash an unspecified anomaly into the vicinity."
name = "delivery grenade"
icon = 'icons/obj/grenade.dmi'
@@ -8,7 +8,7 @@
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.
/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
@@ -22,18 +22,18 @@
qdel(src)
/obj/item/weapon/grenade/spawnergrenade/manhacks
/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/weapon/grenade/spawnergrenade/spesscarp
/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/weapon/grenade/spawnergrenade/syndiesoap
/obj/item/grenade/spawnergrenade/syndiesoap
name = "Mister Scrubby"
spawner_type = /obj/item/weapon/soap/syndie
spawner_type = /obj/item/soap/syndie
@@ -1,4 +1,4 @@
/obj/item/weapon/grenade/syndieminibomb
/obj/item/grenade/syndieminibomb
desc = "A syndicate manufactured explosive used to sow destruction and chaos"
name = "syndicate minibomb"
icon = 'icons/obj/grenade.dmi'
@@ -7,28 +7,28 @@
origin_tech = "materials=3;magnets=4;syndicate=3"
/obj/item/weapon/grenade/syndieminibomb/prime()
/obj/item/grenade/syndieminibomb/prime()
update_mob()
explosion(src.loc,1,2,4,flame_range = 2)
qdel(src)
/obj/item/weapon/grenade/syndieminibomb/concussion
/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/weapon/grenade/syndieminibomb/concussion/prime()
/obj/item/grenade/syndieminibomb/concussion/prime()
update_mob()
explosion(src.loc,0,2,3,flame_range = 3)
qdel(src)
/obj/item/weapon/grenade/syndieminibomb/concussion/frag
/obj/item/grenade/syndieminibomb/concussion/frag
name = "frag grenade"
desc = "Fire in the hole."
icon_state = "frag"
/obj/item/weapon/grenade/gluon
/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'
@@ -38,7 +38,7 @@
var/rad_damage = 35
var/stamina_damage = 30
/obj/item/weapon/grenade/gluon/prime()
/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)
+47 -47
View File
@@ -1,9 +1,9 @@
/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
@@ -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,7 +85,7 @@
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"
@@ -98,7 +98,7 @@
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"
/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,14 +199,14 @@
"<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"
@@ -214,20 +214,20 @@
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"
/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
@@ -242,7 +242,7 @@
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_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)
..()
+14 -14
View File
@@ -4,7 +4,7 @@
//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"
@@ -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
@@ -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,7 +168,7 @@
bloodthirst = Clamp(bloodthirst + amt, HIS_GRACE_CONSUME_OWNER, HIS_GRACE_FALL_ASLEEP)
update_stats()
/obj/item/weapon/his_grace/proc/update_stats()
/obj/item/his_grace/proc/update_stats()
flags_1 &= ~NODROP_1
var/mob/living/master = get_atom_on_turf(src, /mob/living)
switch(bloodthirst)
@@ -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'
@@ -19,7 +19,7 @@
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
+43 -43
View File
@@ -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,7 +48,7 @@
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"
@@ -59,7 +59,7 @@
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"
@@ -280,7 +280,7 @@
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,7 +315,7 @@
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"
@@ -326,7 +326,7 @@
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
@@ -360,7 +360,7 @@
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'
@@ -374,22 +374,22 @@
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)
..()
/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'
@@ -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
@@ -12,16 +12,16 @@
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
..()
@@ -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)
@@ -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_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
@@ -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
@@ -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
@@ -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)
@@ -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
@@ -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
@@ -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)
..()
@@ -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
@@ -1,10 +1,10 @@
/obj/item/weapon/implant/mindshield
/obj/item/implant/mindshield
name = "mindshield implant"
desc = "Protects against brainwashing."
origin_tech = "materials=2;biotech=4;programming=4"
activated = 0
/obj/item/weapon/implant/mindshield/get_data()
/obj/item/implant/mindshield/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Nanotrasen Employee Management Implant<BR>
<b>Life:</b> Ten years.<BR>
@@ -17,7 +17,7 @@
return dat
/obj/item/weapon/implant/mindshield/implant(mob/living/target, mob/user, silent = 0)
/obj/item/implant/mindshield/implant(mob/living/target, mob/user, silent = 0)
if(..())
if((target.mind in (SSticker.mode.head_revolutionaries | SSticker.mode.get_gang_bosses())))
if(!silent)
@@ -42,18 +42,18 @@
return 1
return 0
/obj/item/weapon/implant/mindshield/removed(mob/target, silent = 0, special = 0)
/obj/item/implant/mindshield/removed(mob/target, silent = 0, special = 0)
if(..())
if(target.stat != DEAD && !silent)
to_chat(target, "<span class='boldnotice'>Your mind suddenly feels terribly vulnerable. You are no longer safe from brainwashing.</span>")
return 1
return 0
/obj/item/weapon/implanter/mindshield
/obj/item/implanter/mindshield
name = "implanter (mindshield)"
imp_type = /obj/item/weapon/implant/mindshield
imp_type = /obj/item/implant/mindshield
/obj/item/weapon/implantcase/mindshield
/obj/item/implantcase/mindshield
name = "implant case - 'Mindshield'"
desc = "A glass case containing a mindshield implant."
imp_type = /obj/item/weapon/implant/mindshield
imp_type = /obj/item/implant/mindshield
@@ -1,11 +1,11 @@
/obj/item/weapon/implant/weapons_auth
/obj/item/implant/weapons_auth
name = "firearms authentication implant"
desc = "Lets you shoot your guns"
icon_state = "auth"
origin_tech = "magnets=2;programming=7;biotech=5;syndicate=5"
activated = 0
/obj/item/weapon/implant/weapons_auth/get_data()
/obj/item/implant/weapons_auth/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Firearms Authentication Implant<BR>
<b>Life:</b> 4 hours after death of host<BR>
@@ -14,14 +14,14 @@
return dat
/obj/item/weapon/implant/adrenalin
/obj/item/implant/adrenalin
name = "adrenal implant"
desc = "Removes all stuns."
icon_state = "adrenal"
origin_tech = "materials=2;biotech=4;combat=3;syndicate=4"
uses = 3
/obj/item/weapon/implant/adrenalin/get_data()
/obj/item/implant/adrenalin/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Cybersun Industries Adrenaline Implant<BR>
<b>Life:</b> Five days.<BR>
@@ -32,7 +32,7 @@
<b>Integrity:</b> Implant can only be used three times before reserves are depleted."}
return dat
/obj/item/weapon/implant/adrenalin/activate()
/obj/item/implant/adrenalin/activate()
uses--
to_chat(imp_in, "<span class='notice'>You feel a sudden surge of energy!</span>")
imp_in.SetStun(0)
@@ -49,14 +49,14 @@
qdel(src)
/obj/item/weapon/implant/emp
/obj/item/implant/emp
name = "emp implant"
desc = "Triggers an EMP."
icon_state = "emp"
origin_tech = "biotech=3;magnets=4;syndicate=1"
uses = 3
/obj/item/weapon/implant/emp/activate()
/obj/item/implant/emp/activate()
uses--
empulse(imp_in, 3, 5)
if(!uses)
@@ -65,12 +65,12 @@
//Health Tracker Implant
/obj/item/weapon/implant/health
/obj/item/implant/health
name = "health implant"
activated = 0
var/healthstring = ""
/obj/item/weapon/implant/health/proc/sensehealth()
/obj/item/implant/health/proc/sensehealth()
if (!imp_in)
return "ERROR"
else
@@ -1,27 +1,27 @@
/obj/item/weapon/storage/internal/implant
/obj/item/storage/internal/implant
name = "bluespace pocket"
max_w_class = WEIGHT_CLASS_NORMAL
max_combined_w_class = 6
cant_hold = list(/obj/item/weapon/disk/nuclear)
cant_hold = list(/obj/item/disk/nuclear)
silent = 1
/obj/item/weapon/implant/storage
/obj/item/implant/storage
name = "storage implant"
desc = "Stores up to two big items in a bluespace pocket."
icon_state = "storage"
origin_tech = "materials=2;magnets=4;bluespace=5;syndicate=4"
item_color = "r"
var/obj/item/weapon/storage/internal/implant/storage
var/obj/item/storage/internal/implant/storage
/obj/item/weapon/implant/storage/New()
/obj/item/implant/storage/New()
..()
storage = new /obj/item/weapon/storage/internal/implant(src)
storage = new /obj/item/storage/internal/implant(src)
/obj/item/weapon/implant/storage/activate()
/obj/item/implant/storage/activate()
storage.MouseDrop(imp_in)
/obj/item/weapon/implant/storage/removed(source, silent = 0, special = 0)
/obj/item/implant/storage/removed(source, silent = 0, special = 0)
if(..())
if(!special)
storage.close_all()
@@ -29,10 +29,10 @@
storage.remove_from_storage(I, get_turf(source))
return 1
/obj/item/weapon/implant/storage/implant(mob/living/target, mob/user, silent = 0)
/obj/item/implant/storage/implant(mob/living/target, mob/user, silent = 0)
for(var/X in target.implants)
if(istype(X, type))
var/obj/item/weapon/implant/storage/imp_e = X
var/obj/item/implant/storage/imp_e = X
imp_e.storage.storage_slots += storage.storage_slots
imp_e.storage.max_combined_w_class += storage.max_combined_w_class
imp_e.storage.contents += storage.contents
@@ -45,6 +45,6 @@
return ..()
/obj/item/weapon/implanter/storage
/obj/item/implanter/storage
name = "implanter (storage)"
imp_type = /obj/item/weapon/implant/storage
imp_type = /obj/item/implant/storage

Some files were not shown because too many files have changed in this diff Show More