mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-19 03:55:11 +01:00
Merge branch 'master' of https://github.com/tgstation/-tg-station into goodbyedeadspace
Conflicts: code/game/mecha/mecha.dm
This commit is contained in:
@@ -111,6 +111,7 @@
|
||||
|
||||
|
||||
/obj/structure/alien/resin/attack_alien(mob/user)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if(islarva(user))
|
||||
return
|
||||
user.visible_message("<span class='danger'>[user] claws at the resin!</span>")
|
||||
@@ -122,6 +123,7 @@
|
||||
|
||||
|
||||
/obj/structure/alien/resin/attackby(obj/item/I, mob/user)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
health -= I.force
|
||||
playsound(loc, 'sound/effects/attackblob.ogg', 100, 1)
|
||||
healthcheck()
|
||||
@@ -196,6 +198,7 @@
|
||||
|
||||
|
||||
/obj/structure/alien/weeds/attackby(obj/item/I, mob/user)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if(I.attack_verb.len)
|
||||
visible_message("<span class='danger'>[src] has been [pick(I.attack_verb)] with [I] by [user].</span>")
|
||||
else
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
keyslot2 = new /obj/item/device/encryptionkey/headset_service
|
||||
|
||||
/obj/item/device/radio/headset/headset_cent
|
||||
name = "centcom headset"
|
||||
name = "\improper Centcom headset"
|
||||
desc = "A headset used by the upper echelons of Nanotrasen. Channels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science."
|
||||
icon_state = "cent_headset"
|
||||
item_state = "headset"
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
recording = 0
|
||||
update_icon()
|
||||
else
|
||||
usr << "<span class='notice'The tape is full.</span>"
|
||||
usr << "<span class='notice'>The tape is full.</span>"
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/verb/stop()
|
||||
|
||||
@@ -4,6 +4,7 @@ Miscellaneous traitor devices
|
||||
|
||||
BATTERER
|
||||
|
||||
RADIOACTIVE MICROLASER
|
||||
|
||||
*/
|
||||
|
||||
@@ -56,6 +57,90 @@ effective or pretty fucking useless.
|
||||
if(times_used >= max_uses)
|
||||
icon_state = "battererburnt"
|
||||
|
||||
/*
|
||||
The radioactive microlaser, a device disguised as a health analyzer used to irradiate people.
|
||||
|
||||
The strength of the radiation is determined by the 'intensity' setting, while the delay between
|
||||
the scan and the irradiation kicking in is determined by the wavelength.
|
||||
|
||||
Each scan will cause the microlaser to have a brief cooldown period. Higher intensity will increase
|
||||
the cooldown, while higher wavelength will decrease it.
|
||||
|
||||
Wavelength is also slightly increased by the intensity as well.
|
||||
*/
|
||||
|
||||
/obj/item/device/rad_laser
|
||||
name = "health analyzer"
|
||||
icon_state = "health"
|
||||
item_state = "analyzer"
|
||||
desc = "A hand-held body scanner able to distinguish vital signs of the subject. A strange microlaser is hooked on to the scanning end."
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = 1.0
|
||||
throw_speed = 3
|
||||
throw_range = 7
|
||||
m_amt = 400
|
||||
origin_tech = "magnets=3;biotech=5;syndicate=3"
|
||||
var/intensity = 5 // how much damage the radiation does
|
||||
var/wavelength = 10 // time it takes for the radiation to kick in, in seconds
|
||||
var/used = 0 // is it cooling down?
|
||||
|
||||
/obj/item/device/rad_laser/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
if(!used)
|
||||
..()
|
||||
user.visible_message(text("<span class='notice'>[] has analyzed []'s vitals.</span>", user, M))
|
||||
var/cooldown = round(max(100,(((intensity*8)-(wavelength/2))+(intensity*2))*10))
|
||||
used = 1
|
||||
icon_state = "health1"
|
||||
handle_cooldown(cooldown) // splits off to handle the cooldown while handling wavelength
|
||||
spawn((wavelength+(intensity*4))*10)
|
||||
if(M)
|
||||
if(intensity >= 5)
|
||||
M.apply_effect(round(intensity/1.5), PARALYZE)
|
||||
M.apply_effect(intensity*10, IRRADIATE)
|
||||
else
|
||||
user << "<span class='danger'>The radioactive microlaser is still recharging.</span>"
|
||||
|
||||
/obj/item/device/rad_laser/proc/handle_cooldown(var/cooldown)
|
||||
spawn(cooldown)
|
||||
used = 0
|
||||
icon_state = "health"
|
||||
|
||||
/obj/item/device/rad_laser/attack_self(mob/user as mob)
|
||||
..()
|
||||
interact(user)
|
||||
|
||||
/obj/item/device/rad_laser/interact(mob/user as mob)
|
||||
user.set_machine(src)
|
||||
|
||||
var/cooldown = round(max(10,((intensity*8)-(wavelength/2))+(intensity*2)))
|
||||
var/dat = {"
|
||||
Radiation Intensity: <A href='?src=\ref[src];radint=-5'>-</A><A href='?src=\ref[src];radint=-1'>-</A> [intensity] <A href='?src=\ref[src];radint=1'>+</A><A href='?src=\ref[src];radint=5'>+</A><BR>
|
||||
Radiation Wavelength: <A href='?src=\ref[src];radwav=-5'>-</A><A href='?src=\ref[src];radwav=-1'>-</A> [(wavelength+(intensity*4))] <A href='?src=\ref[src];radwav=1'>+</A><A href='?src=\ref[src];radwav=5'>+</A><BR>
|
||||
Laser Cooldown: [cooldown] Seconds<BR>
|
||||
"}
|
||||
|
||||
var/datum/browser/popup = new(user, "radlaser", "Radioactive Microlaser Interface", 400, 240)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
|
||||
/obj/item/device/rad_laser/Topic(href, href_list)
|
||||
if(!usr.canUseTopic(src))
|
||||
return 1
|
||||
|
||||
usr.set_machine(src)
|
||||
|
||||
if(href_list["radint"])
|
||||
var/amount = text2num(href_list["radint"])
|
||||
amount += intensity
|
||||
intensity = max(1,(min(10,amount)))
|
||||
|
||||
else if(href_list["radwav"])
|
||||
var/amount = text2num(href_list["radwav"])
|
||||
amount += wavelength
|
||||
wavelength = max(1,(min(120,amount)))
|
||||
|
||||
updateUsrDialog()
|
||||
add_fingerprint(usr)
|
||||
return
|
||||
@@ -31,7 +31,7 @@
|
||||
update_icon()
|
||||
return
|
||||
else if(istype(O, /obj/item/weapon))
|
||||
user.changeNext_move(8)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
var/obj/item/weapon/W = O
|
||||
if(src.smashed || src.localopened)
|
||||
if(localopened)
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
|
||||
|
||||
/obj/structure/displaycase/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
user.changeNext_move(8)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
src.health -= W.force
|
||||
src.healthcheck()
|
||||
..()
|
||||
@@ -76,7 +76,7 @@
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/structure/displaycase/attack_hand(mob/user as mob)
|
||||
user.changeNext_move(8)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if (src.destroyed && src.occupied)
|
||||
new /obj/item/weapon/gun/energy/laser/captain( src.loc )
|
||||
user << "\b You deactivate the hover field built into the case."
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
attack_hand(user)
|
||||
|
||||
/obj/structure/grille/attack_hand(mob/user as mob)
|
||||
user.changeNext_move(8)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
playsound(loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
user.visible_message("<span class='warning'>[user] hits [src].</span>", \
|
||||
"<span class='warning'>You hit [src].</span>", \
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
/obj/structure/grille/attack_alien(mob/user as mob)
|
||||
if(istype(user, /mob/living/carbon/alien/larva)) return
|
||||
user.changeNext_move(8)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
playsound(loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
user.visible_message("<span class='warning'>[user] mangles [src].</span>", \
|
||||
"<span class='warning'>You mangle [src].</span>", \
|
||||
@@ -54,7 +54,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/grille/attack_slime(mob/living/carbon/slime/user as mob)
|
||||
user.changeNext_move(8)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if(!user.is_adult) return
|
||||
|
||||
playsound(loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
@@ -67,7 +67,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/grille/attack_animal(var/mob/living/simple_animal/M as mob)
|
||||
M.changeNext_move(8)
|
||||
M.changeNext_move(CLICK_CD_MELEE)
|
||||
if(M.melee_damage_upper == 0) return
|
||||
|
||||
playsound(loc, 'sound/effects/grillehit.ogg', 80, 1)
|
||||
@@ -100,7 +100,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/grille/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
user.changeNext_move(8)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
add_fingerprint(user)
|
||||
if(istype(W, /obj/item/weapon/wirecutters))
|
||||
if(!shock(user, 100))
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
|
||||
/obj/structure/lamarr/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
user.changeNext_move(8)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
src.health -= W.force
|
||||
src.healthcheck()
|
||||
..()
|
||||
@@ -71,7 +71,7 @@
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/structure/lamarr/attack_hand(mob/user as mob)
|
||||
user.changeNext_move(8)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
if (src.destroyed)
|
||||
return
|
||||
else
|
||||
|
||||
@@ -521,6 +521,8 @@
|
||||
|
||||
if(istype(mover) && mover.checkpass(PASSTABLE))
|
||||
return 1
|
||||
if(locate(/obj/structure/table) in get_turf(mover))
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
@@ -559,16 +561,16 @@
|
||||
if (istype(I, /obj/item/weapon/wrench))
|
||||
table_destroy(2, user)
|
||||
return
|
||||
|
||||
|
||||
if (istype(I, /obj/item/weapon/storage/bag/tray))
|
||||
var/obj/item/weapon/storage/bag/tray/T = I
|
||||
if(T.contents.len > 0) // If the tray isn't empty
|
||||
var/list/obj/item/oldContents = T.contents.Copy()
|
||||
T.quick_empty()
|
||||
|
||||
|
||||
for(var/obj/item/C in oldContents)
|
||||
C.loc = src.loc
|
||||
|
||||
|
||||
user.visible_message("<span class='notice'>[user] empties [I] on [src].</span>")
|
||||
return
|
||||
// If the tray IS empty, continue on (tray will be placed on the table like other items)
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
R.add_fingerprint(user)
|
||||
qdel(src)
|
||||
else
|
||||
user.changeNext_move(8)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
user.visible_message("<span class='notice'>[user] knocks on [src].</span>")
|
||||
add_fingerprint(user)
|
||||
playsound(loc, 'sound/effects/Glasshit.ogg', 50, 1)
|
||||
@@ -122,7 +122,7 @@
|
||||
/obj/structure/window/proc/attack_generic(mob/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime
|
||||
if(!can_be_reached(user))
|
||||
return
|
||||
user.changeNext_move(8)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
health -= damage
|
||||
if(health <= 0)
|
||||
user.visible_message("<span class='danger'>[user] smashes through [src]!</span>")
|
||||
@@ -191,7 +191,7 @@
|
||||
qdel(src)
|
||||
else
|
||||
if(I.damtype == BRUTE || I.damtype == BURN)
|
||||
user.changeNext_move(8)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
hit(I.force)
|
||||
if(health <= 7)
|
||||
anchored = 0
|
||||
|
||||
Reference in New Issue
Block a user