# Conflicts:
#	code/defines/procs/announce.dm
#	code/modules/events/mass_hallucination.dm
This commit is contained in:
Markolie
2016-10-31 14:46:58 +01:00
191 changed files with 3112 additions and 3434 deletions
+4 -4
View File
@@ -236,10 +236,10 @@
var/mob/living/carbon/human/C = target
user.visible_message("<span class='danger'> [user] sprays [src] into the face of [target]!</span>")
if(C.client)
C.eye_blurry = max(C.eye_blurry, 3)
C.eye_blind = max(C.eye_blind, 1)
C.EyeBlurry(3)
C.EyeBlind(1)
if(C.check_eye_prot() <= 0) // no eye protection? ARGH IT BURNS.
C.confused = max(C.confused, 3)
C.Confused(3)
C.Weaken(3)
C.lip_style = "spray_face"
C.lip_color = colour
@@ -251,4 +251,4 @@
overlays.Cut()
var/image/I = image('icons/obj/crayons.dmi',icon_state = "[capped ? "spraycan_cap_colors" : "spraycan_colors"]")
I.color = colour
overlays += I
overlays += I
@@ -55,7 +55,7 @@
interact(user)
/obj/item/device/camera_bug/check_eye(var/mob/user as mob)
if(user.stat || loc != user || !user.canmove || user.eye_blind || !current)
if(user.stat || loc != user || !user.canmove || !user.can_see() || !current)
user.reset_view(null)
user.unset_machine()
return null
+2 -2
View File
@@ -81,7 +81,7 @@
if(M.weakeyes)
M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash
if(M.flash_eyes(1, 1))
M.confused += power
M.AdjustConfused(power)
terrible_conversion_proc(M, user)
M.Stun(1)
visible_message("<span class='disarm'>[user] blinds [M] with the flash!</span>")
@@ -96,7 +96,7 @@
to_chat(M, "<span class='danger'>[user] fails to blind you with the flash!</span>")
else
if(M.flash_eyes())
M.confused += power
M.AdjustConfused(power)
/obj/item/device/flash/attack(mob/living/M, mob/user)
if(!try_use_flash(user))
+3 -3
View File
@@ -91,7 +91,7 @@
G.state = GRAB_NECK
G.hud.icon_state = "kill"
G.hud.name = "kill"
M.silent += 1
M.AdjustSilence(1)
garrote_time = world.time + 10
processing_objects.Add(src)
@@ -152,11 +152,11 @@
return
strangling.silent = max(strangling.silent, 3) // Non-improvised effects
strangling.Silence(3) // Non-improvised effects
strangling.apply_damage(4, OXY, "head")
/obj/item/weapon/twohanded/garrote/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is wrapping the [src] around \his neck and pulling the handles! It looks like \he's trying to commit suicide.</span>")
playsound(src.loc, 'sound/weapons/cablecuff.ogg', 15, 1, -1)
return (OXYLOSS)
return (OXYLOSS)
@@ -51,12 +51,13 @@
if(!ear_safety)
M.Stun(max(10/distance, 3))
M.Weaken(max(10/distance, 3))
M.setEarDamage(M.ear_damage + rand(0, 5), max(M.ear_deaf,15))
M.EarDeaf(15)
M.AdjustEarDamage(rand(0, 5))
if(M.ear_damage >= 15)
to_chat(M, "<span class='warning'>Your ears start to ring badly!</span>")
if(prob(M.ear_damage - 10 + 5))
if(prob(M.ear_damage - 5))
to_chat(M, "<span class='warning'>You can't hear anything!</span>")
M.disabilities |= DEAF
M.BecomeDeaf()
else
if(M.ear_damage >= 5)
to_chat(M, "<span class='warning'>Your ears start to ring!</span>")
+1 -1
View File
@@ -115,7 +115,7 @@
if(do_after(user, 50, target = H))
playsound(loc, "sound/weapons/bladeslice.ogg", 50, 1, -1)
user.visible_message("<span class='danger'>[user] abruptly stops cutting [M]'s hair and slices their throat!</span>", "<span class='danger'>You stop cutting [M]'s hair and slice their throat!</span>") //Just a little off the top.
H.losebreath += 10 //30 Oxy damage over time
H.AdjustLoseBreath(10) //30 Oxy damage over time
H.apply_damage(18, BRUTE, "head", sharp =1, edge =1, used_weapon = "scissors")
var/turf/location = get_turf(H)
if(istype(location, /turf/simulated))
@@ -138,8 +138,8 @@
affected_mob.setStaminaLoss(0)
var/status = CANSTUN | CANWEAKEN | CANPARALYSE
affected_mob.status_flags &= ~status
affected_mob.dizziness = max(0, affected_mob.dizziness-10)
affected_mob.drowsyness = max(0, affected_mob.drowsyness-10)
affected_mob.AdjustDizzy(-10)
affected_mob.AdjustDrowsy(-10)
affected_mob.SetSleeping(0)
stage = 1
switch(progenitor.hunger)
@@ -181,4 +181,4 @@
affected_mob.adjustBruteLoss(5)
if(ismob(progenitor.loc))
progenitor.hunger++
progenitor.hunger++
@@ -116,7 +116,7 @@
if(H.get_item_by_slot(slot_head) == src)
if(H.internal)
return
H.losebreath += 1
H.AdjustLoseBreath(1)
else
storage_slots = 7
processing_objects.Remove(src)
+153 -163
View File
@@ -27,131 +27,132 @@
max_w_class = 2
max_combined_w_class = 14
examine(mob/user)
if(..(user, 1))
to_chat(user, text("The service panel is [src.open ? "open" : "closed"]."))
/obj/item/weapon/storage/secure/examine(mob/user)
if(..(user, 1))
to_chat(user, text("The service panel is [open ? "open" : "closed"]."))
attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(locked)
if((istype(W, /obj/item/weapon/melee/energy/blade)) && (!src.emagged))
emag_act(user, W)
/obj/item/weapon/storage/secure/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
if(locked)
if((istype(W, /obj/item/weapon/melee/energy/blade)) && (!emagged))
emag_act(user, W)
if(istype(W, /obj/item/weapon/screwdriver))
if(do_after(user, 20, target = src))
src.open =! src.open
user.show_message(text("\blue You [] the service panel.", (src.open ? "open" : "close")))
return
if((istype(W, /obj/item/device/multitool)) && (src.open == 1)&& (!src.l_hacking))
user.show_message(text("\red Now attempting to reset internal memory, please hold."), 1)
src.l_hacking = 1
if(do_after(usr, 100, target = src))
if(prob(40))
src.l_setshort = 1
src.l_set = 0
user.show_message(text("\red Internal memory reset. Please give it a few seconds to reinitialize."), 1)
sleep(80)
src.l_setshort = 0
src.l_hacking = 0
else
user.show_message(text("\red Unable to reset internal memory."), 1)
src.l_hacking = 0
else src.l_hacking = 0
return
//At this point you have exhausted all the special things to do when locked
// ... but it's still locked.
if(istype(W, /obj/item/weapon/screwdriver))
if(do_after(user, 20, target = src))
open = !open
user.show_message("<span class='notice'>You [open ? "open" : "close"] the service panel.</span>", 1)
return
// -> storage/attackby() what with handle insertion, etc
..()
emag_act(user as mob, weapon as obj)
if(!emagged)
emagged = 1
src.overlays += image('icons/obj/storage.dmi', icon_sparking)
sleep(6)
src.overlays = null
overlays += image('icons/obj/storage.dmi', icon_locking)
locked = 0
if(istype(weapon, /obj/item/weapon/melee/energy/blade))
var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread()
spark_system.set_up(5, 0, src.loc)
spark_system.start()
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
to_chat(user, "You slice through the lock on [src].")
else
to_chat(user, "You short out the lock on [src].")
return
MouseDrop(over_object, src_location, over_location)
if(locked)
src.add_fingerprint(usr)
return
..()
attack_self(mob/user as mob)
user.set_machine(src)
var/dat = text("<TT><B>[]</B><BR>\n\nLock Status: []",src, (src.locked ? "LOCKED" : "UNLOCKED"))
var/message = "Code"
if((src.l_set == 0) && (!src.emagged) && (!src.l_setshort))
dat += text("<p>\n<b>5-DIGIT PASSCODE NOT SET.<br>ENTER NEW PASSCODE.</b>")
if(src.emagged)
dat += text("<p>\n<font color=red><b>LOCKING SYSTEM ERROR - 1701</b></font>")
if(src.l_setshort)
dat += text("<p>\n<font color=red><b>ALERT: MEMORY SYSTEM ERROR - 6040 201</b></font>")
message = text("[]", src.code)
if(!src.locked)
message = "*****"
dat += {"<HR>\n>[message]<BR>\n
<A href='?src=[UID()];type=1'>1</A>-
<A href='?src=[UID()];type=2'>2</A>-
<A href='?src=[UID()];type=3'>3</A><BR>\n
<A href='?src=[UID()];type=4'>4</A>-
<A href='?src=[UID()];type=5'>5</A>-
<A href='?src=[UID()];type=6'>6</A><BR>\n
<A href='?src=[UID()];type=7'>7</A>-
<A href='?src=[UID()];type=8'>8</A>-
<A href='?src=[UID()];type=9'>9</A><BR>\n
<A href='?src=[UID()];type=R'>R</A>-
<A href='?src=[UID()];type=0'>0</A>-
<A href='?src=[UID()];type=E'>E</A><BR>\n</TT>"}
user << browse(dat, "window=caselock;size=300x280")
Topic(href, href_list)
..()
if((usr.stat || usr.restrained()) || (get_dist(src, usr) > 1))
return
if(href_list["type"])
if(href_list["type"] == "E")
if((src.l_set == 0) && (length(src.code) == 5) && (!src.l_setshort) && (src.code != "ERROR"))
src.l_code = src.code
src.l_set = 1
else if((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1))
src.locked = 0
src.overlays = null
overlays += image('icons/obj/storage.dmi', icon_opened)
src.code = null
if((istype(W, /obj/item/device/multitool)) && (open == 1) && (!l_hacking))
user.show_message("<span class='danger'>Now attempting to reset internal memory, please hold.</span>", 1)
l_hacking = 1
if(do_after(usr, 100, target = src))
if(prob(40))
l_setshort = 1
l_set = 0
user.show_message("<span class='danger'>Internal memory reset. Please give it a few seconds to reinitialize.</span>", 1)
sleep(80)
l_setshort = 0
l_hacking = 0
else
src.code = "ERROR"
else
if((href_list["type"] == "R") && (src.emagged == 0) && (!src.l_setshort))
src.locked = 1
src.overlays = null
src.code = null
src.close(usr)
else
src.code += text("[]", href_list["type"])
if(length(src.code) > 5)
src.code = "ERROR"
src.add_fingerprint(usr)
for(var/mob/M in viewers(1, src.loc))
if((M.client && M.machine == src))
src.attack_self(M)
return
user.show_message("<span class='danger'>Unable to reset internal memory.</span>", 1)
l_hacking = 0
else
l_hacking = 0
return
//At this point you have exhausted all the special things to do when locked
// ... but it's still locked.
return
return ..()
/obj/item/weapon/storage/secure/emag_act(user as mob, weapon as obj)
if(!emagged)
emagged = 1
overlays += image('icons/obj/storage.dmi', icon_sparking)
sleep(6)
overlays = null
overlays += image('icons/obj/storage.dmi', icon_locking)
locked = 0
if(istype(weapon, /obj/item/weapon/melee/energy/blade))
var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread()
spark_system.set_up(5, 0, src.loc)
spark_system.start()
playsound(loc, 'sound/weapons/blade1.ogg', 50, 1)
playsound(loc, "sparks", 50, 1)
to_chat(user, "You slice through the lock on [src].")
else
to_chat(user, "You short out the lock on [src].")
return
/obj/item/weapon/storage/secure/MouseDrop(over_object, src_location, over_location)
if(locked)
add_fingerprint(usr)
to_chat(usr, "<span class='warning'>It's locked!</span>")
return 0
..()
/obj/item/weapon/storage/secure/attack_self(mob/user as mob)
user.set_machine(src)
var/dat = text("<TT><B>[]</B><BR>\n\nLock Status: []", src, (locked ? "LOCKED" : "UNLOCKED"))
var/message = "Code"
if((l_set == 0) && (!emagged) && (!l_setshort))
dat += text("<p>\n<b>5-DIGIT PASSCODE NOT SET.<br>ENTER NEW PASSCODE.</b>")
if(emagged)
dat += text("<p>\n<font color=red><b>LOCKING SYSTEM ERROR - 1701</b></font>")
if(l_setshort)
dat += text("<p>\n<font color=red><b>ALERT: MEMORY SYSTEM ERROR - 6040 201</b></font>")
message = text("[]", code)
if(!locked)
message = "*****"
dat += {"<HR>\n>[message]<BR>\n
<A href='?src=[UID()];type=1'>1</A>-
<A href='?src=[UID()];type=2'>2</A>-
<A href='?src=[UID()];type=3'>3</A><BR>\n
<A href='?src=[UID()];type=4'>4</A>-
<A href='?src=[UID()];type=5'>5</A>-
<A href='?src=[UID()];type=6'>6</A><BR>\n
<A href='?src=[UID()];type=7'>7</A>-
<A href='?src=[UID()];type=8'>8</A>-
<A href='?src=[UID()];type=9'>9</A><BR>\n
<A href='?src=[UID()];type=R'>R</A>-
<A href='?src=[UID()];type=0'>0</A>-
<A href='?src=[UID()];type=E'>E</A><BR>\n</TT>"}
user << browse(dat, "window=caselock;size=300x280")
/obj/item/weapon/storage/secure/Topic(href, href_list)
..()
if(usr.incapacitated() || (get_dist(src, usr) > 1))
return
if(href_list["type"])
if(href_list["type"] == "E")
if((l_set == 0) && (length(code) == 5) && (!l_setshort) && (code != "ERROR"))
l_code = code
l_set = 1
else if((code == l_code) && (emagged == 0) && (l_set == 1))
locked = 0
overlays = null
overlays += image('icons/obj/storage.dmi', icon_opened)
code = null
else
code = "ERROR"
else
if((href_list["type"] == "R") && (emagged == 0) && (!l_setshort))
locked = 1
overlays = null
code = null
close(usr)
else
code += text("[]", href_list["type"])
if(length(code) > 5)
code = "ERROR"
add_fingerprint(usr)
for(var/mob/M in viewers(1, loc))
if((M.client && M.machine == src))
attack_self(M)
return
return
/obj/item/weapon/storage/secure/can_be_inserted(obj/item/W as obj, stop_messages = 0)
if(!locked)
return ..()
@@ -160,8 +161,10 @@
return 0
/obj/item/weapon/storage/secure/hear_talk(mob/living/M as mob, msg)
return
/obj/item/weapon/storage/secure/hear_message(mob/living/M as mob, msg)
return
// -----------------------------
// Secure Briefcase
@@ -174,7 +177,7 @@
item_state = "sec-case"
flags = CONDUCT
hitsound = "swing_hit"
force = 8.0
force = 8
throw_speed = 2
throw_range = 4
w_class = 4
@@ -182,36 +185,36 @@
max_combined_w_class = 21
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
New()
..()
new /obj/item/weapon/paper(src)
new /obj/item/weapon/pen(src)
/obj/item/weapon/storage/secure/briefcase/New()
..()
handle_item_insertion(new /obj/item/weapon/paper, 1)
handle_item_insertion(new /obj/item/weapon/pen, 1)
attack_hand(mob/user as mob)
if((src.loc == user) && (src.locked == 1))
to_chat(usr, "\red [src] is locked and cannot be opened!")
else if((src.loc == user) && (!src.locked))
playsound(src.loc, "rustle", 50, 1, -5)
if(user.s_active)
user.s_active.close(user) //Close and re-open
src.show_to(user)
else
..()
for(var/mob/M in range(1))
if(M.s_active == src)
src.close(M)
src.orient2hud(user)
src.add_fingerprint(user)
return
/obj/item/weapon/storage/secure/briefcase/attack_hand(mob/user as mob)
if((loc == user) && (locked == 1))
to_chat(usr, "<span class='warning'>[src] is locked and cannot be opened!</span>")
else if((loc == user) && !locked)
playsound(loc, "rustle", 50, 1, -5)
if(user.s_active)
user.s_active.close(user) //Close and re-open
show_to(user)
else
..()
for(var/mob/M in range(1))
if(M.s_active == src)
close(M)
orient2hud(user)
add_fingerprint(user)
return
//Syndie variant of Secure Briefcase. Contains space cash, slightly more robust.
/obj/item/weapon/storage/secure/briefcase/syndie
force = 15.0
force = 15
/obj/item/weapon/storage/secure/briefcase/syndie/New()
..()
for(var/i = 0, i < storage_slots - 2, i++)
new /obj/item/weapon/spacecash/c1000(src)
return ..()
handle_item_insertion(new /obj/item/weapon/spacecash/c1000, 1)
// -----------------------------
// Secure Safe
@@ -224,30 +227,17 @@
icon_opened = "safe0"
icon_locking = "safeb"
icon_sparking = "safespark"
force = 8.0
force = 8
w_class = 5
max_w_class = 8
anchored = 1.0
anchored = 1
density = 0
cant_hold = list("/obj/item/weapon/storage/secure/briefcase")
New()
..()
new /obj/item/weapon/paper(src)
new /obj/item/weapon/pen(src)
attack_hand(mob/user as mob)
return attack_self(user)
// Clown planet WMD storage
/obj/item/weapon/storage/secure/safe/clown
name="WMD Storage"
/obj/item/weapon/storage/secure/safe/clown/New()
for(var/i=0;i<10;i++)
new /obj/item/weapon/reagent_containers/food/snacks/pie(src)
/obj/item/weapon/storage/secure/safe/HoS/New()
/obj/item/weapon/storage/secure/safe/New()
..()
//new /obj/item/weapon/storage/lockbox/clusterbang(src) This item is currently broken... and probably shouldnt exist to begin with (even though it's cool)
handle_item_insertion(new /obj/item/weapon/paper, 1)
handle_item_insertion(new /obj/item/weapon/pen, 1)
/obj/item/weapon/storage/secure/safe/attack_hand(mob/user as mob)
return attack_self(user)