mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-28 06:27:26 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into EXTERMINATUSPARTONE
This commit is contained in:
@@ -78,6 +78,8 @@
|
||||
playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1)
|
||||
sleep(10)
|
||||
user.put_in_hands(R)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/autopsy_scanner/attack_self(mob/user)
|
||||
var/scan_data = ""
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
attack_self(usr)
|
||||
|
||||
//Bananalamp
|
||||
obj/item/flashlight/lamp/bananalamp
|
||||
/obj/item/flashlight/lamp/bananalamp
|
||||
name = "banana lamp"
|
||||
desc = "Only a clown would think to make a ghetto banana-shaped lamp. Even has a goofy pullstring."
|
||||
icon_state = "bananalamp"
|
||||
@@ -381,4 +381,4 @@ obj/item/flashlight/lamp/bananalamp
|
||||
anchored = TRUE
|
||||
var/range = null
|
||||
unacidable = TRUE
|
||||
burn_state = LAVA_PROOF
|
||||
burn_state = LAVA_PROOF
|
||||
|
||||
@@ -168,6 +168,7 @@
|
||||
/obj/item/stack/tape_roll = 5)
|
||||
tools = list(/obj/item/screwdriver, /obj/item/wirecutters)
|
||||
time = 80
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/guitar
|
||||
name = "Guitar"
|
||||
@@ -177,6 +178,7 @@
|
||||
/obj/item/stack/tape_roll = 5)
|
||||
tools = list(/obj/item/screwdriver, /obj/item/wirecutters)
|
||||
time = 80
|
||||
category = CAT_MISC
|
||||
|
||||
/datum/crafting_recipe/eguitar
|
||||
name = "Electric Guitar"
|
||||
@@ -185,4 +187,5 @@
|
||||
/obj/item/stack/cable_coil = 6,
|
||||
/obj/item/stack/tape_roll = 5)
|
||||
tools = list(/obj/item/screwdriver, /obj/item/wirecutters)
|
||||
time = 80
|
||||
time = 80
|
||||
category = CAT_MISC
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
/obj/item/encryptionkey/binary
|
||||
name = "binary translator key"
|
||||
desc = "An encryption key for a radio headset. To access the binary channel, use :b."
|
||||
desc = "An encryption key for a radio headset. To access the binary channel, use :+."
|
||||
icon_state = "cypherkey"
|
||||
translate_binary = TRUE
|
||||
origin_tech = "syndicate=3;engineering=4;bluespace=3"
|
||||
|
||||
@@ -309,7 +309,7 @@
|
||||
/obj/item/radio/headset/attackby(obj/item/W as obj, mob/user as mob)
|
||||
user.set_machine(src)
|
||||
if(!( istype(W, /obj/item/screwdriver) || (istype(W, /obj/item/encryptionkey/ ))))
|
||||
return
|
||||
return ..()
|
||||
|
||||
if(istype(W, /obj/item/screwdriver))
|
||||
if(keyslot1 || keyslot2)
|
||||
|
||||
@@ -135,6 +135,8 @@
|
||||
return canhear_range
|
||||
|
||||
/obj/item/radio/intercom/attackby(obj/item/W as obj, mob/user as mob)
|
||||
if(istype(W, /obj/item/stack/tape_roll)) //eww
|
||||
return
|
||||
switch(buildstage)
|
||||
if(3)
|
||||
if(iswirecutter(W) && b_stat && wires.IsAllCut())
|
||||
|
||||
@@ -569,10 +569,20 @@ REAGENT SCANNER
|
||||
var/ready = TRUE // Ready to scan
|
||||
var/time_to_use = 0 // How much time remaining before next scan is available.
|
||||
var/usecharge = 750
|
||||
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/advanced
|
||||
cell_type = /obj/item/stock_parts/cell/upgraded/plus
|
||||
|
||||
/obj/item/bodyanalyzer/borg
|
||||
name = "cyborg body analyzer"
|
||||
desc = "Scan an entire body to prepare for field surgery. Consumes power for each scan."
|
||||
|
||||
/obj/item/bodyanalyzer/borg/syndicate
|
||||
scan_time = 5 SECONDS
|
||||
scan_cd = 20 SECONDS
|
||||
|
||||
/obj/item/bodyanalyzer/New()
|
||||
..()
|
||||
power_supply = new cell_type(src)
|
||||
@@ -614,29 +624,46 @@ REAGENT SCANNER
|
||||
to_chat(user, "<span class='notice'>The scanner beeps angrily at you! It's out of charge!</span>")
|
||||
playsound(user.loc, 'sound/machines/buzz-sigh.ogg', 50, 1)
|
||||
|
||||
/obj/item/bodyanalyzer/borg/attack(mob/living/M, mob/living/silicon/robot/user)
|
||||
if(user.incapacitated() || !user.Adjacent(M))
|
||||
return
|
||||
|
||||
if(!ready)
|
||||
to_chat(user, "<span class='notice'>[src] is currently recharging - [round((time_to_use - world.time) * 0.1)] seconds remaining.</span>")
|
||||
return
|
||||
|
||||
if(user.cell.charge >= usecharge)
|
||||
mobScan(M, user)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You need to recharge before you can use [src]</span>")
|
||||
|
||||
/obj/item/bodyanalyzer/proc/mobScan(mob/living/M, mob/user)
|
||||
if(ishuman(M))
|
||||
var/report = generate_printing_text(M, user)
|
||||
user.visible_message("[user] begins scanning [M] with [src].", "You begin scanning [M].")
|
||||
if(do_after(user, 100, target = M))
|
||||
if(do_after(user, scan_time, target = M))
|
||||
var/obj/item/paper/printout = new
|
||||
printout.info = report
|
||||
printout.name = "Scan report - [M.name]"
|
||||
playsound(user.loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1)
|
||||
user.put_in_hands(printout)
|
||||
time_to_use = world.time + 600
|
||||
power_supply.use(usecharge)
|
||||
time_to_use = world.time + scan_cd
|
||||
if(isrobot(user))
|
||||
var/mob/living/silicon/robot/R = user
|
||||
R.cell.use(usecharge)
|
||||
else
|
||||
power_supply.use(usecharge)
|
||||
ready = FALSE
|
||||
update_icon(TRUE)
|
||||
addtimer(CALLBACK(src, /obj/item/bodyanalyzer/.proc/setReady), 600)
|
||||
addtimer(CALLBACK(src, /obj/item/bodyanalyzer/.proc/setReady), scan_cd)
|
||||
addtimer(CALLBACK(src, /obj/item/bodyanalyzer/.proc/update_icon), 20)
|
||||
|
||||
else if(iscorgi(M) && M.stat == DEAD)
|
||||
to_chat(user, "<span class='notice'>You wonder if [M.p_they()] was a good dog. <b>[src] tells you they were the best...</b></span>") // :'(
|
||||
playsound(loc, 'sound/machines/ping.ogg', 50, 0)
|
||||
ready = FALSE
|
||||
addtimer(CALLBACK(src, /obj/item/bodyanalyzer/.proc/setReady), 600)
|
||||
time_to_use = world.time + 600
|
||||
addtimer(CALLBACK(src, /obj/item/bodyanalyzer/.proc/setReady), scan_cd)
|
||||
time_to_use = world.time + scan_cd
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Scanning error detected. Invalid specimen.</span>")
|
||||
|
||||
|
||||
@@ -205,6 +205,8 @@
|
||||
origin_tech = "syndicate=4;magnets=4"
|
||||
var/updated_icon_state = null
|
||||
var/used = FALSE
|
||||
var/obj/item/grenade/boobytrap = null
|
||||
var/mob/trapper = null
|
||||
|
||||
/obj/item/flag/chameleon/New()
|
||||
updated_icon_state = icon_state
|
||||
@@ -214,7 +216,7 @@
|
||||
if(used)
|
||||
return ..()
|
||||
|
||||
var/list/flag_types = typesof(/obj/item/flag) - list(src.type, /obj/item/flag)
|
||||
var/list/flag_types = typesof(/obj/item/flag) - list(/obj/item/flag, /obj/item/flag/chameleon, /obj/item/flag/chameleon/depot)
|
||||
var/list/flag = list()
|
||||
|
||||
for(var/flag_type in flag_types)
|
||||
@@ -236,9 +238,43 @@
|
||||
desc = chosen_flag.desc
|
||||
used = TRUE
|
||||
|
||||
/obj/item/flag/chameleon/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/grenade) && !boobytrap)
|
||||
if(user.drop_item())
|
||||
boobytrap = I
|
||||
trapper = user
|
||||
I.forceMove(src)
|
||||
to_chat(user, "<span class='notice'>You hide [I] in the [src]. It will detonate some time after the flag is lit on fire.</span>")
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
message_admins("[key_name_admin(user)] has hidden [I] in the [src] ready for detonation at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
|
||||
log_game("[key_name(user)] has hidden [I] in the [src] ready for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).")
|
||||
investigate_log("[key_name(user)] has hidden [I] in the [src] ready for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).", INVESTIGATE_BOMB)
|
||||
else if(isscrewdriver(I) && boobytrap && user == trapper)
|
||||
to_chat(user, "<span class='notice'>You remove [boobytrap] from the [src].</span>")
|
||||
boobytrap.forceMove(get_turf(src))
|
||||
boobytrap = null
|
||||
trapper = null
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/item/flag/chameleon/attackby(obj/item/W, mob/user, params)
|
||||
if(is_hot(W) && burn_state != ON_FIRE && boobytrap && trapper)
|
||||
var/turf/bombturf = get_turf(src)
|
||||
var/area/A = get_area(bombturf)
|
||||
message_admins("[key_name_admin(user)] has lit the [src] trapped with [boobytrap] by [key_name_admin(trapper)] at <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[bombturf.x];Y=[bombturf.y];Z=[bombturf.z]'>[A.name] (JMP)</a>.")
|
||||
log_game("[key_name_admin(user)] has lit the [src] trapped with [boobytrap] by [key_name_admin(trapper)] at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).")
|
||||
investigate_log("[key_name_admin(user)] has lit the [src] trapped with [boobytrap] by [key_name_admin(trapper)] at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).", INVESTIGATE_BOMB)
|
||||
..()
|
||||
|
||||
/obj/item/flag/chameleon/burn()
|
||||
explosion(loc,1,2,4,4, flame_range = 4)
|
||||
qdel(src)
|
||||
if(boobytrap)
|
||||
boobytrap.prime()
|
||||
..()
|
||||
|
||||
/obj/item/flag/chameleon/updateFlagIcon()
|
||||
icon_state = updated_icon_state
|
||||
|
||||
/obj/item/flag/chameleon/depot/New()
|
||||
..()
|
||||
boobytrap = new /obj/item/grenade/gas/plasma(src)
|
||||
@@ -28,7 +28,7 @@
|
||||
/obj/item/latexballon/proc/burst()
|
||||
if(!air_contents || icon_state != "latexballon_blow")
|
||||
return
|
||||
playsound(src, 'sound/weapons/gunshot.ogg', 100, 1)
|
||||
playsound(src, 'sound/weapons/gunshots/gunshot.ogg', 100, 1)
|
||||
icon_state = "latexballon_bursted"
|
||||
item_state = "lgloves"
|
||||
if(isliving(loc))
|
||||
|
||||
@@ -9,75 +9,76 @@
|
||||
var/icon/virtualIcon
|
||||
var/list/bulletholes = list()
|
||||
|
||||
Destroy()
|
||||
// if a target is deleted and associated with a stake, force stake to forget
|
||||
for(var/obj/structure/target_stake/T in view(3,src))
|
||||
if(T.pinned_target == src)
|
||||
T.pinned_target = null
|
||||
T.density = 1
|
||||
break
|
||||
return ..() // delete target
|
||||
/obj/item/target/Destroy()
|
||||
// if a target is deleted and associated with a stake, force stake to forget
|
||||
for(var/obj/structure/target_stake/T in view(3,src))
|
||||
if(T.pinned_target == src)
|
||||
T.pinned_target = null
|
||||
T.density = 1
|
||||
break
|
||||
return ..() // delete target
|
||||
|
||||
Move()
|
||||
..()
|
||||
// After target moves, check for nearby stakes. If associated, move to target
|
||||
for(var/obj/structure/target_stake/M in view(3,src))
|
||||
if(M.density == 0 && M.pinned_target == src)
|
||||
M.loc = loc
|
||||
/obj/item/target/Move()
|
||||
..()
|
||||
// After target moves, check for nearby stakes. If associated, move to target
|
||||
for(var/obj/structure/target_stake/M in view(3,src))
|
||||
if(M.density == 0 && M.pinned_target == src)
|
||||
M.loc = loc
|
||||
|
||||
// This may seem a little counter-intuitive but I assure you that's for a purpose.
|
||||
// Stakes are the ones that carry targets, yes, but in the stake code we set
|
||||
// a stake's density to 0 meaning it can't be pushed anymore. Instead of pushing
|
||||
// the stake now, we have to push the target.
|
||||
// This may seem a little counter-intuitive but I assure you that's for a purpose.
|
||||
// Stakes are the ones that carry targets, yes, but in the stake code we set
|
||||
// a stake's density to 0 meaning it can't be pushed anymore. Instead of pushing
|
||||
// the stake now, we have to push the target.
|
||||
|
||||
|
||||
|
||||
attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/weldingtool))
|
||||
var/obj/item/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0, user))
|
||||
overlays.Cut()
|
||||
to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.")
|
||||
return
|
||||
/obj/item/target/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/weldingtool))
|
||||
var/obj/item/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0, user))
|
||||
overlays.Cut()
|
||||
to_chat(usr, "You slice off [src]'s uneven chunks of aluminum and scorch marks.")
|
||||
return
|
||||
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
// taking pinned targets off!
|
||||
var/obj/structure/target_stake/stake
|
||||
for(var/obj/structure/target_stake/T in view(3,src))
|
||||
if(T.pinned_target == src)
|
||||
stake = T
|
||||
break
|
||||
/obj/item/target/attack_hand(mob/user as mob)
|
||||
// taking pinned targets off!
|
||||
var/obj/structure/target_stake/stake
|
||||
for(var/obj/structure/target_stake/T in view(3,src))
|
||||
if(T.pinned_target == src)
|
||||
stake = T
|
||||
break
|
||||
|
||||
if(stake)
|
||||
if(stake.pinned_target)
|
||||
stake.density = 1
|
||||
density = 0
|
||||
layer = OBJ_LAYER
|
||||
if(stake)
|
||||
if(stake.pinned_target)
|
||||
stake.density = 1
|
||||
density = 0
|
||||
layer = OBJ_LAYER
|
||||
|
||||
loc = user.loc
|
||||
if(ishuman(user))
|
||||
if(!user.get_active_hand())
|
||||
user.put_in_hands(src)
|
||||
to_chat(user, "You take the target out of the stake.")
|
||||
else
|
||||
src.loc = get_turf(user)
|
||||
loc = user.loc
|
||||
if(ishuman(user))
|
||||
if(!user.get_active_hand())
|
||||
user.put_in_hands(src)
|
||||
to_chat(user, "You take the target out of the stake.")
|
||||
else
|
||||
src.loc = get_turf(user)
|
||||
to_chat(user, "You take the target out of the stake.")
|
||||
|
||||
stake.pinned_target = null
|
||||
return
|
||||
stake.pinned_target = null
|
||||
return
|
||||
|
||||
else
|
||||
..()
|
||||
else
|
||||
..()
|
||||
|
||||
syndicate
|
||||
icon_state = "target_s"
|
||||
desc = "A shooting target that looks like a syndicate scum."
|
||||
hp = 2600 // i guess syndie targets are sturdier?
|
||||
alien
|
||||
icon_state = "target_q"
|
||||
desc = "A shooting target that looks like a xenomorphic alien."
|
||||
hp = 2350 // alium onest too kinda
|
||||
/obj/item/target/syndicate
|
||||
icon_state = "target_s"
|
||||
desc = "A shooting target that looks like a syndicate scum."
|
||||
hp = 2600 // i guess syndie targets are sturdier?
|
||||
|
||||
/obj/item/target/alien
|
||||
icon_state = "target_q"
|
||||
desc = "A shooting target that looks like a xenomorphic alien."
|
||||
hp = 2350 // alium onest too kinda
|
||||
|
||||
/obj/item/target/bullet_act(var/obj/item/projectile/Proj)
|
||||
var/p_x = Proj.p_x + pick(0,0,0,0,0,-1,1) // really ugly way of coding "sometimes offset Proj.p_x!"
|
||||
|
||||
@@ -129,7 +129,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list(
|
||||
*/
|
||||
var/global/list/datum/stack_recipe/plasteel_recipes = list(
|
||||
new /datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1),
|
||||
new /datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 10, time = 50),
|
||||
new /datum/stack_recipe("bomb assembly", /obj/machinery/syndicatebomb/empty, 3, time = 50),
|
||||
new /datum/stack_recipe("Surgery Table", /obj/machinery/optable, 5, time = 50, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1),
|
||||
new /datum/stack_recipe("Mass Driver frame", /obj/machinery/mass_driver_frame, 3, time = 50, one_per_turf = 1),
|
||||
@@ -252,6 +252,16 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list (
|
||||
new/datum/stack_recipe("cardboard cutout", /obj/item/cardboard_cutout, 5),
|
||||
)
|
||||
|
||||
/obj/item/stack/sheet/cardboard/attackby(obj/item/I, mob/user, params)
|
||||
if(istype(I, /obj/item/stamp/clown) && !istype(loc, /obj/item/storage))
|
||||
var/atom/droploc = drop_location()
|
||||
if(use(1))
|
||||
playsound(I, 'sound/items/bikehorn.ogg', 50, 1, -1)
|
||||
to_chat(user, "<span class='notice'>You stamp the cardboard! It's a clown box! Honk!</span>")
|
||||
new/obj/item/storage/box/clown(droploc) //bugfix
|
||||
else
|
||||
. = ..()
|
||||
|
||||
/obj/item/stack/sheet/cardboard //BubbleWrap
|
||||
name = "cardboard"
|
||||
desc = "Large sheets of card, like boxes folded flat."
|
||||
|
||||
@@ -273,7 +273,9 @@
|
||||
if(!istype(user) || user.incapacitated())
|
||||
to_chat(user, "<span class='warning'>You can't do that right now!</span>")
|
||||
return
|
||||
if(!in_range(src, user) || issilicon(usr))
|
||||
if(!in_range(src, user))
|
||||
return
|
||||
if(!ishuman(usr))
|
||||
return
|
||||
if(amount < 1)
|
||||
return
|
||||
|
||||
@@ -1375,7 +1375,7 @@ obj/item/toy/cards/deck/syndicate/black
|
||||
|
||||
/obj/item/toy/russian_revolver/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] quickly loads six bullets into [src]'s cylinder and points it at [user.p_their()] head before pulling the trigger! It looks like [user.p_theyre()] trying to commit suicide.</span>")
|
||||
playsound(loc, 'sound/weapons/gunshot.ogg', 50, 1)
|
||||
playsound(loc, 'sound/weapons/gunshots/gunshot_strong.ogg', 50, 1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/toy/russian_revolver/New()
|
||||
@@ -1409,7 +1409,7 @@ obj/item/toy/cards/deck/syndicate/black
|
||||
return
|
||||
else
|
||||
bullet_position = null
|
||||
playsound(src, 'sound/weapons/gunshot.ogg', 50, 1)
|
||||
playsound(src, 'sound/weapons/gunshots/gunshot_strong.ogg', 50, 1)
|
||||
user.visible_message("<span class='danger'>[src] goes off!</span>")
|
||||
user.apply_damage(200, BRUTE, "head", sharp = 1, used_weapon = "Self-inflicted gunshot wound to the head.")
|
||||
user.death()
|
||||
|
||||
@@ -87,6 +87,12 @@
|
||||
name = "bread tube"
|
||||
icon_state = "tastybread"
|
||||
|
||||
/obj/item/trash/spentcasing
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
name = "bullet casing"
|
||||
desc = "A spent bullet casing. Smells like cordite."
|
||||
icon_state = "gshell"
|
||||
|
||||
/obj/item/trash/tapetrash
|
||||
name = "old duct tape"
|
||||
icon_state = "tape"
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6)
|
||||
|
||||
/obj/item/bee_briefcase/attack_self(mob/user as mob)
|
||||
var/bees_released
|
||||
if(!bees_left)
|
||||
to_chat(user, "<span class='danger'>The lack of all and any bees at this event has been somewhat of a let-down...</span>")
|
||||
return
|
||||
@@ -69,4 +70,5 @@
|
||||
var/mob/living/simple_animal/hostile/poison/bees/syndi/B = new /mob/living/simple_animal/hostile/poison/bees/syndi(null)
|
||||
B.master_and_friends = blood_list.Copy() //Doesn't automatically add the person who opens the case, so the bees will attack the user unless they gave their blood
|
||||
B.forceMove(get_turf(user)) //RELEASE THE BEES!
|
||||
bees_left -= 5
|
||||
bees_released++
|
||||
bees_left -= bees_released
|
||||
|
||||
@@ -135,13 +135,16 @@
|
||||
var/turf/location
|
||||
if(target)
|
||||
if(!QDELETED(target))
|
||||
location = get_turf(target)
|
||||
if(istype(target, /turf/))
|
||||
location = get_turf(target) // Set the explosion location to turf if planted directly on a wall or floor
|
||||
else
|
||||
location = get_atom_on_turf(target) // Otherwise, make sure we're blowing up what's on top of the turf
|
||||
target.overlays -= image_overlay
|
||||
else
|
||||
location = get_turf(src)
|
||||
location = get_atom_on_turf(src)
|
||||
if(location)
|
||||
location.ex_act(2, target)
|
||||
explosion(location,0,0,3)
|
||||
location.ex_act(2, target)
|
||||
if(istype(target, /mob))
|
||||
var/mob/M = target
|
||||
M.gib()
|
||||
@@ -162,10 +165,13 @@
|
||||
var/turf/location
|
||||
if(target)
|
||||
if(!QDELETED(target))
|
||||
location = get_turf(target)
|
||||
if(istype(target, /turf/))
|
||||
location = get_turf(target)
|
||||
else
|
||||
location = get_atom_on_turf(target)
|
||||
target.overlays -= image_overlay
|
||||
else
|
||||
location = get_turf(src)
|
||||
location = get_atom_on_turf(src)
|
||||
if(location)
|
||||
if(target && target.density)
|
||||
var/turf/T = get_step(location, aim_dir)
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
|
||||
|
||||
|
||||
/obj/item/grenade/gas
|
||||
name = "plasma fire grenade"
|
||||
desc = "A compressed plasma grenade, used to start horrific plasma fires."
|
||||
@@ -23,9 +20,16 @@
|
||||
|
||||
/obj/item/grenade/gas/knockout
|
||||
name = "knockout grenade"
|
||||
desc = "A grenade that completely removes all air and heat from its detonation area."
|
||||
desc = "A grenade that releases pure N2O gas."
|
||||
spawn_contents = SPAWN_20C | SPAWN_N2O
|
||||
|
||||
/obj/item/grenade/gas/oxygen
|
||||
name = "oxygen grenade"
|
||||
desc = "A grenade that releases pure O2 gas."
|
||||
icon_state = "oxygen"
|
||||
spawn_contents = SPAWN_20C | SPAWN_OXYGEN
|
||||
spawn_amount = 500
|
||||
|
||||
/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"
|
||||
|
||||
@@ -796,6 +796,7 @@
|
||||
name = "Space Law"
|
||||
desc = "A set of Nanotrasen guidelines for keeping law and order on their space stations."
|
||||
icon_state = "bookSpaceLaw"
|
||||
force = 4 //advanced magistrate tactics
|
||||
author = "Nanotrasen"
|
||||
title = "Space Law"
|
||||
dat = {"
|
||||
|
||||
@@ -26,6 +26,23 @@
|
||||
playsound(src.loc, "rustle", 50, 1, -5)
|
||||
return ..()
|
||||
|
||||
/obj/item/storage/backpack/examine(mob/user)
|
||||
var/space_used = 0
|
||||
if(!..(user, 1))
|
||||
return
|
||||
for(var/obj/item/I in contents)
|
||||
space_used += I.w_class
|
||||
if(!space_used)
|
||||
to_chat(user, "<span class='notice'> [src] is empty.</span>")
|
||||
else if(space_used <= max_combined_w_class*0.6)
|
||||
to_chat(user, "<span class='notice'> [src] still has plenty of remaining space.</span>")
|
||||
else if(space_used <= max_combined_w_class*0.8)
|
||||
to_chat(user, "<span class='notice'> [src] is beginning to run out of space.</span>")
|
||||
else if(space_used < max_combined_w_class)
|
||||
to_chat(user, "<span class='notice'> [src] doesn't have much space left.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'> [src] is full.</span>")
|
||||
|
||||
/*
|
||||
* Backpack Types
|
||||
*/
|
||||
|
||||
@@ -295,6 +295,10 @@
|
||||
item_state = "military"
|
||||
max_w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
/obj/item/storage/belt/military/sst
|
||||
icon_state = "assaultbelt"
|
||||
item_state = "assault"
|
||||
|
||||
/obj/item/storage/belt/military/traitor
|
||||
name = "tool-belt"
|
||||
desc = "Can hold various tools. This model seems to have additional compartments."
|
||||
|
||||
@@ -998,6 +998,11 @@
|
||||
new /obj/item/reagent_containers/food/pill/patch/synthflesh(src)
|
||||
new /obj/item/reagent_containers/hypospray/autoinjector(src)
|
||||
|
||||
/obj/item/storage/box/clown
|
||||
name = "clown box"
|
||||
desc = "A colorful cardboard box for the clown"
|
||||
icon_state = "box_clown"
|
||||
|
||||
#undef NODESIGN
|
||||
#undef NANOTRASEN
|
||||
#undef SYNDI
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
attack_verb = list("jabbed","stabbed","ripped")
|
||||
|
||||
obj/item/wirerod
|
||||
/obj/item/wirerod
|
||||
name = "Wired rod"
|
||||
desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit."
|
||||
icon_state = "wiredrod"
|
||||
@@ -101,7 +101,7 @@ obj/item/wirerod
|
||||
materials = list(MAT_METAL=1150, MAT_GLASS=75)
|
||||
attack_verb = list("hit", "bludgeoned", "whacked", "bonked")
|
||||
|
||||
obj/item/wirerod/attackby(obj/item/I, mob/user, params)
|
||||
/obj/item/wirerod/attackby(obj/item/I, mob/user, params)
|
||||
..()
|
||||
if(istype(I, /obj/item/shard))
|
||||
var/obj/item/twohanded/spear/S = new /obj/item/twohanded/spear
|
||||
|
||||
Reference in New Issue
Block a user