[MIRROR] The Great Lasertag Update (#11942)

Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-11-08 03:28:38 -07:00
committed by GitHub
parent c00a4b2acd
commit b12ada9231
25 changed files with 560 additions and 243 deletions

View File

@@ -55,18 +55,35 @@
containertype = /obj/structure/largecrate/donksoftvendor
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
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(
/obj/item/gun/energy/lasertag/red,
/obj/item/clothing/suit/redtag,
/obj/item/gun/energy/lasertag/blue,
/obj/item/clothing/suit/bluetag
/obj/item/gun/energy/lasertag/omni = 5,
/obj/item/gun/energy/lasertag/blue = 5,
/obj/item/gun/energy/lasertag/red = 5,
/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"
cost = 10
cost = 35 //You get a lot of equipment! It costs a goot bit!
/datum/supply_pack/recreation/artscrafts
name = "Arts and Crafts supplies"

View File

@@ -36,6 +36,8 @@
MI.trap = C.trap
C.trap = null
MI.trap.forceMove(MI)
for(var/wire_color in colors)
detach_assembly(wire_color) //Kick all the signallers off!
spawn(0)
qdel(C)

View File

@@ -214,6 +214,8 @@
turret_type = "normal"
req_one_access = list()
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
lethal_is_configurable = FALSE
@@ -221,9 +223,12 @@
locked = FALSE
enabled = FALSE
anchored = FALSE
//These two are used for lasertag
check_synth = FALSE
check_weapons = FALSE
///What vests we will target.
var/list/vests_to_target = list(
/obj/item/clothing/suit/lasertag/redtag,
/obj/item/clothing/suit/lasertag/bluetag,
/obj/item/clothing/suit/lasertag/omni
)
//These vars aren't used
check_access = FALSE
check_arrest = FALSE
@@ -232,17 +237,32 @@
check_all = FALSE
check_down = FALSE
/obj/machinery/porta_turret/lasertag/red
turret_type = "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
turret_type = "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)
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))
return TURRET_NOT_TARGET
@@ -252,16 +272,13 @@
if(get_dist(src, L) > 7) //if it's too far away, why bother?
return TURRET_NOT_TARGET
if(L.lying) //Don't need to stun-lock the players
return TURRET_NOT_TARGET
if(ishuman(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
return TURRET_PRIORITY_TARGET
if(istype(M.wear_suit, /obj/item/clothing/suit/bluetag) && check_weapons) // Checks if they are a blue player
return TURRET_PRIORITY_TARGET
if(is_type_in_list(M.wear_suit, vests_to_target)) // Checks if they are a red player
var/obj/item/clothing/suit/lasertag/tag_suit = M.wear_suit
if(tag_suit.lasertag_health > 0)
return TURRET_PRIORITY_TARGET
return TURRET_NOT_TARGET
/obj/machinery/porta_turret/lasertag/tgui_data(mob/user)
var/list/data = list(
@@ -318,9 +335,11 @@
//var/obj/item/ammo_casing/shottype = E.projectile_type
projectile = P
lethal_projectile = projectile
if(!lethal_projectile)
lethal_projectile = projectile
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))
icon_color = "orange"
@@ -614,7 +633,7 @@
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_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
enabled=0

View File

@@ -145,9 +145,7 @@
M.UpdateAppearance()
visible_message("\The [src.name] flashes violently before disintegrating!")
SSmotiontracker.ping(src,100)
spawn(0)
qdel(s)
qdel(src)
qdel(src)
/obj/effect/mine/stun
mineitemtype = /obj/item/mine/stun
@@ -163,9 +161,7 @@
M.Stun(30)
visible_message("\The [src.name] flashes violently before disintegrating!")
SSmotiontracker.ping(src,100)
spawn(0)
qdel(s)
qdel(src)
qdel(src)
/obj/effect/mine/n2o
mineitemtype = /obj/item/mine/n2o
@@ -179,8 +175,7 @@
target.assume_gas(GAS_N2O, 30)
visible_message("\The [src.name] detonates!")
SSmotiontracker.ping(src,100)
spawn(0)
qdel(src)
qdel(src)
/obj/effect/mine/phoron
mineitemtype = /obj/item/mine/phoron
@@ -195,8 +190,7 @@
target.hotspot_expose(1000, CELL_VOLUME)
visible_message("\The [src.name] detonates!")
SSmotiontracker.ping(src,100)
spawn(0)
qdel(src)
qdel(src)
/obj/effect/mine/kick
mineitemtype = /obj/item/mine/kick
@@ -213,9 +207,7 @@
M = E.occupant
if(istype(M))
qdel(M.client)
spawn(0)
qdel(s)
qdel(src)
qdel(src)
/obj/effect/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
visible_message("\The [src.name] detonates!")
SSmotiontracker.ping(src,100)
spawn(0)
qdel(s)
qdel(src)
qdel(src)
/obj/effect/mine/training //Name and Desc commented out so it's possible to trick people with the training mines
// name = "training mine"
@@ -252,8 +242,9 @@
triggered = TRUE
visible_message("\The [src.name]'s light flashes rapidly as it 'explodes'.")
new src.mineitemtype(get_turf(src))
spawn(0)
qdel(src)
for(var/wire_color in wires.colors)
wires.detach_assembly(wire_color) //Kick all the signallers off!
qdel(src)
/obj/effect/mine/emp
mineitemtype = /obj/item/mine/emp
@@ -268,8 +259,7 @@
visible_message("\The [src.name] flashes violently before disintegrating!")
SSmotiontracker.ping(src,100)
empulse(loc, 2, 4, 7, 10, 1) // As strong as an EMP grenade
spawn(0)
qdel(src)
qdel(src)
/obj/effect/mine/emp/camo
camo_net = TRUE
@@ -289,8 +279,7 @@
M.fire_act()
visible_message("\The [src.name] bursts into flames!")
SSmotiontracker.ping(src,100)
spawn(0)
qdel(src)
qdel(src)
/obj/effect/mine/gadget
mineitemtype = /obj/item/mine/gadget
@@ -377,8 +366,7 @@
R.trap.forceMove(R)
if(explode_now)
R.explode(user)
spawn(0)
qdel(src)
qdel(src)
/obj/item/mine/dnascramble
name = "radiation mine"
@@ -436,3 +424,65 @@
if(!(L.hovering || L.flying || L.is_incorporeal() || L.mob_size <= MOB_TINY))
return FALSE
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

View File

@@ -402,7 +402,7 @@
else
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.
var/volume = get_volume_by_throwforce_and_or_w_class()

View File

@@ -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!
P.attack_mob(M, 0, 25) //you're holding a grenade, dude!
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

View File

@@ -78,7 +78,10 @@
starts_with = list(
/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
@@ -88,7 +91,22 @@
starts_with = list(
/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
name = "red team laserdome equipment"
@@ -101,7 +119,8 @@
/obj/item/clothing/under/color/red = 3,
/obj/item/gun/energy/lasertag/red = 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
name = "blue team laserdome equipment"
@@ -114,4 +133,5 @@
/obj/item/clothing/under/color/blue = 3,
/obj/item/gun/energy/lasertag/blue = 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)

View File

@@ -70,6 +70,11 @@
desc = "A hefty wooden crate displaying the logo of Donk-Soft. It's rather heavy."
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
name = "vehicle crate"
desc = "Wulf Aeronautics says it comes in a box for the consumer's sake... How is this so light?"

View File

@@ -1533,9 +1533,9 @@
return
//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"
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"
else
return //if they're not on a team, stop!
@@ -1661,11 +1661,11 @@
return
//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"
icon_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"
icon_state = "[initial(icon_state)]_blue"
item_state = "[initial(icon_state)]_blue"
@@ -1724,9 +1724,9 @@
. = ..()
var/mob/living/carbon/human/M = user
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"
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"
else
return //if they're not on a team, stop!

View 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)

View File

@@ -8,46 +8,6 @@
// -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
*/

View File

@@ -354,6 +354,9 @@ var/list/organ_cache = list()
/obj/item/organ/proc/bruise()
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
robotic = ORGAN_ROBOT
src.status &= ~ORGAN_BROKEN

View 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)
..()

