Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into EXTERMINATUSPARTONE

This commit is contained in:
Aurorablade
2019-01-19 23:35:15 -05:00
439 changed files with 12076 additions and 5435 deletions
@@ -45,7 +45,7 @@
eject_all()
playsound(get_turf(src), 'sound/effects/pop.ogg', 100, 1, -6)
QDEL_NULL(active_dummy)
to_chat(usr, "<span class='notice'>You deactivate \the [src].</span>")
to_chat(usr, "<span class='notice'>You deactivate [src].</span>")
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
T.icon = 'icons/effects/effects.dmi'
flick("emppulse",T)
@@ -58,7 +58,7 @@
var/obj/effect/dummy/chameleon/C = new/obj/effect/dummy/chameleon(usr.loc)
C.activate(O, usr, saved_icon, saved_icon_state, saved_overlays, saved_underlays, src)
qdel(O)
to_chat(usr, "<span class='notice'>You activate \the [src].</span>")
to_chat(usr, "<span class='notice'>You activate [src].</span>")
var/obj/effect/overlay/T = new/obj/effect/overlay(get_turf(src))
T.icon = 'icons/effects/effects.dmi'
flick("emppulse",T)
@@ -148,3 +148,102 @@
/obj/effect/dummy/chameleon/Destroy()
master.disrupt(0)
return ..()
/obj/item/borg_chameleon
name = "cyborg chameleon projector"
icon = 'icons/obj/device.dmi'
icon_state = "shield0"
item_state = "electronic"
w_class = WEIGHT_CLASS_SMALL
var/active = FALSE
var/activationCost = 300
var/activationUpkeep = 50
var/disguise = "landmate"
var/mob/living/silicon/robot/syndicate/saboteur/S
/obj/item/borg_chameleon/Destroy()
if(S)
S.cham_proj = null
return ..()
/obj/item/borg_chameleon/dropped(mob/user)
. = ..()
disrupt(user)
/obj/item/borg_chameleon/equipped(mob/user)
. = ..()
disrupt(user)
/obj/item/borg_chameleon/attack_self(mob/living/silicon/robot/syndicate/saboteur/user)
if(user && user.cell && user.cell.charge > activationCost)
if(isturf(user.loc))
toggle(user)
else
to_chat(user, "<span class='warning'>You can't use [src] while inside something!</span>")
else
to_chat(user, "<span class='warning'>You need at least [activationCost] charge in your cell to use [src]!</span>")
/obj/item/borg_chameleon/proc/toggle(mob/living/silicon/robot/syndicate/saboteur/user)
if(active)
playsound(src, 'sound/effects/pop.ogg', 100, 1, -6)
to_chat(user, "<span class='notice'>You deactivate [src].</span>")
deactivate(user)
else
to_chat(user, "<span class='notice'>You activate [src].</span>")
var/start = user.filters.len
var/X
var/Y
var/rsq
var/i
var/f
for(i in 1 to 7)
do
X = 60 * rand() - 30
Y = 60 * rand() - 30
rsq = X * X + Y * Y
while(rsq < 100 || rsq > 900)
user.filters += filter(type = "wave", x = X, y = Y, size = rand() * 2.5 + 0.5, offset = rand())
for(i in 1 to 7)
f = user.filters[start+i]
animate(f, offset = f:offset, time = 0, loop = 3, flags = ANIMATION_PARALLEL)
animate(offset = f:offset - 1, time = rand() * 20 + 10)
if(do_after(user, 50, target = user) && user.cell.use(activationCost))
playsound(src, 'sound/effects/bamf.ogg', 100, 1, -6)
to_chat(user, "<span class='notice'>You are now disguised as a Nanotrasen engineering cyborg.</span>")
activate(user)
else
to_chat(user, "<span class='warning'>The chameleon field fizzles.</span>")
do_sparks(3, FALSE, user)
for(i in 1 to min(7, user.filters.len)) // removing filters that are animating does nothing, we gotta stop the animations first
f = user.filters[start + i]
animate(f)
user.filters = null
/obj/item/borg_chameleon/process()
if(S)
if(!S.cell || !S.cell.use(activationUpkeep))
disrupt(S)
else
return PROCESS_KILL
/obj/item/borg_chameleon/proc/activate(mob/living/silicon/robot/syndicate/saboteur/user)
processing_objects.Add(src)
S = user
user.base_icon = disguise
user.icon_state = disguise
user.cham_proj = src
active = TRUE
user.update_icons()
/obj/item/borg_chameleon/proc/deactivate(mob/living/silicon/robot/syndicate/saboteur/user)
processing_objects.Remove(src)
S = user
user.base_icon = initial(user.base_icon)
user.icon_state = initial(user.icon_state)
active = FALSE
user.update_icons()
/obj/item/borg_chameleon/proc/disrupt(mob/living/silicon/robot/syndicate/saboteur/user)
if(active)
to_chat(user, "<span class='danger'>Your chameleon field deactivates.</span>")
deactivate(user)
+88 -105
View File
@@ -11,6 +11,7 @@
actions_types = list(/datum/action/item_action/toggle_light)
var/on = FALSE
var/brightness_on = 4 //luminosity when on
var/togglesound = 'sound/weapons/empty.ogg'
/obj/item/flashlight/Initialize()
. = ..()
@@ -35,7 +36,7 @@
return 0
on = !on
playsound(user, 'sound/weapons/empty.ogg', 100, 1)
playsound(user, togglesound, 100, 1)
update_brightness(user)
for(var/X in actions)
var/datum/action/A = X
@@ -153,22 +154,24 @@ obj/item/flashlight/lamp/bananalamp
/obj/item/flashlight/flare
name = "flare"
desc = "A red Nanotrasen issued flare. There are instructions on the side, it reads 'pull cord, make light'."
w_class = WEIGHT_CLASS_SMALL
brightness_on = 8 // Made it brighter (from 7 to 8).
light_color = "#ff0000" // changed colour to a more brighter red.
brightness_on = 8
light_color = "#ff0000"
icon_state = "flare"
item_state = "flare"
togglesound = 'sound/goonstation/misc/matchstick_light.ogg'
var/fuel = 0
var/on_damage = 7
var/produce_heat = 1500
var/fuel_lower = 800
var/fuel_upp = 1000
/obj/item/flashlight/flare/New()
fuel = rand(800, 1000) // Sorry for changing this so much but I keep under-estimating how long X number of ticks last in seconds.
fuel = rand(fuel_lower, fuel_upp)
..()
/obj/item/flashlight/flare/process()
var/turf/pos = get_turf(src)
if(pos)
if(pos && produce_heat)
pos.hotspot_expose(produce_heat, 5)
fuel = max(fuel - 1, 0)
if(!fuel || !on)
@@ -177,6 +180,10 @@ obj/item/flashlight/lamp/bananalamp
src.icon_state = "[initial(icon_state)]-empty"
processing_objects -= src
/obj/item/flashlight/flare/Destroy()
processing_objects.Remove(src)
..()
/obj/item/flashlight/flare/proc/turn_off()
on = 0
src.force = initial(src.force)
@@ -207,11 +214,84 @@ obj/item/flashlight/lamp/bananalamp
. = ..()
// All good, turn it on.
if(.)
user.visible_message("<span class='notice'>[user] activates the flare.</span>", "<span class='notice'>You pull the cord on the flare, activating it!</span>")
user.visible_message("<span class='notice'>[user] activates [src].</span>", "<span class='notice'>You activate [src].</span>")
src.force = on_damage
src.damtype = "fire"
processing_objects += src
// GLOWSTICKS
/obj/item/flashlight/flare/glowstick
name = "green glowstick"
desc = "A military-grade glowstick."
brightness_on = 4
color = LIGHT_COLOR_GREEN
icon_state = "glowstick"
item_state = "glowstick"
togglesound = 'sound/effects/bone_break_1.ogg'
produce_heat = 0
fuel_lower = 1600
fuel_upp = 2000
/obj/item/flashlight/flare/glowstick/Initialize()
light_color = color
..()
/obj/item/flashlight/flare/glowstick/update_icon()
item_state = "glowstick"
cut_overlays()
if(!fuel)
icon_state = "glowstick-empty"
cut_overlays()
update_brightness(0)
else if(on)
var/mutable_appearance/glowstick_overlay = mutable_appearance(icon, "glowstick-glow")
glowstick_overlay.color = color
add_overlay(glowstick_overlay)
item_state = "glowstick-on"
update_brightness(brightness_on)
else
icon_state = "glowstick"
cut_overlays()
/obj/item/flashlight/flare/glowstick/red
name = "red glowstick"
color = LIGHT_COLOR_RED
/obj/item/flashlight/flare/glowstick/blue
name = "blue glowstick"
color = LIGHT_COLOR_BLUE
/obj/item/flashlight/flare/glowstick/orange
name = "orange glowstick"
color = LIGHT_COLOR_ORANGE
/obj/item/flashlight/flare/glowstick/yellow
name = "yellow glowstick"
color = LIGHT_COLOR_YELLOW
/obj/item/flashlight/flare/glowstick/pink
name = "pink glowstick"
color = LIGHT_COLOR_PINK
/obj/item/flashlight/flare/glowstick/emergency
name = "emergency glowstick"
desc = "A cheap looking, mass produced glowstick. You can practically feel it was made on a tight budget."
color = LIGHT_COLOR_BLUE
fuel_lower = 30
fuel_upp = 90
/obj/item/flashlight/flare/glowstick/random
name = "random colored glowstick"
icon_state = "random_glowstick"
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
/obj/item/flashlight/flare/torch
name = "torch"
desc = "A torch fashioned from some leaves and a log."
@@ -301,101 +381,4 @@ obj/item/flashlight/lamp/bananalamp
anchored = TRUE
var/range = null
unacidable = TRUE
burn_state = LAVA_PROOF
/obj/item/flashlight/glowstick
name = "green glowstick"
desc = "A military-grade glowstick."
w_class = WEIGHT_CLASS_SMALL
brightness_on = 4
color = LIGHT_COLOR_GREEN
icon_state = "glowstick"
item_state = "glowstick"
var/fuel = 0
/obj/item/flashlight/glowstick/Initialize()
fuel = rand(1600, 2000)
light_color = color
. = ..()
/obj/item/flashlight/glowstick/Destroy()
processing_objects.Remove(src)
. = ..()
/obj/item/flashlight/glowstick/process()
fuel = max(fuel - 1, 0)
if(!fuel)
turn_off()
processing_objects.Remove(src)
update_icon()
/obj/item/flashlight/glowstick/proc/turn_off()
on = FALSE
update_icon()
/obj/item/flashlight/glowstick/update_icon()
item_state = "glowstick"
cut_overlays()
if(!fuel)
icon_state = "glowstick-empty"
cut_overlays()
update_brightness(0)
else if(on)
var/mutable_appearance/glowstick_overlay = mutable_appearance(icon, "glowstick-glow")
glowstick_overlay.color = color
add_overlay(glowstick_overlay)
item_state = "glowstick-on"
update_brightness(brightness_on)
else
icon_state = "glowstick"
cut_overlays()
/obj/item/flashlight/glowstick/attack_self(mob/user)
if(!fuel)
to_chat(user, "<span class='notice'>[src] is spent.</span>")
return
if(on)
to_chat(user, "<span class='notice'>[src] is already lit.</span>")
return
. = ..()
if(.)
user.visible_message("<span class='notice'>[user] cracks and shakes [src].</span>", "<span class='notice'>You crack and shake [src], turning it on!</span>")
activate()
/obj/item/flashlight/glowstick/proc/activate()
if(!on)
on = TRUE
processing_objects.Add(src)
update_icon()
/obj/item/flashlight/glowstick/red
name = "red glowstick"
color = LIGHT_COLOR_RED
/obj/item/flashlight/glowstick/blue
name = "blue glowstick"
color = LIGHT_COLOR_BLUE
/obj/item/flashlight/glowstick/orange
name = "orange glowstick"
color = LIGHT_COLOR_ORANGE
/obj/item/flashlight/glowstick/yellow
name = "yellow glowstick"
color = LIGHT_COLOR_YELLOW
/obj/item/flashlight/glowstick/pink
name = "pink glowstick"
color = LIGHT_COLOR_PINK
/obj/item/flashlight/glowstick/random
name = "random colored glowstick"
icon_state = "random_glowstick"
color = null
/obj/item/flashlight/glowstick/random/Initialize()
..()
var/T = pick(typesof(/obj/item/flashlight/glowstick) - /obj/item/flashlight/glowstick/random)
new T(loc)
return INITIALIZE_HINT_QDEL
burn_state = LAVA_PROOF
@@ -102,4 +102,4 @@
/obj/item/pizza_bomb/autoarm
timer_set = 1
timer = 10
timer = 30 // 3 seconds
@@ -8,6 +8,7 @@
var/emagged = 0
var/syndicate = 0
var/area_bypass = FALSE
var/cc_beacon = FALSE //set if allowed to teleport to even if on zlevel2
/obj/item/radio/beacon/New()
..()
@@ -1,5 +1,5 @@
/obj/item/encryptionkey/
/obj/item/encryptionkey
name = "Standard Encryption Key"
desc = "An encyption key for a radio headset. Contains cypherkeys."
icon = 'icons/obj/radio.dmi'
@@ -256,9 +256,10 @@ var/global/list/default_medbay_channels = list(
break
if(jammed)
message = Gibberish(message, 100)
var/list/message_pieces = message_to_multilingual(message)
Broadcast_Message(connection, A,
0, "*garbled automated announcement*", src,
message, from, "Automated Announcement", from, "synthesized voice",
message_pieces, from, "Automated Announcement", from, "synthesized voice",
4, 0, zlevel, connection.frequency, follow_target = follow_target)
qdel(A)
+17 -1
View File
@@ -25,6 +25,7 @@ var/list/world_uplinks = list()
var/job = null
var/show_descriptions = 0
var/temp_category
var/uplink_type = "traitor"
/obj/item/uplink/nano_host()
return loc
@@ -327,6 +328,21 @@ var/list/world_uplinks = list()
if(hidden_uplink)
hidden_uplink.trigger(user)
/obj/item/radio/uplink/nuclear/New()
..()
if(hidden_uplink)
hidden_uplink.uplink_type = "nuclear"
GLOB.nuclear_uplink_list += src
/obj/item/radio/uplink/nuclear/Destroy()
GLOB.nuclear_uplink_list -= src
return ..()
/obj/item/radio/uplink/sst/New()
..()
if(hidden_uplink)
hidden_uplink.uplink_type = "sst"
/obj/item/multitool/uplink/New()
hidden_uplink = new(src)
@@ -340,4 +356,4 @@ var/list/world_uplinks = list()
/obj/item/radio/headset/uplink/New()
..()
hidden_uplink = new(src)
hidden_uplink.uses = 20
hidden_uplink.uses = 20
+11 -2
View File
@@ -123,6 +123,7 @@
/obj/item/storage/pill_bottle/random_meds
name = "unlabelled pillbottle"
desc = "The sheer recklessness of this bottle's existence astounds you."
var/labelled = FALSE
/obj/item/storage/pill_bottle/random_meds/New()
..()
@@ -137,11 +138,19 @@
P.reagents.add_reagent(R, 10)
else
P.reagents.add_reagent(R, rand(2, 5)*10)
P.name = "Unlabelled Pill"
P.desc = "Something about this pill entices you to try it, against your better judgement."
if(labelled)
P.name = "[R] Pill"
P.desc = "A pill containing [R]."
else
P.name = "Unlabelled Pill"
P.desc = "Something about this pill entices you to try it, against your better judgement."
pixel_x = rand(-10, 10)
pixel_y = rand(-10, 10)
/obj/item/storage/pill_bottle/random_meds/labelled
name = "variety pillbottle"
labelled = TRUE
// -------------------------------------
// Containers full of unknown crap
@@ -58,6 +58,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list(
new /datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("firelock frame", /obj/structure/firelock_frame, 3, time = 50, one_per_turf = 1, on_floor = 1), \
new /datum/stack_recipe("meatspike frame", /obj/structure/kitchenspike_frame, 5, time = 25, one_per_turf = 1, on_floor = 1),
new /datum/stack_recipe("reflector frame", /obj/structure/reflector, 5, time = 25, one_per_turf = 1, on_floor = 1),
null,
new /datum/stack_recipe_list("airlock assemblies", list(
new /datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1),
@@ -38,4 +38,7 @@
amount = 5
/obj/item/stack/telecrystal/twenty
amount = 20
amount = 20
/obj/item/stack/telecrystal/fifty
amount = 50
+41
View File
@@ -1143,6 +1143,37 @@ obj/item/toy/cards/deck/syndicate/black
return
..()
/obj/item/toy/codex_gigas
name = "Toy Codex Gigas"
desc = "A tool to help you write fictional devils!"
icon = 'icons/obj/library.dmi'
icon_state = "demonomicon"
w_class = WEIGHT_CLASS_SMALL
var/cooldown = FALSE
/obj/item/toy/codex_gigas/attack_self(mob/user)
if(!cooldown)
user.visible_message(
"<span class='notice'>[user] presses the button on \the [src].</span>",
"<span class='notice'>You press the button on \the [src].</span>",
"<span class='notice'>You hear a soft click.</span>")
var/list/messages = list()
var/datum/devilinfo/devil = randomDevilInfo()
messages += "Some fun facts about: [devil.truename]"
messages += "[lawlorify[LORE][devil.bane]]"
messages += "[lawlorify[LORE][devil.obligation]]"
messages += "[lawlorify[LORE][devil.ban]]"
messages += "[lawlorify[LORE][devil.banish]]"
playsound(loc, 'sound/machines/click.ogg', 20, 1)
cooldown = TRUE
for(var/message in messages)
user.loc.visible_message("<span class='danger'>[bicon(src)] [message]</span>")
sleep(10)
spawn(20)
cooldown = FALSE
return
..()
/obj/item/toy/owl
name = "owl action figure"
desc = "An action figure modeled after 'The Owl', defender of justice."
@@ -1650,3 +1681,13 @@ obj/item/toy/cards/deck/syndicate/black
icon_state = "conch"
use_action = "pulls the string"
possible_answers = list("Yes.", "No.", "Try asking again.", "Nothing.", "I don't think so.", "Neither.", "Maybe someday.")
/*
*Fake cuffs (honk honk)
*/
/obj/item/restraints/handcuffs/toy
desc = "Toy handcuffs. Plastic and extremely cheaply made."
throwforce = 0
breakouttime = 0
ignoresClumsy = TRUE
+9 -5
View File
@@ -456,20 +456,24 @@ GLOBAL_LIST_INIT(rcd_door_types, list(
/obj/item/rcd/proc/checkResource(amount, mob/user)
return matter >= amount
/obj/item/rcd/borg
canRwall = 1
var/use_multiplier = 160
/obj/item/rcd/borg/syndicate
use_multiplier = 80
/obj/item/rcd/borg/useResource(amount, mob/user)
if(!isrobot(user))
return 0
var/mob/living/silicon/robot/R = user
return R.cell.use(amount * 160)
return R.cell.use(amount * use_multiplier)
/obj/item/rcd/borg/checkResource(amount, mob/user)
if(!isrobot(user))
return 0
var/mob/living/silicon/robot/R = user
return R.cell.charge >= (amount * 160)
/obj/item/rcd/borg
canRwall = 1
return R.cell.charge >= (amount * use_multiplier)
/obj/item/rcd/proc/detonate_pulse()
audible_message("<span class='danger'><b>[src] begins to vibrate and \
@@ -319,6 +319,10 @@
name = "agent card"
initial_access = list(access_maint_tunnels, access_vox, access_external_airlocks)
/obj/item/card/id/syndicate/command
initial_access = list(access_maint_tunnels, access_syndicate, access_syndicate_leader, access_syndicate_command, access_external_airlocks)
icon_state = "commander"
/obj/item/card/id/syndicate/afterattack(var/obj/item/O as obj, mob/user as mob, proximity)
if(!proximity)
return
+2 -2
View File
@@ -196,7 +196,7 @@ LIGHTERS ARE IN LIGHTERS.DM
if(is_being_smoked) // if it's being smoked, transfer reagents to the mob
var/mob/living/carbon/C = loc
for (var/datum/reagent/R in reagents.reagent_list)
reagents.trans_to(C, REAGENTS_METABOLISM)
reagents.trans_id_to(C, R.id, max(REAGENTS_METABOLISM / reagents.reagent_list.len, 0.1)) //transfer at least .1 of each chem
if(!reagents.total_volume) // There were reagents, but now they're gone
to_chat(C, "<span class='notice'>Your [name] loses its flavor.</span>")
else // else just remove some of the reagents
@@ -232,7 +232,7 @@ LIGHTERS ARE IN LIGHTERS.DM
type_butt = /obj/item/cigbutt/roach
throw_speed = 0.5
item_state = "spliffoff"
smoketime = 180
smoketime = 250
chem_volume = 100
/obj/item/clothing/mask/cigarette/rollie/New()
+3 -3
View File
@@ -405,7 +405,7 @@
for(var/obj/item/organ/external/O in H.bodyparts)
total_brute += O.brute_dam
total_burn += O.burn_dam
if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !(NOCLONE in H.mutations) && (H.get_int_organ(/obj/item/organ/internal/heart) || H.get_int_organ(/obj/item/organ/internal/brain/slime)))
if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !(NOCLONE in H.mutations) && (H.mind && H.mind.is_revivable()) && (H.get_int_organ(/obj/item/organ/internal/heart) || H.get_int_organ(/obj/item/organ/internal/brain/slime)))
tobehealed = min(health + threshold, 0) // It's HILARIOUS without this min statement, let me tell you
tobehealed -= 5 //They get 5 of each type of damage healed so excessive combined damage will not immediately kill them after they get revived
H.adjustOxyLoss(tobehealed)
@@ -512,7 +512,7 @@
var/total_burn = 0
var/total_brute = 0
if(do_after(user, 20 * toolspeed, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
if(H.stat == 2)
if(H.stat == DEAD)
var/health = H.health
M.visible_message("<span class='warning'>[M]'s body convulses a bit.")
playsound(get_turf(src), "bodyfall", 50, 1)
@@ -520,7 +520,7 @@
for(var/obj/item/organ/external/O in H.bodyparts)
total_brute += O.brute_dam
total_burn += O.burn_dam
if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !(NOCLONE in H.mutations))
if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !(NOCLONE in H.mutations) && (H.mind && H.mind.is_revivable()))
tobehealed = min(health + threshold, 0) // It's HILARIOUS without this min statement, let me tell you
tobehealed -= 5 //They get 5 of each type of damage healed so excessive combined damage will not immediately kill them after they get revived
H.adjustOxyLoss(tobehealed)
@@ -121,7 +121,7 @@
var/attack_log = "injected with the Isolated [name]"
if(buf.types & DNA2_BUF_SE)
if(buf && buf.types & DNA2_BUF_SE)
if(block)
if(GetState() && block == MONKEYBLOCK && ishuman(M))
attack_log = "injected with the Isolated [name] (MONKEY)"
@@ -109,6 +109,8 @@
message_say = "FOR THE REVOLOUTION!"
else if(role == "death commando" || role == ROLE_ERT)
message_say = "FOR NANOTRASEN!"
else if(role == ROLE_DEVIL)
message_say = "FOR INFERNO!"
user.say(message_say)
target = user
sleep(10)
@@ -2,7 +2,7 @@
/obj/item/grenade/gas
name = "Plasma Fire Grenade"
name = "plasma fire grenade"
desc = "A compressed plasma grenade, used to start horrific plasma fires."
origin_tech = "materials=3;magnets=4;syndicate=3"
icon = 'icons/obj/grenade.dmi'
@@ -18,7 +18,33 @@
target_turf.air_update_turf()
qdel(src)
/obj/item/grenade/gas/plasma
icon_state = "plasma"
/obj/item/grenade/gas/knockout
name = "Knockout Grenade"
name = "knockout grenade"
desc = "A grenade that completely removes all air and heat from its detonation area."
spawn_contents = SPAWN_20C | SPAWN_N2O
spawn_contents = SPAWN_20C | SPAWN_N2O
/obj/item/grenade/gluon
desc = "An advanced grenade that releases a harmful stream of gluons inducing radiation in those nearby. These gluon streams will also make victims feel exhausted, and induce shivering. This extreme coldness will also wet any nearby floors."
name = "gluon grenade"
icon = 'icons/obj/grenade.dmi'
icon_state = "gluon"
item_state = "flashbang"
var/range = 4
var/rad_damage = 60
var/stamina_damage = 30
/obj/item/grenade/gluon/prime()
update_mob()
playsound(loc, 'sound/effects/empulse.ogg', 50, 1)
for(var/turf/T in view(range, loc))
if(isfloorturf(T))
var/turf/simulated/F = T
F.MakeSlippery(TURF_WET_PERMAFROST)
for(var/mob/living/carbon/L in T)
L.adjustStaminaLoss(stamina_damage)
L.apply_effect(rad_damage, IRRADIATE)
L.adjust_bodytemperature(-230)
qdel(src)
@@ -526,20 +526,20 @@
update_icon()
/obj/item/grenade/chem_grenade/facid
name = "acid grenade"
desc = "Used for melting armoured opponents."
payload_name = "acid smoke"
desc = "Use to chew up opponents from the inside out."
stage = READY
/obj/item/grenade/chem_grenade/facid/New()
..()
var/obj/item/reagent_containers/glass/beaker/bluespace/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/bluespace/B2 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B1 = new(src)
var/obj/item/reagent_containers/glass/beaker/large/B2 = new(src)
B1.reagents.add_reagent("facid", 280)
B1.reagents.add_reagent("facid", 80)
B1.reagents.add_reagent("potassium", 20)
B2.reagents.add_reagent("phosphorus", 20)
B2.reagents.add_reagent("sugar", 20)
B2.reagents.add_reagent("facid", 260)
B2.reagents.add_reagent("facid", 60)
beakers += B1
beakers += B2
@@ -104,7 +104,7 @@
payload = /obj/item/grenade/chem_grenade/cleaner
/obj/item/grenade/clusterbuster/teargas
name = "Oignon Grenade"
name = "Oignon Teargas Grenade"
payload = /obj/item/grenade/chem_grenade/teargas
/obj/item/grenade/clusterbuster/facid
@@ -53,7 +53,7 @@
//Bang
if((loc == M) || loc == M.loc)//Holding on person or being exactly where lies is significantly more dangerous and voids protection
if(get_turf(M) == get_turf(src))//Holding on person or being exactly where lies is significantly more dangerous and voids protection
M.Stun(10)
M.Weaken(10)
if(!ear_safety)
@@ -0,0 +1,50 @@
/obj/item/grenade/frag
name = "frag grenade"
desc = "Fire in the hole."
icon_state = "frag"
item_state = "flashbang"
origin_tech = "materials=3;magnets=4"
var/range = 5
var/max_shrapnel = 4
var/embed_prob = 100 //reduced by armor
var/embedded_type = /obj/item/embedded/shrapnel
/obj/item/grenade/frag/prime()
update_mob()
var/turf/epicenter = get_turf(src)
for(var/mob/living/carbon/human/H in epicenter)
if(H.resting) //grenade is jumped on but get real fucked up
embed_shrapnel(H, max_shrapnel)
range = 1
explosion(loc, 0, 1, range, breach = FALSE)
for(var/turf/T in view(range, loc))
for(var/mob/living/carbon/human/H in T)
var/shrapnel_amount = max_shrapnel - T.Distance(epicenter)
if(shrapnel_amount > 0)
embed_shrapnel(H, shrapnel_amount)
qdel(src)
/obj/item/grenade/frag/proc/embed_shrapnel(mob/living/carbon/human/H, amount)
for(var/i = 0, i < amount, i++)
if(prob(embed_prob - H.getarmor(null, "bomb")))
var/obj/item/embedded/S = new embedded_type(src)
H.hitby(S, skipcatch = 1)
S.throwforce = 1
S.throw_speed = 1
S.sharp = FALSE
else
to_chat(H, "<span class='warning'>Shrapnel bounces off your armor!</span>")
/obj/item/embedded/shrapnel
name = "shrapnel"
icon = 'icons/obj/shards.dmi'
throwforce = 10
throw_speed = EMBED_THROWSPEED_THRESHOLD
embed_chance = 100
embedded_fall_chance = 0
w_class = WEIGHT_CLASS_SMALL
sharp = TRUE
hitsound = 'sound/weapons/pierce.ogg'
/obj/item/embedded/shrapnel/New()
icon_state = pick("shrapnel1", "shrapnel2", "shrapnel3")
@@ -8,5 +8,5 @@
/obj/item/grenade/syndieminibomb/prime()
update_mob()
explosion(src.loc,1,2,4,flame_range = 2)
qdel(src)
explosion(loc, 1, 2, 4, flame_range = 2)
qdel(src)
+2 -1
View File
@@ -15,6 +15,7 @@
breakouttime = 600 //Deciseconds = 60s = 1 minutes
var/cuffsound = 'sound/weapons/handcuffs.ogg'
var/trashtype = null //For disposable cuffs
var/ignoresClumsy = FALSE
/obj/item/restraints/handcuffs/attack(mob/living/carbon/C, mob/user)
if(!user.IsAdvancedToolUser())
@@ -23,7 +24,7 @@
if(!istype(C))
return
if(CLUMSY in user.mutations && prob(50))
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)
@@ -448,6 +448,7 @@
if(praying)
to_chat(user, "<span class='notice'>You are already using [src].</span>")
return
user.visible_message("<span class='info'>[user] kneels[M == user ? null : " next to [M]"] and begins to utter a prayer to [ticker.Bible_deity_name].</span>", \
"<span class='info'>You kneel[M == user ? null : " next to [M]"] and begin a prayer to [ticker.Bible_deity_name].</span>")
@@ -10,6 +10,16 @@
hidden_uplink.uses = 10
..()
/obj/item/implant/uplink/sit/New()
..()
if(hidden_uplink)
hidden_uplink.uplink_type = "sit"
/obj/item/implant/uplink/admin/New()
..()
if(hidden_uplink)
hidden_uplink.uplink_type = "admin"
/obj/item/implant/uplink/implant(mob/source)
var/obj/item/implant/imp_e = locate(src.type) in source
if(imp_e && imp_e != src)
@@ -8,6 +8,7 @@
* Butcher's cleaver
* Rolling Pins
* Candy Moulds
* Sushi Mat
*/
/obj/item/kitchen
@@ -249,3 +250,17 @@
name = "sucker mould"
desc = "It has the shape of a sucker imprinted into it."
icon_state = "mould_loli"
/*
* Sushi Mat
*/
/obj/item/kitchen/sushimat
name = "Sushi Mat"
desc = "A wooden mat used for efficient sushi crafting."
icon_state = "sushi_mat"
force = 5
throwforce = 5
throw_speed = 3
throw_range = 3
w_class = WEIGHT_CLASS_SMALL
attack_verb = list("rolled", "cracked", "battered", "thrashed")
+23 -3
View File
@@ -30,6 +30,9 @@
var/whatdpipe = PIPE_DISPOSALS_STRAIGHT //What kind of disposals pipe is it?
var/spawndelay = RPD_COOLDOWN_TIME
var/walldelay = RPD_WALLBUILD_TIME
var/ranged = FALSE
var/primary_sound = 'sound/machines/click.ogg'
var/alt_sound = null
/obj/item/rpd/New()
..()
@@ -41,11 +44,24 @@
QDEL_NULL(spark_system)
return ..()
/obj/item/rpd/bluespace
name = "bluespace rapid pipe dispenser"
desc = "This device can rapidly dispense atmospherics and disposals piping, manipulate loose piping, and recycle any detached pipes it is applied to, at any range."
icon_state = "brpd"
materials = list(MAT_METAL = 75000, MAT_GLASS = 37500, MAT_SILVER = 3000)
origin_tech = "engineering=4;materials=2;bluespace=3"
ranged = TRUE
primary_sound = 'sound/items/PSHOOM.ogg'
alt_sound = 'sound/items/PSHOOM_2.ogg'
//Procs
/obj/item/rpd/proc/activate_rpd(delay) //Maybe makes sparks and activates cooldown if there is a delay
playsound(loc, "sound/machines/click.ogg", 50, 1)
if(prob(15))
if(alt_sound && prob(3))
playsound(src, alt_sound, 50, 1)
else
playsound(src, primary_sound, 50, 1)
if(prob(15) && !ranged)
spark_system.start()
if(delay)
lastused = world.time
@@ -188,7 +204,7 @@ var/list/pipemenu = list(
..()
if(loc != user)
return
if(!proximity)
if(!proximity && !ranged)
return
if(world.time < lastused + spawndelay)
return
@@ -201,6 +217,8 @@ var/list/pipemenu = list(
if(target.rpd_act(user, src) == TRUE)
// If the object we are clicking on has a valid RPD interaction for just that specific object, do that and nothing else.
// Example: clicking on a pipe with a RPD in rotate mode should rotate that pipe and ignore everything else on the tile.
if(ranged)
user.Beam(T, icon_state="rped_upgrade", icon='icons/effects/effects.dmi', time=5)
return
// If we get this far, we have to check every object in the tile, to make sure that none of them block RPD usage on this tile.
@@ -212,6 +230,8 @@ var/list/pipemenu = list(
return
// If we get here, then we're effectively acting on the turf, probably placing a pipe.
if(ranged) //woosh beam if bluespaced at a distance
user.Beam(T,icon_state="rped_upgrade", icon='icons/effects/effects.dmi', time=5)
T.rpd_act(user, src)
#undef RPD_COOLDOWN_TIME
@@ -98,6 +98,7 @@
new /obj/item/clothing/mask/gas/voice/clown(src)
new /obj/item/radio/headset/headset_service(src)
new /obj/item/pda/clown(src)
new /obj/item/storage/box/survival(src)
new /obj/item/reagent_containers/food/snacks/grown/banana(src)
new /obj/item/stamp/clown(src)
new /obj/item/toy/crayon/rainbow(src)
@@ -88,7 +88,7 @@
update_icon()
/obj/item/storage/belt/utility/chief
name = "Chief Engineer's toolbelt"
name = "advanced toolbelt"
desc = "Holds tools, looks snazzy"
icon_state = "utilitybelt_ce"
item_state = "utility_ce"
@@ -139,7 +139,7 @@
max_w_class = WEIGHT_CLASS_NORMAL
max_combined_w_class = 17
use_to_pickup = 1
name = "Surgical Belt"
name = "surgical belt"
desc = "Can hold various surgical tools."
storage_slots = 9
use_item_overlays = 1
@@ -302,6 +302,48 @@
item_state = "utility"
use_item_overlays = 1 // So it will still show tools in it in case sec get lazy and just glance at it.
/obj/item/storage/belt/grenade
name = "grenadier belt"
desc = "A belt for holding grenades."
icon_state = "assaultbelt"
item_state = "assault"
storage_slots = 30
max_combined_w_class = 60
display_contents_with_number = 1
can_hold = list(
/obj/item/grenade,
/obj/item/lighter,
/obj/item/reagent_containers/food/drinks/bottle/molotov
)
/obj/item/storage/belt/grenade/full/New()
..()
new /obj/item/grenade/smokebomb(src) //4
new /obj/item/grenade/smokebomb(src)
new /obj/item/grenade/smokebomb(src)
new /obj/item/grenade/smokebomb(src)
new /obj/item/grenade/empgrenade(src) //2
new /obj/item/grenade/empgrenade(src)
new /obj/item/grenade/gluon(src) //4
new /obj/item/grenade/gluon(src)
new /obj/item/grenade/gluon(src)
new /obj/item/grenade/gluon(src)
new /obj/item/grenade/chem_grenade/facid(src) //1
new /obj/item/grenade/gas/plasma(src) //2
new /obj/item/grenade/gas/plasma(src)
new /obj/item/grenade/frag(src) //10
new /obj/item/grenade/frag(src)
new /obj/item/grenade/frag(src)
new /obj/item/grenade/frag(src)
new /obj/item/grenade/frag(src)
new /obj/item/grenade/frag(src)
new /obj/item/grenade/frag(src)
new /obj/item/grenade/frag(src)
new /obj/item/grenade/frag(src)
new /obj/item/grenade/frag(src)
new /obj/item/grenade/syndieminibomb(src) //2
new /obj/item/grenade/syndieminibomb(src)
/obj/item/storage/belt/military/abductor
name = "agent belt"
desc = "A belt used by abductor agents."
@@ -72,10 +72,11 @@
new /obj/item/clothing/mask/breath( src )
new /obj/item/tank/emergency_oxygen( src )
new /obj/item/reagent_containers/hypospray/autoinjector( src )
new /obj/item/flashlight/flare/glowstick/emergency( src )
return
/obj/item/storage/box/survival_vox
icon_state = "box_civ"
icon_state = "box_vox"
/obj/item/storage/box/survival_vox/New()
..()
@@ -83,9 +84,10 @@
new /obj/item/clothing/mask/breath/vox(src)
new /obj/item/tank/emergency_oxygen/nitrogen(src)
new /obj/item/reagent_containers/hypospray/autoinjector(src)
new /obj/item/flashlight/flare/glowstick/emergency(src)
/obj/item/storage/box/survival_plasmaman
icon_state = "box_civ"
icon_state = "box_plasma"
/obj/item/storage/box/survival_plasmaman/New()
..()
@@ -93,6 +95,7 @@
new /obj/item/clothing/mask/breath(src)
new /obj/item/tank/emergency_oxygen/plasma(src)
new /obj/item/reagent_containers/hypospray/autoinjector(src)
new /obj/item/flashlight/flare/glowstick/emergency(src)
/obj/item/storage/box/engineer
icon_state = "box_eng"
@@ -102,6 +105,7 @@
new /obj/item/clothing/mask/breath( src )
new /obj/item/tank/emergency_oxygen/engi( src )
new /obj/item/reagent_containers/hypospray/autoinjector( src )
new /obj/item/flashlight/flare/glowstick/emergency( src )
return
/obj/item/storage/box/survival_mining
@@ -113,6 +117,18 @@
new /obj/item/tank/emergency_oxygen/engi(src)
new /obj/item/crowbar/red(src)
new /obj/item/reagent_containers/hypospray/autoinjector(src)
new /obj/item/flashlight/flare/glowstick/emergency(src)
/obj/item/storage/box/survival_syndi
icon_state = "box_syndi"
New()
..()
contents = list()
new /obj/item/clothing/mask/gas/syndicate(src)
new /obj/item/tank/emergency_oxygen/syndi(src)
new /obj/item/reagent_containers/hypospray/autoinjector(src)
new /obj/item/reagent_containers/food/pill/initropidril(src)
new /obj/item/flashlight/flare/glowstick/red(src)
/obj/item/storage/box/gloves
name = "box of latex gloves"
@@ -664,6 +680,56 @@
new /obj/item/clothing/head/syndicatefake(src)
new /obj/item/clothing/suit/syndicatefake(src)
/obj/item/storage/box/enforcer_rubber
name = "enforcer pistol kit (rubber)"
desc = "A box marked with pictures of an enforcer pistol, two ammo clips, and the word 'NON-LETHAL'."
icon_state = "box_ert"
/obj/item/storage/box/enforcer_rubber/New()
..()
new /obj/item/gun/projectile/automatic/pistol/enforcer(src) // loaded with rubber by default
new /obj/item/ammo_box/magazine/enforcer(src)
new /obj/item/ammo_box/magazine/enforcer(src)
/obj/item/storage/box/enforcer_lethal
name = "enforcer pistol kit (lethal)"
desc = "A box marked with pictures of an enforcer pistol, two ammo clips, and the word 'LETHAL'."
icon_state = "box_ert"
/obj/item/storage/box/enforcer_lethal/New()
..()
new /obj/item/gun/projectile/automatic/pistol/enforcer/lethal(src)
new /obj/item/ammo_box/magazine/enforcer/lethal(src)
new /obj/item/ammo_box/magazine/enforcer/lethal(src)
/obj/item/storage/box/bartender_rare_ingredients_kit
name = "bartender rare reagents kit"
desc = "A box intended for experienced bartenders."
/obj/item/storage/box/bartender_rare_ingredients_kit/New()
..()
var/list/reagent_list = list("sacid", "radium", "ether", "methamphetamine", "plasma", "gold", "silver", "capsaicin", "psilocybin")
for(var/reag in reagent_list)
var/obj/item/reagent_containers/glass/bottle/B = new(src)
B.reagents.add_reagent(reag, 30)
B.name = "[reag] bottle"
/obj/item/storage/box/chef_rare_ingredients_kit
name = "chef rare reagents kit"
desc = "A box intended for experienced chefs."
/obj/item/storage/box/chef_rare_ingredients_kit/New()
..()
new /obj/item/reagent_containers/food/condiment/soysauce(src)
new /obj/item/reagent_containers/food/condiment/enzyme(src)
new /obj/item/reagent_containers/food/condiment/pack/hotsauce(src)
new /obj/item/kitchen/knife/butcher(src)
var/list/reagent_list = list("msg", "triple_citrus", "salglu_solution", "nutriment", "gravy", "honey", "vitfro")
for(var/reag in reagent_list)
var/obj/item/reagent_containers/glass/bottle/B = new(src)
B.reagents.add_reagent(reag, 30)
B.name = "[reag] bottle"
/obj/item/storage/box/mousetraps
name = "box of Pest-B-Gon mousetraps"
desc = "<B><FONT color='red'>WARNING:</FONT></B> <I>Keep out of reach of children</I>."
@@ -330,3 +330,9 @@
new /obj/item/reagent_containers/food/pill/salicylic(src)
new /obj/item/reagent_containers/food/pill/salicylic(src)
new /obj/item/reagent_containers/food/pill/salicylic(src)
/obj/item/storage/pill_bottle/fakedeath/New()
..()
new /obj/item/reagent_containers/food/pill/fakedeath(src)
new /obj/item/reagent_containers/food/pill/fakedeath(src)
new /obj/item/reagent_containers/food/pill/fakedeath(src)
@@ -94,15 +94,11 @@
new /obj/item/multitool(src)
new /obj/item/clothing/gloves/combat(src)
/obj/item/storage/toolbox/syndicate/trapped
name = "suspicious looking toolbox"
desc = "Danger. Very robust. Has a small red marker by the handle."
/obj/item/storage/toolbox/syndicate/trapped/New()
..()
new /obj/item/grenade/chem_grenade/explosion/mine_armed(src)
/obj/item/storage/toolbox/fakesyndi
name = "suspicous looking toolbox"
icon_state = "syndicate"
item_state = "toolbox_syndi"
desc = "Danger. Very Robust. The paint is still wet."
/obj/item/storage/toolbox/drone
name = "mechanical toolbox"
@@ -1,85 +1,108 @@
/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)))
if("bloodyspai")
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/gas/voice(src)
new /obj/item/clothing/under/chameleon(src)
new /obj/item/card/id/syndicate(src)
new /obj/item/storage/box/syndie_kit/emp(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
if("thief")
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/syndigaloshes(src)
new /obj/item/storage/box/syndie_kit/safecracking(src)
return
if("bond")
if("bond") // 29TC + Healing Cocktail
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/storage/fancy/cigarettes/cigpack_syndicate(src)
new /obj/item/implanter/krav_maga(src)
new /obj/item/reagent_containers/food/drinks/drinkingglass/alliescocktail(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)
return
if("sabotage")
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/storage/box/syndie_kit/space(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("payday")
if("payday") // 32TC
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/x4(src)
new /obj/item/card/id/syndicate(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("implant")
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("hacker")
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("darklord")
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/syndigaloshes(src)
new /obj/item/clothing/mask/gas/voice(src)
return
if("gadgets")
if("gadgets") // 30TC
new /obj/item/clothing/gloves/color/yellow/power(src)
new /obj/item/pen/sleepy(src)
new /obj/item/clothing/shoes/syndigaloshes(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
new /obj/item/flashlight/emp(src)
new /obj/item/clothing/shoes/syndigaloshes(src)
new /obj/item/stamp/chameleon(src)
new /obj/item/multitool/ai_detect(src)
return
if("professional") // 30TC
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(src)
new /obj/item/storage/toolbox/syndicate(src)
new /obj/item/clothing/under/suit_jacket(src)
return
/obj/item/storage/box/syndie_kit
name = "Box"
desc = "A sleek, sturdy box"
@@ -207,12 +230,12 @@
/obj/item/storage/box/syndie_kit/caneshotgun/New()
..()
new /obj/item/ammo_casing/shotgun/dart/assassination(src)
new /obj/item/ammo_casing/shotgun/dart/assassination(src)
new /obj/item/ammo_casing/shotgun/dart/assassination(src)
new /obj/item/ammo_casing/shotgun/dart/assassination(src)
new /obj/item/ammo_casing/shotgun/dart/assassination(src)
new /obj/item/ammo_casing/shotgun/dart/assassination(src)
new /obj/item/ammo_casing/shotgun/assassination(src)
new /obj/item/ammo_casing/shotgun/assassination(src)
new /obj/item/ammo_casing/shotgun/assassination(src)
new /obj/item/ammo_casing/shotgun/assassination(src)
new /obj/item/ammo_casing/shotgun/assassination(src)
new /obj/item/ammo_casing/shotgun/assassination(src)
new /obj/item/gun/projectile/revolver/doublebarrel/improvised/cane(src)
/obj/item/storage/box/syndie_kit/mimery
@@ -283,4 +306,4 @@ To apply, hold the injector a short distance away from the outer thigh before ap
new /obj/item/clothing/gloves/color/latex/nitrile(src)
new /obj/item/clothing/mask/balaclava(src)
new /obj/item/clothing/accessory/stethoscope(src)
new /obj/item/book/manual/engineering_hacking(src)
new /obj/item/book/manual/engineering_hacking(src)
@@ -27,6 +27,9 @@
to_chat(user, text("<span class='danger'>The meter on the [src.name] indicates you are almost out of air!</span>"))
//playsound(usr, 'sound/effects/alert.ogg', 50, 1)
obj/item/tank/oxygen/empty/New()
..()
air_contents.oxygen = null
/obj/item/tank/oxygen/yellow
desc = "A tank of oxygen, this one is yellow."
@@ -142,11 +145,19 @@
to_chat(user, text("<span class='danger'>The meter on the [src.name] indicates you are almost out of air!</span>"))
user << sound('sound/effects/alert.ogg')
obj/item/tank/emergency_oxygen/empty/New()
..()
air_contents.oxygen = null
/obj/item/tank/emergency_oxygen/engi
name = "extended-capacity emergency oxygen tank"
icon_state = "emergency_engi"
volume = 6
obj/item/tank/emergency_oxygen/engi/empty/New()
..()
air_contents.oxygen = null
/obj/item/tank/emergency_oxygen/syndi
name = "suspicious emergency oxygen tank"
icon_state = "emergency_syndi"
@@ -158,6 +169,10 @@
icon_state = "emergency_double"
volume = 10
obj/item/tank/emergency_oxygen/double/empty/New()
..()
air_contents.oxygen = null
/obj/item/tank/emergency_oxygen/double/full
name = "pressurized double emergency oxygen tank"
desc = "Used for \"emergencies,\" it actually contains a fair amount of oxygen."
+73 -1
View File
@@ -206,6 +206,7 @@
throw_speed = 1
throw_range = 5
w_class = WEIGHT_CLASS_SMALL
var/w_class_on = WEIGHT_CLASS_BULKY
force_unwielded = 3
force_wielded = 34
wieldsound = 'sound/weapons/saberon.ogg'
@@ -277,6 +278,7 @@
/obj/item/twohanded/dualsaber/unwield()
..()
hitsound = "swing_hit"
w_class = initial(w_class)
/obj/item/twohanded/dualsaber/IsReflect()
if(wielded)
@@ -288,6 +290,7 @@
return
..()
hitsound = 'sound/weapons/blade1.ogg'
w_class = w_class_on
/obj/item/twohanded/dualsaber/attackby(obj/item/W, mob/user, params)
if(ismultitool(W))
@@ -755,4 +758,73 @@
qdel(A)
if(prob(4))
charged++
user.visible_message("<span class='notice'>The axe starts to emit an electric buzz!</span>")
user.visible_message("<span class='notice'>The axe starts to emit an electric buzz!</span>")
/obj/item/twohanded/pitchfork
icon_state = "pitchfork0"
name = "pitchfork"
desc = "A simple tool used for moving hay."
force = 7
throwforce = 15
w_class = WEIGHT_CLASS_BULKY
force_unwielded = 7
force_wielded = 15
attack_verb = list("attacked", "impaled", "pierced")
hitsound = 'sound/weapons/bladeslice.ogg'
/obj/item/twohanded/pitchfork/demonic
name = "demonic pitchfork"
desc = "A red pitchfork, it looks like the work of the devil."
force = 19
throwforce = 24
force_unwielded = 19
force_wielded = 25
/obj/item/twohanded/pitchfork/demonic/greater
force = 24
throwforce = 50
force_unwielded = 24
force_wielded = 34
/obj/item/twohanded/pitchfork/demonic/ascended
force = 100
throwforce = 100
force_unwielded = 100
force_wielded = 500000 // Kills you DEAD.
/obj/item/twohanded/pitchfork/update_icon()
icon_state = "pitchfork[wielded]"
/obj/item/twohanded/pitchfork/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] impales \himself in \his abdomen with [src]! It looks like \he's trying to commit suicide...</span>")
return (BRUTELOSS)
/obj/item/twohanded/pitchfork/demonic/pickup(mob/user)
if(istype(user, /mob/living))
var/mob/living/U = user
if(U.mind && !U.mind.devilinfo && (U.mind.soulOwner == U.mind)) //Burn hands unless they are a devil or have sold their soul
U.visible_message("<span class='warning'>As [U] picks [src] up, [U]'s arms briefly catch fire.</span>", \
"<span class='warning'>\"As you pick up the [src] your arms ignite, reminding you of all your past sins.\"</span>")
if(ishuman(U))
var/mob/living/carbon/human/H = U
H.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm"))
else
U.adjustFireLoss(rand(force/2,force))
/obj/item/twohanded/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user)
if(user.mind && !user.mind.devilinfo && (user.mind.soulOwner != user.mind))
to_chat(user, "<span class ='warning'>The [src] burns in your hands.</span>")
user.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm"))
..()
// It's no fun being the lord of all hell if you can't get out of a simple room
/obj/item/twohanded/pitchfork/demonic/ascended/afterattack(atom/target, mob/user, proximity)
if(!proximity || !wielded)
return
if(istype(target, /turf/simulated/wall))
var/turf/simulated/wall/W = target
user.visible_message("<span class='danger'>[user] blasts \the [target] with \the [src]!</span>")
playsound(target, 'sound/magic/Disintegrate.ogg', 100, 1)
W.devastate_wall(TRUE)
return 1
..()