[MIRROR] The Great Lasertag Update (#11942)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
@@ -55,18 +55,35 @@
|
|||||||
containertype = /obj/structure/largecrate/donksoftvendor
|
containertype = /obj/structure/largecrate/donksoftvendor
|
||||||
containername = "\improper Donk-Soft vendor crate"
|
containername = "\improper Donk-Soft vendor crate"
|
||||||
|
|
||||||
|
/datum/supply_pack/recreation/lasertag_turrets
|
||||||
|
name = "Lasertag Turrets"
|
||||||
|
desc = "A set of one lasertag turret for each faction, plus an omni turret!"
|
||||||
|
contains = list()
|
||||||
|
cost = 25 //It's all fun and games!
|
||||||
|
containertype = /obj/structure/largecrate/lasertag_turrets
|
||||||
|
containername = "Lasertag Turrets"
|
||||||
|
|
||||||
/datum/supply_pack/recreation/lasertag
|
/datum/supply_pack/recreation/lasertag
|
||||||
name = "Lasertag equipment"
|
name = "Lasertag equipment"
|
||||||
desc = "A standard set of Laser Tag equipment."
|
desc = "A standard set of Laser Tag equipment. Contains red, blue, and omni team gear."
|
||||||
contains = list(
|
contains = list(
|
||||||
/obj/item/gun/energy/lasertag/red,
|
/obj/item/gun/energy/lasertag/omni = 5,
|
||||||
/obj/item/clothing/suit/redtag,
|
/obj/item/gun/energy/lasertag/blue = 5,
|
||||||
/obj/item/gun/energy/lasertag/blue,
|
/obj/item/gun/energy/lasertag/red = 5,
|
||||||
/obj/item/clothing/suit/bluetag
|
/obj/item/clothing/suit/lasertag/omni = 5,
|
||||||
|
/obj/item/clothing/suit/lasertag/bluetag = 5,
|
||||||
|
/obj/item/clothing/suit/lasertag/redtag = 5,
|
||||||
|
/obj/item/lasertagknife = 5,
|
||||||
|
/obj/item/lasertagknife/blue = 5,
|
||||||
|
/obj/item/lasertagknife/red = 5,
|
||||||
|
/obj/item/mine/lasertag/all = 15,
|
||||||
|
/obj/item/mine/lasertag/red = 5,
|
||||||
|
/obj/item/mine/lasertag/omni = 5,
|
||||||
|
/obj/item/mine/lasertag/blue = 5
|
||||||
)
|
)
|
||||||
containertype = /obj/structure/closet/crate/ward
|
containertype = /obj/structure/closet/lasertag/omni
|
||||||
containername = "Lasertag Supplies"
|
containername = "Lasertag Supplies"
|
||||||
cost = 10
|
cost = 35 //You get a lot of equipment! It costs a goot bit!
|
||||||
|
|
||||||
/datum/supply_pack/recreation/artscrafts
|
/datum/supply_pack/recreation/artscrafts
|
||||||
name = "Arts and Crafts supplies"
|
name = "Arts and Crafts supplies"
|
||||||
|
|||||||
@@ -36,6 +36,8 @@
|
|||||||
MI.trap = C.trap
|
MI.trap = C.trap
|
||||||
C.trap = null
|
C.trap = null
|
||||||
MI.trap.forceMove(MI)
|
MI.trap.forceMove(MI)
|
||||||
|
for(var/wire_color in colors)
|
||||||
|
detach_assembly(wire_color) //Kick all the signallers off!
|
||||||
|
|
||||||
spawn(0)
|
spawn(0)
|
||||||
qdel(C)
|
qdel(C)
|
||||||
|
|||||||
@@ -214,6 +214,8 @@
|
|||||||
turret_type = "normal"
|
turret_type = "normal"
|
||||||
req_one_access = list()
|
req_one_access = list()
|
||||||
installation = /obj/item/gun/energy/lasertag/omni
|
installation = /obj/item/gun/energy/lasertag/omni
|
||||||
|
projectile = /obj/item/projectile/beam/lasertag/omni
|
||||||
|
lethal_projectile = /obj/item/projectile/beam/rainbow/non_lethal //Did you know that lasertag vests have 3x weakness to shock?
|
||||||
|
|
||||||
targetting_is_configurable = FALSE
|
targetting_is_configurable = FALSE
|
||||||
lethal_is_configurable = FALSE
|
lethal_is_configurable = FALSE
|
||||||
@@ -221,9 +223,12 @@
|
|||||||
locked = FALSE
|
locked = FALSE
|
||||||
enabled = FALSE
|
enabled = FALSE
|
||||||
anchored = FALSE
|
anchored = FALSE
|
||||||
//These two are used for lasertag
|
///What vests we will target.
|
||||||
check_synth = FALSE
|
var/list/vests_to_target = list(
|
||||||
check_weapons = FALSE
|
/obj/item/clothing/suit/lasertag/redtag,
|
||||||
|
/obj/item/clothing/suit/lasertag/bluetag,
|
||||||
|
/obj/item/clothing/suit/lasertag/omni
|
||||||
|
)
|
||||||
//These vars aren't used
|
//These vars aren't used
|
||||||
check_access = FALSE
|
check_access = FALSE
|
||||||
check_arrest = FALSE
|
check_arrest = FALSE
|
||||||
@@ -232,17 +237,32 @@
|
|||||||
check_all = FALSE
|
check_all = FALSE
|
||||||
check_down = FALSE
|
check_down = FALSE
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/porta_turret/lasertag/red
|
/obj/machinery/porta_turret/lasertag/red
|
||||||
turret_type = "red"
|
turret_type = "red"
|
||||||
installation = /obj/item/gun/energy/lasertag/red
|
installation = /obj/item/gun/energy/lasertag/red
|
||||||
check_weapons = TRUE // Used to target blue players
|
projectile = /obj/item/projectile/beam/lasertag/red
|
||||||
|
vests_to_target = list(
|
||||||
|
/obj/item/clothing/suit/lasertag/bluetag,
|
||||||
|
/obj/item/clothing/suit/lasertag/omni
|
||||||
|
)
|
||||||
|
|
||||||
/obj/machinery/porta_turret/lasertag/blue
|
/obj/machinery/porta_turret/lasertag/blue
|
||||||
turret_type = "blue"
|
turret_type = "blue"
|
||||||
installation = /obj/item/gun/energy/lasertag/blue
|
installation = /obj/item/gun/energy/lasertag/blue
|
||||||
check_synth = TRUE // Used to target red players
|
projectile = /obj/item/projectile/beam/lasertag/blue
|
||||||
|
vests_to_target = list(
|
||||||
|
/obj/item/clothing/suit/lasertag/redtag,
|
||||||
|
/obj/item/clothing/suit/lasertag/omni
|
||||||
|
)
|
||||||
|
|
||||||
|
/obj/machinery/porta_turret/lasertag/omni
|
||||||
|
turret_type = "industrial"
|
||||||
|
|
||||||
/obj/machinery/porta_turret/lasertag/assess_living(var/mob/living/L)
|
/obj/machinery/porta_turret/lasertag/assess_living(var/mob/living/L)
|
||||||
|
if(emagged) // FUCK YOU, PERISH
|
||||||
|
return L.stat ? TURRET_NOT_TARGET : TURRET_PRIORITY_TARGET //we won't be uber evil though. If you're KO'd, let's let you get back up.
|
||||||
|
|
||||||
if(!ishuman(L))
|
if(!ishuman(L))
|
||||||
return TURRET_NOT_TARGET
|
return TURRET_NOT_TARGET
|
||||||
|
|
||||||
@@ -252,16 +272,13 @@
|
|||||||
if(get_dist(src, L) > 7) //if it's too far away, why bother?
|
if(get_dist(src, L) > 7) //if it's too far away, why bother?
|
||||||
return TURRET_NOT_TARGET
|
return TURRET_NOT_TARGET
|
||||||
|
|
||||||
if(L.lying) //Don't need to stun-lock the players
|
|
||||||
return TURRET_NOT_TARGET
|
|
||||||
|
|
||||||
if(ishuman(L))
|
if(ishuman(L))
|
||||||
var/mob/living/carbon/human/M = L
|
var/mob/living/carbon/human/M = L
|
||||||
if(istype(M.wear_suit, /obj/item/clothing/suit/redtag) && check_synth) // Checks if they are a red player
|
if(is_type_in_list(M.wear_suit, vests_to_target)) // Checks if they are a red player
|
||||||
return TURRET_PRIORITY_TARGET
|
var/obj/item/clothing/suit/lasertag/tag_suit = M.wear_suit
|
||||||
|
if(tag_suit.lasertag_health > 0)
|
||||||
if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag) && check_weapons) // Checks if they are a blue player
|
return TURRET_PRIORITY_TARGET
|
||||||
return TURRET_PRIORITY_TARGET
|
return TURRET_NOT_TARGET
|
||||||
|
|
||||||
/obj/machinery/porta_turret/lasertag/tgui_data(mob/user)
|
/obj/machinery/porta_turret/lasertag/tgui_data(mob/user)
|
||||||
var/list/data = list(
|
var/list/data = list(
|
||||||
@@ -318,9 +335,11 @@
|
|||||||
//var/obj/item/ammo_casing/shottype = E.projectile_type
|
//var/obj/item/ammo_casing/shottype = E.projectile_type
|
||||||
|
|
||||||
projectile = P
|
projectile = P
|
||||||
lethal_projectile = projectile
|
if(!lethal_projectile)
|
||||||
|
lethal_projectile = projectile
|
||||||
shot_sound = initial(P.fire_sound)
|
shot_sound = initial(P.fire_sound)
|
||||||
lethal_shot_sound = shot_sound
|
if(!lethal_shot_sound)
|
||||||
|
lethal_shot_sound = shot_sound
|
||||||
|
|
||||||
if(istype(P, /obj/item/projectile/energy))
|
if(istype(P, /obj/item/projectile/energy))
|
||||||
icon_color = "orange"
|
icon_color = "orange"
|
||||||
@@ -614,7 +633,7 @@
|
|||||||
check_weapons = prob(50)
|
check_weapons = prob(50)
|
||||||
check_access = prob(20) // check_access is a pretty big deal, so it's least likely to get turned on
|
check_access = prob(20) // check_access is a pretty big deal, so it's least likely to get turned on
|
||||||
check_anomalies = prob(50)
|
check_anomalies = prob(50)
|
||||||
if(prob(5))
|
if(prob(20 * (1/severity))) //sev 1 = 20% chance sev 2 = 10% sev 3 = ~6 sev 4 = 5%
|
||||||
emagged = TRUE
|
emagged = TRUE
|
||||||
|
|
||||||
enabled=0
|
enabled=0
|
||||||
|
|||||||
@@ -145,9 +145,7 @@
|
|||||||
M.UpdateAppearance()
|
M.UpdateAppearance()
|
||||||
visible_message("\The [src.name] flashes violently before disintegrating!")
|
visible_message("\The [src.name] flashes violently before disintegrating!")
|
||||||
SSmotiontracker.ping(src,100)
|
SSmotiontracker.ping(src,100)
|
||||||
spawn(0)
|
qdel(src)
|
||||||
qdel(s)
|
|
||||||
qdel(src)
|
|
||||||
|
|
||||||
/obj/effect/mine/stun
|
/obj/effect/mine/stun
|
||||||
mineitemtype = /obj/item/mine/stun
|
mineitemtype = /obj/item/mine/stun
|
||||||
@@ -163,9 +161,7 @@
|
|||||||
M.Stun(30)
|
M.Stun(30)
|
||||||
visible_message("\The [src.name] flashes violently before disintegrating!")
|
visible_message("\The [src.name] flashes violently before disintegrating!")
|
||||||
SSmotiontracker.ping(src,100)
|
SSmotiontracker.ping(src,100)
|
||||||
spawn(0)
|
qdel(src)
|
||||||
qdel(s)
|
|
||||||
qdel(src)
|
|
||||||
|
|
||||||
/obj/effect/mine/n2o
|
/obj/effect/mine/n2o
|
||||||
mineitemtype = /obj/item/mine/n2o
|
mineitemtype = /obj/item/mine/n2o
|
||||||
@@ -179,8 +175,7 @@
|
|||||||
target.assume_gas(GAS_N2O, 30)
|
target.assume_gas(GAS_N2O, 30)
|
||||||
visible_message("\The [src.name] detonates!")
|
visible_message("\The [src.name] detonates!")
|
||||||
SSmotiontracker.ping(src,100)
|
SSmotiontracker.ping(src,100)
|
||||||
spawn(0)
|
qdel(src)
|
||||||
qdel(src)
|
|
||||||
|
|
||||||
/obj/effect/mine/phoron
|
/obj/effect/mine/phoron
|
||||||
mineitemtype = /obj/item/mine/phoron
|
mineitemtype = /obj/item/mine/phoron
|
||||||
@@ -195,8 +190,7 @@
|
|||||||
target.hotspot_expose(1000, CELL_VOLUME)
|
target.hotspot_expose(1000, CELL_VOLUME)
|
||||||
visible_message("\The [src.name] detonates!")
|
visible_message("\The [src.name] detonates!")
|
||||||
SSmotiontracker.ping(src,100)
|
SSmotiontracker.ping(src,100)
|
||||||
spawn(0)
|
qdel(src)
|
||||||
qdel(src)
|
|
||||||
|
|
||||||
/obj/effect/mine/kick
|
/obj/effect/mine/kick
|
||||||
mineitemtype = /obj/item/mine/kick
|
mineitemtype = /obj/item/mine/kick
|
||||||
@@ -213,9 +207,7 @@
|
|||||||
M = E.occupant
|
M = E.occupant
|
||||||
if(istype(M))
|
if(istype(M))
|
||||||
qdel(M.client)
|
qdel(M.client)
|
||||||
spawn(0)
|
qdel(src)
|
||||||
qdel(s)
|
|
||||||
qdel(src)
|
|
||||||
|
|
||||||
/obj/effect/mine/frag
|
/obj/effect/mine/frag
|
||||||
mineitemtype = /obj/item/mine/frag
|
mineitemtype = /obj/item/mine/frag
|
||||||
@@ -237,9 +229,7 @@
|
|||||||
src.fragmentate(O, num_fragments, spread_range, fragment_types) //only 20 weak fragments because you're stepping directly on it
|
src.fragmentate(O, num_fragments, spread_range, fragment_types) //only 20 weak fragments because you're stepping directly on it
|
||||||
visible_message("\The [src.name] detonates!")
|
visible_message("\The [src.name] detonates!")
|
||||||
SSmotiontracker.ping(src,100)
|
SSmotiontracker.ping(src,100)
|
||||||
spawn(0)
|
qdel(src)
|
||||||
qdel(s)
|
|
||||||
qdel(src)
|
|
||||||
|
|
||||||
/obj/effect/mine/training //Name and Desc commented out so it's possible to trick people with the training mines
|
/obj/effect/mine/training //Name and Desc commented out so it's possible to trick people with the training mines
|
||||||
// name = "training mine"
|
// name = "training mine"
|
||||||
@@ -252,8 +242,9 @@
|
|||||||
triggered = TRUE
|
triggered = TRUE
|
||||||
visible_message("\The [src.name]'s light flashes rapidly as it 'explodes'.")
|
visible_message("\The [src.name]'s light flashes rapidly as it 'explodes'.")
|
||||||
new src.mineitemtype(get_turf(src))
|
new src.mineitemtype(get_turf(src))
|
||||||
spawn(0)
|
for(var/wire_color in wires.colors)
|
||||||
qdel(src)
|
wires.detach_assembly(wire_color) //Kick all the signallers off!
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
/obj/effect/mine/emp
|
/obj/effect/mine/emp
|
||||||
mineitemtype = /obj/item/mine/emp
|
mineitemtype = /obj/item/mine/emp
|
||||||
@@ -268,8 +259,7 @@
|
|||||||
visible_message("\The [src.name] flashes violently before disintegrating!")
|
visible_message("\The [src.name] flashes violently before disintegrating!")
|
||||||
SSmotiontracker.ping(src,100)
|
SSmotiontracker.ping(src,100)
|
||||||
empulse(loc, 2, 4, 7, 10, 1) // As strong as an EMP grenade
|
empulse(loc, 2, 4, 7, 10, 1) // As strong as an EMP grenade
|
||||||
spawn(0)
|
qdel(src)
|
||||||
qdel(src)
|
|
||||||
|
|
||||||
/obj/effect/mine/emp/camo
|
/obj/effect/mine/emp/camo
|
||||||
camo_net = TRUE
|
camo_net = TRUE
|
||||||
@@ -289,8 +279,7 @@
|
|||||||
M.fire_act()
|
M.fire_act()
|
||||||
visible_message("\The [src.name] bursts into flames!")
|
visible_message("\The [src.name] bursts into flames!")
|
||||||
SSmotiontracker.ping(src,100)
|
SSmotiontracker.ping(src,100)
|
||||||
spawn(0)
|
qdel(src)
|
||||||
qdel(src)
|
|
||||||
|
|
||||||
/obj/effect/mine/gadget
|
/obj/effect/mine/gadget
|
||||||
mineitemtype = /obj/item/mine/gadget
|
mineitemtype = /obj/item/mine/gadget
|
||||||
@@ -377,8 +366,7 @@
|
|||||||
R.trap.forceMove(R)
|
R.trap.forceMove(R)
|
||||||
if(explode_now)
|
if(explode_now)
|
||||||
R.explode(user)
|
R.explode(user)
|
||||||
spawn(0)
|
qdel(src)
|
||||||
qdel(src)
|
|
||||||
|
|
||||||
/obj/item/mine/dnascramble
|
/obj/item/mine/dnascramble
|
||||||
name = "radiation mine"
|
name = "radiation mine"
|
||||||
@@ -436,3 +424,65 @@
|
|||||||
if(!(L.hovering || L.flying || L.is_incorporeal() || L.mob_size <= MOB_TINY))
|
if(!(L.hovering || L.flying || L.is_incorporeal() || L.mob_size <= MOB_TINY))
|
||||||
return FALSE
|
return FALSE
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
|
//Lasertag mines
|
||||||
|
|
||||||
|
/obj/effect/mine/lasertag
|
||||||
|
mineitemtype = /obj/item/mine/lasertag
|
||||||
|
var/beam_types = list(/obj/item/projectile/bullet/foam_dart_riot) // you fool, you baffoon, you used these, you absolute ignoramous, why did you not read this!
|
||||||
|
var/spread_range = 3
|
||||||
|
|
||||||
|
/obj/effect/mine/lasertag/explode(var/mob/living/M)
|
||||||
|
if(triggered) // Prevents circular mine explosions from two mines detonating eachother
|
||||||
|
return
|
||||||
|
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread()
|
||||||
|
triggered = 1
|
||||||
|
s.set_up(3, 1, src)
|
||||||
|
s.start()
|
||||||
|
var/turf/O = get_turf(src)
|
||||||
|
if(!O)
|
||||||
|
return
|
||||||
|
launch_many_projectiles(O, spread_range, beam_types)
|
||||||
|
visible_message("\The [src.name] detonates!")
|
||||||
|
qdel(src)
|
||||||
|
|
||||||
|
/obj/effect/mine/lasertag/red
|
||||||
|
mineitemtype = /obj/item/mine/lasertag/red
|
||||||
|
beam_types = list(/obj/item/projectile/beam/lasertag/red)
|
||||||
|
|
||||||
|
/obj/effect/mine/lasertag/blue
|
||||||
|
mineitemtype = /obj/item/mine/lasertag/blue
|
||||||
|
beam_types = list(/obj/item/projectile/beam/lasertag/blue)
|
||||||
|
|
||||||
|
/obj/effect/mine/lasertag/omni
|
||||||
|
mineitemtype = /obj/item/mine/lasertag/omni
|
||||||
|
beam_types = list(/obj/item/projectile/beam/lasertag/omni)
|
||||||
|
|
||||||
|
/obj/effect/mine/lasertag/all
|
||||||
|
mineitemtype = /obj/item/mine/lasertag/all
|
||||||
|
beam_types = list(/obj/item/projectile/beam/lasertag/red,/obj/item/projectile/beam/lasertag/blue,/obj/item/projectile/beam/lasertag/omni)
|
||||||
|
|
||||||
|
/obj/item/mine/lasertag
|
||||||
|
name = "lasertag mine"
|
||||||
|
desc = "A small mine with 'BOOM' written on top, and an optical hazard warning on the side."
|
||||||
|
minetype = /obj/effect/mine/lasertag
|
||||||
|
|
||||||
|
/obj/item/mine/lasertag/red
|
||||||
|
name = "red lasertag mine"
|
||||||
|
desc = "A small red mine with 'BOOM' written on top, and an optical hazard warning on the side."
|
||||||
|
minetype = /obj/effect/mine/lasertag/red
|
||||||
|
|
||||||
|
/obj/item/mine/lasertag/blue
|
||||||
|
name = "blue lasertag mine"
|
||||||
|
desc = "A small blue mine with 'BOOM' written on top, and an optical hazard warning on the side."
|
||||||
|
minetype = /obj/effect/mine/lasertag/blue
|
||||||
|
|
||||||
|
/obj/item/mine/lasertag/omni
|
||||||
|
name = "purple lasertag mine"
|
||||||
|
desc = "A small purple mine with 'BOOM' written on top, and an optical hazard warning on the side."
|
||||||
|
minetype = /obj/effect/mine/lasertag/omni
|
||||||
|
|
||||||
|
/obj/item/mine/lasertag/all
|
||||||
|
name = "chaos lasertag mine"
|
||||||
|
desc = "A small grey mine with 'BOOM' written on top, and an optical hazard warning on the side."
|
||||||
|
minetype = /obj/effect/mine/lasertag/all
|
||||||
|
|||||||
@@ -402,7 +402,7 @@
|
|||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
/obj/item/throw_impact(atom/hit_atom)
|
/obj/item/throw_impact(atom/hit_atom, var/speed)
|
||||||
..()
|
..()
|
||||||
if(isliving(hit_atom) && !hit_atom.is_incorporeal()) //Living mobs handle hit sounds differently.
|
if(isliving(hit_atom) && !hit_atom.is_incorporeal()) //Living mobs handle hit sounds differently.
|
||||||
var/volume = get_volume_by_throwforce_and_or_w_class()
|
var/volume = get_volume_by_throwforce_and_or_w_class()
|
||||||
|
|||||||
@@ -73,4 +73,4 @@
|
|||||||
else if(!M.lying && src.loc != get_turf(src)) //if it's not on the turf, it must be in the mob!
|
else if(!M.lying && src.loc != get_turf(src)) //if it's not on the turf, it must be in the mob!
|
||||||
P.attack_mob(M, 0, 25) //you're holding a grenade, dude!
|
P.attack_mob(M, 0, 25) //you're holding a grenade, dude!
|
||||||
else
|
else
|
||||||
P.attack_mob(M, 0, 100) //otherwise, allow a decent amount of fragments to pass
|
P.attack_mob(M, 0, 75) //otherwise, allow a decent amount of fragments to pass
|
||||||
|
|||||||
@@ -78,7 +78,10 @@
|
|||||||
|
|
||||||
starts_with = list(
|
starts_with = list(
|
||||||
/obj/item/gun/energy/lasertag/red = 5,
|
/obj/item/gun/energy/lasertag/red = 5,
|
||||||
/obj/item/clothing/suit/redtag = 5)
|
/obj/item/clothing/suit/lasertag/redtag = 5,
|
||||||
|
/obj/item/lasertagknife/red = 5,
|
||||||
|
/obj/item/mine/lasertag/all = 5,
|
||||||
|
/obj/item/mine/lasertag/red = 5)
|
||||||
|
|
||||||
|
|
||||||
/obj/structure/closet/lasertag/blue
|
/obj/structure/closet/lasertag/blue
|
||||||
@@ -88,7 +91,22 @@
|
|||||||
|
|
||||||
starts_with = list(
|
starts_with = list(
|
||||||
/obj/item/gun/energy/lasertag/blue = 5,
|
/obj/item/gun/energy/lasertag/blue = 5,
|
||||||
/obj/item/clothing/suit/bluetag = 5)
|
/obj/item/clothing/suit/lasertag/bluetag = 5,
|
||||||
|
/obj/item/lasertagknife/blue = 5,
|
||||||
|
/obj/item/mine/lasertag/all = 5,
|
||||||
|
/obj/item/mine/lasertag/blue = 5)
|
||||||
|
|
||||||
|
/obj/structure/closet/lasertag/omni
|
||||||
|
name = "unniversal laser tag equipment"
|
||||||
|
desc = "It's a storage unit for laser tag equipment."
|
||||||
|
closet_appearance = /decl/closet_appearance/wardrobe/purple
|
||||||
|
|
||||||
|
starts_with = list(
|
||||||
|
/obj/item/gun/energy/lasertag/omni = 5,
|
||||||
|
/obj/item/clothing/suit/lasertag/omni = 5,
|
||||||
|
/obj/item/lasertagknife = 5,
|
||||||
|
/obj/item/mine/lasertag/all = 5,
|
||||||
|
/obj/item/mine/lasertag/omni = 5)
|
||||||
|
|
||||||
/obj/structure/closet/lasertag/red/laserdome
|
/obj/structure/closet/lasertag/red/laserdome
|
||||||
name = "red team laserdome equipment"
|
name = "red team laserdome equipment"
|
||||||
@@ -101,7 +119,8 @@
|
|||||||
/obj/item/clothing/under/color/red = 3,
|
/obj/item/clothing/under/color/red = 3,
|
||||||
/obj/item/gun/energy/lasertag/red = 3,
|
/obj/item/gun/energy/lasertag/red = 3,
|
||||||
/obj/item/clothing/head/redtag = 3,
|
/obj/item/clothing/head/redtag = 3,
|
||||||
/obj/item/clothing/suit/redtag = 3)
|
/obj/item/clothing/suit/lasertag/redtag = 3,
|
||||||
|
/obj/item/lasertagknife/red = 3)
|
||||||
|
|
||||||
/obj/structure/closet/lasertag/blue/laserdome
|
/obj/structure/closet/lasertag/blue/laserdome
|
||||||
name = "blue team laserdome equipment"
|
name = "blue team laserdome equipment"
|
||||||
@@ -114,4 +133,5 @@
|
|||||||
/obj/item/clothing/under/color/blue = 3,
|
/obj/item/clothing/under/color/blue = 3,
|
||||||
/obj/item/gun/energy/lasertag/blue = 3,
|
/obj/item/gun/energy/lasertag/blue = 3,
|
||||||
/obj/item/clothing/head/bluetag = 3,
|
/obj/item/clothing/head/bluetag = 3,
|
||||||
/obj/item/clothing/suit/bluetag = 3)
|
/obj/item/clothing/suit/lasertag/bluetag = 3,
|
||||||
|
/obj/item/lasertagknife/blue = 3)
|
||||||
|
|||||||
@@ -70,6 +70,11 @@
|
|||||||
desc = "A hefty wooden crate displaying the logo of Donk-Soft. It's rather heavy."
|
desc = "A hefty wooden crate displaying the logo of Donk-Soft. It's rather heavy."
|
||||||
starts_with = list(/obj/machinery/vending/donksoft)
|
starts_with = list(/obj/machinery/vending/donksoft)
|
||||||
|
|
||||||
|
/obj/structure/largecrate/lasertag_turrets
|
||||||
|
name = "lasertag turret crate"
|
||||||
|
desc = "A hefty wooden crate displaying the logo of Laz-co. It's rather heavy."
|
||||||
|
starts_with = list(/obj/machinery/porta_turret/lasertag/blue, /obj/machinery/porta_turret/lasertag/red, /obj/machinery/porta_turret/lasertag/omni)
|
||||||
|
|
||||||
/obj/structure/largecrate/vehicle
|
/obj/structure/largecrate/vehicle
|
||||||
name = "vehicle crate"
|
name = "vehicle crate"
|
||||||
desc = "Wulf Aeronautics says it comes in a box for the consumer's sake... How is this so light?"
|
desc = "Wulf Aeronautics says it comes in a box for the consumer's sake... How is this so light?"
|
||||||
|
|||||||
@@ -1533,9 +1533,9 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
//get their uniform
|
//get their uniform
|
||||||
if(istype(M.wear_suit, /obj/item/clothing/suit/redtag))
|
if(istype(M.wear_suit, /obj/item/clothing/suit/lasertag/redtag))
|
||||||
grabbing_team = "red"
|
grabbing_team = "red"
|
||||||
else if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag))
|
else if(istype(M.wear_suit, /obj/item/clothing/suit/lasertag/bluetag))
|
||||||
grabbing_team = "blue"
|
grabbing_team = "blue"
|
||||||
else
|
else
|
||||||
return //if they're not on a team, stop!
|
return //if they're not on a team, stop!
|
||||||
@@ -1661,11 +1661,11 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
//get their uniform
|
//get their uniform
|
||||||
if(istype(M.wear_suit, /obj/item/clothing/suit/redtag))
|
if(istype(M.wear_suit, /obj/item/clothing/suit/lasertag/redtag))
|
||||||
grabbing_team = "red"
|
grabbing_team = "red"
|
||||||
icon_state = "[initial(icon_state)]_red"
|
icon_state = "[initial(icon_state)]_red"
|
||||||
item_state = "[initial(icon_state)]_red"
|
item_state = "[initial(icon_state)]_red"
|
||||||
else if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag))
|
else if(istype(M.wear_suit, /obj/item/clothing/suit/lasertag/bluetag))
|
||||||
grabbing_team = "blue"
|
grabbing_team = "blue"
|
||||||
icon_state = "[initial(icon_state)]_blue"
|
icon_state = "[initial(icon_state)]_blue"
|
||||||
item_state = "[initial(icon_state)]_blue"
|
item_state = "[initial(icon_state)]_blue"
|
||||||
@@ -1724,9 +1724,9 @@
|
|||||||
. = ..()
|
. = ..()
|
||||||
var/mob/living/carbon/human/M = user
|
var/mob/living/carbon/human/M = user
|
||||||
var/dunking_team
|
var/dunking_team
|
||||||
if(istype(M.wear_suit, /obj/item/clothing/suit/redtag))
|
if(istype(M.wear_suit, /obj/item/clothing/suit/lasertag/redtag))
|
||||||
dunking_team = "red"
|
dunking_team = "red"
|
||||||
else if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag))
|
else if(istype(M.wear_suit, /obj/item/clothing/suit/lasertag/bluetag))
|
||||||
dunking_team = "blue"
|
dunking_team = "blue"
|
||||||
else
|
else
|
||||||
return //if they're not on a team, stop!
|
return //if they're not on a team, stop!
|
||||||
|
|||||||
192
code/modules/clothing/suits/lasertag.dm
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
/*
|
||||||
|
* Lasertag
|
||||||
|
*/
|
||||||
|
|
||||||
|
///DO NOT USE THIS BASE VARIANT, STUFF WILL BREAK!
|
||||||
|
/obj/item/clothing/suit/lasertag
|
||||||
|
name = "laser tag armor"
|
||||||
|
desc = "An example laser tag armor. Can not actually be used and is just for demonstrations."
|
||||||
|
icon = 'icons/inventory/suit/item.dmi'
|
||||||
|
icon_state = "omnitag"
|
||||||
|
item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_suits.dmi', slot_r_hand_str = 'icons/mob/items/righthand_suits.dmi')
|
||||||
|
item_state_slots = list(slot_r_hand_str = "tdomni", slot_l_hand_str = "tdomni")
|
||||||
|
blood_overlay_type = "armor"
|
||||||
|
body_parts_covered = UPPER_TORSO
|
||||||
|
allowed = list (/obj/item/gun/energy/lasertag)
|
||||||
|
siemens_coefficient = 3.0
|
||||||
|
description_fluff = "Laser tag armor can have its health and 'healing' time adjusted. Additionally, DonkSoft brand darts are compatible with laser tag vests, proving a projectile based alternative!"
|
||||||
|
description_antag = "Laser tag armor can be emagged, causing the user to not only have a heart attack when eliminated, but also take massive damage based on the amount of 'lives' the vest had."
|
||||||
|
|
||||||
|
var/lasertag_max_health = 3
|
||||||
|
var/lasertag_health = 3
|
||||||
|
|
||||||
|
///How long it takes for us to heal one point of health
|
||||||
|
var/time_to_heal = 10 SECONDS
|
||||||
|
|
||||||
|
///When we were last hit!
|
||||||
|
var/last_hit
|
||||||
|
|
||||||
|
///If we're emagged or not.
|
||||||
|
var/emagged
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/emag_act(remaining_charges, mob/user, emag_source)
|
||||||
|
if(!emagged)
|
||||||
|
emagged = TRUE
|
||||||
|
to_chat(user, span_warning("You disable the safeties on the lasertag vest."))
|
||||||
|
return TRUE
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/examine(mob/user)
|
||||||
|
. = ..()
|
||||||
|
. += "It currently has [lasertag_health] hits out of [lasertag_max_health] remaining!"
|
||||||
|
. += "It regenerates one hit every [time_to_heal*0.1] seconds."
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/verb/adjust_health()
|
||||||
|
set name = "Adjust Suit Health"
|
||||||
|
set category = "Object"
|
||||||
|
set src in usr
|
||||||
|
if(isliving(usr))
|
||||||
|
adjust_health_proc(usr)
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/proc/adjust_health_proc(mob/living/user)
|
||||||
|
var/max_health = 10
|
||||||
|
var/min_health = 1
|
||||||
|
var/new_health = tgui_input_number(user, "Select Suit Health (Between 1 and 10)", "Tag Health", lasertag_max_health, max_health, min_health, round_value=TRUE) //If you need to go above 10, ask admins.
|
||||||
|
if(isnull(new_health))
|
||||||
|
return null
|
||||||
|
if(new_health > max_health || new_health < min_health)
|
||||||
|
to_chat(user, span_danger("Invalid health value! Must be between [min_health] and [max_health]."))
|
||||||
|
return null
|
||||||
|
if(!Adjacent(user))
|
||||||
|
to_chat(user, span_danger("You must be adjacent to the suit to adjust its healing timer!"))
|
||||||
|
return null
|
||||||
|
lasertag_max_health = new_health
|
||||||
|
lasertag_health = lasertag_max_health
|
||||||
|
user.visible_message(user, span_notice("Set [src]'s allowed shots to [lasertag_max_health], fully healing the vest!"))
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/verb/adjust_heal_time()
|
||||||
|
set name = "Adjust Healing Timer"
|
||||||
|
set category = "Object"
|
||||||
|
set src in usr
|
||||||
|
if(isliving(usr))
|
||||||
|
adjust_heal_time_proc(usr)
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/proc/adjust_heal_time_proc(mob/living/user)
|
||||||
|
var/max_heal_time = 60
|
||||||
|
var/min_heal_time = 0
|
||||||
|
var/new_heal_timer = tgui_input_number(user, "Select Heal Timer (Between 0(off) to 60 seconds)", "Heal Timer", time_to_heal*0.1, max_heal_time, min_heal_time, round_value=TRUE) //If you need to go above 10, ask admins.
|
||||||
|
if(isnull(new_heal_timer))
|
||||||
|
return null
|
||||||
|
if(new_heal_timer > max_heal_time || new_heal_timer < min_heal_time)
|
||||||
|
to_chat(user, span_danger("Invalid health value! Must be between [min_heal_time] and [max_heal_time]."))
|
||||||
|
return null
|
||||||
|
if(!Adjacent(user))
|
||||||
|
to_chat(user, span_danger("You must be adjacent to the suit to adjust its healing timer!"))
|
||||||
|
return null
|
||||||
|
time_to_heal = (new_heal_timer*10)
|
||||||
|
if(time_to_heal)
|
||||||
|
user.visible_message(span_notice("[src]'s heal speed has been set to [new_heal_timer] seconds!"))
|
||||||
|
else
|
||||||
|
user.visible_message(span_notice("[src]'s healing function has been turned off!"))
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/dropped()
|
||||||
|
..()
|
||||||
|
STOP_PROCESSING(SSobj, src)
|
||||||
|
visible_message(span_notice("[src] is unequipped, its health going back to full!"))
|
||||||
|
lasertag_health = lasertag_max_health
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/equipped()
|
||||||
|
..()
|
||||||
|
START_PROCESSING(SSobj, src)
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/process()
|
||||||
|
if(lasertag_health >= lasertag_max_health) //If we're at or above max health(due to admemes), no need to process.
|
||||||
|
return
|
||||||
|
if(!time_to_heal) //We have healing disabled.
|
||||||
|
return
|
||||||
|
|
||||||
|
if(world.time > last_hit + time_to_heal)
|
||||||
|
if(lasertag_health < 0) //overkill protection
|
||||||
|
lasertag_health = 0
|
||||||
|
lasertag_health++
|
||||||
|
if(lasertag_health == lasertag_max_health)
|
||||||
|
if(ismob(src.loc)) //sanity check
|
||||||
|
var/mob/wearer = src.loc
|
||||||
|
to_chat(wearer, span_notice("Your [src] beeps happily as it fully recharges! You can now be hit [lasertag_health] times before you are downed!"))
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/proc/handle_hit(damage)
|
||||||
|
if(lasertag_health > 0)
|
||||||
|
if(damage)
|
||||||
|
lasertag_health -= damage
|
||||||
|
else
|
||||||
|
lasertag_health--
|
||||||
|
last_hit = world.time
|
||||||
|
if(isliving(src.loc))
|
||||||
|
var/mob/living/wearer = src.loc
|
||||||
|
|
||||||
|
if(lasertag_health > 0) //Still have HP, keep going.
|
||||||
|
wearer.visible_message(span_warning("[src] beeps as it takes a shot! [lasertag_health] shots remaining!"))
|
||||||
|
return
|
||||||
|
|
||||||
|
wearer.visible_message(span_boldwarning("[src] beeps as its health is fully depleted! [wearer] is down!"))
|
||||||
|
to_chat(wearer, span_large(span_danger("You're out!"))) //People KEEP MISSING THAT THEY'RE OUT, SO NOW THEY WON'T.
|
||||||
|
wearer.Stun(5)
|
||||||
|
wearer.Weaken(5)
|
||||||
|
// CHOMPEdit Start - The thing just to drop the ball if hit
|
||||||
|
if(istype(wearer.l_hand, /obj/item/laserdome_hyperball))
|
||||||
|
wearer.unEquip(wearer.l_hand)
|
||||||
|
if(istype(wearer.r_hand, /obj/item/laserdome_hyperball))
|
||||||
|
wearer.unEquip(wearer.r_hand)
|
||||||
|
// CHOMPEdit End
|
||||||
|
if(emagged)
|
||||||
|
to_chat(wearer, span_bolddanger(span_massive("OH GOD! YOUR HEART!"))) //this is the last thing you see before you (presumably) die.
|
||||||
|
wearer.apply_damage(lasertag_max_health*50, BURN, BP_TORSO, used_weapon = "High-Voltage Electrical Shock")
|
||||||
|
if(ishuman(wearer))
|
||||||
|
var/mob/living/carbon/human/human_wearer = wearer
|
||||||
|
var/obj/item/organ/internal/heart/H = human_wearer.internal_organs_by_name[O_HEART]
|
||||||
|
if(H)
|
||||||
|
if(H.robotic)
|
||||||
|
H.break_organ()
|
||||||
|
else
|
||||||
|
H.bruise()
|
||||||
|
if(H.damage < 15)
|
||||||
|
H.damage = 14 //Below this number we won't be KO'd from a heart attack.
|
||||||
|
return
|
||||||
|
|
||||||
|
if(lasertag_health > 0)
|
||||||
|
visible_message(span_warning("[src] beeps as its health is takes a hit! [lasertag_health] shots remaining!"))
|
||||||
|
else
|
||||||
|
visible_message(span_boldwarning("[src] beeps as its health is depleted!"))
|
||||||
|
return
|
||||||
|
|
||||||
|
visible_message(span_warning("[src] beeps - its health is already depleted!"))
|
||||||
|
return
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/bluetag
|
||||||
|
name = "blue laser tag armor"
|
||||||
|
desc = "Blue Pride, Station Wide."
|
||||||
|
icon_state = "bluetag"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "tdblue", slot_l_hand_str = "tdblue")
|
||||||
|
allowed = list (/obj/item/gun/energy/lasertag/blue)
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/redtag
|
||||||
|
name = "red laser tag armor"
|
||||||
|
desc = "Reputed to go faster."
|
||||||
|
icon_state = "redtag"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "tdred", slot_l_hand_str = "tdred")
|
||||||
|
allowed = list (/obj/item/gun/energy/lasertag/red)
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/bluetag/sub
|
||||||
|
name = "Brigader Armor"
|
||||||
|
desc = "Replica armor commonly worn by Spacer Union Brigade members from the hit series Spacer Trail. Modified for Laser Tag (Blue Team)."
|
||||||
|
icon_state = "bluetag2"
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/redtag/dom
|
||||||
|
name = "Mu'tu'bi Armor"
|
||||||
|
desc = "Replica armor commonly worn by Dominion Of Mu'tu'bi soldiers from the hit series Spacer Trail. Modified for Laser Tag (Red Team)."
|
||||||
|
icon_state = "redtag2"
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/lasertag/omni
|
||||||
|
name = "universal laser tag armour"
|
||||||
|
desc = "Laser tag armor with no allegiance. For the true renegade, or a free for all."
|
||||||
|
allowed = list (/obj/item/gun/energy/lasertag/omni)
|
||||||
@@ -8,46 +8,6 @@
|
|||||||
|
|
||||||
// -S2-note- Needs categorizing and sorting.
|
// -S2-note- Needs categorizing and sorting.
|
||||||
|
|
||||||
/*
|
|
||||||
* Lasertag
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define LASER_TAG_HEALTH 3 //how many strikes do we get?
|
|
||||||
|
|
||||||
/obj/item/clothing/suit/bluetag
|
|
||||||
name = "blue laser tag armor"
|
|
||||||
desc = "Blue Pride, Station Wide."
|
|
||||||
icon_state = "bluetag"
|
|
||||||
item_state_slots = list(slot_r_hand_str = "tdblue", slot_l_hand_str = "tdblue")
|
|
||||||
blood_overlay_type = "armor"
|
|
||||||
body_parts_covered = UPPER_TORSO
|
|
||||||
allowed = list (/obj/item/gun/energy/lasertag/blue)
|
|
||||||
siemens_coefficient = 3.0
|
|
||||||
var/lasertag_health = LASER_TAG_HEALTH
|
|
||||||
|
|
||||||
/obj/item/clothing/suit/bluetag/sub
|
|
||||||
name = "Brigader Armor"
|
|
||||||
desc = "Replica armor commonly worn by Spacer Union Brigade members from the hit series Spacer Trail. Modified for Laser Tag (Blue Team)."
|
|
||||||
icon_state = "bluetag2"
|
|
||||||
|
|
||||||
/obj/item/clothing/suit/redtag
|
|
||||||
name = "red laser tag armor"
|
|
||||||
desc = "Reputed to go faster."
|
|
||||||
icon_state = "redtag"
|
|
||||||
item_state_slots = list(slot_r_hand_str = "tdred", slot_l_hand_str = "tdred")
|
|
||||||
blood_overlay_type = "armor"
|
|
||||||
body_parts_covered = UPPER_TORSO
|
|
||||||
allowed = list (/obj/item/gun/energy/lasertag/red)
|
|
||||||
siemens_coefficient = 3.0
|
|
||||||
var/lasertag_health = LASER_TAG_HEALTH
|
|
||||||
|
|
||||||
/obj/item/clothing/suit/redtag/dom
|
|
||||||
name = "Mu'tu'bi Armor"
|
|
||||||
desc = "Replica armor commonly worn by Dominion Of Mu'tu'bi soldiers from the hit series Spacer Trail. Modified for Laser Tag (Red Team)."
|
|
||||||
icon_state = "redtag2"
|
|
||||||
|
|
||||||
#undef LASER_TAG_HEALTH
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 80s
|
* 80s
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -354,6 +354,9 @@ var/list/organ_cache = list()
|
|||||||
/obj/item/organ/proc/bruise()
|
/obj/item/organ/proc/bruise()
|
||||||
damage = max(damage, min_bruised_damage)
|
damage = max(damage, min_bruised_damage)
|
||||||
|
|
||||||
|
/obj/item/organ/proc/break_organ() //can't name this break because it's a reserved word
|
||||||
|
damage = max(damage, min_broken_damage)
|
||||||
|
|
||||||
/obj/item/organ/proc/robotize() //Being used to make robutt hearts, etc
|
/obj/item/organ/proc/robotize() //Being used to make robutt hearts, etc
|
||||||
robotic = ORGAN_ROBOT
|
robotic = ORGAN_ROBOT
|
||||||
src.status &= ~ORGAN_BROKEN
|
src.status &= ~ORGAN_BROKEN
|
||||||
|
|||||||
152
code/modules/projectiles/guns/lasertag.dm
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
/*
|
||||||
|
* Handles lasertag attacks. Anything can call this.
|
||||||
|
* Target can be a mob or a lasertag vest on the ground.
|
||||||
|
* Attacker can be null (if vest_override is set) or a human mob
|
||||||
|
* tag_damage is how much damage is dealt to the vest (defaults to 1 if no value given)
|
||||||
|
* vest_override allows attacking without wearing a vest (defaults to FALSE)
|
||||||
|
* required_vest is a list of what vests are required to have on to do damage
|
||||||
|
* allowed_suits are what vests the attack is able to deal damage to. Must be a LIST. If not passed, we assume all suits are valid targets.
|
||||||
|
* returns TRUE if damage was (theoretically) dealt. FALSE if not.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
/proc/handle_lasertag_attack(target, mob/living/carbon/human/attacker, tag_damage, vest_override, required_vest, list/allowed_suits)
|
||||||
|
//So, attacker should ALWAYS be true, but there's a problem. The code doesn't actually set 'thrower' which we used for thrown laser knives.
|
||||||
|
//Instead of this PR getting massively out of scope and refactoring throwing code, we're just going to have thrown knives do vest override.
|
||||||
|
if(vest_override || (attacker && istype(attacker) && (!required_vest || istype(attacker.wear_suit, required_vest))))
|
||||||
|
if(ishuman(target))
|
||||||
|
var/mob/living/carbon/human/human_target = target
|
||||||
|
if(!allowed_suits) //Wasn't fed a suit. Let's just affect everything.
|
||||||
|
allowed_suits = list(/obj/item/clothing/suit/lasertag)
|
||||||
|
if(is_type_in_list(human_target.wear_suit, allowed_suits))
|
||||||
|
var/obj/item/clothing/suit/lasertag/laser_suit = human_target.wear_suit
|
||||||
|
laser_suit.handle_hit(tag_damage)
|
||||||
|
return TRUE
|
||||||
|
//We allow allow demonstrations of shooting it while it's on the ground.
|
||||||
|
else if(is_type_in_list(target, allowed_suits))
|
||||||
|
var/obj/item/clothing/suit/lasertag/laser_suit = target
|
||||||
|
laser_suit.handle_hit(tag_damage)
|
||||||
|
return TRUE
|
||||||
|
if(attacker)
|
||||||
|
to_chat(attacker, span_warning("You need to be wearing your laser tag vest to use this!"))
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
/obj/item/gun/energy/lasertag
|
||||||
|
name = "omni laser tag gun"
|
||||||
|
desc = "A laser tag gun that works on all vests!"
|
||||||
|
icon = 'icons/obj/gun_toy.dmi'
|
||||||
|
item_state = "omnitag"
|
||||||
|
item_state = "retro"
|
||||||
|
origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2)
|
||||||
|
matter = list(MAT_STEEL = 2000)
|
||||||
|
projectile_type = /obj/item/projectile/beam/lasertag/omni
|
||||||
|
cell_type = /obj/item/cell/device/weapon/recharge
|
||||||
|
battery_lock = 1
|
||||||
|
var/required_vest = /obj/item/clothing/suit/lasertag/omni
|
||||||
|
///Allows firing without a vest.
|
||||||
|
var/vest_override = FALSE
|
||||||
|
|
||||||
|
/obj/item/gun/energy/lasertag/special_check(var/mob/living/carbon/human/M)
|
||||||
|
if(ishuman(M) && !vest_override)
|
||||||
|
if(!istype(M.wear_suit, required_vest))
|
||||||
|
to_chat(M, span_warning("You need to be wearing your laser tag vest!"))
|
||||||
|
return FALSE
|
||||||
|
var/obj/item/clothing/suit/lasertag/tag_vest = M.wear_suit
|
||||||
|
if(tag_vest.lasertag_health <= 0)
|
||||||
|
to_chat(M, span_warning("You're out of health!"))
|
||||||
|
return FALSE
|
||||||
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/gun/energy/lasertag/blue
|
||||||
|
icon_state = "bluetag"
|
||||||
|
item_state = "bluetag"
|
||||||
|
projectile_type = /obj/item/projectile/beam/lasertag/blue
|
||||||
|
required_vest = /obj/item/clothing/suit/lasertag/bluetag
|
||||||
|
fire_delay = 10
|
||||||
|
|
||||||
|
/obj/item/gun/energy/lasertag/blue/sub
|
||||||
|
name = "Brigader Sidearm"
|
||||||
|
desc = "A laser tag replica of the standard issue weapon for the Spacer Union Brigade from the hit series Spacer Trail (Blue Team)."
|
||||||
|
icon_state = "bluetwo"
|
||||||
|
item_state = "retro"
|
||||||
|
|
||||||
|
/obj/item/gun/energy/lasertag/red
|
||||||
|
icon_state = "redtag"
|
||||||
|
item_state = "redtag"
|
||||||
|
projectile_type = /obj/item/projectile/beam/lasertag/red
|
||||||
|
required_vest = /obj/item/clothing/suit/lasertag/redtag
|
||||||
|
fire_delay = 10
|
||||||
|
|
||||||
|
/obj/item/gun/energy/lasertag/red/dom
|
||||||
|
name = "Mu'tu'bi sidearm"
|
||||||
|
desc = "A laser tag replica of the Mu'tu'bi sidearm from the hit series Spacer Trail (Red Team)."
|
||||||
|
icon_state = "redtwo"
|
||||||
|
item_state = "retro"
|
||||||
|
|
||||||
|
/obj/item/gun/energy/lasertag/omni
|
||||||
|
icon_state = "omnitag"
|
||||||
|
item_state = "omnitag"
|
||||||
|
projectile_type = /obj/item/projectile/beam/lasertag/omni
|
||||||
|
|
||||||
|
//The lasertag knives also go here because whatever, go my bullshit explanation.
|
||||||
|
|
||||||
|
/obj/item/lasertagknife
|
||||||
|
name = "universal laser tag dagger"
|
||||||
|
desc = "Rubber knife with a glowing fancy edge. It has no team allegiance!"
|
||||||
|
icon = 'icons/obj/weapons.dmi'
|
||||||
|
icon_state = "tagknifeomni"
|
||||||
|
item_icons = list(slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi',slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi',)
|
||||||
|
item_state_slots = list(slot_r_hand_str = "tagknifeomni", slot_l_hand_str = "tagknifeomni")
|
||||||
|
item_state = null
|
||||||
|
hitsound = null
|
||||||
|
w_class = ITEMSIZE_SMALL
|
||||||
|
attackspeed = 1.2 SECONDS
|
||||||
|
attack_verb = list("patted", "tapped")
|
||||||
|
drop_sound = 'sound/items/drop/knife.ogg'
|
||||||
|
pickup_sound = 'sound/items/pickup/knife.ogg'
|
||||||
|
///The vest we have to wear to use the knife.
|
||||||
|
var/required_vest = /obj/item/clothing/suit/lasertag/omni
|
||||||
|
///If we need a vest on ourselves to use it or not.
|
||||||
|
var/vest_override = FALSE
|
||||||
|
///How much damage it does to the lasertag vest. Generally for oneshots.
|
||||||
|
var/tag_damage = 5
|
||||||
|
///What vests we are allowed to hit with the knife.
|
||||||
|
var/list/allowed_suits = list(/obj/item/clothing/suit/lasertag/bluetag, /obj/item/clothing/suit/lasertag/redtag, /obj/item/clothing/suit/lasertag/omni)
|
||||||
|
|
||||||
|
/obj/item/lasertagknife/blue
|
||||||
|
name = "blue laser tag dagger"
|
||||||
|
desc = "Rubber knife with a blue glowing fancy edge!"
|
||||||
|
icon_state = "tagknifeblue"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "tagknifeblue", slot_l_hand_str = "tagknifeblue")
|
||||||
|
required_vest = /obj/item/clothing/suit/lasertag/bluetag
|
||||||
|
allowed_suits = list(/obj/item/clothing/suit/lasertag/redtag, /obj/item/clothing/suit/lasertag/omni)
|
||||||
|
|
||||||
|
/obj/item/lasertagknife/red
|
||||||
|
name = "red laser tag dagger"
|
||||||
|
desc = "Rubber knife with a red glowing fancy edge!"
|
||||||
|
icon_state = "tagknifered"
|
||||||
|
item_state_slots = list(slot_r_hand_str = "tagknifered", slot_l_hand_str = "tagknifered")
|
||||||
|
required_vest = /obj/item/clothing/suit/lasertag/redtag
|
||||||
|
allowed_suits = list(/obj/item/clothing/suit/lasertag/bluetag, /obj/item/clothing/suit/lasertag/omni)
|
||||||
|
|
||||||
|
//We have to do this if(user) check all over the place because for some reason someone broke thrower code. Thanks.
|
||||||
|
/obj/item/lasertagknife/attack(target, mob/user)
|
||||||
|
if(user)
|
||||||
|
user.setClickCooldown(user.get_attack_speed(src))
|
||||||
|
user.do_attack_animation(target)
|
||||||
|
var/success = handle_lasertag_attack(target, user, tag_damage, vest_override, required_vest, allowed_suits)
|
||||||
|
|
||||||
|
if(success)
|
||||||
|
user.visible_message(span_danger("[target] has been zapped with [src] by [user]!"))
|
||||||
|
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1)
|
||||||
|
else
|
||||||
|
user.visible_message(span_danger("[target] has been harmlessly bonked with [src] by [user]!"))
|
||||||
|
playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
|
||||||
|
return TRUE
|
||||||
|
|
||||||
|
///go my hack
|
||||||
|
/obj/item/lasertagknife/throw_impact(atom/hit_atom, var/speed)
|
||||||
|
if(ismob(hit_atom))
|
||||||
|
//So, attacker should ALWAYS be true, but there's a problem. The code doesn't actually set 'thrower' which we used for thrown laser knives.
|
||||||
|
//Instead of this PR getting massively out of scope and refactoring throwing code, we're just going to have thrown knives do vest override.
|
||||||
|
return handle_lasertag_attack(hit_atom, thrower, tag_damage, TRUE, required_vest, allowed_suits)
|
||||||
|
..()
|
||||||
@@ -266,65 +266,3 @@
|
|||||||
to_chat(user, "The [src] vacuums in the darts!")
|
to_chat(user, "The [src] vacuums in the darts!")
|
||||||
else
|
else
|
||||||
to_chat(user, "No Donk-Soft brand foam darts detected. Aborting.")
|
to_chat(user, "No Donk-Soft brand foam darts detected. Aborting.")
|
||||||
/*
|
|
||||||
* Laser Tag
|
|
||||||
*/
|
|
||||||
/obj/item/gun/energy/lasertag
|
|
||||||
name = "laser tag gun"
|
|
||||||
desc = "Standard issue weapon of the Imperial Guard."
|
|
||||||
icon = 'icons/obj/gun_toy.dmi'
|
|
||||||
item_state = "omnitag"
|
|
||||||
item_state = "retro"
|
|
||||||
origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2)
|
|
||||||
matter = list(MAT_STEEL = 2000)
|
|
||||||
projectile_type = /obj/item/projectile/beam/lasertag/blue
|
|
||||||
cell_type = /obj/item/cell/device/weapon/recharge
|
|
||||||
battery_lock = 1
|
|
||||||
var/required_vest
|
|
||||||
recoil = 0 //it's a toy //CHOMP Edit
|
|
||||||
|
|
||||||
/obj/item/gun/energy/lasertag/special_check(var/mob/living/carbon/human/M)
|
|
||||||
if(ishuman(M))
|
|
||||||
if(!istype(M.wear_suit, required_vest))
|
|
||||||
to_chat(M, span_warning("You need to be wearing your laser tag vest!"))
|
|
||||||
return 0
|
|
||||||
return ..()
|
|
||||||
|
|
||||||
/obj/item/gun/energy/lasertag/blue
|
|
||||||
icon_state = "bluetag"
|
|
||||||
item_state = "bluetag"
|
|
||||||
projectile_type = /obj/item/projectile/beam/lasertag/blue
|
|
||||||
required_vest = /obj/item/clothing/suit/bluetag
|
|
||||||
fire_delay = 10
|
|
||||||
|
|
||||||
firemodes = list(
|
|
||||||
list(mode_name="instagib rules", fire_delay=10, projectile_type=/obj/item/projectile/beam/lasertag/blue, charge_cost = 240),
|
|
||||||
list(mode_name="multi-hit rules", fire_delay=5, projectile_type=/obj/item/projectile/beam/lasertag/blue/multihit, charge_cost = 120),
|
|
||||||
)
|
|
||||||
|
|
||||||
/obj/item/gun/energy/lasertag/blue/sub
|
|
||||||
name = "Brigader Sidearm"
|
|
||||||
desc = "A laser tag replica of the standard issue weapon for the Spacer Union Brigade from the hit series Spacer Trail (Blue Team)."
|
|
||||||
icon_state = "bluetwo"
|
|
||||||
item_state = "retro"
|
|
||||||
|
|
||||||
/obj/item/gun/energy/lasertag/red
|
|
||||||
icon_state = "redtag"
|
|
||||||
item_state = "redtag"
|
|
||||||
projectile_type = /obj/item/projectile/beam/lasertag/red
|
|
||||||
required_vest = /obj/item/clothing/suit/redtag
|
|
||||||
fire_delay = 10
|
|
||||||
|
|
||||||
firemodes = list(
|
|
||||||
list(mode_name="instagib rules", fire_delay=12, projectile_type=/obj/item/projectile/beam/lasertag/red, charge_cost = 240),
|
|
||||||
list(mode_name="multi-hit rules", fire_delay=5, projectile_type=/obj/item/projectile/beam/lasertag/red/multihit, charge_cost = 120),
|
|
||||||
)
|
|
||||||
|
|
||||||
/obj/item/gun/energy/lasertag/red/dom
|
|
||||||
name = "Mu'tu'bi sidearm"
|
|
||||||
desc = "A laser tag replica of the Mu'tu'bi sidearm from the hit series Spacer Trail (Red Team)."
|
|
||||||
icon_state = "redtwo"
|
|
||||||
item_state = "retro"
|
|
||||||
|
|
||||||
/obj/item/gun/energy/lasertag/omni
|
|
||||||
projectile_type = /obj/item/projectile/beam/lasertag/omni
|
|
||||||
|
|||||||
@@ -216,15 +216,23 @@
|
|||||||
/obj/item/projectile/beam/lasertag
|
/obj/item/projectile/beam/lasertag
|
||||||
name = "lasertag beam"
|
name = "lasertag beam"
|
||||||
damage = 0
|
damage = 0
|
||||||
excavation_amount = 0
|
|
||||||
eyeblur = 0
|
eyeblur = 0
|
||||||
|
excavation_amount = 0
|
||||||
no_attack_log = 1
|
no_attack_log = 1
|
||||||
damage_type = BURN
|
damage_type = BURN
|
||||||
check_armour = "laser"
|
check_armour = "laser"
|
||||||
hud_state = "monkey"
|
hud_state = "monkey"
|
||||||
|
///What suits this beam can hit.
|
||||||
|
var/list/allowed_suits = list(/obj/item/clothing/suit/lasertag/omni, /obj/item/clothing/suit/lasertag/bluetag, /obj/item/clothing/suit/lasertag/redtag)
|
||||||
|
|
||||||
|
///How much damage we do to the tag vest.
|
||||||
|
var/tag_damage = 1
|
||||||
|
|
||||||
combustion = FALSE
|
combustion = FALSE
|
||||||
|
|
||||||
|
/obj/item/projectile/beam/lasertag/on_hit(var/atom/target, var/blocked = 0)
|
||||||
|
return handle_lasertag_attack(target, firer, tag_damage, TRUE, allowed_suits = allowed_suits) //We can't shoot this in the first place without having the proper vest / vest_override, so we feed it vest_override = TRUE
|
||||||
|
|
||||||
/obj/item/projectile/beam/lasertag/blue
|
/obj/item/projectile/beam/lasertag/blue
|
||||||
icon_state = "bluelaser"
|
icon_state = "bluelaser"
|
||||||
light_color = "#0066FF"
|
light_color = "#0066FF"
|
||||||
@@ -232,88 +240,25 @@
|
|||||||
muzzle_type = /obj/effect/projectile/muzzle/laser_blue
|
muzzle_type = /obj/effect/projectile/muzzle/laser_blue
|
||||||
tracer_type = /obj/effect/projectile/tracer/laser_blue
|
tracer_type = /obj/effect/projectile/tracer/laser_blue
|
||||||
impact_type = /obj/effect/projectile/impact/laser_blue
|
impact_type = /obj/effect/projectile/impact/laser_blue
|
||||||
|
allowed_suits = list(/obj/item/clothing/suit/lasertag/redtag, /obj/item/clothing/suit/lasertag/omni)
|
||||||
|
|
||||||
/obj/item/projectile/beam/lasertag/blue/on_hit(var/atom/target, var/blocked = 0)
|
|
||||||
if(ishuman(target))
|
|
||||||
var/mob/living/carbon/human/M = target
|
|
||||||
if(istype(M.wear_suit, /obj/item/clothing/suit/redtag))
|
|
||||||
M.Weaken(5)
|
|
||||||
// CHOMPEdit Start - The thing just to drop the ball if hit
|
|
||||||
if(istype(M.l_hand, /obj/item/laserdome_hyperball))
|
|
||||||
M.unEquip(M.l_hand)
|
|
||||||
if(istype(M.r_hand, /obj/item/laserdome_hyperball))
|
|
||||||
M.unEquip(M.r_hand)
|
|
||||||
// CHOMPEdit End
|
|
||||||
return 1
|
|
||||||
|
|
||||||
/obj/item/projectile/beam/lasertag/blue/multhit
|
|
||||||
name = "blue multi-hit lasertag beam"
|
|
||||||
|
|
||||||
/obj/item/projectile/beam/lasertag/blue/multihit/on_hit(var/atom/target, var/blocked = 0)
|
|
||||||
if(ishuman(target))
|
|
||||||
var/mob/living/carbon/human/M = target
|
|
||||||
if(istype(M.wear_suit, /obj/item/clothing/suit/redtag))
|
|
||||||
var/obj/item/clothing/suit/redtag/S = M.wear_suit
|
|
||||||
if (S.lasertag_health <= 1)
|
|
||||||
M.Weaken(5)
|
|
||||||
to_chat(M,span_warning("You have been defeated!"))
|
|
||||||
S.lasertag_health = initial(S.lasertag_health)
|
|
||||||
else
|
|
||||||
S.lasertag_health--
|
|
||||||
to_chat(M,span_warning("Danger! You have [num2text(S.lasertag_health)] hits remaining!"))
|
|
||||||
return 1
|
|
||||||
|
|
||||||
/obj/item/projectile/beam/lasertag/red
|
/obj/item/projectile/beam/lasertag/red
|
||||||
icon_state = "laser"
|
icon_state = "laser"
|
||||||
light_color = "#FF0D00"
|
light_color = "#FF0D00"
|
||||||
hud_state = "monkey"
|
hud_state = "monkey"
|
||||||
|
allowed_suits = list(/obj/item/clothing/suit/lasertag/bluetag, /obj/item/clothing/suit/lasertag/omni)
|
||||||
/obj/item/projectile/beam/lasertag/red/on_hit(var/atom/target, var/blocked = 0)
|
|
||||||
if(ishuman(target))
|
|
||||||
var/mob/living/carbon/human/M = target
|
|
||||||
if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag))
|
|
||||||
M.Weaken(5)
|
|
||||||
// CHOMPEdit Start - The thing just to drop the ball if hit
|
|
||||||
if(istype(M.l_hand, /obj/item/laserdome_hyperball))
|
|
||||||
M.unEquip(M.l_hand)
|
|
||||||
if(istype(M.r_hand, /obj/item/laserdome_hyperball))
|
|
||||||
M.unEquip(M.r_hand)
|
|
||||||
// CHOMPEdit End
|
|
||||||
return 1
|
|
||||||
|
|
||||||
/obj/item/projectile/beam/lasertag/red/multhit
|
|
||||||
name = "red multi-hit lasertag beam"
|
|
||||||
|
|
||||||
/obj/item/projectile/beam/lasertag/red/multihit/on_hit(var/atom/target, var/blocked = 0)
|
|
||||||
if(ishuman(target))
|
|
||||||
var/mob/living/carbon/human/M = target
|
|
||||||
if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag))
|
|
||||||
var/obj/item/clothing/suit/bluetag/S = M.wear_suit
|
|
||||||
if(S.lasertag_health <= 1)
|
|
||||||
M.Weaken(5)
|
|
||||||
to_chat(M,span_warning("You have been defeated!"))
|
|
||||||
S.lasertag_health = initial(S.lasertag_health)
|
|
||||||
else
|
|
||||||
S.lasertag_health--
|
|
||||||
to_chat(M,span_warning("Danger! You have [num2text(S.lasertag_health)] hits remaining!"))
|
|
||||||
return 1
|
|
||||||
|
|
||||||
/obj/item/projectile/beam/lasertag/omni//A laser tag bolt that stuns EVERYONE
|
/obj/item/projectile/beam/lasertag/omni//A laser tag bolt that stuns EVERYONE
|
||||||
icon_state = "omnilaser"
|
icon_state = "omnilaser"
|
||||||
light_color = "#00C6FF"
|
light_color = "#AA24AF"
|
||||||
hud_state = "monkey"
|
hud_state = "monkey"
|
||||||
|
allowed_suits = list(/obj/item/clothing/suit/lasertag)
|
||||||
|
|
||||||
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
|
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
|
||||||
tracer_type = /obj/effect/projectile/tracer/laser_omni
|
tracer_type = /obj/effect/projectile/tracer/laser_omni
|
||||||
impact_type = /obj/effect/projectile/impact/laser_omni
|
impact_type = /obj/effect/projectile/impact/laser_omni
|
||||||
|
|
||||||
/obj/item/projectile/beam/lasertag/omni/on_hit(var/atom/target, var/blocked = 0)
|
|
||||||
if(ishuman(target))
|
|
||||||
var/mob/living/carbon/human/M = target
|
|
||||||
if((istype(M.wear_suit, /obj/item/clothing/suit/bluetag))||(istype(M.wear_suit, /obj/item/clothing/suit/redtag)))
|
|
||||||
M.Weaken(5)
|
|
||||||
return 1
|
|
||||||
|
|
||||||
/obj/item/projectile/beam/sniper
|
/obj/item/projectile/beam/sniper
|
||||||
name = "sniper beam"
|
name = "sniper beam"
|
||||||
icon_state = "xray"
|
icon_state = "xray"
|
||||||
@@ -501,6 +446,11 @@
|
|||||||
hud_state = "laser"
|
hud_state = "laser"
|
||||||
damage = 20
|
damage = 20
|
||||||
|
|
||||||
|
/obj/item/projectile/beam/rainbow/non_lethal
|
||||||
|
damage = 0
|
||||||
|
agony = 50
|
||||||
|
damage_type = HALLOSS
|
||||||
|
|
||||||
/obj/item/projectile/beam/sparkledog
|
/obj/item/projectile/beam/sparkledog
|
||||||
name = "rainbow"
|
name = "rainbow"
|
||||||
fire_sound = 'sound/weapons/sparkle.ogg'
|
fire_sound = 'sound/weapons/sparkle.ogg'
|
||||||
|
|||||||
@@ -451,6 +451,10 @@
|
|||||||
if(istype(T))
|
if(istype(T))
|
||||||
new /obj/item/ammo_casing/afoam_dart(get_turf(loc))
|
new /obj/item/ammo_casing/afoam_dart(get_turf(loc))
|
||||||
|
|
||||||
|
///Doesn't give a damn about what faction you're on, hits you anyway.
|
||||||
|
/obj/item/projectile/bullet/foam_dart/on_hit(var/atom/target, var/blocked = 0)
|
||||||
|
handle_lasertag_attack(target, firer, tag_damage = 1, vest_override = TRUE)
|
||||||
|
|
||||||
/obj/item/projectile/bullet/foam_dart/on_range(var/atom/A)
|
/obj/item/projectile/bullet/foam_dart/on_range(var/atom/A)
|
||||||
. = ..()
|
. = ..()
|
||||||
var/turf/T = get_turf(loc)
|
var/turf/T = get_turf(loc)
|
||||||
@@ -485,3 +489,6 @@
|
|||||||
var/turf/T = get_turf(loc)
|
var/turf/T = get_turf(loc)
|
||||||
if(istype(T))
|
if(istype(T))
|
||||||
new /obj/item/ammo_casing/afoam_dart/riot(get_turf(loc))
|
new /obj/item/ammo_casing/afoam_dart/riot(get_turf(loc))
|
||||||
|
|
||||||
|
/obj/item/projectile/bullet/foam_dart_riot/on_hit(var/atom/target, var/blocked = 0)
|
||||||
|
handle_lasertag_attack(target, firer, 5, vest_override = TRUE) //Insult to injury.
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 282 KiB After Width: | Height: | Size: 246 KiB |
|
Before Width: | Height: | Size: 796 KiB After Width: | Height: | Size: 700 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 49 KiB |
@@ -219,7 +219,7 @@
|
|||||||
"cIt" = (
|
"cIt" = (
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/red,
|
/obj/item/clothing/under/color/red,
|
||||||
/obj/item/clothing/suit/redtag,
|
/obj/item/clothing/suit/lasertag/redtag,
|
||||||
/obj/item/clothing/gloves/red,
|
/obj/item/clothing/gloves/red,
|
||||||
/obj/item/clothing/head/redtag,
|
/obj/item/clothing/head/redtag,
|
||||||
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
||||||
@@ -286,7 +286,7 @@
|
|||||||
"dbA" = (
|
"dbA" = (
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/red,
|
/obj/item/clothing/under/color/red,
|
||||||
/obj/item/clothing/suit/redtag,
|
/obj/item/clothing/suit/lasertag/redtag,
|
||||||
/obj/item/clothing/gloves/red,
|
/obj/item/clothing/gloves/red,
|
||||||
/obj/item/clothing/head/redtag,
|
/obj/item/clothing/head/redtag,
|
||||||
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
||||||
@@ -443,7 +443,7 @@
|
|||||||
/obj/effect/floor_decal/corner/red/full,
|
/obj/effect/floor_decal/corner/red/full,
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/red,
|
/obj/item/clothing/under/color/red,
|
||||||
/obj/item/clothing/suit/redtag,
|
/obj/item/clothing/suit/lasertag/redtag,
|
||||||
/obj/item/clothing/gloves/red,
|
/obj/item/clothing/gloves/red,
|
||||||
/obj/item/clothing/head/redtag,
|
/obj/item/clothing/head/redtag,
|
||||||
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
||||||
@@ -618,7 +618,7 @@
|
|||||||
"ghx" = (
|
"ghx" = (
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/blue,
|
/obj/item/clothing/under/color/blue,
|
||||||
/obj/item/clothing/suit/bluetag,
|
/obj/item/clothing/suit/lasertag/bluetag,
|
||||||
/obj/item/clothing/gloves/blue,
|
/obj/item/clothing/gloves/blue,
|
||||||
/obj/item/clothing/head/bluetag,
|
/obj/item/clothing/head/bluetag,
|
||||||
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
||||||
@@ -882,7 +882,7 @@
|
|||||||
},
|
},
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/red,
|
/obj/item/clothing/under/color/red,
|
||||||
/obj/item/clothing/suit/redtag,
|
/obj/item/clothing/suit/lasertag/redtag,
|
||||||
/obj/item/clothing/gloves/red,
|
/obj/item/clothing/gloves/red,
|
||||||
/obj/item/clothing/head/redtag,
|
/obj/item/clothing/head/redtag,
|
||||||
/turf/simulated/floor/tiled/milspec,
|
/turf/simulated/floor/tiled/milspec,
|
||||||
@@ -928,7 +928,7 @@
|
|||||||
/obj/effect/floor_decal/corner/red/full,
|
/obj/effect/floor_decal/corner/red/full,
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/blue,
|
/obj/item/clothing/under/color/blue,
|
||||||
/obj/item/clothing/suit/bluetag,
|
/obj/item/clothing/suit/lasertag/bluetag,
|
||||||
/obj/item/clothing/gloves/blue,
|
/obj/item/clothing/gloves/blue,
|
||||||
/obj/item/clothing/head/bluetag,
|
/obj/item/clothing/head/bluetag,
|
||||||
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
||||||
@@ -1005,7 +1005,7 @@
|
|||||||
"jPA" = (
|
"jPA" = (
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/blue,
|
/obj/item/clothing/under/color/blue,
|
||||||
/obj/item/clothing/suit/bluetag,
|
/obj/item/clothing/suit/lasertag/bluetag,
|
||||||
/obj/item/clothing/gloves/blue,
|
/obj/item/clothing/gloves/blue,
|
||||||
/obj/item/clothing/head/bluetag,
|
/obj/item/clothing/head/bluetag,
|
||||||
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
||||||
@@ -1034,7 +1034,7 @@
|
|||||||
},
|
},
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/red,
|
/obj/item/clothing/under/color/red,
|
||||||
/obj/item/clothing/suit/redtag,
|
/obj/item/clothing/suit/lasertag/redtag,
|
||||||
/obj/item/clothing/gloves/red,
|
/obj/item/clothing/gloves/red,
|
||||||
/obj/item/clothing/head/redtag,
|
/obj/item/clothing/head/redtag,
|
||||||
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
||||||
@@ -1192,7 +1192,7 @@
|
|||||||
},
|
},
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/red,
|
/obj/item/clothing/under/color/red,
|
||||||
/obj/item/clothing/suit/redtag,
|
/obj/item/clothing/suit/lasertag/redtag,
|
||||||
/obj/item/clothing/gloves/red,
|
/obj/item/clothing/gloves/red,
|
||||||
/obj/item/clothing/head/redtag,
|
/obj/item/clothing/head/redtag,
|
||||||
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
||||||
@@ -1587,7 +1587,7 @@
|
|||||||
},
|
},
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/blue,
|
/obj/item/clothing/under/color/blue,
|
||||||
/obj/item/clothing/suit/bluetag,
|
/obj/item/clothing/suit/lasertag/bluetag,
|
||||||
/obj/item/clothing/gloves/blue,
|
/obj/item/clothing/gloves/blue,
|
||||||
/obj/item/clothing/head/bluetag,
|
/obj/item/clothing/head/bluetag,
|
||||||
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
||||||
@@ -2019,7 +2019,7 @@
|
|||||||
"sRZ" = (
|
"sRZ" = (
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/red,
|
/obj/item/clothing/under/color/red,
|
||||||
/obj/item/clothing/suit/redtag,
|
/obj/item/clothing/suit/lasertag/redtag,
|
||||||
/obj/item/clothing/gloves/red,
|
/obj/item/clothing/gloves/red,
|
||||||
/obj/item/clothing/head/redtag,
|
/obj/item/clothing/head/redtag,
|
||||||
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
||||||
@@ -2136,7 +2136,7 @@
|
|||||||
},
|
},
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/blue,
|
/obj/item/clothing/under/color/blue,
|
||||||
/obj/item/clothing/suit/bluetag,
|
/obj/item/clothing/suit/lasertag/bluetag,
|
||||||
/obj/item/clothing/gloves/blue,
|
/obj/item/clothing/gloves/blue,
|
||||||
/obj/item/clothing/head/bluetag,
|
/obj/item/clothing/head/bluetag,
|
||||||
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
||||||
@@ -2277,7 +2277,7 @@
|
|||||||
},
|
},
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/blue,
|
/obj/item/clothing/under/color/blue,
|
||||||
/obj/item/clothing/suit/bluetag,
|
/obj/item/clothing/suit/lasertag/bluetag,
|
||||||
/obj/item/clothing/gloves/blue,
|
/obj/item/clothing/gloves/blue,
|
||||||
/obj/item/clothing/head/bluetag,
|
/obj/item/clothing/head/bluetag,
|
||||||
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
||||||
@@ -2297,7 +2297,7 @@
|
|||||||
"uTh" = (
|
"uTh" = (
|
||||||
/obj/item/clothing/shoes/black,
|
/obj/item/clothing/shoes/black,
|
||||||
/obj/item/clothing/under/color/blue,
|
/obj/item/clothing/under/color/blue,
|
||||||
/obj/item/clothing/suit/bluetag,
|
/obj/item/clothing/suit/lasertag/bluetag,
|
||||||
/obj/item/clothing/gloves/blue,
|
/obj/item/clothing/gloves/blue,
|
||||||
/obj/item/clothing/head/bluetag,
|
/obj/item/clothing/head/bluetag,
|
||||||
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
/mob/living/carbon/human/dummy/mannequin/autoequip{
|
||||||
|
|||||||
@@ -2616,6 +2616,7 @@
|
|||||||
#include "code\modules\clothing\suits\jobs_vr.dm"
|
#include "code\modules\clothing\suits\jobs_vr.dm"
|
||||||
#include "code\modules\clothing\suits\labcoat.dm"
|
#include "code\modules\clothing\suits\labcoat.dm"
|
||||||
#include "code\modules\clothing\suits\labcoat_vr.dm"
|
#include "code\modules\clothing\suits\labcoat_vr.dm"
|
||||||
|
#include "code\modules\clothing\suits\lasertag.dm"
|
||||||
#include "code\modules\clothing\suits\miscellaneous.dm"
|
#include "code\modules\clothing\suits\miscellaneous.dm"
|
||||||
#include "code\modules\clothing\suits\miscellaneous_vr.dm"
|
#include "code\modules\clothing\suits\miscellaneous_vr.dm"
|
||||||
#include "code\modules\clothing\suits\neosuits.dm"
|
#include "code\modules\clothing\suits\neosuits.dm"
|
||||||
@@ -4269,6 +4270,7 @@
|
|||||||
#include "code\modules\projectiles\brokenguns\magnetic.dm"
|
#include "code\modules\projectiles\brokenguns\magnetic.dm"
|
||||||
#include "code\modules\projectiles\brokenguns\projectile.dm"
|
#include "code\modules\projectiles\brokenguns\projectile.dm"
|
||||||
#include "code\modules\projectiles\guns\energy.dm"
|
#include "code\modules\projectiles\guns\energy.dm"
|
||||||
|
#include "code\modules\projectiles\guns\lasertag.dm"
|
||||||
#include "code\modules\projectiles\guns\launcher.dm"
|
#include "code\modules\projectiles\guns\launcher.dm"
|
||||||
#include "code\modules\projectiles\guns\magic.dm"
|
#include "code\modules\projectiles\guns\magic.dm"
|
||||||
#include "code\modules\projectiles\guns\modular_guns.dm"
|
#include "code\modules\projectiles\guns\modular_guns.dm"
|
||||||
|
|||||||