View File

@@ -266,65 +266,3 @@
to_chat(user, "The [src] vacuums in the darts!")
else
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

View File

@@ -216,15 +216,23 @@
/obj/item/projectile/beam/lasertag
name = "lasertag beam"
damage = 0
excavation_amount = 0
eyeblur = 0
excavation_amount = 0
no_attack_log = 1
damage_type = BURN
check_armour = "laser"
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
/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
icon_state = "bluelaser"
light_color = "#0066FF"
@@ -232,88 +240,25 @@
muzzle_type = /obj/effect/projectile/muzzle/laser_blue
tracer_type = /obj/effect/projectile/tracer/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
icon_state = "laser"
light_color = "#FF0D00"
hud_state = "monkey"
/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
allowed_suits = list(/obj/item/clothing/suit/lasertag/bluetag, /obj/item/clothing/suit/lasertag/omni)
/obj/item/projectile/beam/lasertag/omni//A laser tag bolt that stuns EVERYONE
icon_state = "omnilaser"
light_color = "#00C6FF"
light_color = "#AA24AF"
hud_state = "monkey"
allowed_suits = list(/obj/item/clothing/suit/lasertag)
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
tracer_type = /obj/effect/projectile/tracer/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
name = "sniper beam"
icon_state = "xray"
@@ -501,6 +446,11 @@
hud_state = "laser"
damage = 20
/obj/item/projectile/beam/rainbow/non_lethal
damage = 0
agony = 50
damage_type = HALLOSS
/obj/item/projectile/beam/sparkledog
name = "rainbow"
fire_sound = 'sound/weapons/sparkle.ogg'

