mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 19:47:22 +01:00
Merge remote-tracking branch 'upstream/master' into zombies
This commit is contained in:
@@ -65,8 +65,8 @@
|
||||
|
||||
|
||||
/obj/item/areaeditor/permit/create_area()
|
||||
..()
|
||||
qdel(src)
|
||||
if(..())
|
||||
qdel(src)
|
||||
|
||||
//free golem blueprints, like permit but can claim as much as needed
|
||||
|
||||
@@ -186,25 +186,26 @@
|
||||
|
||||
|
||||
/obj/item/areaeditor/proc/create_area()
|
||||
var/area_created = FALSE
|
||||
var/res = detect_room(get_turf(usr))
|
||||
if(!istype(res,/list))
|
||||
switch(res)
|
||||
if(ROOM_ERR_SPACE)
|
||||
to_chat(usr, "<span class='warning'>The new area must be completely airtight.</span>")
|
||||
return
|
||||
return area_created
|
||||
if(ROOM_ERR_TOOLARGE)
|
||||
to_chat(usr, "<span class='warning'>The new area is too large.</span>")
|
||||
return
|
||||
return area_created
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>Error! Please notify administration.</span>")
|
||||
return
|
||||
return area_created
|
||||
var/list/turf/turfs = res
|
||||
var/str = trim(stripped_input(usr,"New area name:", "Blueprint Editing", "", MAX_NAME_LEN))
|
||||
if(!str || !length(str)) //cancel
|
||||
return
|
||||
return area_created
|
||||
if(length(str) > 50)
|
||||
to_chat(usr, "<span class='warning'>The given name is too long. The area remains undefined.</span>")
|
||||
return
|
||||
return area_created
|
||||
var/area/A = new
|
||||
A.name = str
|
||||
A.power_equip = FALSE
|
||||
@@ -220,7 +221,8 @@
|
||||
thing.change_area(old_area, A)
|
||||
|
||||
interact()
|
||||
return
|
||||
area_created = TRUE
|
||||
return area_created
|
||||
|
||||
/obj/item/areaeditor/proc/edit_area()
|
||||
var/area/A = get_area()
|
||||
|
||||
@@ -22,6 +22,10 @@
|
||||
owned = 0
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/carpplushie/dehy_carp/water_act(volume, temperature, source, method = TOUCH)
|
||||
. = ..()
|
||||
if(volume >= 1)
|
||||
Swell()
|
||||
|
||||
/obj/item/toy/carpplushie/dehy_carp/afterattack(obj/O, mob/user,proximity)
|
||||
if(!proximity) return
|
||||
|
||||
@@ -292,10 +292,10 @@
|
||||
color = null
|
||||
|
||||
/obj/item/flashlight/flare/glowstick/random/Initialize()
|
||||
..()
|
||||
. = ..()
|
||||
var/T = pick(typesof(/obj/item/flashlight/flare/glowstick) - /obj/item/flashlight/flare/glowstick/random - /obj/item/flashlight/flare/glowstick/emergency)
|
||||
new T(loc)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
qdel(src) // return INITIALIZE_HINT_QDEL <-- Doesn't work
|
||||
|
||||
/obj/item/flashlight/flare/extinguish_light()
|
||||
visible_message("<span class='danger'>[src] dims slightly before scattering the shadows around it.</span>")
|
||||
|
||||
@@ -591,6 +591,9 @@ REAGENT SCANNER
|
||||
var/scan_time = 10 SECONDS //how long does it take to scan
|
||||
var/scan_cd = 60 SECONDS //how long before we can scan again
|
||||
|
||||
/obj/item/bodyanalyzer/get_cell()
|
||||
return power_supply
|
||||
|
||||
/obj/item/bodyanalyzer/advanced
|
||||
cell_type = /obj/item/stock_parts/cell/upgraded/plus
|
||||
|
||||
|
||||
@@ -39,6 +39,9 @@
|
||||
var/poison_dose = 20
|
||||
var/poison_total = 60
|
||||
|
||||
/obj/item/documents/syndicate/mining
|
||||
desc = "\"Top Secret\" documents detailing Syndicate plasma mining operations."
|
||||
|
||||
/obj/item/documents/syndicate/yellow/trapped/pickup(user)
|
||||
if(ishuman(user) && poison_total > 0)
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
@@ -31,31 +31,9 @@
|
||||
if(..())
|
||||
return
|
||||
|
||||
R.notify_ai(2)
|
||||
R.reset_module()
|
||||
|
||||
R.uneq_all()
|
||||
R.sight_mode = null
|
||||
R.hands.icon_state = "nomod"
|
||||
R.icon_state = "robot"
|
||||
R.module.remove_subsystems_and_actions(R)
|
||||
QDEL_NULL(R.module)
|
||||
|
||||
R.camera.network.Remove(list("Engineering", "Medical", "Mining Outpost"))
|
||||
R.rename_character(R.real_name, R.get_default_name("Default"))
|
||||
R.languages = list()
|
||||
R.speech_synthesizer_langs = list()
|
||||
|
||||
R.update_icons()
|
||||
R.update_headlamp()
|
||||
|
||||
R.speed = 0 // Remove upgrades.
|
||||
R.ionpulse = 0
|
||||
R.magpulse = 0
|
||||
R.add_language("Robot Talk", 1)
|
||||
|
||||
R.status_flags |= CANPUSH
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/borg/upgrade/rename
|
||||
name = "cyborg reclassification board"
|
||||
|
||||
@@ -25,6 +25,15 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
|
||||
/obj/item/stack/rods/cyborg
|
||||
materials = list()
|
||||
|
||||
/obj/item/stack/rods/ten
|
||||
amount = 10
|
||||
|
||||
/obj/item/stack/rods/twentyfive
|
||||
amount = 25
|
||||
|
||||
/obj/item/stack/rods/fifty
|
||||
amount = 50
|
||||
|
||||
/obj/item/stack/rods/New(loc, amount=null)
|
||||
..()
|
||||
recipes = rod_recipes
|
||||
|
||||
@@ -32,6 +32,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \
|
||||
created_window = /obj/structure/window/basic
|
||||
full_window = /obj/structure/window/full/basic
|
||||
merge_type = /obj/item/stack/sheet/glass
|
||||
point_value = 1
|
||||
|
||||
/obj/item/stack/sheet/glass/fifty
|
||||
amount = 50
|
||||
@@ -90,6 +91,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \
|
||||
created_window = /obj/structure/window/reinforced
|
||||
full_window = /obj/structure/window/full/reinforced
|
||||
merge_type = /obj/item/stack/sheet/rglass
|
||||
point_value = 4
|
||||
|
||||
/obj/item/stack/sheet/rglass/cyborg
|
||||
materials = list()
|
||||
@@ -113,6 +115,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \
|
||||
origin_tech = "plasmatech=2;materials=2"
|
||||
created_window = /obj/structure/window/plasmabasic
|
||||
full_window = /obj/structure/window/full/plasmabasic
|
||||
point_value = 19
|
||||
|
||||
/obj/item/stack/sheet/plasmaglass/New(loc, amount)
|
||||
recipes = GLOB.pglass_recipes
|
||||
@@ -154,6 +157,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \
|
||||
created_window = /obj/structure/window/plasmareinforced
|
||||
full_window = /obj/structure/window/full/plasmareinforced
|
||||
armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0)
|
||||
point_value = 23
|
||||
|
||||
/obj/item/stack/sheet/plasmarglass/New(loc, amount)
|
||||
recipes = GLOB.prglass_recipes
|
||||
|
||||
@@ -125,6 +125,55 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \
|
||||
flags = NOBLUDGEON
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
layer = MOB_LAYER
|
||||
var/static/list/can_strengthen_clothing
|
||||
|
||||
/obj/item/stack/sheet/animalhide/goliath_hide/Initialize(mapload)
|
||||
. = ..()
|
||||
if(!can_strengthen_clothing)
|
||||
can_strengthen_clothing = typecacheof(list(
|
||||
/obj/item/clothing/suit/space/hardsuit/mining,
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/mining,
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/miner,
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/miner,
|
||||
/obj/item/clothing/suit/hooded/explorer,
|
||||
/obj/item/clothing/head/hooded/explorer,
|
||||
/obj/item/clothing/suit/space/eva/plasmaman/explorer,
|
||||
/obj/item/clothing/head/helmet/space/eva/plasmaman/explorer
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/animalhide/goliath_hide/afterattack(atom/target, mob/user, proximity_flag)
|
||||
if(proximity_flag)
|
||||
if(is_type_in_typecache(target, can_strengthen_clothing))
|
||||
var/obj/item/clothing/C = target
|
||||
var/current_armor = C.armor
|
||||
if(current_armor["melee"] < 60)
|
||||
current_armor["melee"] = min(current_armor["melee"] + 10, 60)
|
||||
to_chat(user, "<span class='info'>You strengthen [target], improving its resistance against melee attacks.</span>")
|
||||
use(1)
|
||||
else
|
||||
to_chat(user, "<span class='info'>You can't improve [C] any further.</span>")
|
||||
return
|
||||
if(istype(target, /obj/mecha/working/ripley))
|
||||
var/obj/mecha/D = target
|
||||
if(D.icon_state != "ripley-open")
|
||||
to_chat(user, "<span class='info'>You can't add armour onto the mech while someone is inside!</span>")
|
||||
return
|
||||
var/list/damage_absorption = D.damage_absorption
|
||||
if(damage_absorption["brute"] > 0.3)
|
||||
damage_absorption["brute"] = max(damage_absorption["brute"] - 0.1, 0.3)
|
||||
damage_absorption["bullet"] = damage_absorption["bullet"] - 0.05
|
||||
damage_absorption["fire"] = damage_absorption["fire"] - 0.05
|
||||
damage_absorption["laser"] = damage_absorption["laser"] - 0.025
|
||||
to_chat(user, "<span class='info'>You strengthen [target], improving its resistance against melee attacks.</span>")
|
||||
use(1)
|
||||
D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-open")
|
||||
D.desc = "Autonomous Power Loader Unit. Its armour is enhanced with some goliath hide plates."
|
||||
if(damage_absorption["brute"] == 0.3)
|
||||
D.overlays += image("icon"="mecha.dmi", "icon_state"="ripley-g-full-open")
|
||||
D.desc = "Autonomous Power Loader Unit. It's wearing a fearsome carapace entirely composed of goliath hide plates - the pilot must be an experienced monster hunter."
|
||||
else
|
||||
to_chat(user, "<span class='warning'>You can't improve [D] any further!</span>")
|
||||
return
|
||||
|
||||
/obj/item/stack/sheet/animalhide/ashdrake
|
||||
name = "ash drake hide"
|
||||
@@ -156,7 +205,12 @@ var/global/list/datum/stack_recipe/sinew_recipes = list ( \
|
||||
else
|
||||
..()
|
||||
|
||||
//Step two - washing..... it's actually in washing machine code.
|
||||
//Step two - washing (also handled by water reagent code and washing machine code)
|
||||
/obj/item/stack/sheet/hairlesshide/water_act(volume, temperature, source, method = TOUCH)
|
||||
. = ..()
|
||||
if(volume >= 10)
|
||||
new /obj/item/stack/sheet/wetleather(get_turf(src), amount)
|
||||
qdel(src)
|
||||
|
||||
//Step three - drying
|
||||
/obj/item/stack/sheet/wetleather/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
|
||||
@@ -108,6 +108,11 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount = 1, res_amount = 1), \
|
||||
)
|
||||
|
||||
var/global/list/datum/stack_recipe/snow_recipes = list(
|
||||
new/datum/stack_recipe("snowman", /obj/structure/snowman, 5, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("Snowball", /obj/item/snowball, 1)
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/mineral
|
||||
force = 5
|
||||
throwforce = 5
|
||||
@@ -139,6 +144,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
origin_tech = "materials=6"
|
||||
sheettype = "diamond"
|
||||
materials = list(MAT_DIAMOND=MINERAL_MATERIAL_AMOUNT)
|
||||
point_value = 25
|
||||
|
||||
/obj/item/stack/sheet/mineral/diamond/New()
|
||||
..()
|
||||
@@ -151,6 +157,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
origin_tech = "materials=5"
|
||||
sheettype = "uranium"
|
||||
materials = list(MAT_URANIUM=MINERAL_MATERIAL_AMOUNT)
|
||||
point_value = 20
|
||||
|
||||
/obj/item/stack/sheet/mineral/uranium/New()
|
||||
..()
|
||||
@@ -165,6 +172,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
materials = list(MAT_PLASMA=MINERAL_MATERIAL_AMOUNT)
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 5
|
||||
point_value = 20
|
||||
|
||||
/obj/item/stack/sheet/mineral/plasma/New()
|
||||
..()
|
||||
@@ -191,6 +199,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
origin_tech = "materials=4"
|
||||
sheettype = "gold"
|
||||
materials = list(MAT_GOLD=MINERAL_MATERIAL_AMOUNT)
|
||||
point_value = 20
|
||||
|
||||
/obj/item/stack/sheet/mineral/gold/New()
|
||||
..()
|
||||
@@ -203,6 +212,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
origin_tech = "materials=4"
|
||||
sheettype = "silver"
|
||||
materials = list(MAT_SILVER=MINERAL_MATERIAL_AMOUNT)
|
||||
point_value = 20
|
||||
|
||||
/obj/item/stack/sheet/mineral/silver/New()
|
||||
..()
|
||||
@@ -215,6 +225,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
origin_tech = "materials=4"
|
||||
sheettype = "bananium"
|
||||
materials = list(MAT_BANANIUM=MINERAL_MATERIAL_AMOUNT)
|
||||
point_value = 50
|
||||
|
||||
/obj/item/stack/sheet/mineral/bananium/New(loc, amount=null)
|
||||
..()
|
||||
@@ -228,6 +239,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
sheettype = "tranquillite"
|
||||
materials = list(MAT_TRANQUILLITE=MINERAL_MATERIAL_AMOUNT)
|
||||
wall_allowed = FALSE //no tranquilite walls in code
|
||||
point_value = 50
|
||||
|
||||
/obj/item/stack/sheet/mineral/tranquillite/New(loc, amount=null)
|
||||
..()
|
||||
@@ -248,6 +260,7 @@ var/global/list/datum/stack_recipe/adamantine_recipes = list(
|
||||
throw_range = 3
|
||||
sheettype = "titanium"
|
||||
materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT)
|
||||
point_value = 20
|
||||
|
||||
var/global/list/datum/stack_recipe/titanium_recipes = list (
|
||||
new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20),
|
||||
@@ -277,6 +290,7 @@ var/global/list/datum/stack_recipe/titanium_recipes = list (
|
||||
throw_range = 3
|
||||
sheettype = "plastitanium"
|
||||
materials = list(MAT_TITANIUM=2000, MAT_PLASMA=2000)
|
||||
point_value = 45
|
||||
|
||||
var/global/list/datum/stack_recipe/plastitanium_recipes = list (
|
||||
new/datum/stack_recipe("plas-titanium tile", /obj/item/stack/tile/mineral/plastitanium, 1, 4, 20),
|
||||
@@ -321,3 +335,19 @@ var/global/list/datum/stack_recipe/plastitanium_recipes = list (
|
||||
/obj/item/stack/sheet/mineral/adamantine/New(loc, amount = null)
|
||||
recipes = adamantine_recipes
|
||||
..()
|
||||
|
||||
/*
|
||||
* Snow
|
||||
*/
|
||||
/obj/item/stack/sheet/mineral/snow
|
||||
name = "snow"
|
||||
icon_state = "sheet-snow"
|
||||
item_state = "sheet-snow"
|
||||
singular_name = "snow block"
|
||||
force = 1
|
||||
throwforce = 2
|
||||
merge_type = /obj/item/stack/sheet/mineral/snow
|
||||
|
||||
/obj/item/stack/sheet/mineral/snow/New(loc, amount = null)
|
||||
recipes = snow_recipes
|
||||
..()
|
||||
|
||||
@@ -105,6 +105,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list(
|
||||
flags = CONDUCT
|
||||
origin_tech = "materials=1"
|
||||
merge_type = /obj/item/stack/sheet/metal
|
||||
point_value = 2
|
||||
|
||||
/obj/item/stack/sheet/metal/cyborg
|
||||
materials = list()
|
||||
@@ -151,6 +152,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list(
|
||||
flags = CONDUCT
|
||||
origin_tech = "materials=2"
|
||||
merge_type = /obj/item/stack/sheet/plasteel
|
||||
point_value = 23
|
||||
|
||||
/obj/item/stack/sheet/plasteel/New(var/loc, var/amount=null)
|
||||
recipes = plasteel_recipes
|
||||
@@ -385,8 +387,8 @@ var/global/list/datum/stack_recipe/brass_recipes = list (\
|
||||
GLOBAL_LIST_INIT(plastic_recipes, list(
|
||||
new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = 1, on_floor = 1, time = 40), \
|
||||
new /datum/stack_recipe("wet floor sign", /obj/item/caution, 2), \
|
||||
new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/food/drinks/waterbottle/empty), \
|
||||
new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/food/drinks/waterbottle/large/empty,3), \
|
||||
new /datum/stack_recipe("water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/empty), \
|
||||
new /datum/stack_recipe("large water bottle", /obj/item/reagent_containers/glass/beaker/waterbottle/large/empty,3), \
|
||||
new /datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("plastic ashtray", /obj/item/ashtray/plastic, 2, one_per_turf = 1, on_floor = 1), \
|
||||
new /datum/stack_recipe("plastic fork", /obj/item/kitchen/utensil/pfork, 1, on_floor = 1), \
|
||||
|
||||
@@ -9,22 +9,10 @@
|
||||
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed")
|
||||
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/created_window = null //apparently glass sheets don't share a base type for glass specifically, so each had to define these vars individually
|
||||
var/full_window = null //moving the var declaration to here so this can be checked cleaner until someone is willing to make them share a base type properly
|
||||
usesound = 'sound/items/deconstruct.ogg'
|
||||
toolspeed = 1
|
||||
var/wall_allowed = TRUE //determines if sheet can be used in wall construction or not.
|
||||
|
||||
|
||||
// Since the sheetsnatcher was consolidated into weapon/storage/bag we now use
|
||||
// item/attackby() properly, making this unnecessary
|
||||
|
||||
/*/obj/item/stack/sheet/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/storage/bag/sheetsnatcher))
|
||||
var/obj/item/storage/bag/sheetsnatcher/S = W
|
||||
if(!S.mode)
|
||||
S.add(src,user)
|
||||
else
|
||||
for(var/obj/item/stack/sheet/stack in locate(src.x,src.y,src.z))
|
||||
S.add(stack,user)
|
||||
..()*/
|
||||
|
||||
@@ -111,16 +111,11 @@
|
||||
|
||||
if(istype(E, /datum/stack_recipe))
|
||||
var/datum/stack_recipe/R = E
|
||||
var/max_multiplier = round(src.amount / R.req_amount)
|
||||
var/max_multiplier = round(amount / R.req_amount)
|
||||
var/title
|
||||
var/can_build = 1
|
||||
can_build = can_build && (max_multiplier > 0)
|
||||
/*
|
||||
if(R.one_per_turf)
|
||||
can_build = can_build && !(locate(R.result_type) in usr.loc)
|
||||
if(R.on_floor)
|
||||
can_build = can_build && istype(usr.loc, /turf/simulated/floor)
|
||||
*/
|
||||
|
||||
if(R.res_amount > 1)
|
||||
title += "[R.res_amount]x [R.title]\s"
|
||||
else
|
||||
@@ -131,12 +126,13 @@
|
||||
else
|
||||
t1 += "[title]"
|
||||
continue
|
||||
if(R.max_res_amount>1 && max_multiplier>1)
|
||||
if(R.max_res_amount > 1 && max_multiplier > 1)
|
||||
max_multiplier = min(max_multiplier, round(R.max_res_amount / R.res_amount))
|
||||
t1 += " |"
|
||||
var/list/multipliers = list(5,10,25)
|
||||
|
||||
var/list/multipliers = list(5, 10, 25)
|
||||
for(var/n in multipliers)
|
||||
if(max_multiplier>=n)
|
||||
if(max_multiplier >= n)
|
||||
t1 += " <A href='?src=[UID()];make=[i];multiplier=[n]'>[n * R.res_amount]x</A>"
|
||||
if(!(max_multiplier in multipliers))
|
||||
t1 += " <A href='?src=[UID()];make=[i];multiplier=[max_multiplier]'>[max_multiplier * R.res_amount]x</A>"
|
||||
@@ -165,7 +161,7 @@
|
||||
|
||||
var/datum/stack_recipe/R = recipes_list[text2num(href_list["make"])]
|
||||
var/multiplier = text2num(href_list["multiplier"])
|
||||
if(!multiplier)
|
||||
if(!multiplier || multiplier <= 0 || multiplier > 50) // Href exploit checks
|
||||
multiplier = 1
|
||||
|
||||
if(amount < R.req_amount * multiplier)
|
||||
|
||||
@@ -170,6 +170,20 @@
|
||||
icon_state = "tile_pod"
|
||||
turf_type = /turf/simulated/floor/pod
|
||||
|
||||
/obj/item/stack/tile/pod/light
|
||||
name = "light pod floor tile"
|
||||
singular_name = "light pod floor tile"
|
||||
desc = "A lightly colored grooved floor tile."
|
||||
icon_state = "tile_podlight"
|
||||
turf_type = /turf/simulated/floor/pod
|
||||
|
||||
/obj/item/stack/tile/pod/dark
|
||||
name = "dark pod floor tile"
|
||||
singular_name = "dark pod floor tile"
|
||||
desc = "A darkly colored grooved floor tile."
|
||||
icon_state = "tile_poddark"
|
||||
turf_type = /turf/simulated/floor/pod/dark
|
||||
|
||||
/obj/item/stack/tile/arcade_carpet
|
||||
name = "arcade carpet"
|
||||
singular_name = "arcade carpet"
|
||||
|
||||
@@ -1496,6 +1496,18 @@ obj/item/toy/cards/deck/syndicate/black
|
||||
else
|
||||
icon_state = "chainsaw0"
|
||||
|
||||
/*
|
||||
* Cat Toy
|
||||
*/
|
||||
/obj/item/toy/cattoy
|
||||
name = "toy mouse"
|
||||
desc = "A colorful toy mouse!"
|
||||
icon = 'icons/obj/toy.dmi'
|
||||
icon_state = "toy_mouse"
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
resistance_flags = FLAMMABLE
|
||||
var/cooldown = 0
|
||||
|
||||
/*
|
||||
* Action Figures
|
||||
*/
|
||||
|
||||
@@ -333,7 +333,7 @@ GLOBAL_LIST_INIT(rcd_door_types, list(
|
||||
return FALSE
|
||||
playsound(loc, usesound, 50, 1)
|
||||
var/turf/AT = A
|
||||
AT.ChangeTurf(/turf/space)
|
||||
AT.ChangeTurf(AT.baseturf)
|
||||
return TRUE
|
||||
return FALSE
|
||||
to_chat(user, "<span class='warning'>ERROR! Not enough matter in unit to deconstruct this floor!</span>")
|
||||
|
||||
@@ -325,6 +325,10 @@
|
||||
origin_tech = "syndicate=1"
|
||||
var/registered_user = null
|
||||
untrackable = 1
|
||||
var/anyone = FALSE //Can anyone forge the ID or just syndicate?
|
||||
|
||||
/obj/item/card/id/syndicate/anyone
|
||||
anyone = TRUE
|
||||
|
||||
/obj/item/card/id/syndicate/New()
|
||||
access = initial_access.Copy()
|
||||
@@ -344,7 +348,7 @@
|
||||
if(istype(O, /obj/item/card/id))
|
||||
var/obj/item/card/id/I = O
|
||||
if(istype(user, /mob/living) && user.mind)
|
||||
if(user.mind.special_role)
|
||||
if(user.mind.special_role || anyone)
|
||||
to_chat(usr, "<span class='notice'>The card's microscanners activate as you pass it over \the [I], copying its access.</span>")
|
||||
src.access |= I.access //Don't copy access if user isn't an antag -- to prevent metagaming
|
||||
|
||||
|
||||
@@ -31,7 +31,6 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
var/lastHolder = null
|
||||
var/smoketime = 300
|
||||
var/chem_volume = 30
|
||||
species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin", "Grey")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
origin_tech = "biotech=4"
|
||||
actions_types = list(/datum/action/item_action/toggle_paddles)
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/back.dmi'
|
||||
)
|
||||
@@ -23,6 +22,9 @@
|
||||
var/obj/item/stock_parts/cell/high/bcell = null
|
||||
var/combat = 0 //can we revive through space suits?
|
||||
|
||||
/obj/item/defibrillator/get_cell()
|
||||
return bcell
|
||||
|
||||
/obj/item/defibrillator/New() //starts without a cell for rnd
|
||||
..()
|
||||
paddles = make_paddles()
|
||||
|
||||
@@ -24,6 +24,10 @@
|
||||
if(!istype(C))
|
||||
return
|
||||
|
||||
if(flags & NODROP)
|
||||
to_chat(user, "<span class='warning'>[src] is stuck to your hand!</span>")
|
||||
return
|
||||
|
||||
if((CLUMSY in user.mutations) && prob(50) && (!ignoresClumsy))
|
||||
to_chat(user, "<span class='warning'>Uh... how do those things work?!</span>")
|
||||
apply_cuffs(user, user)
|
||||
|
||||
@@ -165,6 +165,22 @@
|
||||
origin_tech = "materials=3;combat=4"
|
||||
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut")
|
||||
|
||||
/obj/item/kitchen/knife/combat/survival
|
||||
name = "survival knife"
|
||||
icon_state = "survivalknife"
|
||||
desc = "A hunting grade survival knife."
|
||||
force = 15
|
||||
throwforce = 15
|
||||
|
||||
/obj/item/kitchen/knife/combat/survival/bone
|
||||
name = "bone dagger"
|
||||
item_state = "bone_dagger"
|
||||
icon_state = "bone_dagger"
|
||||
lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/items_righthand.dmi'
|
||||
desc = "A sharpened bone. The bare minimum in survival."
|
||||
materials = list()
|
||||
|
||||
/obj/item/kitchen/knife/combat/cyborg
|
||||
name = "cyborg knife"
|
||||
icon = 'icons/obj/items_cyborg.dmi'
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
var/active = 0
|
||||
var/force_on = 30 //force when active
|
||||
var/throwforce_on = 20
|
||||
var/faction_bonus_force = 0 //Bonus force dealt against certain factions
|
||||
var/list/nemesis_factions //Any mob with a faction that exists in this list will take bonus damage/effects
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
var/w_class_on = WEIGHT_CLASS_BULKY
|
||||
var/icon_state_on = "axe1"
|
||||
@@ -13,6 +15,19 @@
|
||||
var/brightness_on = 2
|
||||
var/colormap = list(red=LIGHT_COLOR_RED, blue=LIGHT_COLOR_LIGHTBLUE, green=LIGHT_COLOR_GREEN, purple=LIGHT_COLOR_PURPLE, rainbow=LIGHT_COLOR_WHITE)
|
||||
|
||||
/obj/item/melee/energy/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
var/nemesis_faction = FALSE
|
||||
if(LAZYLEN(nemesis_factions))
|
||||
for(var/F in target.faction)
|
||||
if(F in nemesis_factions)
|
||||
nemesis_faction = TRUE
|
||||
force += faction_bonus_force
|
||||
nemesis_effects(user, target)
|
||||
break
|
||||
. = ..()
|
||||
if(nemesis_faction)
|
||||
force -= faction_bonus_force
|
||||
|
||||
/obj/item/melee/energy/suicide_act(mob/user)
|
||||
user.visible_message(pick("<span class='suicide'>[user] is slitting [user.p_their()] stomach open with the [name]! It looks like [user.p_theyre()] trying to commit seppuku.</span>", \
|
||||
"<span class='suicide'>[user] is falling on the [name]! It looks like [user.p_theyre()] trying to commit suicide.</span>"))
|
||||
@@ -225,3 +240,127 @@
|
||||
desc = "An extremely sharp blade made out of hard light. Packs quite a punch."
|
||||
icon_state = "lightblade"
|
||||
item_state = "lightblade"
|
||||
|
||||
/obj/item/melee/energy/proc/nemesis_effects(mob/living/user, mob/living/target)
|
||||
return
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw
|
||||
name = "cleaving saw"
|
||||
desc = "This saw, effective at drawing the blood of beasts, transforms into a long cleaver that makes use of centrifugal force."
|
||||
force = 12
|
||||
force_on = 20 //force when active
|
||||
throwforce = 20
|
||||
throwforce_on = 20
|
||||
icon = 'icons/obj/lavaland/artefacts.dmi'
|
||||
lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/64x64_righthand.dmi'
|
||||
inhand_x_dimension = 64
|
||||
inhand_y_dimension = 64
|
||||
icon_state = "cleaving_saw"
|
||||
icon_state_on = "cleaving_saw_open"
|
||||
slot_flags = SLOT_BELT
|
||||
var/attack_verb_off = list("attacked", "sawed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
attack_verb_on = list("cleaved", "swiped", "slashed", "chopped")
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
sharp = TRUE
|
||||
faction_bonus_force = 30
|
||||
nemesis_factions = list("mining", "boss")
|
||||
var/transform_cooldown
|
||||
var/swiping = FALSE
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/nemesis_effects(mob/living/user, mob/living/target)
|
||||
var/datum/status_effect/saw_bleed/B = target.has_status_effect(STATUS_EFFECT_SAWBLEED)
|
||||
if(!B)
|
||||
if(!active) //This isn't in the above if-check so that the else doesn't care about active
|
||||
target.apply_status_effect(STATUS_EFFECT_SAWBLEED)
|
||||
else
|
||||
B.add_bleed(B.bleed_buildup)
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/attack_self(mob/living/carbon/user)
|
||||
transform_weapon(user)
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/proc/transform_weapon(mob/living/user, supress_message_text)
|
||||
if(transform_cooldown > world.time)
|
||||
return FALSE
|
||||
|
||||
transform_cooldown = world.time + (CLICK_CD_MELEE * 0.5)
|
||||
user.changeNext_move(CLICK_CD_MELEE * 0.25)
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.disabilities & CLUMSY && prob(50))
|
||||
to_chat(H, "<span class='warning'>You accidentally cut yourself with [src], like a doofus!</span>")
|
||||
H.take_organ_damage(10,10)
|
||||
active = !active
|
||||
if(active)
|
||||
force = force_on
|
||||
throwforce = throwforce_on
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
throw_speed = 4
|
||||
if(attack_verb_on.len)
|
||||
attack_verb = attack_verb_on
|
||||
if(!item_color)
|
||||
icon_state = icon_state_on
|
||||
set_light(brightness_on)
|
||||
else
|
||||
icon_state = "sword[item_color]"
|
||||
set_light(brightness_on, l_color=colormap[item_color])
|
||||
w_class = w_class_on
|
||||
playsound(user, 'sound/magic/fellowship_armory.ogg', 35, TRUE, frequency = 90000 - (active * 30000))
|
||||
to_chat(user, "<span class='notice'>You open [src]. It will now cleave enemies in a wide arc and deal additional damage to fauna.</span>")
|
||||
else
|
||||
force = initial(force)
|
||||
throwforce = initial(throwforce)
|
||||
hitsound = initial(hitsound)
|
||||
throw_speed = initial(throw_speed)
|
||||
if(attack_verb_on.len)
|
||||
attack_verb = list()
|
||||
icon_state = initial(icon_state)
|
||||
w_class = initial(w_class)
|
||||
playsound(user, 'sound/magic/fellowship_armory.ogg', 35, 1) //changed it from 50% volume to 35% because deafness
|
||||
set_light(0)
|
||||
to_chat(user, "<span class='notice'>You close [src]. It will now attack rapidly and cause fauna to bleed.</span>")
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/examine(mob/user)
|
||||
..()
|
||||
to_chat(user, "<span class='notice'>It is [active ? "open, will cleave enemies in a wide arc and deal additional damage to fauna":"closed, and can be used for rapid consecutive attacks that cause fauna to bleed"].<br>\
|
||||
Both modes will build up existing bleed effects, doing a burst of high damage if the bleed is built up high enough.<br>\
|
||||
Transforming it immediately after an attack causes the next attack to come out faster.</span>")
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is [active ? "closing [src] on [user.p_their()] neck" : "opening [src] into [user.p_their()] chest"]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
transform_cooldown = 0
|
||||
transform_weapon(user, TRUE)
|
||||
return BRUTELOSS
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/melee_attack_chain(mob/user, atom/target, params)
|
||||
..()
|
||||
if(!active)
|
||||
user.changeNext_move(CLICK_CD_MELEE * 0.5) //when closed, it attacks very rapidly
|
||||
|
||||
/obj/item/melee/energy/cleaving_saw/attack(mob/living/target, mob/living/carbon/human/user)
|
||||
if(!active || swiping || !target.density || get_turf(target) == get_turf(user))
|
||||
if(!active)
|
||||
faction_bonus_force = 0
|
||||
..()
|
||||
if(!active)
|
||||
faction_bonus_force = initial(faction_bonus_force)
|
||||
else
|
||||
var/turf/user_turf = get_turf(user)
|
||||
var/dir_to_target = get_dir(user_turf, get_turf(target))
|
||||
swiping = TRUE
|
||||
var/static/list/cleaving_saw_cleave_angles = list(0, -45, 45) //so that the animation animates towards the target clicked and not towards a side target
|
||||
for(var/i in cleaving_saw_cleave_angles)
|
||||
var/turf/T = get_step(user_turf, turn(dir_to_target, i))
|
||||
for(var/mob/living/L in T)
|
||||
if(user.Adjacent(L) && L.density)
|
||||
melee_attack_chain(user, L)
|
||||
swiping = FALSE
|
||||
@@ -67,4 +67,38 @@
|
||||
force = 10
|
||||
throwforce = 7
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
attack_verb = list("slashed", "stabbed", "sliced", "caned")
|
||||
attack_verb = list("slashed", "stabbed", "sliced", "caned")
|
||||
|
||||
/obj/item/melee/flyswatter
|
||||
name = "flyswatter"
|
||||
desc = "Useful for killing insects of all sizes."
|
||||
icon_state = "flyswatter"
|
||||
item_state = "flyswatter"
|
||||
force = 1
|
||||
throwforce = 1
|
||||
attack_verb = list("swatted", "smacked")
|
||||
hitsound = 'sound/effects/snap.ogg'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
//Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc.
|
||||
var/list/strong_against
|
||||
|
||||
/obj/item/melee/flyswatter/Initialize(mapload)
|
||||
. = ..()
|
||||
strong_against = typecacheof(list(
|
||||
/mob/living/simple_animal/hostile/poison/bees/,
|
||||
/mob/living/simple_animal/butterfly,
|
||||
/mob/living/simple_animal/cockroach,
|
||||
/obj/item/queen_bee
|
||||
))
|
||||
|
||||
/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag)
|
||||
. = ..()
|
||||
if(proximity_flag)
|
||||
if(is_type_in_typecache(target, strong_against))
|
||||
new /obj/effect/decal/cleanable/insectguts(target.drop_location())
|
||||
to_chat(user, "<span class='warning'>You easily splat the [target].</span>")
|
||||
if(istype(target, /mob/living/))
|
||||
var/mob/living/bug = target
|
||||
bug.death(1)
|
||||
else
|
||||
qdel(target)
|
||||
@@ -4,6 +4,9 @@
|
||||
|
||||
#define RPD_COOLDOWN_TIME 4 //How long should we have to wait between dispensing pipes?
|
||||
#define RPD_WALLBUILD_TIME 40 //How long should drilling into a wall take?
|
||||
#define RPD_MENU_ROTATE "Rotate pipes" //Stuff for radial menu
|
||||
#define RPD_MENU_FLIP "Flip pipes" //Stuff for radial menu
|
||||
#define RPD_MENU_DELETE "Delete pipes" //Stuff for radial menu
|
||||
|
||||
/obj/item/rpd
|
||||
name = "rapid pipe dispenser"
|
||||
@@ -172,6 +175,9 @@ var/list/pipemenu = list(
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
/obj/item/rpd/AltClick(mob/user)
|
||||
radial_menu(user)
|
||||
|
||||
/obj/item/rpd/ui_data(mob/user, ui_key = "main", datum/topic_state/state = inventory_state)
|
||||
var/data[0]
|
||||
data["iconrotation"] = iconrotation
|
||||
@@ -200,6 +206,44 @@ var/list/pipemenu = list(
|
||||
return
|
||||
SSnanoui.update_uis(src)
|
||||
|
||||
//RPD radial menu
|
||||
|
||||
/obj/item/rpd/proc/check_menu(mob/living/user)
|
||||
if(!istype(user))
|
||||
return
|
||||
if(user.incapacitated())
|
||||
return
|
||||
if(loc != user)
|
||||
return
|
||||
return TRUE
|
||||
|
||||
/obj/item/rpd/proc/radial_menu(mob/user)
|
||||
if(!check_menu(user))
|
||||
to_chat(user, "<span class='notice'>You can't do that right now!</span>")
|
||||
return
|
||||
var/list/choices = list(
|
||||
RPD_MENU_ROTATE = image(icon = 'icons/obj/interface.dmi', icon_state = "rpd_rotate"),
|
||||
RPD_MENU_FLIP = image(icon = 'icons/obj/interface.dmi', icon_state = "rpd_flip"),
|
||||
RPD_MENU_DELETE = image(icon = 'icons/obj/interface.dmi', icon_state = "rpd_delete"),
|
||||
"UI" = image(icon = 'icons/obj/interface.dmi', icon_state = "ui_interact")
|
||||
)
|
||||
var/selected_mode = show_radial_menu(user, src, choices, custom_check = CALLBACK(src, .proc/check_menu, user))
|
||||
if(!check_menu(user))
|
||||
return
|
||||
if(selected_mode == "UI")
|
||||
ui_interact(user)
|
||||
else
|
||||
switch(selected_mode)
|
||||
if(RPD_MENU_ROTATE)
|
||||
mode = RPD_ROTATE_MODE
|
||||
if(RPD_MENU_FLIP)
|
||||
mode = RPD_FLIP_MODE
|
||||
if(RPD_MENU_DELETE)
|
||||
mode = RPD_DELETE_MODE
|
||||
else
|
||||
return //Either nothing was selected, or an invalid mode was selected
|
||||
to_chat(user, "<span class='notice'>You set [src]'s mode.</span>")
|
||||
|
||||
/obj/item/rpd/afterattack(atom/target, mob/user, proximity)
|
||||
..()
|
||||
if(loc != user)
|
||||
@@ -236,3 +280,6 @@ var/list/pipemenu = list(
|
||||
|
||||
#undef RPD_COOLDOWN_TIME
|
||||
#undef RPD_WALLBUILD_TIME
|
||||
#undef RPD_MENU_ROTATE
|
||||
#undef RPD_MENU_FLIP
|
||||
#undef RPD_MENU_DELETE
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
gender = PLURAL
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "soap"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
|
||||
w_class = WEIGHT_CLASS_TINY
|
||||
throwforce = 0
|
||||
throw_speed = 4
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
storage_slots = 21
|
||||
burn_state = FLAMMABLE
|
||||
burntime = 20
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/back.dmi'
|
||||
)
|
||||
@@ -52,6 +51,7 @@
|
||||
desc = "A backpack that opens into a localized pocket of Blue Space."
|
||||
origin_tech = "bluespace=5;materials=4;engineering=4;plasmatech=5"
|
||||
icon_state = "holdingpack"
|
||||
item_state = "holdingpack"
|
||||
max_w_class = WEIGHT_CLASS_HUGE
|
||||
max_combined_w_class = 35
|
||||
burn_state = FIRE_PROOF
|
||||
@@ -158,6 +158,12 @@
|
||||
item_state = "engiepack"
|
||||
burn_state = FIRE_PROOF
|
||||
|
||||
/obj/item/storage/backpack/explorer
|
||||
name = "explorer bag"
|
||||
desc = "A robust backpack for stashing your loot."
|
||||
icon_state = "explorerpack"
|
||||
item_state = "explorerpack"
|
||||
|
||||
/obj/item/storage/backpack/botany
|
||||
name = "botany backpack"
|
||||
desc = "It's a backpack made of all-natural fibers."
|
||||
@@ -235,6 +241,12 @@
|
||||
icon_state = "satchel-eng"
|
||||
burn_state = FIRE_PROOF
|
||||
|
||||
/obj/item/storage/backpack/satchel/explorer
|
||||
name = "explorer satchel"
|
||||
desc = "A robust satchel for stashing your loot."
|
||||
icon_state = "satchel-explorer"
|
||||
item_state = "securitypack"
|
||||
|
||||
/obj/item/storage/backpack/satchel_med
|
||||
name = "medical satchel"
|
||||
desc = "A sterile satchel used in medical departments."
|
||||
@@ -345,6 +357,21 @@
|
||||
new /obj/item/ammo_box/magazine/m12g/buckshot(src)
|
||||
new /obj/item/ammo_box/magazine/m12g/dragon(src)
|
||||
|
||||
/obj/item/storage/backpack/duffel/mining_conscript/noid
|
||||
name = "mining conscription kit"
|
||||
desc = "A kit containing everything a crewmember needs to support a shaft miner in the field."
|
||||
|
||||
/obj/item/storage/backpack/duffel/mining_conscript/noid/New()
|
||||
..()
|
||||
new /obj/item/pickaxe(src)
|
||||
new /obj/item/clothing/glasses/meson(src)
|
||||
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
|
||||
new /obj/item/storage/bag/ore(src)
|
||||
new /obj/item/clothing/under/rank/miner/lavaland(src)
|
||||
new /obj/item/encryptionkey/headset_cargo(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
|
||||
|
||||
/obj/item/storage/backpack/duffel/syndie/ammo/smg
|
||||
desc = "A large duffel bag, packed to the brim with C-20r magazines."
|
||||
|
||||
|
||||
@@ -385,7 +385,8 @@
|
||||
/obj/item/flashlight,
|
||||
/obj/item/reagent_containers/spray,
|
||||
/obj/item/soap,
|
||||
/obj/item/holosign_creator
|
||||
/obj/item/holosign_creator,
|
||||
/obj/item/melee/flyswatter,
|
||||
)
|
||||
|
||||
/obj/item/storage/belt/janitor/full/New()
|
||||
@@ -396,6 +397,7 @@
|
||||
new /obj/item/soap(src)
|
||||
new /obj/item/grenade/chem_grenade/cleaner(src)
|
||||
new /obj/item/grenade/chem_grenade/cleaner(src)
|
||||
new /obj/item/melee/flyswatter(src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/storage/belt/lazarus
|
||||
@@ -723,3 +725,52 @@
|
||||
|
||||
new /obj/item/analyzer(src)
|
||||
new /obj/item/healthanalyzer(src)
|
||||
|
||||
/obj/item/storage/belt/mining
|
||||
name = "explorer's webbing"
|
||||
desc = "A versatile chest rig, cherished by miners and hunters alike."
|
||||
icon_state = "explorer1"
|
||||
item_state = "explorer1"
|
||||
storage_slots = 6
|
||||
max_w_class = WEIGHT_CLASS_BULKY
|
||||
use_item_overlays = 0
|
||||
can_hold = 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/analyzer,
|
||||
/obj/item/extinguisher/mini,
|
||||
/obj/item/radio,
|
||||
/obj/item/clothing/gloves,
|
||||
/obj/item/resonator,
|
||||
/obj/item/mining_scanner,
|
||||
/obj/item/pickaxe,
|
||||
/obj/item/stack/sheet/animalhide,
|
||||
/obj/item/stack/sheet/sinew,
|
||||
/obj/item/stack/sheet/bone,
|
||||
/obj/item/lighter,
|
||||
/obj/item/storage/fancy/cigarettes,
|
||||
/obj/item/reagent_containers/food/drinks/bottle,
|
||||
/obj/item/stack/medical,
|
||||
/obj/item/kitchen/knife,
|
||||
/obj/item/reagent_containers/hypospray,
|
||||
/obj/item/gps,
|
||||
/obj/item/storage/bag/ore,
|
||||
/obj/item/survivalcapsule,
|
||||
/obj/item/t_scanner/adv_mining_scanner,
|
||||
/obj/item/reagent_containers/food/pill,
|
||||
/obj/item/stack/ore,
|
||||
/obj/item/reagent_containers/food/drinks,
|
||||
/obj/item/organ/internal/hivelord_core,
|
||||
/obj/item/wormhole_jaunter,
|
||||
/obj/item/storage/bag/plants,
|
||||
/obj/item/stack/marker_beacon)
|
||||
|
||||
/obj/item/storage/belt/mining/New()
|
||||
..()
|
||||
new /obj/item/survivalcapsule(src)
|
||||
@@ -191,6 +191,15 @@
|
||||
new /obj/item/reagent_containers/glass/beaker( src )
|
||||
new /obj/item/reagent_containers/glass/beaker( src )
|
||||
|
||||
/obj/item/storage/box/beakers/bluespace
|
||||
name = "box of bluespace beakers"
|
||||
icon_state = "beaker"
|
||||
|
||||
/obj/item/storage/box/beakers/bluespace/New()
|
||||
..()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/reagent_containers/glass/beaker/bluespace(src)
|
||||
|
||||
/obj/item/storage/box/iv_bags
|
||||
name = "IV Bags"
|
||||
desc = "A box full of empty IV bags."
|
||||
@@ -536,6 +545,10 @@
|
||||
for(var/i in 1 to 5)
|
||||
new monkey_cube_type(src)
|
||||
|
||||
/obj/item/storage/box/monkeycubes/syndicate
|
||||
desc = "Waffle Co. brand monkey cubes. Just add water and a dash of subterfuge!"
|
||||
monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube/syndicate
|
||||
|
||||
/obj/item/storage/box/monkeycubes/farwacubes
|
||||
name = "farwa cube box"
|
||||
desc = "Drymate brand farwa cubes. Just add water!"
|
||||
@@ -1044,6 +1057,56 @@
|
||||
new /obj/item/circuitboard/circuit_imprinter(src)
|
||||
new /obj/item/circuitboard/rdconsole/public(src)
|
||||
|
||||
/obj/item/storage/box/stockparts/basic //for ruins where it's a bad idea to give access to an autolathe/protolathe, but still want to make stock parts accessible
|
||||
name = "box of stock parts"
|
||||
desc = "Contains a variety of basic stock parts."
|
||||
|
||||
/obj/item/storage/box/stockparts/basic/New()
|
||||
..()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/stock_parts/capacitor(src)
|
||||
new /obj/item/stock_parts/scanning_module(src)
|
||||
new /obj/item/stock_parts/manipulator(src)
|
||||
new /obj/item/stock_parts/micro_laser(src)
|
||||
new /obj/item/stock_parts/matter_bin(src)
|
||||
|
||||
/obj/item/storage/box/stockparts/deluxe
|
||||
name = "box of deluxe stock parts"
|
||||
desc = "Contains a variety of deluxe stock parts."
|
||||
|
||||
/obj/item/storage/box/stockparts/deluxe/New()
|
||||
for(var/i in 1 to 3)
|
||||
new /obj/item/stock_parts/capacitor/quadratic(src)
|
||||
new /obj/item/stock_parts/scanning_module/triphasic(src)
|
||||
new /obj/item/stock_parts/manipulator/femto(src)
|
||||
new /obj/item/stock_parts/micro_laser/quadultra(src)
|
||||
new /obj/item/stock_parts/matter_bin/bluespace(src)
|
||||
|
||||
/obj/item/storage/box/mininghardsuit
|
||||
name = "Boxed Mining Hardsuit"
|
||||
desc = "Contains a mining hardsuit and helmet. For mining."
|
||||
|
||||
/obj/item/storage/box/mininghardsuit/New()
|
||||
..()
|
||||
new /obj/item/clothing/suit/space/hardsuit/mining(src)
|
||||
new /obj/item/clothing/head/helmet/space/hardsuit/mining(src)
|
||||
|
||||
/obj/item/storage/box/hug
|
||||
name = "box of hugs"
|
||||
desc = "A special box for sensitive people."
|
||||
icon_state = "hugbox"
|
||||
foldable = null
|
||||
|
||||
/obj/item/storage/box/hug/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] clamps the box of hugs on [user.p_their()] jugular! Guess it wasn't such a hugbox after all..</span>")
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/storage/box/hug/attack_self(mob/user)
|
||||
..()
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
playsound(loc, "rustle", 50, 1, -5)
|
||||
user.visible_message("<span class='notice'>[user] hugs \the [src].</span>","<span class='notice'>You hug \the [src].</span>")
|
||||
|
||||
#undef NODESIGN
|
||||
#undef NANOTRASEN
|
||||
#undef SYNDI
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
/obj/item/storage/fancy/egg_box
|
||||
icon_state = "eggbox"
|
||||
icon_type = "egg"
|
||||
item_state = "eggbox"
|
||||
name = "egg box"
|
||||
storage_slots = 12
|
||||
can_hold = list(/obj/item/reagent_containers/food/snacks/egg)
|
||||
|
||||
@@ -1,112 +1,120 @@
|
||||
/obj/item/storage/box/syndicate/
|
||||
New()
|
||||
..()
|
||||
switch(pickweight(list("bloodyspai" = 1, "thief" = 1, "bond" = 1, "sabotage" = 1, "payday" = 1, "implant" = 1, "hacker" = 1, "darklord" = 1, "gadgets" = 1, "professional" = 1)))
|
||||
if("bloodyspai") // 28TC
|
||||
new /obj/item/twohanded/garrote(src)
|
||||
new /obj/item/pinpointer/advpinpointer(src)
|
||||
new /obj/item/clothing/mask/chameleon(src)
|
||||
new /obj/item/clothing/under/chameleon(src)
|
||||
new /obj/item/card/id/syndicate(src)
|
||||
new /obj/item/flashlight/emp(src)
|
||||
new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src)
|
||||
new /obj/item/clothing/glasses/hud/security/chameleon(src)
|
||||
new /obj/item/camera_bug(src)
|
||||
return
|
||||
/obj/item/storage/box/syndicate/New()
|
||||
..()
|
||||
switch(pickweight(list("bloodyspai" = 1, "thief" = 1, "bond" = 1, "sabotage" = 1, "payday" = 1, "implant" = 1, "hacker" = 1, "darklord" = 1, "professional" = 1)))
|
||||
if("bloodyspai") // 35TC + one 0TC
|
||||
new /obj/item/clothing/under/chameleon(src) // 2TC
|
||||
new /obj/item/clothing/mask/chameleon(src) // 0TC
|
||||
new /obj/item/card/id/syndicate(src) // 2TC
|
||||
new /obj/item/clothing/shoes/chameleon/noslip(src) // 2TC
|
||||
new /obj/item/camera_bug(src) // 1TC
|
||||
new /obj/item/multitool/ai_detect(src) // 1TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
new /obj/item/twohanded/garrote(src) // 10TC
|
||||
new /obj/item/pinpointer/advpinpointer(src) // 4TC
|
||||
new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) // 2TC
|
||||
new /obj/item/flashlight/emp(src) // 2TC
|
||||
new /obj/item/clothing/glasses/hud/security/chameleon(src) // 2TC
|
||||
new /obj/item/chameleon(src) // 8TC
|
||||
return
|
||||
|
||||
if("thief") // 30TC
|
||||
new /obj/item/gun/energy/kinetic_accelerator/crossbow(src)
|
||||
new /obj/item/chameleon(src)
|
||||
new /obj/item/clothing/gloves/color/black/thief(src)
|
||||
new /obj/item/card/id/syndicate(src)
|
||||
new /obj/item/clothing/shoes/chameleon/noslip(src)
|
||||
new /obj/item/storage/box/syndie_kit/safecracking(src)
|
||||
return
|
||||
if("thief") // 40TC
|
||||
new /obj/item/gun/energy/kinetic_accelerator/crossbow(src) // 12TC
|
||||
new /obj/item/chameleon(src) // 8TC
|
||||
new /obj/item/clothing/glasses/thermal/syndi(src) // 6TC
|
||||
new /obj/item/clothing/gloves/color/black/thief(src) // 6TC
|
||||
new /obj/item/card/id/syndicate(src) // 2TC
|
||||
new /obj/item/clothing/shoes/chameleon/noslip(src) // 2TC
|
||||
new /obj/item/storage/backpack/satchel_flat(src) // 2TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
return
|
||||
|
||||
if("bond") // 29TC + Healing Cocktail + armored suit jacket
|
||||
new /obj/item/gun/projectile/automatic/pistol(src)
|
||||
new /obj/item/suppressor(src)
|
||||
new /obj/item/ammo_box/magazine/m10mm/hp(src)
|
||||
new /obj/item/ammo_box/magazine/m10mm/ap(src)
|
||||
new /obj/item/encryptionkey/syndicate(src)
|
||||
new /obj/item/reagent_containers/food/drinks/drinkingglass/alliescocktail(src) // This drink heals now
|
||||
new /obj/item/card/id/syndicate(src)
|
||||
new /obj/item/dnascrambler(src)
|
||||
new /obj/item/storage/box/syndie_kit/emp(src)
|
||||
new /obj/item/CQC_manual(src)
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||
new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src)
|
||||
return
|
||||
if("bond") // 33TC + three 0TC
|
||||
new /obj/item/gun/projectile/automatic/pistol(src) // 4TC
|
||||
new /obj/item/suppressor(src) // 1TC
|
||||
new /obj/item/ammo_box/magazine/m10mm/hp(src) // 3TC
|
||||
new /obj/item/ammo_box/magazine/m10mm/ap(src) // 2TC
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src) // 0TC
|
||||
new /obj/item/card/id/syndicate(src) // 2TC
|
||||
new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src) // 0TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
new /obj/item/reagent_containers/food/drinks/drinkingglass/alliescocktail(src) // 0TC
|
||||
new /obj/item/dnascrambler(src) // 4TC
|
||||
new /obj/item/storage/box/syndie_kit/emp(src) // 2TC
|
||||
new /obj/item/CQC_manual(src) // 13TC
|
||||
return
|
||||
|
||||
if("sabotage") // 31TC + RCD + Insuls
|
||||
new /obj/item/powersink(src)
|
||||
new /obj/item/grenade/syndieminibomb(src)
|
||||
new /obj/item/card/emag(src)
|
||||
new /obj/item/grenade/clusterbuster/n2o(src)
|
||||
new /obj/item/clothing/gloves/color/yellow(src)
|
||||
new /obj/item/rcd/preloaded(src)
|
||||
new /obj/item/storage/box/syndie_kit/space(src)
|
||||
return
|
||||
if("sabotage") // 47TC + three 0TC
|
||||
new /obj/item/grenade/plastic/c4(src) // 1TC
|
||||
new /obj/item/grenade/plastic/c4(src) // 1TC
|
||||
new /obj/item/camera_bug(src) // 1TC
|
||||
new /obj/item/powersink(src) // 10TC
|
||||
new /obj/item/cartridge/syndicate(src) // 6TC
|
||||
new /obj/item/rcd/preloaded(src) // 0TC
|
||||
new /obj/item/card/emag(src) // 6TC
|
||||
new /obj/item/clothing/gloves/color/yellow(src) // 0TC
|
||||
new /obj/item/grenade/syndieminibomb(src) // 6TC
|
||||
new /obj/item/grenade/clusterbuster/n2o(src) // 0TC
|
||||
new /obj/item/storage/box/syndie_kit/space(src) // 4TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
return
|
||||
|
||||
if("payday") // 31TC + armored suit jacket
|
||||
new /obj/item/gun/projectile/revolver(src)
|
||||
new /obj/item/ammo_box/a357(src)
|
||||
new /obj/item/ammo_box/a357(src)
|
||||
new /obj/item/card/emag(src)
|
||||
new /obj/item/grenade/plastic/c4(src)
|
||||
new /obj/item/card/id/syndicate(src)
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||
new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src)
|
||||
new /obj/item/clothing/gloves/color/latex/nitrile(src)
|
||||
new /obj/item/clothing/mask/gas/clown_hat(src)
|
||||
new /obj/item/thermal_drill(src)
|
||||
return
|
||||
if("payday") // 33TC + four 0TC
|
||||
new /obj/item/gun/projectile/revolver(src) // 13TC
|
||||
new /obj/item/ammo_box/a357(src) // 3TC
|
||||
new /obj/item/ammo_box/a357(src) // 3TC
|
||||
new /obj/item/card/emag(src) // 6TC
|
||||
new /obj/item/grenade/plastic/c4(src) // 1TC
|
||||
new /obj/item/card/id/syndicate(src) // 2TC
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src) //0TC
|
||||
new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src) //0TC
|
||||
new /obj/item/clothing/gloves/color/latex/nitrile(src) //0 TC
|
||||
new /obj/item/clothing/mask/gas/clown_hat(src) // 0TC
|
||||
new /obj/item/thermal_drill(src) // 3TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
return
|
||||
|
||||
if("implant") // 35TC
|
||||
new /obj/item/implanter/uplink(src)
|
||||
new /obj/item/implanter/adrenalin(src)
|
||||
new /obj/item/implanter/storage(src)
|
||||
new /obj/item/implanter/freedom(src)
|
||||
return
|
||||
if("implant") // 39TC + ten free TC
|
||||
new /obj/item/implanter/freedom(src) // 5TC
|
||||
new /obj/item/implanter/uplink(src) // 14TC (ten free TC)
|
||||
new /obj/item/implanter/emp(src) // 0TC
|
||||
new /obj/item/implanter/adrenalin(src) // 8TC
|
||||
new /obj/item/implanter/explosive(src) // 2TC
|
||||
new /obj/item/implanter/storage(src) // 8TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
return
|
||||
|
||||
if("hacker") // 22TC + Ion law uploader
|
||||
new /obj/item/aiModule/syndicate(src)
|
||||
new /obj/item/encryptionkey/binary(src)
|
||||
new /obj/item/encryptionkey/syndicate(src)
|
||||
new /obj/item/aiModule/toyAI(src)
|
||||
new /obj/item/card/emag(src)
|
||||
return
|
||||
if("hacker") // 30TC + one 0TC
|
||||
new /obj/item/aiModule/syndicate(src) // 12TC
|
||||
new /obj/item/card/emag(src) // 6TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
new /obj/item/encryptionkey/binary(src) // 5TC
|
||||
new /obj/item/aiModule/toyAI(src) // 0TC
|
||||
new /obj/item/multitool/ai_detect(src) // 1TC
|
||||
new /obj/item/storage/box/syndie_kit/c4 // 4TC
|
||||
return
|
||||
|
||||
if("darklord") // 23TC + TK implant
|
||||
new /obj/item/melee/energy/sword/saber/red(src)
|
||||
new /obj/item/melee/energy/sword/saber/red(src)
|
||||
new /obj/item/dnainjector/telemut/darkbundle(src)
|
||||
new /obj/item/clothing/suit/hooded/chaplain_hoodie(src)
|
||||
new /obj/item/card/id/syndicate(src)
|
||||
new /obj/item/clothing/shoes/chameleon/noslip(src)
|
||||
new /obj/item/clothing/mask/chameleon(src)
|
||||
return
|
||||
if("darklord") // 22TC + two 0TC
|
||||
new /obj/item/melee/energy/sword/saber/red(src) // 8TC
|
||||
new /obj/item/melee/energy/sword/saber/red(src) // 8TC
|
||||
new /obj/item/dnainjector/telemut/darkbundle(src) // 0TC
|
||||
new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) // 0TC
|
||||
new /obj/item/card/id/syndicate(src) // 2TC
|
||||
new /obj/item/clothing/shoes/chameleon/noslip(src) // 2TC
|
||||
new /obj/item/clothing/mask/chameleon(src) // 2TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
return
|
||||
|
||||
if("gadgets") // 30TC
|
||||
new /obj/item/clothing/gloves/color/yellow/power(src)
|
||||
new /obj/item/pen/sleepy(src)
|
||||
new /obj/item/clothing/shoes/chameleon/noslip(src)
|
||||
new /obj/item/clothing/glasses/thermal/syndi(src)
|
||||
new /obj/item/flashlight/emp(src)
|
||||
new /obj/item/stamp/chameleon(src)
|
||||
new /obj/item/multitool/ai_detect(src)
|
||||
return
|
||||
|
||||
if("professional") // 29TC + armored suit jacket + insulated combat gloves
|
||||
new /obj/item/gun/projectile/automatic/sniper_rifle/soporific(src) // Unique version that starts with soporific rounds loaded and cannot be suppressed
|
||||
new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src)
|
||||
new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src)
|
||||
new /obj/item/pen/edagger(src)
|
||||
new /obj/item/clothing/glasses/thermal/syndi/sunglasses(src)
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src)
|
||||
new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src)
|
||||
new /obj/item/clothing/gloves/combat(src)
|
||||
return
|
||||
if("professional") // 32 TC + two 0TC
|
||||
new /obj/item/gun/projectile/automatic/sniper_rifle/syndicate/penetrator(src) // 16TC
|
||||
new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src) // 5TC
|
||||
new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src) // 3TC
|
||||
new /obj/item/clothing/glasses/thermal/syndi/sunglasses(src) // 6TC
|
||||
new /obj/item/clothing/gloves/combat(src) // 0 TC
|
||||
new /obj/item/clothing/under/suit_jacket/really_black(src) // 0 TC
|
||||
new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src) // 0TC
|
||||
new /obj/item/pen/edagger(src) // 2TC
|
||||
new /obj/item/encryptionkey/syndicate(src) // 2TC
|
||||
return
|
||||
|
||||
/obj/item/storage/box/syndie_kit
|
||||
name = "Box"
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
user.visible_message("<span class='suicide'>[user] is putting the live [name] in [user.p_their()] mouth! It looks like [user.p_theyre()] trying to commit suicide.</span>")
|
||||
return FIRELOSS
|
||||
|
||||
/obj/item/melee/baton/get_cell()
|
||||
return bcell
|
||||
|
||||
/obj/item/melee/baton/New()
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
@@ -192,6 +192,15 @@
|
||||
var/obj/structure/grille/G = A
|
||||
G.take_damage(40, BRUTE, "melee", 0)
|
||||
|
||||
/obj/item/twohanded/fireaxe/boneaxe // Blatant imitation of the fireaxe, but made out of bone.
|
||||
icon_state = "bone_axe0"
|
||||
name = "bone axe"
|
||||
desc = "A large, vicious axe crafted out of several sharpened bone plates and crudely tied together. Made of monsters, by killing monsters, for killing monsters."
|
||||
force_wielded = 23
|
||||
|
||||
/obj/item/twohanded/fireaxe/boneaxe/update_icon()
|
||||
icon_state = "bone_axe[wielded]"
|
||||
|
||||
/*
|
||||
* Double-Bladed Energy Swords - Cheridan
|
||||
*/
|
||||
@@ -347,6 +356,19 @@
|
||||
explosive.prime()
|
||||
qdel(src)
|
||||
|
||||
/obj/item/twohanded/spear/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification.
|
||||
icon_state = "bone_spear0"
|
||||
name = "bone spear"
|
||||
desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology."
|
||||
force = 11
|
||||
force_unwielded = 11
|
||||
force_wielded = 20 //I have no idea how to balance
|
||||
throwforce = 22
|
||||
armour_penetration = 15 //Enhanced armor piercing
|
||||
|
||||
/obj/item/twohanded/spear/bonespear/update_icon()
|
||||
icon_state = "bone_spear[wielded]"
|
||||
|
||||
//GREY TIDE
|
||||
/obj/item/twohanded/spear/grey_tide
|
||||
icon_state = "spearglass0"
|
||||
|
||||
Reference in New Issue
Block a user