diff --git a/code/datums/supplypacks/recreation.dm b/code/datums/supplypacks/recreation.dm index d87746b4b1..ad02db99b6 100644 --- a/code/datums/supplypacks/recreation.dm +++ b/code/datums/supplypacks/recreation.dm @@ -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" diff --git a/code/datums/wires/mines.dm b/code/datums/wires/mines.dm index 8fccfc1dfc..17fbf884a8 100644 --- a/code/datums/wires/mines.dm +++ b/code/datums/wires/mines.dm @@ -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) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 996a3beae4..5bc7ab3280 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -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 diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 2764416930..a1fd979f0e 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -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 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 12a84374d6..6fe9b7ead1 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -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() diff --git a/code/game/objects/items/weapons/grenades/projectile.dm b/code/game/objects/items/weapons/grenades/projectile.dm index b70896e173..4eace0436b 100644 --- a/code/game/objects/items/weapons/grenades/projectile.dm +++ b/code/game/objects/items/weapons/grenades/projectile.dm @@ -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 diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm index 3496c58a05..5e725b076c 100644 --- a/code/game/objects/structures/crates_lockers/closets/fitness.dm +++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm @@ -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) diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index b068847354..36c5deed9d 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -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?" diff --git a/code/modules/awaymissions/redgate.dm b/code/modules/awaymissions/redgate.dm index 92b156dd40..ea85d5a1de 100644 --- a/code/modules/awaymissions/redgate.dm +++ b/code/modules/awaymissions/redgate.dm @@ -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! diff --git a/code/modules/clothing/suits/lasertag.dm b/code/modules/clothing/suits/lasertag.dm new file mode 100644 index 0000000000..ceeb6b1191 --- /dev/null +++ b/code/modules/clothing/suits/lasertag.dm @@ -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) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index dde928f2a7..cf4b11fc50 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -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 */ diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 0cd99c4a76..bf20d6064a 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -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 diff --git a/code/modules/projectiles/guns/lasertag.dm b/code/modules/projectiles/guns/lasertag.dm new file mode 100644 index 0000000000..5e8ec95219 --- /dev/null +++ b/code/modules/projectiles/guns/lasertag.dm @@ -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) + ..() diff --git a/code/modules/projectiles/guns/toy.dm b/code/modules/projectiles/guns/toy.dm index 2c83e1804a..af57e68e36 100644 --- a/code/modules/projectiles/guns/toy.dm +++ b/code/modules/projectiles/guns/toy.dm @@ -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 diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index fc126b9733..84bd369141 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -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' diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 9190a5b912..b795cda81a 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -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. diff --git a/icons/inventory/suit/item.dmi b/icons/inventory/suit/item.dmi index 6fa3388435..697158b979 100644 Binary files a/icons/inventory/suit/item.dmi and b/icons/inventory/suit/item.dmi differ diff --git a/icons/inventory/suit/mob.dmi b/icons/inventory/suit/mob.dmi index e4dd7b9c06..de37568bcc 100644 Binary files a/icons/inventory/suit/mob.dmi and b/icons/inventory/suit/mob.dmi differ diff --git a/icons/mob/items/lefthand_melee.dmi b/icons/mob/items/lefthand_melee.dmi index bc4ea4cdc3..3d59ea8cbb 100644 Binary files a/icons/mob/items/lefthand_melee.dmi and b/icons/mob/items/lefthand_melee.dmi differ diff --git a/icons/mob/items/lefthand_suits.dmi b/icons/mob/items/lefthand_suits.dmi index 301bbc3ff3..7ad63767b6 100644 Binary files a/icons/mob/items/lefthand_suits.dmi and b/icons/mob/items/lefthand_suits.dmi differ diff --git a/icons/mob/items/righthand_melee.dmi b/icons/mob/items/righthand_melee.dmi index a9e83e3046..4ee4c80b96 100644 Binary files a/icons/mob/items/righthand_melee.dmi and b/icons/mob/items/righthand_melee.dmi differ diff --git a/icons/mob/items/righthand_suits.dmi b/icons/mob/items/righthand_suits.dmi index 83c7e7b777..c7e4ddf3c4 100644 Binary files a/icons/mob/items/righthand_suits.dmi and b/icons/mob/items/righthand_suits.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 23ca616c02..0de9032e73 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/maps/redgate/laserdome.dmm b/maps/redgate/laserdome.dmm index 21e33b85f8..594b14f6ac 100644 --- a/maps/redgate/laserdome.dmm +++ b/maps/redgate/laserdome.dmm @@ -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{ diff --git a/vorestation.dme b/vorestation.dme index bbfb2526df..901a4e88ce 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -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"