Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into Ghommie-cit11
This commit is contained in:
@@ -37,6 +37,7 @@ RLD
|
||||
var/has_ammobar = FALSE //controls whether or not does update_icon apply ammo indicator overlays
|
||||
var/ammo_sections = 10 //amount of divisions in the ammo indicator overlay/number of ammo indicator states
|
||||
var/custom_range = 7
|
||||
var/upgrade = FALSE
|
||||
|
||||
/obj/item/construction/Initialize()
|
||||
. = ..()
|
||||
@@ -82,6 +83,11 @@ RLD
|
||||
loaded = loadwithsheets(W, sheetmultiplier * 0.25, user) // 1 matter for 1 floortile, as 4 tiles are produced from 1 metal
|
||||
if(loaded)
|
||||
to_chat(user, "<span class='notice'>[src] now holds [matter]/[max_matter] matter-units.</span>")
|
||||
else if(istype(W, /obj/item/rcd_upgrade))
|
||||
to_chat(user, "<span class='notice'>You upgrade the RCD with the [W]!</span>")
|
||||
upgrade = TRUE
|
||||
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
|
||||
qdel(W)
|
||||
else
|
||||
return ..()
|
||||
update_icon() //ensures that ammo counters (if present) get updated
|
||||
@@ -148,6 +154,7 @@ RLD
|
||||
has_ammobar = TRUE
|
||||
var/mode = 1
|
||||
var/ranged = FALSE
|
||||
var/computer_dir = 1
|
||||
var/airlock_type = /obj/machinery/door/airlock
|
||||
var/airlock_glass = FALSE // So the floor's rcd_act knows how much ammo to use
|
||||
var/window_type = /obj/structure/window/fulltile
|
||||
@@ -270,6 +277,28 @@ RLD
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/construction/rcd/proc/change_computer_dir(mob/user)
|
||||
if(!user)
|
||||
return
|
||||
var/list/computer_dirs = list(
|
||||
"NORTH" = image(icon = 'icons/mob/radial.dmi', icon_state = "cnorth"),
|
||||
"EAST" = image(icon = 'icons/mob/radial.dmi', icon_state = "ceast"),
|
||||
"SOUTH" = image(icon = 'icons/mob/radial.dmi', icon_state = "csouth"),
|
||||
"WEST" = image(icon = 'icons/mob/radial.dmi', icon_state = "cwest")
|
||||
)
|
||||
var/computerdirs = show_radial_menu(user, src, computer_dirs, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
|
||||
if(!check_menu(user))
|
||||
return
|
||||
switch(computerdirs)
|
||||
if("NORTH")
|
||||
computer_dir = 1
|
||||
if("EAST")
|
||||
computer_dir = 4
|
||||
if("SOUTH")
|
||||
computer_dir = 2
|
||||
if("WEST")
|
||||
computer_dir = 8
|
||||
|
||||
/obj/item/construction/rcd/proc/change_airlock_setting(mob/user)
|
||||
if(!user)
|
||||
return
|
||||
@@ -434,10 +463,15 @@ RLD
|
||||
..()
|
||||
var/list/choices = list(
|
||||
"Airlock" = image(icon = 'icons/mob/radial.dmi', icon_state = "airlock"),
|
||||
"Deconstruct" = image(icon= 'icons/mob/radial.dmi', icon_state = "delete"),
|
||||
"Grilles & Windows" = image(icon = 'icons/mob/radial.dmi', icon_state = "grillewindow"),
|
||||
"Floors & Walls" = image(icon = 'icons/mob/radial.dmi', icon_state = "wallfloor")
|
||||
)
|
||||
if(upgrade)
|
||||
choices += list(
|
||||
"Deconstruct" = image(icon= 'icons/mob/radial.dmi', icon_state = "delete"),
|
||||
"Machine Frames" = image(icon = 'icons/mob/radial.dmi', icon_state = "machine"),
|
||||
"Computer Frames" = image(icon = 'icons/mob/radial.dmi', icon_state = "computer_dir"),
|
||||
)
|
||||
if(mode == RCD_AIRLOCK)
|
||||
choices += list(
|
||||
"Change Access" = image(icon = 'icons/mob/radial.dmi', icon_state = "access"),
|
||||
@@ -459,6 +493,12 @@ RLD
|
||||
mode = RCD_DECONSTRUCT
|
||||
if("Grilles & Windows")
|
||||
mode = RCD_WINDOWGRILLE
|
||||
if("Machine Frames")
|
||||
mode = RCD_MACHINE
|
||||
if("Computer Frames")
|
||||
mode = RCD_COMPUTER
|
||||
change_computer_dir(user)
|
||||
return
|
||||
if("Change Access")
|
||||
change_airlock_access(user)
|
||||
return
|
||||
@@ -511,6 +551,7 @@ RLD
|
||||
no_ammo_message = "<span class='warning'>Insufficient charge.</span>"
|
||||
desc = "A device used to rapidly build walls and floors."
|
||||
canRturf = TRUE
|
||||
upgrade = TRUE
|
||||
|
||||
|
||||
/obj/item/construction/rcd/borg/useResource(amount, mob/user)
|
||||
@@ -542,6 +583,9 @@ RLD
|
||||
/obj/item/construction/rcd/loaded
|
||||
matter = 160
|
||||
|
||||
/obj/item/construction/rcd/loaded/upgraded
|
||||
upgrade = TRUE
|
||||
|
||||
/obj/item/construction/rcd/combat
|
||||
name = "Combat RCD"
|
||||
desc = "A device used to rapidly build and deconstruct. Reload with metal, plasteel, glass or compressed matter cartridges. This RCD has been upgraded to be able to remove Rwalls!"
|
||||
@@ -582,7 +626,7 @@ RLD
|
||||
name = "admin RCD"
|
||||
max_matter = INFINITY
|
||||
matter = INFINITY
|
||||
|
||||
upgrade = TRUE
|
||||
|
||||
// Ranged RCD
|
||||
|
||||
@@ -616,7 +660,7 @@ RLD
|
||||
name = "rapid-light-device (RLD)"
|
||||
desc = "A device used to rapidly provide lighting sources to an area. Reload with metal, plasteel, glass or compressed matter cartridges."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "rld-5"
|
||||
icon_state = "rld"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
matter = 500
|
||||
@@ -625,6 +669,7 @@ RLD
|
||||
var/mode = LIGHT_MODE
|
||||
actions_types = list(/datum/action/item_action/pick_color)
|
||||
ammo_sections = 5
|
||||
has_ammobar = TRUE
|
||||
|
||||
var/wallcost = 10
|
||||
var/floorcost = 15
|
||||
@@ -638,6 +683,10 @@ RLD
|
||||
var/color_choice = null
|
||||
|
||||
|
||||
/obj/item/construction/rld/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/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",color_choice) as color
|
||||
@@ -645,9 +694,10 @@ RLD
|
||||
..()
|
||||
|
||||
/obj/item/construction/rld/update_icon()
|
||||
icon_state = "rld-[round((matter/max_matter) * 5, 1)]"
|
||||
..()
|
||||
|
||||
var/ratio = CEILING((matter / max_matter) * ammo_sections, 1)
|
||||
cut_overlays() //To prevent infinite stacking of overlays
|
||||
add_overlay("rld_light[ratio]")
|
||||
|
||||
/obj/item/construction/rld/attack_self(mob/user)
|
||||
..()
|
||||
@@ -770,6 +820,12 @@ RLD
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/rcd_upgrade
|
||||
name = "RCD advanced design disk"
|
||||
desc = "It contains the design for machine frames, computer frames, and deconstruction."
|
||||
icon = 'icons/obj/module.dmi'
|
||||
icon_state = "datadisk3"
|
||||
|
||||
#undef GLOW_MODE
|
||||
#undef LIGHT_MODE
|
||||
#undef REMOVE_MODE
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
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'
|
||||
icon_state = "rcl-0"
|
||||
icon_state = "rcl-empty"
|
||||
item_state = "rcl-0"
|
||||
var/obj/structure/cable/last
|
||||
var/obj/item/stack/cable_coil/loaded
|
||||
@@ -92,22 +92,32 @@
|
||||
|
||||
/obj/item/twohanded/rcl/update_icon()
|
||||
if(!loaded)
|
||||
icon_state = "rcl-0"
|
||||
item_state = "rcl-0"
|
||||
icon_state = "rcl-empty"
|
||||
item_state = "rcl-empty"
|
||||
return
|
||||
cut_overlays()
|
||||
var/cable_amount = 0
|
||||
switch(loaded.amount)
|
||||
if(61 to INFINITY)
|
||||
icon_state = "rcl-30"
|
||||
item_state = "rcl"
|
||||
cable_amount = 3
|
||||
if(31 to 60)
|
||||
icon_state = "rcl-20"
|
||||
item_state = "rcl"
|
||||
cable_amount = 2
|
||||
if(1 to 30)
|
||||
icon_state = "rcl-10"
|
||||
item_state = "rcl"
|
||||
cable_amount = 1
|
||||
else
|
||||
icon_state = "rcl-0"
|
||||
item_state = "rcl-0"
|
||||
cable_amount = 0
|
||||
|
||||
var/mutable_appearance/cable_overlay = mutable_appearance(icon, "rcl-[cable_amount]")
|
||||
cable_overlay.color = GLOB.cable_colors[colors[current_color_index]]
|
||||
if(cable_amount >= 1)
|
||||
icon_state = "rcl"
|
||||
item_state = "rcl"
|
||||
add_overlay(cable_overlay)
|
||||
else
|
||||
icon_state = "rcl-empty"
|
||||
item_state = "rcl-0"
|
||||
add_overlay(cable_overlay)
|
||||
|
||||
|
||||
/obj/item/twohanded/rcl/proc/is_empty(mob/user, loud = 1)
|
||||
update_icon()
|
||||
@@ -302,6 +312,7 @@ obj/item/twohanded/rcl/proc/getMobhook(mob/to_hook)
|
||||
to_chat(user, "Color changed to [cwname]!")
|
||||
if(loaded)
|
||||
loaded.item_color= colors[current_color_index]
|
||||
update_icon()
|
||||
if(wiring_gui_menu)
|
||||
wiringGuiUpdate(user)
|
||||
else if(istype(action, /datum/action/item_action/rcl_gui))
|
||||
@@ -318,13 +329,29 @@ obj/item/twohanded/rcl/proc/getMobhook(mob/to_hook)
|
||||
|
||||
/obj/item/twohanded/rcl/ghetto/update_icon()
|
||||
if(!loaded)
|
||||
icon_state = "rclg-0"
|
||||
icon_state = "rclg-empty"
|
||||
item_state = "rclg-0"
|
||||
return
|
||||
cut_overlays()
|
||||
var/cable_amount = 0
|
||||
switch(loaded.amount)
|
||||
if(1 to INFINITY)
|
||||
icon_state = "rclg-1"
|
||||
item_state = "rcl"
|
||||
if(20 to INFINITY)
|
||||
cable_amount = 3
|
||||
if(10 to 19)
|
||||
cable_amount = 2
|
||||
if(1 to 9)
|
||||
cable_amount = 1
|
||||
else
|
||||
icon_state = "rclg-1"
|
||||
item_state = "rclg-1"
|
||||
cable_amount = 0
|
||||
|
||||
var/mutable_appearance/cable_overlay = mutable_appearance(icon, "rcl-[cable_amount]")
|
||||
cable_overlay.color = GLOB.cable_colors[colors[current_color_index]]
|
||||
if(cable_amount >= 1)
|
||||
icon_state = "rclg"
|
||||
item_state = "rclg"
|
||||
add_overlay(cable_overlay)
|
||||
else
|
||||
icon_state = "rclg-empty"
|
||||
item_state = "rclg-0"
|
||||
add_overlay(cable_overlay)
|
||||
|
||||
|
||||
@@ -177,6 +177,8 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
|
||||
desc = "A device used to rapidly pipe things."
|
||||
icon = 'icons/obj/tools.dmi'
|
||||
icon_state = "rpd"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
force = 10
|
||||
throwforce = 10
|
||||
@@ -435,6 +437,10 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list(
|
||||
to_chat(user, "<span class='notice'>You start building a transit tube...</span>")
|
||||
playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1)
|
||||
if(do_after(user, transit_build_speed, target = A))
|
||||
for(var/obj/structure/c_transit_tube/tube in A)
|
||||
if(tube.dir == queued_p_dir || (queued_p_flipped && (tube.dir == turn(queued_p_dir, 45))))
|
||||
to_chat(user, "<span class='warning'>[src]'s error light flickers; there's already a pipe in the way!</span>")
|
||||
return
|
||||
activate()
|
||||
if(queued_p_type == /obj/structure/c_transit_tube_pod)
|
||||
var/obj/structure/c_transit_tube_pod/pod = new /obj/structure/c_transit_tube_pod(A)
|
||||
|
||||
@@ -134,12 +134,14 @@ RSF
|
||||
return
|
||||
|
||||
/obj/item/cookiesynth/emag_act(mob/user)
|
||||
. = ..()
|
||||
obj_flags ^= EMAGGED
|
||||
if(obj_flags & EMAGGED)
|
||||
to_chat(user, "<span class='warning'>You short out [src]'s reagent safety checker!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You reset [src]'s reagent safety checker!</span>")
|
||||
toxin = 0
|
||||
toxin = FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/cookiesynth/attack_self(mob/user)
|
||||
var/mob/living/silicon/robot/P = null
|
||||
@@ -180,7 +182,7 @@ RSF
|
||||
to_chat(user, "Fabricating Cookie..")
|
||||
var/obj/item/reagent_containers/food/snacks/cookie/S = new /obj/item/reagent_containers/food/snacks/cookie(T)
|
||||
if(toxin)
|
||||
S.reagents.add_reagent("chloralhydratedelayed", 10)
|
||||
S.reagents.add_reagent("chloralhydrate", 10)
|
||||
if (iscyborg(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
R.cell.charge -= 100
|
||||
|
||||
@@ -93,34 +93,22 @@
|
||||
/obj/item/card/emag/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
var/atom/A = target
|
||||
if(!proximity && prox_check)
|
||||
if(!proximity && prox_check || !(isobj(A) || issilicon(A) || isbot(A) || isdrone(A)))
|
||||
return
|
||||
if(istype(A, /obj/item/storage) && !(istype(A, /obj/item/storage/lockbox) || istype(A, /obj/item/storage/pod)))
|
||||
return
|
||||
//Citadel changes: modular code misfiring, so we're bypassing into main code.
|
||||
if(!uses)
|
||||
user.visible_message("<span class='warning'>[src] emits a weak spark. It's burnt out!</span>")
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 100, 1)
|
||||
return
|
||||
else if(uses <= 3)
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 30, 1) //Tiiiiiiny warning sound to let ya know your emag's almost dead
|
||||
|
||||
if(isturf(A))
|
||||
if(!A.emag_act(user))
|
||||
return
|
||||
if(istype(A,/obj/item/storage/lockbox) || istype(A, /obj/item/storage/pod))
|
||||
A.emag_act(user)
|
||||
uses = max(uses - 1, 0)
|
||||
if(!uses)
|
||||
user.visible_message("<span class='warning'>[src] fizzles and sparks. It seems like it's out of charges.</span>")
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 100, 1)
|
||||
if(istype(A,/obj/item/storage))
|
||||
return
|
||||
if(!(isobj(A) || issilicon(A) || isbot(A) || isdrone(A)))
|
||||
return
|
||||
else
|
||||
A.emag_act(user)
|
||||
uses = max(uses - 1, 0)
|
||||
if(!uses)
|
||||
user.visible_message("<span class='warning'>[src] fizzles and sparks. It seems like it's out of charges.</span>")
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 100, 1)
|
||||
uses = max(uses - 1, 0)
|
||||
if(!uses)
|
||||
user.visible_message("<span class='warning'>[src] fizzles and sparks. It seems like it's out of charges.</span>")
|
||||
playsound(src, 'sound/effects/light_flicker.ogg', 100, 1)
|
||||
|
||||
|
||||
/obj/item/card/emagfake
|
||||
|
||||
@@ -764,20 +764,22 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
..()
|
||||
|
||||
/obj/item/clothing/mask/vape/emag_act(mob/user)// I WON'T REGRET WRITTING THIS, SURLY.
|
||||
if(screw)
|
||||
if(!(obj_flags & EMAGGED))
|
||||
cut_overlays()
|
||||
obj_flags |= EMAGGED
|
||||
super = FALSE
|
||||
to_chat(user, "<span class='warning'>You maximize the voltage of [src].</span>")
|
||||
add_overlay("vapeopen_high")
|
||||
var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread //for effect
|
||||
sp.set_up(5, 1, src)
|
||||
sp.start()
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] is already emagged!</span>")
|
||||
else
|
||||
. = ..()
|
||||
if(!screw)
|
||||
to_chat(user, "<span class='notice'>You need to open the cap to do that.</span>")
|
||||
return
|
||||
if(obj_flags & EMAGGED)
|
||||
to_chat(user, "<span class='warning'>[src] is already emagged!</span>")
|
||||
return
|
||||
cut_overlays()
|
||||
obj_flags |= EMAGGED
|
||||
super = FALSE
|
||||
to_chat(user, "<span class='warning'>You maximize the voltage of [src].</span>")
|
||||
add_overlay("vapeopen_high")
|
||||
var/datum/effect_system/spark_spread/sp = new /datum/effect_system/spark_spread //for effect
|
||||
sp.set_up(5, 1, src)
|
||||
sp.start()
|
||||
return TRUE
|
||||
|
||||
/obj/item/clothing/mask/vape/attack_self(mob/user)
|
||||
if(reagents.total_volume > 0)
|
||||
|
||||
@@ -110,6 +110,7 @@
|
||||
/obj/item/circuitboard/computer/cloning
|
||||
name = "Cloning (Computer Board)"
|
||||
build_path = /obj/machinery/computer/cloning
|
||||
var/list/records = list()
|
||||
|
||||
/obj/item/circuitboard/computer/prototype_cloning
|
||||
name = "Prototype Cloning (Computer Board)"
|
||||
@@ -161,10 +162,11 @@
|
||||
|
||||
/obj/item/circuitboard/computer/prisoner
|
||||
name = "Prisoner Management Console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/prisoner
|
||||
build_path = /obj/machinery/computer/prisoner/management
|
||||
|
||||
/obj/item/circuitboard/computer/gulag_teleporter_console
|
||||
name = "Labor Camp teleporter console (Computer Board)"
|
||||
build_path = /obj/machinery/computer/gulag_teleporter_computer
|
||||
build_path = /obj/machinery/computer/prisoner/gulag_teleporter_computer
|
||||
|
||||
/obj/item/circuitboard/computer/rdconsole/production
|
||||
name = "R&D Console Production Only (Computer Board)"
|
||||
@@ -216,10 +218,13 @@
|
||||
to_chat(user, "<span class='notice'>The spectrum chip is unresponsive.</span>")
|
||||
|
||||
/obj/item/circuitboard/computer/cargo/emag_act(mob/living/user)
|
||||
if(!(obj_flags & EMAGGED))
|
||||
contraband = TRUE
|
||||
obj_flags |= EMAGGED
|
||||
to_chat(user, "<span class='notice'>You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.</span>")
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
contraband = TRUE
|
||||
obj_flags |= EMAGGED
|
||||
to_chat(user, "<span class='notice'>You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/item/circuitboard/computer/cargo/express
|
||||
name = "Express Supply Console (Computer Board)"
|
||||
@@ -233,8 +238,12 @@
|
||||
obj_flags &= ~EMAGGED
|
||||
|
||||
/obj/item/circuitboard/computer/cargo/express/emag_act(mob/living/user)
|
||||
to_chat(user, "<span class='notice'>You change the routing protocols, allowing the Drop Pod to land anywhere on the station.</span>")
|
||||
obj_flags |= EMAGGED
|
||||
. = SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT)
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You change the routing protocols, allowing the Drop Pod to land anywhere on the station.</span>")
|
||||
obj_flags |= EMAGGED
|
||||
return TRUE
|
||||
|
||||
/obj/item/circuitboard/computer/cargo/request
|
||||
name = "Supply Request Console (Computer Board)"
|
||||
@@ -365,4 +374,4 @@
|
||||
|
||||
/obj/item/circuitboard/computer/nanite_cloud_controller
|
||||
name = "Nanite Cloud Control (Computer Board)"
|
||||
build_path = /obj/machinery/computer/nanite_cloud_controller
|
||||
build_path = /obj/machinery/computer/nanite_cloud_controller
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#define RANDOM_GRAFFITI "Random Graffiti"
|
||||
#define RANDOM_LETTER "Random Letter"
|
||||
#define RANDOM_PUNCTUATION "Random Punctuation"
|
||||
#define RANDOM_NUMBER "Random Number"
|
||||
#define RANDOM_SYMBOL "Random Symbol"
|
||||
#define RANDOM_DRAWING "Random Drawing"
|
||||
#define RANDOM_ORIENTED "Random Oriented"
|
||||
#define RANDOM_RUNE "Random Rune"
|
||||
#define RANDOM_ANY "Random Anything"
|
||||
@@ -32,16 +35,16 @@
|
||||
var/drawtype
|
||||
var/text_buffer = ""
|
||||
|
||||
var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","arrow","star","poseur tag","prolizard","antilizard", "tile") //cit edit
|
||||
var/list/letters = list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
|
||||
var/list/numerals = list("0","1","2","3","4","5","6","7","8","9")
|
||||
var/list/oriented = list("arrow","body") // These turn to face the same way as the drawer
|
||||
var/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6")
|
||||
var/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED,
|
||||
RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER)
|
||||
var/list/graffiti_large_h = list("yiffhell", "secborg", "paint")
|
||||
var/static/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","star","poseur tag","prolizard","antilizard", "tile")
|
||||
var/static/list/symbols = list("danger","firedanger","electricdanger","biohazard","radiation","safe","evac","space","med","trade","shop","food","peace","like","skull","nay","heart","credit")
|
||||
var/static/list/drawings = list("smallbrush","brush","largebrush","splatter","snake","stickman","carp","ghost","clown","taser","disk","fireaxe","toolbox","corgi","cat","toilet","blueprint","beepsky","scroll","bottle","shotgun")
|
||||
var/static/list/oriented = list("arrow","line","thinline","shortline","body","chevron","footprint","clawprint","pawprint") // These turn to face the same way as the drawer
|
||||
var/static/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6")
|
||||
var/static/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED,
|
||||
RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER, RANDOM_SYMBOL, RANDOM_PUNCTUATION, RANDOM_DRAWING)
|
||||
var/static/list/graffiti_large_h = list("yiffhell", "secborg", "paint")
|
||||
|
||||
var/list/all_drawables
|
||||
var/static/list/all_drawables = graffiti + symbols + drawings + oriented + runes + graffiti_large_h
|
||||
|
||||
var/paint_mode = PAINT_NORMAL
|
||||
|
||||
@@ -54,8 +57,6 @@
|
||||
var/instant = FALSE
|
||||
var/self_contained = TRUE // If it deletes itself when it is empty
|
||||
|
||||
var/list/validSurfaces = list(/turf/open/floor)
|
||||
|
||||
var/edible = TRUE // That doesn't mean eating it is a good idea
|
||||
|
||||
var/list/reagent_contents = list("nutriment" = 1)
|
||||
@@ -71,6 +72,9 @@
|
||||
var/datum/team/gang/gang //For marking territory.
|
||||
var/gang_tag_delay = 30 //this is the delay for gang mode tag applications on anything that gang = true on.
|
||||
|
||||
/obj/item/toy/crayon/proc/isValidSurface(surface)
|
||||
return istype(surface, /turf/open/floor)
|
||||
|
||||
/obj/item/toy/crayon/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is jamming [src] up [user.p_their()] nose and into [user.p_their()] brain. It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (BRUTELOSS|OXYLOSS)
|
||||
@@ -81,7 +85,6 @@
|
||||
if(name == "crayon")
|
||||
name = "[item_color] crayon"
|
||||
|
||||
all_drawables = graffiti + letters + numerals + oriented + runes + graffiti_large_h
|
||||
drawtype = pick(all_drawables)
|
||||
|
||||
refill()
|
||||
@@ -153,55 +156,62 @@
|
||||
to_chat(user, "<span class='notice'>The cap on [src] is now [is_capped ? "on" : "off"].</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/item/toy/crayon/ui_data()
|
||||
var/list/data = list()
|
||||
data["drawables"] = list()
|
||||
var/list/D = data["drawables"]
|
||||
/obj/item/toy/crayon/proc/staticDrawables()
|
||||
|
||||
. = list()
|
||||
|
||||
var/list/g_items = list()
|
||||
D += list(list("name" = "Graffiti", "items" = g_items))
|
||||
. += list(list("name" = "Graffiti", "items" = g_items))
|
||||
for(var/g in graffiti)
|
||||
g_items += list(list("item" = g))
|
||||
|
||||
var/list/glh_items = list()
|
||||
D += list(list("name" = "Graffiti Large Horizontal", "items" = glh_items))
|
||||
. += list(list("name" = "Graffiti Large Horizontal", "items" = glh_items))
|
||||
for(var/glh in graffiti_large_h)
|
||||
glh_items += list(list("item" = glh))
|
||||
|
||||
var/list/L_items = list()
|
||||
D += list(list("name" = "Letters", "items" = L_items))
|
||||
for(var/L in letters)
|
||||
L_items += list(list("item" = L))
|
||||
var/list/S_items = list()
|
||||
. += list(list("name" = "Symbols", "items" = S_items))
|
||||
for(var/S in symbols)
|
||||
S_items += list(list("item" = S))
|
||||
|
||||
var/list/N_items = list()
|
||||
D += list(list(name = "Numerals", "items" = N_items))
|
||||
for(var/N in numerals)
|
||||
N_items += list(list("item" = N))
|
||||
var/list/D_items = list()
|
||||
. += list(list("name" = "Drawings", "items" = D_items))
|
||||
for(var/D in drawings)
|
||||
D_items += list(list("item" = D))
|
||||
|
||||
var/list/O_items = list()
|
||||
D += list(list(name = "Oriented", "items" = O_items))
|
||||
. += list(list(name = "Oriented", "items" = O_items))
|
||||
for(var/O in oriented)
|
||||
O_items += list(list("item" = O))
|
||||
|
||||
var/list/R_items = list()
|
||||
D += list(list(name = "Runes", "items" = R_items))
|
||||
. += list(list(name = "Runes", "items" = R_items))
|
||||
for(var/R in runes)
|
||||
R_items += list(list("item" = R))
|
||||
|
||||
var/list/rand_items = list()
|
||||
D += list(list(name = "Random", "items" = rand_items))
|
||||
. += list(list(name = "Random", "items" = rand_items))
|
||||
for(var/i in randoms)
|
||||
rand_items += list(list("item" = i))
|
||||
|
||||
data["selected_stencil"] = drawtype
|
||||
data["text_buffer"] = text_buffer
|
||||
|
||||
data["has_cap"] = has_cap
|
||||
data["is_capped"] = is_capped
|
||||
data["can_change_colour"] = can_change_colour
|
||||
data["current_colour"] = paint_color
|
||||
/obj/item/toy/crayon/ui_data()
|
||||
|
||||
return data
|
||||
var/static/list/crayon_drawables
|
||||
|
||||
if (!crayon_drawables)
|
||||
crayon_drawables = staticDrawables()
|
||||
|
||||
. = list()
|
||||
.["drawables"] = crayon_drawables
|
||||
.["selected_stencil"] = drawtype
|
||||
.["text_buffer"] = text_buffer
|
||||
|
||||
.["has_cap"] = has_cap
|
||||
.["is_capped"] = is_capped
|
||||
.["can_change_colour"] = can_change_colour
|
||||
.["current_colour"] = paint_color
|
||||
|
||||
/obj/item/toy/crayon/ui_act(action, list/params)
|
||||
if(..())
|
||||
@@ -216,6 +226,7 @@
|
||||
if(stencil in all_drawables + randoms)
|
||||
drawtype = stencil
|
||||
. = TRUE
|
||||
text_buffer = ""
|
||||
if(stencil in graffiti_large_h)
|
||||
paint_mode = PAINT_LARGE_HORIZONTAL
|
||||
text_buffer = ""
|
||||
@@ -235,18 +246,16 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/toy/crayon/proc/crayon_text_strip(text)
|
||||
var/list/base = string2charlist(lowertext(text))
|
||||
var/list/out = list()
|
||||
for(var/a in base)
|
||||
if(a in (letters|numerals))
|
||||
out += a
|
||||
return jointext(out,"")
|
||||
var/static/regex/crayon_r = new /regex(@"[^\w!?,.=%#&+\/\-]")
|
||||
return replacetext(lowertext(text), crayon_r, "")
|
||||
|
||||
/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity, params)
|
||||
. = ..()
|
||||
if(!proximity || !check_allowed_items(target))
|
||||
return
|
||||
|
||||
var/static/list/punctuation = list("!","?",".",",","/","+","-","=","%","#","&")
|
||||
|
||||
var/cost = 1
|
||||
if(paint_mode == PAINT_LARGE_HORIZONTAL)
|
||||
cost = 5
|
||||
@@ -264,13 +273,19 @@
|
||||
if(istype(target, /obj/effect/decal/cleanable))
|
||||
target = target.loc
|
||||
|
||||
if(!is_type_in_list(target,validSurfaces))
|
||||
if(!isValidSurface(target))
|
||||
return
|
||||
|
||||
var/drawing = drawtype
|
||||
switch(drawtype)
|
||||
if(RANDOM_LETTER)
|
||||
drawing = pick(letters)
|
||||
drawing = ascii2text(rand(97, 122)) // a-z
|
||||
if(RANDOM_PUNCTUATION)
|
||||
drawing = pick(punctuation)
|
||||
if(RANDOM_SYMBOL)
|
||||
drawing = pick(symbols)
|
||||
if(RANDOM_DRAWING)
|
||||
drawing = pick(drawings)
|
||||
if(RANDOM_GRAFFITI)
|
||||
drawing = pick(graffiti)
|
||||
if(RANDOM_RUNE)
|
||||
@@ -278,17 +293,23 @@
|
||||
if(RANDOM_ORIENTED)
|
||||
drawing = pick(oriented)
|
||||
if(RANDOM_NUMBER)
|
||||
drawing = pick(numerals)
|
||||
drawing = ascii2text(rand(48, 57)) // 0-9
|
||||
if(RANDOM_ANY)
|
||||
drawing = pick(all_drawables)
|
||||
|
||||
var/temp = "rune"
|
||||
if(drawing in letters)
|
||||
if(is_alpha(drawing))
|
||||
temp = "letter"
|
||||
else if(drawing in graffiti)
|
||||
temp = "graffiti"
|
||||
else if(drawing in numerals)
|
||||
else if(is_digit(drawing))
|
||||
temp = "number"
|
||||
else if(drawing in punctuation)
|
||||
temp = "punctuation mark"
|
||||
else if(drawing in symbols)
|
||||
temp = "symbol"
|
||||
else if(drawing in drawings)
|
||||
temp = "drawing"
|
||||
else if(drawing in graffiti|oriented)
|
||||
temp = "graffiti"
|
||||
|
||||
// If a gang member is using a gang spraycan, it'll behave differently
|
||||
var/gang_mode = FALSE
|
||||
@@ -338,7 +359,7 @@
|
||||
return
|
||||
|
||||
if(length(text_buffer))
|
||||
drawing = copytext(text_buffer,1,2)
|
||||
drawing = text_buffer[1]
|
||||
|
||||
|
||||
var/list/turf/affected_turfs = list()
|
||||
@@ -362,7 +383,7 @@
|
||||
if(PAINT_LARGE_HORIZONTAL)
|
||||
var/turf/left = locate(target.x-1,target.y,target.z)
|
||||
var/turf/right = locate(target.x+1,target.y,target.z)
|
||||
if(is_type_in_list(left, validSurfaces) && is_type_in_list(right, validSurfaces))
|
||||
if(isValidSurface(left) && isValidSurface(right))
|
||||
var/obj/effect/decal/cleanable/crayon/C = new(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON)
|
||||
C.add_hiddenprint(user)
|
||||
affected_turfs += left
|
||||
@@ -377,8 +398,9 @@
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You spray a [temp] on \the [target.name]</span>")
|
||||
|
||||
if(length(text_buffer))
|
||||
if(length(text_buffer) > 1)
|
||||
text_buffer = copytext(text_buffer,2)
|
||||
SStgui.update_uis(src)
|
||||
|
||||
if(post_noise)
|
||||
audible_message("<span class='notice'>You hear spraying.</span>")
|
||||
@@ -516,7 +538,7 @@
|
||||
|
||||
charges = -1
|
||||
|
||||
/obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity)
|
||||
/obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity, params)
|
||||
paint_color = rgb(rand(0,255), rand(0,255), rand(0,255))
|
||||
. = ..()
|
||||
|
||||
@@ -591,12 +613,14 @@
|
||||
can_change_colour = TRUE
|
||||
gang = TRUE //Gang check is true for all things upon the honored hierarchy of spraycans, except those that are FALSE.
|
||||
|
||||
validSurfaces = list(/turf/open/floor, /turf/closed/wall)
|
||||
reagent_contents = list("welding_fuel" = 1, "ethanol" = 1)
|
||||
|
||||
pre_noise = TRUE
|
||||
post_noise = FALSE
|
||||
|
||||
/obj/item/toy/crayon/spraycan/isValidSurface(surface)
|
||||
return (istype(surface, /turf/open/floor) || istype(surface, /turf/closed/wall))
|
||||
|
||||
/obj/item/toy/crayon/spraycan/suicide_act(mob/user)
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(is_capped || !actually_paints)
|
||||
@@ -622,8 +646,8 @@
|
||||
|
||||
return (OXYLOSS)
|
||||
|
||||
/obj/item/toy/crayon/spraycan/New()
|
||||
..()
|
||||
/obj/item/toy/crayon/spraycan/Initialize()
|
||||
. = ..()
|
||||
// If default crayon red colour, pick a more fun spraycan colour
|
||||
if(!paint_color)
|
||||
paint_color = pick("#DA0000","#FF9300","#FFF200","#A8E61D","#00B7EF",
|
||||
@@ -640,7 +664,7 @@
|
||||
to_chat(user, "It is empty.")
|
||||
to_chat(user, "<span class='notice'>Alt-click [src] to [ is_capped ? "take the cap off" : "put the cap on"].</span>")
|
||||
|
||||
/obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user, proximity)
|
||||
/obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user, proximity, params)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
@@ -656,8 +680,7 @@
|
||||
playsound(user.loc, 'sound/effects/spray.ogg', 25, 1, 5)
|
||||
|
||||
var/mob/living/carbon/C = target
|
||||
user.visible_message("<span class='danger'>[user] sprays [src] into the face of [target]!</span>")
|
||||
to_chat(target, "<span class='userdanger'>[user] sprays [src] into your face!</span>")
|
||||
C.visible_message("<span class='danger'>[user] sprays [src] into the face of [C]!</span>", "<span class='userdanger'>[user] sprays [src] into your face!</span>")
|
||||
|
||||
if(C.client)
|
||||
C.blur_eyes(3)
|
||||
@@ -678,13 +701,14 @@
|
||||
|
||||
return
|
||||
|
||||
if(istype(target, /obj/structure/window))
|
||||
if(isobj(target))
|
||||
if(actually_paints)
|
||||
target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY)
|
||||
if(color_hex2num(paint_color) < 255)
|
||||
target.set_opacity(255)
|
||||
else
|
||||
target.set_opacity(initial(target.opacity))
|
||||
if(istype(target, /obj/structure/window))
|
||||
if(color_hex2num(paint_color) < 255)
|
||||
target.set_opacity(255)
|
||||
else
|
||||
target.set_opacity(initial(target.opacity))
|
||||
. = use_charges(user, 2)
|
||||
var/fraction = min(1, . / reagents.maximum_volume)
|
||||
reagents.reaction(target, TOUCH, fraction * volume_multiplier)
|
||||
@@ -692,6 +716,7 @@
|
||||
|
||||
if(pre_noise || post_noise)
|
||||
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
|
||||
user.visible_message("[user] coats [target] with spray paint!", "<span class='notice'>You coat [target] with spray paint.</span>")
|
||||
return
|
||||
|
||||
. = ..()
|
||||
@@ -709,7 +734,7 @@
|
||||
desc = "A metallic container containing shiny synthesised paint."
|
||||
charges = -1
|
||||
|
||||
/obj/item/toy/crayon/spraycan/borg/afterattack(atom/target,mob/user,proximity)
|
||||
/obj/item/toy/crayon/spraycan/borg/afterattack(atom/target,mob/user,proximity, params)
|
||||
var/diff = ..()
|
||||
if(!iscyborg(user))
|
||||
to_chat(user, "<span class='notice'>How did you get this?</span>")
|
||||
@@ -754,7 +779,9 @@
|
||||
|
||||
reagent_contents = list("lube" = 1, "banana" = 1)
|
||||
volume_multiplier = 5
|
||||
validSurfaces = list(/turf/open/floor)
|
||||
|
||||
/obj/item/toy/crayon/spraycan/lubecan/isValidSurface(surface)
|
||||
return istype(surface, /turf/open/floor)
|
||||
|
||||
/obj/item/toy/crayon/spraycan/mimecan
|
||||
name = "silent spraycan"
|
||||
@@ -794,6 +821,9 @@
|
||||
|
||||
#undef RANDOM_GRAFFITI
|
||||
#undef RANDOM_LETTER
|
||||
#undef RANDOM_PUNCTUATION
|
||||
#undef RANDOM_SYMBOL
|
||||
#undef RANDOM_DRAWING
|
||||
#undef RANDOM_NUMBER
|
||||
#undef RANDOM_ORIENTED
|
||||
#undef RANDOM_RUNE
|
||||
|
||||
@@ -140,12 +140,10 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/defibrillator/emag_act(mob/user)
|
||||
if(safety)
|
||||
safety = FALSE
|
||||
to_chat(user, "<span class='warning'>You silently disable [src]'s safety protocols with the cryptographic sequencer.</span>")
|
||||
else
|
||||
safety = TRUE
|
||||
to_chat(user, "<span class='notice'>You silently enable [src]'s safety protocols with the cryptographic sequencer.</span>")
|
||||
. = ..()
|
||||
safety = !safety
|
||||
to_chat(user, "<span class='warning'>You silently [safety ? "enable" : "disable"] [src]'s safety protocols with the cryptographic sequencer.</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/item/defibrillator/emp_act(severity)
|
||||
. = ..()
|
||||
|
||||
@@ -714,6 +714,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
return
|
||||
if((last_text && world.time < last_text + 10) || (everyone && last_everyone && world.time < last_everyone + PDA_SPAM_DELAY))
|
||||
return
|
||||
var/emoji_message = emoji_parse(message)
|
||||
if(prob(1))
|
||||
message += "\nSent from my PDA"
|
||||
// Send the signal
|
||||
@@ -734,7 +735,8 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
"name" = "[owner]",
|
||||
"job" = "[ownjob]",
|
||||
"message" = message,
|
||||
"targets" = string_targets
|
||||
"targets" = string_targets,
|
||||
"emoji_message" = emoji_message
|
||||
))
|
||||
if (picture)
|
||||
signal.data["photo"] = picture
|
||||
@@ -751,13 +753,13 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
// Log it in our logs
|
||||
tnote += "<i><b>→ To [target_text]:</b></i><br>[signal.format_message()]<br>"
|
||||
// Show it to ghosts
|
||||
var/ghost_message = "<span class='name'>[owner] </span><span class='game say'>PDA Message</span> --> <span class='name'>[target_text]</span>: <span class='message'>[signal.format_message()]</span>"
|
||||
var/ghost_message = "<span class='name'>[owner] </span><span class='game say'>PDA Message</span> --> <span class='name'>[target_text]</span>: <span class='message'>[signal.format_message(TRUE)]</span>"
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA))
|
||||
to_chat(M, "[FOLLOW_LINK(M, user)] [ghost_message]")
|
||||
// Log in the talk log
|
||||
user.log_talk(message, LOG_PDA, tag="PDA: [initial(name)] to [target_text]")
|
||||
to_chat(user, "<span class='info'>Message sent to [target_text]: \"[message]\"</span>")
|
||||
to_chat(user, "<span class='info'>Message sent to [target_text]: \"[emoji_message]\"</span>")
|
||||
if (!silent)
|
||||
playsound(src, 'sound/machines/terminal_success.ogg', 15, 1)
|
||||
// Reset the photo
|
||||
@@ -787,7 +789,7 @@ GLOBAL_LIST_EMPTY(PDAs)
|
||||
hrefstart = "<a href='?src=[REF(L)];track=[html_encode(signal.data["name"])]'>"
|
||||
hrefend = "</a>"
|
||||
|
||||
to_chat(L, "[icon2html(src)] <b>Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], </b>[signal.format_message()] (<a href='byond://?src=[REF(src)];choice=Message;skiprefresh=1;target=[REF(signal.source)]'>Reply</a>)")
|
||||
to_chat(L, "[icon2html(src)] <b>Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], </b>[signal.format_message(TRUE)] (<a href='byond://?src=[REF(src)];choice=Message;skiprefresh=1;target=[REF(signal.source)]'>Reply</a>)")
|
||||
|
||||
update_icon(TRUE)
|
||||
|
||||
|
||||
@@ -498,6 +498,23 @@ Code:
|
||||
else
|
||||
menu += "[ldat]"
|
||||
|
||||
menu += "<h4>Pimpin' Ride:</h4>"
|
||||
|
||||
ldat = null
|
||||
for (var/obj/vehicle/ridden/janicart/M in world)
|
||||
var/turf/ml = get_turf(M)
|
||||
|
||||
if(ml)
|
||||
if (ml.z != cl.z)
|
||||
continue
|
||||
var/direction = get_dir(src, M)
|
||||
ldat += "Ride - <b>\[[ml.x],[ml.y] ([uppertext(dir2text(direction))])\]</b><br>"
|
||||
|
||||
if (!ldat)
|
||||
menu += "None"
|
||||
else
|
||||
menu += "[ldat]"
|
||||
|
||||
menu += "<h4>Located Janitorial Cart:</h4>"
|
||||
|
||||
ldat = null
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
if(!M.radiation)
|
||||
to_chat(user, "<span class='notice'>[icon2html(src, user)] Radiation levels within normal boundaries.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='boldannounce'>[icon2html(src, user)] Subject is irradiated. Radiation levels: [M.radiation].</span>")
|
||||
to_chat(user, "<span class='boldannounce'>[icon2html(src, user)] Subject is irradiated. Radiation levels: [M.radiation] rad.</span>")
|
||||
|
||||
if(rad_strength)
|
||||
to_chat(user, "<span class='boldannounce'>[icon2html(src, user)] Target contains radioactive contamination. Radioactive strength: [rad_strength]</span>")
|
||||
@@ -192,13 +192,15 @@
|
||||
update_icon()
|
||||
|
||||
/obj/item/geiger_counter/emag_act(mob/user)
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
if(scanning)
|
||||
to_chat(user, "<span class='warning'>Turn off [src] before you perform this action!</span>")
|
||||
return 0
|
||||
return
|
||||
to_chat(user, "<span class='warning'>You override [src]'s radiation storing protocols. It will now generate small doses of radiation, and stored rads are now projected into creatures you scan.</span>")
|
||||
obj_flags |= EMAGGED
|
||||
return TRUE
|
||||
|
||||
/obj/item/geiger_counter/cyborg
|
||||
var/datum/component/mobhook
|
||||
|
||||
@@ -149,9 +149,11 @@
|
||||
to_chat(user, "<span class='notice'>You fill \the [src] with lights from \the [S]. " + status_string() + "</span>")
|
||||
|
||||
/obj/item/lightreplacer/emag_act()
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
Emag()
|
||||
return TRUE
|
||||
|
||||
/obj/item/lightreplacer/attack_self(mob/user)
|
||||
to_chat(user, status_string())
|
||||
|
||||
@@ -38,11 +38,13 @@
|
||||
speech_args[SPEECH_SPANS] |= voicespan
|
||||
|
||||
/obj/item/megaphone/emag_act(mob/user)
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
to_chat(user, "<span class='warning'>You overload \the [src]'s voice synthesizer.</span>")
|
||||
obj_flags |= EMAGGED
|
||||
voicespan = list(SPAN_REALLYBIG, "userdanger")
|
||||
return TRUE
|
||||
|
||||
/obj/item/megaphone/sec
|
||||
name = "security megaphone"
|
||||
|
||||
@@ -32,6 +32,24 @@
|
||||
var/datum/integrated_io/selected_io = null //functional for integrated circuits.
|
||||
var/mode = 0
|
||||
|
||||
/obj/item/multitool/chaplain
|
||||
name = "\improper hypertool"
|
||||
desc = "Used for pulsing wires to test which to cut. Also emits microwaves to fry some brains!"
|
||||
damtype = BRAIN
|
||||
force = 18
|
||||
armour_penetration = 35
|
||||
hitsound = 'sound/effects/sparks4.ogg'
|
||||
var/chaplain_spawnable = TRUE
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
|
||||
throw_speed = 3
|
||||
throw_range = 4
|
||||
throwforce = 10
|
||||
obj_flags = UNIQUE_RENAME
|
||||
|
||||
/obj/item/multitool/chaplain/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/anti_magic, TRUE, TRUE)
|
||||
|
||||
/obj/item/multitool/examine(mob/user)
|
||||
..()
|
||||
if(selected_io)
|
||||
@@ -237,3 +255,10 @@
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "multitool"
|
||||
toolspeed = 0.1
|
||||
|
||||
/obj/item/multitool/advanced
|
||||
name = "advanced multitool"
|
||||
desc = "The reproduction of an abductor's multitool, this multitool is a classy silver."
|
||||
icon = 'icons/obj/advancedtools.dmi'
|
||||
icon_state = "multitool"
|
||||
toolspeed = 0.2
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/obj/item/quantum_keycard
|
||||
name = "quantum keycard"
|
||||
desc = "A keycard able to link to a quantum pad's particle signature, allowing other quantum pads to travel there instead of their linked pad."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "quantum_keycard"
|
||||
item_state = "card-id"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
var/obj/machinery/quantumpad/qpad
|
||||
|
||||
/obj/item/quantum_keycard/examine(mob/user)
|
||||
..()
|
||||
if(qpad)
|
||||
to_chat(user, "It's currently linked to a quantum pad.")
|
||||
to_chat(user, "<span class='notice'>Alt-click to unlink the keycard.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Insert [src] into an active quantum pad to link it.</span>")
|
||||
|
||||
/obj/item/quantum_keycard/AltClick(mob/living/user)
|
||||
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You start pressing [src]'s unlink button...</span>")
|
||||
if(do_after(user, 40, target = src))
|
||||
to_chat(user, "<span class='notice'>The keycard beeps twice and disconnects the quantum link.</span>")
|
||||
qpad = null
|
||||
|
||||
/obj/item/quantum_keycard/update_icon()
|
||||
if(qpad)
|
||||
icon_state = "quantum_keycard_on"
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
@@ -1,6 +1,6 @@
|
||||
/obj/item/encryptionkey
|
||||
name = "standard encryption key"
|
||||
desc = "An encryption key for a radio headset. Has no special codes in it. WHY DOES IT EXIST? ASK NANOTRASEN."
|
||||
desc = "An encryption key for a radio headset."
|
||||
icon = 'icons/obj/radio.dmi'
|
||||
icon_state = "cypherkey"
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
@@ -9,124 +9,119 @@
|
||||
var/independent = FALSE
|
||||
var/list/channels = list()
|
||||
|
||||
/obj/item/encryptionkey/Initialize()
|
||||
. = ..()
|
||||
if(!channels.len)
|
||||
desc = "An encryption key for a radio headset. Has no special codes in it. You should probably tell a coder!"
|
||||
|
||||
/obj/item/encryptionkey/examine(mob/user)
|
||||
. = ..()
|
||||
if(LAZYLEN(channels))
|
||||
var/list/examine_text_list = list()
|
||||
for(var/i in channels)
|
||||
examine_text_list += "[GLOB.channel_tokens[i]] - [lowertext(i)]"
|
||||
|
||||
to_chat(user, "<span class='notice'>It can access the following channels; [jointext(examine_text_list, ", ")].</span>")
|
||||
|
||||
/obj/item/encryptionkey/syndicate
|
||||
name = "syndicate encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the syndicate channel, use :t."
|
||||
icon_state = "syn_cypherkey"
|
||||
channels = list("Syndicate" = 1)
|
||||
syndie = 1//Signifies that it de-crypts Syndicate transmissions
|
||||
channels = list(RADIO_CHANNEL_SYNDICATE = 1)
|
||||
syndie = TRUE //Signifies that it de-crypts Syndicate transmissions
|
||||
|
||||
/obj/item/encryptionkey/binary
|
||||
name = "binary translator key"
|
||||
desc = "An encryption key for a radio headset. To access the binary channel, use :b."
|
||||
icon_state = "bin_cypherkey"
|
||||
translate_binary = TRUE
|
||||
|
||||
/obj/item/encryptionkey/headset_sec
|
||||
name = "security radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the security channel, use :s."
|
||||
icon_state = "sec_cypherkey"
|
||||
channels = list("Security" = 1)
|
||||
channels = list(RADIO_CHANNEL_SECURITY = 1)
|
||||
|
||||
/obj/item/encryptionkey/headset_eng
|
||||
name = "engineering radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the engineering channel, use :e."
|
||||
icon_state = "eng_cypherkey"
|
||||
channels = list("Engineering" = 1)
|
||||
channels = list(RADIO_CHANNEL_ENGINEERING = 1)
|
||||
|
||||
/obj/item/encryptionkey/headset_rob
|
||||
name = "robotics radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the engineering channel, use :e. For research, use :n."
|
||||
icon_state = "rob_cypherkey"
|
||||
channels = list("Science" = 1, "Engineering" = 1)
|
||||
channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_ENGINEERING = 1)
|
||||
|
||||
/obj/item/encryptionkey/headset_med
|
||||
name = "medical radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the medical channel, use :m."
|
||||
icon_state = "med_cypherkey"
|
||||
channels = list("Medical" = 1)
|
||||
channels = list(RADIO_CHANNEL_MEDICAL = 1)
|
||||
|
||||
/obj/item/encryptionkey/headset_sci
|
||||
name = "science radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the science channel, use :n."
|
||||
icon_state = "sci_cypherkey"
|
||||
channels = list("Science" = 1)
|
||||
channels = list(RADIO_CHANNEL_SCIENCE = 1)
|
||||
|
||||
/obj/item/encryptionkey/headset_medsci
|
||||
name = "medical research radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the medical channel, use :m. For science, use :n."
|
||||
icon_state = "medsci_cypherkey"
|
||||
channels = list("Science" = 1, "Medical" = 1)
|
||||
channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_MEDICAL = 1)
|
||||
|
||||
/obj/item/encryptionkey/headset_com
|
||||
name = "command radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the command channel, use :c."
|
||||
icon_state = "com_cypherkey"
|
||||
channels = list("Command" = 1)
|
||||
channels = list(RADIO_CHANNEL_COMMAND = 1)
|
||||
|
||||
/obj/item/encryptionkey/heads/captain
|
||||
name = "\proper the captain's encryption key"
|
||||
desc = "An encryption key for a radio headset. Channels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
|
||||
icon_state = "cap_cypherkey"
|
||||
channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0)
|
||||
channels = list(RADIO_CHANNEL_COMMAND = 1, RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_ENGINEERING = 0, RADIO_CHANNEL_SCIENCE = 0, RADIO_CHANNEL_MEDICAL = 0, RADIO_CHANNEL_SUPPLY = 0, RADIO_CHANNEL_SERVICE = 0)
|
||||
|
||||
/obj/item/encryptionkey/heads/rd
|
||||
name = "\proper the research director's encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the science channel, use :n. For command, use :c."
|
||||
icon_state = "rd_cypherkey"
|
||||
channels = list("Science" = 1, "Command" = 1)
|
||||
channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_COMMAND = 1)
|
||||
|
||||
/obj/item/encryptionkey/heads/hos
|
||||
name = "\proper the head of security's encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the security channel, use :s. For command, use :c."
|
||||
icon_state = "hos_cypherkey"
|
||||
channels = list("Security" = 1, "Command" = 1)
|
||||
channels = list(RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_COMMAND = 1)
|
||||
|
||||
/obj/item/encryptionkey/heads/ce
|
||||
name = "\proper the chief engineer's encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the engineering channel, use :e. For command, use :c."
|
||||
icon_state = "ce_cypherkey"
|
||||
channels = list("Engineering" = 1, "Command" = 1)
|
||||
channels = list(RADIO_CHANNEL_ENGINEERING = 1, RADIO_CHANNEL_COMMAND = 1)
|
||||
|
||||
/obj/item/encryptionkey/heads/cmo
|
||||
name = "\proper the chief medical officer's encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the medical channel, use :m. For command, use :c."
|
||||
icon_state = "cmo_cypherkey"
|
||||
channels = list("Medical" = 1, "Command" = 1)
|
||||
channels = list(RADIO_CHANNEL_MEDICAL = 1, RADIO_CHANNEL_COMMAND = 1)
|
||||
|
||||
/obj/item/encryptionkey/heads/hop
|
||||
name = "\proper the head of personnel's encryption key"
|
||||
desc = "An encryption key for a radio headset. Channels are as follows: :u - supply, :v - service, :c - command."
|
||||
icon_state = "hop_cypherkey"
|
||||
channels = list("Supply" = 1, "Service" = 1, "Command" = 1)
|
||||
channels = list(RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_COMMAND = 1)
|
||||
|
||||
/obj/item/encryptionkey/headset_cargo
|
||||
name = "supply radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the supply channel, use :u."
|
||||
icon_state = "cargo_cypherkey"
|
||||
channels = list("Supply" = 1)
|
||||
channels = list(RADIO_CHANNEL_SUPPLY = 1)
|
||||
|
||||
/obj/item/encryptionkey/headset_mining
|
||||
name = "mining radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the supply channel, use :u. For science, use :n."
|
||||
icon_state = "cargo_cypherkey"
|
||||
channels = list("Supply" = 1, "Science" = 1)
|
||||
channels = list(RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SCIENCE = 1)
|
||||
|
||||
/obj/item/encryptionkey/headset_service
|
||||
name = "service radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the service channel, use :v."
|
||||
icon_state = "srv_cypherkey"
|
||||
channels = list("Service" = 1)
|
||||
channels = list(RADIO_CHANNEL_SERVICE = 1)
|
||||
|
||||
/obj/item/encryptionkey/headset_cent
|
||||
name = "\improper CentCom radio encryption key"
|
||||
desc = "An encryption key for a radio headset. To access the CentCom channel, use :y."
|
||||
icon_state = "cent_cypherkey"
|
||||
independent = TRUE
|
||||
channels = list("CentCom" = 1)
|
||||
channels = list(RADIO_CHANNEL_CENTCOM = 1)
|
||||
|
||||
/obj/item/encryptionkey/ai //ported from NT, this goes 'inside' the AI.
|
||||
channels = list("Command" = 1, "Security" = 1, "Engineering" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1, "AI Private" = 1)
|
||||
channels = list(RADIO_CHANNEL_COMMAND = 1, RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_ENGINEERING = 1, RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_MEDICAL = 1, RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_AI_PRIVATE = 1)
|
||||
|
||||
/obj/item/encryptionkey/secbot
|
||||
channels = list("AI Private"=1,"Security"=1)
|
||||
channels = list(RADIO_CHANNEL_AI_PRIVATE = 1, RADIO_CHANNEL_SECURITY = 1)
|
||||
|
||||
@@ -1,3 +1,19 @@
|
||||
// Used for translating channels to tokens on examination
|
||||
GLOBAL_LIST_INIT(channel_tokens, list(
|
||||
RADIO_CHANNEL_COMMON = RADIO_KEY_COMMON,
|
||||
RADIO_CHANNEL_SCIENCE = RADIO_TOKEN_SCIENCE,
|
||||
RADIO_CHANNEL_COMMAND = RADIO_TOKEN_COMMAND,
|
||||
RADIO_CHANNEL_MEDICAL = RADIO_TOKEN_MEDICAL,
|
||||
RADIO_CHANNEL_ENGINEERING = RADIO_TOKEN_ENGINEERING,
|
||||
RADIO_CHANNEL_SECURITY = RADIO_TOKEN_SECURITY,
|
||||
RADIO_CHANNEL_CENTCOM = RADIO_TOKEN_CENTCOM,
|
||||
RADIO_CHANNEL_SYNDICATE = RADIO_TOKEN_SYNDICATE,
|
||||
RADIO_CHANNEL_SUPPLY = RADIO_TOKEN_SUPPLY,
|
||||
RADIO_CHANNEL_SERVICE = RADIO_TOKEN_SERVICE,
|
||||
MODE_BINARY = MODE_TOKEN_BINARY,
|
||||
RADIO_CHANNEL_AI_PRIVATE = RADIO_TOKEN_AI_PRIVATE
|
||||
))
|
||||
|
||||
/obj/item/radio/headset
|
||||
name = "radio headset"
|
||||
desc = "An updated, modular intercom that fits over the head. Takes encryption keys."
|
||||
@@ -17,9 +33,24 @@
|
||||
|
||||
/obj/item/radio/headset/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>To speak on the general radio frequency, use ; before speaking.</span>")
|
||||
if (command)
|
||||
to_chat(user, "<span class='notice'>Alt-click to toggle the high-volume mode.</span>")
|
||||
|
||||
if(item_flags & IN_INVENTORY && loc == user)
|
||||
// construction of frequency description
|
||||
var/list/avail_chans = list("Use [RADIO_KEY_COMMON] for the currently tuned frequency")
|
||||
if(translate_binary)
|
||||
avail_chans += "use [MODE_TOKEN_BINARY] for [MODE_BINARY]"
|
||||
if(length(channels))
|
||||
for(var/i in 1 to length(channels))
|
||||
if(i == 1)
|
||||
avail_chans += "use [MODE_TOKEN_DEPARTMENT] or [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]"
|
||||
else
|
||||
avail_chans += "use [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]"
|
||||
to_chat(user, "<span class='notice'>A small screen on the headset displays the following available frequencies:\n[english_list(avail_chans)].")
|
||||
|
||||
if(command)
|
||||
to_chat(user, "<span class='info'>Alt-click to toggle the high-volume mode.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>A small screen on the headset flashes, it's too small to read without holding or wearing the headset.</span>")
|
||||
|
||||
/obj/item/radio/headset/Initialize()
|
||||
. = ..()
|
||||
@@ -47,7 +78,7 @@
|
||||
|
||||
/obj/item/radio/headset/syndicate/alt //undisguised bowman with flash protection
|
||||
name = "syndicate headset"
|
||||
desc = "A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs. \nTo access the syndicate channel, use ; before speaking."
|
||||
desc = "A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs."
|
||||
icon_state = "syndie_headset"
|
||||
item_state = "syndie_headset"
|
||||
|
||||
@@ -72,13 +103,13 @@
|
||||
|
||||
/obj/item/radio/headset/headset_sec
|
||||
name = "security radio headset"
|
||||
desc = "This is used by your elite security force.\nTo access the security channel, use :s."
|
||||
desc = "This is used by your elite security force."
|
||||
icon_state = "sec_headset"
|
||||
keyslot = new /obj/item/encryptionkey/headset_sec
|
||||
|
||||
/obj/item/radio/headset/headset_sec/alt
|
||||
name = "security bowman headset"
|
||||
desc = "This is used by your elite security force. Protects ears from flashbangs.\nTo access the security channel, use :s."
|
||||
desc = "This is used by your elite security force. Protects ears from flashbangs."
|
||||
icon_state = "sec_headset_alt"
|
||||
item_state = "sec_headset_alt"
|
||||
|
||||
@@ -88,31 +119,31 @@
|
||||
|
||||
/obj/item/radio/headset/headset_eng
|
||||
name = "engineering radio headset"
|
||||
desc = "When the engineers wish to chat like girls.\nTo access the engineering channel, use :e."
|
||||
desc = "When the engineers wish to chat like girls."
|
||||
icon_state = "eng_headset"
|
||||
keyslot = new /obj/item/encryptionkey/headset_eng
|
||||
|
||||
/obj/item/radio/headset/headset_rob
|
||||
name = "robotics radio headset"
|
||||
desc = "Made specifically for the roboticists, who cannot decide between departments.\nTo access the engineering channel, use :e. For research, use :n."
|
||||
desc = "Made specifically for the roboticists, who cannot decide between departments."
|
||||
icon_state = "rob_headset"
|
||||
keyslot = new /obj/item/encryptionkey/headset_rob
|
||||
|
||||
/obj/item/radio/headset/headset_med
|
||||
name = "medical radio headset"
|
||||
desc = "A headset for the trained staff of the medbay.\nTo access the medical channel, use :m."
|
||||
desc = "A headset for the trained staff of the medbay."
|
||||
icon_state = "med_headset"
|
||||
keyslot = new /obj/item/encryptionkey/headset_med
|
||||
|
||||
/obj/item/radio/headset/headset_sci
|
||||
name = "science radio headset"
|
||||
desc = "A sciency headset. Like usual.\nTo access the science channel, use :n."
|
||||
desc = "A sciency headset. Like usual."
|
||||
icon_state = "sci_headset"
|
||||
keyslot = new /obj/item/encryptionkey/headset_sci
|
||||
|
||||
/obj/item/radio/headset/headset_medsci
|
||||
name = "medical research radio headset"
|
||||
desc = "A headset that is a result of the mating between medical and science.\nTo access the medical channel, use :m. For science, use :n."
|
||||
desc = "A headset that is a result of the mating between medical and science."
|
||||
icon_state = "medsci_headset"
|
||||
keyslot = new /obj/item/encryptionkey/headset_medsci
|
||||
|
||||
@@ -127,13 +158,13 @@
|
||||
|
||||
/obj/item/radio/headset/heads/captain
|
||||
name = "\proper the captain's headset"
|
||||
desc = "The headset of the king.\nChannels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
|
||||
desc = "The headset of the king."
|
||||
icon_state = "com_headset"
|
||||
keyslot = new /obj/item/encryptionkey/heads/captain
|
||||
|
||||
/obj/item/radio/headset/heads/captain/alt
|
||||
name = "\proper the captain's bowman headset"
|
||||
desc = "The headset of the boss. Protects ears from flashbangs.\nChannels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
|
||||
desc = "The headset of the boss. Protects ears from flashbangs."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
|
||||
@@ -143,19 +174,19 @@
|
||||
|
||||
/obj/item/radio/headset/heads/rd
|
||||
name = "\proper the research director's headset"
|
||||
desc = "Headset of the fellow who keeps society marching towards technological singularity.\nTo access the science channel, use :n. For command, use :c."
|
||||
desc = "Headset of the fellow who keeps society marching towards technological singularity."
|
||||
icon_state = "com_headset"
|
||||
keyslot = new /obj/item/encryptionkey/heads/rd
|
||||
|
||||
/obj/item/radio/headset/heads/hos
|
||||
name = "\proper the head of security's headset"
|
||||
desc = "The headset of the man in charge of keeping order and protecting the station.\nTo access the security channel, use :s. For command, use :c."
|
||||
desc = "The headset of the man in charge of keeping order and protecting the station."
|
||||
icon_state = "com_headset"
|
||||
keyslot = new /obj/item/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/radio/headset/heads/hos/alt
|
||||
name = "\proper the head of security's bowman headset"
|
||||
desc = "The headset of the man in charge of keeping order and protecting the station. Protects ears from flashbangs.\nTo access the security channel, use :s. For command, use :c."
|
||||
desc = "The headset of the man in charge of keeping order and protecting the station. Protects ears from flashbangs."
|
||||
icon_state = "com_headset_alt"
|
||||
item_state = "com_headset_alt"
|
||||
|
||||
@@ -165,43 +196,43 @@
|
||||
|
||||
/obj/item/radio/headset/heads/ce
|
||||
name = "\proper the chief engineer's headset"
|
||||
desc = "The headset of the guy in charge of keeping the station powered and undamaged.\nTo access the engineering channel, use :e. For command, use :c."
|
||||
desc = "The headset of the guy in charge of keeping the station powered and undamaged."
|
||||
icon_state = "com_headset"
|
||||
keyslot = new /obj/item/encryptionkey/heads/ce
|
||||
|
||||
/obj/item/radio/headset/heads/cmo
|
||||
name = "\proper the chief medical officer's headset"
|
||||
desc = "The headset of the highly trained medical chief.\nTo access the medical channel, use :m. For command, use :c."
|
||||
desc = "The headset of the highly trained medical chief."
|
||||
icon_state = "com_headset"
|
||||
keyslot = new /obj/item/encryptionkey/heads/cmo
|
||||
|
||||
/obj/item/radio/headset/heads/hop
|
||||
name = "\proper the head of personnel's headset"
|
||||
desc = "The headset of the guy who will one day be captain.\nChannels are as follows: :u - supply, :v - service, :c - command."
|
||||
desc = "The headset of the guy who will one day be captain."
|
||||
icon_state = "com_headset"
|
||||
keyslot = new /obj/item/encryptionkey/heads/hop
|
||||
|
||||
/obj/item/radio/headset/headset_cargo
|
||||
name = "supply radio headset"
|
||||
desc = "A headset used by the QM and his slaves.\nTo access the supply channel, use :u."
|
||||
desc = "A headset used by the QM and his slaves."
|
||||
icon_state = "cargo_headset"
|
||||
keyslot = new /obj/item/encryptionkey/headset_cargo
|
||||
|
||||
/obj/item/radio/headset/headset_cargo/mining
|
||||
name = "mining radio headset"
|
||||
desc = "Headset used by shaft miners.\nTo access the supply channel, use :u. For science, use :n."
|
||||
desc = "Headset used by shaft miners."
|
||||
icon_state = "mine_headset"
|
||||
keyslot = new /obj/item/encryptionkey/headset_mining
|
||||
|
||||
/obj/item/radio/headset/headset_srv
|
||||
name = "service radio headset"
|
||||
desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean.\nTo access the service channel, use :v."
|
||||
desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean."
|
||||
icon_state = "srv_headset"
|
||||
keyslot = new /obj/item/encryptionkey/headset_service
|
||||
|
||||
/obj/item/radio/headset/headset_cent
|
||||
name = "\improper CentCom headset"
|
||||
desc = "A headset used by the upper echelons of Nanotrasen.\nTo access the CentCom channel, use :y."
|
||||
desc = "A headset used by the upper echelons of Nanotrasen."
|
||||
icon_state = "cent_headset"
|
||||
keyslot = new /obj/item/encryptionkey/headset_com
|
||||
keyslot2 = new /obj/item/encryptionkey/headset_cent
|
||||
@@ -215,7 +246,7 @@
|
||||
|
||||
/obj/item/radio/headset/headset_cent/alt
|
||||
name = "\improper CentCom bowman headset"
|
||||
desc = "A headset especially for emergency response personnel. Protects ears from flashbangs.\nTo access the CentCom channel, use :y."
|
||||
desc = "A headset especially for emergency response personnel. Protects ears from flashbangs."
|
||||
icon_state = "cent_headset_alt"
|
||||
item_state = "cent_headset_alt"
|
||||
keyslot = null
|
||||
|
||||
@@ -221,7 +221,7 @@
|
||||
// From the channel, determine the frequency and get a reference to it.
|
||||
var/freq
|
||||
if(channel && channels && channels.len > 0)
|
||||
if(channel == "department")
|
||||
if(channel == MODE_DEPARTMENT)
|
||||
channel = channels[1]
|
||||
freq = secure_radio_connections[channel]
|
||||
if (!channels[channel]) // if the channel is turned off, don't broadcast
|
||||
|
||||
@@ -163,7 +163,37 @@ SLIME SCANNER
|
||||
msg += "\t<span class='alert'>Severe brain damage detected. Subject likely to have mental traumas.</span>\n"
|
||||
else if (M.getBrainLoss() >= 45)
|
||||
msg += "\t<span class='alert'>Brain damage detected.</span>\n"
|
||||
if(iscarbon(M))
|
||||
if(ishuman(M) && advanced) // Should I make this not advanced?
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/obj/item/organ/liver/L = H.getorganslot("liver")
|
||||
if(L)
|
||||
if(L.swelling > 20)
|
||||
msg += "\t<span class='danger'>Subject is suffering from an enlarged liver.</span>\n" //i.e. shrink their liver or give them a transplant.
|
||||
else
|
||||
msg += "\t<span class='danger'>Subject's liver is missing.</span>\n"
|
||||
var/obj/item/organ/tongue/T = H.getorganslot("tongue")
|
||||
if(T)
|
||||
if(T.damage > 40)
|
||||
msg += "\t<span class='danger'>Subject is suffering from severe burn tissue on their tongue.</span>\n" //i.e. their tongue is shot
|
||||
if(T.name == "fluffy tongue")
|
||||
msg += "\t<span class='danger'>Subject is suffering from a fluffified tongue. Suggested cure: Yamerol or a tongue transplant.</span>\n"
|
||||
else
|
||||
msg += "\t<span class='danger'>Subject's tongue is missing.</span>\n"
|
||||
var/obj/item/organ/lungs/Lung = H.getorganslot("lungs")
|
||||
if(Lung)
|
||||
if(Lung.damage > 150)
|
||||
msg += "\t<span class='danger'>Subject is suffering from acute emphysema leading to trouble breathing.</span>\n" //i.e. Their lungs are shot
|
||||
else
|
||||
msg += "\t<span class='danger'>Subject's lungs have collapsed from trauma!</span>\n"
|
||||
var/obj/item/organ/genital/penis/P = H.getorganslot("penis")
|
||||
if(P)
|
||||
if(P.length>20)
|
||||
msg += "\t<span class='info'>Subject has a sizeable gentleman's organ at [P.length] inches.</span>\n"
|
||||
var/obj/item/organ/genital/breasts/Br = H.getorganslot("breasts")
|
||||
if(Br)
|
||||
if(Br.cached_size>5)
|
||||
msg += "\t<span class='info'>Subject has a sizeable bosom with a [Br.size] cup.</span>\n"
|
||||
|
||||
var/mob/living/carbon/C = M
|
||||
if(LAZYLEN(C.get_traumas()))
|
||||
var/list/trauma_text = list()
|
||||
@@ -183,14 +213,24 @@ SLIME SCANNER
|
||||
msg += "\t<span class='info'>Subject has the following physiological traits: [C.get_trait_string()].</span>\n"
|
||||
if(advanced)
|
||||
msg += "\t<span class='info'>Brain Activity Level: [(200 - M.getBrainLoss())/2]%.</span>\n"
|
||||
if (M.radiation)
|
||||
if(M.radiation)
|
||||
msg += "\t<span class='alert'>Subject is irradiated.</span>\n"
|
||||
if(advanced)
|
||||
msg += "\t<span class='info'>Radiation Level: [M.radiation]%.</span>\n"
|
||||
msg += "\t<span class='info'>Radiation Level: [M.radiation] rad</span>\n"
|
||||
|
||||
if(advanced && M.hallucinating())
|
||||
msg += "\t<span class='info'>Subject is hallucinating.</span>\n"
|
||||
|
||||
//MKUltra
|
||||
if(advanced && M.has_status_effect(/datum/status_effect/chem/enthrall))
|
||||
msg += "\t<span class='info'>Subject has abnormal brain fuctions.</span>\n"
|
||||
|
||||
//Astrogen shenanigans
|
||||
if(advanced && M.reagents.has_reagent("astral"))
|
||||
if(M.mind)
|
||||
msg += "\t<span class='danger'>Warning: subject may be possesed.</span>\n"
|
||||
else
|
||||
msg += "\t<span class='notice'>Subject appears to be astrally projecting.</span>\n"
|
||||
|
||||
//Eyes and ears
|
||||
if(advanced)
|
||||
if(iscarbon(M))
|
||||
@@ -256,6 +296,7 @@ SLIME SCANNER
|
||||
for(var/obj/item/bodypart/org in damaged)
|
||||
msg += "\t\t<span class='info'>[capitalize(org.name)]: [(org.brute_dam > 0) ? "<font color='red'>[org.brute_dam]</font></span>" : "<font color='red'>0</font>"]-[(org.burn_dam > 0) ? "<font color='#FF8000'>[org.burn_dam]</font>" : "<font color='#FF8000'>0</font>"]\n"
|
||||
|
||||
|
||||
// Species and body temperature
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
@@ -310,7 +351,7 @@ SLIME SCANNER
|
||||
var/mob/living/carbon/human/H = C
|
||||
if(H.bleed_rate)
|
||||
msg += "<span class='danger'>Subject is bleeding!</span>\n"
|
||||
var/blood_percent = round((C.blood_volume / BLOOD_VOLUME_NORMAL)*100)
|
||||
var/blood_percent = round((C.blood_volume / (BLOOD_VOLUME_NORMAL * C.blood_ratio))*100)
|
||||
var/blood_type = C.dna.blood_type
|
||||
if(blood_id != "blood")//special blood substance
|
||||
var/datum/reagent/R = GLOB.chemical_reagents_list[blood_id]
|
||||
@@ -318,9 +359,9 @@ SLIME SCANNER
|
||||
blood_type = R.name
|
||||
else
|
||||
blood_type = blood_id
|
||||
if(C.blood_volume <= BLOOD_VOLUME_SAFE && C.blood_volume > BLOOD_VOLUME_OKAY)
|
||||
if(C.blood_volume <= (BLOOD_VOLUME_SAFE*C.blood_ratio) && C.blood_volume > (BLOOD_VOLUME_OKAY*C.blood_ratio))
|
||||
msg += "<span class='danger'>LOW blood level [blood_percent] %, [C.blood_volume] cl,</span> <span class='info'>type: [blood_type]</span>\n"
|
||||
else if(C.blood_volume <= BLOOD_VOLUME_OKAY)
|
||||
else if(C.blood_volume <= (BLOOD_VOLUME_OKAY*C.blood_ratio))
|
||||
msg += "<span class='danger'>CRITICAL blood level [blood_percent] %, [C.blood_volume] cl,</span> <span class='info'>type: [blood_type]</span>\n"
|
||||
else
|
||||
msg += "<span class='info'>Blood level [blood_percent] %, [C.blood_volume] cl, type: [blood_type]</span>\n"
|
||||
@@ -341,9 +382,19 @@ SLIME SCANNER
|
||||
if(M.reagents)
|
||||
var/msg = "<span class='info'>*---------*\n"
|
||||
if(M.reagents.reagent_list.len)
|
||||
msg += "<span class='notice'>Subject contains the following reagents:</span>\n"
|
||||
var/list/datum/reagent/reagents = list()
|
||||
for(var/datum/reagent/R in M.reagents.reagent_list)
|
||||
msg += "<span class='notice'>[R.volume] units of [R.name][R.overdosed == 1 ? "</span> - <span class='boldannounce'>OVERDOSING</span>" : ".</span>"]\n"
|
||||
if(R.invisible)
|
||||
continue
|
||||
reagents += R
|
||||
|
||||
if(length(reagents))
|
||||
msg += "<span class='notice'>Subject contains the following reagents:</span>\n"
|
||||
for(var/datum/reagent/R in reagents)
|
||||
msg += "<span class='notice'>[R.volume] units of [R.name][R.overdosed == 1 ? "</span> - <span class='boldannounce'>OVERDOSING</span>" : ".</span>"]\n"
|
||||
else
|
||||
msg += "<span class='notice'>Subject contains no reagents.</span>\n"
|
||||
|
||||
else
|
||||
msg += "<span class='notice'>Subject contains no reagents.</span>\n"
|
||||
if(M.reagents.addiction_list.len)
|
||||
@@ -621,7 +672,7 @@ SLIME SCANNER
|
||||
to_chat(user, "Growth progress: [T.amount_grown]/[SLIME_EVOLUTION_THRESHOLD]")
|
||||
if(T.effectmod)
|
||||
to_chat(user, "<span class='notice'>Core mutation in progress: [T.effectmod]</span>")
|
||||
to_chat(user, "<span_class = 'notice'>Progress in core mutation: [T.applied] / [SLIME_EXTRACT_CROSSING_REQUIRED]</span>")
|
||||
to_chat(user, "<span class = 'notice'>Progress in core mutation: [T.applied] / [SLIME_EXTRACT_CROSSING_REQUIRED]</span>")
|
||||
to_chat(user, "========================")
|
||||
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
///books that teach things (intrinsic actions like bar flinging, spells like fireball or smoke, or martial arts)///
|
||||
|
||||
/obj/item/book/granter
|
||||
@@ -13,19 +12,50 @@
|
||||
/obj/item/book/granter/proc/turn_page(mob/user)
|
||||
playsound(user, pick('sound/effects/pageturn1.ogg','sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg'), 30, 1)
|
||||
if(do_after(user,50, user))
|
||||
to_chat(user, "<span class='notice'>[pick(remarks)]</span>")
|
||||
if(remarks.len)
|
||||
to_chat(user, "<span class='notice'>[pick(remarks)]</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You keep reading...</span>")
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/book/granter/proc/recoil(mob/user) //nothing so some books can just return
|
||||
|
||||
/obj/item/book/granter/proc/already_known(mob/user)
|
||||
return FALSE
|
||||
|
||||
/obj/item/book/granter/proc/on_reading_start(mob/user)
|
||||
to_chat(user, "<span class='notice'>You start reading [name]...</span>")
|
||||
|
||||
/obj/item/book/granter/proc/on_reading_stopped(mob/user)
|
||||
to_chat(user, "<span class='notice'>You stop reading...</span>")
|
||||
|
||||
/obj/item/book/granter/proc/on_reading_finished(mob/user)
|
||||
to_chat(user, "<span class='notice'>You finish reading [name]!</span>")
|
||||
|
||||
/obj/item/book/granter/proc/onlearned(mob/user)
|
||||
used = TRUE
|
||||
|
||||
|
||||
/obj/item/book/granter/attack_self(mob/user)
|
||||
if(reading == TRUE)
|
||||
if(reading)
|
||||
to_chat(user, "<span class='warning'>You're already reading this!</span>")
|
||||
return FALSE
|
||||
if(already_known(user))
|
||||
return FALSE
|
||||
if(used && oneuse)
|
||||
recoil(user)
|
||||
else
|
||||
on_reading_start(user)
|
||||
reading = TRUE
|
||||
for(var/i=1, i<=pages_to_mastery, i++)
|
||||
if(!turn_page(user))
|
||||
on_reading_stopped()
|
||||
reading = FALSE
|
||||
return
|
||||
if(do_after(user,50, user))
|
||||
on_reading_finished(user)
|
||||
reading = FALSE
|
||||
return TRUE
|
||||
|
||||
///ACTION BUTTONS///
|
||||
@@ -34,33 +64,23 @@
|
||||
var/granted_action
|
||||
var/actionname = "catching bugs" //might not seem needed but this makes it so you can safely name action buttons toggle this or that without it fucking up the granter, also caps
|
||||
|
||||
/obj/item/book/granter/action/attack_self(mob/user)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
/obj/item/book/granter/action/already_known(mob/user)
|
||||
if(!granted_action)
|
||||
return
|
||||
var/datum/action/G = new granted_action
|
||||
return TRUE
|
||||
for(var/datum/action/A in user.actions)
|
||||
if(A.type == G.type)
|
||||
if(A.type == granted_action)
|
||||
to_chat(user, "<span class='notice'>You already know all about [actionname].</span>")
|
||||
qdel(G)
|
||||
return
|
||||
if(used == TRUE && oneuse == TRUE)
|
||||
recoil(user)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start reading about [actionname]...</span>")
|
||||
reading = TRUE
|
||||
for(var/i=1, i<=pages_to_mastery, i++)
|
||||
if(!turn_page(user))
|
||||
to_chat(user, "<span class='notice'>You stop reading...</span>")
|
||||
reading = FALSE
|
||||
qdel(G)
|
||||
return
|
||||
if(do_after(user,50, user))
|
||||
to_chat(user, "<span class='notice'>You feel like you've got a good handle on [actionname]!</span>")
|
||||
G.Grant(user)
|
||||
reading = FALSE
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/book/granter/action/on_reading_start(mob/user)
|
||||
to_chat(user, "<span class='notice'>You start reading about [actionname]...</span>")
|
||||
|
||||
/obj/item/book/granter/action/on_reading_finished(mob/user)
|
||||
to_chat(user, "<span class='notice'>You feel like you've got a good handle on [actionname]!</span>")
|
||||
var/datum/action/G = new granted_action
|
||||
G.Grant(user)
|
||||
onlearned(user)
|
||||
|
||||
/obj/item/book/granter/action/drink_fling
|
||||
granted_action = /datum/action/innate/drink_fling
|
||||
@@ -120,38 +140,28 @@
|
||||
var/spell
|
||||
var/spellname = "conjure bugs"
|
||||
|
||||
/obj/item/book/granter/spell/attack_self(mob/user)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
/obj/item/book/granter/spell/already_known(mob/user)
|
||||
if(!spell)
|
||||
return
|
||||
var/obj/effect/proc_holder/spell/S = new spell
|
||||
return TRUE
|
||||
for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list)
|
||||
if(knownspell.type == S.type)
|
||||
if(knownspell.type == spell)
|
||||
if(user.mind)
|
||||
if(iswizard(user))
|
||||
to_chat(user,"<span class='notice'>You're already far more versed in this spell than this flimsy howto book can provide.</span>")
|
||||
to_chat(user,"<span class='notice'>You're already far more versed in this spell than this flimsy how-to book can provide.</span>")
|
||||
else
|
||||
to_chat(user,"<span class='notice'>You've already read this one.</span>")
|
||||
return
|
||||
if(used == TRUE && oneuse == TRUE)
|
||||
recoil(user)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start reading about casting [spellname]...</span>")
|
||||
reading = TRUE
|
||||
for(var/i=1, i<=pages_to_mastery, i++)
|
||||
if(!turn_page(user))
|
||||
to_chat(user, "<span class='notice'>You stop reading...</span>")
|
||||
reading = FALSE
|
||||
qdel(S)
|
||||
return
|
||||
if(do_after(user,50, user))
|
||||
to_chat(user, "<span class='notice'>You feel like you've experienced enough to cast [spellname]!</span>")
|
||||
user.mind.AddSpell(S)
|
||||
user.log_message("learned the spell [spellname] ([S])", LOG_ATTACK, color="orange")
|
||||
onlearned(user)
|
||||
reading = FALSE
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/book/granter/spell/on_reading_start(mob/user)
|
||||
to_chat(user, "<span class='notice'>You start reading about casting [spellname]...</span>")
|
||||
|
||||
/obj/item/book/granter/spell/on_reading_finished(mob/user)
|
||||
to_chat(user, "<span class='notice'>You feel like you've experienced enough to cast [spellname]!</span>")
|
||||
var/obj/effect/proc_holder/spell/S = new spell
|
||||
user.mind.AddSpell(S)
|
||||
user.log_message("learned the spell [spellname] ([S])", LOG_ATTACK, color="orange")
|
||||
onlearned(user)
|
||||
|
||||
/obj/item/book/granter/spell/recoil(mob/user)
|
||||
user.visible_message("<span class='warning'>[src] glows in a black light!</span>")
|
||||
@@ -280,7 +290,8 @@
|
||||
if(ishuman(user))
|
||||
to_chat(user,"<font size='15' color='red'><b>HORSIE HAS RISEN</b></font>")
|
||||
var/obj/item/clothing/magichead = new /obj/item/clothing/mask/horsehead/cursed(user.drop_location())
|
||||
user.dropItemToGround(user.wear_mask, TRUE)
|
||||
if(!user.dropItemToGround(user.wear_mask))
|
||||
qdel(user.wear_mask)
|
||||
user.equip_to_slot_if_possible(magichead, SLOT_WEAR_MASK, TRUE, TRUE)
|
||||
qdel(src)
|
||||
else
|
||||
@@ -327,35 +338,24 @@
|
||||
var/martialname = "bug jitsu"
|
||||
var/greet = "You feel like you have mastered the art in breaking code. Nice work, jackass."
|
||||
|
||||
/obj/item/book/granter/martial/attack_self(mob/user)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
/obj/item/book/granter/martial/already_known(mob/user)
|
||||
if(!martial)
|
||||
return
|
||||
return TRUE
|
||||
var/datum/martial_art/MA = martial
|
||||
if(user.mind.has_martialart(initial(MA.id)))
|
||||
to_chat(user,"<span class='warning'>You already know [martialname]!</span>")
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/book/granter/martial/on_reading_start(mob/user)
|
||||
to_chat(user, "<span class='notice'>You start reading about [martialname]...</span>")
|
||||
|
||||
/obj/item/book/granter/martial/on_reading_finished(mob/user)
|
||||
to_chat(user, "[greet]")
|
||||
var/datum/martial_art/MA = new martial
|
||||
if(user.mind.martial_art)
|
||||
for(var/datum/martial_art/knownmartial in user.mind.martial_art)
|
||||
if(knownmartial.type == MA.type)
|
||||
to_chat(user,"<span class='warning'>You already know [martialname]!</span>")
|
||||
return
|
||||
if(used == TRUE && oneuse == TRUE)
|
||||
recoil(user)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start reading about [martialname]...</span>")
|
||||
reading = TRUE
|
||||
for(var/i=1, i<=pages_to_mastery, i++)
|
||||
if(!turn_page(user))
|
||||
to_chat(user, "<span class='notice'>You stop reading...</span>")
|
||||
reading = FALSE
|
||||
qdel(MA)
|
||||
return
|
||||
if(do_after(user,50, user))
|
||||
to_chat(user, "[greet]")
|
||||
MA.teach(user)
|
||||
user.log_message("learned the martial art [martialname] ([MA])", LOG_ATTACK, color="orange")
|
||||
onlearned(user)
|
||||
reading = FALSE
|
||||
MA.teach(user)
|
||||
user.log_message("learned the martial art [martialname] ([MA])", LOG_ATTACK, color="orange")
|
||||
onlearned(user)
|
||||
|
||||
/obj/item/book/granter/martial/cqc
|
||||
martial = /datum/martial_art/cqc
|
||||
@@ -416,3 +416,44 @@
|
||||
icon_state = "blankscroll"
|
||||
|
||||
// I did not include mushpunch's grant, it is not a book and the item does it just fine.
|
||||
|
||||
|
||||
//Crafting Recipe books
|
||||
|
||||
/obj/item/book/granter/crafting_recipe
|
||||
var/list/crafting_recipe_types = list() //Use full /datum/crafting_recipe/what_you_craft
|
||||
|
||||
/obj/item/book/granter/crafting_recipe/on_reading_finished(mob/user)
|
||||
. = ..()
|
||||
if(!user.mind)
|
||||
return
|
||||
for(var/crafting_recipe_type in crafting_recipe_types)
|
||||
var/datum/crafting_recipe/R = crafting_recipe_type
|
||||
user.mind.teach_crafting_recipe(crafting_recipe_type)
|
||||
to_chat(user,"<span class='notice'>You learned how to make [initial(R.name)].</span>")
|
||||
|
||||
/obj/item/book/granter/crafting_recipe/cooking_sweets_101 //We start at 101 for 103 and 105
|
||||
name = "Cooking Desserts 101"
|
||||
desc = "A cook book that teaches you some more of the newest desserts. AI approved, and a best seller on Honkplanet."
|
||||
crafting_recipe_types = list(/datum/crafting_recipe/food/mimetart, /datum/crafting_recipe/food/berrytart, /datum/crafting_recipe/food/cocolavatart, /datum/crafting_recipe/food/clowncake, /datum/crafting_recipe/food/vanillacake)
|
||||
icon_state = "cooking_learing_sweets"
|
||||
oneuse = FALSE
|
||||
remarks = list("So that is how icing is made!", "Placing fruit on top? How simple...", "Huh layering cake seems harder then this...", "This book smells like candy", "A clown must have made this page, or they forgot to spell check it before printing...", "Wait, a way to cook slime to be safe?")
|
||||
|
||||
/obj/item/book/granter/crafting_recipe/coldcooking //IceCream
|
||||
name = "Cooking with Ice"
|
||||
desc = "A cook book that teaches you many old icecream treats."
|
||||
crafting_recipe_types = list(/datum/crafting_recipe/food/banana_split, /datum/crafting_recipe/food/root_float, /datum/crafting_recipe/food/bluecharrie_float, /datum/crafting_recipe/food/charrie_float)
|
||||
icon_state = "cooking_learing_ice"
|
||||
oneuse = FALSE
|
||||
remarks = list("Looks like these would sell much better in a plasma fire...", "Using glass bowls rather then cones?", "Mixing soda and ice-cream?", "Tall glasses with of liquids and solids...", "Just add a bit of icecream and cherry on top?")
|
||||
|
||||
//Later content when I have free time - Trilby Date:24-Aug-2019
|
||||
|
||||
/obj/item/book/granter/crafting_recipe/under_the_oven //Illegal cook book
|
||||
name = "Under The Oven"
|
||||
desc = "A cook book that teaches you many illegal and fun candys. MALF AI approved, and a best seller on the blackmarket."
|
||||
crafting_recipe_types = list()
|
||||
icon_state = "cooking_learing_illegal"
|
||||
oneuse = FALSE
|
||||
remarks = list()
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/obj/item/restraints
|
||||
breakouttime = 600
|
||||
var/demoralize_criminals = TRUE // checked on carbon/carbon.dm to decide wheter to apply the handcuffed negative moodlet or not.
|
||||
|
||||
/obj/item/restraints/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] is strangling [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -26,6 +27,7 @@
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "handcuff"
|
||||
item_state = "handcuff"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
@@ -103,7 +105,6 @@
|
||||
desc = "A pair of restraints fashioned from long strands of flesh."
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "sinewcuff"
|
||||
item_state = "sinewcuff"
|
||||
breakouttime = 300 //Deciseconds = 30s
|
||||
cuffsound = 'sound/weapons/cablecuff.ogg'
|
||||
|
||||
@@ -164,14 +165,6 @@
|
||||
/obj/item/restraints/handcuffs/cable/white
|
||||
item_color = "white"
|
||||
|
||||
/obj/item/restraints/handcuffs/alien
|
||||
icon_state = "handcuffAlien"
|
||||
|
||||
/obj/item/restraints/handcuffs/fake
|
||||
name = "fake handcuffs"
|
||||
desc = "Fake handcuffs meant for gag purposes."
|
||||
breakouttime = 10 //Deciseconds = 1s
|
||||
|
||||
/obj/item/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params)
|
||||
..()
|
||||
if(istype(I, /obj/item/stack/rods))
|
||||
@@ -206,7 +199,7 @@
|
||||
/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"
|
||||
item_state = "zipties"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
materials = list()
|
||||
@@ -217,11 +210,26 @@
|
||||
/obj/item/restraints/handcuffs/cable/zipties/used
|
||||
desc = "A pair of broken zipties."
|
||||
icon_state = "cuff_used"
|
||||
item_state = "cuff"
|
||||
|
||||
/obj/item/restraints/handcuffs/cable/zipties/used/attack()
|
||||
return
|
||||
|
||||
/obj/item/restraints/handcuffs/alien
|
||||
icon_state = "handcuffAlien"
|
||||
|
||||
/obj/item/restraints/handcuffs/fake
|
||||
name = "fake handcuffs"
|
||||
desc = "Fake handcuffs meant for gag purposes."
|
||||
breakouttime = 10 //Deciseconds = 1s
|
||||
demoralize_criminals = FALSE
|
||||
|
||||
/obj/item/restraints/handcuffs/fake/kinky
|
||||
name = "kinky handcuffs"
|
||||
desc = "Fake handcuffs meant for erotic roleplay."
|
||||
icon = 'modular_citadel/icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "handcuffgag"
|
||||
item_state = "kinkycuff"
|
||||
|
||||
//Legcuffs
|
||||
|
||||
/obj/item/restraints/legcuffs
|
||||
@@ -230,6 +238,7 @@
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "handcuff"
|
||||
item_state = "legcuff"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
flags_1 = CONDUCT_1
|
||||
|
||||
@@ -12,8 +12,9 @@
|
||||
lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi'
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
w_class = WEIGHT_CLASS_GIGANTIC
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
force = 12
|
||||
total_mass = TOTAL_MASS_NORMAL_ITEM // average toolbox
|
||||
attack_verb = list("robusted")
|
||||
hitsound = 'sound/weapons/smash.ogg'
|
||||
var/awakened = FALSE
|
||||
@@ -174,6 +175,7 @@
|
||||
/obj/item/his_grace/proc/consume(mob/living/meal) //Here's your dinner, Mr. Grace.
|
||||
if(!meal)
|
||||
return
|
||||
var/victims = 0
|
||||
meal.visible_message("<span class='warning'>[src] swings open and devours [meal]!</span>", "<span class='his_grace big bold'>[src] consumes you!</span>")
|
||||
meal.adjustBruteLoss(200)
|
||||
playsound(meal, 'sound/misc/desceration-02.ogg', 75, 1)
|
||||
@@ -185,7 +187,10 @@
|
||||
bloodthirst = max(LAZYLEN(contents), 1) //Never fully sated, and His hunger will only grow.
|
||||
else
|
||||
bloodthirst = HIS_GRACE_CONSUME_OWNER
|
||||
if(LAZYLEN(contents) >= victims_needed)
|
||||
for(var/mob/living/C in contents)
|
||||
if(C.mind)
|
||||
victims++
|
||||
if(victims >= victims_needed)
|
||||
ascend()
|
||||
update_stats()
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
desc = "God wills it!"
|
||||
icon_state = "knight_templar"
|
||||
item_state = "knight_templar"
|
||||
allowed = list(/obj/item/storage/book/bible, HOLY_WEAPONS, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
|
||||
// CITADEL CHANGES: More variants
|
||||
/obj/item/clothing/suit/armor/riot/chaplain/teutonic
|
||||
@@ -122,7 +123,6 @@
|
||||
icon_state = "studentuni"
|
||||
item_state = "studentuni"
|
||||
body_parts_covered = ARMS|CHEST
|
||||
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
|
||||
/obj/item/clothing/head/helmet/chaplain/cage
|
||||
name = "cage"
|
||||
@@ -166,7 +166,6 @@
|
||||
icon_state = "witchhunter"
|
||||
item_state = "witchhunter"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
|
||||
/obj/item/clothing/head/helmet/chaplain/witchunter_hat
|
||||
name = "witchunter hat"
|
||||
@@ -191,7 +190,7 @@
|
||||
icon_state = "chaplain_hoodie"
|
||||
item_state = "chaplain_hoodie"
|
||||
body_parts_covered = CHEST|GROIN|LEGS|ARMS
|
||||
allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
allowed = list(/obj/item/storage/book/bible, HOLY_WEAPONS, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
hoodtype = /obj/item/clothing/head/hooded/chaplain_hood
|
||||
|
||||
/obj/item/clothing/head/hooded/chaplain_hood
|
||||
@@ -229,8 +228,8 @@
|
||||
throwforce = 10
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
obj_flags = UNIQUE_RENAME
|
||||
var/reskinned = FALSE
|
||||
var/chaplain_spawnable = TRUE
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
|
||||
|
||||
/obj/item/nullrod/Initialize()
|
||||
. = ..()
|
||||
@@ -247,10 +246,8 @@
|
||||
/obj/item/nullrod/proc/reskin_holy_weapon(mob/M)
|
||||
if(GLOB.holy_weapon_type)
|
||||
return
|
||||
var/obj/item/nullrod/holy_weapon
|
||||
var/list/holy_weapons_list = typesof(/obj/item/nullrod) + list(
|
||||
/obj/item/melee/transforming/energy/sword/cx/chaplain
|
||||
)
|
||||
var/obj/item/holy_weapon
|
||||
var/list/holy_weapons_list = subtypesof(/obj/item/nullrod) + list(HOLY_WEAPONS)
|
||||
var/list/display_names = list()
|
||||
for(var/V in holy_weapons_list)
|
||||
var/obj/item/nullrod/rodtype = V
|
||||
@@ -273,6 +270,13 @@
|
||||
qdel(src)
|
||||
M.put_in_active_hand(holy_weapon)
|
||||
|
||||
/obj/item/nullrod/proc/jedi_spin(mob/living/user)
|
||||
for(var/i in list(NORTH,SOUTH,EAST,WEST,EAST,SOUTH,NORTH,SOUTH,EAST,WEST,EAST,SOUTH))
|
||||
user.setDir(i)
|
||||
if(i == WEST)
|
||||
user.emote("flip")
|
||||
sleep(1)
|
||||
|
||||
/obj/item/nullrod/godhand
|
||||
icon_state = "disintegrate"
|
||||
item_state = "disintegrate"
|
||||
@@ -285,14 +289,12 @@
|
||||
hitsound = 'sound/weapons/sear.ogg'
|
||||
damtype = BURN
|
||||
attack_verb = list("punched", "cross countered", "pummeled")
|
||||
|
||||
total_mass = TOTAL_MASS_HAND_REPLACEMENT
|
||||
|
||||
/obj/item/nullrod/godhand/Initialize()
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
|
||||
|
||||
|
||||
|
||||
/obj/item/nullrod/staff
|
||||
icon_state = "godstaff-red"
|
||||
item_state = "godstaff-red"
|
||||
@@ -536,6 +538,7 @@
|
||||
sharpness = IS_SHARP
|
||||
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
|
||||
hitsound = 'sound/weapons/chainsawhit.ogg'
|
||||
total_mass = TOTAL_MASS_HAND_REPLACEMENT
|
||||
|
||||
/obj/item/nullrod/chainsaw/Initialize()
|
||||
. = ..()
|
||||
@@ -584,6 +587,7 @@
|
||||
lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi'
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
force = 12
|
||||
reach = 2
|
||||
attack_verb = list("whipped", "lashed")
|
||||
hitsound = 'sound/weapons/chainhit.ogg'
|
||||
@@ -612,6 +616,7 @@
|
||||
item_flags = ABSTRACT
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
sharpness = IS_SHARP
|
||||
total_mass = TOTAL_MASS_HAND_REPLACEMENT
|
||||
|
||||
/obj/item/nullrod/armblade/Initialize()
|
||||
. = ..()
|
||||
@@ -659,6 +664,44 @@
|
||||
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
|
||||
|
||||
/obj/item/nullrod/claymore/bostaff/attack(mob/target, mob/living/user)
|
||||
add_fingerprint(user)
|
||||
if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50))
|
||||
to_chat(user, "<span class ='warning'>You club yourself over the head with [src].</span>")
|
||||
user.Knockdown(60)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD)
|
||||
else
|
||||
user.take_bodypart_damage(2*force)
|
||||
return
|
||||
if(iscyborg(target))
|
||||
return ..()
|
||||
if(!isliving(target))
|
||||
return ..()
|
||||
var/mob/living/carbon/C = target
|
||||
if(C.stat || C.health < 0 || C.staminaloss > 130 )
|
||||
to_chat(user, "<span class='warning'>It would be dishonorable to attack a foe while they cannot retaliate.</span>")
|
||||
return
|
||||
if(user.a_intent == INTENT_DISARM)
|
||||
if(!ishuman(target))
|
||||
return ..()
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/list/fluffmessages = list("[user] clubs [H] with [src]!", \
|
||||
"[user] smacks [H] with the butt of [src]!", \
|
||||
"[user] broadsides [H] with [src]!", \
|
||||
"[user] smashes [H]'s head with [src]!", \
|
||||
"[user] beats [H] with front of [src]!", \
|
||||
"[user] twirls and slams [H] with [src]!")
|
||||
H.visible_message("<span class='warning'>[pick(fluffmessages)]</span>", \
|
||||
"<span class='userdanger'>[pick(fluffmessages)]</span>")
|
||||
playsound(get_turf(user), 'sound/effects/woodhit.ogg', 75, 1, -1)
|
||||
H.adjustStaminaLoss(rand(12,18))
|
||||
if(prob(25))
|
||||
(INVOKE_ASYNC(src, .proc/jedi_spin, user))
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/nullrod/tribal_knife
|
||||
icon_state = "crysknife"
|
||||
item_state = "crysknife"
|
||||
@@ -701,8 +744,8 @@
|
||||
name = "egyptian staff"
|
||||
desc = "A tutorial in mummification is carved into the staff. You could probably craft the wraps if you had some cloth."
|
||||
icon = 'icons/obj/guns/magic.dmi'
|
||||
icon_state = "pharoah_sceptre"
|
||||
item_state = "pharoah_sceptre"
|
||||
icon_state = "pharaoh_sceptre"
|
||||
item_state = "pharaoh_sceptre"
|
||||
lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
return
|
||||
if(!H.mind)
|
||||
return
|
||||
if(istype(H.mind.martial_art, /datum/martial_art/krav_maga))
|
||||
if(H.mind.has_martialart(MARTIALART_KRAVMAGA))
|
||||
style.remove(H)
|
||||
else
|
||||
style.teach(H,1)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
name = "inconspicious box"
|
||||
desc = "It's so normal that you didn't notice it before."
|
||||
icon_state = "agentbox"
|
||||
max_integrity = 1
|
||||
use_mob_movespeed = TRUE
|
||||
|
||||
/obj/structure/closet/cardboard/agent/proc/go_invisible()
|
||||
|
||||
@@ -5,9 +5,12 @@
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30)
|
||||
resistance_flags = FIRE_PROOF
|
||||
var/brightness_on = 3
|
||||
total_mass = 0.4 //Survival flashlights typically weigh around 5 ounces.
|
||||
|
||||
|
||||
/obj/item/melee/transforming/energy/Initialize()
|
||||
. = ..()
|
||||
total_mass_on = (total_mass_on ? total_mass_on : (w_class_on * 0.75))
|
||||
if(active)
|
||||
set_light(brightness_on)
|
||||
START_PROCESSING(SSobj, src)
|
||||
@@ -79,6 +82,7 @@
|
||||
attack_verb_off = list("attacked", "chopped", "cleaved", "torn", "cut")
|
||||
attack_verb_on = list()
|
||||
light_color = "#40ceff"
|
||||
total_mass = null
|
||||
|
||||
/obj/item/melee/transforming/energy/axe/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] swings [src] towards [user.p_their()] head! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "impaled", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
sharpness = IS_SHARP
|
||||
total_mass = TOTAL_MASS_HAND_REPLACEMENT
|
||||
|
||||
/obj/item/melee/synthetic_arm_blade/Initialize()
|
||||
. = ..()
|
||||
@@ -67,6 +68,7 @@
|
||||
attack_verb = list("slashed", "cut")
|
||||
hitsound = 'sound/weapons/rapierhit.ogg'
|
||||
materials = list(MAT_METAL = 1000)
|
||||
total_mass = 3.4
|
||||
|
||||
/obj/item/melee/sabre/Initialize()
|
||||
. = ..()
|
||||
@@ -89,6 +91,12 @@
|
||||
if(istype(B))
|
||||
playsound(B, 'sound/items/sheath.ogg', 25, 1)
|
||||
|
||||
/obj/item/melee/sabre/get_belt_overlay()
|
||||
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "sabre")
|
||||
|
||||
/obj/item/melee/sabre/get_worn_belt_overlay(icon_file)
|
||||
return mutable_appearance(icon_file, "-sabre")
|
||||
|
||||
/obj/item/melee/sabre/suicide_act(mob/living/user)
|
||||
user.visible_message("<span class='suicide'>[user] is trying to cut off all [user.p_their()] limbs with [src]! it looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
var/i = 0
|
||||
@@ -147,13 +155,20 @@
|
||||
flags_1 = CONDUCT_1
|
||||
obj_flags = UNIQUE_RENAME
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
sharpness = IS_SHARP_ACCURATE //It cant be sharpend cook -_-
|
||||
sharpness = IS_SHARP_ACCURATE //It cant be sharpend cook -_-
|
||||
attack_verb = list("slashed", "cut", "pierces", "pokes")
|
||||
total_mass = 3.4
|
||||
|
||||
/obj/item/melee/rapier/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/butchering, 20, 65, 0)
|
||||
|
||||
/obj/item/melee/rapier/get_belt_overlay()
|
||||
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "rapier")
|
||||
|
||||
/obj/item/melee/rapier/get_worn_belt_overlay(icon_file)
|
||||
return mutable_appearance(icon_file, "-rapier")
|
||||
|
||||
/obj/item/melee/classic_baton
|
||||
name = "police baton"
|
||||
desc = "A wooden truncheon for beating criminal scum."
|
||||
@@ -165,8 +180,13 @@
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
force = 12 //9 hit crit
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
var/cooldown = 0
|
||||
var/cooldown = 13
|
||||
var/on = TRUE
|
||||
var/last_hit = 0
|
||||
var/stun_stam_cost_coeff = 1.25
|
||||
var/hardstun_ds = 1
|
||||
var/softstun_ds = 0
|
||||
var/stam_dmg = 30
|
||||
|
||||
/obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user)
|
||||
if(!on)
|
||||
@@ -192,12 +212,10 @@
|
||||
if(!isliving(target))
|
||||
return
|
||||
if (user.a_intent == INTENT_HARM)
|
||||
if(!..())
|
||||
return
|
||||
if(!iscyborg(target))
|
||||
if(!..() || !iscyborg(target))
|
||||
return
|
||||
else
|
||||
if(cooldown <= world.time)
|
||||
if(last_hit < world.time)
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if (H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK))
|
||||
@@ -205,7 +223,7 @@
|
||||
if(check_martial_counter(H, user))
|
||||
return
|
||||
playsound(get_turf(src), 'sound/effects/woodhit.ogg', 75, 1, -1)
|
||||
target.Knockdown(60)
|
||||
target.Knockdown(softstun_ds, TRUE, FALSE, hardstun_ds, stam_dmg)
|
||||
log_combat(user, target, "stunned", src)
|
||||
src.add_fingerprint(user)
|
||||
target.visible_message("<span class ='danger'>[user] has knocked down [target] with [src]!</span>", \
|
||||
@@ -214,7 +232,7 @@
|
||||
target.LAssailant = null
|
||||
else
|
||||
target.LAssailant = user
|
||||
cooldown = world.time + 40
|
||||
last_hit = world.time + cooldown
|
||||
user.adjustStaminaLossBuffered(getweight())//CIT CHANGE - makes swinging batons cost stamina
|
||||
|
||||
/obj/item/melee/classic_baton/telescopic
|
||||
@@ -230,6 +248,7 @@
|
||||
item_flags = NONE
|
||||
force = 0
|
||||
on = FALSE
|
||||
total_mass = TOTAL_MASS_NORMAL_ITEM
|
||||
|
||||
/obj/item/melee/classic_baton/telescopic/suicide_act(mob/user)
|
||||
var/mob/living/carbon/human/H = user
|
||||
@@ -390,6 +409,7 @@
|
||||
var/static/list/ovens
|
||||
var/on = FALSE
|
||||
var/datum/beam/beam
|
||||
total_mass = 2.5
|
||||
|
||||
/obj/item/melee/roastingstick/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
var/list/nemesis_factions //Any mob with a faction that exists in this list will take bonus damage/effects
|
||||
var/w_class_on = WEIGHT_CLASS_BULKY
|
||||
var/clumsy_check = TRUE
|
||||
var/total_mass_on //Total mass in ounces when transformed. Primarily for balance purposes. Don't think about it too hard.
|
||||
|
||||
/obj/item/melee/transforming/Initialize()
|
||||
. = ..()
|
||||
@@ -46,6 +47,7 @@
|
||||
active = !active
|
||||
if(active)
|
||||
force = force_on
|
||||
total_mass = total_mass_on
|
||||
throwforce = throwforce_on
|
||||
hitsound = hitsound_on
|
||||
throw_speed = 4
|
||||
@@ -62,6 +64,7 @@
|
||||
attack_verb = attack_verb_off
|
||||
icon_state = initial(icon_state)
|
||||
w_class = initial(w_class)
|
||||
total_mass = initial(total_mass)
|
||||
if(is_sharp())
|
||||
var/datum/component/butchering/BT = LoadComponent(/datum/component/butchering)
|
||||
BT.butchering_enabled = TRUE
|
||||
@@ -84,4 +87,4 @@
|
||||
/obj/item/melee/transforming/proc/clumsy_transform_effect(mob/living/user)
|
||||
if(clumsy_check && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
|
||||
to_chat(user, "<span class='warning'>You accidentally cut yourself with [src], like a doofus!</span>")
|
||||
user.take_bodypart_damage(5,5)
|
||||
user.take_bodypart_damage(5,5)
|
||||
@@ -90,14 +90,14 @@
|
||||
add_fingerprint(user)
|
||||
|
||||
|
||||
/obj/item/paint/afterattack(turf/target, mob/user, proximity)
|
||||
/obj/item/paint/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
return
|
||||
if(paintleft <= 0)
|
||||
icon_state = "paint_empty"
|
||||
return
|
||||
if(!istype(target) || isspaceturf(target))
|
||||
if(!isturf(target) || isspaceturf(target))
|
||||
return
|
||||
var/newcolor = "#" + item_color
|
||||
target.add_atom_colour(newcolor, WASHABLE_COLOUR_PRIORITY)
|
||||
@@ -105,12 +105,14 @@
|
||||
/obj/item/paint/paint_remover
|
||||
gender = PLURAL
|
||||
name = "paint remover"
|
||||
desc = "Used to remove color from floors and walls."
|
||||
desc = "Used to remove color from anything."
|
||||
icon_state = "paint_neutral"
|
||||
|
||||
/obj/item/paint/paint_remover/afterattack(turf/target, mob/user, proximity)
|
||||
/obj/item/paint/paint_remover/afterattack(atom/target, mob/user, proximity)
|
||||
. = ..()
|
||||
if(!proximity)
|
||||
return
|
||||
if(istype(target) && target.color != initial(target.color))
|
||||
if(!isturf(target) || !isobj(target))
|
||||
return
|
||||
if(target.color != initial(target.color))
|
||||
target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
|
||||
|
||||
@@ -629,7 +629,7 @@
|
||||
|
||||
/obj/item/toy/plush/mothplushie
|
||||
name = "insect plushie"
|
||||
desc = "An adorable stuffed toy that resembles some kind of insect"
|
||||
desc = "An adorable stuffed toy that resembles some kind of insect."
|
||||
icon_state = "bumble"
|
||||
item_state = "bumble"
|
||||
squeak_override = list('modular_citadel/sound/voice/mothsqueak.ogg' = 1)
|
||||
@@ -664,6 +664,27 @@
|
||||
item_state = "box"
|
||||
attack_verb = list("open", "closed", "packed", "hidden", "rigged", "bombed", "sent", "gave")
|
||||
|
||||
/obj/item/toy/plush/slaggy
|
||||
name = "slag plushie"
|
||||
desc = "A piece of slag with some googly eyes and a drawn on mouth."
|
||||
icon_state = "slaggy"
|
||||
item_state = "slaggy"
|
||||
attack_verb = list("melted", "refined", "stared")
|
||||
|
||||
/obj/item/toy/plush/mr_buckety
|
||||
name = "bucket plushie"
|
||||
desc = "A bucket that is missing its handle with some googly eyes and a drawn on mouth."
|
||||
icon_state = "mr_buckety"
|
||||
item_state = "mr_buckety"
|
||||
attack_verb = list("filled", "dumped", "stared")
|
||||
|
||||
/obj/item/toy/plush/dr_scanny
|
||||
name = "scanner plushie"
|
||||
desc = "A old outdated scanner that has been modified to have googly eyes, a dawn on mouth and, heart."
|
||||
icon_state = "dr_scanny"
|
||||
item_state = "dr_scanny"
|
||||
attack_verb = list("scanned", "beeped", "stared")
|
||||
|
||||
/obj/item/toy/plush/borgplushie
|
||||
name = "robot plushie"
|
||||
desc = "An adorable stuffed toy of a robot."
|
||||
@@ -752,8 +773,10 @@
|
||||
item_state = "blep"
|
||||
|
||||
/obj/item/toy/plush/mammal/circe
|
||||
desc = "A luxuriously soft toy that resembles a nine-tailed kitsune."
|
||||
icon_state = "circe"
|
||||
item_state = "circe"
|
||||
attack_verb = list("medicated", "tailhugged", "kissed")
|
||||
|
||||
/obj/item/toy/plush/mammal/robin
|
||||
icon_state = "robin"
|
||||
@@ -818,8 +841,10 @@
|
||||
item_state = "rae"
|
||||
|
||||
/obj/item/toy/plush/mammal/zed
|
||||
desc = "A masked stuffed toy that resembles a fierce miner. He even comes with his own little crusher!"
|
||||
icon_state = "zed"
|
||||
item_state = "zed"
|
||||
attack_verb = list("ENDED", "CRUSHED", "GNOMED")
|
||||
|
||||
/obj/item/toy/plush/mammal/justin
|
||||
icon_state = "justin"
|
||||
@@ -831,6 +856,12 @@
|
||||
item_state = "reece"
|
||||
attack_verb = list("healed", "cured", "demoted")
|
||||
|
||||
/obj/item/toy/plush/mammal/redwood
|
||||
desc = "An adorable stuffed toy resembling a Nanotrasen Captain. That just happens to be a bunny."
|
||||
icon_state = "redwood"
|
||||
item_state = "redwood"
|
||||
attack_verb = list("ordered", "bapped", "reprimanded")
|
||||
|
||||
/obj/item/toy/plush/mammal/dog
|
||||
desc = "An adorable stuffed toy that resembles a canine."
|
||||
icon_state = "katlin"
|
||||
@@ -877,6 +908,12 @@
|
||||
obj_flags = UNIQUE_RENAME
|
||||
unique_reskin = list("Goodboye" = "fritz", "Badboye" = "fritz_bad")
|
||||
|
||||
/obj/item/toy/plush/mammal/dog/jesse
|
||||
desc = "An adorable wolf toy that resembles a cream-colored wolf. He has a little pride flag!"
|
||||
icon_state = "jesse"
|
||||
item_state = "jesse"
|
||||
attack_verb = list("greeted", "merc'd", "howdy'd")
|
||||
|
||||
/obj/item/toy/plush/catgirl
|
||||
name = "feline plushie"
|
||||
desc = "An adorable stuffed toy that resembles a feline."
|
||||
@@ -914,3 +951,15 @@
|
||||
item_state = "fermis"
|
||||
attack_verb = list("cuddled", "petpatted", "wigglepurred")
|
||||
squeak_override = list('modular_citadel/sound/voice/merowr.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/catgirl/mariaf
|
||||
desc = "An adorable stuffed toy that resembles a very tall cat girl."
|
||||
icon_state = "mariaf"
|
||||
item_state = "mariaf"
|
||||
attack_verb = list("hugged", "stabbed", "licked")
|
||||
|
||||
/obj/item/toy/plush/catgirl/maya
|
||||
desc = "An adorable stuffed toy that resembles an angry cat girl. She has her own tiny nuke disk!"
|
||||
icon_state = "maya"
|
||||
item_state = "maya"
|
||||
attack_verb = list("nuked", "arrested", "harmbatonned")
|
||||
|
||||
@@ -282,11 +282,13 @@
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/harmalarm/emag_act(mob/user)
|
||||
. = ..()
|
||||
obj_flags ^= EMAGGED
|
||||
if(obj_flags & EMAGGED)
|
||||
to_chat(user, "<font color='red'>You short out the safeties on [src]!</font>")
|
||||
else
|
||||
to_chat(user, "<font color='red'>You reset the safeties on [src]!</font>")
|
||||
return TRUE
|
||||
|
||||
/obj/item/harmalarm/attack_self(mob/user)
|
||||
var/safety = !(obj_flags & EMAGGED)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
var/locked = FALSE
|
||||
var/installed = 0
|
||||
var/require_module = 0
|
||||
var/module_type = null
|
||||
var/list/module_type
|
||||
// if true, is not stored in the robot to be ejected
|
||||
// if module is reset
|
||||
var/one_use = FALSE
|
||||
@@ -18,7 +18,7 @@
|
||||
if(R.stat == DEAD)
|
||||
to_chat(user, "<span class='notice'>[src] will not function on a deceased cyborg.</span>")
|
||||
return FALSE
|
||||
if(module_type && !istype(R.module, module_type))
|
||||
if(module_type && !is_type_in_list(R.module, module_type))
|
||||
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
|
||||
to_chat(user, "There's no mounting point for the module!")
|
||||
return FALSE
|
||||
@@ -93,7 +93,6 @@
|
||||
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/robot_module/security
|
||||
|
||||
/obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -141,7 +140,7 @@
|
||||
desc = "A diamond drill replacement for the mining module's standard drill."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/miner
|
||||
module_type = list(/obj/item/robot_module/miner)
|
||||
|
||||
/obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -173,7 +172,7 @@
|
||||
desc = "A satchel of holding replacement for mining cyborg's ore satchel module."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/miner
|
||||
module_type = list(/obj/item/robot_module/miner)
|
||||
|
||||
/obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R)
|
||||
. = ..()
|
||||
@@ -200,7 +199,7 @@
|
||||
desc = "A trash bag of holding replacement for the janiborg's standard trash bag."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/janitor
|
||||
module_type = list(/obj/item/robot_module/janitor, /obj/item/robot_module/scrubpup)
|
||||
|
||||
/obj/item/borg/upgrade/tboh/action(mob/living/silicon/robot/R)
|
||||
. = ..()
|
||||
@@ -227,7 +226,7 @@
|
||||
desc = "An advanced mop replacement for the janiborg's standard mop."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/janitor
|
||||
module_type = list(/obj/item/robot_module/janitor, /obj/item/robot_module/scrubpup)
|
||||
|
||||
/obj/item/borg/upgrade/amop/action(mob/living/silicon/robot/R)
|
||||
. = ..()
|
||||
@@ -276,7 +275,7 @@
|
||||
icon_state = "ash_plating"
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/miner
|
||||
module_type = list(/obj/item/robot_module/miner)
|
||||
|
||||
/obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -405,7 +404,9 @@
|
||||
to produce more advanced and complex medical reagents."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/medical
|
||||
module_type = list(/obj/item/robot_module/medical,
|
||||
/obj/item/robot_module/syndicate_medical,
|
||||
/obj/item/robot_module/medihound)
|
||||
var/list/additional_reagents = list()
|
||||
|
||||
/obj/item/borg/upgrade/hypospray/action(mob/living/silicon/robot/R, user = usr)
|
||||
@@ -467,7 +468,9 @@
|
||||
defibrillator, for on the scene revival."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/medical
|
||||
module_type = list(/obj/item/robot_module/medical,
|
||||
/obj/item/robot_module/syndicate_medical,
|
||||
/obj/item/robot_module/medihound)
|
||||
|
||||
/obj/item/borg/upgrade/defib/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -489,7 +492,9 @@
|
||||
out procedures"
|
||||
icon_state = "cyborg_upgrade3"
|
||||
require_module = 1
|
||||
module_type = /obj/item/robot_module/medical
|
||||
module_type = list(/obj/item/robot_module/medical,
|
||||
/obj/item/robot_module/syndicate_medical,
|
||||
/obj/item/robot_module/medihound)
|
||||
|
||||
/obj/item/borg/upgrade/processor/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -514,7 +519,7 @@
|
||||
/obj/item/robot_module/medical,
|
||||
/obj/item/robot_module/syndicate_medical,
|
||||
/obj/item/robot_module/medihound,
|
||||
/obj/item/robot_module/borgi)
|
||||
/obj/item/robot_module/borgi)
|
||||
|
||||
/obj/item/borg/upgrade/advhealth/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -598,7 +603,7 @@
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "borgrped"
|
||||
require_module = TRUE
|
||||
module_type = /obj/item/robot_module/engineering
|
||||
module_type = list(/obj/item/robot_module/engineering)
|
||||
|
||||
/obj/item/borg/upgrade/rped/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -626,7 +631,9 @@
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "pinpointer_crew"
|
||||
require_module = TRUE
|
||||
module_type = /obj/item/robot_module/medical
|
||||
module_type = list(/obj/item/robot_module/medical,
|
||||
/obj/item/robot_module/syndicate_medical,
|
||||
/obj/item/robot_module/medihound)
|
||||
|
||||
/obj/item/borg/upgrade/pinpointer/action(mob/living/silicon/robot/R, user = usr)
|
||||
. = ..()
|
||||
@@ -664,3 +671,33 @@
|
||||
desc = "Allows you to to turn a cyborg into a clown, honk."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
new_module = /obj/item/robot_module/clown
|
||||
|
||||
// Citadel's Vtech Controller
|
||||
/obj/effect/proc_holder/silicon/cyborg/vtecControl
|
||||
name = "vTec Control"
|
||||
desc = "Allows finer-grained control of the vTec speed boost."
|
||||
action_icon = 'icons/mob/actions.dmi'
|
||||
action_icon_state = "Chevron_State_0"
|
||||
|
||||
var/currentState = 0
|
||||
var/maxReduction = 2
|
||||
|
||||
|
||||
/obj/effect/proc_holder/silicon/cyborg/vtecControl/Click(mob/living/silicon/robot/user)
|
||||
var/mob/living/silicon/robot/self = usr
|
||||
|
||||
currentState = (currentState + 1) % 3
|
||||
|
||||
if(usr)
|
||||
switch(currentState)
|
||||
if (0)
|
||||
self.speed = maxReduction
|
||||
if (1)
|
||||
self.speed -= maxReduction*0.5
|
||||
if (2)
|
||||
self.speed -= maxReduction*1.25
|
||||
|
||||
action.button_icon_state = "Chevron_State_[currentState]"
|
||||
action.UpdateButtonIcon()
|
||||
|
||||
return
|
||||
|
||||
@@ -66,7 +66,8 @@
|
||||
to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.")
|
||||
return
|
||||
|
||||
user.forceMove(pick(L))
|
||||
|
||||
smoke.start()
|
||||
uses--
|
||||
if(do_teleport(user, pick(L), forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC, forced = TRUE))
|
||||
smoke.start()
|
||||
uses--
|
||||
else
|
||||
to_chat(user, "The spell matrix was disrupted by something near the destination.")
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100)
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
force_string = "LORD SINGULOTH HIMSELF"
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
|
||||
|
||||
/obj/item/twohanded/singularityhammer/New()
|
||||
..()
|
||||
@@ -84,6 +85,7 @@
|
||||
throwforce = 30
|
||||
throw_range = 7
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
|
||||
|
||||
/obj/item/twohanded/mjollnir/proc/shock(mob/living/target)
|
||||
target.Stun(60)
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
use(1)
|
||||
|
||||
/obj/item/stack/ore/bluespace_crystal/proc/blink_mob(mob/living/L)
|
||||
do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg')
|
||||
do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
|
||||
|
||||
/obj/item/stack/ore/bluespace_crystal/throw_impact(atom/hit_atom)
|
||||
if(!..()) // not caught in mid-air
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
/obj/item/stack/medical/attack(mob/living/M, mob/user)
|
||||
|
||||
if(M.stat == DEAD)
|
||||
if(M.stat == DEAD && !stop_bleeding)
|
||||
var/t_him = "it"
|
||||
if(M.gender == MALE)
|
||||
t_him = "him"
|
||||
|
||||
@@ -23,7 +23,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100)
|
||||
resistance_flags = ACID_PROOF
|
||||
merge_type = /obj/item/stack/sheet/glass
|
||||
grind_results = list("silicon" = 20)
|
||||
grind_results = list(/datum/reagent/silicon = 20)
|
||||
point_value = 1
|
||||
|
||||
/obj/item/stack/sheet/glass/suicide_act(mob/living/carbon/user)
|
||||
@@ -87,7 +87,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 100)
|
||||
resistance_flags = ACID_PROOF
|
||||
merge_type = /obj/item/stack/sheet/plasmaglass
|
||||
grind_results = list("silicon" = 20, "plasma" = 10)
|
||||
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10)
|
||||
|
||||
/obj/item/stack/sheet/plasmaglass/fifty
|
||||
amount = 50
|
||||
@@ -138,7 +138,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100)
|
||||
resistance_flags = ACID_PROOF
|
||||
merge_type = /obj/item/stack/sheet/rglass
|
||||
grind_results = list("silicon" = 20, "iron" = 10)
|
||||
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/iron = 10)
|
||||
point_value = 4
|
||||
|
||||
/obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params)
|
||||
@@ -177,11 +177,11 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
|
||||
singular_name = "reinforced plasma glass sheet"
|
||||
icon_state = "sheet-prglass"
|
||||
item_state = "sheet-prglass"
|
||||
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT, MAT_METAL = MINERAL_MATERIAL_AMOUNT * 0.5,)
|
||||
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT, MAT_METAL=MINERAL_MATERIAL_AMOUNT * 0.5,)
|
||||
armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
|
||||
resistance_flags = ACID_PROOF
|
||||
merge_type = /obj/item/stack/sheet/plasmarglass
|
||||
grind_results = list("silicon" = 20, "plasma" = 10, "iron" = 10)
|
||||
grind_results = list(/datum/reagent/silicon = 20, /datum/reagent/toxin/plasma = 10, /datum/reagent/iron = 10)
|
||||
point_value = 23
|
||||
|
||||
/obj/item/stack/sheet/plasmarglass/Initialize(mapload, new_amount, merge = TRUE)
|
||||
@@ -243,8 +243,9 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
resistance_flags = ACID_PROOF
|
||||
armor = list("melee" = 100, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100)
|
||||
max_integrity = 40
|
||||
var/cooldown = 0
|
||||
sharpness = IS_SHARP
|
||||
var/icon_prefix
|
||||
|
||||
|
||||
/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>")
|
||||
@@ -266,9 +267,19 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
if("large")
|
||||
pixel_x = rand(-5, 5)
|
||||
pixel_y = rand(-5, 5)
|
||||
var/matrix/M = matrix(transform)
|
||||
M.Turn(rand(-170, 170))
|
||||
transform = M
|
||||
if (icon_prefix)
|
||||
icon_state = "[icon_prefix][icon_state]"
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(T && is_station_level(T.z))
|
||||
SSblackbox.record_feedback("tally", "station_mess_created", 1, name)
|
||||
|
||||
/obj/item/shard/Destroy()
|
||||
. = ..()
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
if(T && is_station_level(T.z))
|
||||
SSblackbox.record_feedback("tally", "station_mess_destroyed", 1, name)
|
||||
|
||||
/obj/item/shard/afterattack(atom/A as mob|obj, mob/user, proximity)
|
||||
. = ..()
|
||||
@@ -298,6 +309,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
return ..()
|
||||
|
||||
/obj/item/shard/welder_act(mob/living/user, obj/item/I)
|
||||
..()
|
||||
if(I.use_tool(src, user, 0, volume=50))
|
||||
var/obj/item/stack/sheet/glass/NG = new (user.loc)
|
||||
for(var/obj/item/stack/sheet/glass/G in user.loc)
|
||||
@@ -316,4 +328,13 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list(
|
||||
playsound(loc, 'sound/effects/glass_step.ogg', 30, 1)
|
||||
else
|
||||
playsound(loc, 'sound/effects/glass_step.ogg', 50, 1)
|
||||
. = ..()
|
||||
return ..()
|
||||
|
||||
/obj/item/shard/plasma
|
||||
name = "purple shard"
|
||||
desc = "A nasty looking shard of plasma glass."
|
||||
force = 6
|
||||
throwforce = 11
|
||||
icon_state = "plasmalarge"
|
||||
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
|
||||
icon_prefix = "plasma"
|
||||
@@ -201,6 +201,7 @@ 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("loom", /obj/structure/loom, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
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), \
|
||||
@@ -248,7 +249,8 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
|
||||
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/reagent_containers/glass/rag, 1), \
|
||||
new/datum/stack_recipe("rag", /obj/item/reagent_containers/rag, 1), \
|
||||
new/datum/stack_recipe("towel", /obj/item/reagent_containers/rag/towel, 3), \
|
||||
new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3), \
|
||||
new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4), \
|
||||
null, \
|
||||
@@ -277,6 +279,31 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
|
||||
/obj/item/stack/sheet/cloth/ten
|
||||
amount = 10
|
||||
|
||||
//Durathread fuck slash-asterisk comments
|
||||
GLOBAL_LIST_INIT(durathread_recipes, list ( \
|
||||
new/datum/stack_recipe("durathread jumpsuit", /obj/item/clothing/under/durathread, 4, time = 40),
|
||||
new/datum/stack_recipe("durathread beret", /obj/item/clothing/head/beret/durathread, 2, time = 40), \
|
||||
new/datum/stack_recipe("durathread beanie", /obj/item/clothing/head/beanie/durathread, 2, time = 40), \
|
||||
new/datum/stack_recipe("durathread bandana", /obj/item/clothing/mask/bandana/durathread, 1, time = 25), \
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/durathread
|
||||
name = "durathread"
|
||||
desc = "A fabric sown from incredibly durable threads, known for its usefulness in armor production."
|
||||
singular_name = "durathread roll"
|
||||
icon_state = "sheet-durathread"
|
||||
item_state = "sheet-cloth"
|
||||
resistance_flags = FLAMMABLE
|
||||
force = 0
|
||||
throwforce = 0
|
||||
merge_type = /obj/item/stack/sheet/durathread
|
||||
|
||||
/obj/item/stack/sheet/durathread/Initialize(mapload, new_amount, merge = TRUE)
|
||||
recipes = GLOB.durathread_recipes
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Cardboard
|
||||
*/
|
||||
@@ -414,6 +441,8 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \
|
||||
new/datum/stack_recipe("brass window - directional", /obj/structure/window/reinforced/clockwork/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("brass window - fulltile", /obj/structure/window/reinforced/clockwork/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \
|
||||
new/datum/stack_recipe("brass chair", /obj/structure/chair/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("brass bar stool", /obj/structure/chair/stool/bar/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("brass stool", /obj/structure/chair/stool/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 5, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
null,
|
||||
new/datum/stack_recipe("sender - pressure sensor", /obj/structure/destructible/clockwork/trap/trigger/pressure_sensor, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
@@ -425,7 +454,7 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \
|
||||
new/datum/stack_recipe("receiver - steam vent", /obj/structure/destructible/clockwork/trap/steam_vent, 3, time = 30, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \
|
||||
new/datum/stack_recipe("receiver - power nullifier", /obj/structure/destructible/clockwork/trap/power_nullifier, 5, time = 20, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \
|
||||
null,
|
||||
new/datum/stack_recipe("brass flask", /obj/item/reagent_containers/food/drinks/holyoil/null), \
|
||||
new/datum/stack_recipe("brass flask", /obj/item/reagent_containers/food/drinks/bottle/holyoil/empty), \
|
||||
|
||||
))
|
||||
|
||||
@@ -477,6 +506,8 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \
|
||||
new/datum/stack_recipe("bronze boots", /obj/item/clothing/shoes/bronze), \
|
||||
null,
|
||||
new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("bronze bar stool", /obj/structure/chair/stool/bar/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new/datum/stack_recipe("bronze stool", /obj/structure/chair/stool/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
))
|
||||
|
||||
/obj/item/stack/tile/bronze
|
||||
@@ -598,3 +629,29 @@ new /datum/stack_recipe("paper frame door", /obj/structure/mineral_door/paperfra
|
||||
amount = 20
|
||||
/obj/item/stack/sheet/paperframes/fifty
|
||||
amount = 50
|
||||
|
||||
|
||||
//durathread and cotton raw
|
||||
/obj/item/stack/sheet/cotton
|
||||
name = "raw cotton bundle"
|
||||
desc = "A bundle of raw cotton ready to be spun on the loom."
|
||||
singular_name = "raw cotton ball"
|
||||
icon_state = "sheet-cotton"
|
||||
is_fabric = TRUE
|
||||
resistance_flags = FLAMMABLE
|
||||
force = 0
|
||||
throwforce = 0
|
||||
merge_type = /obj/item/stack/sheet/cotton
|
||||
pull_effort = 30
|
||||
loom_result = /obj/item/stack/sheet/cloth
|
||||
|
||||
/obj/item/stack/sheet/cotton/durathread
|
||||
name = "raw durathread bundle"
|
||||
desc = "A bundle of raw durathread ready to be spun on the loom."
|
||||
singular_name = "raw durathread ball"
|
||||
icon_state = "sheet-durathreadraw"
|
||||
merge_type = /obj/item/stack/sheet/cotton/durathread
|
||||
pull_effort = 70
|
||||
loom_result = /obj/item/stack/sheet/durathread
|
||||
|
||||
|
||||
|
||||
@@ -12,4 +12,7 @@
|
||||
novariants = FALSE
|
||||
var/perunit = MINERAL_MATERIAL_AMOUNT
|
||||
var/sheettype = null //this is used for girders in the creation of walls/false walls
|
||||
var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity.
|
||||
var/point_value = 0 //turn-in value for the gulag stacker - loosely relative to its rarity
|
||||
var/is_fabric = FALSE //is this a valid material for the loom?
|
||||
var/loom_result //result from pulling on the loom
|
||||
var/pull_effort = 0 //amount of delay when pulling on the loom
|
||||
@@ -46,6 +46,7 @@
|
||||
item_flags = NO_MAT_REDEMPTION
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50)
|
||||
component_type = /datum/component/storage/concrete/bluespace/bag_of_holding
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/holding/satchel
|
||||
name = "satchel of holding"
|
||||
@@ -53,6 +54,7 @@
|
||||
icon_state = "holdingsat"
|
||||
item_state = "holdingsat"
|
||||
species_exception = list(/datum/species/angel)
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/holding/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -81,6 +83,7 @@
|
||||
icon_state = "giftbag0"
|
||||
item_state = "giftbag"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/santabag/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -133,6 +136,8 @@
|
||||
desc = "It's a special backpack made exclusively for Nanotrasen officers."
|
||||
icon_state = "captainpack"
|
||||
item_state = "captainpack"
|
||||
resistance_flags = FIRE_PROOF
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/industrial
|
||||
name = "industrial backpack"
|
||||
@@ -140,6 +145,7 @@
|
||||
icon_state = "engiepack"
|
||||
item_state = "engiepack"
|
||||
resistance_flags = FIRE_PROOF
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/botany
|
||||
name = "botany backpack"
|
||||
@@ -194,6 +200,8 @@
|
||||
desc = "A tough satchel with extra pockets."
|
||||
icon_state = "satchel-eng"
|
||||
item_state = "engiepack"
|
||||
resistance_flags = FIRE_PROOF
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/satchel/med
|
||||
name = "medical satchel"
|
||||
@@ -248,18 +256,21 @@
|
||||
desc = "A bone satchel fashend with watcher wings and large bones from goliath. Can be worn on the belt."
|
||||
icon = 'icons/obj/mining.dmi'
|
||||
icon_state = "goliath_saddle"
|
||||
slot_flags = ITEM_SLOT_BACK | ITEM_SLOT_BELT
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
|
||||
/obj/item/storage/backpack/satchel/bone/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
STR.max_combined_w_class = 10
|
||||
STR.max_combined_w_class = 20
|
||||
STR.max_items = 15
|
||||
|
||||
/obj/item/storage/backpack/satchel/cap
|
||||
name = "captain's satchel"
|
||||
desc = "An exclusive satchel for Nanotrasen officers."
|
||||
icon_state = "satchel-cap"
|
||||
item_state = "captainpack"
|
||||
resistance_flags = FIRE_PROOF
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/satchel/flat
|
||||
name = "smuggler's satchel"
|
||||
@@ -355,6 +366,7 @@
|
||||
new /obj/item/cautery(src)
|
||||
new /obj/item/surgical_drapes(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
new /obj/item/reagent_containers/medspray/sterilizine(src)
|
||||
new /obj/item/razor(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/sec
|
||||
@@ -376,12 +388,23 @@
|
||||
new /obj/item/cautery(src)
|
||||
new /obj/item/surgical_drapes(src)
|
||||
new /obj/item/clothing/mask/surgical(src)
|
||||
new /obj/item/reagent_containers/medspray/sterilizine(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/engineering
|
||||
name = "industrial duffel bag"
|
||||
desc = "A large duffel bag for holding extra tools and supplies."
|
||||
icon_state = "duffel-eng"
|
||||
item_state = "duffel-eng"
|
||||
resistance_flags = FIRE_PROOF
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/durathread
|
||||
name = "durathread duffel bag"
|
||||
desc = "A lightweight duffel bag made out of durathread."
|
||||
icon_state = "duffel-durathread"
|
||||
item_state = "duffel-durathread"
|
||||
resistance_flags = FIRE_PROOF
|
||||
slowdown = 0
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/drone
|
||||
name = "drone duffel bag"
|
||||
@@ -389,6 +412,7 @@
|
||||
icon_state = "duffel-drone"
|
||||
item_state = "duffel-drone"
|
||||
resistance_flags = FIRE_PROOF
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/drone/PopulateContents()
|
||||
new /obj/item/screwdriver(src)
|
||||
@@ -398,6 +422,7 @@
|
||||
new /obj/item/stack/cable_coil/random(src)
|
||||
new /obj/item/wirecutters(src)
|
||||
new /obj/item/multitool(src)
|
||||
new /obj/item/pipe_dispenser(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/clown
|
||||
name = "clown's duffel bag"
|
||||
@@ -415,6 +440,7 @@
|
||||
icon_state = "duffel-syndie"
|
||||
item_state = "duffel-syndieammo"
|
||||
slowdown = 0
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/syndie/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -460,6 +486,7 @@
|
||||
new /obj/item/mmi/syndie(src)
|
||||
new /obj/item/implantcase(src)
|
||||
new /obj/item/implanter(src)
|
||||
new /obj/item/reagent_containers/medspray/sterilizine(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/syndie/surgery_adv
|
||||
name = "advanced surgery duffel bag"
|
||||
@@ -479,6 +506,7 @@
|
||||
new /obj/item/mmi/syndie(src)
|
||||
new /obj/item/implantcase(src)
|
||||
new /obj/item/implanter(src)
|
||||
new /obj/item/reagent_containers/medspray/sterilizine(src)
|
||||
|
||||
/obj/item/storage/backpack/duffelbag/syndie/ammo
|
||||
name = "ammunition duffel bag"
|
||||
|
||||
@@ -81,6 +81,7 @@
|
||||
desc = "The latest and greatest in custodial convenience, a trashbag that is capable of holding vast quantities of garbage."
|
||||
icon_state = "bluetrashbag"
|
||||
item_flags = NO_MAT_REDEMPTION
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/bag/trash/bluespace/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -105,6 +106,7 @@
|
||||
component_type = /datum/component/storage/concrete/stack
|
||||
var/spam_protection = FALSE //If this is TRUE, the holder won't receive any messages when they fail to pick up ore through crossing it
|
||||
var/datum/component/mobhook
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/bag/ore/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -391,6 +393,7 @@
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
icon_state = "bspace_biobag"
|
||||
desc = "A bag for the safe transportation and disposal of biowaste and other biological materials."
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/bag/bio/holding/ComponentInitialize()
|
||||
. = ..()
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
attack_verb = list("whipped", "lashed", "disciplined")
|
||||
max_integrity = 300
|
||||
var/content_overlays = FALSE //If this is true, the belt will gain overlays based on what it's holding
|
||||
var/worn_overlays = FALSE //worn counterpart of the above.
|
||||
|
||||
/obj/item/storage/belt/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins belting [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -23,6 +24,12 @@
|
||||
add_overlay(M)
|
||||
..()
|
||||
|
||||
/obj/item/storage/belt/worn_overlays(isinhands, icon_file)
|
||||
. = ..()
|
||||
if(!isinhands && worn_overlays)
|
||||
for(var/obj/item/I in contents)
|
||||
. += I.get_worn_belt_overlay(icon_file)
|
||||
|
||||
/obj/item/storage/belt/Initialize()
|
||||
. = ..()
|
||||
update_icon()
|
||||
@@ -33,6 +40,7 @@
|
||||
icon_state = "utilitybelt"
|
||||
item_state = "utility"
|
||||
content_overlays = TRUE
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //because this is easier than trying to have showers wash all contents.
|
||||
|
||||
/obj/item/storage/belt/utility/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -337,6 +345,7 @@
|
||||
desc = "A set of tactical webbing worn by Syndicate boarding parties."
|
||||
icon_state = "militarywebbing"
|
||||
item_state = "militarywebbing"
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/belt/military/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -424,6 +433,48 @@
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
STR.max_items = 6
|
||||
|
||||
/obj/item/storage/belt/durathread
|
||||
name = "durathread toolbelt"
|
||||
desc = "A toolbelt made out of durathread, it seems resistant enough to hold even big tools like an RCD, it also has higher capacity."
|
||||
icon_state = "webbing-durathread"
|
||||
item_state = "webbing-durathread"
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/storage/belt/durathread/ComponentInitialize()
|
||||
. = ..()
|
||||
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
|
||||
STR.max_items = 14
|
||||
STR.max_combined_w_class = 32
|
||||
STR.max_w_class = WEIGHT_CLASS_NORMAL
|
||||
STR.can_hold = typecacheof(list(
|
||||
/obj/item/crowbar,
|
||||
/obj/item/screwdriver,
|
||||
/obj/item/weldingtool,
|
||||
/obj/item/wirecutters,
|
||||
/obj/item/wrench,
|
||||
/obj/item/multitool,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/stack/cable_coil,
|
||||
/obj/item/t_scanner,
|
||||
/obj/item/analyzer,
|
||||
/obj/item/geiger_counter,
|
||||
/obj/item/extinguisher/mini,
|
||||
/obj/item/radio,
|
||||
/obj/item/clothing/gloves,
|
||||
/obj/item/holosign_creator/atmos,
|
||||
/obj/item/holosign_creator/engineering,
|
||||
/obj/item/forcefield_projector,
|
||||
/obj/item/assembly/signaler,
|
||||
/obj/item/lightreplacer,
|
||||
/obj/item/rcd_ammo,
|
||||
/obj/item/construction/rcd,
|
||||
/obj/item/pipe_dispenser,
|
||||
/obj/item/stack/rods,
|
||||
/obj/item/stack/tile/plasteel,
|
||||
/obj/item/grenade/chem_grenade/metalfoam,
|
||||
/obj/item/grenade/chem_grenade/smart_metal_foam
|
||||
))
|
||||
|
||||
/obj/item/storage/belt/grenade
|
||||
name = "grenadier belt"
|
||||
desc = "A belt for holding grenades."
|
||||
@@ -481,6 +532,7 @@
|
||||
desc = "A belt designed to hold various rods of power. A veritable fanny pack of exotic magic."
|
||||
icon_state = "soulstonebelt"
|
||||
item_state = "soulstonebelt"
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
||||
|
||||
/obj/item/storage/belt/wands/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -517,12 +569,15 @@
|
||||
/obj/item/grenade/chem_grenade,
|
||||
/obj/item/lightreplacer,
|
||||
/obj/item/flashlight,
|
||||
/obj/item/reagent_containers/glass/beaker,
|
||||
/obj/item/reagent_containers/glass/bottle,
|
||||
/obj/item/reagent_containers/spray,
|
||||
/obj/item/soap,
|
||||
/obj/item/holosign_creator,
|
||||
/obj/item/key/janitor,
|
||||
/obj/item/clothing/gloves,
|
||||
/obj/item/melee/flyswatter,
|
||||
/obj/item/paint/paint_remover,
|
||||
/obj/item/assembly/mousetrap
|
||||
))
|
||||
|
||||
@@ -541,6 +596,22 @@
|
||||
/obj/item/ammo_casing/shotgun
|
||||
))
|
||||
|
||||
/obj/item/storage/belt/bandolier/durathread
|
||||
name = "durathread bandolier"
|
||||
desc = "An double stacked bandolier made out of durathread."
|
||||
icon_state = "bandolier-durathread"
|
||||
item_state = "bandolier-durathread"
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
/obj/item/storage/belt/bandolier/durathread/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
STR.max_items = 32
|
||||
STR.display_numerical_stacking = TRUE
|
||||
STR.can_hold = typecacheof(list(
|
||||
/obj/item/ammo_casing
|
||||
))
|
||||
|
||||
/obj/item/storage/belt/medolier
|
||||
name = "medolier"
|
||||
desc = "A medical bandolier for holding smartdarts."
|
||||
@@ -653,6 +724,10 @@
|
||||
icon_state = "sheath"
|
||||
item_state = "sheath"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
content_overlays = TRUE
|
||||
worn_overlays = TRUE
|
||||
var/list/fitting_swords = list(/obj/item/melee/sabre, /obj/item/melee/baton/stunsword)
|
||||
var/starting_sword = /obj/item/melee/sabre
|
||||
|
||||
/obj/item/storage/belt/sabre/ComponentInitialize()
|
||||
. = ..()
|
||||
@@ -660,35 +735,7 @@
|
||||
STR.max_items = 1
|
||||
STR.rustle_sound = FALSE
|
||||
STR.max_w_class = WEIGHT_CLASS_BULKY
|
||||
STR.can_hold = typecacheof(list(
|
||||
/obj/item/melee/sabre
|
||||
))
|
||||
|
||||
/obj/item/storage/belt/sabre/rapier
|
||||
name = "rapier sheath"
|
||||
desc = "A black, thin sheath that looks to house only a long thin blade. Feels like its made of metal."
|
||||
icon_state = "rsheath"
|
||||
item_state = "rsheath"
|
||||
force = 5
|
||||
throwforce = 15
|
||||
block_chance = 30
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
attack_verb = list("bashed", "slashes", "prods", "pokes")
|
||||
|
||||
/obj/item/storage/belt/sabre/rapier/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
STR.max_items = 1
|
||||
STR.rustle_sound = FALSE
|
||||
STR.max_w_class = WEIGHT_CLASS_BULKY
|
||||
STR.can_hold = typecacheof(list(
|
||||
/obj/item/melee/rapier
|
||||
))
|
||||
|
||||
/obj/item/storage/belt/sabre/rapier/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 //To thin to block bullets
|
||||
return ..()
|
||||
STR.can_hold = typecacheof(fitting_swords)
|
||||
|
||||
/obj/item/storage/belt/sabre/examine(mob/user)
|
||||
..()
|
||||
@@ -707,20 +754,28 @@
|
||||
to_chat(user, "[src] is empty.")
|
||||
|
||||
/obj/item/storage/belt/sabre/update_icon()
|
||||
icon_state = initial(icon_state)
|
||||
item_state = initial(item_state)
|
||||
if(contents.len)
|
||||
icon_state += "-sabre"
|
||||
item_state += "-sabre"
|
||||
if(loc && isliving(loc))
|
||||
. = ..()
|
||||
if(isliving(loc))
|
||||
var/mob/living/L = loc
|
||||
L.regenerate_icons()
|
||||
..()
|
||||
|
||||
/obj/item/storage/belt/sabre/PopulateContents()
|
||||
new /obj/item/melee/sabre(src)
|
||||
update_icon()
|
||||
new starting_sword(src)
|
||||
|
||||
/obj/item/storage/belt/sabre/rapier/PopulateContents()
|
||||
new /obj/item/melee/rapier(src)
|
||||
update_icon()
|
||||
/obj/item/storage/belt/sabre/rapier
|
||||
name = "rapier sheath"
|
||||
desc = "A black, thin sheath that looks to house only a long thin blade. Feels like its made of metal."
|
||||
icon_state = "rsheath"
|
||||
item_state = "rsheath"
|
||||
force = 5
|
||||
throwforce = 15
|
||||
block_chance = 30
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
attack_verb = list("bashed", "slashes", "prods", "pokes")
|
||||
fitting_swords = list(/obj/item/melee/rapier)
|
||||
starting_sword = /obj/item/melee/rapier
|
||||
|
||||
/obj/item/storage/belt/sabre/rapier/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 //To thin to block bullets
|
||||
return ..()
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
resistance_flags = FLAMMABLE
|
||||
var/foldable = /obj/item/stack/sheet/cardboard
|
||||
var/illustration = "writing"
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //exploits ahoy
|
||||
|
||||
/obj/item/storage/box/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -1131,6 +1132,7 @@
|
||||
name = "Nanotrasen MRE Ration Kit Menu 0"
|
||||
desc = "A package containing food suspended in an outdated bluespace pocket which lasts for centuries. If you're lucky you may even be able to enjoy the meal without getting food poisoning."
|
||||
icon_state = "mre"
|
||||
illustration = null
|
||||
var/can_expire = TRUE
|
||||
var/spawner_chance = 2
|
||||
var/expiration_date
|
||||
@@ -1184,7 +1186,7 @@
|
||||
|
||||
/obj/item/storage/box/mre/menu3
|
||||
name = "\improper Nanotrasen MRE Ration Kit Menu 3"
|
||||
desc = "The holy grail of MREs. This item contains the fabled MRE pizza and a sample of coffee instant type 2. Any NT employee lucky enough to get their hands on one of these is truly blessed."
|
||||
desc = "The holy grail of MREs. This item contains the fabled MRE pizza, spicy nachos and a sample of coffee instant type 2. Any NT employee lucky enough to get their hands on one of these is truly blessed."
|
||||
icon_state = "menu3"
|
||||
can_expire = FALSE //always fresh, never expired.
|
||||
spawner_chance = 1
|
||||
@@ -1192,7 +1194,42 @@
|
||||
/obj/item/storage/box/mre/menu3/PopulateContents()
|
||||
new /obj/item/reagent_containers/food/snacks/pizzaslice/pepperoni(src)
|
||||
new /obj/item/reagent_containers/food/snacks/breadslice/plain(src)
|
||||
new /obj/item/reagent_containers/food/snacks/cheesewedge(src)
|
||||
new /obj/item/reagent_containers/food/snacks/cubannachos(src)
|
||||
new /obj/item/reagent_containers/food/snacks/grown/chili(src)
|
||||
new /obj/item/reagent_containers/food/drinks/coffee/type2(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
|
||||
/obj/item/storage/box/mre/menu4
|
||||
name = "\improper Nanotrasen MRE Ration Kit Menu 4"
|
||||
|
||||
/obj/item/storage/box/mre/menu4/safe
|
||||
spawner_chance = 0
|
||||
desc = "A package containing food suspended in a bluespace pocket capable of lasting till the end of time."
|
||||
can_expire = FALSE
|
||||
|
||||
/obj/item/storage/box/mre/menu4/PopulateContents()
|
||||
if(prob(66))
|
||||
new /obj/item/reagent_containers/food/snacks/salad/boiledrice(src)
|
||||
else
|
||||
new /obj/item/reagent_containers/food/snacks/salad/ricebowl(src)
|
||||
new /obj/item/reagent_containers/food/snacks/burger/tofu(src)
|
||||
new /obj/item/reagent_containers/food/snacks/salad/fruit(src)
|
||||
new /obj/item/reagent_containers/food/snacks/cracker(src)
|
||||
new /obj/item/tank/internals/emergency_oxygen(src)
|
||||
|
||||
//Where do I put this?
|
||||
/obj/item/secbat
|
||||
name = "Secbat box"
|
||||
desc = "Contained inside is a secbat for use with law enforcement."
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "box"
|
||||
item_state = "syringe_kit"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
|
||||
/obj/item/secbat/attack_self(mob/user)
|
||||
new /mob/living/simple_animal/hostile/retaliate/bat/secbat(user.loc)
|
||||
to_chat(user, "<span class='notice'>You open the box, releasing the secbat!</span>")
|
||||
var/obj/item/stack/sheet/cardboard/I = new(user.drop_location())
|
||||
qdel(src)
|
||||
user.put_in_hands(I)
|
||||
|
||||
@@ -40,9 +40,18 @@
|
||||
|
||||
/obj/item/storage/briefcase/lawyer/family
|
||||
name = "battered briefcase"
|
||||
desc = "An old briefcase, this one has seen better days in its time. It's clear they don't make them nowadays as good as they used to. Comes with an added belt clip!"
|
||||
icon_state = "gbriefcase"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/briefcase_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/briefcase_righthand.dmi'
|
||||
desc = "An old briefcase with a golden trim. It's clear they don't make them as good as they used to. Comes with an added belt clip!"
|
||||
slot_flags = ITEM_SLOT_BELT
|
||||
|
||||
/obj/item/storage/briefcase/lawyer/family/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
STR.max_w_class = WEIGHT_CLASS_NORMAL
|
||||
STR.max_combined_w_class = 14
|
||||
|
||||
/obj/item/storage/briefcase/lawyer/family/PopulateContents()
|
||||
new /obj/item/stamp/law(src)
|
||||
new /obj/item/pen/fountain(src)
|
||||
|
||||
@@ -1,365 +1,391 @@
|
||||
/* First aid storage
|
||||
* Contains:
|
||||
* First Aid Kits
|
||||
* Pill Bottles
|
||||
* Dice Pack (in a pill bottle)
|
||||
*/
|
||||
|
||||
/*
|
||||
* First Aid Kits
|
||||
*/
|
||||
/obj/item/storage/firstaid
|
||||
name = "first-aid kit"
|
||||
desc = "It's an emergency medical kit for those serious boo-boos."
|
||||
icon_state = "firstaid"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
var/empty = FALSE
|
||||
|
||||
/obj/item/storage/firstaid/regular
|
||||
icon_state = "firstaid"
|
||||
desc = "A first aid kit with the ability to heal common types of injuries."
|
||||
|
||||
/obj/item/storage/firstaid/regular/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins giving [user.p_them()]self aids with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/storage/firstaid/regular/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/stack/medical/gauze(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/ointment(src)
|
||||
new /obj/item/stack/medical/ointment(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
/obj/item/storage/firstaid/ancient
|
||||
icon_state = "firstaid"
|
||||
desc = "A first aid kit with the ability to heal common types of injuries."
|
||||
|
||||
/obj/item/storage/firstaid/ancient/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/stack/medical/gauze(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/ointment(src)
|
||||
new /obj/item/stack/medical/ointment(src)
|
||||
new /obj/item/stack/medical/ointment(src)
|
||||
|
||||
/obj/item/storage/firstaid/fire
|
||||
name = "burn treatment kit"
|
||||
desc = "A specialized medical kit for when the toxins lab <i>-spontaneously-</i> burns down."
|
||||
icon_state = "ointment"
|
||||
item_state = "firstaid-ointment"
|
||||
|
||||
/obj/item/storage/firstaid/fire/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins rubbing \the [src] against [user.p_them()]self! It looks like [user.p_theyre()] trying to start a fire!</span>")
|
||||
return FIRELOSS
|
||||
|
||||
/obj/item/storage/firstaid/fire/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = pick("ointment","firefirstaid")
|
||||
|
||||
/obj/item/storage/firstaid/fire/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/reagent_containers/pill/patch/silver_sulf(src)
|
||||
new /obj/item/reagent_containers/pill/oxandrolone(src)
|
||||
new /obj/item/reagent_containers/pill/oxandrolone(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
/obj/item/storage/firstaid/toxin
|
||||
name = "toxin treatment kit"
|
||||
desc = "Used to treat toxic blood content and radiation poisoning."
|
||||
icon_state = "antitoxin"
|
||||
item_state = "firstaid-toxin"
|
||||
|
||||
/obj/item/storage/firstaid/toxin/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins licking the lead paint off \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return TOXLOSS
|
||||
|
||||
/obj/item/storage/firstaid/toxin/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3")
|
||||
|
||||
/obj/item/storage/firstaid/toxin/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
for(var/i in 1 to 4)
|
||||
new /obj/item/reagent_containers/syringe/charcoal(src)
|
||||
for(var/i in 1 to 2)
|
||||
new /obj/item/storage/pill_bottle/charcoal(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
/obj/item/storage/firstaid/radbgone
|
||||
name = "radiation treatment kit"
|
||||
desc = "Used to treat minor toxic blood content and major radiation poisoning."
|
||||
icon_state = "antitoxin"
|
||||
item_state = "firstaid-toxin"
|
||||
|
||||
/obj/item/storage/firstaid/radbgone/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins licking the lead paint off \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return TOXLOSS
|
||||
|
||||
/obj/item/storage/firstaid/radbgone/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
if(prob(50))
|
||||
new /obj/item/reagent_containers/pill/mutarad(src)
|
||||
if(prob(80))
|
||||
new /obj/item/reagent_containers/pill/antirad_plus(src)
|
||||
new /obj/item/reagent_containers/syringe/charcoal(src)
|
||||
new /obj/item/storage/pill_bottle/charcoal(src)
|
||||
new /obj/item/reagent_containers/pill/mutadone(src)
|
||||
new /obj/item/reagent_containers/pill/antirad(src)
|
||||
new /obj/item/reagent_containers/food/drinks/bottle/vodka(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
|
||||
/obj/item/storage/firstaid/o2
|
||||
name = "oxygen deprivation treatment kit"
|
||||
desc = "A box full of oxygen goodies."
|
||||
icon_state = "o2"
|
||||
item_state = "firstaid-o2"
|
||||
|
||||
/obj/item/storage/firstaid/o2/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins hitting [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return OXYLOSS
|
||||
|
||||
/obj/item/storage/firstaid/o2/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
for(var/i in 1 to 4)
|
||||
new /obj/item/reagent_containers/pill/salbutamol(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
/obj/item/storage/firstaid/brute
|
||||
name = "brute trauma treatment kit"
|
||||
desc = "A first aid kit for when you get toolboxed."
|
||||
icon_state = "brute"
|
||||
item_state = "firstaid-brute"
|
||||
|
||||
/obj/item/storage/firstaid/brute/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins beating [user.p_them()]self over the head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/storage/firstaid/brute/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
for(var/i in 1 to 4)
|
||||
new /obj/item/reagent_containers/pill/patch/styptic(src)
|
||||
new /obj/item/stack/medical/gauze(src)
|
||||
new /obj/item/stack/medical/gauze(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
/obj/item/storage/firstaid/tactical
|
||||
name = "combat medical kit"
|
||||
desc = "I hope you've got insurance."
|
||||
icon_state = "bezerk"
|
||||
|
||||
/obj/item/storage/firstaid/tactical/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
STR.max_w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/storage/firstaid/tactical/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/stack/medical/gauze(src)
|
||||
new /obj/item/defibrillator/compact/combat/loaded(src)
|
||||
new /obj/item/reagent_containers/hypospray/combat(src)
|
||||
new /obj/item/reagent_containers/pill/patch/styptic(src)
|
||||
new /obj/item/reagent_containers/pill/patch/silver_sulf(src)
|
||||
new /obj/item/reagent_containers/syringe/lethal/choral(src)
|
||||
new /obj/item/clothing/glasses/hud/health/night(src)
|
||||
|
||||
/*
|
||||
* Pill Bottles
|
||||
*/
|
||||
|
||||
/obj/item/storage/pill_bottle
|
||||
name = "pill bottle"
|
||||
desc = "It's an airtight container for storing medication."
|
||||
icon_state = "pill_canister"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
item_state = "contsolid"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/storage/pill_bottle/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
STR.allow_quick_gather = TRUE
|
||||
STR.click_gather = TRUE
|
||||
STR.can_hold = typecacheof(list(/obj/item/reagent_containers/pill, /obj/item/dice))
|
||||
|
||||
/obj/item/storage/pill_bottle/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is trying to get the cap off [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (TOXLOSS)
|
||||
|
||||
/obj/item/storage/pill_bottle/charcoal
|
||||
name = "bottle of charcoal pills"
|
||||
desc = "Contains pills used to counter toxins."
|
||||
|
||||
/obj/item/storage/pill_bottle/charcoal/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/charcoal(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/antirad
|
||||
name = "bottle of charcoal pills"
|
||||
desc = "Contains pills used to counter radiation poisoning."
|
||||
|
||||
/obj/item/storage/pill_bottle/anitrad/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/antirad(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/epinephrine
|
||||
name = "bottle of epinephrine pills"
|
||||
desc = "Contains pills used to stabilize patients."
|
||||
|
||||
/obj/item/storage/pill_bottle/epinephrine/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/epinephrine(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/mutadone
|
||||
name = "bottle of mutadone pills"
|
||||
desc = "Contains pills used to treat genetic abnormalities."
|
||||
|
||||
/obj/item/storage/pill_bottle/mutadone/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/mutadone(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/mannitol
|
||||
name = "bottle of mannitol pills"
|
||||
desc = "Contains pills used to treat brain damage."
|
||||
|
||||
/obj/item/storage/pill_bottle/mannitol/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/mannitol(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/stimulant
|
||||
name = "bottle of stimulant pills"
|
||||
desc = "Guaranteed to give you that extra burst of energy during a long shift!"
|
||||
|
||||
/obj/item/storage/pill_bottle/stimulant/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/stimulant(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/mining
|
||||
name = "bottle of patches"
|
||||
desc = "Contains patches used to treat brute and burn damage."
|
||||
|
||||
/obj/item/storage/pill_bottle/mining/PopulateContents()
|
||||
new /obj/item/reagent_containers/pill/patch/silver_sulf(src)
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/reagent_containers/pill/patch/styptic(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/zoom
|
||||
name = "suspicious pill bottle"
|
||||
desc = "The label is pretty old and almost unreadable, you recognize some chemical compounds."
|
||||
|
||||
/obj/item/storage/pill_bottle/zoom/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/zoom(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/happy
|
||||
name = "suspicious pill bottle"
|
||||
desc = "There is a smiley on the top."
|
||||
|
||||
/obj/item/storage/pill_bottle/happy/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/happy(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/lsd
|
||||
name = "suspicious pill bottle"
|
||||
desc = "There is a badly drawn thing with the shape of a mushroom."
|
||||
|
||||
/obj/item/storage/pill_bottle/lsd/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/lsd(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/aranesp
|
||||
name = "suspicious pill bottle"
|
||||
desc = "The label says 'gotta go fast'."
|
||||
|
||||
/obj/item/storage/pill_bottle/aranesp/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/aranesp(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/antirad_plus
|
||||
name = "anti radiation deluxe pill bottle"
|
||||
desc = "The label says 'Med-Co branded pills'."
|
||||
|
||||
/obj/item/storage/pill_bottle/antirad_plus/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/antirad_plus(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/mutarad
|
||||
name = "radiation treatment deluxe pill bottle"
|
||||
desc = "The label says 'Med-Co branded pills' and below that 'Contains Mutadone in each pill!`."
|
||||
|
||||
/obj/item/storage/pill_bottle/mutarad/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/mutarad(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/penis_enlargement
|
||||
name = "penis enlargement pills"
|
||||
desc = "You want penis enlargement pills?"
|
||||
|
||||
/obj/item/storage/pill_bottle/penis_enlargement/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/penis_enlargement(src)
|
||||
|
||||
/////////////
|
||||
//Organ Box//
|
||||
/////////////
|
||||
|
||||
/obj/item/storage/belt/organbox
|
||||
name = "Organ Storge"
|
||||
desc = "A compact box that helps hold massive amounts of implants, organs, and some tools. Has a belt clip for easy carrying"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
icon = 'icons/obj/mysterybox.dmi'
|
||||
icon_state = "organbox_open"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
throw_speed = 1
|
||||
throw_range = 1
|
||||
|
||||
/obj/item/storage/belt/organbox/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
STR.max_items = 16
|
||||
STR.max_w_class = WEIGHT_CLASS_BULKY
|
||||
STR.max_combined_w_class = 20
|
||||
STR.can_hold = typecacheof(list(
|
||||
/obj/item/storage/pill_bottle,
|
||||
/obj/item/reagent_containers/hypospray,
|
||||
/obj/item/healthanalyzer,
|
||||
/obj/item/reagent_containers/syringe,
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/hemostat,
|
||||
/obj/item/scalpel,
|
||||
/obj/item/retractor,
|
||||
/obj/item/cautery,
|
||||
/obj/item/surgical_drapes,
|
||||
/obj/item/autosurgeon,
|
||||
/obj/item/organ,
|
||||
/obj/item/implant,
|
||||
/obj/item/implantpad,
|
||||
/obj/item/implantcase,
|
||||
/obj/item/implanter,
|
||||
/obj/item/circuitboard/computer/operating,
|
||||
/obj/item/stack/sheet/mineral/silver,
|
||||
/obj/item/organ_storage
|
||||
))
|
||||
|
||||
/* First aid storage
|
||||
* Contains:
|
||||
* First Aid Kits
|
||||
* Pill Bottles
|
||||
* Dice Pack (in a pill bottle)
|
||||
*/
|
||||
|
||||
/*
|
||||
* First Aid Kits
|
||||
*/
|
||||
/obj/item/storage/firstaid
|
||||
name = "first-aid kit"
|
||||
desc = "It's an emergency medical kit for those serious boo-boos."
|
||||
icon_state = "firstaid"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
var/empty = FALSE
|
||||
|
||||
/obj/item/storage/firstaid/regular
|
||||
icon_state = "firstaid"
|
||||
desc = "A first aid kit with the ability to heal common types of injuries."
|
||||
|
||||
/obj/item/storage/firstaid/regular/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins giving [user.p_them()]self aids with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/storage/firstaid/regular/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/stack/medical/gauze(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/ointment(src)
|
||||
new /obj/item/stack/medical/ointment(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
/obj/item/storage/firstaid/ancient
|
||||
icon_state = "firstaid"
|
||||
desc = "A first aid kit with the ability to heal common types of injuries."
|
||||
|
||||
/obj/item/storage/firstaid/ancient/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/stack/medical/gauze(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/bruise_pack(src)
|
||||
new /obj/item/stack/medical/ointment(src)
|
||||
new /obj/item/stack/medical/ointment(src)
|
||||
new /obj/item/stack/medical/ointment(src)
|
||||
|
||||
/obj/item/storage/firstaid/fire
|
||||
name = "burn treatment kit"
|
||||
desc = "A specialized medical kit for when the toxins lab <i>-spontaneously-</i> burns down."
|
||||
icon_state = "ointment"
|
||||
item_state = "firstaid-ointment"
|
||||
|
||||
/obj/item/storage/firstaid/fire/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins rubbing \the [src] against [user.p_them()]self! It looks like [user.p_theyre()] trying to start a fire!</span>")
|
||||
return FIRELOSS
|
||||
|
||||
/obj/item/storage/firstaid/fire/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = pick("ointment","firefirstaid")
|
||||
|
||||
/obj/item/storage/firstaid/fire/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/reagent_containers/pill/patch/silver_sulf(src)
|
||||
new /obj/item/reagent_containers/pill/oxandrolone(src)
|
||||
new /obj/item/reagent_containers/pill/oxandrolone(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
/obj/item/storage/firstaid/toxin
|
||||
name = "toxin treatment kit"
|
||||
desc = "Used to treat toxic blood content and radiation poisoning."
|
||||
icon_state = "antitoxin"
|
||||
item_state = "firstaid-toxin"
|
||||
|
||||
/obj/item/storage/firstaid/toxin/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins licking the lead paint off \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return TOXLOSS
|
||||
|
||||
/obj/item/storage/firstaid/toxin/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3")
|
||||
|
||||
/obj/item/storage/firstaid/toxin/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
for(var/i in 1 to 4)
|
||||
new /obj/item/reagent_containers/syringe/charcoal(src)
|
||||
for(var/i in 1 to 2)
|
||||
new /obj/item/storage/pill_bottle/charcoal(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
/obj/item/storage/firstaid/radbgone
|
||||
name = "radiation treatment kit"
|
||||
desc = "Used to treat minor toxic blood content and major radiation poisoning."
|
||||
icon_state = "antitoxin"
|
||||
item_state = "firstaid-toxin"
|
||||
|
||||
/obj/item/storage/firstaid/radbgone/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins licking the lead paint off \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return TOXLOSS
|
||||
|
||||
/obj/item/storage/firstaid/radbgone/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
if(prob(50))
|
||||
new /obj/item/reagent_containers/pill/mutarad(src)
|
||||
if(prob(80))
|
||||
new /obj/item/reagent_containers/pill/antirad_plus(src)
|
||||
new /obj/item/reagent_containers/syringe/charcoal(src)
|
||||
new /obj/item/storage/pill_bottle/charcoal(src)
|
||||
new /obj/item/reagent_containers/pill/mutadone(src)
|
||||
new /obj/item/reagent_containers/pill/antirad(src)
|
||||
new /obj/item/reagent_containers/food/drinks/bottle/vodka(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
|
||||
/obj/item/storage/firstaid/o2
|
||||
name = "oxygen deprivation treatment kit"
|
||||
desc = "A box full of oxygen goodies."
|
||||
icon_state = "o2"
|
||||
item_state = "firstaid-o2"
|
||||
|
||||
/obj/item/storage/firstaid/o2/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins hitting [user.p_their()] neck with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return OXYLOSS
|
||||
|
||||
/obj/item/storage/firstaid/o2/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
for(var/i in 1 to 4)
|
||||
new /obj/item/reagent_containers/pill/salbutamol(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
/obj/item/storage/firstaid/brute
|
||||
name = "brute trauma treatment kit"
|
||||
desc = "A first aid kit for when you get toolboxed."
|
||||
icon_state = "brute"
|
||||
item_state = "firstaid-brute"
|
||||
|
||||
/obj/item/storage/firstaid/brute/suicide_act(mob/living/carbon/user)
|
||||
user.visible_message("<span class='suicide'>[user] begins beating [user.p_them()]self over the head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/storage/firstaid/brute/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
for(var/i in 1 to 4)
|
||||
new /obj/item/reagent_containers/pill/patch/styptic(src)
|
||||
new /obj/item/stack/medical/gauze(src)
|
||||
new /obj/item/stack/medical/gauze(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
/obj/item/storage/firstaid/tactical
|
||||
name = "combat medical kit"
|
||||
desc = "I hope you've got insurance."
|
||||
icon_state = "bezerk"
|
||||
|
||||
/obj/item/storage/firstaid/tactical/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
STR.max_w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
/obj/item/storage/firstaid/tactical/PopulateContents()
|
||||
if(empty)
|
||||
return
|
||||
new /obj/item/stack/medical/gauze(src)
|
||||
new /obj/item/defibrillator/compact/combat/loaded(src)
|
||||
new /obj/item/reagent_containers/hypospray/combat(src)
|
||||
new /obj/item/reagent_containers/pill/patch/styptic(src)
|
||||
new /obj/item/reagent_containers/pill/patch/silver_sulf(src)
|
||||
new /obj/item/reagent_containers/syringe/lethal/choral(src)
|
||||
new /obj/item/clothing/glasses/hud/health/night(src)
|
||||
|
||||
/*
|
||||
* Pill Bottles
|
||||
*/
|
||||
|
||||
/obj/item/storage/pill_bottle
|
||||
name = "pill bottle"
|
||||
desc = "It's an airtight container for storing medication."
|
||||
icon_state = "pill_canister"
|
||||
icon = 'icons/obj/chemical.dmi'
|
||||
item_state = "contsolid"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/storage/pill_bottle/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
STR.allow_quick_gather = TRUE
|
||||
STR.click_gather = TRUE
|
||||
STR.can_hold = typecacheof(list(/obj/item/reagent_containers/pill, /obj/item/dice))
|
||||
|
||||
/obj/item/storage/pill_bottle/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is trying to get the cap off [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
return (TOXLOSS)
|
||||
|
||||
/obj/item/storage/pill_bottle/charcoal
|
||||
name = "bottle of charcoal pills"
|
||||
desc = "Contains pills used to counter toxins."
|
||||
|
||||
/obj/item/storage/pill_bottle/charcoal/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/charcoal(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/antirad
|
||||
name = "bottle of charcoal pills"
|
||||
desc = "Contains pills used to counter radiation poisoning."
|
||||
|
||||
/obj/item/storage/pill_bottle/anitrad/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/antirad(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/epinephrine
|
||||
name = "bottle of epinephrine pills"
|
||||
desc = "Contains pills used to stabilize patients."
|
||||
|
||||
/obj/item/storage/pill_bottle/epinephrine/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/epinephrine(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/mutadone
|
||||
name = "bottle of mutadone pills"
|
||||
desc = "Contains pills used to treat genetic abnormalities."
|
||||
|
||||
/obj/item/storage/pill_bottle/mutadone/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/mutadone(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/mannitol
|
||||
name = "bottle of mannitol pills"
|
||||
desc = "Contains pills used to treat brain damage."
|
||||
|
||||
/obj/item/storage/pill_bottle/mannitol/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/mannitol(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/stimulant
|
||||
name = "bottle of stimulant pills"
|
||||
desc = "Guaranteed to give you that extra burst of energy during a long shift!"
|
||||
|
||||
/obj/item/storage/pill_bottle/stimulant/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/stimulant(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/mining
|
||||
name = "bottle of patches"
|
||||
desc = "Contains patches used to treat brute and burn damage."
|
||||
|
||||
/obj/item/storage/pill_bottle/mining/PopulateContents()
|
||||
new /obj/item/reagent_containers/pill/patch/silver_sulf(src)
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/reagent_containers/pill/patch/styptic(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/zoom
|
||||
name = "suspicious pill bottle"
|
||||
desc = "The label is pretty old and almost unreadable, you recognize some chemical compounds."
|
||||
|
||||
/obj/item/storage/pill_bottle/zoom/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/zoom(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/happy
|
||||
name = "suspicious pill bottle"
|
||||
desc = "There is a smiley on the top."
|
||||
|
||||
/obj/item/storage/pill_bottle/happy/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/happy(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/lsd
|
||||
name = "suspicious pill bottle"
|
||||
desc = "There is a badly drawn thing with the shape of a mushroom."
|
||||
|
||||
/obj/item/storage/pill_bottle/lsd/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/lsd(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/aranesp
|
||||
name = "suspicious pill bottle"
|
||||
desc = "The label says 'gotta go fast'."
|
||||
|
||||
/obj/item/storage/pill_bottle/aranesp/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/aranesp(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/psicodine
|
||||
name = "bottle of psicodine pills"
|
||||
desc = "Contains pills used to treat mental distress and traumas."
|
||||
|
||||
/obj/item/storage/pill_bottle/psicodine/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/psicodine(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/happiness
|
||||
name = "happiness pill bottle"
|
||||
desc = "The label is long gone, in its place an 'H' written with a marker."
|
||||
|
||||
/obj/item/storage/pill_bottle/happiness/PopulateContents()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/pill/happiness(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/antirad_plus
|
||||
name = "anti radiation deluxe pill bottle"
|
||||
desc = "The label says 'Med-Co branded pills'."
|
||||
|
||||
/obj/item/storage/pill_bottle/antirad_plus/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/antirad_plus(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/mutarad
|
||||
name = "radiation treatment deluxe pill bottle"
|
||||
desc = "The label says 'Med-Co branded pills' and below that 'Contains Mutadone in each pill!`."
|
||||
|
||||
/obj/item/storage/pill_bottle/mutarad/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/mutarad(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/penis_enlargement
|
||||
name = "penis enlargement pills"
|
||||
desc = "You want penis enlargement pills?"
|
||||
|
||||
/obj/item/storage/pill_bottle/penis_enlargement/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/penis_enlargement(src)
|
||||
|
||||
/obj/item/storage/pill_bottle/breast_enlargement
|
||||
name = "breast enlargement pills"
|
||||
desc = "Made by Fermichem - They have a woman with breasts larger than she is on them. The warming states not to take more than 10u at a time."
|
||||
|
||||
/obj/item/storage/pill_bottle/breast_enlargement/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/pill/breast_enlargement(src)
|
||||
|
||||
/////////////
|
||||
//Organ Box//
|
||||
/////////////
|
||||
|
||||
/obj/item/storage/belt/organbox
|
||||
name = "Organ Storge"
|
||||
desc = "A compact box that helps hold massive amounts of implants, organs, and some tools. Has a belt clip for easy carrying"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
icon = 'icons/obj/mysterybox.dmi'
|
||||
icon_state = "organbox_open"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
|
||||
throw_speed = 1
|
||||
throw_range = 1
|
||||
|
||||
/obj/item/storage/belt/organbox/ComponentInitialize()
|
||||
. = ..()
|
||||
GET_COMPONENT(STR, /datum/component/storage)
|
||||
STR.max_items = 16
|
||||
STR.max_w_class = WEIGHT_CLASS_BULKY
|
||||
STR.max_combined_w_class = 20
|
||||
STR.can_hold = typecacheof(list(
|
||||
/obj/item/storage/pill_bottle,
|
||||
/obj/item/reagent_containers/hypospray,
|
||||
/obj/item/healthanalyzer,
|
||||
/obj/item/reagent_containers/syringe,
|
||||
/obj/item/clothing/glasses/hud/health,
|
||||
/obj/item/hemostat,
|
||||
/obj/item/scalpel,
|
||||
/obj/item/retractor,
|
||||
/obj/item/cautery,
|
||||
/obj/item/surgical_drapes,
|
||||
/obj/item/autosurgeon,
|
||||
/obj/item/organ,
|
||||
/obj/item/implant,
|
||||
/obj/item/implantpad,
|
||||
/obj/item/implantcase,
|
||||
/obj/item/implanter,
|
||||
/obj/item/circuitboard/computer/operating,
|
||||
/obj/item/stack/sheet/mineral/silver,
|
||||
/obj/item/organ_storage
|
||||
))
|
||||
|
||||
|
||||
@@ -48,14 +48,16 @@
|
||||
to_chat(user, "<span class='danger'>It's locked!</span>")
|
||||
|
||||
/obj/item/storage/lockbox/emag_act(mob/user)
|
||||
if(!broken)
|
||||
broken = TRUE
|
||||
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE)
|
||||
desc += "It appears to be broken."
|
||||
icon_state = src.icon_broken
|
||||
if(user)
|
||||
visible_message("<span class='warning'>\The [src] has been broken by [user] with an electromagnetic card!</span>")
|
||||
return
|
||||
. = ..()
|
||||
if(broken)
|
||||
return
|
||||
broken = TRUE
|
||||
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE)
|
||||
desc += "It appears to be broken."
|
||||
icon_state = src.icon_broken
|
||||
if(user)
|
||||
visible_message("<span class='warning'>\The [src] has been broken by [user] with an electromagnetic card!</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/item/storage/lockbox/Entered()
|
||||
. = ..()
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
AddComponent(component_type)
|
||||
|
||||
/obj/item/storage/AllowDrop()
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/obj/item/storage/contents_explosion(severity, target)
|
||||
for(var/atom/A in contents)
|
||||
|
||||
@@ -19,6 +19,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
|
||||
var/latches = "single_latch"
|
||||
var/has_latches = TRUE
|
||||
var/can_rubberify = TRUE
|
||||
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE //very protecc too
|
||||
|
||||
/obj/item/storage/toolbox/Initialize(mapload)
|
||||
. = ..()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/item/storage/box/syndicate
|
||||
|
||||
/obj/item/storage/box/syndicate/PopulateContents()
|
||||
switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1)))
|
||||
switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "baseball" = 1, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1)))
|
||||
if("bloodyspai") // 30 tc now this is more right
|
||||
new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set
|
||||
new /obj/item/clothing/mask/chameleon(src) // Goes with above
|
||||
@@ -52,7 +52,7 @@
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||
new /obj/item/screwdriver/power(src) //2 tc item
|
||||
|
||||
if("murder") // 35 tc now
|
||||
if("murder") // 35 tc
|
||||
new /obj/item/melee/transforming/energy/sword/saber(src)
|
||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||
new /obj/item/card/emag(src)
|
||||
@@ -62,6 +62,17 @@
|
||||
new /obj/item/clothing/glasses/phantomthief/syndicate(src)
|
||||
new /obj/item/reagent_containers/syringe/stimulants(src)
|
||||
|
||||
if("baseball") // 42~ tc
|
||||
new /obj/item/melee/baseball_bat/ablative/syndi(src) //Lets say 12 tc, lesser sleeping carp
|
||||
new /obj/item/clothing/glasses/sunglasses/garb(src) //Lets say 2 tc
|
||||
new /obj/item/card/emag(src) //6 tc
|
||||
new /obj/item/clothing/shoes/sneakers/noslip(src) //2tc
|
||||
new /obj/item/encryptionkey/syndicate(src) //1tc
|
||||
new /obj/item/autosurgeon/anti_drop(src) //Lets just say 7~
|
||||
new /obj/item/clothing/under/syndicate/baseball(src) //3tc
|
||||
new /obj/item/clothing/head/soft/baseball(src) //Lets say 4 tc
|
||||
new /obj/item/reagent_containers/hypospray/medipen/stimulants/baseball(src) //lets say 5tc
|
||||
|
||||
if("implant") // 67+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it?
|
||||
new /obj/item/implanter/freedom(src)
|
||||
new /obj/item/implanter/uplink/precharged(src)
|
||||
@@ -132,7 +143,7 @@
|
||||
new /obj/item/card/emag(src) // 6 tc
|
||||
|
||||
if("ninja") // 40~ tc worth
|
||||
new /obj/item/katana(src) // Unique , basicly a better esword. 10 tc?
|
||||
new /obj/item/katana(src) // Unique , basicly a better esword. 10 tc?
|
||||
new /obj/item/implanter/adrenalin(src) // 8 tc
|
||||
new /obj/item/throwing_star(src) // ~5 tc for all 6
|
||||
new /obj/item/throwing_star(src)
|
||||
@@ -294,6 +305,7 @@
|
||||
new /obj/item/radio/headset/chameleon(src)
|
||||
new /obj/item/stamp/chameleon(src)
|
||||
new /obj/item/pda/chameleon(src)
|
||||
new /obj/item/clothing/neck/cloak/chameleon(src)
|
||||
|
||||
//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars.
|
||||
//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance)
|
||||
|
||||
@@ -36,7 +36,8 @@
|
||||
/obj/item/reagent_containers/syringe,
|
||||
/obj/item/screwdriver,
|
||||
/obj/item/valentine,
|
||||
/obj/item/stamp))
|
||||
/obj/item/stamp,
|
||||
/obj/item/key))
|
||||
|
||||
/obj/item/storage/wallet/Exited(atom/movable/AM)
|
||||
. = ..()
|
||||
@@ -60,7 +61,7 @@
|
||||
/obj/item/storage/wallet/update_icon()
|
||||
var/new_state = "wallet"
|
||||
if(front_id)
|
||||
new_state = "wallet_[front_id.icon_state]"
|
||||
new_state = "wallet_id"
|
||||
if(new_state != icon_state) //avoid so many icon state changes.
|
||||
icon_state = new_state
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
toggle_internals(user)
|
||||
|
||||
/obj/item/tank/proc/toggle_internals(mob/user)
|
||||
var/mob/living/carbon/human/H = user
|
||||
var/mob/living/carbon/H = user
|
||||
if(!istype(H))
|
||||
return
|
||||
|
||||
@@ -33,13 +33,19 @@
|
||||
H.update_internals_hud_icon(0)
|
||||
else
|
||||
if(!H.getorganslot(ORGAN_SLOT_BREATHING_TUBE))
|
||||
if(!H.wear_mask)
|
||||
to_chat(H, "<span class='warning'>You need a mask!</span>")
|
||||
return
|
||||
if(H.wear_mask.mask_adjusted)
|
||||
H.wear_mask.adjustmask(H)
|
||||
if(!(H.wear_mask.clothing_flags & MASKINTERNALS))
|
||||
to_chat(H, "<span class='warning'>[H.wear_mask] can't use [src]!</span>")
|
||||
var/obj/item/clothing/check
|
||||
var/internals = FALSE
|
||||
|
||||
for(check in GET_INTERNAL_SLOTS(H))
|
||||
if(istype(check, /obj/item/clothing/mask))
|
||||
var/obj/item/clothing/mask/M = check
|
||||
if(M.mask_adjusted)
|
||||
M.adjustmask(H)
|
||||
if(CHECK_BITFIELD(check.clothing_flags, ALLOWINTERNALS))
|
||||
internals = TRUE
|
||||
|
||||
if(!internals)
|
||||
to_chat(H, "<span class='warning'>You are not wearing an internals mask!</span>")
|
||||
return
|
||||
|
||||
if(H.internal)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
. = ..()
|
||||
if(!. || !istype(M) || M.anchored)
|
||||
return
|
||||
do_teleport(M, get_turf(M), 15)
|
||||
do_teleport(M, get_turf(M), 15, channel = TELEPORT_CHANNEL_BLUESPACE)
|
||||
|
||||
/obj/item/melee/baton/cattleprod/teleprod/clowning_around(mob/living/user)
|
||||
user.visible_message("<span class='danger'>[user] accidentally hits [user.p_them()]self with [src]!</span>", \
|
||||
@@ -18,7 +18,7 @@
|
||||
SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK)
|
||||
user.Knockdown(stunforce*3)
|
||||
playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1)
|
||||
if(do_teleport(user, get_turf(user), 50))
|
||||
if(do_teleport(user, get_turf(user), 50, channel = TELEPORT_CHANNEL_BLUESPACE))
|
||||
deductcharge(hitcost)
|
||||
else
|
||||
deductcharge(hitcost * 0.25)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
name = "brass crowbar"
|
||||
desc = "A brass crowbar. It feels faintly warm to the touch."
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "crowbar_brass"
|
||||
icon_state = "crowbar_clock"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/crowbar/bronze
|
||||
@@ -90,4 +90,12 @@
|
||||
var/obj/item/wirecutters/power/cutjaws = new /obj/item/wirecutters/power(drop_location())
|
||||
to_chat(user, "<span class='notice'>You attach the cutting jaws to [src].</span>")
|
||||
qdel(src)
|
||||
user.put_in_active_hand(cutjaws)
|
||||
user.put_in_active_hand(cutjaws)
|
||||
|
||||
/obj/item/crowbar/advanced
|
||||
name = "advanced crowbar"
|
||||
desc = "A scientist's almost successful reproduction of an abductor's crowbar, it uses the same technology combined with a handle that can't quite hold it."
|
||||
icon = 'icons/obj/advancedtools.dmi'
|
||||
usesound = 'sound/weapons/sonic_jackhammer.ogg'
|
||||
icon_state = "crowbar"
|
||||
toolspeed = 0.2
|
||||
@@ -81,7 +81,7 @@
|
||||
name = "brass screwdriver"
|
||||
desc = "A screwdriver made of brass. The handle feels freezing cold."
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "screwdriver_brass"
|
||||
icon_state = "screwdriver_clock"
|
||||
item_state = "screwdriver_brass"
|
||||
toolspeed = 0.5
|
||||
random_color = FALSE
|
||||
@@ -141,4 +141,14 @@
|
||||
name = "powered screwdriver"
|
||||
desc = "An electrical screwdriver, designed to be both precise and quick."
|
||||
usesound = 'sound/items/drill_use.ogg'
|
||||
toolspeed = 0.5
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/screwdriver/advanced
|
||||
name = "advanced screwdriver"
|
||||
desc = "A classy silver screwdriver with an alien alloy tip, it works almost as well as the real thing."
|
||||
icon = 'icons/obj/advancedtools.dmi'
|
||||
icon_state = "screwdriver_a"
|
||||
item_state = "screwdriver_nuke"
|
||||
usesound = 'sound/items/pshoom.ogg'
|
||||
toolspeed = 0.2
|
||||
random_color = FALSE
|
||||
@@ -360,7 +360,7 @@
|
||||
name = "brass welding tool"
|
||||
desc = "A brass welder that seems to constantly refuel itself. It is faintly warm to the touch."
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "brasswelder"
|
||||
icon_state = "clockwelder"
|
||||
item_state = "brasswelder"
|
||||
|
||||
/obj/item/weldingtool/bronze
|
||||
@@ -377,4 +377,18 @@
|
||||
nextrefueltick = world.time + 10
|
||||
reagents.add_reagent("welding_fuel", 1)
|
||||
|
||||
/obj/item/weldingtool/advanced
|
||||
name = "advanced welding tool"
|
||||
desc = "A modern welding tool combined with an alien welding tool, it never runs out of fuel and works almost as fast."
|
||||
icon = 'icons/obj/advancedtools.dmi'
|
||||
icon_state = "welder"
|
||||
toolspeed = 0.2
|
||||
light_intensity = 0
|
||||
change_icons = 0
|
||||
|
||||
/obj/item/weldingtool/advanced/process()
|
||||
if(get_fuel() <= max_fuel)
|
||||
reagents.add_reagent("welding_fuel", 1)
|
||||
..()
|
||||
|
||||
#undef WELDER_FUEL_BURN_INTERVAL
|
||||
|
||||
@@ -63,9 +63,9 @@
|
||||
|
||||
/obj/item/wirecutters/brass
|
||||
name = "brass wirecutters"
|
||||
desc = "A pair of wirecutters made of brass. The handle feels freezing cold to the touch."
|
||||
desc = "A pair of eloquent wirecutters made of brass. The handle feels freezing cold to the touch."
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "cutters_brass"
|
||||
icon_state = "cutters_clock"
|
||||
random_color = FALSE
|
||||
toolspeed = 0.5
|
||||
|
||||
@@ -82,7 +82,6 @@
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "cutters"
|
||||
toolspeed = 0.1
|
||||
|
||||
random_color = FALSE
|
||||
|
||||
/obj/item/wirecutters/cyborg
|
||||
@@ -126,3 +125,11 @@
|
||||
return
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/wirecutters/advanced
|
||||
name = "advanced wirecutters"
|
||||
desc = "A set of reproduction alien wirecutters, they have a silver handle with an exceedingly sharp blade."
|
||||
icon = 'icons/obj/advancedtools.dmi'
|
||||
icon_state = "cutters"
|
||||
toolspeed = 0.2
|
||||
random_color = FALSE
|
||||
@@ -32,7 +32,7 @@
|
||||
name = "brass wrench"
|
||||
desc = "A brass wrench. It's faintly warm to the touch."
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
icon_state = "wrench_brass"
|
||||
icon_state = "wrench_clock"
|
||||
toolspeed = 0.5
|
||||
|
||||
/obj/item/wrench/bronze
|
||||
@@ -112,4 +112,12 @@
|
||||
|
||||
user.dust()
|
||||
|
||||
return OXYLOSS
|
||||
return OXYLOSS
|
||||
|
||||
/obj/item/wrench/advanced
|
||||
name = "advanced wrench"
|
||||
desc = "A wrench that uses the same magnetic technology that abductor tools use, but slightly more ineffeciently."
|
||||
icon = 'icons/obj/advancedtools.dmi'
|
||||
icon_state = "wrench"
|
||||
usesound = 'sound/effects/empulse.ogg'
|
||||
toolspeed = 0.2
|
||||
@@ -30,6 +30,7 @@
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
force = 0
|
||||
total_mass = TOTAL_MASS_TINY_ITEM
|
||||
|
||||
|
||||
/*
|
||||
@@ -112,10 +113,6 @@
|
||||
/obj/item/toy/syndicateballoon
|
||||
name = "syndicate balloon"
|
||||
desc = "There is a tag on the back that reads \"FUK NT!11!\"."
|
||||
throwforce = 0
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
force = 0
|
||||
icon = 'icons/obj/items_and_weapons.dmi'
|
||||
icon_state = "syndballoon"
|
||||
item_state = "syndballoon"
|
||||
@@ -225,6 +222,8 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
attack_verb = list("attacked", "struck", "hit")
|
||||
var/hacked = FALSE
|
||||
total_mass = 0.4
|
||||
var/total_mass_on = TOTAL_MASS_TOY_SWORD
|
||||
|
||||
/obj/item/toy/sword/attack_self(mob/user)
|
||||
active = !( active )
|
||||
@@ -274,6 +273,9 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/sword/getweight()
|
||||
return (active ? total_mass_on : total_mass) || w_class *1.25
|
||||
|
||||
/*
|
||||
* Foam armblade
|
||||
*/
|
||||
@@ -327,12 +329,13 @@
|
||||
force_unwielded = 0
|
||||
force_wielded = 0
|
||||
attack_verb = list("attacked", "struck", "hit")
|
||||
total_mass_on = TOTAL_MASS_TOY_SWORD
|
||||
|
||||
/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
|
||||
return FALSE
|
||||
|
||||
/obj/item/twohanded/dualsaber/toy/IsReflect()//Stops Toy Dualsabers from reflecting energy projectiles
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
/obj/item/toy/katana
|
||||
name = "replica katana"
|
||||
@@ -346,6 +349,7 @@
|
||||
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
|
||||
force = 5
|
||||
throwforce = 5
|
||||
total_mass = null
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
|
||||
@@ -44,6 +44,10 @@
|
||||
icon_state = "plate"
|
||||
resistance_flags = NONE
|
||||
|
||||
/obj/item/trash/plate/alt
|
||||
desc = "Still some dip left. Sadly still just trash..."
|
||||
icon_state = "plate1"
|
||||
|
||||
/obj/item/trash/pistachios
|
||||
name = "pistachios pack"
|
||||
icon_state = "pistachios_pack"
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
var/force_wielded = 0
|
||||
var/wieldsound = null
|
||||
var/unwieldsound = null
|
||||
var/slowdown_wielded = 0
|
||||
item_flags = SLOWS_WHILE_IN_HAND
|
||||
|
||||
/obj/item/twohanded/proc/unwield(mob/living/carbon/user, show_message = TRUE)
|
||||
if(!wielded || !user)
|
||||
@@ -55,7 +57,7 @@
|
||||
var/obj/item/twohanded/offhand/O = user.get_inactive_held_item()
|
||||
if(O && istype(O))
|
||||
O.unwield()
|
||||
return
|
||||
slowdown -= slowdown_wielded
|
||||
|
||||
/obj/item/twohanded/proc/wield(mob/living/carbon/user)
|
||||
if(wielded)
|
||||
@@ -85,7 +87,7 @@
|
||||
O.desc = "Your second grip on [src]."
|
||||
O.wielded = TRUE
|
||||
user.put_in_inactive_hand(O)
|
||||
return
|
||||
slowdown += slowdown_wielded
|
||||
|
||||
/obj/item/twohanded/dropped(mob/user)
|
||||
. = ..()
|
||||
@@ -279,6 +281,7 @@
|
||||
wieldsound = 'sound/weapons/saberon.ogg'
|
||||
unwieldsound = 'sound/weapons/saberoff.ogg'
|
||||
hitsound = "swing_hit"
|
||||
var/hitsound_on = 'sound/weapons/blade1.ogg'
|
||||
armour_penetration = 35
|
||||
item_color = "green"
|
||||
light_color = "#00ff00"//green
|
||||
@@ -290,8 +293,10 @@
|
||||
var/hacked = FALSE
|
||||
var/brightness_on = 6 //TWICE AS BRIGHT AS A REGULAR ESWORD
|
||||
var/list/possible_colors = list("red", "blue", "green", "purple")
|
||||
total_mass = 0.375 //Survival flashlights typically weigh around 5 ounces.
|
||||
var/total_mass_on = 3.4 //The typical medieval sword, on the other hand, weighs roughly 3 pounds. //Values copied from the regular e-sword
|
||||
var/list/rainbow_colors = list(LIGHT_COLOR_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER)
|
||||
var/spinnable = TRUE
|
||||
total_mass = 0.4 //Survival flashlights typically weigh around 5 ounces.
|
||||
var/total_mass_on = 3.4
|
||||
|
||||
/obj/item/twohanded/dualsaber/suicide_act(mob/living/carbon/user)
|
||||
if(wielded)
|
||||
@@ -353,7 +358,7 @@
|
||||
if(HAS_TRAIT(user, TRAIT_CLUMSY) && (wielded) && prob(40))
|
||||
impale(user)
|
||||
return
|
||||
if((wielded) && prob(50))
|
||||
if(spinnable && (wielded) && prob(50))
|
||||
INVOKE_ASYNC(src, .proc/jedi_spin, user)
|
||||
|
||||
/obj/item/twohanded/dualsaber/proc/jedi_spin(mob/living/user)
|
||||
@@ -406,11 +411,14 @@
|
||||
/obj/item/twohanded/dualsaber/process()
|
||||
if(wielded)
|
||||
if(hacked)
|
||||
light_color = pick(LIGHT_COLOR_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER)
|
||||
rainbow_process()
|
||||
open_flame()
|
||||
else
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/obj/item/twohanded/dualsaber/proc/rainbow_process()
|
||||
light_color = pick(rainbow_colors)
|
||||
|
||||
/obj/item/twohanded/dualsaber/IsReflect()
|
||||
if(wielded)
|
||||
return 1
|
||||
@@ -428,7 +436,8 @@
|
||||
playsound(loc, hitsound, get_clamped_volume(), 1, -1)
|
||||
add_fingerprint(user)
|
||||
// Light your candles while spinning around the room
|
||||
INVOKE_ASYNC(src, .proc/jedi_spin, user)
|
||||
if(spinnable)
|
||||
INVOKE_ASYNC(src, .proc/jedi_spin, user)
|
||||
|
||||
/obj/item/twohanded/dualsaber/green
|
||||
possible_colors = list("green")
|
||||
@@ -478,6 +487,7 @@
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30)
|
||||
var/obj/item/grenade/explosive = null
|
||||
var/war_cry = "AAAAARGH!!!"
|
||||
var/icon_prefix = "spearglass"
|
||||
|
||||
/obj/item/twohanded/spear/Initialize()
|
||||
. = ..()
|
||||
@@ -520,7 +530,7 @@
|
||||
if(explosive)
|
||||
icon_state = "spearbomb[wielded]"
|
||||
else
|
||||
icon_state = "spearglass[wielded]"
|
||||
icon_state = "[icon_prefix][wielded]"
|
||||
|
||||
/obj/item/twohanded/spear/afterattack(atom/movable/AM, mob/user, proximity)
|
||||
. = ..()
|
||||
@@ -547,6 +557,13 @@
|
||||
src.war_cry = input
|
||||
|
||||
/obj/item/twohanded/spear/CheckParts(list/parts_list)
|
||||
var/obj/item/shard/tip = locate() in parts_list
|
||||
if (istype(tip, /obj/item/shard/plasma))
|
||||
force_wielded = 19
|
||||
force_unwielded = 11
|
||||
throwforce = 21
|
||||
icon_prefix = "spearplasma"
|
||||
qdel(tip)
|
||||
var/obj/item/twohanded/spear/S = locate() in parts_list
|
||||
if(S)
|
||||
if(S.explosive)
|
||||
|
||||
@@ -69,6 +69,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
max_integrity = 200
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
|
||||
|
||||
/obj/item/claymore/Initialize()
|
||||
. = ..()
|
||||
@@ -223,11 +224,12 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
max_integrity = 200
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
|
||||
|
||||
/obj/item/katana/cursed
|
||||
slot_flags = null
|
||||
|
||||
/obj/item/katana/Initialize()
|
||||
/obj/item/katana/cursed/Initialize()
|
||||
. = ..()
|
||||
ADD_TRAIT(src, TRAIT_NODROP, CURSED_ITEM_TRAIT)
|
||||
|
||||
@@ -253,7 +255,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
var/obj/item/twohanded/spear/S = new /obj/item/twohanded/spear
|
||||
|
||||
remove_item_from_storage(user)
|
||||
qdel(I)
|
||||
if (!user.transferItemToLoc(I, S))
|
||||
return
|
||||
S.CheckParts(list(I))
|
||||
qdel(src)
|
||||
|
||||
user.put_in_hands(S)
|
||||
@@ -431,6 +435,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
sharpness = IS_SHARP
|
||||
attack_verb = list("sawed", "torn", "cut", "chopped", "diced")
|
||||
hitsound = 'sound/weapons/chainsawhit.ogg'
|
||||
total_mass = TOTAL_MASS_HAND_REPLACEMENT
|
||||
|
||||
/obj/item/mounted_chainsaw/Initialize()
|
||||
. = ..()
|
||||
@@ -510,6 +515,19 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
var/homerun_able = 0
|
||||
total_mass = 2.7 //a regular wooden major league baseball bat weighs somewhere between 2 to 3.4 pounds, according to google
|
||||
|
||||
/obj/item/melee/baseball_bat/chaplain
|
||||
name = "blessed baseball bat"
|
||||
desc = "There ain't a cult in the league that can withstand a swatter."
|
||||
force = 14
|
||||
throwforce = 14
|
||||
obj_flags = UNIQUE_RENAME
|
||||
var/chaplain_spawnable = TRUE
|
||||
total_mass = TOTAL_MASS_MEDIEVAL_WEAPON
|
||||
|
||||
/obj/item/melee/baseball_bat/chaplain/Initialize()
|
||||
. = ..()
|
||||
AddComponent(/datum/component/anti_magic, TRUE, TRUE)
|
||||
|
||||
/obj/item/melee/baseball_bat/homerun
|
||||
name = "home run bat"
|
||||
desc = "This thing looks dangerous... Dangerously good at baseball, that is."
|
||||
@@ -560,6 +578,12 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, 1)
|
||||
return 1
|
||||
|
||||
/obj/item/melee/baseball_bat/ablative/syndi
|
||||
name = "syndicate major league bat"
|
||||
desc = "A metal bat made by the syndicate for the major league team."
|
||||
force = 18 //Spear damage...
|
||||
throwforce = 30
|
||||
|
||||
/obj/item/melee/flyswatter
|
||||
name = "flyswatter"
|
||||
desc = "Useful for killing insects of all sizes."
|
||||
|
||||
Reference in New Issue
Block a user