View File

@@ -451,6 +451,10 @@
if(istype(T))
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)
. = ..()
var/turf/T = get_turf(loc)
@@ -485,3 +489,6 @@
var/turf/T = get_turf(loc)
if(istype(T))
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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 KiB

After

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 796 KiB

After

Width:  |  Height:  |  Size: 700 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -219,7 +219,7 @@
"cIt" = (
/obj/item/clothing/shoes/black,
/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/head/redtag,
/mob/living/carbon/human/dummy/mannequin/autoequip{
@@ -286,7 +286,7 @@
"dbA" = (
/obj/item/clothing/shoes/black,
/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/head/redtag,
/mob/living/carbon/human/dummy/mannequin/autoequip{
@@ -443,7 +443,7 @@
/obj/effect/floor_decal/corner/red/full,
/obj/item/clothing/shoes/black,
/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/head/redtag,
/mob/living/carbon/human/dummy/mannequin/autoequip{
@@ -618,7 +618,7 @@
"ghx" = (
/obj/item/clothing/shoes/black,
/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/head/bluetag,
/mob/living/carbon/human/dummy/mannequin/autoequip{
@@ -882,7 +882,7 @@
},
/obj/item/clothing/shoes/black,
/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/head/redtag,
/turf/simulated/floor/tiled/milspec,
@@ -928,7 +928,7 @@
/obj/effect/floor_decal/corner/red/full,
/obj/item/clothing/shoes/black,
/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/head/bluetag,
/mob/living/carbon/human/dummy/mannequin/autoequip{
@@ -1005,7 +1005,7 @@
"jPA" = (
/obj/item/clothing/shoes/black,
/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/head/bluetag,
/mob/living/carbon/human/dummy/mannequin/autoequip{
@@ -1034,7 +1034,7 @@
},
/obj/item/clothing/shoes/black,
/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/head/redtag,
/mob/living/carbon/human/dummy/mannequin/autoequip{
@@ -1192,7 +1192,7 @@
},
/obj/item/clothing/shoes/black,
/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/head/redtag,
/mob/living/carbon/human/dummy/mannequin/autoequip{
@@ -1587,7 +1587,7 @@
},
/obj/item/clothing/shoes/black,
/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/head/bluetag,
/mob/living/carbon/human/dummy/mannequin/autoequip{
@@ -2019,7 +2019,7 @@
"sRZ" = (
/obj/item/clothing/shoes/black,
/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/head/redtag,
/mob/living/carbon/human/dummy/mannequin/autoequip{
@@ -2136,7 +2136,7 @@
},
/obj/item/clothing/shoes/black,
/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/head/bluetag,
/mob/living/carbon/human/dummy/mannequin/autoequip{
@@ -2277,7 +2277,7 @@
},
/obj/item/clothing/shoes/black,
/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/head/bluetag,
/mob/living/carbon/human/dummy/mannequin/autoequip{
@@ -2297,7 +2297,7 @@
"uTh" = (
/obj/item/clothing/shoes/black,
/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/head/bluetag,
/mob/living/carbon/human/dummy/mannequin/autoequip{

View File

@@ -2616,6 +2616,7 @@
#include "code\modules\clothing\suits\jobs_vr.dm"
#include "code\modules\clothing\suits\labcoat.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_vr.dm"
#include "code\modules\clothing\suits\neosuits.dm"
@@ -4269,6 +4270,7 @@
#include "code\modules\projectiles\brokenguns\magnetic.dm"
#include "code\modules\projectiles\brokenguns\projectile.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\magic.dm"
#include "code\modules\projectiles\guns\modular_guns.dm"